!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