1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2 ! RTMAG - PROGRAM TO READ AND PRODUCT RT11-PIP COMPATABLE MAG TAPES 3 ! BY BERNIE METZGER 4 !25-MAR-77 14:10 5 V0$="6B03.28" 6 PRINT "RTMAG - VERSION ";V0$:PRINT 7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 10 T$(9)=FND5$ 20 DIM R%(50) 30 DIM T%(10) 60 IF C1%=1% THEN 1015 70 !T%(1)= 1 - TAPE AT LOAD POINT 80 ! T%(2)=1 - TAPE IS RT11 FORMAT TAPE 81 !T$(1)= TAPE UNIT 82! T%(3)=1 IF DOING WILD CARD LOOKUP ON TAPE 90 ON ERROR GOTO 9000 100 OPEN "KB:" AS FILE 12 1000 ! GET AND SCAN INPUT STRING 1010 F$(1,0)="":L$(1,0)="":O$(I)="" FOR I=1 TO O%:L%,F%,C%=0: PRINT "#";: INPUT LINE #12,A$ 1015A$=CVT$$(A$,-1): IF A$="" THEN 14650 1016 IF LEFT(A$,2)="/H" THEN GOSUB 15000:GOTO 1000 1020 D%=FNS%(A$) 1025 IF D%<>0 THEN PRINT "ILLEGAL INPUT STRING":GOTO 1010 1030 GOTO 2000 1035 PRINT "L$(1,0)=";L$(1,0);" L$(1,1)=";L$(1,1) 1036 PRINT "F$(1,0)=";F$(1,0);" F$(1,1)=";F$(1,1) 1037 PRINT O$(I);" ";FORI=1 TO O% 1038 PRINT "F1%=";F1%;"F2%=";F2%;"L1%=";L1%;"L2%="L2% 1039 STOP:GOTO 1010 2000 ! CHECK SCAN 2010 IF (L$(1,0)<>"" OR F$(1,0)<>"") AND CVT$$(O$(1),-1)<>"DI" THEN 2064 2020 IF O%<>0% THEN GOSUB 12580:GOTO 1010 !HANDLE OPTIONS 2064 IF (L%+F%)<2 AND L1%=1 THEN GOSUB 12010:GOTO 1010 2065 GOSUB 12630 !CHECK FOR EXISTENCE OF DISK FILES 2066 IF E%=1 THEN PRINT "ILLEGAL FILES OR NOT FOUND":GOTO 1010 2070 IF L1%=1% THEN GOSUB 10000:GOTO 1010 !COPY TO MAGTAPE 2080 IF F1%=1 THEN GOSUB 12010:GOTO 1010 !COPY FROM MAGTAPE 2090 PRINT "UNKNOWN OPTIONS":GOTO 1010 9000! 9005 IF ERR<>11 OR ERL<>10100 THEN 9020 9010 IF Y%=1% THEN RESUME 10130 ELSE Y%=1%:RESUME 10100 9020 IF ERR<>11 OR ERL<>1010 THEN 9040 9030 CLOSE IFORI=1 TO 12:GOTO 32767 !EXIT 9040 ! 9999 PRINT RIGHT(SYS(CHR$(6)+CHR$(9)+CHR$(ERR)),3)+" AT LINE ";ERL: GOTO 32767 10000 ! COPY TO MAGTAPE 10001 IF FNO%("ZE") THEN D%=FNZ% 10005 ON ERROR GOTO 9000 10010 GOTO 10020 IF T%(2%)=1% : D%=FNR% : IF D%=1% THEN PRINT "NOT AN RT11 FORMATTED TAPE": GOTO 10999 10020 T%(2)=1:C%,Y%=0 10090 FIELD #1,3% AS P1$ 10100 GET #1 10120 C%=C%+1%: P$=P1$+"": Y%=0% 10125 GOTO 10100 10130 D%=MAGTAPE(5,1,1): IF C%=1% AND P$="VOL" THEN D%=MAGTAPE(5,1,1)!BACK OVER TM TWICE IF NULL TAPE 10140! 10150 O$=CVT$$(L$(1%,0%),-1%): I$=CVT$$(F$(1%,0%),-1%): IF F$(1%,1%)<>"" THEN I$=F$(1%,1%)+I$ 10156 T%,C%,E%=0%: O2$="" 10157 I1$=FND$(I$,T%) : IF E%=2% THEN T%=T%+1%: PRINT I1$+"(ZERO) ":GOTO 10157 !ZERO LENGTH FILE 10158 IF E%=1% AND T%=0% THEN PRINT "FILE NOT FOUND": GOTO 10999 10159 IF E%=1% AND T%>0% THEN PRINT : GOTO 10999 10160 IF O$="" THEN I%=INSTR(1,I1$,"("):I%=LEN(I1$)+1% IF I%=0%: O$=LEFT(I1$,I%-1%) 10165 I2$=I1$+"" 10166 IF FNO%("IN")=0 THEN 10170 10167 PRINT I1$;:INPUT A$:IF LEFT(A$,1)<>"Y" THEN T%=T%+1%:GOTO 10157 10170 D%=FNW%(I1$,O$) !WRITE ONE FILE 10174 IF FNO%("NOP") OR FNO%("IN") THEN 10180 10175 IF F2%<>0% THEN PRINT USING "\ \",I2$;: IF POS(0%)>60% THEN PRINT 10180 T%=T%+1%:O$=O2$+"" 10190 GOTO 10157 10999 D%=MAGTAPE(5,1,1) : RETURN 11000 ! CHECK FOR OPTION IN X$ 11005 DEF FNO%(X$) 11010 FOR I%=1 TO O% 11020 IF CVT$$(X$,-1)=CVT$$(O$(I%),-1%) THEN 11050 11030 NEXT I% 11040 FNO%=0% 11045 GOTO 11060 11050 FNO%=1% 11060 FNEND 12000 ! COPY FROM MAGTAPE 12010 !COPY FROM MAGTAPE 12015 IF FNO%("RW") THEN D$=FNL$ 12017 IF FNO%("RW:NO") THEN 12020 !DON'T REWIND ON WILD CARD 12018 IF (F2%+L2%)<>0% THEN D$=FNL$ !ELSEREWIND ON WILD CARD 12020 C2%=0% 12030 IF F%=0% THEN O$="":I$=L$(1,0):GOTO 12050 12040 O$=L$(1,0):I$=F$(1,0) 12050 O$=CVT$$(O$,-1):I$=CVT$$(I$,-1) 12060 O1$=O$+"" 12070 D$=FND1$(I$) !DO DIRECTORY SEARCH ON MT 12080 I1$=D$+"" : O$=O1$+"" 12100 IF E%=1% AND E1%=0% THEN PRINT "CAN'T FIND FILE":GOTO 12289 12110 IF E%=1% AND C1%=0% THEN PRINT:GOTO 12289 12120 IF E%=1% AND C1%=1% AND C2%<>0% THEN PRINT:GOTO 12289 12130 IF E%=1% AND C1%=1% AND C2%=0% THEN PRINT "CAN'T FIND FILE": D$=FNL$:GOTO 12289 12140 E1%=1% 12141 IF FNO%("IN")=0 THEN 12150 12142 C2%=C2%+1% 12145 PRINT D$;:INPUT A$:IF LEFT(A$,1)="Y" THEN 12150 12146 IF(F2%+L2%)<>0% THEN 12070 ELSE PRINT:GOTO 12289 12150 ON ERROR GOTO 12250 12160 IF O$<>"" THEN 12180 12170 IF LEFT(L$(1,1),2)<>"KB" AND LEFT(L$(1,1),2)<>"LP" AND L$(1,1)<>"" AND L1%<>1% THEN O$=L$(1,1)+I1$:GOTO 12180 12175 IF L$(1,1)="" OR L1%=1 THEN O$="KB:" ELSE O$=L$(1,1)+"" 12177 ! COPY THE FILE 12180 OPEN O$ FOR OUTPUT AS FILE 2 12185 IF (F2%+L2%)=0% OR FNO%("NOP") OR FNO%("IN") THEN 12200 12190 PRINT I1$;" ";: IF POS(0%)>60% THEN PRINT 12200 OPEN T$(1) AS FILE 1 12210 FIELD #1,512% AS D9$ 12220 GET #1 12230 PRINT #2,D9$; 12240 GOTO 12220 12250 IF ERL=12220 AND ERR=11 AND C1%=1% THEN C2%=C2%+1%:RESUME 12070 12260 IF ERL=12220 THEN RESUME 12280 12270 GOTO 9000 12280 PRINT:T%(1)=0 12289 ON ERROR GOTO 9000:RETURN 12290 ! GENERATE VOLUME LABEL 12300 DEF FNV$ 12310 V$="VOL1RT1101"+SPACE$(27%)+"DD%%"+SPACE$(38)+"1" 12320 FIELD #1,512% AS Q$ 12330 LSET Q$=V$ 12340 PUT #1,COUNT 512% 12350 FNEND 12360 ! GENERATE HEADER OR EOF LABEL 12370 DEF FNH1$(L$,F$,B%) 12380 V$=L$+"1"+FNF1$(F$)+"RT110100010001000100"+T$(9)+" 00000 "+FNN$(B%,6%)+"RT11 " 12390 FIELD #1,512% AS Q$ 12400 LSET Q$=V$ 12410 PUT #1,COUNT512% 12420 D%=MAGTAPE(2,0,1) !WRITE EOF 12430 FNEND 12440 ! RETURN FILENAME IN LABEL FORMAT 12450 DEF FNF1$(F$) 12460 X3$=SPACE$(6):X4$=SPACE$(17) 12470 I%=INSTR(1,F$,".") 12480 IF I%=0 THEN I%=LEN(F$)+1 12490 X$=LEFT(F$,I%-1):X1$=RIGHT(F$,I%+1%) 12500 LSET X3$=X$:LSET X4$=X3$+"."+X1$ 12510 FNF1$=X4$ 12520 FNEND 12530 ! RETURN X% AS A STRING Y% LONG WITH PRECEEDING ZEROES 12540 DEF FNN$(X%,Y%) 12550 X$=CVT$$(NUM$(X%),-1) 12560 FNN$=STRING$(Y%-LEN(X$),48%)+X$ 12570 FNEND 12580 ! HANDLE OPTIONS 12590 IF CVT$$(O$(1),-1)="ZE" THEN D%=FNZ%:RETURN!ZERO TAPE 12600 IF CVT$$(O$(1),-1)="DI" THEN D%=FND%:RETURN !DO DIRECORY 12610 IF CVT$$(O$(1),-1)="RW" THEN D$=FNL$:RETURN!REWIND 12620 PRINT "UNKNOWN OPTIONS":RETURN 12630 E%=0:IF F1%+L1%<2% THEN RETURN 12640 GOTO 12660 12650 IF INSTR(1,F$(1,0),"*") OR INSTR(1,F$(1,0),"?") THEN E%=1:RETURN 12660 D$=FND$(F$(1,0),0):RETURN 12670 ! DO DISK DIRECTORY SEARCH (WILD CARD) 12680 DIM V%(30),V1%(30) 12690 DEF FND$(X$,F%) !DO DIRECTORY SEARCH D$=FILE NAME,F%=INDEX 12700 ON ERROR GOTO 12870 12710 E%=0 12720 A$=CVT$$(X$,-1) 12730 V$=SYS(CHR$(6)+CHR$(-10)+A$):CHANGE V$ TO V% 12740 V%(1)=6:V%(2)=17:V%(3)=F%:V%(4)=SWAP%(F%) 12750 CHANGE V% TO V1$: V2$=SYS(V1$): CHANGE V2$ TO V1% 12760 F$=RAD$(V1%(7)+SWAP%(V1%(8%))) 12770 F$=F$+RAD$(V1%(9)+SWAP%(V1%(10%))) 12780 F1$=RAD$(V1%(11)+SWAP%(V1%(12))) 12790 IF F1$<>"" THEN F$=F$+"."+F1$ 12800 IF V%(5%)<>0% AND V%(6)<>0% THEN F$=F$+"["+NUM$(V%(6))+","+NUM$(V%(5%))+"]" 12810 IF V%(26%)=255% THEN F$=CHR$(V%(23%))+CHR$(V%(24%))+NUM$(V%(25%))+":"+F$ 12820 IF V%(5%)=0% AND V%(6%)=0% THEN Z%=PEEK(PEEK(PEEK(520%)+8%)+24%): F$=F$+"["+NUM$(SWAP%(Z%)AND 255%)+","+NUM$(Z% AND 255%)+"]" 12830 F$=CVT$$(F$,-1) 12840 FND$=F$ 12850 IF V1%(13)+V1%(14)=0 THEN E%=2% !ZERO LENGTH FILE 12860 ON ERROR GOTO 9000:FNEND 12870 IF ERR<>5 THEN GOTO 9000 12880 E%=1%:RESUME 12860 12890 ! DO COMMAND STRING SCAN 12900 DEF FNS%(X$) 12910 G9%=1 12920 E%=0% 12930 C%=0% 12940 ON ERROR GOTO 13440 12950 X%=INSTR(1,X$,"<"): IF X%<>0% THEN X1$=LEFT(X$,X%-1)+"="+RIGHT(X$,X%+1) ELSE X1$=X$+"" 12960 L%=0%:R%=0%:DIM L$(300,1),F$(300,1),O$(50) 12970 F1%,F2%,L1%,L2%=0:L$(1,0)="":L$(1,1)="":F$(1,1)="":F$(1,0)="" 12980 X%=5 12990 F%=0% 13000O%=0 13010 X%=0% 13020 V$=SYS(CHR$(6)+CHR$(-23)+X1$) 13050 X1%=RECOUNT 13060 X1%=RECOUNT:X2%=LEN(X1$)-X1%: V1$=LEFT(X1$,X2%): X1$=RIGHT(X1$,X2%+1%): X2$=LEFT(X1$,1%): X1$=RIGHT(X1$,2%) 13070 IF X%=0% THEN L%=L%+1%: L$(L%,0)=V1$: L$(L%,1)=V$ 13080 IF X%=1% THEN F%=F%+1%: F$(F%,0%)=V1$: F$(F%,1%)=V$ 13090 IF X%=2% THEN O%=O%+1%: O$(O%)=V1$ 13100 IF X2$="=" THEN IF X%<>2% THEN X%=1% ELSE GOTO 13140 13110 IF X2$="/" THEN X%=2% 13120 IF X1%<>0% THEN 13020 13130 G9%=0 13140 IF G9%<>0 THEN 13430 13150 X1$=L$(1,0)+"" 13160 GOSUB 13280 13165 IF X3%=1% THEN E%=1% 13170 L$(1%,0%)=X2$+"":L$(1,1)=X3$+"":L1%=X1%:L2%=X2% 13180 IF F%=0 THEN 13220 13190 X1$=F$(1,0)+"":GOSUB 13280 13200 F$(1,0)=X2$+"":F$(1,1)=X3$+"":F1%=X1%:F2%=X2% 13210 IF X1%=1% AND F$(1,0)="" AND CVT$$(O$(1),-1)<>"DI" THEN E%=1 13220 IF E%=1% THEN G9%=E%:GOTO 13430 13230 IF (F1%+L1%)>1% OR (F2%+L2%)>1% THEN E%=1%:G9%=1%:GOTO 13430 13240 IF F%<>0 THEN 13430 13250 IF L1%=1% AND L$(1,0)="" AND O%=0 THEN G9%=1 13260 GOTO 13430 13270 ! 13280 ! FILE STRING SCAN RETURN FILENAME IN X2$, DEVICE(MM) IN X3$, F1% OR L1% IN X1% (DEVICE MM OR MT SPECIFIED), F2% OR L2% IN X2% ( WILD CARDS USED). 13281 !X3%= PPN SPECIFIEDIN X4% AND X5% 13290 ON ERROR GOTO 13410 13300 V$=SYS(CHR$(6)+CHR$(-23)+X1$):CHANGE V$ TO V% 13310 X2$=RAD$(V%(7%)+SWAP%(V%(8%)))+RAD$(V%(9%)+SWAP%(V%(10%)))+"."+ RAD$(V%(11%)+SWAP%(V%(12%))):X2$=CVT$$(X2$,-1) 13320 V%=V%(29%)+SWAP%(V%(30%)) 13321 X3%=0% 13322 IF V% AND 128% THEN X3%=1%:X4%=V%(5):X5%=V%(6%) 13330 IF (V% AND 1%)=0% AND (V% AND 8%)=0% THEN X2$="" 13340 IF (V% AND 2%) OR (V% AND 32%) OR (V% AND 4%) OR (V% AND 64%) THEN X2%=1% ELSE X2%=0% 13350 IF (V% AND 8192%)=0% THEN X1%=0%:X3$="":GOTO 13400 13360 IF V%<0% THEN E%=1%:GOTO 13400 !BAD DEVICE - ERROR 13370 X3$=CHR$(V%(23%))+CHR$(V%(24%)) : X3$=X3$+NUM$(V%(25%)) IF V%(26%)=255%: X3$=CVT$$(X3$+":",-1) 13380 IF LEFT(X3$,2)="MT" OR LEFT(X3$,2)="MM" THEN X1%=1%:T$(1)=X3$+"":GOTO 13400 13390 X1%=0%: IF X2$<>"" THEN X2$=X3$+X2$:X3$="" 13400 RETURN 13410 IF ERR<>2 THEN 9000 13420 E%=1%:RESUME 13400 13430 G9%=1% IF (L1%+F1%)=0%:FNS%=G9%:ON ERROR GOTO 9000:FNEND 13440! 13450 E%=1% 13460RESUME 13140 13470 DEF FNM%(X$) 13480 IF X$="MT:" OR X$="MM:" THEN FNM%=1:GOTO 13510 13490 IF (LEFT(X$,2)="MT" OR LEFT(X$,2)="MM") AND MID(X$,4,1)=":" AND INSTR(1,"01234567",MID(X$,3,1))<>0 THEN FNM%=1:GOTO 13510 13500 FNM%=0:GOTO 13520 13510 I%=INSTR(1,X$,":"):T$(1)=LEFT(X$,I%) 13520 ON ERROR GOTO 9000 13521 FNEND 13530 ! ZERO TAPE (VOL LABEL FOLLOWED BY TWO TAPE MARKS) 13540 DEF FNZ% 13550 INPUT "REALLY ZERO TAPE";D$ 13560 IF D$<>"YES" THEN PRINT "TAPE NOT ZEROED":GOTO 13630 13570 D$=FNL$ 13580 D$=FNV$ 13590 D%=MAGTAPE(2,0,1)FORI=1 TO 2 13600 D$=FNL$ 13610 T%(1)=1 13620 PRINT "TAPE ZEROED" 13630 FNEND 13640 ! DO DIRECTORY OF TAPE 13650 DEF FND% 13660 C%,C1%=0% 13670 IF L1%=0% AND CVT$$(L$(1,0),-1)<>"" THEN OPEN L$(1,0) FOR OUTPUT AS FILE 2: GOTO 13680 13675 IF (LEFT(L$(1,1),2)="KB" OR LEFT(L$(1,1),2)="LP") AND INSTR(1,L$(1,1),":")<>0% THEN OPEN L$(1,1) FOR OUTPUT AS FILE 2 ELSE OPEN "KB:" AS FILE 2 13680 IF L1% THEN D9$=L$(1,1) ELSE D9$=F$(1,1) 13690 PRINT #2,"DIRECTORY OF ";D9$;" ON ";DATE$(0);" AT ";TIME$(0):PRINT #2 13700 D%=FNR%:IF D%=1 THEN PRINT "NOT AN RT11 FORMATTED TAPE":GOTO 13860 13710 ON ERROR GOTO 13800 13720 FIELD #1,4% AS D1$,17% AS D2$,20% AS D$,6% AS D4$,7% AS D$,6% AS D3$ 13730 Y%=0% 13740 GET #1 13750 Y%=0% 13760 IF D1$<>"EOF1" THEN 13740 13770 PRINT #2,CVT$$(D2$,128%);TAB(20);VAL(D3$);TAB(30);FND6$(D4$) 13780 C%=C%+1%:C1%=C1%+VAL(D3$) 13790 GOTO 13740 13800 IF ERR<>11 THEN 9000 13810 Y%=Y%+1%:IF Y%>1% THEN RESUME 13830 13820 RESUME 13740 13830 D$=FNL$:T%(1)=1 13840 PRINT #2,C%;" FILES FOUND WITH ";C1%;" TOTAL BLOCKS" 13850 CLOSE 2 13855 D$=FNL$ 13860 ON ERROR GOTO 9000:FNEND 13870 ! OPEN TAPE AND PUT AT LOAD POINT 13880 DEF FNL$ 13890 CLOSE 1 13900 OPEN T$(1) AS FILE 1,RECORDSIZE 512 13910 D%=MAGTAPE(3,0,1) !PUT IT AT LOAD POINT 13920 T%(1)=1 13930 FNEND 13940 ! VERIFY TAPE AS RT11 FORMAT AND POSITION AFTER FIRST TAPE MARK 13950 DEF FNR% 13955 V9$="VOL1RT1101"+SPACE$(27)+"DD%%"+SPACE$(38)+"1" 13956 T%(2%)=0% 13960 D$=FNL$ 13970 ON ERROR GOTO 14030 13980 GET #1 13990 FIELD #1,80% AS D$ 14000 IF D$=V9$ THEN FNR%=0%:T%(2%)=1%:GOTO 14020 14010 FNR%=1:D$=FNL$:CLOSE 1:GOTO 14060 14020 GOTO 14060 14030 IF ERR=11 THEN FNR%=1%:RESUME 14060 14035 IF ERR=40 THEN FNR%=1%:RESUME 14060 14040 GOTO 9000 14050 FNR%=1:RESUME 14060 14060 D$=FNL$:ON ERROR GOTO 9000:FNEND 14070 ! WRITE A FILE ON THE TAPE (TAPE IS PREPOSITIONED) 14080 DEF FNW%(I$,O$) 14090 ON ERROR GOTO 14200 14100 D$=FNH1$("HDR",O$,0) !WRITE HEADER LABEL 14110 OPEN I$ FOR INPUT AS FILE 2 14120 FIELD #2,512% AS I1$: FIELD #1,512% AS O1$ 14130 G9%=0 14140 GET #2:LSET O1$=I1$:PUT #1:G9%=G9%+1%:GOTO 14140 14150 D%=MAGTAPE(2,0,1) !PRINT EOF MARK AFTER DATA 14160 D$=FNH1$("EOF",O$,G9%) 14170 D%=MAGTAPE(2,0,1) !PRINT SECOND MARK AT EOT 14185 D%=MAGTAPE(5,1,1):T%(1%)=0% 14190 GOTO 14220 14200 IF ERL=14140 AND ERR=11 THEN RESUME 14150 14210 GOTO 9000 14220 ON ERROR GOTO 9000:T%(1)=0%:FNEND 14230 ! DO DIRECTORY LOOKUP ON MT (FOR READ FROM MT:) LOOK FOR HDR LABEL (OTHER DIRECTORY ROUTINE LOOKS FOR EOF LABEL) 14240 DEF FND1$(X$) 14250 ON ERROR GOTO 14500 14260 C%=0 !COUNT PASSES THROUGH TAPE 14270 C1%=1% 14280 OPEN T$(1) AS FILE 1 14290 FIELD #1,4% AS D1$,17% AS D2$ 14300 ON ERROR GOTO 14500 14320 I%=INSTR(1,X$,"."):IF I%=0 THEN I%=LEN(X$)+1 14350 X3$=FNF1$(X2$) 14360 IF(F2%+L2%)<>0 THEN C1%=1% ELSE C1%=0% 14370 Y%=0 14380 GET #1 14390 Y%=0% 14400 IF D1$<>"HDR1" THEN 14380 14410 FOR I=1 TO 17 14420 IF (MID(X3$,I,1)<>MID(D2$,I,1)) AND (MID(X3$,I,1)<>"?") THEN E%=1:GOTO 14450 14430 NEXT I 14440 E%=0 14450 IF E%=1 THEN 14380 14460 FND1$=CVT$$(D2$,-1) 14470 ON ERROR GOTO 14500 14480 GET #1!GET PAST THE TAPE MARK TO THE DATA 14490 STOP 14500! 14510 IF ERL=14480 THEN RESUME 14630 14520 IF ERL=14380 THEN Y%=Y%+1%:IF Y%<2% THEN RESUME 14380 14530 IF ERL<>14380 THEN 14560 14540 IF C1%=0% AND C%=0% THEN C%=1% : RESUME 14570 14550 FND1$="":E%=1%:RESUME 14630 14560 GOTO 9000 14570 ! 14580 D$=FNL$ 14590 FIELD #1,4% AS D1$,17% AS D2$ 14600 Y%=0 14610 GET #1 14620 ON ERROR GOTO 14500:GOTO 14370 14630 ON ERROR GOTO 9000:FNEND 14640!STOP 14650 GOTO 32767 15000 ! PRINT HELP FILE 15010 OPEN "RTMAG.DOC$" FOR INPUT AS FILE 1 15020 ON ERROR GOTO 15099 15030 INPUT LINE #1,A$ 15040 PRINT A$; 15050 GOTO 15030 15099 IF ERR<>11 AND ERL<>15030 THEN 9000 15100 RESUME 15110 15110 ON ERROR GOTO 9000 15120 CLOSE 1:RETURN 18000 DEF FND5$ 18005 RESTORE 18010 D$="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC" 18020 DATA 31,28,31,30,31,30,31,31,30,31,30,31 18030 DIM D%(12):READ D%(I)FORI=1 TO 12 18040 D1$=CVT$$(DATE$(0), -1) 18060 D1%=VAL(LEFT(D1$,2)):D2$=MID(D1$,4,3):D3%=VAL(RIGHT(D1$,8)) 18070 I%=(INSTR(1,D$,D2$)+2)/3 18080 I1%=0%:I1%=I1%+D%(I) FOR I=1 TO I%-1%:I1%=I1%+D1% 18090 IF I%<2% THEN 18110 18100 I1%=-1%*(D3%=(4%*(D3%/4%)))+I1% 18110 FND5$=FNN$(D3%,3)+FNN$(I1%,3) 18130 FNEND 19000 DEF FND6$(X$) 19010 X%=VAL(RIGHT(X$,4)):X1%=VAL(LEFT(X$,3)) 19020 FND6$=DATE$((X1%-70%)*1000%+X%) 19030 FNEND 32767 END