10 NOEXTEND 910 DIM Z%(31%),L%(31%) 920 DIM M%(30%) 940 DIM P$(1%) 1000 ON ERROR GOTO 19500 1010 I$="UMOUNT V06C-03" 1040 I$=I$+CHR$(9%)+CHR$(9%) +CVT$$(RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(0%)),3%),4%) +CHR$(13%)+CHR$(10%) +"Please use the 'MOUNT' or 'DISMOUNT' Command" \ PRINT I$ \ GOTO 32767 1050 ON ERROR GOTO 19500 \ P8%=PEEK(PEEK(PEEK(520%)+8%)+24%) \ P8%=SWAP%(P8%) AND 255% \ T$="/" \ S$=":" \ P$(0%)="ODD" \ P$(1%)="EVEN" \ Y7%(0%)=129% \ P%=INSTR(1%,C$,"/") \ F$=RIGHT(C$,P%) IF P% \ C$=LEFT(C$,P%-1%) IF P% \ C$=FNP$(C$,"") \ GOTO 19010 IF E% \ Y7%(0%)=Y7%(0%) AND L%(15%) \ Y8%=4096% \ IF Y7%(0%)=0% THEN E$="Illegal device" \ E%=2048% \ GOTO 19090 1060 IF ASCII(F$) THEN P%=1% \ IF ASCII(F$)=ASCII("/") THEN GOSUB 10000 \ GOTO 19090 IF E% \ GOTO 1060 1080 CHANGE C$ TO Z% \ IF Z%(26%)=0% AND Y7%(0%)=1% THEN E$="No disk device unit number specified" \ E%=2048% \ GOTO 19090 1085 D1$=CVT%$(Z%(24%)+SWAP%(Z%(23%))) \ D1$=D1$+NUM1$(Z%(25%)) IF Z%(26%)<>0% \ U8%=0% \ U8%=Z%(25%) IF Z%(26%)<>0% \ Z%(1%)=6% \ Z0%=Z%(29%)+SWAP%(Z%(30%)) \ Z%=Z%(15%)+SWAP%(Z%(16%)) \ V$=RAD$(Z%(7%)+SWAP%(Z%(8%)))+RAD$(Z%(9%)+SWAP%(Z%(10%))) IF Z0% AND 1% \ IF (Z0% AND 16%) OR ((Z0% AND 1%)<>0% AND (Z9%(0%) AND 4%)) THEN E$="Syntax Error" \ E%=2048% \ GOTO 19090 1090 IF Z9%(0%) AND 16% AND Y6%=4% THEN ON ERROR GOTO 19020 \ OPEN D1$+":" AS FILE 1% \ Y8%=MAGTAPE(1%,0%,1%) \ CLOSE 1% 1095 GOTO 4000 IF Y7%(0%)=1% AND (Y6%=4% OR Y6%=1%) 1100 GOTO 1120 UNLESS Y7%(0%)=1% AND Y6%=1% \ Z%(Z1%)=0% FOR Z1%=11% TO 16% \ GOTO 1120 UNLESS (Z9%(0%) AND 480%)<>0% \ Z%(18%)=Z%(18%) OR 160% IF (Z9%(0%) AND 256%)<>0% \ Z%(18%)=Z%(18%) OR 192% IF (Z9%(0%) AND 128%)<>0% \ IF (Z9%(0%) AND 96%)<>0% THEN Z%(11%),Z%(12%)=255% \ IF (Z9%(0%) AND 32%)<>0% THEN D$=FNP$(Y$(1%),D$) \ Z%(Z1%+6%)=L%(Z1%) FOR Z1%=7% TO 10% 1120 Z%(2%)=(10%*((Y6% AND 17%)<>0%)+11%*(Y6%=4%))* ((Z% AND 128%)=128%)-3%*((Z% AND 1%)=1%) \ Z%(3%)=((Y6%=8%)*6%-(Y6% AND 6%))*(Z%=1%) 1130 IF Z%=128% THEN Z%(7%)=-VAL(Y$(1%))*(Y6%=16%) \ Z%(Z1%)=0% FOR Z1%=8% TO 22% \ IF (Z9%(0%) AND 12%) OR (Z0% AND 1%) THEN D$=FNP$("DOS",D$) IF Z9%(0%) AND 4% \ D$=FNP$("ANS",D$) IF (Z9%(0%) AND 8%) OR (Z0% AND 1%) \ Z%(11%)=L%(7%) \ Z%(12%)=L%(8%) 1150 CHANGE Z% TO D$ \ ON ERROR GOTO 19080 \ D$=SYS(D$) \ ON ERROR GOTO 19500 1155 IF (Y7%(0%)=128%) AND (Y6%=1%) THEN E%=0% \ GOSUB 11000 \ GOTO 19030 IF E% 1160 IF Y6%=1% AND Z9%(0%) AND 1% THEN Y6%=16% \ GOTO 1120 1170 IF Y6%=1% AND (Z9%(0%) AND 2%)=0% AND Z% AND 1% THEN Y6%=8% \ GOTO 1120 1180 IF Y6%=4% AND Z% AND 1% THEN Y6%=2% \ GOTO 1120 1190 I$ = SYS(CHR$(6%)+CHR$(22%)+CHR$(-1%)+CHR$(0%)+ "SYSLOG" + STRING$(10%,0%)+CVT%$(L0%)+C0$) \ GOTO 32710 4000 GOTO 4050 IF LEFT(D1$,2%)="DB" AND P8%<>1% \ L0%=L0% OR 2% IF LEFT(D1$,2%)="DB" \ ON ERROR GOTO 19080 \ OPEN D1$+":" FOR INPUT AS FILE 1% \ GET #1%, RECORD 1% \ FIELD #1,2% AS D$,2% AS D$ \ IF CVT$%(D$)<>-1% THEN E%=16384% \ E$="Disk does not have RSTS File-Structure" \ GOTO 19090 4010 FIELD #1%,10% AS D$,2% AS D$,2% AS N0$,2% AS N1$ \ IF (SWAP%(CVT$%(D$)) AND 16384%)=0% THEN E%=16384% \ E$="Disk Pack is Public" \ GOTO 19090 4020 GOTO 4040 IF P8%=1% OR Y6%<>4% \ IF (Z0% AND 1%)=0% THEN E%=16384%+128% \ E$="Pack ID must be specified" \ GOTO 19030 4030 IF V$<> (RAD$(SWAP%(CVT$%(N0$)))+RAD$(SWAP%(CVT$%(N1$)))) THEN E%=16384%+128%+20% \ GOTO 19030 4040 CLOSE 1% \ GOTO 1100 4050 E%=16384% \ E$="RP04 PACKS MAY NOT BE MOUNTED OR DISMOUNTED." \ GOTO 19090 9000 DATA "*STARTSW" 9010 DATA "JOB", 3,4134, 1,128,0,1, 242,0,1,"", 0,0,0, "LOCK", 4,4097, 2, 1,0,1,1565,0,0,"", 0,0,0, "DOS", 3,4097, 3,128,0,1, 250,0,0,"", 0,0,0, "ANSI", 3,4097, 4,128,0,1, 246,0,0,"", 0,0,0, "UNLOAD", 3,4097, 5,128,0,4,1775,0,0,"", 0,0,0, "LOGICAL", 3,4226, 6, 1,0,1,1629,0,1,"", 0,0,0, "NOLOGICAL", 3,4097, 7, 1,0,1,1597,0,0,"", 0,0,0, "PRIVATE", 3,4097, 8, 1,0,1,1565,0,0,"", 0,0,0, "RONLY", 2,4097, 9,129,0,1, 32,0,0,"", 0,0,0, "DENSITY", 3,4138,10,128,0,1, 242,0,2,"8001600",1,4,0, "PARITY", 3,4106,11,128,0,1, 242,0,3,"ODDEVEN",1,4,0 9020 DATA "*ENDSW", 0,0,0,0,0,0,0,0,0,"",0,0,0 10100 RESTORE \ Z$="" \ READ Z$ UNTIL Z$="*STARTSW" 10110 READ Z$,Z%,Z0%,Z1%,Z2%(0%),Z2%(1%),Z3%,Z4%(0%),Z4%(1%),Y%, Z0$,Z0%(0%),Z0%(1%),Z0%(2%) \ GOTO 10270 IF Z$="*ENDSW" \ GOTO 10110 IF LEFT(Z$,Z%)<>MID(F$,P%+1%,Z%) 10120 E%=0% \ Z%=Z%+1% \ Z1$=MID(F$,P%+Z%,1%) \ E%=Z% IF INSTR(1%,S$,Z1$) IF ASCII(Z1$) 10130 IF (E%+INSTR(1%,T$,Z1$))=0% THEN IF MID(Z$,Z%,1%)<>Z1$ THEN 10110 ELSE GOTO 10120 ELSE Z%=Z%+1% UNTIL INSTR(1%,T$,MID(F$,P%+Z%,1%))<>0% IF E% \ Z8%=P%+Z% \ E$=MID(F$,P%+1%,Z8%-P%-1%) 10150 Z9%=0% \ Z1%=Z1%-1% \ Z4%=Z1%/16% \ Z5%=Z1% AND 15% \ GOTO 10110 IF (Z0% AND Y8%)=0% OR ((-(E%<>0%)+1%) AND Z0%)=0% OR (Y6% AND (Y6% AND Z3%)=0%) OR (Z9%(Z4%) AND 2%^Z5%)<>0% OR (Z8%(Z4%) AND 2%^Z5%)<>0% 10170 GOTO 10110 IF ((Y7%(Z%) AND Z2%(Z%))=0% AND Z2%(Z%)<>0%) OR (Z4%(Z%) AND Z9%(Z%))<>0% FOR Z%=0% TO 1% \ F$=RIGHT(F$,Z8%) 10190 Z0%=(Z0% AND 4092%)/4% \ Z$=RIGHT(E$,E%+1%) \ Z$=Z0$ IF E%=0% \ GOTO 10230 UNLESS Z0% 10200 Z9%=0% \ ON ERROR GOTO 10260 \ Z9%=8192% IF VAL(Z$)>VAL(Z0$) IF Z0% AND 1% AND P8%<>1% \ Z$=NUM1$(VAL(Z$)) IF Z0% AND 8% \ Z$=FNF0$(Z$,Z0$) IF Z0% AND 32% \ Z$=FNM$(Z$,Z0$) IF Z0% AND 2% \ GOTO 10250 IF Z9% 10210 Z$=FND1$(Z$) IF Z1%=10% \ Z$=FNP1$(Z$) IF Z1%=11% \ GOTO 10250 IF Z9% 10230 Y6%=Y6% AND Z3% \ Y7%(Z%)=Y7%(Z%) AND Z2%(Z%) UNLESS Z2%(Z%)=0% FOR Z%=0% TO 1% \ Z8%(Z%)=Z8%(Z%) OR Z4%(Z%) FOR Z%=0% TO 1% \ Z9%(Z4%)=Z9%(Z4%) OR 2%^Z5% 10250 Y$(Y%)=Z$ IF (Z0% OR E%) AND Z9%=0% \ E%=Z9% \ ON ERROR GOTO 19500 \ RETURN 10260 Z9%=8192% OR ERR \ RESUME 10250 10270 E%=0% \ E%=8192% IF Y8% AND 12288% \ P%=P%+1% IF Y8% AND 16384% \ RETURN 11000 P1%=0% \ E1%=3% \ ON ERROR GOTO 11200 \ GOTO 11030 IF (Z9%(0%) AND 12%) \ CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO M% \ D%=M%(7%)+SWAP%(M%(8%)) \ CHANGE SYS(CHR$(6%)+CHR$(-12%)) TO M% \ M%(J%)=M%(J%)+SWAP%(M%(J%+1%)) FOR J%=5% TO 23% STEP 2% \ FOR J%=(M%(5%)+M%(9%)) TO (M%(23%)-2%) STEP 2% \ D$=CVT%$(SWAP%(PEEK(J%))) \ GOTO 11010 UNLESS (D$="MM") OR (D$="MT") \ P1%=PEEK(PEEK(D%+J%-M%(5%))+2%*U8%) \ P1%=SWAP%(PEEK(P1%+24%)) AND 255% \ GOTO 11020 11010 NEXT J% 11020 IF P1%=0% THEN PRINT "Magtape is in DOS format" ELSE PRINT "Magtape is in ANSI format" 11030 OPEN D1$+":" AS FILE 1% \ E1%=1% \ S8%=MAGTAPE(7%,0%,1%) \ D8%=800%+800%*((S8% AND 8%)/8%) \ D8%=800%-800%*(Y$(2%)="1600") IF Z9%(0%) AND 512% \ D8%=D8% OR 16384% IF Y$(3%)="EVEN" IF Z9%(0%) AND 1024% \ D8%=D8% OR (S8% AND 2048%)*8% UNLESS Z9%(0%) AND 1024% \ W%=FNP9%(D8%) \ IF W%=0% THEN E$="Density/Parity setting cannot be set on this drive" \ E%=16384%+64% \ GOTO 11205 11040 E1%=2% \ W%=MAGTAPE(3%,0%,1%) \ E1%=1% \ ON ERROR GOTO 11195 \ GET #1% 11050 ON ERROR GOTO 11200 \ W%=MAGTAPE(3%,0%,1%) \ S8%=MAGTAPE(7%,0%,1%) \ W%=(S8% AND 2048%)*8% \ W%=W%+800%+800%*((S8% AND 8%)/8%) \ IF W%<>D8% THEN E%=13% \ GOTO 11205 11090 GOTO 11120 IF ((Z9%(0%) AND 8%)=0%) AND (P1%=0%) AND ((Z0% AND 1%)=0%) \ FIELD #1%, RECOUNT AS L$ \ IF MID(L$,1%,4%)<>"VOL1" THEN E$="Invalid ANSI magtape label" \ E%=16384%+64% \ GOTO 11205 11100 IF (Z0% AND 1%)=0% THEN PRINT "%Volume ID should be specified on ANSI magtape mount" \ GOTO 11120 11110 IF V$<>MID(L$,5%,6%) THEN E$="Volume IDs don't match" \ E%=16384%+64% \ GOTO 11205 11120 IF Z9%(0%) AND 256% THEN IF S8% AND 1024% THEN PRINT "Tape is mounted write locked" ELSE E$="Tape is not write locked" \ E%=16384%+64% \ GOTO 11205 11130 IF (Z9%(0%) AND 256%)=0% THEN IF S8% AND 1024% THEN E$="Tape is write locked" \ E%=16384%+64% \ GOTO 11205 11140 PRINT "DENSITY IS"+NUM$(W% AND 16383%)+", PARITY IS " +P$((W% AND 16384%)/16384%) IF (Z9%(0%) AND 1536%)=0% 11150 ON ERROR GOTO 11235 \ CLOSE 1% 11190 ON ERROR GOTO 19500 \ RETURN 11195 GOTO 11200 UNLESS ERR=11% \ FIELD #1%,RECOUNT AS L$ \ LSET L$=STRING$(RECOUNT,0%) \ RESUME 11050 11200 E%=ERR UNLESS E% \ RESUME 11205 11205 ON ERROR GOTO 11235 \ ON E1% GOTO 11210,11220,11230 11210 W%=MAGTAPE(3%,0%,1%) 11220 CLOSE 1% 11230 W$=SYS(CHR$(6%)+CHR$(11%)+STRING$(20%,0%)+LEFT(D1$,2%)+CHR$(U8%) +CHR$(255%)) \ GOTO 11250 11235 E%=ERR UNLESS E% \ RESUME 11240 11240 GOTO 11230 IF ERL=11150 \ W%=ERL/10%-1120% \ ON W% GOTO 11220,11230,11250 11250 E$="" UNLESS E%=16384%+64% \ E%=(16384%+64%) OR E% \ GOTO 11190 15010 DEF FNM$(Z$,Z0$) \ FNM$=Z$ \ Z%=INSTR(1%,Z0$,Z$) \ Z6%=0% \ WHILE Z6%<3% AND Z%<>Z0%(Z6%) \ Z6%=Z6%+1% \ NEXT \ IF (Z6%=3%) OR (Z%=0%) THEN Z9%=8192% \ FNM$="" \ E$="Illegal Operand - "+Z$ 15015 FNEND 15020 DEF FND1$(Z$) \ Z$="" IF VAL(Z$)=1600% IF Z9%(Z4%) AND 1024% \ FND1$=Z$ \ Z9%=8192% IF Z$="" \ E$="1600 BPI Illegal" IF Z$="" \ FNEND 15030 DEF FNP1$(Z$) \ Z$="" IF VAL(Y$(2%))=1600% IF Z9%(Z4%) AND 512% \ FNP1$=Z$ \ Z9%=8192% IF Z$="" \ E$="Illegal Parity Switch" IF Z$="" \ FNEND 15100 DEF FNP$(F$,Z$) 15140 ON ERROR GOTO 15170 \ Z$=SYS(CHR$(6%)+CHR$(-10%)+F$) \ CHANGE Z$ TO L% \ L%(13%)=STATUS AND ((L%(30%) AND 16%)<>0%) \ L%(14%)=SWAP%(L%(13%)) \ L%(15%)=-(2%^((L%(13%) AND 255%)/2%))*(L%(13%)<>0%) \ L%(16%)=SWAP%(L%(15%)) \ L%(1%)=0% UNLESS L%(29%)+SWAP%(L%(30%)) \ CHANGE L% TO Z$ 15160 FNP$=Z$ \ ON ERROR GOTO 19500 \ FNEND 15170 E%=(E% AND NOT(63%)) OR ERR \ E$=F$ \ Z%=0% \ Z$="" \ RESUME 15160 15200 DEF FNF0$(Z$,Z0$) 15210 ON ERROR GOTO 15280 \ Z0$=SYS(CHR$(6%)+CHR$(-10%)+Z$) \ CHANGE Z0$ TO L% \ GOTO 15290 UNLESS (L%(29%)+SWAP%(L%(30%)))=1% 15220 FNF0$=Z$ 15230 ON ERROR GOTO 19500 15240 FNEND 15280 RESUME 15290 15290 Z9%=8192%+64% \ E$="Illegal Logical Name - "+Z$ \ GOTO 15220 15300 DEF FNP9%(D8%) \ FNP9%=0% 15310 W2%=0% \ S8%=MAGTAPE(7%,0%,1%) \ W2%=-1% IF (D8% AND 16384%)<>0% AND (S8% AND 4096%)=0% \ W2%=-1% IF D8%=1600% AND (S8% AND 16%)=0% \ W1%=((D8% AND 16384%)/16384%)+8192% \ W1%=W1%+8% IF (S8% AND 4096%)<>0% \ W1%=W1%+256% IF (D8%=1600%) \ W1%=W1%+12% IF (S8% AND 4096%)=0% AND (D8% AND 800%)=800% \ S8%=MAGTAPE(6%,W1%,1%) \ S8%=MAGTAPE(7%,0%,1%) \ GOTO 15350 IF W1%<>((S8% AND 24576%)/8192%)*4%+ (S8% AND 2048%)/2048% UNLESS (W1% AND 256%)=(S8% AND 8%)*32% \ FNP9%=-1% UNLESS W2% 15350 FNEND 19010 E%=2048% OR E% \ E$=C$ \ GOTO 19090 19020 E%=16512% OR ERR \ E$="" \ GOTO 19040 19040 E0$="" \ E0$="?PROCESS " IF E% AND 16384% \ E0$="?SWITCH " IF E% AND 8192% \ E0$="?DECODE " IF E% AND 2048% \ E0$=E0$+"ERROR IN " 19050 E0$=E0$+"MOUNT" IF E% AND 64% \ E0$=E0$+"DISMOUNT" IF E% AND 128% \ E0$=E0$+"LOCK" IF E% AND 256% \ E0$=E0$+"UNLOCK" IF E% AND 512% \ E0$=E0$+"REASSIGN" IF E% AND 1024% 19060 E0$=E0$+" - "+CVT$$(RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(E% AND 63%)),3%),4%) IF E% AND 63% \ E0$=E0$+" - "+E$ IF LEN(E$) 19070 PRINT E0$ \ GOTO 32700 19080 E%=16384% OR ERR UNLESS D7%=-1% \ IF Y6%=16% AND D7%=0% THEN D7%=-1% \ W$=SYS(CHR$(6%)+CHR$(11%)+STRING$(20%,0%)+LEFT(D1$,2%) +CHR$(U8%)+CHR$(255%)) 19085 E$="" \ IF (E% AND 63%)=18% THEN E%=16384% \ IF Y6%=4% THEN E$="Disk Pack is Public" ELSE E$="Disk is Already MOUNTed" 19090 E%=Y6%*64% OR E% \ RESUME 19030 19510 RESUME 19520 19520 T$=RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(ERR AND 63%)),4%) \ T$="?UNEXPECTED ERROR - "+T$+" AT LINE"+ NUM$(ERL)+" - FATAL" \ PRINT T$ \ GOTO 32710 30010 E0%=2% 31010 E0%=4% UNLESS E0% \ PRINT \ C$=SYS(CHR$(7%)) 31020 IF E0%<>4% THEN 31030 ELSE C2%=INSTR(1%,C$,CHR$(13%)) 31025 IF C2%=0% THEN 31050 ELSE R9$=LEFT(C$,C2%-1%) \ R9%=CVT$%(RIGHT(C$,C2%+1%)) \ C$=RIGHT(C$,C2%+3%) \ C2%=INSTR(1%,C$,CHR$(13%)) \ C2%=LEN(C$)+1% UNLESS C2% \ R8$=RIGHT(C$,C2%+1%) \ C$=LEFT(C$,C2%-1%) 31030 C0$=C$ \ L0%=5% \C$=CVT$$(C$,1%+4%+8%+16%+32%+64%+128%+256%) \ FOR J%=5% TO 1% STEP -1% \ IF LEFT(C$,J%)=LEFT("MOUNT",J%) THEN C$=CVT$$(RIGHT(C$,J%+1%),2%) \ Y6%=1% \ GOTO 1050 IF C$<>"" \ GOTO 31050 31040 NEXT J% \ FOR J%=8% TO 1% STEP -1% \ IF LEFT(C$,J%)=LEFT("DISMOUNT",J%) THEN C$=CVT$$(RIGHT(C$,J%+1%),2%) \ Y6%=4% \ GOTO 1050 IF C$<>"" \ E%=128% \ GOTO 31050 31045 NEXT J% 31050 E%=64% UNLESS E%<>0% \ E%=2048%+E% \ C$="Missing Argument" IF C$="" \ E$="Illegal Command - "+C$ \ GOTO 19030 32710 CLOSE Z% FOR Z%=1% TO 12% \ GOTO 32767 IF E0% AND 2% \ C$=SYS(CHR$(8%)+CHR$(E%)+R8$) \ CHAIN R9$ R9% 32767 END