SPF/365 (98/ME/W2K/XP/Vista/7/10-32bit/Linux-Wine) -
Web Site - Images:
1
2
3
4
5
6
7
SPF/365 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/365 uses 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.
SPF/365 works Linux (Tahrpup-Ubuntu) using Wine.
REXX: While SPF/365 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 a REXX macro passing parms from command line: Command===> SPF dir2html
void spf(void) {
char *trexx = "C:\\u\\pcdos\\rexx.exe C:\\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/365
tcmd = strcompose("system ","C:\\u\\pcdos\\rexx.exe C:\\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/365.
SPF/365 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/365 Colormaps (Right click/Save as to download)
ASM
FreeBASIC
C
COBOL
HTML
JCL
MFCOBOL
PowerBASIC
RealiaCOBOL
REXX
SPF/365 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/365 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/365'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/365 Colormaps (Right click/Save as to download)
ASM
C
COBOL
FreeBASIC
HTML
JCL
MFCOBOL
PowerBASIC
RealiaCOBOL
REXX
|