ȋ ȋ _V`ȋ _ `ȋ4 w  w  w  w ' w H (xE`'%#  7 ~  l DL B/TR/DIx/PLx/RW/RE/SK/RS8/BOh/NO/HE(/NU/FI/DAB/V4 vn& ыBw`ɋVB`Gh  R5 Pw Z5U BUEE PE QE   w  5p@0 70nӋ:! ! [[נAנZנ0נ9@  aW `߇  ww P  w|eeeeeeeeeee = cFe w-JAN--FEB--MAR--APR--MAY-|-JUN-x-JUL-t-AUG-p-SEP-l-OCT-h-NOV-d-DEC-`@  2_@5_(w wf:DF:DT:DK:DC:MT:DP'2#((T` `  ! 2 !2J !5 T D,ww pwl"' 017.577w :, 09A Z  5w  ͋fvv^ V``Np Nw F  &7D, !! !5 ߕ w RJw 6e e N`  ", 7  n  e%e w`v  ee נ * *2 7w \dh(m   ߕ w 8hK$ f& z  w K Mw \| vO L7Fhw dh rf& 7 &"  R  " C _   ΕP5 (0L! 0 Ha 7#nhf ȝV5Pȕ JЕ Ee0 w Kwʋ  e0( w xw pwl   &eBen j  w h ~ p d7$$7$!$r5 T ȕ ȋ +7 N *- 7   xw &w PMww  Hww zw jK5 07 * t  w h 7Pw ~PrP r N7 j5 0\ :R N *7@7 >   lV ɝɋ  @ 7`$  X O M5t55@ w 2Y?w *w F w50  - x w Mw  wpR*5 ,ɕ 5 w wRɕ b T ɋ5@ J7 BQ$%   8- w `Rȕȋ  ȕ T ɕ ɋe@ m@f2@ .t pE ^  JF40E T7 N\  " "   \  @  r w> @ Ze@^ V P _%  7n 7 ~7 7 z7 T7 T7 V7 |7 z7 ~7 |7 zjj 88PF%7 <@2 0  ` ` THE STANDARD COMMAND STRING FORMAT IS: #DEV:0% : K9%=M%(2%)/2% : PRINT " JOB"M%(1%)/2%" KB"RIGHT(NUM$( K9%),2%);" "DATE$(0%)" "TIME$(0%) 1100 I%=PEEK(PEEK(2098%)+20%) : IF I% THEN 8000 ELSE ON ERROR GOTO 9000 : IF T%=0% THJ1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! LOGOUT VERSION 4A EDIT 1 6/20/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM M%(30),N%(30) ! LOGOUT FOR RSTS V4A 1000 ON ERROR GOTO 9000 : PRINT "CONFIRM: "; : KILL "TEMP"+RIGHT(NUM$(100%+ASCII(CHR$(PEEK(2056%)))/2%), 3%)+".TMP" 1010 CHANGE SYS(CHR$(6%)+CHR$(14%)) TO M% : Q=256.*M%(28%)+M%(27%) : T=256.*M%(6%)+M%(5%) : OPEN "KB:" AS FILE 1% : INPUT #1%,L$ : CLOSE 1% 1020 IF ASCII(L$)=78% THEN 9100 ELSEK1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! PIP VERSION 4A EDIT 2 6/22/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM S%(80),S0%(30) ! PIP FOR RSTS V4A 200 OPEN "KB:" AS FILE 1% : E%=0% : M$="PIP" 800 ON ERROR GOTO 0 : GOSUB 8400 900 ON ERROR GOTO 1300 : CLOSE 2% : ON ERROR GOTO 1310 : CLOSE 3% 1000 ON ERROR GOTO 0 : S$=SYS(CHR$(0%)) : PRINT "*"; : I$="DF:" : O$="KB:" : E%=98% : E9%,G%,H%,C%,B%=0% : ON ERROR GOTO 1500 : INPUT LINE #1%,C$ : CHANGEL1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! PIPX VERSION 4A EDIT 2 6/22/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM S%(80),S0%(30) ! NON-RECORD I/O PIP FOR RSTS V4A 200 OPEN "KB:" AS FILE 1% : E%=0% : M$="PIP" 800 ON ERROR GOTO 0 : GOSUB 8400 900 ON ERROR GOTO 1300 : CLOSE 2% : ON ERROR GOTO 1310 : CLOSE 3% 1000 ON ERROR GOTO 0 : S$=SYS(CHR$(0%)) : PRINT "*"; : I$="DF:" : O$="KB:" : E%=98% : E9%,G%,H%,C%,B%=0% : ON ERROR GOTO 1500 : INPUT LINEMEN PRINT "#"; 1110 OPEN "KB:" AS FILE 1% : WAIT 30% : IF T% THEN 1210 1200 M$=SYS(CHR$(2%)) : INPUT LINE #1%,L$ 1210 M$=SYS(CHR$(3%)) : N$="$NOTICE.TXT" : M$=L$ : I%=INSTR(1%,L$,"/") : IF I% THEN N$="" : M$=LEFT(L$,I%-1%)+","+RIGHT(L$,I%+1%) 1300 PRINT "PASSWORD:"; : INPUT #1%,L$ : PRINT : M$=RIGHT(SYS(CHR$(6%)+CHR$(-10%)+"["+M$+"]"+L$),5%) : L$=SYS(CHR$(2%)) : CHANGE SYS(CHR$(6%)+CHR$(4%)+" "+M$) TO M% 1310 ON ERROR GOTO 0 : WAIT 0% : CLOSE 1% : IF M%(3%)=1% THEN 6000 ELSE N IF L$="I" THEN 1100 ELSE IF L$="?" THEN 1040 ELSE IF L$<>"" THEN 2000 1030 PRINT "TYPE '?' FOR HELP" : GOTO 1000 1040 PRINT "OPTIONS FOR 'CONFIRM:' ARE:" : PRINT " ? THIS HELP MESSAGE" : PRINT " N DON'T LOG ME OUT" : PRINT " I INDIVIDUAL FILE DELETION" : PRINT " K TO DELETE" 1050 PRINT " TO SAVE" : PRINT " OTHER LOG ME OUT" : GOTO 1000 1100 N%(I%)=0% FOR I%=0% TO 30% : N%(3%)=-1% 1110 ON ERROR GOTO 9000 : N%(3%)=N%(3%)+1% : IF N%(3%)>255% THEN N%(3%)=0% : N%(4%)=N%(O C$ TO S% : ON ERROR GOTO 0 : J%=0% : FOR I%=1% TO S%(0%) : IF S%(I%)<=32% THEN 1010 ELSE J%=J%+1% : S%(J%)=S%(I%) : IF S%(J%)>95% THEN S%(J%)=S%(J%)-32% 1010 NEXT I% : IF J%=0% THEN 1000 ELSE S%(0%)=J% : CHANGE S% TO C$ : S%,S0%=1% : M$="COMMAND" 1020 I%=INSTR(1%,C$,"/") : IF I%=0% THEN 2000 ELSE E0%=INSTR(I%,C$,",") : E1%=INSTR(I%,C$,"<") : J%=INSTR(I%+1%,C$,"/") : IF J%=0% THEN J%=32767% 1030 RESTORE : IF E0%<>0% AND E0%0% AND E1%95% THEN S%(J%)=S%(J%)-32% 1010 NEXT I% : IF J%=0% THEN 1000 ELSE S%(0%)=J% : CHANGE S% TO C$ : S%,S0%=1% : M$="COMMAND" 1020 I%=INSTR(1%,C$,"/") : IF I%=0% THEN 2000 ELSE E0%=INSTR(I%,C$,",") : E1%=INSTR(I%,C$,"<") : J%=INSTR(I%+1%,C$,"/") : IF J%=0% THEN J%=32767% 1030 RESTORE : IF E0%<>0% AND E0%0% AND E1%"K" THEN 1110 ELSE ON ERROR GOTO 1800 : KILL A$ : ON ERROR GOTO 9000 : GOTO 1120 1800 PRINT "ERROR DELETING FILE - "L$ : RESUME 1110 1900 IF ERR=5% THEN RESSI0$=MID(C$,I%+1%,J%-I%-1%) : C$=LEFT(C$,I%-1%)+RIGHT(C$,J%) : O0$="" : E1%=INSTR(1%,I0$,":") : IF E1% THEN O0$=RIGHT(I0$,E1%+1%) : I0$=LEFT(I0$,E1%-1%) 1060 READ I1$,J%,S1%,S2% : IF I1$="" THEN 800 ELSE IF I1$<>LEFT(I0$,2%) THEN 1060 ELSE ON J% GOTO 1100,1110,1120,1130,1140,1150,1160 1090 E%=ERR : M$="OPTION ARGUMENT" : RESUME 800 1100 IF S%<>1% THEN 800 ELSE S%=S1% : S0%=S2% : GOTO 1020 1110 IF S%<>1% THEN 800 ELSE S%=S1% : S0%=S2% : ON ERROR GOTO 1090 : B%=VAL(O0$) : ON ERROR GOTO 0 :TEN J%=E1% 1050 I0$=MID(C$,I%+1%,J%-I%-1%) : C$=LEFT(C$,I%-1%)+RIGHT(C$,J%) : O0$="" : E1%=INSTR(1%,I0$,":") : IF E1% THEN O0$=RIGHT(I0$,E1%+1%) : I0$=LEFT(I0$,E1%-1%) 1060 READ I1$,J%,S1%,S2% : IF I1$="" THEN 800 ELSE IF I1$<>LEFT(I0$,2%) THEN 1060 ELSE ON J% GOTO 1100,1110,1120,1130,1140,1150,1160 1090 E%=ERR : M$="OPTION ARGUMENT" : RESUME 800 1100 IF S%<>1% THEN 800 ELSE S%=S1% : S0%=S2% : GOTO 1020 1110 GOTO 800 1120 IF C% THEN 800 ELSE ON ERROR GOTO 1090 : C%=VAL(O0$) : ON ERROR U(6%)+CHR$(14%)) TO M% : M$=NUM$(M%(8)) : PRINT LEFT(M$,LEN(M$)-1%)","; RIGHT(NUM$(M%(7%)),2%) 8020 CHANGE M% TO M$ : M$=RIGHT(M$,7%) : CHANGE SYS(CHR$(6%)+CHR$(4%)+" "+M$) TO M% : IF M%(3%)=1% THEN 6000 8030 IF M%(4%)=0% THEN 5000 ELSE PRINT "JOB(S) "; : PRINT RIGHT(NUM$(M%(I%)/2%),2%); FOR I%=4% WHILE M%(I%)<>0% 8040 PRINT "ARE DETACHED UNDER THIS ACCOUNT" : INPUT "JOB NUMBER TO ATTACH TO";T% 8050 IF T%=0% THEN 5000 ELSE PRINT "ATTACHING TO JOB"T% : ON ERROR GOTO 9100 VUME 1000 ELSE RESUME 9010 2000 CHANGE M% TO L$ : L$=RIGHT(L$,7%) : CHANGE SYS(CHR$(6%)+CHR$(4%)+" "+L$) TO N% 2010 I%=N%(3%)-1% : IF I% THEN 7000 ELSE IF Q=0 THEN 7000 ELSE IF T<=Q THEN 7000 2020 PRINT "DISK QUOTA OF"Q"EXCEEDED BY"T-Q"BLOCKS" : PRINT "SOME FILE(S) MUST BE DELETED BEFORE LOGGING OUT" : GOTO 1000 7000 PRINT "SAVED ALL DISK FILES;"T"BLOCKS IN USE"; : PRINT ","Q-T"FREE"; IF Q-T>=0 AND Q<>0 : PRINT : Q=TIME(0%) : T=TIME(1%) : Q0=TIME(2%) : L$=SYS(CHR$(6%)+CHR$(5%)) W GOTO 1020 1120 IF C% THEN 800 ELSE ON ERROR GOTO 1090 : C%=VAL(O0$) : ON ERROR GOTO 0 : GOTO 1020 1130 IF G% THEN 800 ELSE G%=S1% : GOTO 1020 1140 IF H% AND S1% THEN 800 ELSE H%=H%+S1% : GOTO 1020 1150 IF S%<>1% THEN 800 ELSE S%=S1% : S0%=S2% : IF O0$="" THEN 1020 ELSE IF ASCII(O0$)=70% THEN 1020 ELSE IF ASCII(O0$)<>84% THEN 800 ELSE S0%=5% : GOTO 1020 1160 IF S%<>1% THEN 800 ELSE S%=S1% : S0%=S2% : IF O0$="" THEN 1020 ELSE IF ASCII(O0$)<>83% THEN 800 ELSE S0%=3% : GOTO 1020 1200 DATXGOTO 0 : GOTO 1020 1130 IF G% THEN 800 ELSE G%=S1% : GOTO 1020 1140 IF H% AND S1% THEN 800 ELSE H%=H%+S1% : GOTO 1020 1150 GOTO 800 1160 IF S%<>1% THEN 800 ELSE S%=S1% : S0%=S2% : IF O0$="" THEN 1020 ELSE IF ASCII(O0$)<>83% THEN 800 ELSE S0%=3% : GOTO 1020 1200 DATA "FA",1,2,2, "CL",3,0,0, "DE",1,3,0 1210 DATA "BR",1,4,1, "GO",4,13,0, "HE",5,1,0 1220 DATA "DI",7,4,2, "RE",1,5,0, "UP",5,2,0 1230 DATA "ZE",1,6,0 1290 DATA "",0,0,0 1300 E%=ERR : M$="OUTPUT CLOSE" : RESUME 800 1310 E%=ERR : MY8060 L$=SYS(CHR$(6%)+CHR$(6%)+CHR$(T%*2%)+" "+M$) : STOP 9000 RESUME 9010 9010 IF ERR=27% THEN 32760 ELSE T%=T%+1% : IF T%<5% THEN PRINT "INVALID ENTRY - TRY AGAIN" : PRINT "#"; : GOTO 1200 9020 PRINT "ACCESS DENIED" : M$=SYS(CHR$(0%))+SYS(CHR$(2%)) : PRINT CHR$(4%) : ON ERROR GOTO 32750 : M$=SYS(CHR$(6%)+CHR$(-9%)+CHR$(K9%)+CHR$(0%)) : GOTO 32750 9100 RESUME 9110 9110 PRINT "FAILURE TO ATTACH TO JOB"T% : GOTO 6000 9200 RESUME 8010 32000 ON ERROR GOTO 32750 : OPEN "KB:" AS FZ: CHANGE SYS(CHR$(6%)+CHR$(9%)+CHR$(0%)) TO N% 7010 L$=NUM$(M%(8%)) : PRINT "JOB"N%(1%)/2%"USER"LEFT(L$,LEN(L$)-1%); ","RIGHT(NUM$(M%(7%)),2%)"LOGGED OFF KB"; RIGHT(NUM$(N%(2%)/2%),2%)"AT "DATE$(0%)" "TIME$(0%) 7020 PRINT RIGHT(NUM$(I%),2%)"OTHER USER(S) STILL LOGGED IN UNDER"; " THIS ACCOUNT" IF I% : PRINT "SYSTEM "; : PRINT CHR$(N%(I%)); FOR I%=3% WHILE N%(I%)<>0% : PRINT : PRINT "RUN TIME WAS"; : GOSUB 8000 : PRINT "ELAPSED TIME WAS"; 7040 T=Q0*600.+10.*(Q-60.*INT(Q/60.)) : GOSU[A "FA",1,2,2, "BL",2,2,3, "CL",3,0,0 1210 DATA "DE",1,3,0, "BR",1,4,1, "GO",4,13,0 1220 DATA "HE",5,1,0, "CO",6,2,4, "DI",7,4,2 1230 DATA "RE",1,5,0, "UP",5,2,0, "ZE",1,6,0 1290 DATA "",0,0,0 1300 E%=ERR : M$="OUTPUT CLOSE" : RESUME 800 1310 E%=ERR : M$="INPUT CLOSE" : RESUME 800 1500 E%=ERR : IF E%=11% THEN RESUME 9999 ELSE M$="COMMAND" : RESUME 800 2000 ON S% GOTO 2010,2020,4000,5000,6000,7000 2010 IF INSTR(1%,C$,"=") THEN 6000 2020 IF H% AND 1% THEN C$=C$+"$PIP.TXT" 3000 GOSUB 8100 : GOSUB 8\$="INPUT CLOSE" : RESUME 800 1500 E%=ERR : IF E%=11% THEN RESUME 9999 ELSE M$="COMMAND" : RESUME 800 2000 ON S% GOTO 2010,2020,4000,5000,6000,7000 2010 IF INSTR(1%,C$,"=") THEN 6000 2020 S%,S0%=2% : IF H% AND 1% THEN C$=C$+"$PIP.TXT" 3000 GOSUB 8100 : GOSUB 8200 : IF E% THEN M$=O$ : GOTO 800 3100 ON ERROR GOTO 0 : IF E9% THEN 3300 ELSE GOSUB 8000 : M$=I$ 3110 ON ERROR GOTO 3900 : OPEN I$ FOR INPUT AS FILE 3%, RECORD SIZE B% : ON ERROR GOTO 3800 : E8%=0% 3190 INPUT LINE #3%,I0$ : PRINT #O%,I0]ILE 1% : INPUT LINE #1%,L$ : IF LEFT(L$,5%)="HELLO" THEN T%=0% : L$=RIGHT(L$,6%) : IF ASCII(L$)<32% THEN 1000 ELSE T%=1% : M$=SYS(CHR$(3%)) : GOTO 1000 32010 L$=LEFT(L$,LEN(L$)-1%) : T%=ASCII(RIGHT(L$,LEN(L$))) : IF T%=13% OR T%=10% THEN 32010 32020 IF L$="" THEN 32760 ELSE IF L$="I" THEN T%=0% : GOTO 1000 32030 IF LEFT(L$,3%)="SYS" THEN L$=SYS(CHR$(8%)+RIGHT(L$,5%)) : CHAIN "$SYSTAT" 32000% 32040 IF LEFT(L$,3%)="SET" THEN L$=SYS(CHR$(8%)+RIGHT(L$,5%)) : CHAIN "$TTYSET" 32000% 32100^B 8000 7050 PRINT "GOOD "; : IF Q<43200 THEN PRINT "MORNING" ELSE IF Q<64800 THEN PRINT "AFTERNOON" ELSE PRINT "EVENING" 7060 PRINT CHR$(10%); FOR I%=1% TO 12% : L$=SYS(CHR$(9%)) : STOP 8000 I%=T/36000. : IF I%<>0% THEN PRINT I%"HOUR"; : IF I%=1% THEN PRINT ","; ELSE PRINT "S,"; 8010 T=T-36000.*I% : I0%=T/600. : IF I%<>0% OR I0%<>0% THEN PRINT I0%"MINUTE"; : IF I0%=1% THEN PRINT ","; ELSE PRINT "S,"; 8020 T=INT(T-600.*I0%) : PRINT T/10"SECOND"; : IF T/10==1 THEN PRINT ELSE PRINT "S"_200 : IF E% THEN M$=O$ : GOTO 800 3010 S2%=O0% : S3%=0% : FIELD #O%, O0% AS O0$ 3100 ON ERROR GOTO 0 : IF E9% THEN 3300 ELSE GOSUB 8000 : M$=I$ 3110 ON ERROR GOTO 3900 : OPEN I$ FOR INPUT AS FILE 3%, RECORD SIZE B% : ON ERROR GOTO 3800 : E8%=0% : ON S0% GOTO 3200,3190,3170,3200,3200 3170 IF O% THEN IF B% THEN FIELD #O%, B% AS O0$ 3180 GET #3% : FIELD #3%, RECOUNT AS I0$ : LSET O0$=I0$ : PUT #O% : GOTO 3180 3190 INPUT LINE #3%,I0$ : PRINT #O%,I0$; : GOTO 3190 3200 IF E8% THEN 3100 3210 `$; : GOTO 3190 3300 ON ERROR GOTO 0 : GOTO 5900 3800 E%=ERR : IF E%=G% THEN RESUME 0 ELSE IF E%=11% THEN RESUME 3100 ELSE M$="TRANSFER ERROR" : RESUME 800 3900 E%=ERR : IF M$=I$ THEN RESUME 3910 ELSE E%=5% : RESUME 800 3910 IF E%<>5% THEN 800 ELSE ON ERROR GOTO 0 : CHANGE SYS(CHR$(6%)+CHR$(-10%)+I$) TO S0% : S0%(E8%)=S0%(E8%)+SWAP%(S0%(E8%+1%)) FOR E8%=7% TO 11% STEP 2% 3920 IF S0%(11%) OR INSTR(1%,I$,".") THEN 800 ELSE I$=RAD$(S0%(7%))+RAD$(S0%(9%))+".BAS" : IF S0%(5%) OR S0%(6%) THEN IF L$<>"HELP" THEN 32600 ELSE OPEN "$HELP.TXT" FOR INPUT AS FILE 1% 32110 INPUT LINE #1%,L$ : PRINT L$; : GOTO 32110 32600 PRINT "PLEASE SAY HELLO" 32750 RESUME 32760 32760 CLOSE 1% : L$=SYS(CHR$(9%)) 32767 END  8030 RETURN 9000 RESUME 9010 9010 IF ERR=27% THEN CLOSE 1% : M$=SYS(CHR$(9%)) : STOP 9020 IF ERL=1000% THEN RESUME 1010 9100 CLOSE 1% : PRINT : PRINT : PRINT : PRINT "NEW OR OLD--"; : L$=SYS(CHR$(9%)) : STOP 9999 END  cGET #3% : S1%=RECOUNT : IF S0%=1% THEN FIELD #3%, S1% AS I0$ : S9%=INSTR(1%,I0$,CHR$(26%)) : IF S9% THEN S1%=S9%-1% : E8%=1% : IF S1%=0% THEN 3100 3220 IF S1%>S2% THEN 3230 ELSE FIELD #3%, S1% AS I0$ : FIELD #O%, S3% AS O0$, S1% AS O0$ : LSET O0$=I0$ : S3%=S3%+S1% : S2%=S2%-S1% : IF S2% THEN 3200 ELSE PUT #O% : S2%=O0% : S3%=0% : GOTO 3200 3230 S9%=S1%-S2% : FIELD #3%, S2% AS I0$, S9% AS I1$ : FIELD #O%, S3% AS O0$, S2% AS O0$ : LSET O0$=I0$ : PUT #O% : S1%=S9% : S2%=O0% : S3%=0% : d I$=I$+"["+NUM$(S0%(6%))+ ","+NUM$(S0%(5%))+"]" 3930 IF S0%(26%) THEN I$=CHR$(S0%(23%))+CHR$(S0%(24%))+ NUM$(S0%(25%))+":"+I$ 3940 GOTO 3110 4000 ON ERROR GOTO 0 : IF E9% THEN 1000 ELSE GOSUB 8000 : ON ERROR GOTO 4100 : KILL I$ : GOTO 4000 4100 E%=ERR : M$=I$ : GOSUB 8400 : RESUME 4000 5000 H%=0% : GOSUB 8100 : GOSUB 8200 : IF E% THEN M$=O$ : GOTO 800 5010 ON ERROR GOTO 0 : IF E9% THEN 5900 ELSE GOSUB 8000 : I0$=I$ : S%=4% : I%=INSTR(1%,I0$,"*") : IF I%=0% THEN 5070 ELSE J%=INSTR(1%,IePIP PERIPHERAL INTERCHANGE UTILITY PROGRAM GENERAL COMMENTS ON PIP COMMANDS 1) ALL SPACES, TABS, AND THE COMMAND LINE DELIMITER ARE IGNORED. 2) INPUT SPECIFICATIONS ARE OF THE FORM: DEV:[ACCT]NAME.EXT DEFAULTS ARE: NO SPECIFICATION LAST SPECIFICATION IS USED (INITIAL DEFAULT IS 'DF:') DEV: DEVICE 'DF:' [ACCT] CURRENT USER'S ACCOUNT NAME NO DEFAULT POSSIBLE EXT EXTENSION '.BAS' NOTE THAT NON-FILE-STRUCTURED INPUT DEVICES (I.E. KB:, PR:, CR:) IGNORE THE 'NAME.Ef1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! SYSTAT VERSION 4A EDIT 2 6/27/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM M%(30) ! SYSTAT FOR RSTS V4A 200 O9%=1% : PRINT "OUTPUT STATUS TO? "; : GOSUB 9000 : OPEN "KB:" AS FILE 1% : INPUT LINE #1%,S$ 210 S$=LEFT(S$,LEN(S$)-1%) : J%=ASCII(RIGHT(S$,LEN(S$))) : IF J%=13% OR J%=10% THEN 210 220 T$=S$ : J%=INSTR(1%,S$,"/") : IF J%=0% THEN S$="" ELSE T$=LEFT(S$,J%-1%) : S$=RIGHT(S$,J%+1%) 300 CLOSg FIELD #3%, S9% AS I0$ : LSET I0$=I1$ : GOTO 3220 3300 ON ERROR GOTO 0 : ON S0% GOTO 3310,5900,900,3400,900 3310 IF E0% THEN FIELD #O%, S3% AS O0$, 1% AS O0$ : LSET O0$=CHR$(26%) : S3%=S3%+1% 3400 IF S3%=0% THEN 900 ELSE IF E1% THEN PUT #O%, COUNT S3% : GOTO 900 3410 IF S3%=O0% THEN PUT #O% : GOTO 900 3420 FIELD #O%, S3% AS O0$, 1% AS O0$ : LSET O0$=CHR$(0%) : S3%=S3%+1% : GOTO 3410 3800 E%=ERR : IF E%=G% THEN RESUME 0 ELSE IF E%=11% THEN RESUME 3100 ELSE M$="TRANSFER ERROR" : RESUME 800 h0$,"*.*") : IF J% THEN S%=1% : I0$=LEFT(I0$,J%-1%)+RIGHT(I0$,J%+3%) : GOTO 5070 5020 J%=INSTR(1%,I0$,".") : I0$=LEFT(I0$,I%-1%)+RIGHT(I0$,I%+1%) : IF J%=0% THEN 5070 ELSE S%=3% : IF J% DEFAULTS ARE: NO SPECIFICATION SPECIFICATION OF 'KB:' DEV: DEVICE 'DF:' [ACCT] CURRECT USER'S ACCOUNT NAME NO DEFAULT POSSIBLE EXT NO DEFAULT POSSIBLE PROTECTION OF '<60>' NOTE THAT NON-FILE-STRUCTURED OUTPUT DEVICES (I.E. KB:, PP:, LP:) IGNORE THE 'NAME.EXT' 4) OPTION SPECIFICATIONS ARE OF THE FORM: /OPTION:ARGUMENT OPTIONS BEGIN WITH A SLASH (/) AND TERMINATE WITH A COMMA (,)jE 1% : O%=0% : IF INSTR(1%,T$,"$") OR INSTR(1%,T$,"[") THEN 920 ELSE IF T$<>"" THEN O%=1% : OPEN T$ FOR OUTPUT AS FILE O% 500 O7%=0% : O8%=15% : IF S$="" THEN 1000 ELSE O8%=0% : IF S$="DET" THEN O7%=2% : O8%=-1% : GOTO 1000 600 J%=1% : T$="S" : GOSUB 6000 : J%=2% : T$="B" : GOSUB 6000 : J%=4% : T$="D" : GOSUB 6000 : J%=8% : T$="F" : GOSUB 6000 610 IF O8% THEN IF S$<>"" THEN 920 ELSE 1000 620 O7%=1% : T$="K" : GOSUB 6000 : IF J0% THEN O7%=2% ELSE J0%=INSTR(1%,S$,",") : IF J0% THEk 3900 E%=ERR : IF M$=I$ THEN RESUME 3910 ELSE E%=5% : RESUME 800 3910 IF E%<>5% THEN 800 ELSE ON ERROR GOTO 0 : CHANGE SYS(CHR$(6%)+CHR$(-10%)+I$) TO S0% : S0%(E8%)=S0%(E8%)+SWAP%(S0%(E8%+1%)) FOR E8%=7% TO 11% STEP 2% 3920 IF S0%(11%) OR INSTR(1%,I$,".") THEN 800 ELSE I$=RAD$(S0%(7%))+RAD$(S0%(9%))+".BAS" : IF S0%(5%) OR S0%(6%) THEN I$=I$+"["+NUM$(S0%(6%))+ ","+NUM$(S0%(5%))+"]" 3930 IF S0%(26%) THEN I$=CHR$(S0%(23%))+CHR$(S0%(24%))+ NUM$(S0%(25%))+":"+I$ 3940 GOTO 3110 4000 ON ERl #O%,I$ ELSE PRINT #O%,"DIRECTORY "I$; " ON "DATE$(0%)" "TIME$(0%) : PRINT #O%, " NAME EXT LENGTH PROT "; : IF S0%=2% OR S9%=17% THEN PRINT #O%,"CREATION" ELSE PRINT #O%, " --CREATION-- ACCESS CLUSTER" 5100 ON ERROR GOTO 5800 : CHANGE S% TO S$ : CHANGE SYS(S$) TO S0% : ON ERROR GOTO 0 : S%(3%)=S%(3%)+1% : S%(4%)=SWAP%(S%(3%)) : ON S% GOTO 5200,5110,5130,5110 5110 FOR I%=7% TO 10% : IF S%(I%)<>S0%(I%) THEN 5100 5120 NEXT I% : IF S%=2% THEN 5200 5130 IF S%(11%)<>S0%(11%) ORm, A LESS THAN SIGN (<), ANOTHER SLASH (/), OR THE END-OF-LINE. A TERMINATOR OTHER THAN END-OF-LINE MEANS THAT THE TERMINATOR ALSO STARTS SOME MORE OF THE COMMAND LINE. FOR INSTANCE: LP:/FA4% THEN IF O8%<0% OR O8%>M%(5%-O7%) THEN 920 ELSE IF O7%=2% THEN 1000 ELSE IF O8%<1% THEN 920 ELSE 1000 650 IF O8%<0% OR O8%>254% OR J%<0% OR J%>254% THEN 920 ELSE O8%=O8%+SWAP%(J%) : IF O8%=0% THEN 1000 ELSE IF J%=0% THEN 920 ELSE 1000 900 RESUME 910 910 IF O9% THEN ON ERROR GOTO 0 ELSE ON ERRORoROR GOTO 0 : IF E9% THEN 1000 ELSE GOSUB 8000 : ON ERROR GOTO 4100 : KILL I$ : GOTO 4000 4100 E%=ERR : M$=I$ : GOSUB 8400 : RESUME 4000 5000 H%=0% : GOSUB 8100 : GOSUB 8200 : IF E% THEN M$=O$ : GOTO 800 5010 ON ERROR GOTO 0 : IF E9% THEN 5900 ELSE GOSUB 8000 : I0$=I$ : S%=4% : I%=INSTR(1%,I0$,"*") : IF I%=0% THEN 5070 ELSE J%=INSTR(1%,I0$,"*.*") : IF J% THEN S%=1% : I0$=LEFT(I0$,J%-1%)+RIGHT(I0$,J%+3%) : GOTO 5070 5020 J%=INSTR(1%,I0$,".") : I0$=LEFT(I0$,I%-1%)+RIGHT(I0$,I%+1%) : IF J%=p S%(12%)<>S0%(12%) THEN 5100 5200 IF S0%=1% THEN IF S1%>0% AND S1%<4% THEN PRINT #O%," "; ELSE IF S1%=4% THEN PRINT #O% : S1%=0% 5210 S1%=S1%+1% : PRINT #O%,RAD$(S0%(7%)+SWAP%(S0%(8%))); RAD$(S0%(9%)+SWAP%(S0%(10%)))"."; RAD$(S0%(11%)+SWAP%(S0%(12%))); 5220 IF S0%=1% THEN 5100 ELSE L=256.*S0%(14%)+S0%(13%) : T=T+L : S$=NUM$(L) : PRINT #O%,TAB(18%-LEN(S$));S$; : S$=NUM$(S0%(15%)) : PRINT #O%,TAB(23%-LEN(S$));S$; 5230 PRINT #O%," "DATE$(S0%(S9%)+SWAP%(S0%(S9%+1%))); : IF S0%qIES: 1) FILE TRANSFERS INCLUDING MERGES * OUTPUT < INPUT0, INPUT1, ..., INPUTN /OPTION IF THERE ARE MULTIPLE INPUT SPECIFICATIONS THEY ARE MERGED INTO A SINGLE OUTPUT SPECIFICATION. THE OPTIONS ARE: NO OPTION NORMAL (ASCII) FILE TRANSFER MODE /FA FORMATTED ASCII MODE (NULLS, PARITY AND RUBOUTS ARE IGNORED) /BL BLOCK MODE USING DEFAULT BLOCK SIZES /BL:N BLOCK MODE USING BLOCK SIZE N (IN BYTES) /CO CONTIGUOUS MODE WITH PARTIAL BUFFER NULL FILL /CO:T CONTIGUOr GOTO 32010 920 PRINT "ILLEGAL OPTIONS" : GOTO 1200 1000 IF T1% THEN PRINT #O% : PRINT #O%, "FURTHER LOGINS ARE DISABLED" 1010 IF O7% THEN J%=0% : PRINT #O% : GOSUB 2010 : GOTO 1200 1100 IF O8% AND 1% THEN GOSUB 1300 1110 IF O8% AND 2% THEN GOSUB 3000 1120 IF O8% AND 4% THEN GOSUB 8000 1130 IF O8% AND 8% THEN GOSUB 7000 1200 IF O% THEN PRINT #O%,CHR$(26%) : CLOSE O% 1210 IF O9% THEN 32767 ELSE PRINT : PRINT "BYE" : PRINT : GOTO 32010 1300 PRINT #O% : S$=RIGHT(SYS(CHR$(6%)+CHR$(9s0% THEN 5070 ELSE S%=3% : IF J%, ... /RE NEW = OLD CASE: 'OLD' SPECIFIES AN EXISTING DEVICE/FILE AND 'NEW' SPEv%)+CHR$(0%)),3%) : PRINT #O%,LEFT(S$,INSTR(1%,S$,CHR$(0%))-1%)" STATUS ON "; DATE$(0%)" AT "TIME$(0%)" UP: "; 1310 T=((PEEK(2048%)-PEEK(36%))*1440.+PEEK(38%)-PEEK(2050%)) *60.+60.-ASCII(CHR$(PEEK(2052%))) : GOSUB 10000 : PRINT #O%,S$ 2000 PRINT #O% : PRINT #O%, "JOB WHO WHERE WHAT SIZE STATE RUN-TIME" : J%=0% 2010 J%=J%+2% : J0%=PEEK(M%(11%)+J%) : IF J0%<0% THEN RETURN ELSE IF J0%=0% THEN 2010 ELSE T%=PEEK(PEEK(J0%)) : J2%=ASCII(CHR$(SWAP%(PEEK(T%+28%))))/2% : T1%=PEwATION" ELSE PRINT #O%, " --CREATION-- ACCESS CLUSTER" 5100 ON ERROR GOTO 5800 : CHANGE S% TO S$ : CHANGE SYS(S$) TO S0% : ON ERROR GOTO 0 : S%(3%)=S%(3%)+1% : S%(4%)=SWAP%(S%(3%)) : ON S% GOTO 5200,5110,5130,5110 5110 FOR I%=7% TO 10% : IF S%(I%)<>S0%(I%) THEN 5100 5120 NEXT I% : IF S%=2% THEN 5200 5130 IF S%(11%)<>S0%(11%) OR S%(12%)<>S0%(12%) THEN 5100 5200 IF S0%=1% THEN IF S1%>0% AND S1%<4% THEN PRINT #O%," "; ELSE IF S1%=4% THEN PRINT #O% : S1%=0% 5210 S1%=S1%+1% : PRIx #O%,CHR$(26%); : GOTO 900 6000 ON ERROR GOTO 0 : IF E9% THEN 1000 ELSE GOSUB 8000 : I0$=I$ : I%=INSTR(1%,I0$,"=") : IF I%=0% THEN O$=I0$ : GOTO 6100 6010 O$=LEFT(I0$,I%-1%) : I0$=RIGHT(I0$,I%+1%) : IF O$="" THEN O$=I0$ 6100 ON ERROR GOTO 6200 : NAME I0$ AS O$ : GOTO 6000 6200 E%=ERR : M$=I$ : GOSUB 8400 : RESUME 6000 7000 ON ERROR GOTO 0 : IF E9% THEN 1000 ELSE GOSUB 8000 : ON ERROR GOTO 7100 : CHANGE SYS(CHR$(6%)+CHR$(-10%)+I$) TO S0% : S0%(1%)=6% : S0%(2%)=13% : CHANGE S0% TO S$ yCIFIES WHAT NEW NAME, EXTENSION AND/OR PROTECTION TO SET THE 'OLD' FILE TO. = OLD CASE: 'OLD' SPECIFIES AN EXISTING DEVICE/FILE AND '' SPECIFIES WHAT NEW PROTECTION TO SET THE 'OLD' FILE TO. 4) ZERO DEVICE DIRECTORIES * DEV:[ACCT], ... /ZE ZEROS (CLEARS) THE SPECIFIED DEVICE(S)/ACCOUNT(S). 5) LIST DEVICE DIRECTORIES * INPUT0, INPUT1, ..., INPUTN /OPTION OPTIONS ARE: /BR BRIEF DIRECTORY LISTING (ONLY THE NAME AND EXTENSION IN A FOUR ACROSS THEzEK(J0%+20%) : IF ASCII(CHR$(PEEK(T%+2%)))<>J% THEN J2%=-1% 2020 IF O7% THEN IF O7%=1% AND J%/2%<>O8% THEN 2010 ELSE IF O7%=2% AND J2%<>O8% THEN 2010 ELSE IF O7%=4% AND T1%<>O8% THEN 2010 2030 PRINT #O%,J%/2%; : IF T1%=0% THEN S$="**,**" ELSE S$=NUM$(ASCII(CHR$(SWAP%(T1%)))) : S$=MID(S$,2%,LEN(S$)-2%)+","+RIGHT(NUM$(ASCII(CHR$(T1%))), 2%) 2040 PRINT #O%,TAB(9%-INSTR(1%,S$,","));S$" "; : IF J2%<0% THEN S$="DET" ELSE S$="KB"+RIGHT(NUM$(J2%),2%) 2120 PRINT #O%," "S$" "RAD$(P{NT #O%,RAD$(S0%(7%)+SWAP%(S0%(8%))); RAD$(S0%(9%)+SWAP%(S0%(10%)))"."; RAD$(S0%(11%)+SWAP%(S0%(12%))); 5220 IF S0%=1% THEN 5100 ELSE L=256.*S0%(14%)+S0%(13%) : T=T+L : S$=NUM$(L) : PRINT #O%,TAB(18%-LEN(S$));S$; : S$=NUM$(S0%(15%)) : PRINT #O%,TAB(23%-LEN(S$));S$; 5230 PRINT #O%," "DATE$(S0%(S9%)+SWAP%(S0%(S9%+1%))); : IF S0%=2% OR S9%=17% THEN 5290 5240 PRINT #O%," "TIME$(S0%(21%)+SWAP%(S0%(22%)))" "; DATE$(S0%(17%)+SWAP%(S0%(18%))); : S$=NUM$(S0%(27%)+SWAP%(S0%(28%))) : |: S$=SYS(S$) : GOTO 7000 7100 E%=ERR : M$=I$ : GOSUB 8400 : RESUME 7000 8000 I%=INSTR(1%,C$,",") : IF I% THEN J%=INSTR(1%,C$,"[") : IF J%<>0% AND J%I% THEN I%=INSTR(J%,C$,",") 8010 IF I%=0% THEN 8030 ELSE IF I%<>1% THEN I$=LEFT(C$,I%-1%) 8020 C$=RIGHT(C$,I%+1%) : RETURN 8030 E9%=1% : I%=LEN(C$)+1% : GOTO 8010 8100 I%=INSTR(INSTR(1%,C$,">")+1%,C$,"<") : O%=0% : IF I%<=1% THEN 8020 ELSE O$=LEFT(C$,I%-1%) : O%=2% : GOTO 8020 8200 E%=0% : IF O%=0% THE} PAGE FORMAT) /DI NORMAL DIRECTORY LISTING (NAME, EXTENSION, LENGTH, PROTECTION, AND DATE OF CREATION) /DI:S FULL DIRECTORY LISTING (FOR DISK: NAME, EXTENSION, LENGTH, PROTECTION, DATE OF CREATION, TIME OF CREATION, DATE OF LAST ACCESS, FILE CLUSTER SIZE) (FOR TAPE: NAME, EXTENSION, LENGTH, PROTECTION, DATE OF CREATION) THE INPUT SPECIFICATIONS ARE DECODED AS FOLLOWS: NO NAME.EXT ALL FILES ON DEVICE *.* ALL FILES ON DEVICE NAME.* ALL FILES OF SAME NAME ~EEK(M%(23%)+J%)); RAD$(PEEK(M%(25%)+J%)); 2130 S$=NUM$(ASCII(CHR$(PEEK(J0%+16%)))) : PRINT #O%," "LEFT(S$,LEN(S$)-1%)"K "; 2200 T%=PEEK(M%(15%)+J%) : S$="RNRSHBXXFPSLCRMTLPDTPPPRTTKBDF" : T1%=0% : IF T% AND PEEK(M%(13%)+J%) THEN 2240 ELSE T1%=T1%+1% : IF T%<0% THEN 2240 ELSE T%=T%/4% 2210 T1%=T1%+1% : IF T% AND 1% THEN 2240 ELSE T%=T%/2% : IF T% THEN 2210 2240 PRINT #O%,MID(S$,1%+T1%*2%,2%)" "; 2250 S$=" " : T%=M%(9%) 2260 T1%=PEEK(T%) : IF T1%=-1% THEN S$="SW" ELSE IF ASCII PRINT #O%,TAB(61%-LEN(S$));S$; 5290 S2%=S2%+1% : PRINT #O% : GOTO 5100 5800 E%=ERR : IF E%=5% THEN RESUME 5810 ELSE M$=I$ : GOSUB 8400 : RESUME 5010 5810 ON ERROR GOTO 0 : PRINT #O% : IF S0%=1% THEN 5010 ELSE S$=SYS(CHR$(0%)) : PRINT #O%, " TOTAL OF"T"BLOCKS IN"S2%"FILES" : PRINT #O% : GOTO 5010 5900 IF E0%=0% THEN 900 ELSE PRINT #O%,CHR$(26%); : GOTO 900 6000 ON ERROR GOTO 0 : IF E9% THEN 1000 ELSE GOSUB 8000 : I0$=I$ : I%=INSTR(1%,I0$,"=") : IF I%=0% THEN O$=I0$ : GOTO 6100 60N E0%=0% : E1%=1% : O0%=90% : RETURN 8210 ON ERROR GOTO 8280 : IF H% AND 2% THEN OPEN O$ AS FILE O%, RECORD SIZE B%, CLUSTER SIZE C% ELSE OPEN O$ FOR OUTPUT AS FILE O%, RECORD SIZE B%, CLUSTER SIZE C% 8220 ON ERROR GOTO 0 : ON ASCII(MID(SYS(CHR$(6%)+CHR$(-8%)+CHR$(O%)),3%,1%))/2%+1% GOTO 8230,8240,8250,8260,8270,8260,8230,8260 8230 E0%=26% : E1%=0% : O0%=512% : RETURN 8240 E0%= 0% : E1%=1% : O0%=128% : RETURN 8250 E0%=26% : E1%=0% : O0%=510% : RETURN 8260 E%=-1% : E$="ILLEGAL OUTPUT F *.EXT ALL FILES OF SAME EXTENSION NAME.EXT ONLY FILE OF THAT NAME.EXT TO DIRECT THE LISTING TO ANOTHER DEVICE USE: * OUTPUT < INPUT0, INPUT1, ..., INPUTN /OPTION END OF PIP.TXT  (CHR$(T1%))<>J% THEN T%=T%+2% : GOTO 2260 2270 PRINT #O%,S$" "; 2300 T0=PEEK(J0%+8%) : IF T0<0 THEN T0=T0+65536. 2310 T=INT(T0/10.) : T0=T0-10.*T : GOSUB 10000 : PRINT #O%,SPACE$(8%-LEN(S$));S$"."CHR$(48%+T0) : GOTO 2010 3000 PRINT #O% : PRINT #O%,"BUSY DEVICES:"; : J2%=0% : T1%=M%(5%)+6% : T%=PEEK(PEEK(M%(7%)+6%)) 3010 S$="KB" : GOSUB 4000 : S$="DT" : GOSUB 4000 : S$="LP" : GOSUB 4000 : S$="PR" : GOSUB 4000 : S$="PP" : GOSUB 4000 : S$="CR" : GOSUB 4000 : S$="MT" : GOSUB 4000 10 O$=LEFT(I0$,I%-1%) : I0$=RIGHT(I0$,I%+1%) : IF O$="" THEN O$=I0$ 6100 ON ERROR GOTO 6200 : NAME I0$ AS O$ : GOTO 6000 6200 E%=ERR : M$=I$ : GOSUB 8400 : RESUME 6000 7000 ON ERROR GOTO 0 : IF E9% THEN 1000 ELSE GOSUB 8000 : ON ERROR GOTO 7100 : CHANGE SYS(CHR$(6%)+CHR$(-10%)+I$) TO S0% : S0%(1%)=6% : S0%(2%)=13% : CHANGE S0% TO S$ : S$=SYS(S$) : GOTO 7000 7100 E%=ERR : M$=I$ : GOSUB 8400 : RESUME 7000 8000 I%=INSTR(1%,C$,",") : IF I% THEN J%=INSTR(1%,C$,"[") : IF J%<>0% AND J%"KB" THEN 4100 ELSE IF 8192% AND PEEK(T%+30%) THEN 5000 4100 IF J2%=0% THEN PRINT #O% : PRINT #O%, "DEVICE JOB WHY" : J2%=1% 4110 PRINT #O%,S$;RIGHT(NUM$(J0%),2%)" "J%/2%" "; : J%=PEEK(T%+30%) : IF J% AND -16384% THEN PRINT #O%,"AS"; 4120 IF ASCII(CHR$(J%)) THEN IF J% AND -16384% THEN PRINT #O%,"+INIT"; ELSETHEN J%=INSTR(J%,C$,"]") : IF J%>I% THEN I%=INSTR(J%,C$,",") 8010 IF I%=0% THEN 8030 ELSE IF I%<>1% THEN I$=LEFT(C$,I%-1%) 8020 C$=RIGHT(C$,I%+1%) : RETURN 8030 E9%=1% : I%=LEN(C$)+1% : GOTO 8010 8100 I%=INSTR(INSTR(1%,C$,">")+1%,C$,"<") : O%=0% : IF I%<=1% THEN 8020 ELSE O$=LEFT(C$,I%-1%) : O%=2% : GOTO 8020 8200 E%=0% : IF O%=0% THEN E0%=0% : E1%=1% : O0%=90% : IF B%=0% THEN RETURN ELSE O%=2% : O$="KB:" 8210 ON ERROR GOTO 8280 : IF H% AND 2% THEN OPEN O$ AS FILE O%, RECORD SIZE B%, 1,3,PRIV,0,2,SYSTEM MANAGER ACCOUNT 10,2,SAM,100,0,SAM JONES 10,3,MKS,250,2,MARY SMITH 10,4,STEVE,250,2,STEVE RUSSELL SK:PASSWORD";P$ 2020 INPUT "QUOTA";Q 2030 INPUT "CLUSTER SIZE";C% 2040 GOSUB 5000 2050 ON ERROR GOTO 0 : GOTO 2000 3000 ON ERROR GOTO 3900 : OPEN "$ACCT.SYS" FOR INPUT AS FILE 1% 3010 ON ERROR GOTO 3800 : INPUT #1%,P1%,P0%,P$,Q,C% 3020 IF P1%=1% AND P0%=1% THEN PRINT "ACCOUNT [1,1] BEING BYPASSED" : GOTO 3010 3030 IF P1%=1% AND P0%=2% AND INSTR(1%,P$,":")=0% THEN PRINT "ACCOUNT [1,2] ON SYSTEM DISK BEING BYPASSED" : GOTO 3010 3040 GOSUB 5000 : GOTO 3010 3800 RESUME 3810 3810 IF ERR<>11% T PRINT #O%,"INIT"; 4130 PRINT #O% 5000 T%=T%+32% : NEXT J0% : T1%=T1%+2% : RETURN 6000 J0%=INSTR(1%,S$,T$) : IF J0%=0% THEN RETURN ELSE S$=LEFT(S$,J0%-1%)+RIGHT(S$,J0%+1%) : O8%=O8%+J% : RETURN 7000 PRINT #O% : PRINT #O%, "SMALL LARGE ERRORS HUNG TTY'S" : PRINT #O%,PEEK(2110%)" "PEEK(2114%)" "; ASCII(CHR$(PEEK(2%)))" "ASCII(CHR$(SWAP%(PEEK(2%)))) : RETURN 8000 PRINT #O% : PRINT #O%,"DISK STRUCTURE:" : PRINT #O%,"DISK OPEN FREE CLUSTER ERRORS COMMENTS" : T%=M%(5%) : T1%=MCLUSTER SIZE C% ELSE OPEN O$ FOR OUTPUT AS FILE O%, RECORD SIZE B%, CLUSTER SIZE C% 8220 ON ERROR GOTO 0 : ON ASCII(MID(SYS(CHR$(6%)+CHR$(-8%)+CHR$(O%)),3%,1%))/2%+1% GOTO 8230,8240,8250,8240,8260,8270,8260,8230,8260 8230 E0%=26% : E1%=0% : O0%=512% : RETURN 8240 E0%= 0% : E1%=1% : O0%=128% : RETURN 8250 E0%=26% : E1%=0% : O0%=510% : RETURN 8260 E%=-1% : E$="ILLEGAL OUTPUT FILE" : RETURN 8270 E0%=26% : E1%=1% : O0%=128% : RETURN 8280 E%=ERR : RESUME 8230 8300 IF E%<0% THEN RETURN ELSE 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! TTYSET VERSION 4A EDIT 2 6/27/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM M%(14) ! TTYSET FOR RSTS V4A 200 PRINT "'TTYSET' TERMINAL CHARACTERISTICS PROGRAM" 300 O9%=ASCII(CHR$(SWAP%(PEEK(PEEK(2098%)+20%)))) : O%=255% 1000 ON ERROR GOTO 9200 : INPUT L$ : IF O9%<>1% OR LEFT(L$,2%)<>"KB" OR RIGHT(L$,LEN(L$))<>":" THEN 2900 1010 ON ERROR GOTO 2000 : O%=VAL(MID(L$,3%,LEN(L$)-3%)) : IF O%<0% OR O%>127% HEN PRINT "'$ACCT.SYS' READ ERROR" : GOTO 1000 3820 PRINT "ALL ACCOUNTS IN '$ACCT.SYS' ARE NOW ENTERED" : GOTO 1000 3900 RESUME 3910 3910 PRINT "FILE '$ACCT.SYS' OPEN ERROR" : GOTO 1000 4000 INPUT "PROJ,PROG";P1%,P0% 4010 INPUT "DISK";P$ 4020 ON ERROR GOTO 4900 : CHANGE SYS(CHR$(6%)+CHR$(-10%)+ P$) TO M% 4030 M%(0%)=30% : M%(1%)=6% : M%(2%)=1% : M%(7%)=P0% : M%(8%)=P1% : CHANGE M% TO M$ 4040 M$=SYS(M$) : ON ERROR GOTO 0 : GOTO 4000 4900 RESUME 4910 4910 M$=RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(%(19%) : J%=M%(21%) : J1%=M%(17%) 8010 S$="DF" : GOSUB 8100 : S$="DK" : GOSUB 8100 : S$="DP" 8100 FOR J0%=0% TO PEEK(T%) : J2%=PEEK(T1%) : IF J2%<0% THEN 8190 ELSE PRINT #O%,S$; RIGHT(NUM$(J0%),2%)" "ASCII(CHR$(J2%))" "; : T=PEEK(J%) : IF T<0 THEN T=T+65536. 8110 PRINT #O%,T" "ASCII(CHR$(PEEK(J1%)))" "; ASCII(CHR$(SWAP%(PEEK(J1%))))" "; : IF 16384% AND J2% THEN PRINT #O%,"PRIVATE"; ELSE PRINT #O%,"PUBLIC"; 8170 IF 8192% AND J2% THEN PRINT #O%,", LOCKED"; 8180 PRINT #O% 8190 E$=SYS(CHR$(6%)+CHR$(9%)+CHR$(E%)) : E$=MID(E$,3%,INSTR(3%,E$,CHR$(0%))-3%) : RETURN 8400 GOSUB 8300 : S$=SYS(CHR$(0%)) : PRINT M$" - "E$ : RETURN 9999 END  THEN 2010 ELSE 1000 2000 RESUME 2010 2010 ON ERROR GOTO 9200 : PRINT "ILLEGAL KB NUMBER" : O%=255% : GOTO 1000 2900 IF L$="EXIT" THEN 32767 3000 M%(I%)=0% FOR I%=5% TO 14% : M%(0%)=14% : M%(1%)=6% : M%(2%)=3% : M%(3%)=1% : M%(4%)=O% 3100 IF L$="TAB" THEN M%(6%)=128% : GOTO 8000 3110 IF L$="NO TAB" THEN M%(6%)=-1% : GOTO 8000 3120 IF L$="FORM" THEN M%(7%)=-1% : GOTO 8000 3130 IF L$="NO FORM" THEN M%(7%)=128% : GOTO 8000 3140 IF L$="LC" THEN M%(8%)=128% : GOTO 8000 3150 IF L$="NO LERR)),3%) : PRINT LEFT(M$,INSTR(1%,M$,CHR$(0%))-1%); " - FAILURE TO DELETE ACCOUNT:" 4920 GOSUB 9000 : PRINT : GOTO 4000 5000 ON ERROR GOTO 6000 : CHANGE SYS(CHR$(6%)+CHR$(-10%)+P$) TO M% 5010 M%(I%)=M%(I%-2%) FOR I%=12% TO 9% STEP -1% : M%(I%)=0% FOR I%=0% TO 8% : M%(I%)=0% FOR I%=13% TO 22% : M%(I%)=0% FOR I%=27% TO 30% 5020 IF Q<0 OR Q>65535 THEN Q=VAL("1..2") ELSE IF Q<32768 THEN Q%=Q ELSE IF Q=32768 THEN Q%=32767%+1% ELSE Q%=Q-65536 5030 M%(0%)=30% : M%(1%)=6% : M%(2%)=0% T1%=T1%+2% : J%=J%+2% : J1%=J1%+2% : NEXT J0% : T%=T%+2% : RETURN 9000 CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO M% : M%(J%)=M%(J%)+SWAP%(M%(J%+1%)) FOR J%=5% TO 25% STEP 2% : T1%=ASCII(CHR$(SWAP%(PEEK(2196%)))) : RETURN 10000 S$="" : T%=0% : T1%=T/3600. : IF T1% THEN T=T-3600.*T1% : GOSUB 11000 : S$=S$+":" 10010 T1%=T/60% : IF T1% OR T% THEN T=T-60%*T1% : GOSUB 11000 : S$=S$+":" 10020 T1%=T 11000 T$=NUM$(T1%+T%*100%) : S$=S$+MID(T$,2%+T%,LEN(T$)-2%-T%) : T%=1% : RETURN 32000 ON ERROR GOTO 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! UTILTY VERSION 4A EDIT 2 6/27/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM M%(30) ! UTILTY FOR RSTS V4A 1000 PRINT "'UTILTY' SYSTEM UTILITY PROGRAM" 1010 ON ERROR GOTO 9100 : INPUT LINE L$ : ON ERROR GOTO 0 1020 L$=LEFT(L$,LEN(L$)-1%) : I%=ASCII(RIGHT(L$,LEN(L$))) : IF I%=10% OR I%=13% THEN 1020 ELSE I%=0% : RESTORE 1030 I%=I%+1% : READ N$,N% : IF N$="END" THEN 1190 ELSE IF N% THEN M$=LEFT(L$,N%) ELSC" THEN M%(8%)=-1% : GOTO 8000 3160 IF L$="XON" THEN M%(9%)=-1% : GOTO 8000 3170 IF L$="NO XON" THEN M%(9%)=128% : GOTO 8000 3180 IF L$="ECHO" THEN M%(10%)=128% : GOTO 8000 3190 IF L$="NO ECHO" THEN M%(10%)=-1% : GOTO 8000 3200 IF L$="SCOPE" THEN M%(11%)=-1% : GOTO 8000 3210 IF L$="NO SCOPE" THEN M%(11%)=128% : GOTO 8000 3220 IF L$="ESC" THEN M%(12%)=-1% : GOTO 8000 3230 IF L$="NO ESC" THEN M%(12%)=128% : GOTO 8000 3240 IF LEFT(L$,6%)="WIDTH " THEN L%=VAL(RIGHT(L$,7%)) : IF L%<=0% OR : M%(7%)=P0% : M%(8%)=P1% : M%(13%)=Q% : M%(14%)=SWAP%(Q%) : M%(27%)=C% : M%(28%)=SWAP%(C%) 5100 CHANGE M% TO M$ : M$=SYS(M$) : RETURN 6000 RESUME 6010 6010 M$=RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(ERR)),3%) : PRINT LEFT(M$,INSTR(1%,M$,CHR$(0%))-1%); 6020 PRINT " - FAILURE TO ENTER ACCOUNT:" : GOSUB 9000 : PRINT " "Q;C% : RETURN 9000 M$=NUM$(P1%) : PRINT "["MID(M$,2%,LEN(M$)-2%)","; : M$=NUM$(P0%) : PRINT MID(M$,2%,LEN(M$)-2%)"] "P$; : RETURN 9999 END  32010 : O9%,O%=0% : S$=SYS(CHR$(7%)) : GOSUB 9000 : GOTO 500 32010 S$=SYS(CHR$(9%)) 32767 END  E M$=L$ 1040 IF N$<>M$ THEN 1030 ELSE IF N% THEN M$=RIGHT(L$,N%+1%) 1050 ON ERROR GOTO 9000 : ON I% GOTO 2100,2200,2300,2400,2500,2600,2700,2800,2900,3000, 3100,3200,3300,3400,3500,3600,3700,3800,3900,4000 1190 PRINT "UNRECOGNIZED COMMAND - "L$ : PRINT "TYPE 'HELP' FOR HELP" : GOTO 1010 1200 DATA "MOUNT ",6,"DISMOUNT ",9,"LOCK ",5,"UNLOCK ",7 1210 DATA "NO LOGINS",0,"LOGINS",0,"CLEAN ",6,"FORCE ",6 1220 DATA "SEND ",5,"KILL ",5,"CHANGE ",7,"QUOTA ",6 1230 DATA "ZERO ",5,"HANGUP "L%>254% THEN 9000 ELSE M%(5%)=L%+1% : GOTO 8000 3250 IF LEFT(L$,5%)="FILL " THEN 5000 3260 IF L$="NO FILL" THEN M%(13%)=1% : GOTO 8000 3270 IF LEFT(L$,6%)="SPEED " THEN L%=VAL(RIGHT(L$,7%)) : IF L%<0% OR L%>3% THEN 9100 ELSE M%(14%)=L%+1% : GOTO 8000 3280 IF L$="HELP" THEN 10000 4000 IF L$="KSR33" THEN L%=0% : GOTO 6000 4010 IF L$="ASR33" THEN L%=1% : GOTO 6000 4020 IF L$="KSR35" THEN L%=2% : GOTO 6000 4030 IF L$="ASR35" THEN L%=3% : GOTO 6000 4040 IF L$="VT05" THEN L%=4% : GOTO 61 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! INIT VERSION 4A EDIT 4 6/27/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 10 DIM M%(30) ! INIT FOR RSTS V4A 90 F$="START.CTL" : GOTO 110 100 F$="CRASH.CTL" 110 PRINT : PRINT "SYSTEM INITIALIZATION PROGRAM" : PRINT : ON ERROR GOTO 900 : OPEN F$ FOR INPUT AS FILE 1% 200 ON ERROR GOTO 920 : INPUT LINE #1%,L$ : ON ERROR GOTO 950 210 IF L$="LOGINS"+CHR$(13%)+CHR$(10%) THEN 400 220 IF L$="BYE"+CHR$(13%)+CHR$(10%) THEN MOUNT DK1:PUBLIC LOGINS SEND RSTS V4A IS NOW ON THE AIR... FORCE KB4: ^SET VT06 FORCE KB9: ^SET LA30S BYE ,7,"DATE ",5,"TIME ",5 1240 DATA "HELP",0,"EXIT",0,"END",0 2100 K0%=3% : K1%=0% 2110 CHANGE SYS(CHR$(6%)+CHR$(-10%)+M$) TO M% : M%(3%)=K1% 2120 M%(0%)=30% : M%(1%)=6% : M%(2%)=K0% : CHANGE M% TO M$ : M$=SYS(M$) : GOTO 1010 2200 K0%=3% : K1%=2% : GOTO 2110 2300 K0%=3% : K1%=4% : GOTO 2110 2400 K0%=3% : K1%=6% : GOTO 2110 2500 M$=SYS(CHR$(6%)+CHR$(-2%)) : GOTO 1010 2600 M$=SYS(CHR$(6%)+CHR$(-1%)) : GOTO 1010 2700 K0%=2% : GOTO 2110 2800 GOSUB 8000 : IF K0%<0% THEN 2910 ELSE I%=-4000 4050 IF L$="VT06" THEN L%=5% : GOTO 6000 4060 IF L$="LA30" THEN L%=6% : GOTO 6000 4070 IF L$="LA30S" THEN L%=7% : GOTO 6000 4900 PRINT "UNRECOGNIZED COMMAND - "L$ : PRINT "TYPE 'HELP' FOR HELP" : GOTO 8010 5000 M$=RIGHT(L$,6%) : IF M$="LA30" THEN M%(13%)=-1% : GOTO 8000 5010 L%=VAL(M$) : IF L%<0% OR L%>6% THEN PRINT "ILLEGAL FILL FACTOR"L% : GOTO 8010 5020 M%(13%)=L%+1% : GOTO 8000 6000 RESTORE : READ M%(I%) FOR I%=5% TO 14% FOR J%=0% TO L% : GOTO 8000 6010 DATA 73,-1,1420 230 IF LEFT(L$,6%)="MOUNT " THEN 500 240 IF LEFT(L$,5%)="SEND " THEN 410 250 IF LEFT(L$,6%)="FORCE " THEN 600 390 E%=109% : GOTO 960 400 ON ERROR GOTO 970 : N$="ENABLING LOGINS" : D$=SYS(CHR$(6%)+CHR$(-1%)) : GOTO 200 410 ON ERROR GOTO 970 : N$="SEND" : M$=CHR$(255%)+RIGHT(L$,6%) : CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO M% : D$=SYS(CHR$(6%)+CHR$(-5%)+CHR$(I%)+M$) FOR I%=1% TO M%(3%) : GOTO 200 420 ON ERROR GOTO 970 : N$="BYE" : SLEEP 5% : D$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(0%)+"BYE"+CHR$(MOUNT DK1:PUBLIC LOGINS SEND RSTS V4A RESTARTED. FORCE KB4: ^SET VT06 FORCE KB9: ^SET LA30S FORCE KB1: ^HELLO 10,1 FORCE KB1: MNGR FORCE KB1: RUN $ANALYS FORCE KB1: [0,1]CRASH.SYS FORCE KB1: LP: BYE % 2810 J%=ASCII(M$) : IF J%=32% THEN M$=RIGHT(M$,2%) : GOTO 2810 2820 IF J%<>94% THEN M$=M$+CHR$(13%) ELSE IF LEN(M$)=1% THEN M$=CHR$(3%) ELSE M$=CHR$(3%)+ RIGHT(M$,2%)+CHR$(13%) 2830 D$=SYS(CHR$(6%)+CHR$(I%)+CHR$(J%)+M$) FOR J%=K0% TO K1% : GOTO 1010 2900 GOSUB 8000 : IF K0%>=0% THEN I%=-5% : M$=CHR$(255%)+"** KB"+ RIGHT(NUM$(ASCII(CHR$(SWAP%(PEEK(PEEK(PEEK(PEEK(2098%)))+ 28%))))/2%),2%)+"** "+M$+CHR$(13%)+CHR$(10%) : GOTO 2830 2910 PRINT "ILLEGAL KB NUMBER IN "N$ : GOTO 1010 28,-1,128,128,128,128,1,1 6020 DATA 73,-1,128,-1, -1,128,128,128,1,1 6030 DATA 73,128,-1,-1,128,128,128,128,2,1 6040 DATA 73,128,-1,-1, -1,128,128,128,2,1 6050 DATA 73,128,128,-1,128,128,-1,-1,1,4 6060 DATA 73,-1,128,-1,128,128, -1,128,1,4 6070 DATA 81,-1,128,-1,128,128,128,128,1,4 6080 DATA 81,-1,128,-1,128,128,128,128,-1,4 8000 ON ERROR GOTO 9400 : CHANGE M% TO M$ : M$=SYS(M$) 8010 IF O%<>-1% THEN 1000 ELSE ON ERROR GOTO 32010 : PRINT : PRINT "BYE" : PRINT : GOTO 32100 9000 PRINT 27%)+ "FAST"+CHR$(27%)) : GOTO 999 500 ON ERROR GOTO 970 : N$="MOUNT" : CHANGE SYS(CHR$(6%)+CHR$(-10%)+RIGHT(L$,7%)) TO M% : M%(0%)=30% : M%(1%)=6% : M%(2%)=3% : M%(3%)=0% 510 ON ERROR GOTO 530 : CHANGE M% TO D$ : D$=SYS(D$) 520 ON ERROR GOTO 970 : M%(3%)=6% : CHANGE M% TO D$ : D$=SYS(D$) : GOTO 200 530 E%=ERR : RESUME 540 540 ON ERROR GOTO 970 : IF E%<>25% THEN 980 ELSE GOSUB 800 : PRINT "ATTEMPTING TO RECOVER" : ON ERROR GOTO 970 550 M%(2%)=2% : CHANGE M% TO D$ : D$=SYS(D$) : M%(2%)1 ! CONFIG VERSION 1A EDIT 1 7/17/72 100 DIM M%(12) : DIM#1%, C%(10000) 110 PRINT "'CONFIG' DC11 SET UP PROGRAM," : PRINT "TYPE 'HELP' FOR HELP." 120 OPEN "CORE.SYS[0,1]" FOR INPUT AS FILE 1%: X%=C%(512%) :X1%=(C%(513%)-X%)/8% 130 M%(0%)=12% : M%(1%)=6% : M%(2%)=-6% 200 PRINT "DC11 LINE (0-N), COMMAND"; : INPUT LINE D$ 210 X$=RIGHT(D$,LEN(D$)) : IF X$=CHR$(27%) THEN D$=LEFT(D$,LEN(D$)-1%) ELSE IF X$=CHR$(0%) THEN D$=LEFT(D$,LEN(D$)-3%) ELSE D$=LEFT(D$,LEN(D$)-2%) 215 IF LEFT(D$,1%)=" 3000 K0%=VAL(M$) : M$=SYS(CHR$(6%)+CHR$(8%)+CHR$(K0%)+SPACE$(24%)+CHR$(-1%)) : GOTO 1010 3100 K0%,K1%=0% : GOTO 3220 3200 K0%=INSTR(1%,M$," ") : IF K0%=0% THEN PRINT "NO NEW QUOTA IN "N$ : GOTO 1010 3210 Q=VAL(RIGHT(M$,K0%+1%)) : M$=LEFT(M$,K0%) : K1%=-1% : IF Q<32768 THEN K0%=Q ELSE IF Q=32768 THEN K0%=32767%+1% ELSE K0%=Q-65536 3220 CHANGE SYS(CHR$(6%)+CHR$(-10%)+M$) TO M% : M%(28%)=0% : M%(13%)=K0% : M%(14%)=SWAP%(K0%) : M%(21%)=K1% : M%(K0%)=M%(K0%-2%) FOR K0%=12% TO 7% "ILLEGAL WIDTH" : GOTO 8010 9100 PRINT "ILLEGAL SPEED" : GOTO 8010 9200 IF ERR=11% THEN RESUME 32767 ELSE RESUME 9210 9210 PRINT L$" COMMAND ERROR - "; : GOSUB 9300 : GOTO 1000 9300 L$=SYS(CHR$(6%)+CHR$(9%)+CHR$(ERR)) : PRINT MID(L$,3%,INSTR(3%,L$,CHR$(0%))-3%) : RETURN 9400 RESUME 9410 9410 IF O%<>-1% THEN ON ERROR GOTO 9200 ELSE ON ERROR GOTO 32010 9420 PRINT "ERROR - "; : GOSUB 9300 : GOTO 8010 10000 PRINT "'TTYSET' IS USED TO SET TERMINAL CHARACTERISTICS" 10010 PRINT "COMMANDS ARE:"=3% : GOTO 520 600 ON ERROR GOTO 970 : N$="FORCE" : M$=RIGHT(L$,7%) : IF LEFT(M$,2%)="KB" THEN M$=RIGHT(M$,3%) : GOTO 620 610 PRINT "NO OR ILLEGAL 'KBN:' IN FORCE" : GOTO 200 620 I%=INSTR(1%,M$,":") : IF I%=0% THEN 610 ELSE E%=VAL(LEFT(M$,I%-1%)) : M$=MID(M$,I%+2%,LEN(M$)-I%-2%) 630 IF ASCII(M$)=94% THEN IF LEN(M$)=2% THEN M$=CHR$(3%) ELSE M$=CHR$(3%)+RIGHT(M$,2%) 640 D$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(E%)+M$) : GOTO 200 800 ON ERROR GOTO 0 : M0$=SYS(CHR$(6%)+CHR$(9%)+CHR$(E%)) : PRINT MIH" THEN 330 ELSE IF D$="EXIT" THEN 990 ELSE I%=INSTR(1%,D$,",") : IF I%=0% THEN PRINT "COMMAND ERROR" : GOTO 200 220 D%=VAL(LEFT(D$,I%-1%)) : D$=RIGHT(D$,I%+1%) : IF (D%<0%) OR (D%>=X1%) THEN PRINT "INVALID DC11 LINE NUMBER" : GOTO 200 225 Z%=0% : M%(I%+5%)=PEEK(X%+D%*8%+I%) FOR I%=0% TO 6% STEP 2% : M%(I%+5%)=SWAP%(M%(I%+4%)) FOR I%=1% TO 7% STEP 2% 228 CHANGE M% TO X$ : CHANGE X$ TO M% !CLEAN UP HIGH BYTES OF M% 230 Y%=INSTR(1%,D$," ") : Y$=D$ : IF Y% THEN Y$=LEFT(D$,Y%-1%) : D$=RISTEP -1% : K0%=8% : GOTO 2120 3230 M%(13%)=K0% : M%(14%)=SWAP%(K0%) : K0%=8% : GOTO 2120 3300 K0%=13% : K1%=0% : GOTO 2110 3400 M$=M$+" " : GOSUB 8000 : IF K0%<0% OR K0%<>K1% THEN 2910 ELSE M$=SYS(CHR$(6%)+CHR$(-9%)+CHR$(K0%)+" ") : GOTO 1010 3500 RESTORE : D$="" : READ D$,I% WHILE D$<>"END" : I%=INSTR(1%,M$,"-") : IF I%=0% THEN 3610 ELSE K0%=VAL(LEFT(M$,I%-1%)) : M$=RIGHT(M$,I%+1%) : I%=INSTR(1%,M$,"-") : IF I%=0% THEN 3610 ELSE K1%=VAL(RIGHT(M$,I%+1%)) : M$=LEFT(M$,I%-1%) 3510 10020 PRINT " TAB NO TAB FORM NO FORM" 10030 PRINT " LC NO LC XON NO XON" 10040 PRINT " ECHO NO ECHO SCOPE NO SCOPE" 10050 PRINT " ESC NO ESC WIDTH <1-254>" 10060 PRINT " SPEED <0-3> FILL <0-6>" 10070 PRINT " NO FILL FILL LA30" 10100 PRINT "MACRO COMMANDS ARE:" 10110 PRINT " KSR33 ASR33 KSR35 ASR35" 10120 PRINT " VT05 VT06 LA30 LA30S" 10200 PRINT "NOTE THAT CHANGES (INCLUDING 'SPEED') ARE MADE" : PRINT " IMMEDIATELY." : PRINT "EXIT FROM 'TTYSET' WITH CTRL/C, CTRL/Z, OR 'EXIT'" 1100D(M0$,3%,INSTR(3%,M0$,CHR$(0%))-3%)" - "; : RETURN 900 E%=ERR : RESUME 910 910 GOSUB 800 : PRINT "ERROR IN OPENING "F$ : GOTO 999 920 E%=ERR : RESUME 930 930 GOSUB 800 : IF E%<>11% THEN PRINT "ERROR IN READING "F$ : GOTO 999 940 PRINT "INIT ASSUMED COMPLETE" : GOTO 999 950 E%=ERR : RESUME 960 960 GOSUB 800 : PRINT "ERROR DECODING COMMAND - "L$; : PRINT "LINE IGNORED - CONTINUING" : GOTO 200 970 E%=ERR : RESUME 980 980 GOSUB 800 : PRINT "ERROR IN "N$ : PRINT "COMMAND FAILURE FOR COMMAND "L$;GHT(D$,Y%+1%) 240 X$=CHR$(127%) : RESTORE : READ X$ FOR I%=0% UNTIL X$=Y$ OR X$="ZZZ" 250 DATA NO,TAB,FORM,LC,XON,ECHO,SCOPE,ESC,FILL 260 DATA WIDTH,SPEED,KSR33,ASR33,KSR35,ASR35,VT05,VT06,LA30,LA30S 299 DATA ZZZ 300 IF X$="ZZZ" OR (Z% AND (I%=1% OR I%>9%)) THEN PRINT "COMMAND ERROR" : GOTO 200 310 IF I%>11% THEN 600 ELSE ON I% GOTO 400,410,420,430,440,450,460,470,500,520,530 330 PRINT"'CONFIG' IS USED TO SET THE DEFAULT DC11 CHARACTERISTICS. THESE" 340 PRINT "DEFAULT CHARACTERISTICS TAKE AF IF K0%<0% OR K0%>31% THEN 3610 ELSE IF K1%<70% OR K1%>99% THEN 3610 ELSE I%=(K1%-70%)*1000% 3520 READ D$,J% : IF D$="FEB" THEN IF K1% AND 3% THEN 3530 ELSE J%=J%+1% 3530 IF D$<>M$ THEN IF D$="DEC" THEN 3610 ELSE I%=I%+J% : GOTO 3520 3540 IF K0%>J% THEN 3610 ELSE K0%=I%+K0% : K1%=0% : GOTO 3630 3580 DATA JAN,31,FEB,28,MAR,31,APR,30,MAY,31,JUN,30 3590 DATA JUL,31,AUG,31,SEP,30,OCT,31,NOV,30,DEC,31 3600 I%=INSTR(1%,M$,":") : IF I% THEN 3620 3610 PRINT "ILLEGAL FORMAT IN "N$ : GOTO 100 GOTO 8010 32000 ON ERROR GOTO 32010 : L$=SYS(CHR$(7%)) : O%=-1% : GOTO 3000 32010 IF ERR=27% THEN RESUME 32100 ELSE PRINT "COMMAND ERROR - "; : GOSUB 9300 : RESUME 8010 32100 L$=SYS(CHR$(9%)) 32767 END  : GOTO 200 999 CLOSE 1% : END  FECT EVERY TIME RSTS ANSWERS" 350 PRINT "THE PARTICULAR LINE. THEY REMAIN IN EFFECT UNTIL CHANGED" 360 PRINT "BY THE 'TTYSET' PROGRAM." : PRINT 370 PRINT "THE SYSTEM IS INITIALLY ASSEMBLED AS IF A FULL DUPLEX ASR33" 380 PRINT "WERE THE DEFAULT FOR ALL DC11 LINES. IF THIS IS SUFFICIENT," 385 PRINT "THEN THIS PROGRAM NEED NOT BE RUN." : PRINT 387 PRINT "COMMANDS TO CONFIG REQUIRE A DC11 LINE NUMBER (NOT THE KEYBOARD" 390 PRINT "NUMBER, PLEASE), AND SOME COMMAND (NAMELY: TAB, ECHO, LC, ETC.)." 393 10 3620 K0%=VAL(LEFT(M$,I%-1%)) : K1%=VAL(RIGHT(M$,I%+1%)) : IF K0%<0% OR K0%>23% THEN 3610 ELSE IF K1%<0% OR K1%>59% THEN 3610 ELSE K0%=1440%-K1%-K0%*60% : K1%=2% 3630 D$=SYS(CHR$(6%)+CHR$(-6%)+CHR$(K1%)+CHR$(8%)+CHR$(K0%)+ CHR$(SWAP%(K0%))) : PRINT N$"SET TO "; : IF K1% THEN PRINT TIME$(0%) ELSE PRINT DATE$(0%) 3640 GOTO 1010 3700 PRINT "COMMANDS ARE:" : PRINT " MOUNT DEV:ID DISMOUNT DEV:" : PRINT " LOCK DEV: UNLOCK DEV:" : PRINT " NO LOGINS LOGINS" 3710 PRINT " C1 ! 'ANALYS' CRASH DUMP ANALYSIS PROGRAM VERSION 4A EDIT 2 7/20/72 10 DIM #1, C%(28673) : DIM T%(30),T$(16) 20 B%=0% : R%=0% 100 PRINT "INPUT"; : INPUT LINE I$ : X$=RIGHT(I$,LEN(I$)) : IF X$=CHR$(10%) THEN I$=LEFT(I$,LEN(I$)-2%) ELSE IF X$=CHR$(27%) THEN I$=LEFT(I$,LEN(I$)-1%) ELSE I$=LEFT(I$,LEN(I$)-3%) 105 IF I$="" THEN I$="CRASH.SYS[0,1]" 110 INPUT "OUTPUT"; O$ : IF O$="" THEN O$="KB:" 120 OPEN I$ FOR INPUT AS FILE 1% : OPEN O$ FOR OUTPUT AS FILE 2% 130 READ T$(I%) FOR I%=1% UNTIL T$1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! MONEY VERSION 4A EDIT 1 6/20/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM M%(30) ! MONEY FOR RSTS V4A 200 CHANGE SYS(CHR$(6%)+CHR$(14%)) TO M% : IF M%(8%)<>1% THEN OPEN "KB:" AS FILE 1% : P9%=-1% : GOSUB 8100 : GOSUB 2000 : GOTO 9110 900 PRINT "'MONEY' SYSTEM ACCOUNTING PROGRAM" 1000 PRINT "OUTPUT DEVICE"; : INPUT LINE M$ : IF LEN(M$)<=2% THEN M$="KB:" 1010 OPEN M$ FOR OUTPUT AS FILE 1% : INPUT "PRINT "ALL OF THE 'TTYSET' COMMANDS ARE ACCEPTED BY 'CONFIG'." : PRINT 395 PRINT "WHEN DONE, USE THE 'EXIT' COMMAND TO EXIT." : GOTO 200 400 Z%=-1% : GOTO 230 !NO 410 I%=5% : J%=128%*(-Z%) : K%=128% : GOTO 800 !TAB 420 I%=5% : J%=64%*(Z%+1%) : K%=64% : GOTO 800 !FORM 430 I%=6% : J%=16%*(-Z%) : K%=16% : GOTO 800 !LC 440 I%=5% : J%=16%*(Z%+1%) : K%=16% : GOTO 800 !XON 450 I%=4% : J%=64%*(Z%+1%) : K%=64% : GOTO 800 !ECHO 460 I%=5% : J%=8%*(Z%+1%) : K%=8% : GOTO 800 !SCOPE 470 I%=6% : J%=128%*(Z%+LEAN DEV: KILL JOB#" : PRINT " SEND KBN: STRING FORCE KBN: [^]STRING" : PRINT " CHANGE [ACCT]PASSWORD QUOTA [ACCT] QUOTA" : PRINT " ZERO DEV:[ACCT] HANGUP KBN:" 3720 PRINT " DATE DD-MMM-YY TIME HH:MM" 3790 GOTO 1010 3800 GOTO 9999 3900 GOTO 4000 4000 PRINT "UNIMPLEMENTED COMMAND" : GOTO 1010 8000 IF LEFT(M$,4%)="ALL " THEN M$=RIGHT(M$,5%) : CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO M% : K0%=0% : K1%=M%(3%) : RETURN 8010 IF LEFT(M$,2%)<>"KB" THEN K0%=-1% : RETURN 8020 M$=RIGHT(M$,3(I%-1%)="NULINE" 140 C1$=SYS(CHR$(6%)+CHR$(-3%)) : CHANGE C1$ TO T% : T%(J%/2%)=T%(J%+3%)+SWAP%(T%(J%+4%)) FOR J%=2 TO 22% STEP 2% 150 T%(0%)=428% : T$(0%)="SP" 160 T%(12%)=ASCII(MID(C1$,4%,1%)) : T%(13%)=ASCII(MID(C1$,3%,1%)) 170 READ T$(I%) : IF T$(I%)<>"ZZZ" THEN READ T%(I%) : I%=I%+1% : GOTO 170 190 DATA DEVCNT,DEVPTR,CORTBL,JOBTBL,JBSTAT,JBWAIT,UNTCLU 191 DATA UNTCNT,SATCNT,NAME1,NAME2,JOBMAX,NULINE 192 DATA DATE,2048,TIME,2050 199 DATA ZZZ 200 PRINT #2%,"SYSTEM CRASHED AT " TIME$(FNA%PRINT PASSWORDS";M$ : P9%=0% : IF ASCII(M$)=78% THEN P9%=-1% 1020 INPUT "RESET";M$ : R9%=0% : IF ASCII(M$)=89% THEN R9%=-1% 1030 INPUT "DISK";M$ : CHANGE SYS(CHR$(6%)+CHR$(-10%)+M$) TO M% : INPUT "SELECTIVE";M$ : IF ASCII(M$)=89% THEN 9000 1100 PRINT #1% : PRINT #1%,"ACCOUNTING DUMP OF "; : IF M%(26%) THEN PRINT #1%,CHR$(M%(23%));CHR$(M%(24%)); CHR$(M%(25%)+48%);":"; ELSE PRINT #1%,"SYSTEM"; 1110 PRINT #1%," ON "DATE$(0%)" AT "TIME$(0%) : I%=1% : GOSUB 8100 1120 M%(0%)=30% : M1%) : K%=128% : GOTO 800 !ESC 500 IF Z% THEN J%=0% ELSE IF D$="LA30" THEN J%=7% ELSE J%=VAL(D$) 510 IF (J%<0%) OR (J%>7%) THEN 590 ELSE M%(11%)=(M%(11%)/8%)*8%+J% : GOTO 820 !FILL 520 J%=VAL(D$) : IF (J%<1%) OR (J%>254%) THEN 590 ELSE M%(12%)=J%+1% : GOTO 820 !WIDTH 530 J%=VAL(D$) : IF (J%<0%) OR (J%>3%) THEN 590 540 I%=(M%(5%)-(M%(5%)/32%)*32%)/8% : M%(5%)=M%(5%)-8%*(I%-J%) 550 I%=(M%(7%)-(M%(7%)/32%)*32%)/8% : M%(7%)=M%(7%)-8%*(I%-J%) 560 GOTO 820 !SPEED 590 PRINT "COMMAND ERROR%) : K0%=INSTR(1%,M$,":") : IF K0%=0% THEN K0%=-1% : RETURN 8030 ON ERROR GOTO 8100 : K1%=VAL(LEFT(M$,K0%-1%)) : ON ERROR GOTO 9000 : M$=RIGHT(M$,K0%+1%) : K0%=K1% : RETURN 8100 RESUME 8110 8110 ON ERROR GOTO 9000 : K0%=-1% : RETURN 9000 RESUME 9010 9010 ON ERROR GOTO 0 : M$=SYS(CHR$(6%)+CHR$(9%)+CHR$(ERR)) : PRINT MID(M$,3%,INSTR(3%,M$,CHR$(0%))-3%)" - IN "N$ : GOTO 1010 9100 IF ERR=11% THEN RESUME 9999 ELSE N$="COMMAND" : RESUME 9010 9999 END  (FNE%("TIME"))) " ON " DATE$(FNA%(FNE%("DATE"))) 210 J%=FNE%("SP") : I%=FNA%(J%) : PRINT #2%, "FROM LOCATION: " FNC$(FNA%(I%)) : PRINT #2%, "SAVED PS: " FNC$(FNA%(I%+2%)) 220 PRINT #2% : PRINT #2%," R";CHR$(I%);" ";FOR I%=48% TO 53% : PRINT #2%," SP" 230 PRINT #2%, FNC$(FNA%(J%-I%));" ";FOR I%=12% TO 0% STEP -2% : PRINT #2% 240 PRINT #2% : PRINT #2%,"BRIEF SYSTEM STATUS SUMMARY FOR THE TIME OF CRASH:" : PRINT #2%,"JOB"," WHO","WHERE","WHAT" 250 FOR I%=2% TO 2%*FNE%("JOBM%(1%)=6% : M%(2%)=14% : M%(3%)=I% : M%(4%)=SWAP%(I%) : M%(5%)=R9% : M%(6%)=R9% : I%=I%+1% : CHANGE M% TO M$ : ON ERROR GOTO 1900 : CHANGE SYS(M$) TO M% : ON ERROR GOTO 0 : GOSUB 2000 : GOTO 1120 1900 IF ERR<>5% THEN ON ERROR GOTO 0 ELSE RESUME 9110 2000 M$=NUM$(M%(8%)) : PRINT #1%,TAB(5%-LEN(M$)); MID(M$,2%,LEN(M$)-2%)","; RIGHT(NUM$(M%(7%)),2%);TAB(9%); 2010 M%(C%)=0% FOR C%=9% TO 12% IF P9% 2020 PRINT #1%,RAD$(M%(9%)+SWAP%(M%(10%))); RAD$(M%(11%)+SWAP%(M%(12%))); : T0=256.*M%" : GOTO 200 600 X$="" : READ X$ UNTIL X$=Y$ 610 READ M%(I%) FOR I%=5% TO 12% : GOTO 820 630 DATA ASR33,65,0,1,0,0,148,16,73 640 DATA KSR33,65,0,1,0,0,132,16,73 650 DATA ASR35,65,0,1,0,0,84,17,73 660 DATA KSR35,65,0,1,0,0,68,17,73 670 DATA VT05,89,0,25,0,0,12,16,73 680 DATA VT06,89,0,25,0,0,140,16,73 690 DATA LA30,89,0,25,0,0,132,23,81 700 DATA LA30S,89,0,25,0,0,132,23,81 799 ! TO ADD A DIFFERENT DEVICE TYPE -- 1) PUT THE NAME IN A DATA STATEMENT BETWEEN LINES 270-299; 2) PU1-AUG RSTS V4A MONITOR IS NOW IN USE REPORT PROBLEMS TO MIKE JONES. AX") STEP 2% : T%=FNA%(FNE%("JOBTBL")+I%) : IF T%=0% THEN 290 260 PRINT #2%,I%/2%, : B%=-1% : X$=NUM$(FNA%(T%+21%)) 265 PRINT #2%,SPACE$(5%-LEN(X$));MID(X$,2%,LEN(X$)-2%);"," RIGHT(NUM$(FNA%(T%+20%)),2%), : B%=0% 270 IF (FNA%(FNA%(FNA%(T%))+2%) AND 127%)<>I% THEN PRINT #2%," DET", ELSE X$=NUM$(FNA%(FNA%(FNA%(T%))+28%)/512%) : PRINT #2%," KB" MID(X$,2%,LEN(X$)-2%) ":", 280 PRINT #2%,RAD$(FNA%(FNE%("NAME1")+I%));RAD$(FNA%(FNE%("NAME2")+I%)) 290 NEXT I% 400 !DATA LIST OUTPUT ROUTINE 410 PR(14%)+M%(13%) : T=INT(T0/10.) : T0=T0-T*10. : GOSUB 4000 : M$=M$+"."+CHR$(48%+T0) 2030 RESTORE : READ C0% : GOSUB 3500 : GOSUB 3200 : GOSUB 3100 : GOSUB 3100 : GOSUB 3300 : GOSUB 3300 : GOSUB 3200 : GOSUB 3200 : GOSUB 3300 : PRINT #1% : RETURN 2100 DATA 26,17,33,15,40,19,48,21,53,22,57,5,63,27,69,29,72 3100 READ C% : T=256.*M%(C%+1%)+M%(C%) : GOSUB 4000 : READ C0% : GOTO 3500 3200 READ C%,C0% : M$=NUM$(256.*M%(C%+1%)+M%(C%)) : GOTO 3400 3300 READ C%,C0% : M$=NUM$(M%(C%)) 3400 M$=MID(M$,2T THE NAME FOLLOWED BY ALL 8 BYTES FOR TTXLST IN A DATA STATEMENT BETWEEN 700-799. 800 IF (M%(I%+5%) AND K%) THEN M%(I%+5%)=M%(I%+5%)-K% 810 M%(I%+5%)=M%(I%+5%)+J% 820 M%(3%)=X%+D%*8% : M%(4%)=SWAP%(M%(3%)) : CHANGE M% TO X$ 830 X$=SYS(X$) !POKE CORE TO CHANGE TTXLST 840 C%(256%+(X%+8%*D%)/2%+I%)=SWAP%(M%(6%+2%*I%))+M%(5%+2%*I%) FOR I%=0% TO 3% 850 I%=C%(0%) !FORCE A DISK WRITE 860 GOTO 200 990 CLOSE 1% 999 END  THIS IS RSTS-11 V4A. 1. TO LOG IN, TYPE "HELLO". USE ACCOUNT #100,100; THE PASSWORD IS "DEMO". 2. TO LOG OUT, TYPE "BYE". IN RESPONSE TO "CONFIRM:", TYPE "Y". 3. TO INTERRUPT ANY PROGRAM AND RETURN CONTROL IMMEDIATELY TO THE THE BASIC-PLUS EDITOR, TYPE CTRL/C. 4. TO SEE WHICH SYSTEM PROGRAMS ARE CURRENTLY AVAILABLE, TYPE "CATALOG$". BYE INT #2% : PRINT #2% 420 READ N$ : IF N$<>"ZZZ" THEN READ A$,C1$,X$ ELSE PRINT #2%, CHR$(26%); : CLOSE 1%,2% : GOTO 9999 430 IF C1$="JOBMAX" OR C1$="NULINE" THEN N%=FNE%(C1$) ELSE N%=VAL(C1$) 435 B%,R%=0% : IF X$<>"A" THEN IF FNF%(X$) THEN 440 ELSE 420 440 IF LEFT(N$,1%)<>"\" THEN B%=0% ELSE B%=-1% : N$=RIGHT(N$,2%) : GOTO 460 450 IF LEFT(N$,1%)<>"$" THEN R%=0% ELSE R%=-1% : N$=RIGHT(N$,2%) 460 A%=FNF%(A$) : GOSUB 500 : GOTO 420 500 ! GENERAL PRINT OUTPUT ROUTINE B% = 0 IF WORD MODE, %,LEN(M$)-2%) 3500 PRINT #1%,TAB(C0%-LEN(M$));M$; : RETURN 4000 M$="" : T%=0% : C0%=T/3600. : IF C0% THEN T=T-3600.*C0% : GOSUB 4100 : M$=M$+":" 4010 C0%=T/60% : IF C0% OR T% THEN T=T-60%*C0% : GOSUB 4100 : M$=M$+":" 4020 C0%=T 4100 T$=NUM$(C0%+T%*100%) : M$=M$+MID(T$,2%+T%,LEN(T$)-2%-T%) : T%=1% : RETURN 8100 PRINT #1% : PRINT #1%, " ACCT PASSWORD CPU-TIME KCT'S CONNECT DEVICE ACCESS"; " DISK QUOTA" : RETURN 9000 ON ERROR GOTO 9100 : INPUT "ACCOUNT";M%(8%),M%(7%) 9010 M%(0%)1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! GRIPE VERSION 4A EDIT 1 6/20/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM #1,N%(1),A$(10000) ! GRIPE.BAS FOR RSTS V4A 200 PRINT "YES? (END WITH ESCAPE)": P1%=PEEK(PEEK(2098%)+20%) : P0%=ASCII(CHR$(P1%)): P1%=ASCII(CHR$(SWAP%(P1%))) 210 H$="**NONAME**" : ON ERROR GOTO 230 : OPEN "$ACCT.SYS" FOR INPUT AS FILE 1% 220 INPUT #1%,P3%,P2%,H1$,K%,K%,H1$ : IF P0%<>P2% OR P1%<>P3% THEN 220 ELSE H$=H1$ 230 RESU1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! ODT VERSION 4A EDIT 1 6/20/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 10 DIM #2%, P%(32767) : DIM A%(3),A0%(2),R%(7) ! ODT FOR RSTS V4A 20 C0%,D%,Q%,D9%,F%,F0%,O%=0% : M%,M0%=2% : M$="/" : R%(I%)=-1% FOR I%=0% TO 7% : A%(3%)=-1% 30 OPEN "KB:" AS FILE 1% : R9%=1% : PRINT "FILE"; : INPUT LINE S$ 40 IF S$=CHR$(13%)+CHR$(10%) THEN 80 ELSE IF S$=CHR$(10%)+CHR$(13%)+CHR$(0%) THEN R9%=0% : GOTO 80 50 IF S$=C=-1 IF BYTE MODE R% = 0 IF WORD MODE, =-1 IF RADIX 50 N$ CONTAINS THE ITEM NAME N% CONTAINS THE NUMBER OF ITEMS A% CONTAINS THE ADDRESS OF THE FIRST ITEM 510 PRINT #2%,N$; : IF N%<2% THEN PRINT #2%,TAB(16%);FNC$(FNA%(A%)) : RETURN 520 P3%=-1% : P1%=0% ! SET FIRST ITEM FLAGS 530 FOR P2%=A% TO A%+(N%-1%)*(B%+2%) STEP B%+2% : IF P1% THEN 540 ELSE P1%=8%-8%*B% : PRINT #2% : PRINT #2% UNLESS P3% : P4%=B% : P5%=R% : B%,R%=0% : PRINT #2%,FNC$(P2%);"/ "; : P3%=-SGN(P3%-1%) : B%=P4% : R%=30% : M%(1%)=6% : M%(2%)=14% : M%(3%)=0% : M%(4%)=0% : M%(5%)=R9% : M%(6%)=R9% : CHANGE M% TO M$ : ON ERROR GOTO 9050 : CHANGE SYS(M$) TO M% : ON ERROR GOTO 0 9020 GOSUB 8100 : GOSUB 2000 : GOTO 9000 9050 IF ERR<>5% THEN ON ERROR GOTO 0 ELSE RESUME 9060 9060 PRINT "CANNOT FIND THAT ACCOUNT" : GOTO 9000 9100 IF ERR<>11% THEN ON ERROR GOTO 0 ELSE RESUME 9110 9110 ON ERROR GOTO 0 : CLOSE 1% 9999 END  ME 240 240 ON ERROR GOTO 0 : CLOSE 1% : K%=ASCII(CHR$(SWAP%(PEEK(PEEK(PEEK(PEEK(2098%)))+28%))))/2% 250 H1$=NUM$(P1%) : H$=H$+SPACE$(25%-LEN(H$)-LEN(H1$))+"["+ MID(H1$,2%,LEN(H1$)-2%)+"," : H1$=NUM$(P0%) : H$=H$+MID(H1$,2%,LEN(H1$)-2%)+"] KB" 260 H$=H$+RIGHT(NUM$(K%),2%)+" "+DATE$(0%)+" "+TIME$(0%)+ CHR$(13%)+CHR$(10%)+CHR$(10%) : OPEN "KB:" AS FILE 1% 270 H$=CHR$(13%)+CHR$(10%)+CHR$(10%)+CHR$(10%)+H$ 300 INPUT LINE #1%,H1$ : IF ASCII(RIGHT(H1$,LEN(H1$)))<>27% THEN H$=H$+H1$ : GOHR$(27%) THEN S$="[0,1]CRASH.SYS" : GOTO 70 60 IF ASCII(RIGHT(S$,LEN(S$)))=0% THEN R9%=0% 70 OPEN S$ FOR INPUT AS FILE 2% : F%=1% : S$=RIGHT(SYS(CHR$(6%)+CHR$(-8%)+CHR$(2%)),7%) : L9%=ASCII(S$)+SWAP%(ASCII(MID(S$,2%,1%))) : IF L9%=0% THEN PRINT "0 LENGTH?" : GOTO 9999 80 PRINT : GOTO 100 90 PRINT "?" 100 ON ERROR GOTO 0 : PRINT "*"; 110 A%(I%),A0%(I%)=0% FOR I%=0% TO 2% : I0%=2% : O0%=0% 120 GOSUB 8000 : IF C%=127% THEN 90 ELSE IF O0% THEN A%(I0%)=A%(I0%)-A% ELSE A%(=P5% 540 PRINT #2%," ";FNC$(FNA%(P2%)); : P1%=P1%-1% : NEXT P2% 550 PRINT #2% : PRINT #2% : RETURN 560 DEF FNA%(I%) !FETCH ADDRESS I% 570 IF I%<0% THEN A1%=C%((I%/2%)+32767%+1%) ELSE A1%=C%(I%/2%) 580 IF B% OR (I% AND 1%) THEN IF I% AND 1% THEN A1%=ASCII(CHR$(SWAP%(A1%))) ELSE A1%=ASCII(CHR$(A1%)) 590 FNA%=A1% : FNEND 600 DEF FNC$(I%) !CONVERT TO OCTAL STRING 605 IF R% THEN FNC$=RAD$(I%) : GOTO 640 610 IF B% THEN C2$="" ELSE IF I%>=0% THEN C2$="0" ELSE C2$="1" : I%=I%+32767%+1% 620 C1$="" 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! VT5DPY VERSION 4A EDIT 2 6/29/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM J%(15,6),B%(7,1),D%(4,3),C%(5),M%(30),T(15) 150 INPUT "INTERVAL";S9% : IF S9%=0% THEN S9%=15% 200 J%(I%,0%)=-1% FOR I%=0% TO 15% : B%(I%,0%)=-1% FOR I%=0% TO 7% : D%(I%,0%)=-1% FOR I%=0% TO 4% : C%(I%)=0% FOR I%=0% TO 3% : C%(4%)=PEEK(2048%) : C%(5%)=PEEK(2050%) 300 CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO M% : M%(I%)=M%(I%TO 300 310 H1$=LEFT(H1$,LEN(H1$)-1%) : CLOSE 1% : IF P1%<>1% THEN 400 ELSE IF H1$="*LIST" THEN 800 ELSE IF H1$="*RESET" THEN 880 400 H$=H$+H1$ : H1$="GRIPE BUSY, HANG ON PLEASE"+CHR$(13%)+CHR$(10%) 410 ON ERROR GOTO 900 : OPEN "$GRIPE.TXT" FOR INPUT AS FILE 1% : ON ERROR GOTO 0 420 IF ASCII(MID(SYS(CHR$(6%)+CHR$(-8%)+CHR$(1%)),4%,1%)) AND 4% THEN PRINT H1$; : H1$="" : CLOSE 1% : SLEEP 5% : GOTO 410 430 N%=N%(0%)+1% : L%=LEN(H$)-1% : N%(0%)=N%+L%/16% : A$(I%+N%)=RIGHT(H$,I%*16%+1%) FI0%)=A%(I0%)+A% 130 A0%(I0%)=A0%(I0%)+A0% : O0%=0% : IF C%=32% OR C%=43% THEN 120 ELSE IF C%=45% THEN O0%=1% : GOTO 120 140 IF C%=46% THEN A%(I0%)=A%(I0%)+D% : GOTO 990 150 IF C%=81% THEN A%(I0%)=A%(I0%)+Q% : GOTO 990 160 IF C%=44% THEN IF A%(I0%)<0% OR A%(I0%)>7% THEN 90 ELSE A%(I0%)=R%(A%(I0%)) : GOTO 990 170 IF C%=59% THEN I0%=I0%-1% : IF I0%>=0% THEN 120 ELSE 90 180 IF C%<>27% AND C%<>36% THEN 200 ELSE GOSUB 9000 : IF C%>=48% AND C%<=55% THEN A%(I0%)=A%(I0%)+C%*2%+320% : GOT: FOR A1%=1% TO 5%+2%*B% : IF B% AND (A1%=3%) THEN C1$=CHR$(48%+I%-(I%/4%)*4%)+C1$ ELSE C1$=CHR$(48%+I%-(I%/8%)*8%)+C1$ 630 I%=I%/8% : NEXT A1% : FNC$=C2$+C1$ 640 FNEND 650 DEF FNE%(A$) !FUNCTION GETS VALUE OF A$ 660 FOR C1%=0% UNTIL T$(C1%)="ZZZ" : IF T$(C1%)=A$ THEN FNE%=T%(C1%) : GOTO 690 670 NEXT C1% : C2%=0% : FOR C1%=1% TO LEN(A$) 680 C3%=ASCII(MID(A$,C1%,1%))-48% : IF (C3%<0%) OR (C3%>7%) THEN PRINT "BAD VALUE IN FNE%" : STOP 685 C2%=C2%*8%+C3% : NEXT C1% : FNE%=C2% 690 FNEND 7)+SWAP%(M%(I%+1%)) FOR I%=5% TO 27% STEP 2% 400 PRINT CHR$(29%);CHR$(31%);CHR$(13%); : X%,Y%=0% : S$=SYS(CHR$(6%)+CHR$(9%)+CHR$(0%)) : I%=FNS%(1%,0%,MID(S$,3%,INSTR(3%,S$,CHR$(0%))-3%))+ FNS%(29%,0%,"STATUS ON "+DATE$(C%(4%))+" "+ TIME$(C%(5%))+" UP:") 410 I%=FNS%(0%,2%,"JOB WHO WHERE WHAT SIZE STATE RUN-TIME")+ FNS%(51%,2%,"BUSY DEVICES")+ FNS%(45%,3%,"DEV JOB WHY DEV JOB WHY")+ FNS%(50%,9%,"DISK STRUCTURE")+ FNS%(47%,16%,"SML BIG ERS TTY") 420 I%=FNS%(49%,17%,OR I%=0% TO L%/16% : CLOSE 1% : PRINT : PRINT "THANK YOU" : GOTO 999 800 ON ERROR GOTO 860 : OPEN "$GRIPE.TXT" FOR INPUT AS FILE 1% : ON ERROR GOTO 0 : IF N%(0%)<0% THEN 870 ELSE INPUT " OUTPUT";H1$ : IF H1$="" THEN H1$="KB:" 810 OPEN H1$ FOR OUTPUT AS FILE 2% : PRINT #2%, A$(K%); FOR K%=0% TO N%(0%) : PRINT #2%, CHR$(26%) : GOTO 990 860 RESUME 870 870 ON ERROR GOTO 0 : PRINT "NO GRIPES FOUND" : GOTO 990 880 ON ERROR GOTO 890 : KILL "$GRIPE.TXT" 890 RESUME 990 900 IF ERR<>5% THEN ONO 990 190 IF C%<>83% THEN 90 ELSE A%(I0%)=A%(I0%)+432% : GOTO 990 200 IF C%=82% THEN 1000 ELSE IF C%=47% THEN 1100 ELSE IF C%=92% THEN 1200 ELSE IF C%=13% THEN 1300 ELSE IF C%=10% THEN 1400 210 IF C%=94% THEN 1500 ELSE IF C%=64% THEN 1600 ELSE IF C%=95% THEN 1700 ELSE IF C%=62% THEN 1800 ELSE IF C%=60% THEN 1900 220 IF C%=70% THEN 2000 ELSE IF C%=76% THEN 2100 230 IF C%=67% THEN 3000 980 GOTO 90 990 A0%(I0%)=1% : GOTO 120 1000 IF I0%=2% AND A0%(2%)=0% THEN R%(I%)=-1% FOR I%=0% T00 DEF FNF%(A$) : IF A$="" THEN FNF%=0% : GOTO 790 !EXPRESSION AEVALUATOR 710 IF LEFT(A$,1%)<>"(" THEN 740 ELSE C1%=INSTR(2%,A$,")")+1% : C2%=1% 720 C2%=INSTR(C2%+1%,A$,"(") : IF C2% THEN IF C2%J% THEN J%(J9%,0%)=J% : J8%=1% : I%=FNS%(0%,J9%+3%,NUM$(J%/2%)) 1020 J1%=PEEK(J0%+20%) : IF J8% OR J%(J9%,1%)<>J1% THEN J%(J9%,1%)=J1% ELSE 1050 1030 S$=" **,** " : IF J1% THEN S$=NUM$(ASCII(CHR$(SWAP%(J1%)))) : S$=SPACE$(5%-LEN(S$))+MID(S$,2%,LEN(S$)-2%)+","+ ERROR GOTO 0 ELSE RESUME 910 910 ON ERROR GOTO 0 : OPEN "$GRIPE.TXT" FOR OUTPUT AS FILE 1% : N%(0%)=-1% : GOTO 420 990 ON ERROR GOTO 0 : CLOSE 1%,2% 999 END  O 7% : GOTO 80 1010 IF A%(I0%)<0% OR A%(I0%)>7% THEN 90 ELSE R%(A%(I0%))=A%(I0%+1%) : GOTO 80 1100 IF A0%(I0%) THEN IF A%(I0%) AND 1% THEN 1200 ELSE D9%=D% : D%=A%(I0%) : M%=2% : M$="/" 1110 M0%=2% : IF D% AND 1% THEN 1210 ELSE 1220 1200 IF A0%(I0%) THEN D9%=D% : D%=A%(I0%) : M%=1% : M$="\" 1210 M0%=1% 1220 GOSUB 7000 : GOSUB 6000 : GOTO 110 1300 GOSUB 5010 : GOSUB 9000 : GOTO 100 1400 GOSUB 5000 : D%=D%+M% 1410 V%=D% : M0%=2% : GOSUB 4000 : IF M%=2% THEN IF D% AND 1% THEN M%=1% : M$=A$,"+") : IF C1% THEN C1$=LEFT(A$,C1%-1%) : A$=RIGHT(A$,C1%+1%) : FNF%=FNF%(C1$)+FNF%(A$) : GOTO 790 780 C1%=INSTR(1%,A$,"-") : IF C1%=0% THEN FNF%=FNE%(A$) ELSE C1$=LEFT(A$,C1%-1%) : A$=RIGHT(A$,C1%+1%) : FNF%=FNF%(C1$)-FNF%(A$) 790 FNEND 1000 ! DATA STATEMENT LIST THE FORMAT OF ENTRIES IN THIS LIST IS: 'NAME','EXPR','#','COND' 1001 ! WHERE: 'NAME' IS THE ITEM NAME. A '\' PRECEEDING THE NAME MEANS BYTES, A '$' MEANS RADIX-50. 1002 ! 'EXPR' IS AN EXPRESSION GIVING THE ADDR RIGHT(NUM$(ASCII(CHR$(J1%))),2%) : S$=S$+SPACE$(7%-LEN(S$)) 1040 I%=FNS%(4%,J9%+3%,S$) 1050 J1%=PEEK(PEEK(J0%)) : J2%=ASCII(CHR$(SWAP%(PEEK(J1%+28%))))/2% : IF ASCII(CHR$(PEEK(J1%+2%)))<>J% THEN J2%=-1% 1060 IF J8% OR J%(J9%,2%)<>J2% THEN J%(J9%,2%)=J2% ELSE 1100 1070 IF J2%=-1% THEN S$="DET " ELSE S$="KB"+RIGHT(NUM$(J2%),2%) 1080 I%=FNS%(12%,J9%+3%,S$) 1100 J1%=PEEK(J%+M%(23%)) : IF J8% OR J%(J9%,3%)<>J1% THEN J%(J9%,3%)=J1% : I%=FNS%(17%,J9%+3%,RAD$(J1%)) 1110 J1%=PEEK(J%+M1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! VT6DPY VERSION 4A EDIT 2 6/29/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM J%(15,6),B%(7,1),D%(4,3),C%(5),M%(30),T(15) 150 INPUT "INTERVAL,FILL";S9%,F9% : IF S9%=0% THEN S9%=15% 200 J%(I%,0%)=-1% FOR I%=0% TO 15% : B%(I%,0%)=-1% FOR I%=0% TO 7% : D%(I%,0%)=-1% FOR I%=0% TO 4% : C%(I%)=0% FOR I%=0% TO 3% : C%(4%)=PEEK(2048%) : C%(5%)=PEEK(2050%) 300 CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO M% : M%("\" 1420 PRINT M$; : M0%=M% : GOTO 1220 1500 GOSUB 5000 : D%=D%-M% 1510 PRINT : GOTO 1410 1600 GOSUB 5000 : D%=Q% : GOTO 1510 1700 GOSUB 5000 : D%=D%+2%+Q% : GOTO 1510 1800 GOSUB 5000 : I%=ASCII(CHR$(Q%)) : IF I%>127% THEN I%=I%-256% 1810 D%=D%+2%+2%*I% : GOTO 1510 1900 GOSUB 5010 : D%=D9% : GOTO 1510 2000 F0%=A%(I0%) : GOTO 80 2100 PRINT : L2%=0% : IF I0%=2% THEN D%=0% : L1=A%(2%) : GOTO 2200 2110 IF I0%=1% THEN D%=A%(2%) : L1=A%(1%) : GOTO 2200 2120 D%=A%(1%) : L1=A%(0%) : IF A0%(2%) THENESS. THE FOLLOWING OPERATORS ARE EVALUATED: @ INDIRECT ADDRESS \ IS BYTE VALUE + ADDITION - SUBTRACTION PARENS ARE USED FOR GROUPING. ALL NUMBERS ARE OCTAL. 1003 ! '#' IS THE DECIMAL NUMBER OF ITEMS IN THE LIST 1004 ! 'COND' SPECIFIES WHETHER OR NOT TO PRINT THE ITEM. 'A' MEANS PRINT ALWAYS, OTHERWISE IT IS EVALUATED AS AN EXPRESSION AND IF THE VALUE IS NON-ZERO THE ITEM IS PRINTED. 1010 DATA \JOB,4010,1,A 1020 DATA \NEXT,4007,1,A 1030 DATA \SWAPF,401%(25%)) : IF J8% OR J%(J9%,4%)<>J1% THEN J%(J9%,4%)=J1% : I%=FNS%(20%,J9%+3%,RAD$(J1%)) 1120 J1%=ASCII(CHR$(PEEK(J0%+16%))) : IF J8% OR J%(J9%,5%)<>J1% THEN J%(J9%,5%)=J1% : I%=FNS%(24%,J9%+3%,CHR$(48%+J1%)+"K") 1130 J1%=PEEK(J%+M%(15%)) : J2%=1% : IF J1% AND PEEK(J%+M%(13%)) THEN 1160 ELSE J2%=J2%+2% : IF J1%<0% THEN 1160 ELSE J1%=J1%/4% 1140 J2%=J2%+2% : IF J1% AND 1% THEN 1160 ELSE J1%=J1%/2% : IF J1% THEN 1140 1160 T%=SWAP%(J2%) : J1%=M%(9%) 1170 T1%=PEEK(J1%) : IF T1%=-1% I%)=M%(I%)+SWAP%(M%(I%+1%)) FOR I%=5% TO 27% STEP 2% 400 PRINT CHR$(29%);CHR$(31%); : GOSUB 32300 : PRINT CHR$(13%); : X%,Y%=0% : S$=SYS(CHR$(6%)+CHR$(9%)) : I%=FNS%(1%,0%,MID(S$,3%,INSTR(3%,S$,CHR$(0%))-3%))+ FNS%(29%,0%,"STATUS ON "+DATE$(C%(4%))+" "+ TIME$(C%(5%))+" UP:") 410 I%=FNS%(0%,2%,"JOB WHO WHERE WHAT SIZE STATE RUN-TIME")+ FNS%(51%,2%,"BUSY DEVICES")+ FNS%(45%,3%,"DEV JOB WHY DEV JOB WHY")+ FNS%(50%,9%,"DISK STRUCTURE")+ FNS%(47%,16%,"SML BIG ERS TTY O%=3% : IF A%(2%)=1% THEN S$="LP:" : GOTO 2140 2130 PRINT "DEVICE"; : INPUT LINE S$ 2140 ON ERROR GOTO 2290 : OPEN S$ FOR OUTPUT AS FILE 3% 2200 IF L1<0 THEN L1=L1+65536 2210 IF L2% AND 7% THEN 2220 ELSE PRINT #O% : M0%=2% : V%=D% : GOSUB 4000 : PRINT #O%,M$; : L2%=0% 2220 L2%=L2%+1% : M0%=M% : GOSUB 7000 : PRINT #O%," "; : GOSUB 6010 2270 D%=D%+M% : D0=D% : IF D0<0 THEN D0=D0+65536 2280 IF D0<=L1 THEN 2210 ELSE PRINT #O% : CLOSE 3% : O%=0% : GOTO 80 2290 PRINT "I/O ERROR"; : CLOSE 3% : O%=1,1,A 1040 DATA JOBDA,4062,1,A 1050 DATA FREES,4074,1,A 1060 DATA "FREE COUNT",4076,1,A 1070 DATA FIBPHS,4132,1,A 1080 DATA \FIBSTA,4134,1,A 1090 DATA \FIBUNT,4135,1,A 1100 DATA FIPSEG,4136,1,A 1110 DATA FIJBDA,4146,1,A 1120 DATA FIUSER,4144,1,A 1130 DATA FIPSP,4156,1,A 1140 DATA FIJOB,4170,1,A 1150 DATA L3QUE,NAME2+JOBMAX+JOBMAX+2,1,A 1160 DATA FIQUE,NAME2+JOBMAX+JOBMAX+4,1,A 1200 DATA JOBTBL,JOBTBL+2,JOBMAX,A 1210 DATA CORTBL,CORTBL,12,A 1300 DATA "CURRENT JOB DATA BLOCK",@4062,16,\@4010THEN T%=T%+1% ELSE IF ASCII(CHR$(T1%))<>J% THEN J1%=J1%+2% : GOTO 1170 1180 IF T% AND 1% THEN S$=" SW" ELSE S$=" " 1190 IF J8% OR J%(J9%,6%)<>T% THEN J%(J9%,6%)=T% : I%=FNS%(28%,J9%+3%,MID("RNRSHBXXFPSLCRMTLPDTPPPRTTKBDF", J2%,2%)+S$) 1200 T=PEEK(J0%+8%) : IF T<0 THEN T=T+65536. 1210 IF J8% OR T(J9%)<>T THEN T(J9%)=T ELSE 1900 1220 T0=T : T=INT(T/10.) : T0=T0-T*10. : GOSUB 29000 : S$=SPACE$(7%-LEN(S$))+S$+"."+CHR$(48%+T0) : I%=FNS%(34%,J9%+3%,S$) 1900 J9%=J9%+1% : GOTO 1010 2") 420 I%=FNS%(49%,17%,"0 0 0 0") : PRINT CHR$(29%);CHR$(13%); : X%,Y%=0% 1000 J9%,J%=0% : PRINT CHR$(29%);CHR$(13%); 1010 J%=J%+2% : J0%=PEEK(J%+M%(11%)) : IF J0%<0% THEN 2000 ELSE IF J0%=0% THEN 1010 ELSE J8%=0% : IF J%(J9%,0%)<>J% THEN J%(J9%,0%)=J% : J8%=1% : I%=FNS%(0%,J9%+3%,NUM$(J%/2%)) 1020 J1%=PEEK(J0%+20%) : IF J8% OR J%(J9%,1%)<>J1% THEN J%(J9%,1%)=J1% ELSE 1050 1030 S$=" **,** " : IF J1% THEN S$=NUM$(ASCII(CHR$(SWAP%(J1%)))) : S$=SPACE$(5%-LEN(S$))+MID0% : RESUME 90 3000 RESTORE 3010 PRINT : READ I%,S$ : IF I%=0% THEN 80 ELSE PRINT S$" "; : S$=MID(SYS(CHR$(6%)+CHR$(-3%)),I%,2%) : V%=ASCII(S$)+SWAP%(ASCII(RIGHT(S$,2%))) : GOSUB 6010 : GOTO 3010 3100 DATA 5,DEVCNT,7,DEVPTR,9,CORTBL,11,JOBTBL,13,JBSTAT 3110 DATA 15,JBWAIT,17,UNTCLU,19,UNTCNT,21,SATCNT,23,NAME1 3120 DATA 25,NAME2,0,"" 4000 IF F0% THEN 6010 ELSE D0=65536 : I0%=8% : D=V% : IF D<0 THEN D=D+D0 4010 FOR I%=0% TO 7% : D1=R%(I%) : IF D1<0 THEN D1=D1+65536 4020 D1=D-D1 : IF D1< 1310 DATA "CURRENT JOB I/O BLOCK",@@4062,16,\@4010 9998 DATA ZZZ 9999 END 000 IF J9%<>16% THEN IF J%(J9%,0%)<>-1% THEN I%=FNS%(0%,J9%+3%,SPACE$(43%)) : J%(J9%,0%)=-1% : J9%=J9%+1% : GOTO 2000 2010 J%=46% : FOR J0%=1% TO 4% : ON J0% GOTO 2020,2030,2040,2050 2020 J1%=PEEK(2110%) : GOTO 2060 2030 J1%=PEEK(2114%) : GOTO 2060 2040 J1%=ASCII(CHR$(PEEK(2%))) : J%=J%+1% : GOTO 2060 2050 J1%=ASCII(CHR$(SWAP%(PEEK(2%)))) 2060 IF J1%<>C%(J0%-1%) THEN C%(J0%-1%)=J1% : S$=NUM$(J1%) : I%=FNS%(J%,17%,SPACE$(5%-LEN(S$))+S$) 2070 J%=J%+5% : NEXT J0% : J%=M%(21%) : J1%=M%(S$,2%,LEN(S$)-2%)+","+ RIGHT(NUM$(ASCII(CHR$(J1%))),2%) : S$=S$+SPACE$(7%-LEN(S$)) 1040 I%=FNS%(4%,J9%+3%,S$) 1050 J1%=PEEK(PEEK(J0%)) : J2%=ASCII(CHR$(SWAP%(PEEK(J1%+28%))))/2% : IF ASCII(CHR$(PEEK(J1%+2%)))<>J% THEN J2%=-1% 1060 IF J8% OR J%(J9%,2%)<>J2% THEN J%(J9%,2%)=J2% ELSE 1100 1070 IF J2%=-1% THEN S$="DET " ELSE S$="KB"+RIGHT(NUM$(J2%),2%) 1080 I%=FNS%(12%,J9%+3%,S$) 1100 J1%=PEEK(J%+M%(23%)) : IF J8% OR J%(J9%,3%)<>J1% THEN J%(J9%,3%)=J1% : I%=FNS%(17%,J9%+3%,RAD$(0 THEN 4030 ELSE IF D0<=D1 THEN 4030 ELSE D0=D1 : I0%=I% 4030 NEXT I% : IF I0%=8% THEN 6010 ELSE IF R%(I0%)=-1% THEN 6010 ELSE PRINT #O%,CHR$(48%+I0%)","; : IF D0<32768 THEN V%=D0 ELSE IF D0=32768 THEN V%=32767%+1% ELSE V%=D0-65536 4040 GOTO 6010 5000 D9%=D% 5010 IF A0%(I0%)=0% THEN RETURN ELSE IF R9% THEN PRINT "?"; : RETURN 5020 IF F% THEN 5100 ELSE IF M%=1% THEN S$=CHR$(A%(I0%)) ELSE S$=CHR$(A%(I0%))+CHR$(SWAP%(A%(I0%))) 5030 S$=SYS(CHR$(6%)+CHR$(-6%)+CHR$(D%)+CHR$(SWAP%(D%))+S$1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! SYSCAT VERSION 4A EDIT 1 6/20/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 10 DIM M%(30),N%(30),M0%(30) ! SYSCAT FOR RSTS V4A 20 PRINT "OUTPUT CATALOG TO"; : INPUT LINE D$ : IF ASCII(D$)=13% THEN D$="KB:" 30 OPEN D$ FOR OUTPUT AS FILE 1% : PRINT "CATALOG OF"; : INPUT LINE D$ : CHANGE SYS(CHR$(6%)+CHR$(-10%)+D$) TO M% 40 M%(0%)=30% : M%(1%)=6% : M%(2%)=14% : M%(3%)=1% : M%(4%)=0% : M%(5%)=0% : M%(6%)=0% :(17%) : T%=1% : T1%=M%(19%) : J9%=0% : GOSUB 3000 : GOSUB 3000 : GOSUB 3000 : GOTO 4000 3000 FOR J0%=0% TO PEEK(M%(5%)+T%-1%) : J2%=PEEK(T1%) : IF J2%<0% THEN 3900 ELSE J8%=0% 3010 IF J8% OR D%(J9%,0%)<>SWAP%(J0%)+T% THEN J8%=1% : D%(J9%,0%)=SWAP%(J0%)+T% : I%=FNS%(45%,J9%+10%,MID("DFDKDP",T%,2%)+ RIGHT(NUM$(J0%),2%)) 3020 T$="" : IF J8% OR D%(J9%,1%)<>J2% THEN D%(J9%,1%)=J2% : S$=NUM$(ASCII(CHR$(J2%))) : I%=FNS%(49%,J9%+10%,SPACE$(5%-LEN(S$))+RIGHT(S$,2%)) : IF J2% AND 16J1%)) 1110 J1%=PEEK(J%+M%(25%)) : IF J8% OR J%(J9%,4%)<>J1% THEN J%(J9%,4%)=J1% : I%=FNS%(20%,J9%+3%,RAD$(J1%)) 1120 J1%=ASCII(CHR$(PEEK(J0%+16%))) : IF J8% OR J%(J9%,5%)<>J1% THEN J%(J9%,5%)=J1% : I%=FNS%(24%,J9%+3%,CHR$(48%+J1%)+"K") 1130 J1%=PEEK(J%+M%(15%)) : J2%=1% : IF J1% AND PEEK(J%+M%(13%)) THEN 1160 ELSE J2%=J2%+2% : IF J1%<0% THEN 1160 ELSE J1%=J1%/4% 1140 J2%=J2%+2% : IF J1% AND 1% THEN 1160 ELSE J1%=J1%/2% : IF J1% THEN 1140 1160 T%=SWAP%(J2%) : J1%=M%(9%) 1170 T) : GOTO 5200 5100 I%=D% : IF D% AND 1% THEN I%=I%-1% 5110 IF ASCII(CHR$(SWAP%(I%)))/2%>=L9% THEN PRINT "?"; : RETURN 5120 D0=I% : IF D0<0 THEN D0=D0+65536 5130 I%=P%(D0/2) : IF M%=1% THEN A%(I0%)=ASCII(CHR$(A%(I0%))) 5140 IF M%=2% THEN P%(D0/2)=A%(I0%) : GOTO 5180 5150 IF D% AND 1% THEN P%(D0/2)=SWAP%(A%(I0%))+ASCII(CHR$(I%)) ELSE P%(D0/2)=A%(I0%)+SWAP%(ASCII(CHR$(SWAP%(I%)))) 5180 IF INT(D0/512)<>0 THEN I%=P%(0%) ELSE IF L9%<>1% THEN I%=P%(256%) 5200 RETURN 6000 PRINT #O%," "; : GOS N%(I%)=M%(I%) FOR I%=23% TO 26% 50 PRINT #1%,"SYSTEM CATALOG OF "; : IF M%(26%)=0% THEN PRINT #1%,"SYSTEM DISK(S)"; ELSE PRINT #1%, CHR$(M%(23%));CHR$(M%(24%)); : D$=NUM$(M%(25%)) : PRINT #1%,MID(D$,2%,LEN(D$)-2%)":"; 60 PRINT #1%," ON "DATE$(0%)" "TIME$(0%) : PRINT #1% 100 ON ERROR GOTO 9000 : D$=SYS(CHR$(0%)) : CHANGE M% TO D$ : CHANGE SYS(D$) TO M0% : ON ERROR GOTO 0 : M%(3%)=M%(3%)+1% : IF M%(3%)>255% THEN M%(3%)=0% : M%(4%)=M%(4%)+1% 110 D$=NUM$(M0%(8%)) : PRINT #1%,"ACCO384% THEN T$="PRI" ELSE T$="PUB" 3030 IF J8% OR D%(J9%,2%)<>PEEK(J%) THEN D%(J9%,2%)=PEEK(J%) ELSE 3060 3040 T=D%(J9%,2%) : IF T<0 THEN T=T+65536. 3050 S$=NUM$(T) : I%=FNS%(53%,J9%+10%,SPACE$(7%-LEN(S$))+ RIGHT(S$,2%)) 3060 IF J8% OR D%(J9%,3%)<>PEEK(J1%) THEN D%(J9%,3%)=PEEK(J1%) ELSE 3080 3070 S$=NUM$(ASCII(CHR$(D%(J9%,3%)))) : I%=FNS%(59%,J9%+10%,SPACE$(4%-LEN(S$))+RIGHT(S$,2%)) : S$=NUM$(ASCII(CHR$(SWAP%(D%(J9%,3%))))) : I%=FNS%(62%,J9%+10%,SPACE$(4%-LEN(S$))+RIGHT(S$,2%)) 1%=PEEK(J1%) : IF T1%=-1% THEN T%=T%+1% ELSE IF ASCII(CHR$(T1%))<>J% THEN J1%=J1%+2% : GOTO 1170 1180 IF T% AND 1% THEN S$=" SW" ELSE S$=" " 1190 IF J8% OR J%(J9%,6%)<>T% THEN J%(J9%,6%)=T% : I%=FNS%(28%,J9%+3%,MID("RNRSHBXXFPSLCRMTLPDTPPPRTTKBDF", J2%,2%)+S$) 1200 T=PEEK(J0%+8%) : IF T<0 THEN T=T+65536. 1210 IF J8% OR T(J9%)<>T THEN T(J9%)=T ELSE 1900 1220 T0=T : T=INT(T/10.) : T0=T0-T*10. : GOSUB 29000 : S$=SPACE$(7%-LEN(S$))+S$+"."+CHR$(48%+T0) : I%=FNS%(34%,J9%+3%,S$) 1900 UB 6010 : PRINT #O%," "; : RETURN 6010 Q%,I%=V% : D0%=4096% : IF M0%=1% THEN D0%=64% ELSE IF I%>=0% THEN PRINT #O%,"0"; ELSE PRINT #O%,"1"; : I%=I%+32767%+1% 6020 D1%=I%/D0% : I%=I%-D1%*D0% : D0%=D0%/8% : PRINT #O%,CHR$(48%+D1%); : IF D0% THEN 6020 ELSE RETURN 7000 I%=D% : IF D% AND 1% THEN I%=I%-1% 7010 IF F%=0% THEN V%=PEEK(I%) : GOTO 7100 7020 IF ASCII(CHR$(SWAP%(I%)))/2%>=L9% THEN PRINT #O%,"?"; : I%=0% 7030 D0=I% : IF D0<0 THEN D0=D0+65536 7040 V%=P%(D0/2) 7100 IF M0%=2% THEN RETUUNT [";MID(D$,2%,LEN(D$)-2%); ","; : D$=NUM$(M0%(7%)) : PRINT #1%,MID(D$,2%,LEN(D$)-2%); "]"TAB(24%)"QUOTA"256.*M0%(28%)+M0%(27%);TAB(40%)"DISK"; 256.*M0%(6%)+M0%(5%);TAB(56%)"UFD"M0%(29%) : PRINT #1% 120 N%(3%)=0% : N%(4%)=0% : N%(5%)=M0%(7%) : N%(6%)=M0%(8%) 130 N%(0%)=30% : N%(1%)=6% : N%(2%)=15% : CHANGE N% TO D$ : ON ERROR GOTO 8000 : CHANGE SYS(D$) TO N% : ON ERROR GOTO 0 : N%(3%)=N%(3%)+1% : IF N%(3%)>255% THEN N%(3%)=0% : N%(4%)=N%(4%)+1% 140 PRINT #1%,RAD$(N%(7%)+SWAP%(N%( 3080 IF T$="" THEN 3100 ELSE IF J2% AND 8192% THEN T$=T$+"+LK" ELSE T$=T$+" " 3090 I%=FNS%(65%,J9%+10%,T$) 3100 J9%=J9%+1% 3900 T1%=T1%+2% : J%=J%+2% : J1%=J1%+2% : NEXT J0% : T%=T%+2% : RETURN 4000 IF J9%<>5% THEN IF D%(J9%,0%)<>-1% THEN I%=FNS%(45%,J9%+10%,CHR$(30%)) : X%=X%-1% : D%(J9%,0%)=-1% : J9%=J9%+1% : GOTO 4000 5000 T1%=M%(5%)+6% : T%=PEEK(PEEK(M%(7%)+6%)) : J9%=0% : GOSUB 25000 FOR J2%=0% TO 12% STEP 2% 5010 IF J9% AND 1% THEN IF B%(J9%,0%)<>-1% THEN I%=FNS%(58 J9%=J9%+1% : GOTO 1010 2000 IF J9%<>16% THEN IF J%(J9%,0%)<>-1% THEN I%=FNS%(0%,J9%+3%,SPACE$(43%)) : J%(J9%,0%)=-1% : J9%=J9%+1% : GOTO 2000 2010 J%=46% : FOR J0%=1% TO 4% : ON J0% GOTO 2020,2030,2040,2050 2020 J1%=PEEK(2110%) : GOTO 2060 2030 J1%=PEEK(2114%) : GOTO 2060 2040 J1%=ASCII(CHR$(PEEK(2%))) : J%=J%+1% : GOTO 2060 2050 J1%=ASCII(CHR$(SWAP%(PEEK(2%)))) 2060 IF J1%<>C%(J0%-1%) THEN C%(J0%-1%)=J1% : S$=NUM$(J1%) : I%=FNS%(J%,17%,SPACE$(5%-LEN(S$))+S$) 2070 J%=J%+5% : NEXTRN ELSE IF D% AND 1% THEN V%=SWAP%(V%) 7110 V%=ASCII(CHR$(V%)) : RETURN 8000 A%,A0%=0% 8010 GOSUB 9000 : IF C%<48% OR C%>55% THEN RETURN ELSE A0%=1% : A%=A%+A% FOR I%=1% TO 3% : A%=A%+C%-48% : GOTO 8010 9000 IF C0%=0% THEN C$=SYS(CHR$(4%)) : GET #1% : FIELD #1%, RECOUNT AS C$ : C0%=1% 9010 C%=ASCII(MID(C$,C0%,1%)) : C0%=C0%+1% : IF C%=26% THEN 9999 ELSE IF C0%<=LEN(C$) THEN RETURN ELSE C0%=0% : RETURN 9999 CLOSE 1%,2%,3% : END  8%)));RAD$(N%(9%)+SWAP%(N%(10%))); ".";RAD$(N%(11%)+SWAP%(N%(12%)))" "; 256.*N%(14%)+N%(13%)" "N%(15%)" "; 150 PRINT #1%,DATE$(N%(I%)+SWAP%(N%(I%+1%)))" "; FOR I%=17% TO 19% STEP 2% : PRINT #1%,TIME$(N%(21%)+SWAP%(N%(22%)))" "; 160 PRINT #1%,N%(27%)+SWAP%(N%(28%)) : GOTO 130 8000 IF ERR<>5% THEN ON ERROR GOTO 0 ELSE RESUME 8010 8010 PRINT #1% : GOTO 100 9000 IF ERR<>5% THEN ON ERROR GOTO 0 ELSE RESUME 9010 9010 PRINT #1%,CHR$(26%) : CLOSE 1% 9999 END  %,J9%/2%+4%,CHR$(30%)) : B%(J9%,0%)=-1% : J9%=J9%+1% : X%=X%-1% 5020 IF J9%<>8% THEN IF B%(J9%,0%)<>-1% THEN I%=FNS%(45%,J9%/2%+4%,CHR$(30%)) : X%=X%-1% : B%(J9%,0%),B%(J9%+1%,0%)=-1% : J9%=J9%+2% : GOTO 5020 6000 T=((PEEK(2048%)-PEEK(36%))*1440.+PEEK(38%)-PEEK(2050%)) *60.+60.-ASCII(CHR$(PEEK(2052%))) : GOSUB 29000 : I%=FNS%(62%,0%,SPACE$(8%-LEN(S$))+S$) 6010 J%=PEEK(2050%) : IF C%(5%)<>J% THEN C%(5%)=J% : I%=FNS%(49%,0%,TIME$(J%)) 6020 J%=PEEK(2048%) : IF C%(4%)<>J% THEN C%( J0% : J%=M%(21%) : J1%=M%(17%) : T%=1% : T1%=M%(19%) : J9%=0% : GOSUB 3000 : GOSUB 3000 : GOSUB 3000 : GOTO 4000 3000 FOR J0%=0% TO PEEK(M%(5%)+T%-1%) : J2%=PEEK(T1%) : IF J2%<0% THEN 3900 ELSE J8%=0% 3010 IF J8% OR D%(J9%,0%)<>SWAP%(J0%)+T% THEN J8%=1% : D%(J9%,0%)=SWAP%(J0%)+T% : I%=FNS%(45%,J9%+10%,MID("DFDKDP",T%,2%)+ RIGHT(NUM$(J0%),2%)) 3020 T$="" : IF J8% OR D%(J9%,1%)<>J2% THEN D%(J9%,1%)=J2% : S$=NUM$(ASCII(CHR$(J2%))) : I%=FNS%(49%,J9%+10%,SPACE$(5%-LEN(S$))+RIGHT(1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! QUOLST VERSION 4A EDIT 1 6/20/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM M%(30),N%(30) ! QUOLST FOR RSTS V4A 110 PRINT : PRINT "USER: ["; : P0%=PEEK(PEEK(2098%)+20%) : P1%=ASCII(CHR$(SWAP%(P0%))) : P0%=ASCII(CHR$(P0%)) 120 S$=NUM$(P1%) : PRINT MID(S$,2%,LEN(S$)-2%)","; : S$=NUM$(P0%) : PRINT MID(S$,2%,LEN(S$)-2%)"]" : PRINT "STR USED FREE SYSTEM" 130 CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO M% : M%(I%)=M%(1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! SHUTUP VERSION 4A EDIT 1 6/20/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM M%(30) ! SHUTUP FOR RSTS V4A 200 PRINT "AUTOMATIC SYSTEM SHUTDOWN PROGRAM" : CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO M% : M%(I%)=M%(I%)+SWAP%(M%(I%+1%)) FOR I%=5% TO 25% STEP 2% 300 PRINT : INPUT "HOW MANY MINUTES UNTIL SYSTEM SHUTDOWN";T% : INPUT "HOW MANY MINUTES BETWEEN WARNING MESSAGES";I% 400 J0%=ASCII(CHR$(PEEK(2056%)))/2% : 4%)=J% : I%=FNS%(39%,0%,DATE$(J%)) 20000 PRINT CHR$(29%);CHR$(13%); : X%,Y%=0% : SLEEP S9% : GOTO 1000 25000 FOR J0%=0% TO PEEK(T1%) : J%=ASCII(CHR$(PEEK(T%+2%))) : IF J%=0% THEN 25900 ELSE IF J% AND 1% THEN 25900 ELSE IF J2%=0% THEN IF PEEK(T%+30%) AND 8192% THEN 25900 25010 J8%=0% : IF B%(J9%,0%)<>SWAP%(J0%)+J2% THEN J8%=1% ELSE 25100 25020 B%(J9%,0%)=SWAP%(J0%)+J2% : GOSUB 26000 : I%=FNS%(I%,J9%/2%+4%,MID("KBDTLPPRPPCRMT",J2%+1%,2%)+ RIGHT(NUM$(J0%),2%)) 25030 GOSUB 26000 : I%=FNS$,2%)) : IF J2% AND 16384% THEN T$="PRI" ELSE T$="PUB" 3030 IF J8% OR D%(J9%,2%)<>PEEK(J%) THEN D%(J9%,2%)=PEEK(J%) ELSE 3060 3040 T=D%(J9%,2%) : IF T<0 THEN T=T+65536. 3050 S$=NUM$(T) : I%=FNS%(53%,J9%+10%,SPACE$(7%-LEN(S$))+ RIGHT(S$,2%)) 3060 IF J8% OR D%(J9%,3%)<>PEEK(J1%) THEN D%(J9%,3%)=PEEK(J1%) ELSE 3080 3070 S$=NUM$(ASCII(CHR$(D%(J9%,3%)))) : I%=FNS%(59%,J9%+10%,SPACE$(4%-LEN(S$))+RIGHT(S$,2%)) : S$=NUM$(ASCII(CHR$(SWAP%(D%(J9%,3%))))) : I%=FNS%(62%,J9%+10%,SPACE$(I%)+SWAP%(M%(I%+1%)) FOR I%=5% TO 25% STEP 2% : CHANGE SYS(CHR$(6%)+CHR$(14%)) TO N% 200 PRINT "DF: "; : U=256.*N%(6%)+N%(5%) : PRINT U" "; : U%=0% : F=0 : I%=M%(19%) : F%=M%(21%) 210 FOR I0%=0% TO PEEK(M%(5%)+U%) : IF PEEK(I%)<0% THEN 220 ELSE IF PEEK(I%) AND 16384% THEN 220 ELSE F=F+PEEK(F%) : IF PEEK(F%)<0% THEN F=F+65536 220 I%=I%+2% : F%=F%+2% : NEXT I0% : U%=U%+2% : IF U%<6% THEN 210 ELSE Q=256.*N%(28%)+N%(27%) 230 IF Q=0 THEN PRINT F" "F ELSE PRINT Q-U" "F 300 U%=0% : I%=M%(19%) K0%=ASCII(CHR$(SWAP%(PEEK(PEEK(PEEK(PEEK(2098%)))+28%))))/2% 500 GOSUB 8900 : D$=SYS(CHR$(6%)+CHR$(-2%)) : PRINT "FURTHER LOGINS ARE NOW DISABLED" 600 SLEEP 60%*I% : T%=T%-I% : IF T%>0% THEN GOSUB 8900 : GOTO 600 700 M$="FINAL WARNING! SYSTEM WILL SHUT DOWN!!" : GOSUB 9000 : PRINT "FINAL WARNING MESSAGE SENT" : SLEEP 15% : P%=0% 1000 GOSUB 8800 : P%=P%+1% : IF P%>5% THEN 2000 ELSE PRINT "PASS"P%"OF LOOKING FOR STILL ACTIVE JOBS" : J%=0% 1010 GOSUB 8700 : IF J%=0% THEN 3000 1020 PRIS%(I%+5%,J9%/2%+4%,RIGHT(NUM$(J%/2%),2%)) 25100 J%=PEEK(T%+30%) : IF J8% OR B%(J9%,1%)<>J% THEN B%(J9%,1%)=J% ELSE 25200 25110 S$="INIT" : IF J%<0% THEN S$="AS " : IF ASCII(CHR$(J%)) THEN S$="A+IN" 25120 GOSUB 26000 : I%=FNS%(I%+8%,J9%/2%+4%,S$) 25200 J9%=J9%+1% 25900 T%=T%+32% : NEXT J0% : T1%=T1%+2% : RETURN 26000 I%=45% : IF J9% AND 1% THEN I%=58% 26010 RETURN 29000 S$="" : T%=0% : T1%=T/3600. : IF T1% THEN T=T-3600.*T1% : GOSUB 29500 : S$=S$+":" 29010 T1%=T/60% : IF T1% OR T% THEN T4%-LEN(S$))+RIGHT(S$,2%)) 3080 IF T$="" THEN 3100 ELSE IF J2% AND 8192% THEN T$=T$+"+LK" ELSE T$=T$+" " 3090 I%=FNS%(65%,J9%+10%,T$) 3100 J9%=J9%+1% 3900 T1%=T1%+2% : J%=J%+2% : J1%=J1%+2% : NEXT J0% : T%=T%+2% : RETURN 4000 IF J9%<>5% THEN IF D%(J9%,0%)<>-1% THEN I%=FNS%(45%,J9%+10%,CHR$(30%)) : X%=X%-1% : D%(J9%,0%)=-1% : J9%=J9%+1% : GOTO 4000 5000 T1%=M%(5%)+6% : T%=PEEK(PEEK(M%(7%)+6%)) : J9%=0% : GOSUB 25000 FOR J2%=0% TO 12% STEP 2% 5010 IF J9% AND 1% THEN IF B%(J9%,0 : F%=M%(21%) 310 FOR I0%=0% TO PEEK(M%(5%)+U%) : IF PEEK(I%)<0% THEN 500 ELSE IF PEEK(I%) AND 16384% THEN 320 ELSE 500 320 U$="DF" : IF U%=2% THEN U$="DK" ELSE IF U%=4% THEN U$="DP" 330 S$=CHR$(6%)+CHR$(14%) : S$=S$+CHR$(0%) FOR Q=1 TO 20 : ON ERROR GOTO 900 : CHANGE SYS(S$+U$+CHR$(I0%)+CHR$(-1%)) TO N% : ON ERROR GOTO 0 340 PRINT U$; : U$=NUM$(I0%) : PRINT MID(U$,2%,LEN(U$)-2%)": "; : U=256.*N%(6%)+N%(5%) : PRINT U" "; 350 F=PEEK(F%) : IF F<0 THEN F=F+65536 360 Q=256.*N%(28%)+N%(27%) :NT " JOB"J%/2%"FOUND STILL ACTIVE"; : IF K%<0% THEN PRINT " AND DETACHED" ELSE PRINT 1030 ON ERROR GOTO 1900 : IF K%<0% THEN D$=SYS(CHR$(6%)+CHR$(8%)+CHR$(J%/2%)+SPACE$(24%)+CHR$(-1%)) : GOTO 1100 1040 D$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(K%)+CHR$(3%)+"BYE"+ CHR$(13%)+"YES"+CHR$(13%)) 1100 ON ERROR GOTO 0 : GOSUB 8700 : IF J% THEN 1020 ELSE PRINT "THE NEXT PASS WILL OCCUR IN 15 SECONDS" : SLEEP 15% : GOTO 1000 1900 RESUME 1910 1910 ON ERROR GOTO 0 : PRINT " ERROR IN DEACTIVATING JOB"J%/2%=T-60%*T1% : GOSUB 29500 : S$=S$+":" 29020 T1%=T 29500 T$=NUM$(T1%+T%*100%) : S$=S$+MID(T$,2%+T%,LEN(T$)-2%-T%) : T%=1% : RETURN 32100 DEF FNS%(Q0%,Q1%,Q0$) 32110 IF Q1%=Y% AND Q0%-X%>=0% AND Q0%-X%<3% THEN PRINT CHR$(24%); FOR I%=1% TO Q0%-X% : GOTO 32130 32120 PRINT CHR$(14%);CHR$(Q1%+32%);CHR$(Q0%+32%); 32130 PRINT Q0$; : FNS%=0% : FNEND 32767 END  %)<>-1% THEN I%=FNS%(58%,J9%/2%+4%,CHR$(30%)) : B%(J9%,0%)=-1% : J9%=J9%+1% : X%=X%-1% 5020 IF J9%<>8% THEN IF B%(J9%,0%)<>-1% THEN I%=FNS%(45%,J9%/2%+4%,CHR$(30%)) : X%=X%-1% : B%(J9%,0%),B%(J9%+1%,0%)=-1% : J9%=J9%+2% : GOTO 5020 6000 T=((PEEK(2048%)-PEEK(36%))*1440.+PEEK(38%)-PEEK(2050%)) *60.+60.-ASCII(CHR$(PEEK(2052%))) : GOSUB 29000 : I%=FNS%(62%,0%,SPACE$(8%-LEN(S$))+S$) 6010 J%=PEEK(2050%) : IF C%(5%)<>J% THEN C%(5%)=J% : I%=FNS%(49%,0%,TIME$(J%)) 6020 J%=PEEK(2048% IF Q=0 THEN PRINT F" "F ELSE PRINT Q-U" "F 500 I%=I%+2% : F%=F%+2% : NEXT I0% : U%=U%+2% : IF U%<6% THEN 310 ELSE 999 900 IF ERR<>5% THEN ON ERROR GOTO 0 ELSE RESUME 910 910 ON ERROR GOTO 0 : GOTO 500 999 END   : GOTO 1100 2000 PRINT "FROM NOW ON JOBS WILL ONLY BE 'KILLED'" 2010 GOSUB 8800 : PRINT "PASS"P%"OF KILLING STILL ACTIVE JOBS" : J%=0% 2020 GOSUB 8700 : IF J%=0% THEN 3000 2030 PRINT " JOB"J%/2%"FOUND STILL ACTIVE" : ON ERROR GOTO 2900 : D$=SYS(CHR$(6%)+CHR$(8%)+CHR$(J%/2%)+SPACE$(24%)+CHR$(-1%)) : ON ERROR GOTO 0 2040 GOSUB 8700 : IF J% THEN 2030 ELSE PRINT "THE NEXT PASS WILL OCCUR IN 15 SECONDS" : SLEEP 15% : P%=P%+1% : GOTO 2010 2900 RESUME 2910 2910 ON ERROR GOTO 0 : PRIN1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! BUILD VERSION 4A EDIT 1 6/20/72 !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 100 DIM Q%(30) ! BUILD FOR RSTS V4A 110 PRINT "SYSTEM BUILDER" 120 INPUT "SYSTEM BUILD";D$ : IF ASCII(D$)=89% THEN D$="SYSTEM" : GOSUB 9100 : GOTO 900 130 D$="AUXILIARY" : GOSUB 9100 : INPUT "CONTROL FILE IS";F$ : K%=ASCII(CHR$(SWAP%(PEEK(PEEK(PEEK(PEEK(2098%)))+28%))))/2% 140 GOTO 1000 900 S$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(0%)+ ") : IF C%(4%)<>J% THEN C%(4%)=J% : I%=FNS%(39%,0%,DATE$(J%)) 20000 PRINT CHR$(29%);CHR$(13%); : X%,Y%=0% : SLEEP S9% : GOTO 1000 25000 FOR J0%=0% TO PEEK(T1%) : J%=ASCII(CHR$(PEEK(T%+2%))) : IF J%=0% THEN 25900 ELSE IF J% AND 1% THEN 25900 ELSE IF J2%=0% THEN IF PEEK(T%+30%) AND 8192% THEN 25900 25010 J8%=0% : IF B%(J9%,0%)<>SWAP%(J0%)+J2% THEN J8%=1% ELSE 25100 25020 B%(J9%,0%)=SWAP%(J0%)+J2% : GOSUB 26000 : I%=FNS%(I%,J9%/2%+4%,MID("KBDTLPPRPPCRMT",J2%+1%,2%)+ RIGHT(NUM$(J0%),2%)) 1! RESEQU BASIC RESEQUENCE PROGRAM THIS PROGRAM IS CATEGORY IV IT IS PROVIDED COMPLIMENTS OF: DELAWARE SCHOOLS AUXILIARY ASSOCIATION PROJECT DELTA 10! THIS PROGRAM WILL CORRECTLY RESEQUENCE A BASIC PROGRAM. 20! IT WILL TAKE CARE OF GO TO, GO SUB, ON GO TO,ON GO SUB, RESUME, 30! ON ERROR GO TO, THEN, AND ELSE. THESE MAY HAVE SPACES,TABS 40! OR WATEVER ELSE YOU LIKE IN THEM! YOU HAVE THE PRIVELEGE OF 50! TELLING IT WHERE TO START AND BY WHAT STEP. TO RUN: 60! ENTER FILENAME AFTER THE #, ANT " ERROR IN KILLING JOB"J%/2% : GOTO 2040 3000 GOSUB 8800 : J%=0% : GOSUB 8700 : IF J% THEN PRINT "** SOME JOB SNUCK IN THE BACK DOOR **" : GOTO 9999 3010 GOSUB 8800 : PRINT "NON-SYSTEM DISKS WILL NOW BE DISMOUNTED" : T%=M%(19%) : FOR J%=0% TO 4% STEP 2% 3020 FOR J1%=0% TO PEEK(J%+M%(5%)) : X%=PEEK(T%) : IF X%<0% OR T%=M%(19%) THEN 3100 3030 PRINT " DISK "MID("DFDKDP",J%+1%,2%);RIGHT(NUM$(J1%),2%); "FOUND STILL MOUNTED" 3040 ON ERROR GOTO 3900 : D$=SYS(CHR$(6%)+CHR$(3%)+CHR$(2%)+SPOLD "+D$+":LOGIN"+CHR$(27%)+ "COMPILE"+CHR$(27%)+ "CHAIN '"+D$+":BUILD' 9200"+CHR$(27%)) 910 S$=SYS(CHR$(8%)+D$) : GOTO 9999 1000 J%=ASCII(CHR$(PEEK(2056%)))/2% : OPEN D$+":"+F$ FOR INPUT AS FILE 1% : OPEN "BUILD.TMP" FOR OUTPUT AS FILE 2% : ON ERROR GOTO 1020 1010 INPUT LINE #1%,S$ : PRINT #2%,S$; : GOTO 1010 1020 IF ERR<>11% THEN ON ERROR GOTO 0 ELSE RESUME 1030 1030 ON ERROR GOTO 0 : CLOSE 1%,2% : OPEN "BUILD.TMP" FOR INPUT AS FILE 1% : KILL "BUILD.TMP" 1100 S$=SYS(CHR$(6%)+CHR$(7 25030 GOSUB 26000 : I%=FNS%(I%+5%,J9%/2%+4%,RIGHT(NUM$(J%/2%),2%)) 25100 J%=PEEK(T%+30%) : IF J8% OR B%(J9%,1%)<>J% THEN B%(J9%,1%)=J% ELSE 25200 25110 S$="INIT" : IF J%<0% THEN S$="AS " : IF ASCII(CHR$(J%)) THEN S$="A+IN" 25120 GOSUB 26000 : I%=FNS%(I%+8%,J9%/2%+4%,S$) 25200 J9%=J9%+1% 25900 T%=T%+32% : NEXT J0% : T1%=T1%+2% : RETURN 26000 I%=45% : IF J9% AND 1% THEN I%=58% 26010 RETURN 29000 S$="" : T%=0% : T1%=T/3600. : IF T1% THEN T=T-3600.*T1% : GOSUB 29500 : S$=S$+":" 29010 T1%=TD START+STEP AFTER THE *. 70! THIS IS ONLY A TWO PASS RESEQUENCE SO IT WON'T TAKE AS LONG 80! AS MOST. I HAVE NEVER SEEN IT FAIL, HOWEVER... 90! NOTE*** THERE MUST BE NO SPACES BETWEEN THE START AND END OF 95! A LINE NUMBER. 50 GO TO 10 0 IS A NO NO. 100 REM RESEQ CLARK BAKER 3/72 C.O.G. 110 DIM L%(255%),O%(255%),N%(255%) 120 PRINT "RESEQ VER 2A" 130 OPEN "KB:" AS FILE 3% 140 ON ERROR GO TO 260 150 PRINT "#"; 160 INPUT #3%,F1$:I%=INSTR(1,F1$,"/") 170 IF I%=0% THEN F$=F1$:IF INSTR(1,F$,".") THEACE$(19%)+ MID("DFDKDP",J%+1%,2%)+CHR$(J1%)+CHR$(-1%)) 3050 ON ERROR GOTO 0 : PRINT " DISK IS NOW DISMOUNTED" 3100 T%=T%+2% : NEXT J1% : NEXT J% : PRINT "ALL NON-SYSTEM DISKS ARE NOW DISMOUNTED" : GOTO 4000 3900 RESUME 3910 3910 ON ERROR GOTO 0 : PRINT "** ERROR DISMOUNTING THE DISK **" : GOTO 9999 4000 PRINT : PRINT "ALL SET TO PROCEED WITH SYSTEM SHUTDOWN" : PRINT : PRINT "PLEASE WAIT FOR THE COMPUTER TO ACTUALLY 'HALT'" : PRINT "WHEN IT DOES, PRESSING 'CONT' WILL BOOT BACK R %)) : IF F$="BUILD.CTL" THEN S$=SYS(CHR$(6%)+CHR$(-1%)) 1110 S$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(K%)+CHR$(3%)+"HELLO"+CHR$(13%)) : CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO Q% : Q%(T%)=Q%(T%)+SWAP%(Q%(T%+1%)) FOR T%=5% TO 25% STEP 2% : T%=PEEK(PEEK(Q%(7%)+6%))+32%*K%+2% 1120 T0%=ASCII(CHR$(PEEK(T%))) : IF T0%=0% OR T0%=J%*2% THEN 1120 ELSE T%=Q%(13%)+T0% : T0%=Q%(15%)+T0% : GOSUB 9000 : IF F$="BUILD.CTL" THEN S$=SYS(CHR$(6%)+CHR$(-2%)) 1130 CHANGE SYS(CHR$(6%)+CHR$(14%)) TO Q% : S$=SYS(CHR$( /60% : IF T1% OR T% THEN T=T-60%*T1% : GOSUB 29500 : S$=S$+":" 29020 T1%=T 29500 T$=NUM$(T1%+T%*100%) : S$=S$+MID(T$,2%+T%,LEN(T$)-2%-T%) : T%=1% : RETURN 32100 DEF FNS%(Q0%,Q1%,Q0$) 32110 PRINT CHR$(14%); : IF Q1%=Y% THEN 32130 ELSE IF Q1%>Y% THEN PRINT CHR$(10%); FOR I%=1% TO Q1%-Y% : GOTO 32130 32120 GOSUB 32300 : PRINT CHR$(26%); FOR I%=1% TO Y%-Q1% 32130 Y%=Q1% : IF Q0%=X% THEN 32160 ELSE IF Q0%>X% THEN GOSUB 32300 : PRINT CHR$(24%); FOR I%=1% TO Q0%-X% : GOTO 32160 32140 IF N 280 ELSE F$=F$+ ".BAS":GO TO 280 180 IF I%=1 THEN 200 190 F$=LEFT(F1$,I%-1) 200 C%=ASCII(MID(F1$,I%+1,1)) 210 IF C%=83% THEN CLOSE 3%:GO TO 1080 220 IF C%=79% THEN CHAIN F$ 32767% 230 IF C%=67% THEN CHAIN F$ 240 PRINT "ILL SWI!" 250 GO TO 150 260 PRINT "ERR #";ERR;"ON FILE ";F$ 270 RESUME 150 280 OPEN F$ FOR INPUT AS FILE 1 290 PRINT "*";:INPUT #3%,Z$ 300 Z%=INSTR(1,Z$,"+") 310 IF Z%=0% THEN Z$=Z$+"+":GO TO 300 320 S1%=VAL(LEFT(Z$,Z%-1)):S2%=VAL(RIGHT(Z$,Z%+1)) 330 IF S1%=0% THEN S1%= STS" 4010 X%=PEEK(2098%)+2% : T%=PEEK(X%) : IF T% AND 8192% THEN 4020 ELSE T%=T%+8192% 4020 D$=SYS(CHR$(6%)+CHR$(-6%)+CHR$(X%)+CHR$(SWAP%(X%))+ CHR$(T%)+CHR$(SWAP%(T%))) 4030 X%=PEEK(PEEK(PEEK(2098%)))+22% 4040 IF PEEK(X%) THEN 4040 4050 D$=SYS(CHR$(6%)+CHR$(-6%)+CHR$(4%)+CHR$(0%)+CHR$(44%)+CHR$(0%)) : D$=SYS(CHR$(6%)+CHR$(5%)) 4060 X%=PEEK(1%) : STOP ! YOU NEVER GET HERE !!!!!!!!!!!!!!!!!!!!!!!!! 8700 J%=J%+2% : J1%=PEEK(J%+M%(11%)) : IF J1%<0% THEN J%=0% : RETURN 8710 IF J%/2%=J0% THEN 6%)+CHR$(-4%)+CHR$(K%)+NUM$(Q%(8%))+"/"+ NUM$(Q%(7%))+CHR$(13%)) : GOSUB 9000 1140 S$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(K%)+ RAD$(Q%(9%)+SWAP%(Q%(10%)))+RAD$(Q%(11%)+SWAP%(Q%(12%)))+ CHR$(13%)) : GOSUB 9000 : S$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(K%)+ CHR$(13%)) : GOSUB 9000 1200 ON ERROR GOTO 8000 : INPUT LINE #1%,S$ : ON ERROR GOTO 0 1210 IF ASCII(S$)=94% THEN S$=CHR$(3%) : SLEEP 4% : GOTO 1300 1220 IF ASCII(RIGHT(S$,LEN(S$)))=27% THEN 1300 ELSE S$=LEFT(S$,LEN(S$)-1%) : IF ASCII(RIGHT(S$,LEN(S$Q0%<=X%-Q0% THEN PRINT CHR$(13%); : X%=0% : GOTO 32130 32150 GOSUB 32300 : PRINT CHR$(8%); FOR I%=1% TO X%-Q0% 32160 X%=Q0%+LEN(Q0$) : PRINT CHR$(14%);Q0$; : FNS%=0% : FNEND 32300 PRINT CHR$(0%); FOR F8%=1% TO F9% : RETURN 32767 END  100% 340 IF S2%=0% THEN S2%=10% 350 ON ERROR GO TO 390 360 PRINT "PASS 1" 370 L1%=FNL%:IF L1% THEN L%=L%+1:L%(L%)=L1% 380 GO TO 370 390 IF ERR=11% THEN RESUME 400 ELSE 260 400 ON ERROR GO TO 850 410 OPEN F$ FOR INPUT AS FILE 1 420 PRINT "PASS 2" 430 OPEN "RESEQ.TMP" FOR OUTPUT AS FILE 2% 440 L1%=FNL%:IF L1%=0% THEN 440 450 CHANGE L$ TO O% 460 T%=T%+1:N%=1:D%=FNP%(S2%*(T%-1)+S1%):N%(N%)=32%:N%=N%+1 470 Q1%,Q2%,R%,N9%=0% 480 S$=" " 490 FOR O%=X% TO O%(0%) 500 C%=O%(O%) 510 IF C%=10% AND8700 ELSE IF J1%=0% THEN 8700 ELSE J1%=PEEK(PEEK(J1%)) : K%=ASCII(CHR$(SWAP%(PEEK(J1%+28%))))/2% : IF J%<>ASCII(CHR$(PEEK(J1%+2%))) THEN K%=-1% 8720 RETURN 8800 IF ASCII(CHR$(SWAP%(PEEK(2196%)))) THEN RETURN ELSE PRINT "** SOMEONE RE-ENABLED FURTHER LOGINS **" : GOTO 9999 8900 M$="SYSTEM GOING DOWN IN"+NUM$(T%)+"MINUTES, PLEASE FINISH UP" : GOSUB 9000 : PRINT RIGHT(NUM$(T%),2%); "MINUTE WARNING MESSAGE SENT" : RETURN 9000 FOR X%=0% TO M%(3%) : IF X%=K0% THEN 9010 ELSE D$=SYS(CH)-1%))<>10% THEN 1300 ELSE S$=LEFT(S$,LEN(S$)-1%) 1300 I%=INSTR(1%,S$,"?") : IF I% THEN S$=LEFT(S$,I%-1%)+D$+RIGHT(S$,I%+1%) : GOTO 1300 1310 S$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(K%)+S$) : GOSUB 9000 : GOTO 1200 8000 IF ERR<>11% THEN ON ERROR GOTO 0 ELSE RESUME 8010 8010 ON ERROR GOTO 0 : CLOSE 1% : S$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(K%)+CHR$(3%)) : GOSUB 9000 : S$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(K%)+"HELLO"+CHR$(13%)) : GOSUB 9000 8020 S$=SYS(CHR$(6%)+CHR$(-4%)+CHR$(K%)+NUM$(J%)+CHR$(13%))100 REM EDIT V01B-13 110 K1%=1%:K0%=0% 150 K9$=RIGHT(NUM$(ASCII(RIGHT(SYS(CHR$(6%)+CHR$(9%)+CHR$(0%)),2%))),2%) 160 K5$="EDIT"+K9$ :K7$=K5$+".DAT": K8$=K5$+".DA2" ! FILES TO BE OPENED 200 OPEN "KB:" AS FILE K1% : PRINT "EDIT V01B-13 300 ON ERROR GOTO 0 : PRINT "*"; : INPUT LINE #K1%,C$ ! ASK FOR A COMMAND 400 C$=FNT$(C$) : IF LEN(C$)K0% THEN 2500 ELSE P2%=INSTR(K1%,C$,".") : IF P2%<>K0% THEN N1$=LEFT(C$,P2%)+"BCK" ELSE N1$=C$+".BCK" 630 O$,N O%(O%+1)=13% THEN N%(N%)=10%:N%(N%+1)=13%:N%(N%+2%)= 0%:O%=O%+2%:N%=N%+3%:GO TO 640 520 IF R% OR C%=9% OR C%=32% THEN 620 530 IF N9% THEN 720 540 IF Q1% OR Q2% THEN 690 550 IF C9% THEN C9%=0%:IF C%=44% THEN N9%=-1%:GO TO 620 560 IF C%=39% THEN Q1%=-1%:GO TO 620 570 IF C%=34% THEN Q2%=-1%:GO TO 620 580 IF C%=33% THEN R%=-1%:GO TO 620 590 S$=RIGHT(S$,2%)+CHR$(C%) 600 IF INSTR(1,S$,"REM") OR S$="DATA" THEN R%=-1%:GO TO 620 610 IF INSTR(1%,"GOTO OSUB THEN ELSE SUME ERL= RL<>",S$) THEN N9%=-1% 6R$(6%)+CHR$(-5%)+CHR$(X%)+M$+CHR$(13%)+CHR$(10%)) 9010 NEXT X% : RETURN 9999 END  : SLEEP 5% 8100 PRINT : PRINT "BUILD COMPLETE" : GOTO 9999 9000 IF PEEK(T%) AND PEEK(T0%) THEN SLEEP 2% : GOTO 9000 9010 IF PEEK(T0%) AND 8192% THEN RETURN ELSE SLEEP 2% : GOTO 9000 9100 PRINT D$" BUILD DEVICE"; : INPUT LINE D$ 9110 D$=LEFT(D$,LEN(D$)-1%) : T%=ASCII(RIGHT(D$,LEN(D$))) : IF T%=13% OR T%=10% THEN 9110 ELSE RETURN 9200 D$=SYS(CHR$(7%)) : K%=0% : F$="BUILD.CTL" : GOTO 1000 9999 END  $=C$ : GOTO 3010 2500 N$=LEFT(C$,C%-K1%) : O$=RIGHT(C$,C%+K1%) 2600 IF LEN(O$)>K0% AND LEN(N$)>K0% THEN 2700 ELSE PRINT "?"C$ : GOTO 300 2700 IF O$=N$ THEN C$=O$: GOTO 600 3010 OPEN O$ FOR INPUT AS FILE 3% 3020 OPEN K7$ AS FILE 4%,CLUSTERSIZE 4% 3030 DIM #4%,L$(1000%)=124% 3032 L$(64%)="HELLO" 3035 OPEN K8$ AS FILE 5% : DIM #5% , L1$(500%)=124% 3040 ON ERROR GOTO 8000 ! TAKE CARE OF END OF FILE ONLY 3050 INPUT LINE #3%,L$(T%) FOR T%=K1% TO 1000% 3060 ON ERROR GOTO 0 : CLOSE 3% : GOTO 4000 320 N%(N%)=C% 630 N%=N%+1 640 NEXT O% 650 N%(0%)=N%-1 660 CHANGE N% TO N$ 670 PRINT #2%,N$; 680 GO TO 440 690 IF Q1% THEN IF C%=39% THEN Q1%=0% 700 IF Q2% THEN IF C%=34% THEN Q2%=0% 710 GO TO 620 720 IF C%>47% AND C%<58% THEN N8%=N8%*10%+C%-48%:O%=O%+1: C%=O%(O%):N7%=-1%:GO TO 720 730 IF NOT N7% THEN N9%=0%:GO TO 510 740 N7%=0% 750 IF N8%=0% THEN D%=FNP%(0%):GO TO 840 760 FOR X%=1 TO L% 770 IF L%(X%)=N8% THEN 830 780 NEXT X% 790 PRINT "LINE NUMBER";N8%;"NOT FOUND AT LINE";L1%,"("; S2 EDIT.BAS ** EDIT IS SOFTWARE CATEGORY 4 ** EDIT IS A GENERAL-PURPOSE EDITOR TAILORED AFTER THE PDP-11 DOS EDITOR WITH A FEW MODIFICATIONS. MAXIMUM LINE LENGTH 128 CHARACTERS THE NUMBER N IS NOT REQUIRED AND THE STRING " " ALSO IS NOT REQUIRED. IF A STRING IS REQUIRED BUT NOT GIVEN, THE EDITOR WILL WAIT FOR INPUT ON NEXT LINE. A COMMAND THAT WAITS FOR INPUT FROM THE KEYBOARD CAN BE KILLED BY TYPING CTRL/G CTRL/G (RING THE BELL TWICE) THEN . WHEN A COMMAND IS GIVEN THAT REQUBUILD.BAS ** BUILD IS SOFTWARE CATEGORY 4 ** DESCRIPTION: BUILD IS A PROGRAM BY WHICH THE SYSTEM LIBRARY OR OTHER LIBRARIES CAN BE AUTOMATICALLY BUILT. SAVING: BUILD IS NOT NORMALLY SAVED IN ITS COMPILED FORM. RUNNING: CALL: RUN BUILD BUILD WILL ASK WHETHER A SYSTEM OR AUXILIARY BUILD. A SYSTEM BUILD IS THE INITIAL SYSTEM LIBRARY BUILD. AUXILIARY BUILDS CAN TAKE PLACE AT ANY TIME. BUILD DRIVES ITSELF FROM A CONTROL FILE. FOR A SYSTEM BUILD THIS FILE IS 'BUILD.CTL' FOR OTHER500 PRINT "?" CHR$(C1%) ; C$ : M%=K0% : GOTO 4000 3510 V1$="1" IF V1$="" : V1$="-1" IF V1$="-" :V1%=VAL(V1$): V1$="" : RETURN 3520 IF V1%T% : RETURN ! POSITIVE NUMBERS 3540 L2%=L% : L1%=L%+V1% : L1%=K1% IF L1%K0% THEN 6350 4002 PRINT "#"; : INPUT LINE #K1%,C$ : C$=FNT$(C$) 4005 V1$="" : M3%=K0% ! RETURN HERE FOR NEXT COMMAND 4010 IF LEN(C$)K0% TH%*(T%-1)+S1%;")" 800 N%(N%),N%(N%+1),N%(N%+2%)=ASCII("?") 810 N%=N%+3% 820 GO TO 840 830 D%=FNP%(S2%*(X%-1)+S1%) 840 N8%=0%:C9%=-1%: GO TO 510 850 IF ERR<>11% THEN RESUME 260 860 PRINT #2%,CHR$(26%); 870 CLOSE 1,2% 880 KILL F$ 890 NAME "RESEQ.TMP" AS F$ 900 T%,L%,N8%,N7%=0% 910 RESUME 140 920 DEF FNL% 930 L$="" 940 INPUT LINE #1,L1$:L$=L$+L1$:IF ASCII(RIGHT(L1$,LEN(L1$)))=0% THEN 940 950 N%=0% 960 FOR X%=1 TO LEN(L$) 970 I%=INSTR(1," 0123456789",MID(L$,X%,1)) 980 IF I%=0% THEN 1010 IRES INPUT, THE NEXT CHARACTER FOLLOWING THE COMMAND CHARACTER IS USED AS THE DELIMITING CHARACTER. I#THIS WILL BE INSERTED# I> WAITING FOR "I" TEXT. C> WAITING FOR "C" TEXT. G> WAITING FOR "G" TEXT. O> WAITING FOR INPUT LINE FOLLOWING AN "O" COMMAND. RUN $ EDIT EDIT V01A-13 *DEV:FILENAME.EXT57% THEN 4500 4030 V1$=V1$+C1$ : GOTO 4010 4500 IF C1%=47% THEN 4700 ELSE IF C1%>63% AND C1%<87% THEN ON C1%-63% GOTO 6700, 6100,4600,5800,5100,5400,6900,5000,6400,5300,5600,5200,5900,6300,3500,6000,6500,6600,3500, 5700,3500,6200,5500 ELSE 3500 4540 ! 35=# NUMBER SEARCH ! 46=. FROM MARK TO DOT 6800 ! 63=@ MARK DOT 6700 4550 ! 990 IF I%>2% THEN N%=N%*10%+I%-3% 1000 NEXT X% 1010 FNL%=N% 1020 FNEND 1030 DEF FNP%(P%) 1040 CHANGE NUM$(P%) TO P% 1050 N%(N%+P1%-2%)=P%(P1%) FOR P1%=2% TO P%(0%)-1 1060 N%=N%+P%(0%)-2% 1070 FNEND 1080 END  FOR "A" "L" "K" AND "S" COMMANDS. N@ MARK PRESENT POSITION OF CHARACTER AND LINE POINTERS. THERE ARE 11 "@" (0-10) AND 11 "." (0-10). "@" MARKS LOCATION. "." MEANS FROM WHERE I'M AT TO THE "," SPECIFIED. / FROM HERE THROUGH END OF TEXT. NA MOVE LINE POINTER N LINES. B MOVE LINE POINTER TO THE BEGINNING. NC" " CHANGE N CHARACTERS (DELETE N CHARACTERS AND ALLOW INSERTION OF THE FOLLOWING STRING). ND DELETE N CHARACTERS. E END PROGRAM; MOVE EDIT.DAT TO OUTPUT FILE. NF"!SHUTUP.BAS ** SHUTUP IS SOFTWARE CATEGORY 4 ** DESCRIPTION: SHUTUP IS A PROGRAM DESIGNED TO SHUT DOWN THE SYSTEM. SAVING: SHUTUP COULD BE SAVED IN ITS COMPILED FORM IN THE SYSTEM LIBRARY. RUNING: A SYSTEM MANAGER RUNS SHUTUP BY TYPING: RUN $SHUTUP SHUTUP THEN ASKS FOR A NUMBER OF MINUTES UNTIL SYSTEM SHUT DOWN AND THE NUMBER OF MINUTES BETWEEN WARNING MESSAGES. AFTER THAT SHUTUP PROCEEDS BY ITSELF UNTIL IT ACTUALLY HALTS THE CPU. EXAMPLE: RUN $SHUTUP AUTOMATIC SYSTEM SHUTD" 65=A JUMP LINE POINTER 6100 ! 66=BEGINNING 4600 ! 67=CHANGE 5800 ! 68=DELETE 5100 ! 69=END 5400 ! 70=FIND 6900 ! 71=GET 5000 ! 72=HOLES REMOVED 6400 ! 73=INSERT 5300 4551 ! 74=JUMP POINTER 5600 ! 75=KILL LINES 5200 ! 76=LIST LINE 5900 ! 77=MACRO 6300 ! 79=OPEN FOR INPUT 6000 ! 80=PUSH REST OF LINE ONTO NEXT LINE 6500 ! 81=QUE FOR MACRO 6600 4552 ! 83=SAVE LINES 5700 ! 85=UNSAVE LINES 6200 ! VERIFY 5500 4600 L%=K1% : P2%=K0% : GOTO 4005 4700 V1$=NUM$(#QUOLST.BAS ** QUOLST IS SOFTWARE CATEGORY 4 ** DESCRIPTION: QUOLST TELLS THE USER HIS CURRENT DISK QUOTA AND SYSTEM FREE COUNT. SAVING: QUOLST COULD BE SAVED IN ITS COMPILED FORM IN THE SYSTEM LIBRARY WITH PROTECTION 168. RUNNING: CALL: RUN $QUOLST EXAMPLE: RUN $QUOLST USER: [100,100] STR USED FREE SYSTEM DF: 55 145 1234 DK1: 10 1992 1992 IN THIS EXAMPLE THE USER WHO IS [100,100] HAS USED 55 BLOCKS ON THE SYSTEM DISK(S), HAS A QUOTA OF 200 (200 - 55 = 145), AND TH$ " AND N#F" " ARE THE SAME AS 'G' EXCEPT THAT THE SEARCH WILL FAIL IF STRING IS NOT FOUND IN PRESENT LINE. NG" " GET THE NTH STRING; CHARACTER POINTER WILL BE IMMEDIATELY FOLLOWING THE STRING. N#G "#G" WORKS LIKE "G" WITH THE FOLLOWING CHANGES. "#G" MEANS GET THE STRING SPECIFIED BUT IF THE CHARACTER PRECEDING THE STRING IS FROM "A - Z" OR "0 - 9" OR THE CHARACTER FOLLOWING THE STRING IS FROM "0 - 9", THEN THE GET FAILS AND CONTINUES LOOKING FO%OWN PROGRAM HOW MANY MINUTES UNTIL SYSTEM SHUTDOWN? 5 HOW MANY MINUTES BETWEEN WARNING MESSAGES? 1 5 MINUTE WARNING MESSAGE SENT FURTHER LOGINS ARE NOW DISABLED 4 MINUTE WARNING MESSAGE SENT 3 MINUTE WARNING MESSAGE SENT 2 MINUTE WARNING MESSAGE SENT 1 MINUTE WARNING MESSAGE SENT FINAL WARNING MESSAGE SENT PASS 1 OF LOOKING FOR STILL ACTIVE JOBS JOB 2 FOUND STILL ACTIVE JOB 10 FOUND STILL ACTIVE THE NEXT PASS WILL OCCUR IN 15 SECONDS PASS 2 OF LOOKING FOR STILL ACTIVE JOBS &T%-L%) : P2%=K0% : GOTO 4010 5000 P$=FNG$("G") 5017 GOSUB 3510 : V1%=ABS(V1%) ! GET ABSOLUTE VALUE OF V1$ 5020 FOR L%=L% TO T% 5030 P2%=P2%+K1%: P2%=INSTR(P2%,L$(L%),G1$): IF P2%=K0% AND F%=0% THEN 5070 ELSE IF F% AND P2%=0% THEN 5080 ! FAILED SEARCH 5040 IF N5% THEN 5090 ! DO NUMBER CHECKING 5050 IF V1%>K1% THEN V1%=V1%-K1% : GOTO 5030 5060 IF N5%=K0% THEN GOSUB 5095 ! ADJUST POINTER 5065 F%,N5%=K0% : GOTO 4005 5070 NEXT L% 5080 F%,N5%=K0% : GOTO 3500 5090 D%=ASCII(RIGHT(L$(L%),P2%-K1%)) :ERE ARE 1234 FREE BLOCKS ON THE SYSTEM DISK(S). THE USER ALSO HAS AN ACCOUNT ON PRIVATE DISK DK1:. HE HAS USED 10 BLOCKS THERE, HAS NO DISK QUOTA ON DK1: SO THE DISK FREE BLOCK COUNT (1992) IS THE SAME AS HIS FREE COUNT (1992). ASSUMPTIONS: NONE (R A STRING THAT WILL MATCH. THIS IS USEFUL WHEN YOU WANT TO CHANGE ALL "K1%" TO "B3%" BUT YOU DO NOT WANT "FNK1%" TO BE CHANGED OR YOU WANT THE NUMBER "10" BUT NOT "1100". H REMOVE ANY LINES THAT HAVE BEEN KILLED. I" " INSERT STRING AFTER DOT. NJ JUMP CHARACTER-POINTER N CHARACTERS. (YOU CANNOT JUMP BEYOND THE END OF AN EDITOR LINE.) (USE NA TO JUMP LINES.) NK KILL N LINES. (USE "H" COMMAND TO REMOVE THE KILLED LINES.) NL LIST N LINES. IF N=0 THEN PRIN NON-SYSTEM DISKS WILL NOW BE DISMOUNTED DISK DK1 FOUND STILL MOUNTED DISK IS NOW DISMOUNTED ALL NON-SYSTEM DISKS ARE NOW DISMOUNTED ALL SET TO PROCEED WITH SYSTEM SHUTDOWN PLEASE WAIT FOR THE COMPUTER TO ACTUALLY 'HALT' WHEN IT DOES, PRESSING 'CONT' WILL BOOT BACK RSTS ASSUMPTIONS: NONE * GOSUB 5095 : D1%=ASCII(RIGHT(L$(L%),P2%+K1%)): IF D1%<48% OR D1%>57% THEN IF D%<48% OR D%>57%THEN IF D%<65% OR D%>90% THEN 5050 5093 GOTO 5030 5095 M1%(K0%)=L% : M2%(K0%)=P2%-K1% :P2%=P2%+LEN(G1$)-K1% : RETURN 5100 ! DELETE CHARACTERS 5101 GOSUB 5103:GOTO 4005 5103 L3%=LEN(L$(L%)) 5105 GOSUB 3510: IF V1%L3% THEN D1%=L3% 5135 IF P2%L3% THEN P2%=L3% 5140 C2$=LEFT(L$(L%),P2%): C3+SYSCAT.BAS ** SYSCAT IS SOFTWARE CATEGORY 4 ** DESCRIPTION: SYSCAT IS A SYSTEM CATALOG PROGRAM. IT WILL LIST ALL ACCOUNTS AND ALL THEIR FILES ON THE SYSTEM DISK(S) OR ON SPECIFIED DISKS. SAVING: SYSCAT COULD BE SAVED IN ITS COMPILED FORM IN THE SYSTEM LIBRARY. RUNNING: CALL: RUN $SYSCAT OUTPUT CATALOG TO? LP: CATALOG OF? DK1: THE "OUTPUT CATALOG TO? " QUESTION IS FOR DETERMINING THE DEVICE TO OUTPUT THE INFORMATION TO. JUST RETURN HERE WILL OUTPUT TO THE TERMINAL. THE "CATA,T FIRST PART OF LINE; ELSE IF N=1 PRINT FROM DOT TO END OF EDITOR LINE. P PUSH EVERYTHING BETWEEN THE DOT AND THE END OF THE CURRENT LINE ONTO A NEW LINE FOLLOWING THE CURRENT LINE. THIS IS USEFUL IF YOU THINK YOUR LINE LENGTH MAY BE APPROACHING 128 CHARACTERS OR YOU HAVE INSERTED A IN THE MIDDLE OF AN EDITOR LINE. Q WAIT FOR INPUT FROM KEYBOARD FOR MACRO QUE (A "Q" MUST BE PREFORMED BEFORE AN "M" TO SET UP A MACRO COMMAND; HOWEVER ONCE A "Q" -VT5DPY.BAS VT6DPY.BAS ** VT5DPY AND VT6DPY ARE SOFTWARE CATEGORY 4 ** DESCRIPTION: VT5DPY AND VT6DPY ARE SYSTEM STATUS PROGRAMS ESPECIALLY WRITTEN FOR CRT (SCOPE) TYPE TERMINALS. AS DETERMINED FROM THEIR NAMES VT5DPY IS FOR THE VT05 TERMINAL AND VT6DPY IS FOR THE VT06 TERMINAL. THE OUTPUT OF THESE PROGRAMS INCLUSED ALL THE INFORMATION THAT THE PROGRAM SYSTAT WOULD PRODUCE, BUT THE INFORMATION IS 'PAINTED' ON THE SCOPE SCREEN AND IS 'UPDATED' IN PLACE AT THE SPECIFIED INTERVAL. SAVING: VT.$=RIGHT(L$(L%),D1%+K1%) 5145 L$(L%)=C2$+C3$ : IF P2%>LEN(L$(L%)) THEN P2%=LEN(L$(L%)) ! FIX CHAR POINTER 5170 RETURN 5200 GOSUB 3510 : GOSUB 3520 ! KILL LINES 5210 IF L1%=L2% THEN D1%=M3%-P2% : M2%(M4%)=M2%(M4%)+D1% IF D1%>K0% :V1$=NUM$(D1%): GOSUB 5103 : GOTO 4005 5220 IF V1%=K1% THEN L$(L%)=LEFT(L$(L%),P2%) : GOTO 4005 5230 FOR L0%=L1%+K1% TO L2%-K1% : L$(L0%)="" : NEXT L0% 5240 IF V1%K0% THEN L$(L1%)=LEFT/LOG OF? " QUESTION DETERMINES WHICH DISK(S) TO CATALOG. JUST RETURN WILL CATALOG ALL PUBLIC DISKS; AN EXPLICIT DISK NAME (E.G. DK1:) WILL CATALOG ONLY THAT DISK. THE OUTPUT IS BY ACCOUNT. EACH ACCOUNT HEADER HAS THE ACCOUNT NUMBER, THE DISK QUOTA FOR THAT ACCOUNT, THE DISK ACTUALLY IN USE FOR THAT ACCOUNT, AND THE UFD CLUSTER SIZE FOR THAT ACCOUNT. THE FILES UNDER EACH ACCOUNT INCLUDE ALL THE NORMAL 'CATALOG' INFORMATION AND IN ADDITION THE FILE'S CLUSTER SIZE AS THE LAST ENTRY. EXAMPLE: 0HAS BEEN PREFORMED IT IS NOT ALTERED UNTIL THE NEXT "Q"). NM EXECUTE MACRO COMMAND N TIMES. (MACRO IS STORED IN "Q" REGISTER). NO OPEN FOR INPUT OF N LINES JUST BEFORE PRESENT LINE. IF N<1 THEN END OPEN COMMAND WITH A CTRL/Z. NS SAVE N LINES IN SAVE BUFFER. (DOES NOT DELETE, ONLY COPIES.) NU UNSAVE N LINES. (COPY N LINES FROM SAVED BUFFER INTO FILE. LIKE "O" COMMAND EXCEPT LINES COME FROM SAVE BUFFER.) V VERFIY THIS LINE. (DISPLAY LINE ON TERMINAL WITHOUT MOVING15DPY AND/OR VT6DPY COULD BE SAVED IN THEIR COMPILED FORM IN THE SYSTEM LIBRARY WITH PROTECTION 168. RUNNING: EITHER: RUN $VT5DPY OR: RUN $VT6DPY THE QUESTION "INTERVAL? " IS ASKING FOR THE INTERVAL IN SECONDS BETWEEN 'UPDATING' OF THE SCOPE SCREEN. A RESPONSE OF JUST RETURN WILL YIELD A 15 SECOND DELAY. THE QUESTION "INTERVAL,FILL? " FROM VT6DPY IS ASKING FOR A FILL FACTOR IN ADDITION TO AN INTERVAL. THE CORRECT FILL FACTORS ARE: 0 110 BAUD 0 150 BAUD 0 300 BAUD 0 600 BAUD 2(L$(L1%),P2%) : L$(L2%)=RIGHT(L$(L2%),M3%+K1%) : M2%(M4%)=K0% 5260 GOTO 4005 5300 ! INSERT CHARACTERS 5301 P$=FNG$("I") : GOSUB 20400 : GOTO 4005 5400 ! END COMMAND 5402 G1$=LEFT(N$,INSTR(K1%,N$,":")) 5403 OPEN G1$+ K5$ FOR OUTPUT AS FILE 2% 5405 FOR L%=K1% TO T% : PRINT #2%,L$(L%); : NEXT L% 5440 PRINT #2%,CHR$(26%) 5450 CLOSE 2%,3%,4%,5% : KILL K7$ :KILL K8$ 5460 IF O$=N$ THEN ON ERROR GOTO 9000 : NAME O$ AS N1$ : ON ERROR GOTO 0 5465 IF G1$="LP:" OR G1$="PP:" OR G1$="KB:" THEN 32000 5467 O RUN $SYSCAT OUTPUT CATALOG TO? LP: CATALOG OF? DK0: (CATALOG OF DK0: NOW GOES TO THE LINE PRINTER) ASSUMPTIONS: NONE 4 CHARACTER POINTER.) WHEN A "G" OR "F" COMMAND IS EXECUTED SUCCESSFULLY, '0@' WILL BE PLACED AT THE BEGINNING OF THE SOUGHT STRING AND THE CHARACTER CURSER WILL BE PLACED IMMEDIATELY FOLLOWING IT. THEREFORE YOU MIGHT DO THE FOLLOWING TO KILL A STRING: G"TO WHOM IT MAY CONCERN"0.KI"HELLO BILL:" FOR A COMMAND THAT REQUIRES A TEXT STRING IN A COMMAND STRING BUT THE ENCLOSED STRING IS ZERO LENGTH, THE EDITOR WILL WAIT FOR INPUT FROM KEYBOARD: #G%%0LI&&V WILL WAIT FOR I1 1200 BAUD 3 2400 BAUD EXAMPLE: RUN $VT5DPY INTERVAL? 30 (DISPLAY ON THE VT05 TERMINAL WITH 30 SECOND DELAYS) RUN $VT6DPY INTERVAL,FILL? 30,3 (DISPLAY ON THE VT06 AT 2400 BAUD WITH 30 SECOND DELAYS) ASSUMTIONS: NONE 6N ERROR GOTO 9100 5470 NAME G1$+K5$ AS N$ : GOTO 32000 5500 ! VERIFY THE LINE 5510 PRINT L$(L%); 5520 PRINT : GOTO 4005 5600 ! JUMP CHARACTER POINTER 5610 GOSUB 3510 5620 P2%=P2%+V1% 5630 IF P2%>LEN(L$(L%)) THEN P2%=LEN(L$(L%)) ELSE IF P2%). YOU MUST TELL IT WHAT THE STARTING LINE IS, AND BY WHAT INCREMENT (STEP) THE LINES ARE TO BE NUMBERED. NOTE-- LINE NUMBERS MUST NOT CONTAIN SPACES IMBEDDED IN THEM. TH8NPUT FROM KEYBOARD FOR THE "G" AND FOR THE "I". G>PRINT 100 PRINT I>#1%, 100 PRINT#1%,"THIS IS AN EXAMPLE" # A LINE TERMINATOR (, ) CAN BE INSERTED BY TYPING A BELL CHARACTER ANY WHERE IN THE TEXT WHEN INPUT IS PROMPTED FROM THE KEYBOARD BY A ">" : #I I> BELL WOULD INSERT A AFTER DOT. IF A CHANGE COMMAND IS EXECUTED BUT THE TEXT STRING ARGUMENT IS NULL LENGTH, THEN THE CHARACTERS ARE NOT DELETED. N=0 MEANS FROM B9ODT.BAS ** ODT IS SOFTWARE CATEGORY 4 ** DESCRIPTION: ODT FOR RSTS-11 IS A BASIC-PLUS PROGRAM THAT ALLOWS MOST OF THE FEATURES ON THE PDP-11 ODT. SAVING: ODT COULD BE SAVED IN ITS COMPILED FORM IN THE SYSTEM LIBRARY. RUNNING: CALL: RUN $ODT ODT WILL ASK "FILE? ". THE RESPONSE TO THIS QUESTION DETERMINES WHAT THE ODT WILL BE LOOKING AT AND WHETHER READ/WRITE IS ALLOWED. IN ANSWER TO "FILE? ": RETURN LOOK AT ON-LINE CORE READ ONLY LINE FEED LOOK AT ON-LINE CORE READ/WRITE:THEN L1$(K1%)=RIGHT(L$(L%),P2%+K1%) : GOTO 5760 5730 FOR L0%=L1%+K1% TO L2%-K1% : L1$(L0%-L1%+K1%)=L$(L0%) : NEXT L0% 5740 IF V1%K0% THEN L1$(K1%)=RIGHT(L$(L1%),P2%+K1%): L1$(L2%-L1%+K1%)=LEFT(L$(L2%),M3%) 5760 S%=L2%-L1%+K1% : GOTO 4005 5800 P$=FNG$("C") : IF LEN(G1$)=K0% THEN 4005 ELSE GOSUB 5103 : GOSUB 20400 : GOTO 4005 5900 ! LIST LINES 5903 GOSUB 3510 : GOSUB 3520 5910 IF L1%<>L2% THEN 5915 ELSE P1%AT IS, GOTO 1000 IS OK, BUT NOT GOTO 100 0. SAVING: RESEQ WOULD BE SAVED IN THE SYSTEM LIBRARY IN COMPILED FORM WITH A PROTECTION OF 40. RUNNING: RUN $RESEQ RESPOND TO THE "#" WITH THE FILENAME OF THE FILE TO RESEQUENCE. RESPOND TO THE "*" WITH THE START+STEP VALUES. EXAMPLE: RUN $RESEQ #TEST.BAS (.BAS IS OPTIONAL) *1+10 ASSUMPTIONS: NONE EGINNING OF LINE TO DOT. N=1 MEANS FROM DOT THROUGH END OF EDITOR LINE. WHEN "N" IS NOT PRESENT BEFORE A COMMAND, N=1 BY DEFAULT. A=1A -A=-1A END OF EDITOR DOCUMENT. = ALTMODE LOOK AT [0,1]CRASH.SYS READ ONLY XXXXX RETURN LOOK AT FILE XXXXX READ ONLY XXXXX ALTMODE LOOK AT FILE XXXXX READ ONLY XXXXX LINE FEED LOOK AT FILE XXXXX READ/WRITE COMMANDS ARE: / OPEN A WORD \ OPEN A BYTE R RESET ALL RELOCATION REGS NR RESET RELOCATION REG N M;NR SET RELOCATION REG N TO ADDRESS M F SET RELOCATION CALCULATION FOR PRINTOUT 1F DISABLE RELOCATION CALCULATION FOR PRINTOUT C PRINTS OUT SYSTEM POINTER VALUES LINE FEED OPEN NEXT SEQUENTIAL FORWARD ^ OP>=M3%-P2% : IF P1%K0% THEN PRINT RIGHT(L$(L0%),P2%+K1%); ELSE PRINT RIGHT(L$(L0%),M3%+K1%); 5925 GOTO 5960 IF L0%=L1% :IF L0%=L2% AND V1%K0% THEN PRINT LEFT(L$(L0%),M3%);: GOTO 5970 5950 PRINT L$(L0%); 5960 NEXT L0% 597AEN NEXT SEQUENTIAL BACKWARD RETURN CLOSE WORD OR BYTE @ CLOSE THEN OPEN ABSOLUTE > CLOSE THEN OPEN BRANCH OFFSET _ CLOSE THEN OPEN RELATIVE PC < CLOSE THEN GO BACK TO PREVIOUS SEQUENCE $N REGISTER N $S SAVED PROCESSOR STATUS + ADDITION - SUBTRACTION . CURRENT POSITION (PC) Q LAST QUANITY TYPED BY ODT , FOR ADDRESS RELOCATION N;ML LIST FROM ADDRESS N TO ADDRESS M ON TERMINAL 1;N;ML LIST FROM ADDRESS N TO ADDRESS M ON LP: 2;N;ML LIST FROM ADDRESS N TO ADDRESS M ON DEVICE SPECIFB0 PRINT : GOTO 4005 6000 GOSUB 3510 : IF V1%<=K0% THEN I2%=500% ELSE I2%=V1% ! OPEN 6005 P2%=K0%: ON ERROR GOTO 7500 : FOR I1%=K1% TO I2% 6010 PRINT "O>";:INPUT LINE #K1%,L1$(I1%):NEXT I1% 6015 ON ERROR GOTO 0 : OPEN "KB:" AS FILE K1% 6020 IF T%+I1%>1000% THEN 3500 6030 L$(T1%+I1%)=L$(T1%) FOR T1%=T% TO L% STEP -K1% 6035 L%=L%+I1% : T%=T%+I1% 6040 L$(T1%+I1%-K1%)=L1$(I1%) FOR I1%=I1% TO K1% STEP -K1% 6045 GOTO 4005 6100 ! JUMP LINE POINTER 6105 P2%=M3% 6110 GOSUB 3510: L%=L%+V1% : IF L%>T% THIED (ODT WILL ASK 'DEVICE?') CONTROL/Z EXIT FROM ODT EXAMPLE: RUN $ODT FILE? [0,1]CORE.SYS *0/ 000417 * ASSUMPTIONS: NONE FEN L%=T% ELSE IF L%K0% THEN M%=M%-K1% ELSE M%=K0% 6360 C$=FNT$(M$) : GOTO 4005 6400 I%=K1% 6410 FOR I1%=K1% TO T% 6420 IF LEN(L$(I1%))<2% THEN 6450 6430 L$(I%)=L$(I1%) : I%=I%+K1% 6450 NEXT I1% 6460 T%=I%-K1% : GOTO 4005 6499 ! P=PUSH TO NEXT LINE 6500 C1$=RIGHT(L$(L%),P2%+K1%) : L$(T1%+K1%)=L$(T1%) FORJ T1%=T% TO L%+K1% STEP-K1% : T%=T%+K1%: L$(L%+K1%)=C1$ : L$(L%)=LEFT(L$(L%),P2%): GOTO 4005 6600 ! Q=QUE FOR MACRO 6601 PRINT "INPUT MACRO COMMAND >";: INPUT LINE #K1%,M$ : GOTO 4005 6700 GOSUB 3510:IF V1%10% THEN3500 ELSE M1%(V1%)=L% : M2%(V1%)=P2%:GOTO4005 !M1%=MARK LINE M2%=MARK POINT 6800 GOSUB 3510 : IF V1%10% THEN 3500 6810 M3%=M1%(V1%)-L% : V1$=NUM$(M3%) : M3%=M2%(V1%): M4%=V1% ! RESTORE MARK 6820 GOTO 4010 6900 F%=1% : P$=FNG$("F") : GOTO 5017 7500 IF ERR<>11% THENN ON ERROR GOTO 0 7510 I1%=I1%-K1% : RESUME 6015 8000 IF ERR<>11% THEN ON ERROR GOTO 0 8010 L$(T%)="":L%=K1%:P2%=K0%: RESUME 3060 9000 IF ERR<>16% THEN RESUME 100 9010 KILL N1$ : RESUME 9100 IF ERR<>16% THEN ON ERROR GOTO 0 9150 KILL N$ : RESUME 20000 DEF FNT$(Z$) : E%=K0% 20010 FOR E%=K0% TO 10% 20020 C%=ASCII(RIGHT(Z$,LEN(Z$))): IF E%=K0% THEN IF C%=K0% THEN Z1%=3% ELSE IF C%=13% THEN Z1%=2% ELSE IF C%=27% THEN Z1%=K1% ELSE Z1%=K0% 20030 IF C%=K0% OR C%=10% OR C%=13% OR C%=27% THEN Z$=LEFT(RZ$,LEN(Z$)-K1%) : NEXT E% 20040 FNT$=Z$ : FNEND 20100 PRINT #K1%,P$;">";: INPUT LINE #K1%,G1$ : RETURN 20200 GOSUB 20100 :P1%=INSTR(K1%,G1$,CHR$(7%)+CHR$(7%)) : IF P1%<>K0% THEN 3500 ELSE P1%=INSTR(K1%,G1$,CHR$(7%)) : IF P1%=K0% THEN G1$=FNT$(G1$) ELSE G1$=LEFT(G1$,P1%-K1%)+RIGHT(G1$,P1%+K1%) 20210 RETURN 20300 DEF FNG$(P$) : IF LEN(C$)>K0% THEN 20340 20320 GOSUB 20200 : GOTO 20380 20340 C1$=LEFT(C$,K1%): P1%=INSTR(2%,C$,C1$): IF P1%=2% THEN C$=RIGHT(C$,3%) : GOTO 20320 20360 IF P1%=K0% THEN 3500 ELSE G1$=MID(C$,2%,P1%-2%):C$=RIGHT(C$,P1%+K1%) 20380 FNEND 20400 C2$=LEFT(L$(L%),P2%): C3$=RIGHT(L$(L%),P2%+K1%) 20420 L$(L%)=C2$+G1$+C3$: P2%=P2%+LEN(G1$): IF LEN(L$(L%))>120% THEN PRINT" LINE LENGTH =";LEN(L$(L%)) 20440 IF LEN(L$(L%))>127% THEN 3500 20460 RETURN 32000 END