1 !!! PAM1 V04A-2 R. LEAVITT 20-AUG-76 EDIT 5 08-JUL-77 !!! PESTICIDE RESEARCH CENTER, MICHIGAN STATE U. !!! PROGRAM WORKS ON GC DATA FILES CREATED BY PAM12 !!! DOES OPTIONS 9-16. COMPANIONS PAM & PAM2 HANDLE OPT 1-8,17-25 !!! 100 PRINT "PAM V04A-2" 110 PRINT "OPTION"; : INPUT LINE A$ : GOSUB 14000 : GOSUB 26000 : IF Q%<26% AND Q%>0% THEN 130 ! VALID OPTION SELECTION 120 OPEN "$OPTION.PAM" FOR INPUT AS FILE 1% : FOR K%=1% TO 32% : INPUT LINE #1%,A$ : GOSUB 14000 : PRINT A$ : NEXT K% : CLOSE 1% : GOTO 110 ! LIST AVAILABLE OPTIONS 130 IF Q%>16% OR Q%<9% THEN A$=SYS(CHR$(8%)+A$) : IF Q%>16% THEN CHAIN "$PAM2" 25000 ELSE CHAIN "$PAM" 25000 ! OPTION SELECTED REQUIRES PAM OR PAM2 132 IF Q%=11% OR Q%=15% THEN K$="KB:" !ONLY ALLOW OUTPUT AT KEYBOARD; ! FINAL REPORT OUTPUT WILL BE TO SPECIFIED FILE 134 ON Q%-8% GOTO 140,140,140,4000,140,140,140,136 136 PRINT Q%;"IS AN UNUSED OPTION" : GOTO 110 140 OPEN K$ FOR OUTPUT AS FILE 5% ! ! ! ! SET UP PAMNEW FILE. [1,X] ACCOUNTS MUST SPECIFY ! ! P1%(0)=NEXT FREE SPOT IN B; R1%(0)=LAST RUN WRITTEN; ! R1%(1-200)=STARTING POSITION IN B FOR EACH RUN ! ! 142 DIM #2%,P1%(0),R1%(200),B(15000) : ON ERROR GOTO 11010 : J%=ASCII(CHR$(PEEK(2056%))) : PRINT "WHICH CHAN OR ACCT"; : INPUT LINE A$ : GOSUB 14000 : IF INSTR(1,A$,",")=0% THEN A$="10,"+A$ 150 IF LEFT(A$,1)<>"[" THEN A$="["+A$+"]" 160 ON ERROR GOTO 11020 : X$=SYS(CHR$(6)+CHR$(-7)) ! SET ^C ERROR TRAP 165 OPEN D$+A$+"PAMNEW" FOR INPUT AS FILE 2% : &"LAST RUN # WAS";R1%(0) : IF R1%(0)=200% OR P1%(0)=15000% THEN & "ACCT FULL. CHECK BCK FILE" ELSE IF R1%(0)=0% THEN 32000 ! ! ! ! SET UP RUNS MATRIX ! ! 170 PRINT "WHICH RUN"; : PRINT "S"; IF Q%<>13% : PRINT " DO YOU WANT"; : INPUT LINE A$ : DIM R%(200,1) : GOSUB 14000 : IF A$="0" THEN 32000 175 IF A$="" THEN R%(0,0)=1% : R%(1,0)=R1%(0) : R%(1,1)=R1%(R1%(0)) : GOTO 280 ! DEFAULT SETS UP LAST RUN ONLY 180 ON ERROR GOTO 11200 : M0%,M1%=0% : C%=1% : FOR I%=1% TO LEN(A$) : IF ASCII(MID(A$,I%,1%))=44% OR ASCII(MID(A$,I%,1%))=45% THEN M1%=I% ELSE 260 ! MARK POSITION OF "," OR "-" 190 IF ASCII(MID(A$,I%,1%))=44% THEN GOSUB 240 : R%(C%,0)=V% : GOTO 250 ! TAKE CARE OF "," 200 IF M1%=LEN(A$) THEN GOSUB 240 : FOR J%=V% TO R1%(0) : R%(C%,0)=J% : C%=C%+1% : NEXT J% : GOTO 260 ! TERMINAL "-" SITUATION 210 GOSUB 240 : K%=V% : M0%=M1% : FOR J%=I%+1% TO LEN(A$) : IF ASCII(MID(A$,J%,1%))<>44% THEN 230 220 M1%=J% : GOSUB 240 : I%=J% : FOR J%=K% TO V% : R%(C%,0)=J% : C%=C%+1% : NEXT J% : M0%=M1% : GOTO 260 230 NEXT J% : J%=J%+1% : GOTO 220 ! GOT TO END OF A$ 240 V%=VAL(MID(A$,M0%+1%,M1%-M0%-1%)) : IF V%>R1%(0) THEN V%=1%/0% ELSE RETURN ! NON-EXISTENT RUN #'S NOT ALLOWED 250 M0%=M1% : C%=C%+1% ! MARK LAST POSITION 260 NEXT I% : IF M1%W2 THEN R=W1 : W1=W2 : W2=R : GOTO 1000 1040 PRINT #5% FOR J%=1% TO 5% : IF K$<>"KB:" THEN PRINT "COMPOUND"; : INPUT LINE A$ : GOSUB 14000 : PRINT #5%,"COMPOUND -- ";A$ : GOTO 1060 1050 OPEN "KB:" AS FILE 1% : PRINT "COMPOUND -- "; : INPUT #1%,A$ 1060 PRINT #5%,: CLOSE 1% : GOSUB 14500 : PRINT #5%,TAB(28%);"RET TIME";TAB(44%);"AREA";TAB(55%);"HEIGHT" 1070 FOR I%=1% TO R%(0,0) : C%=0% : GOSUB 19500 : IF B(V%+7%)=-10 THEN 1220 ! RUN HAD NO PEAKS AT ALL 1080 FOR K%=V%+8% TO 15000% STEP 5% : X=B(K%) : IF XW2 THEN 1220 1160 D9%=3% : GOSUB 12000 : PRINT #5%,TAB(33%-M0%);X$; : X=B(K%-1%) : GOSUB 12000 : PRINT #5%,TAB(49%-M0%);X$; : X=B(K%+1%) : GOSUB 12000 : PRINT #5%,TAB(62%-M0%);X$ : C%=-1% 1210 IF B(K%+4%)=-10 THEN 1220 1215 NEXT K% 1220 IF C%=0% THEN PRINT #5%,TAB(32%);"NONE" 1230 NEXT I% : PRINT #5%,CHR$(26) : GOTO 32000 ! ! ! ! OPTION 10 PRINT RUN HEADERS ONLY ! ! 2000 PRINT #5% FOR J%=1% TO 5% : GOSUB 14500 : PRINT #5%,TAB(28);"PEAKS" : FOR I%=1% TO R%(0,0) : GOSUB 19500 : PRINT #5%,TAB(28);B(V%+3%) : NEXT I% : PRINT #5%,CHR$(26) : GOTO 32000 ! ! ! ! OPTION 11 ASSIGN SAMPLE #'S TO INDIVIDUAL RUN #'S ! ! 3000 GOSUB 19000 : INPUT "USE PEAK AREAS(0) OR HGTS(1)";M1% : PRINT "EXT STD WILL ASSUME SAMPLE #'S<101 TO BE IN NG INJ" : PRINT 3010 GOSUB 14500 : PRINT TAB(28%);"SAMPLE #" : C%=0% : FOR I%=1% TO R%(0,0) : GOSUB 19500 : INPUT LINE A$ : GOSUB 14000 : IF A$="0" THEN 3100 ELSE IF LEN(A$) THEN GOSUB 20000 3060 NEXT I% 3100 C(0,0)=C% : C(0,1)=W9(0,0) 3110 INPUT "WANT EXT STD CURVE FIT";A$ : IF LEFT(A$,1)<>"Y" THEN 32000 ELSE CLOSE 1%,2%,3%,4% : CHAIN "$PAMSTD" ! ! ! ! OPTION 12 MANUAL INPUT OF SAMPLE #'S AND AREAS. ! ACTS LIKE OPTION 11 ! ! ! 4000 ON ERROR GOTO 11300 : GOSUB 19002 : ON ERROR GOTO 0 : C(0,1)=1 : PRINT "ENTER VALUES WITH OR " : PRINT "TERMINATE INPUT WITH SAMPLE #=" : PRINT "SAMPLE #","AREA" 4010 FOR I%=1% TO 100% : INPUT X$ : IF X$="" THEN PRINT : GOTO 4030 4020 C$(I%)=LEFT(X$,8) : PRINT , : INPUT C(I%,1) : PRINT : NEXT I% : I%=I%+1% 4030 C(0,0)=I%-1% : GOTO 3110 ! ! ! ! OPTION 13 CHANGE MATRIX DATA (AREA, R.T, HEIGHT, OR DELETE) ! ! 5000 V%=R%(1%,1%) : IF D9% THEN 5020 ELSE D9%=1% 5010 PRINT : PRINT "# ACTION" : PRINT "1 CHANGE AREA" : PRINT "2 CHANGE RET TIME" : PRINT "3 CHANGE HT" : PRINT "4 DELETE PEAK" : PRINT : PRINT "'PEAK #' AND 'WHICH RUN...' QUESTIONS "; "WILL BE REASKED UNTIL ANSWERED 0" 5020 PRINT : INPUT "PEAK #";X : GOTO 170 IF X=0 : GOTO 5040 IF B(V%+6%+5%*C%)=X FOR C%=0% UNTIL B(V%+7%+C%*5%)=-10 5030 PRINT "NO SUCH PEAK #" : GOTO 5020 5040 INPUT "ACTION #";K% : IF K%<4% THEN INPUT "NEW VALUE"; B(V%+6%+K%+C%*5%) : GOTO 5020 5050 IF K%=4% THEN J%=V%+6%+C%*5% : FOR V%=J% TO J%+250% STEP 5% : B(V%+K%)=B(V%+K%+5%) FOR K%=0% TO 4% : IF B(V%+1%)=-10 THEN 5020 5060 NEXT V% : GOTO 5020 ! ! ! ! OPTION 14 OPTION 9 USING ANY ONE COMPOUND FROM WINDOW FILE ! ! 6000 GOSUB 19005 6010 INPUT "WHICH COMPOUND # DO YOU WANT FROM WINDOW FILE";I% : IF I%<1% OR I%>W9(0,0) THEN PRINT J%,W9$(J%) FOR J%=1% TO W9(0,0) : GOTO 6010 6030 X=W9(I%,0) : A=W9(0,1) : A$=W9$(I%) : CLOSE 3% : PRINT #5% FOR J%=1% TO 5% : PRINT #5%,DATE$(0);" SELECTIVE LISTING FOR ";A$ 6040 PRINT #5%,"NOMINAL RET. TIME =";X;"+-"; : W1=X-A*X : W2=X+A*X : X=X*A : D9%=3% : GOSUB 12000 : PRINT #5%,X$;" MIN" : GOTO 1060 ! ! ! ! OPTION 15 OPTION 11 WITH A SUMMED GROUP PEAK ! ! 7000 INPUT "LOW,HIGH RET TIMES FOR GROUP PEAK";L,H : IF L>H THEN R=L : L=H : H=R 7010 GOTO 3000 ! NOW DO WHAT OPTION 11 DOES 11010 GOSUB 11100 : IF ERR<>10% THEN ON ERROR GOTO 0 ELSE A$="" : RESUME 160 11020 GOSUB 11100 : IF ERR<>21% THEN ON ERROR GOTO 0 ELSE D$="DK0:" : ON ERROR GOTO 32000 : RESUME 165 ! NOW ASSUME FILES ON DK0: 11100 IF ERR=28% THEN RESUME 32000 ELSE RETURN ! CHECK FOR ^C FIRST SO THAT PAMNEW WON'T REMAIN UNNECESSARILY OPEN 11200 GOSUB 11100 : PRINT "IMPROPER RUNS SPEC" : RESUME 32000 ! TRY AGAIN 11300 IF ERR<>21% THEN ON ERROR GOTO 0 ELSE D$="DK0:" : A$=RIGHT(A$,5) : RESUME 19010 ! ! ! ! PSUEDO PRINT USING SUBROUTINE ! ! 12000 X=INT(X*10.^D9%+.5)/10.^D9% : X$=NUM$(X) : X$=LEFT(X$,LEN(X$)-1%) : IF ABS(X)>=10^6 OR ABS(X)<10^-6 THEN IF X<>0 THEN M0%=9% : RETURN ! CHANGES X TO X$ WITH "," AND D9% DECIMAL PLACES ! RETURNS "." AS M0% 12030 IF ABS(X)<1 AND X<>0 THEN X$=LEFT(X$,1%)+"0"+RIGHT(X$,2%) 12040 IF D9%<1% THEN D9%=-1% : GOTO 12070 12050 X=INSTR(1%,X$,".") : IF X<>0 THEN 12060 ELSE X$=X$+"." : GOTO 12050 12060 IF LEN(X$)=X+D9% OR D9%<0% THEN 12070 ELSE X$=X$+"0" : GOTO 12060 12070 IF LEN(X$)>D9%+5% THEN X$=LEFT(X$,LEN(X$)-(D9%+4%))+","+RIGHT(X$,LEN(X$)-(D9%+3%)) 12090 M0%=INSTR(1%,X$,".") : IF M0%=0% THEN M0%=LEN(X$)+1% 12100 D9%=0% : RETURN ! ! ! ! REMOVE TERMINATORS FROM INPUT LINE STATEMENTS ! ! 14000 A$=LEFT(A$,LEN(A$)-1%) : J%=ASCII(RIGHT(A$,LEN(A$))) : IF J%=10% OR J%=13% THEN 14000 ELSE RETURN ! ! ! ! HEADER FOR OPTIONS 9-11,14 ! ! 14500 PRINT #5%,"RUN CHAN DATE";TAB(21);"TIME"; : RETURN ! ! ! ! SET UP WINDOW FILE FOR OPTIONS 11,12 & 14 ! 14510 ! W8$(0)=ID; W9$(0)=UPDATE; W9(0,0)=# WINDOWS ! W9(0,1)=TOLERANCE(DECIMAL); W9$(X)=NAME; W9(X,0)=R.T.; W9(X,1)=REL CONC ! ! K1$(0)=OUTPUT FILE TO BE USED BY PAMCAL ! C(0,0)=# SAMPLES; C(0,1)=# WINDOWS; C(0,2)=WINDOW FILE # ! ! 19000 ON ERROR GOTO 0 19002 DIM #4%,K1$(0)=32%,C$(100)=8%,C(100,20) : OPEN "RNOPAL" FOR OUTPUT AS FILE 4% : K1$(0)=Y$ 19005 INPUT "WINDOW FILE #";A$ : J%=INSTR(1%,A$,":") : IF J%=0% THEN A$=D$+"$WINDOW."+A$ ELSE A$=LEFT(A$,J%)+"$WINDOW."+RIGHT(A$,J%+1%) 19010 DIM #3%,W8$(0)=32%,W9$(20),W9(20,1) : OPEN A$ FOR INPUT AS FILE 3% : PRINT "WINDOW ID: ";W8$(0);", LAST UPDATED ";W9$(0) 19015 IF Q%<>14% THEN C(0,2)=VAL(RIGHT(A$,INSTR(1%,A$,".")+1%)) : IF D$="DK1:" THEN C(0,2)=C(0,2)+1000 19020 RETURN ! ! ! ! SUBROUTINE TO PRINT ABREVIATED HEADER INFO FOR ! OPTIONS 9-11,14 ! ! 19500 V%=R%(I%,1) : X=R%(I%,0) : GOSUB 12000 : PRINT #5%,TAB(5%-M0%);RIGHT(X$,2); : X=B(V%) : GOSUB 12000 : PRINT #5%,TAB(9%-M0%);RIGHT(X$,2);TAB(9%);DATE$(B(V%+1%)); TAB(19%);TIME$(1440-B(V%+2%)); 19510 RETURN ! ! ! ! FOR OPTION 11, CHECK FOR PEAK RETENTION TIME MATCH ! WITH WINDOW FILE COMPONENT AND ACCEPT ONLY ! LARGEST AREA OR HEIGHT. FOR OPTION 15 SUM A OR H FOR GROUP PEAK ! ! 20000 C%=C%+1% : C(C%,J%)=0 FOR J%=1% TO 20% : C$(C%)=LEFT(A$,8) : FOR K%=V%+8% TO 15000% STEP 5% : X=B(K%) 20010 A=B(K%-1%+2%*M1%) : GOTO 20070 IF Q%=15% : FOR J%=1% TO W9(0,0) : W1=W9(J%,0)*(1-W9(0,1)) : W2=W9(J%,0)*(1+W9(0,1)) : IF X>=W1 AND X<=W2 THEN IF C(C%,J%)<=A THEN C(C%,J%)=A : GOTO 20050 20020 NEXT J% 20050 IF B(K%+4%)=-10 THEN RETURN ! END OF RUN 20060 NEXT K% 20070 IF X=L AND X<=H THEN C(C%,1%)=C(C%,1%)+A : GOTO 20050 20080 RETURN ! EITHER X>H OR WE GOT HERE SOME OTHER WAY ! ! ! ! CHAIN IN POINT FROM PAM OR PAM2. PASSES OPTION ! NUMBER FROM COMMON CORE ! ! 25000 A$=SYS(CHR$(7%)) : GOSUB 26000 : GOTO 134 ! ! ! ! DECODE OPTION ANSWER AS FOLLOWS: ! OPTIONAL OUTPUT<2 OR 2 ! ! 26000 K$="KB:" : J%=INSTR(1,A$,"<") : I%=INSTR(J%+1%,A$,"<") : IF I% THEN J%=I% 26005 X$=RIGHT(A$,J%+1%) : IF J% THEN K$=LEFT(A$,J%-1%) ! K$=OUTPUT DEVICE OR FILE 26010 D$="DK1:" : J%=INSTR(1,X$,":") : IF J%=0% THEN Q%=VAL(X$) ELSE D$=LEFT(X$,J%) : Q%=VAL(RIGHT(X$,J%+1%)) ! D$=DEFAULT DISK; Q%=OPTION # 26020 Y$=K$ : RETURN 32000 CLOSE 2%,3%,4%,5% : END