SPF/SE (98/ME/W2K/XP/Vista/7) -
Web Site - Images:
1
2
3
4
5
6
7
SPF/SE by Command Technologies is an SPF style editor and file manager with a panel system and file-aid type utilities. The display appearance is flexible allowing several choices on how menus and options will look from windows GUI to the old "DOS" or "Legacy" menu style.
SPF/SE is the first SPF editor to use a built-in C interpreter which is easy to use having sufficent capability to do most macro operations. The interpreter allows you to include macro source code at run-time (put the #include statement after main function).
The interpreter minimizes variable house-keeping overhead taking a traditional string oriented approach instead of treating strings as character arrays.
The trace("on"); and MSG() functions provide feedback needed to find the bug. When the interpreter encounters an error the code is displayed with the error message just above the code.
REXX: There is a perception that SPF/SE can not work with REXX. While SPF/SE does not use REXX as it's macro language as did SPF/PC v3/4/PRO, it takes just a few lines of code call a REXX interpreter and pass/return parms.
This allows internal (data manipulation etc) and external operations (helps, ftp etc.). You could also use BASIC, Pearl, PHP, Python etc. as well.
Code shows how to call any REXX macro passing parms from command line: Command===> SPF dir2html
void spf(void) {
char *trexx = "h:\\u\\pcdos\\rexx.exe h:\\u\\spfpc40\\macros\\";
char *tcmd;
int i;
strcat(trexx,argv[1]); //Get Name of REXX macro to execute passed from Edit command line
strcat(trexx,".spf "); //Could leave this off or change to REX/CMD etc.
i = 2;
while (i < argc) { strcat(trexx,StrCompose(" ",argv[i])); ++i; }//wend
tcmd = strcompose("system NOBATCH NOSTOP ",trexx); //Build OS Command
spfservice("cmd",tcmd); //Send it to OS
}//spf
Code to call REXX macro passing it the name of the edit file: Command===> ftpsend
//FTPSEND.SPF contains code to build FTP command sequence
void ftpsend(void){
char *tcmd;
char *tfilespec;
tfilespec = spfservice("query","filespec"); //Get filespec being edited from SPF/SE
tcmd = strcompose("system ","h:\\u\\pcdos\\rexx.exe h:\\u\\spfpc40\\macros\\ftpsend.spf ",tfilespec);
spfservice("cmd",tcmd); //Send to OS
}//ftpsend
As you can see from these two examples, it doesn't take much effort to use REXX with SPF/SE.
SPF/SE C Macros (Right click/Save as to download)
CALC.C - Pops up Windows calculator.
CHECK.C - Calls CHECK.SPF to perform syntax checking on HTML, JAVA and PHP code. Displays syntax error messages next to code.
DBLCLICK.C - Place cursor on keyword, double click left mouse button, info for the keyword is displayed in a window.
Requires H3.SPF and one of the help indexes listed under H3.SPF. You can use the keys (0.k) menu/primary command to set a function key to call this macro.
DBLCLICKC.C - Does the same as DBLCLICK.C - Is 100% SPFSE C. Requires x.c functions.
FTPSEND.C - Sends filespec to FTPSEND.SPF to put code/file on server. Requires FTPSEND.SPF macro.
FTPSUB.C - Sends filespec to FTPSUB.SPF to put code/file on server AND then executes the code on the server. Requires FTPSUB.SPF macro.
RDOS.C - Performs DOS command, returns results in new edit session.
SPF.C - Sends .SPF REXX code to REXX interpreter for execution.
SUB.C - Submits code to SUB.SPF for execution.
SUB2.C - Submitt edit code to system for execution. 100% SPFSE C. Requires x.c functions.
Works with ASM BAS BAT CMD CPP FTP GIF HTM HTML JBS JPG JPEG LBS PBS PDB PDF PHP PRG REX REXX VBS ZBS
NOTE: Some of these macros require use of a REXX interpreter as a REXX macro is used to do the heavy lifting (meaning I am too lazy to write the C code). See macros further down on this page.
SPF/SE Colormaps (Right click/Save as to download)
ASM
C
COBOL
HTML
JCL
MFCOBOL
PowerBASIC
RealiaCOBOL
REXX
SPF/SE Edit Profiles (Right click/Save as to download)
ASF
COM
FLI
FLV
GIF
HTM
ISO
JPEG
JPG
MP3
PDF
PNG
PPT
RAR
RPM
RTF
SWF
WAV
WMV
ZIP
SPF/SE C Functions (Right click/Save as to download) - These functions are my attempt to make writting SPF/SE macros a little easier from a die-hard REXX programmer's perspective. Usage info in header comment of macro.
X.C - Contains the following macros:
CENTER.C - Returns string centered in n pad char. char = xcenter(string,length,padchar);
COPIES.C - Returns string with n copies of string. char = xcopies(string,n);
FILESPEC.C - Returns specified parts of a fully qualified filespec. char = xfilespec(string,opt);
LASTPOS.C - Returns last col in which needle appear in haystack. int = xlastpos(needle, haystack);
LENGTH.C - Returns length of string. int = xlength(x);
LEFT.C - Returns Left chars of string padded as needed. char = xleft(string, cols, padchar);
LOWER.C - Returns string converted to all lower case. char = xlower(string);
POS.C - Returns start of needle in haystack begining at startcol. char = xpos(needle, haystack,start);
REXXSERVICE.C - Sends command to REXX interpreter, returns results. char = rexxservice(opt,string);
Example: T = rexxservice("cmd","54243.001 +2"); == "54245.001" You now have REXX math capability with SPF/SE's C interpreter and other REXX functions.
Example: T = rexxservice("cmd","XRANGE('a','z')''XRANGE('A','Z')"); == "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" .
Example: T = rexxservice("exec","filespec"); allows you to directly execute REXX code from within a C maro.
Any one line REXX command can be executed and result returned. Just be sure to use ticks ' to enclose strings in REXX command. It is not the same as having an embedded REXX interpreter but it will execute a REXX instruction and return the result. If the return string is "REXXERROR" then you had a REXX instruction syntax error.
You could write a more complex function to perform ramdom file I/O by writing a macro that accepts filespec and fseek values as parms saving the retrieved results in a file to be read by SPF/SE C macro. Who says you can't have REXX in SPF/SE?
RIGHT.C - Returns Right chars of string padded as needed. char = xright(string,cols,pad);
SPACE.C - Returns string with n fill chars between char words. char = xspace(string,padchar,padcnt,delim);
STRIP.C - Returns string with Leading/Trailing/Both chars lopped from string. char = xstrip(string,opt,stripchar);
SUBSTR.C - Returns string with from string starting at specified col for n cols with n cols padded as specified.
char = xsubstr(string,startcol,length,padchar);
TRANSLATE.C - Returns string where individual chars are translated as specified in output and input strings.
char = xtranslate(string,tableout,tablein);
TRIML.C - Returns string with n chars lopped off left end of string. char = xtriml(string,n);
TRIMR.C - Returns string with n chars lopped off right end of string. char = xtrimr(string,n);
UPPER.C - Returns string converted to all upper case. char = xupper(string);
WORD.C - Returns nth char delimited word. char = xword(string,n,delim);
WORDLENGTH.C - Returns length of n char delimited word in string. int = xwordlength(x,n,delim);
WORDPOS.C - Returns word number of matching char delimited Word after specified start word number.
int = xwordpos(word, string, start, delim);
WORDS.C - Returns number of char delimited words. int = xwords(string,delimchar);
SPF/SE Colormaps (Right click/Save as to download)
ASM
C
COBOL
HTML
JCL
MFCOBOL
PowerBASIC
RealiaCOBOL
REXX
|