1 !!! PAM V04A-2 R. LEAVITT 20-AUG-76 EDIT 4 01-JUL-77 !!! PESTICIDE RESEARCH CENTER, MICHIGAN STATE U. !!! PROGRAM WORKS ON GC DATA FILES CREATED BY PAM12 !!! DOES OPTIONS 1-8. COMPANIONS PAM1 & PAM2 HANDLE OPT 9-16,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%>8% THEN A$=SYS(CHR$(8%)+A$) : IF Q%>16% THEN CHAIN "$PAM2" 25000 ELSE CHAIN "$PAM1" 25000 ! OPTION SELECTED REQUIRES PAM1 OR PAM2 132 IF Q%=3% THEN K$="KB:" ! KEEP OPTION 3 ON KEYBOARD 134 ON Q% GOTO 140,140,140,142,140,136,136,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%))) : IF Q%=4% THEN PRINT "TAKE FROM "; 145 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%<>3% : PRINT " DO YOU WANT"; : INPUT LINE A$ : DIM R%(200,1) 175 GOSUB 14000 : 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%"" THEN GOSUB 21000 1080 IF C%=6% THEN C%=1% : PRINT #5% 1090 X=B(K%) : IF B(K%+1%)=-10 THEN GOSUB 12000 : PRINT #5% : PRINT #5%,"TOTAL AREA =";TAB(17%-M0%);X$ : GOTO 1140 1095 IF C%=1% AND Q%=5% AND S5%<>-1% THEN GOSUB 22000 ! SEE IF IT'S PART OF A GROUPIE 1100 IF C%=3% THEN D9%=3% : IF Q%=2% OR Q%=3% THEN GOSUB 17000 : X1=X ! GET PEAK NAME AND RET TIME 1110 IF X>=-8 AND X<=-5 THEN X$=MID("BBVBVVBV",-2*X-9,2) : M0%=8% : GOTO 1130 1120 GOSUB 12000 : IF C%=3% THEN M0%=M0%+4% 1130 PRINT #5%,TAB(12%*(C%-1%)+4%-M0%);X$; : PRINT #5%,"*"; IF S4% AND C%=1% : NEXT K% 1140 NEXT I% : IF Q%=3% THEN RETURN ELSE PRINT #5%,CHR$(26) : GOTO 32000 ! ! ! ! OPTION 2 PRINT ALL GC DATA AND NAME PEAKS IN ! ACCORDANCE WITH SPECIFIED WINDOW FILE ! ! 2000 GOSUB 19000 : GOTO 1000 ! ! ! OPTION 3 UPDATE WINDOW FILE USING SPECIFIED RUN # ! ! 3000 GOSUB 2000 : PRINT FOR J%=1% TO 5% : I%=0% : X$="T TIME" : INPUT "ANY WINDOWS TO REASSIGN";A$ : GOTO 3020 3010 PRINT : PRINT : INPUT "ANY REL CONCS TO CHANGE";A$ : I%=1% : X$="L CONC" 3020 IF LEFT(A$,1)<>"Y" THEN IF I% THEN 32000 ELSE 3010 3030 PRINT : PRINT : PRINT "TYPE IF RE";X$;" IS OK ELSE NEW VALUE" : PRINT : FOR K%=1% TO W9(0,0) : PRINT W9$(K%); : D9%=3% : X=W9(K%,I%) 3040 GOSUB 12000 : PRINT TAB(23%-M0%);X$;TAB(32%); : INPUT LINE A$ : GOSUB 14000 : IF LEN(A$)<>0% THEN W9(K%,I%)=VAL(A$) : W9$(0)=DATE$(0%) 3050 NEXT K% : IF I%=0% THEN 3010 ELSE X=W9(1,1) : W9(I%,1)=W9(I%,1)/X FOR I%=1% TO W9(0,0) : GOTO 32000 ! ! ! ! OPTION 4 TRANSFER SPECIFIED RUNS IN ASCII FORMAT (EG. TO DEC TAPE) ! ! 4000 ON ERROR GOTO 0 : PRINT "OUTPUT FILE NAME"; : INPUT LINE A$ : GOSUB 14000 : OPEN A$ FOR OUTPUT AS FILE 3% : PRINT #3%,5000 4010 FOR I%=1% TO R%(0,0) : V%=R%(I%,1%) : FOR J%=V% TO 15000% : PRINT #3%,B(J%) : IF B(J%)=-10 THEN 4030 4020 NEXT J% 4030 NEXT I% : PRINT #3%,CHR$(26%) : GOTO 32000 ! ! ! ! OPTION 5 OPTION 1 WITH GROUP PEAK ! ! 5000 INPUT "INPUT LOW,HIGH RET TIMES FOR GROUP OF PEAKS";L,H : IF L>H THEN R=L : L=H : H=R 5010 GOTO 1000 ! ! ! ! ERROR HANDLING SUBROUTINES ! ! 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 ! ! ! ! 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 ! ! ! ! CHECK FOR PEAK RETENTION TIME MATCH WITH GIVEN ! WINDOW FILE COMPONENT (OPTION 3) ! ! 17000 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 A$=W9$(J%) : RETURN ! GOT PEAK NAME 17030 NEXT J% : A$="" : RETURN ! ! ! ! SET UP WINDOW FILE FOR OPTIONS 2 AND 3 ! ! W8$(0)=ID; W9$(0)=UPDATE; W9(0,0)=# WINDOWS; ! W9(0,1)=TOLERANCE (DECIMAL) ! ! 19000 ON ERROR GOTO 0 : DIM #3%,W8$(0)=32%,W9$(20),W9(20,1) : 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 OPEN A$ FOR INPUT AS FILE 3% : PRINT "WINDOW ID: ";W8$(0);", LAST UPDATED ";W9$(0) : IF Q%=3% THEN PRINT "TOLERANCE IS";W9(0,1)*100; "%. TYPE NEW VALUE TO CHANGE ELSE "; : INPUT X : IF X<>0 THEN W9(0,1)=X/100 19020 RETURN ! ! ! ! SUBROUTINE TO UPDATE WINDOW FILE RETENTION TIME ! DATA (OPTION 3) ! ! 21000 X=W9(J%,0) : D9%=2% : GOSUB 12000 : PRINT TAB(64%-M0%);X$;TAB(67); : INPUT A$ : IF LEFT(A$,1)="Y" THEN W9(J%,0)=X1 : W9$(0)=DATE$(0) 21010 RETURN ! ! ! ! SEE IF PEAK IS PART OF GROUP PEAK (OPTION 5) ! ! 22000 R=B(K%+2%) : S4%=0% : IF R=L AND R<=H THEN S4%=1% : S5%=S5%+1% : PRINT #5% IF S5%=1% : A=A+B(K%+1%) : T=T+B(K%+3%) : RETURN ! PEAK WAS PART OF GROUP; AREA & HEIGHT ACCUM 22020 PRINT #5%,"*TOT"; : X=A : GOSUB 12000 : PRINT #5%,TAB(16%-M0%);X$; : X=T : GOSUB 12000 : PRINT #5%,TAB(40%-M0%);X$;TAB(43);"GROUP" : X=B(K%) : S5%=-1% : PRINT #5% : RETURN ! END OF GROUP PEAK 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 RETURN 32000 CLOSE 2%,3%,5% : END