!PFK.BAS - by Mike Foley / Data Control / P.O. Box 101 / Dunedin, FL 33528
!See PFKBAS.HLP for instructions.
!Works with AMOSL 1.3 - May work under 1.2 if ODTIM.SBR is available.
! or just REM out call to ODTIM.SBR & don't use it.
!
MAP1 PNAME,S,6,"PFK"
MAP1 VERSION,S,3, "1.1" !Modified 04-26-86
MAP1 ANSWER,S,24
MAP1 IN$,S,132
MAP1 S$,S,132
MAP1 D$,S,132
MAP1 OLINE,S,132
MAP1 CR,F
MAP1 LF,F
MAP1 X,F :MAP1 NEEDNULL,F
MAP1 ENDFLG,B,1
MAP1 NDO,S,24 !Next do command file name
MAP1 FILE,S,24
MAP1 DIAG,B,1 !SET TO ONE IF ON
MAP1 DEVICE,S,5
MAP1 PPN,S,10
MAP1 DSTRING,S,50
MAP1 IDATE,F
MAP1 ITIME,F
MAP1 FLAG,F,6, -1
MAP1 ODTIM'DATA,S,100
LOOKUP "PFK.WRK",RET :IF RET CALL RWRK !Get last file worked on.
REG: ? :?"PFK ";VERSION;" Preparation Helper. "
IF FILE="" FILE="NONE"
ASK: ?CHR(7);"Enter file to process into a PFK file (";FILE;") > "; :CALL WHAT
IF ANSWER="" AND FILE="NONE" CALL BACK :GOTO ASK
X=INSTR(1,ANSWER,"/A") :IF X AND FILE="" FILE=ANSWER[1,X-1]
IF X AUTO=1 :GOTO AUTO1
X=INSTR(1,ANSWER,"/D") :IF X>1 ANSWER=ANSWER[1,X-1] :DIAG=1
IF ANSWER="/D" DIAG=1 :CALL BACK :GOTO ASK
IF ANSWER="AUTO" CALL BACK :GOTO AUTO
IF ENDFLG END
IF ANSWER="DIR" GOTO DIR
IF ANSWER="?" CALL HELP :GOTO REG
IF ANSWER<>"" FILE=ANSWER
X=INSTR(1,FILE,"/") :IF X FILE=FILE[1,X-1] :CALL DIAG
X=INSTR(1,FILE,".") :IF X FILE=FILE[1,X]
LOOKUP FILE+".PFI",RET :CALL WWRK :CALL OP89
?#89,":R" :?#89,"VUE ";FILE+".PFI" :IF RET=0 ?#89,"Y"
?#89,"RUN PFK " :IF DIAG ?#89,"/D"
?#89,"AUTO" :?#89,"$:" :?#89,"$P"
GOTO CL89
DIR: CALL OP89 :?#89,":R" :?#89,"DIR *.PFI/W"
?#89,"RUN PFK " :IF DIAG ?#89,"/D"
GOTO CL89
AUTO: INPUT LINE "",DEVICE :CALL BACK2
INPUT LINE "",PPN :CALL BACK2
AUTO1: OPEN #1,FILE+".PFI",INPUT
OPEN #2,FILE+".PFK",OUTPUT
IF DIAG OPEN #3,FILE+".DIA",OUTPUT
IF DIAG=0 LOOKUP FILE+".DIA",RET :IF RET KILL FILE+".DIA"
?#2,CHR(138);CHR(162); :IF DIAG ?#3,"CHR(138)CHR(162)";
A1: INPUT LINE #1,IN$ :IF EOF(1) GOTO DONE
IF IN$="STOP" GOTO DONE
IF IN$="" OR IN$[1,1]=";" GOTO A1
X=INSTR(1,IN$,";") :IF X IN$=IN$[1,X-1] :S$=IN$ :CALL TRIMS :IN$=S$
S$=IN$ :CR=0 :LF=0
X=INSTR(1,S$,"/") :IF X S$=S$[1,X-1] :CALL TRIMS
D$=S$
IF S$[1,1]="$" S$=S$[2,LEN(S$)] :GOTO PR0 !$ means text string only
!Use $ if text conflicts with a command
IF IN$="LINE25" OR IN$="LINE25 SHIFT" OR IN$="LINE26" CALL L25 :GOTO A1
IF S$="KEY INSERT CHARACTER" OR S$="KEY INS CHAR" S$=CHR(206) :GOTO PR3
IF S$="KEY DELETE CHARACTER" OR S$="KEY DEL CHAR" S$=CHR(207) :GOTO PR3
IF S$="KEY INSERT WORD" OR S$="KEY INS WORD" S$=CHR(177) :GOTO PR3
IF S$="KEY DELETE WORD" OR S$="KEY DEL WORD" S$=CHR(178) :GOTO PR3
IF S$="KEY INSERT LINE" OR S$="KEY INS LINE" S$=CHR(232) :GOTO PR3
IF S$="KEY DELETE LINE" OR S$="KEY DEL LINE" S$=CHR(203) :GOTO PR3
IF S$="KEY PREV SCREEN" S$=CHR(242) :GOTO PR3
IF S$="KEY NEXT SCREEN" S$=CHR(246) :GOTO PR3
IF S$="KEY HOME" S$=CHR(30) :GOTO PR3
IF S$="KEY PREV WORD" S$=CHR(209) :GOTO PR3
IF S$="KEY NEXT WORD" S$=CHR(247) :GOTO PR3
IF S$="KEY HELP" S$=CHR(185) :GOTO PR3
IF S$="KEY NEW LINE" S$=CHR(161) :GOTO PR3
IF S$="F1" S$=CHR(181) :GOTO PR3
IF S$="F2" S$=CHR(180) :GOTO PR3
IF S$="F3" S$=CHR(211) :GOTO PR3
IF S$="F4" S$=CHR(192) :GOTO PR3
IF S$="F5" S$=CHR(128) :GOTO PR3
IF S$="F6" S$=CHR(129) :GOTO PR3
IF S$="F7" S$=CHR(130) :GOTO PR3
IF S$="F8" S$=CHR(131) :GOTO PR3
IF S$="F9" S$=CHR(132) :GOTO PR3
IF S$="F10" S$=CHR(133) :GOTO PR3
IF S$="F11" S$=CHR(134) :GOTO PR3
IF S$="F12" S$=CHR(135) :GOTO PR3
IF S$="F13" S$=CHR(197) :GOTO PR3
IF S$="F14" S$=CHR(210) :GOTO PR3
IF S$="F15" S$=CHR(212) :GOTO PR3
IF S$="F16" S$=CHR(217) :GOTO PR3
IF S$="F1 SHIFT" S$=CHR(183) :GOTO PR3
IF S$="F2 SHIFT" S$=CHR(182) :GOTO PR3
IF S$="F3 SHIFT" S$=CHR(243) :GOTO PR3
IF S$="F4 SHIFT" S$=CHR(208) :GOTO PR3
IF S$="F5 SHIFT" S$=CHR(136) :GOTO PR3
IF S$="F6 SHIFT" S$=CHR(137) :GOTO PR3
IF S$="F7 SHIFT" S$=CHR(138) :GOTO PR3
IF S$="F8 SHIFT" S$=CHR(139) :GOTO PR3
IF S$="F9 SHIFT" S$=CHR(140) :GOTO PR3
IF S$="F10 SHIFT" S$=CHR(141) :GOTO PR3
IF S$="F11 SHIFT" S$=CHR(142) :GOTO PR3
IF S$="F12 SHIFT" S$=CHR(143) :GOTO PR3
IF S$="F13 SHIFT" S$=CHR(252) :GOTO PR3
IF S$="F14 SHIFT" S$=CHR(254) :GOTO PR3
IF S$="F15 SHIFT" S$=CHR(244) :GOTO PR3
IF S$="F16 SHIFT" S$=CHR(249) :GOTO PR3
IF S$="FUNCT0" S$=CHR(240) :GOTO PR3
IF S$="FUNCT1" S$=CHR(241) :GOTO PR3
IF S$="FUNCT2" S$=CHR(242) :GOTO PR3
IF S$="FUNCT3" S$=CHR(243) :GOTO PR3
IF S$="FUNCT4" S$=CHR(244) :GOTO PR3
IF S$="FUNCT5" S$=CHR(245) :GOTO PR3
IF S$="FUNCT6" S$=CHR(246) :GOTO PR3
IF S$="FUNCT7" S$=CHR(247) :GOTO PR3
IF S$="FUNCT8" S$=CHR(248) :GOTO PR3
IF S$="FUNCT9" S$=CHR(249) :GOTO PR3
!!PUT IN DATE
IF S$="ODTIM" OR S$="ODTIME" CALL ODTIM :S$=DSTRING :CALL TRIMS :GOTO PR2
!!VUE COMMANDS SCREEN CONTROLS
IF S$="RIGHT" OR S$="RIGHT ARROW" S$=CHR(12) :GOTO PR1
IF S$="LEFT" OR S$="LEFT ARROW" S$=CHR(8) :GOTO PR1
IF S$="UP" OR S$="UP ARROW" S$=CHR(11) :GOTO PR1
IF S$="DOWN" OR S$="DOWN ARROW" S$=CHR(10) :GOTO PR1
IF S$="NW" OR S$="NEXT WORD" S$=CHR(23) :GOTO PR1
IF S$="PW" OR S$="PREVIOUS WORD" S$=CHR(1) :GOTO PR1
IF S$="EOL" OR S$="END OF LINE" S$=CHR(14) :GOTO PR1
IF S$="SOL" OR S$="START OF LINE" S$=CHR(21) :GOTO PR1
IF S$="NM" OR S$="NEXT MATCH" S$=CHR(24) :GOTO PR1
IF S$="PP" OR S$="PREVIOUS PAGE" S$=CHR(18) :GOTO PR1
IF S$="NP" OR S$="NEXT PAGE" S$=CHR(20) :GOTO PR1
IF S$="EOF" OR S$="LP" OR S$="LAST PAGE" S$=CHR(5) :GOTO PR1
IF S$="END" S$=CHR(5) :GOTO PR1
IF S$="CC" OR S$="CENTER SCREEN" OR S$="CENTER CURSOR" S$=CHR(19) :GOTO PR1
IF S$="SS" OR S$="STOP SCROLL" S$=CHR(19) :GOTO PR1
IF S$="HOME" OR S$="HOME POSITION" S$=CHR(30) :GOTO PR1
IF S$="IL" OR S$="INSERT LINE" S$=CHR(2) :GOTO PR1
IF S$="DL" OR S$="LINE DEL" OR S$="LINE DELETE" OR S$="DELETE LINE" S$=CHR(26) :GOTO PR1
IF S$="CL" OR S$="CONCATENATE LINES" S$=CHR(15) :GOTO PR1
IF S$="IC" OR S$="CHAR INS" OR S$="INSERT CHARACTER" S$=CHR(6) :GOTO PR1
IF S$="DC" OR S$="CHAR DEL" OR S$="CHARACTER DELETE" OR S$="DELETE CHARACTER" S$=CHR(4) :GOTO PR1
IF S$="DPC" OR S$="DELETE PREVIOUS CHARACTER" S$=CHR(127) :GOTO PR1
IF S$="RUB" OR S$="RUBOUT" S$=CHR(127) :GOTO PR1
IF S$="DEL" OR S$="DELETE TO END OF LINE" S$=CHR(25) :GOTO PR1
IF S$="DW" OR S$="DELETE WORD" S$=CHR(22) :GOTO PR1
IF S$="CIM" OR S$="CHARACTER INSERT MODE" S$=CHR(17) :GOTO PR1
IF S$="LIM" OR S$="LINE INSERT MODE" S$=CHR(28) :GOTO PR1
IF S$="BM" OR S$="BLOCK MARK" OR S$="SET BLOCK MARKERS" OR S$="BLOCK" S$=CHR(16) :GOTO PR1
IF S$="ESC" OR S$="ESCAPE" S$=CHR(27) :GOTO PR1
!!ALPHACALC SCREEN CONTROLS - SOME ARE SAME AS IN VUE
IF S$="SLA" OR S$="SHIFT LEFT ARROW" S$=CHR(21) :GOTO PR1
IF S$="SRA" OR S$="SHIFT RIGHT ARROW" S$=CHR(14) :GOTO PR1
IF S$="AA" OR S$="AUTO ADVANCE" S$=CHR(28) :GOTO PR1
IF S$="AE" OR S$="AUTO EDIT" S$=CHR(27)+CHR(28) :GOTO PR1
IF S$="BCLEAR" OR S$="BLOCK CLEAR" S$=CHR(27)+CHR(81) :GOTO PR1
IF S$="BCOPY" OR S$="BLOCK COPY" S$=CHR(27)+CHR(67) :GOTO PR1
IF S$="BERASE" OR S$="BLOCK ERASE" S$=CHR(27)+CHR(31) :GOTO PR1
IF S$="BCOL" OR S$="BORDER COLUMN" S$=CHR(27)+CHR(66) :GOTO PR1
IF S$="BROW" OR S$="BORDER ROW" S$=CHR(27)+CHR(98) :GOTO PR1
IF S$="CANCEL" OR S$="MENU" S$=CHR(27)+CHR(27) :GOTO PR1
IF S$="COLDEL" OR S$="COL DEL" OR S$="COLUMN DELETE" S$=CHR(27)+CHR(4) :GOTO PR1
IF S$="COLINS" OR S$="COL INS" OR S$="COLUMN INSERT" S$=CHR(27)+CHR(6) :GOTO PR1
IF S$="EDIT" S$=CHR(27)+CHR(69) :GOTO PR1
IF S$="ERACOL" OR S$="ERASE COLUMN" S$=CHR(27)+CHR(22) :GOTO PR1
IF S$="ERAROW" OR S$="ERASE ROW" S$=CHR(27)+CHR(25) :GOTO PR1
IF S$="EX" OR S$="EXECUTE" S$=CHR(27)+CHR(88) :GOTO PR1
IF S$="HELP" S$=CHR(27)+CHR(63) :GOTO PR1
IF S$="SH" OR S$="SHIFT HOME" S$=CHR(5) :GOTO PR1
IF S$="LC" OR S$="LOCK COLUMN" S$=CHR(27)+CHR(76) :GOTO PR1
IF S$="LR" OR S$="LOCK ROW" S$=CHR(27)+CHR(108) :GOTO PR1
IF S$="MO" OR S$="MOVE" S$=CHR(9) :GOTO PR1
IF S$="NS" OR S$="NEXT SCREEN" S$=CHR(20) :GOTO PR1
IF S$="PS" OR S$="PREVIOUS SCREEN" S$=CHR(18) :GOTO PR1
IF S$="PC" OR S$="PROTECT CELL" S$=CHR(112) :GOTO PR1
IF S$="RC" OR S$="RECOMPUTE" S$=CHR(27)+CHR(82) :GOTO PR1
IF S$="RD" OR S$="ROW DELETE" S$=CHR(26) :GOTO PR1
IF S$="RI" OR S$="ROW INSERT" S$=CHR(2) :GOTO PR1
IF S$="SL" OR S$="SCREEN LEFT" S$=CHR(27)+CHR(91) :GOTO PR1
IF S$="SR" OR S$="SCREEN RIGHT" S$=CHR(27)+CHR(93) :GOTO PR1
!!MISCL ADDED SCREEN CONTROLS
IF S$="SPACE" S$=CHR(32) :GOTO PR1
IF S$="TAB" S$=CHR(9) :GOTO PR1
IF S$="CR" OR S$="CARRAGE RETURN" S$="" :D$="" :CR=1 :GOTO PR1
IF S$="LF" OR S$="LINE FEED" S$="" :D$="" :LF=1 :GOTO PR1
IF S$="CRLF" S$="" :D$="" :CR=1 :LF=1 :GOTO PR1
!DROP THRU
PR0: CR=1 :LF=1
PR1: CALL HOWMANY
PR2: ?#2;S$; :?D$; :IF DIAG ?#3;D$;
IF CR AND INSTR(1,IN$,"/NCR")>0 CR=0
IF LF AND INSTR(1,IN$,"/NLF")>0 OR INSTR(1,IN$,"/NOLF")>0 LF=0
IF LF=0 AND INSTR(1,IN$,"/LF")>0 LF=1
IF CR+LF AND INSTR(1,IN$,"/NCRLF")>0 OR INSTR(1,IN$,"/NOCRLF")>0 CR=0 :LF=0
IF CR ?#2;CHR(13); :?"+CR"; :IF DIAG ?#3;"+CR";
IF LF ?#2;CHR(10); :?"+LF" :IF DIAG ?#3;"+LF"
IF S$[1,4]="VUE " CALL MAKVUE
CNT=CNT+1 :GOTO A1
PR3: IF NEEDNULL CALL NEEDNULL ELSE NEEDNULL=1
?#2;S$; :?D$ :IF DIAG ?#3;D$;
GOTO A1
NEEDNULL: ?#2;CHR(0); :?"+NULL" :IF DIAG ?#3;"(00)";
RETURN
DONE: CLOSE #1 !! :IF NEEDNULL CALL NEEDNULL
CLOSE #2
? :IF DIAG CLOSE #3 :?"Diag file:";FILE;".DIA"
IF CNT<1 KILL FILE+".PFK" :?"No PFK file produced." :GOTO LEAVE
?"Ready to use the ";FILE;".PFK"
?"Use ";FILE;".CMD to set LINE25 and F-keys."
IF OP4 CLOSE #4
CALL OP89 :?#89,":R" :?#89,"SIZE ";FILE;".PFK"
IF OP4 ?#89,FILE
GOTO CL89
RWRK: OPEN #1,"PFK.WRK",INPUT :INPUT LINE #1,FILE :CLOSE #1 :RETURN
WWRK: OPEN #1,"PFK.WRK",OUTPUT :?#1,FILE :CLOSE #1 :RETURN
LEAVE: END
WHAT: ANSWER="" :ENDFLG=0 :INPUT LINE "",ANSWER :ANSWER=UCS(ANSWER)
IF ANSWER="E" OR ANSWER="Q" OR ANSWER="X" ENDFLG=1
RETURN
NOP: ?"NOT PROCESSED." :RETURN
BACK: ?CHR(7);
BACK2: ?TAB(-1,3);TAB(-1,2);TAB(-1,9); :RETURN
OP89: X=0 !make a .DO command file
NDO: X=X+1 :NDO=X USING "#ZZZZZ" :NDO=NDO+".DO" :LOOKUP NDO,NRET :IF NRET GOTO NDO
OPEN #89,NDO,OUTPUT :OP89=1 :?#89,":S" :?#89,"ERASE ";NDO :RETURN
CL89: CLOSE #89 :CHAIN NDO :RETURN
HELP: S$="BAS:PFKBAS.HLP" :LOOKUP S$,RET :IF RET GOTO H1
S$="HLP:PFKBAS.HLP" :LOOKUP S$,RET :IF RET=0 ?"No help in library." :RETURN
H1: OPEN #10,S$,INPUT :? :X=0
HL: INPUT LINE #10,S$ :IF EOF(10) GOTO D10
?S$ :X=X+1 :IF X>22 CALL CR :CALL BACK2 :X=0 :IF ENDFLG GOTO D10
GOTO HL
D10: CLOSE #10 :RETURN
CR: ?"Press RETURN to proceed > "; :CALL WHAT :RETURN
DIAG: DIAG=1 :?"Diag mode on." :RETURN
MAKVUE: !Check to see if file exists - if not create it.
S$=S$[5,LEN(S$)] :LOOKUP S$,RET :IF RET RETURN
OPEN #9,S$,OUTPUT :CLOSE #9 :RETURN
L25: !Setup 25th line display and comamnd file
INPUT LINE #1,S$ :IF OP4 GOTO L25SH
OPEN #4,FILE+".CMD",OUTPUT :OP4=1
?"Preparing ";FILE;".CMD as a command file to set LINE25 and F-keys."
?#4,"DEL *.PFK"
?#4,"LOAD ";DEVICE;FILE;".PFK"; :IF PPN<>"" ?#4;"[";PPN;"]" ELSE ?#4
!Replace line above with one below if all .PFK files are to be in LIB:
! ?#4,"LOAD LIB:";FILE;".PFK"
?#4,"SET ECHO" :?#4,":R" :S$=S$+SPACE(80)
?#4,":<z ";S$;"" :?#4;">" :RETURN
L25SH: S$=S$+SPACE(80) :?#4;":<Z ";S$;"" :?#4;">" :RETURN
TRIMS: T=1 :OLINE="" ! ROUTINE TO REMOVE TABS AND STRIP S$
FOR I=1 TO 80
IF S$[I;1]=CHR(9) OLINE=OLINE+SPACE(9-T) :T=1 :GOTO NXI
T=T+1 :IF T=9 T=1
OLINE=OLINE+S$[I;1]
NXI: NEXT I :XCALL STRIP,OLINE
S$=OLINE :RETURN
HOWMANY: !howmany times to do a process
CALL GETX :IF X<1 RETURN
OLINE="" :FOR I=1 TO X :OLINE=OLINE+S$ :NEXT I
S$=OLINE :RETURN
ODTIM: !process a date requirement
CALL GETX :IF X<1 X=-1
ODTIM'DATA="-1,0,1,2,4,8,16,32,64,128,256,384,512,1024,2048,4096,8192,16384"
OLINE=X :IF INSTR(1,ODTIM'DATA,OLINE)=0 X=-1
FLAG=X :XCALL ODTIM,DSTRING,DATE,TIME,FLAG
IF FLAG=-1 GOTO FMTDTE1
IF FLAG=8 GOTO FMTDTE2
RETURN
FMTDTE1: !Re format the ODTIM date (Monday, February 10, 1986 05:10:00 PM)
!To read February 10, 1986
SP=INSTR(1,DSTRING,CHR(32))+1 :EP=INSTR(1,DSTRING,":")-4
DSTRING=DSTRING[SP,EP] :RETURN
FMTDTE2: !Re format the date
DSTRING=DSTRING[7,8]+DSTRING[4,5]+DSTRING[1,2]
RETURN
GETX: !check for a slash argument and set into X
X=INSTR(1,IN$,"/") :IF X<1 RETURN
X=IN$[X+1,LEN(IN$)] :RETURN