100 DIM D$(10%),R1%(10%),R2%(10%),T%(10%),T$(10%),E$(10%), P4%(20%),P5%(20%),P5$(20%),Q%(30%),E1%(10%) 140 DIM #1%, N%(100%), P$(100%)=64% 145 DEF FNL$(X$) 146 IF LEN(X$)>30% THEN FNL$=FNL$(LEFT(X$,30%))+FNL$(RIGHT(X$,31%)) : GOTO 150 147 K1%=0% : CHANGE X$ TO Q% : FOR K%=1% TO Q%(0%) 148 IF Q%(K%)<33% THEN K1%=K1%+1% ELSE Q%(K%-K1%)=Q%(K%) 149 NEXT K% : Q%(0%)=Q%(0%)-K1% : CHANGE Q% TO X$ : FNL$=X$ 150 FNEND 151 DEF FNB$(X$) : K%=0% : CHANGE LEFT(X$,30%) TO Q% : GOTO 153 IF Q%(0%)=0% : GOTO 153 IF Q%(K%)>32% FOR K%=1% TO Q%(0%) : K%=K%+1% 153 FNB$=RIGHT(X$,K%) : FNEND 160 OPEN "KB:" AS FILE 8% : S$=SYS(CHR$(6%)+CHR$(9%)) : PRINT #8%, "BATCH V2B-10 ";MID(S$,3%,INSTR(3%,S$,CHR$(0%))-3%);CHR$(10%) : PRINT #8%, "COMMAND STORAGE FILE: "; 180 R%,P1%,P5%,E%=0% 200 K9%=ASCII(CHR$(SWAP%(PEEK(PEEK(PEEK(PEEK(2098%)))+28%)))/2% 220 J8%=ASCII(CHR$(PEEK(2056%)))/2% 240 C1$=CHR$(6%)+CHR$(-4%)+CHR$(K9%) : C2$=CHR$(6%)+CHR$(-5%)+ CHR$(K9%) : C3$=CHR$(13%)+CHR$(10%): C4$=CHR$(13%) 260 READ K8% FOR J%=0% TO K9% : INPUT LINE #8%,F$ : F$=FNL$(F$) : PRINT #8% 440 ON ERROR GOTO 460 : OPEN F$ FOR INPUT AS FILE 1% : N%=N%(0%) : GOSUB 1460 : GOTO 500 460 RESUME 480 480 ON ERROR GOTO 0 : OPEN F$ FOR OUTPUT AS FILE 1% : N%=0% 500 ON ERROR GOTO 0 520 L$=SYS(CHR$(0%)) : PRINT #8%, "==> "; : INPUT LINE #8%, L$ : GOSUB 1220 540 IF L%=0% GOTO 660 560 GOTO 600 IF L%=N%(I%) FOR I%=1% TO N% 580 N%=N%+1% : I%=N% : Y%=1% : N%(N%)=L% 600 P$(I%)=L$ 620 IF LEN(L$)=0% THEN Y%=1% 640 GOTO 520 660 IF LEN$)=0% GOTO 520 680 IF Y% THEN GOSUB 1460 700 IF LEFT(L$,5%)="ERASE" THEN CLOSE 1% : GOTO 480 720 IF LEFT(L$,4%)="LIST" GOTO 820 740 IF LEFT(L$,5%)="RESEQ" GOTO 1040 760 IF LEFT(L$,3%)="RUN" GOTO 1700 780 IF LEFT(L$,4%)="STOP" THEN CLOSE 1%,8% : GOTO 4260 800 PRINT #8%, "COMMAND NOT UNDERSTOOD" : GOTO 520 820 PRINT #8% : D$=FNL$(RIGHT(L$,5%)) 840 IF LEFT(D$,2%)="NH" THEN D$=RIGHT(D$,3%) 860 IF LEN(D$)=0% THEN L1%=1%:L2%=N%:GOTO 960 880 J%=INSTR(1%,D$,",") 900 IF J%=0% THEN J%=LEN(D$)+1% 920 L$=LEFT(D,J%-1%) : D$=RIGHT(D$,J%+1%) : GOSUB 3480 940 IF L1%*L2%<=0% GOTO 520 960 PRINT #8%, N%(I%);":",P$(I%) FOR I%=L1% TO L2% 980 IF LEN(D$) GOTO 880 1000 PRINT #8% : GOTO 520 1020 CLOSE 1% : OPEN F$ FOR OUTPUT AS FILE 1% : N%,N%(0%)=0% : GOTO 520 1040 ON ERROR GOTO 1180 : L$=RIGHT(L$,6%) : I%=INSTR(1%,L$,",") 1060 IF I%=0% THEN L2%=20% : I%=LEN(L$)+1% : GOTO 1100 1080 L2%=VAL(RIGHT(L$,I%+1%)) 1100 L1%=VAL(LEFT(L$,%-1%)) 1120 IF L1%<=0% THEN L1%=100% 1140 N%(I%)=L1%+L2%*(I%-1%) FOR I%=1% TO N% 1160 ON ERROR GOTO 0 : GOTO 520 1180 RESUME 1200 1200 L1%=100% : L2%=20% : GOTO 1140 1220 L$=LEFT(L$,LEN(L$)-1%) 1240 L%=0% : IF LEN(L$)=0% THEN RETURN 1260 IF ASCII(RIGHT(L$,LEN(L$)))<33% GOTO 1220 1280 CHANGE LEFT(L$,30%) TO Q% : FOR K%=1% TO Q%(0%) : J%=Q%(K%) 1300 IF J%<33% AND L%=0% GOTO 1340 1320 IF J%<48% OR J%>57% THEN 1360 ELSE L%=L%*10%+J%-48% 1340 NEXT K% 1350 K%=K%+1% 1360 L$=FNB$(RIGHT(L$,K%)) : RETURN 1460 J%=0% : FOR I%=1% TO N% 1500 IF LEN(P$(I%)) THEN J%=J%+1% ELSE N%(I%)=32767% 1520 NEXT I% 1560 FOR I%=1% TO J% 1580 L1%=I% : FOR K%=I%+1% TO N% 1600 IF N%(L1%)>N%(K%) THEN L1%=K% 1620 NEXT K% 1640 IF L1%=I% GOTO 1680 1660 T%=N%(I%) : N%(I%)=N%(L1%) : N%(L1%)=T% : T$=P$(I%) : P$(I%)=P$(L1%) : P$(L1%)=T$ 1680 NEXT I% : N%,N%(0%)=J% : J%=0% : RETURN 1700 CLOSE 8% : S$=SYS(CHR$(6%)+CHR$(7%)) 1720 IF MID(L,4%,2%)="NH" THEN H%=0% ELSE H%=-1% 1740 E%=1% : GOSUB 3760 : GOSUB 2480 1760 GOSUB 1780 : GOTO 4260 1780 IF B% THEN GOSUB 4060 1800 GOSUB 1880 1820 CLOSE 1% : S$=SYS(C1$+CHR$(3%)) : GOSUB 1880 : S$=SYS(C1$+"HELLO"+C4$) : GOSUB 1880 1840 S$=SYS(C1$+NUM$(J8%)+C4$) 1860 PRINT : PRINT "BATCH: COMPLETE AT "TIME$(0%)" ON "DATE$(0%) : RETURN 1880 IF PEEK(K8%) AND 64% THEN SLEEP 1% : GOTO 1880 1900 IF PEEK(T%) AND PEEK(T0%) THEN SLEEP 3% : GOTO 1880 1920 IF PEEK(T0%) AND 8195% THEN RETURN ELSE SLEEP 3% : GOTO 1880 1940 L$=RIGHT(L$,2%) 1960 S$=LEFT(L$,7%) 1980 IF S$="EXECUTE" GOTO 2400 2000 S$=LEFT(L$,6%) 2020 IF S$="ACCEPT" GOTO 2620 2040 IF S$="DEFINE" GOTO 2680 2060 IF S$="LOGOFF" GOTO 2820 2080 IF S$="LOGOUT" GOTO 2820 2100 IF S$="REPEAT" GOTO 2840 2120 S$=LEFT(L$,5%) 2140 IF S$="LOGIN" GOTO 2960 2160 IF S$="LOGON" GOTO 2960 2180 IF S$="SLEEP" GOTO 2980 2200 S$=LEFT(L$,4%) 2220 IF S$="SEND GOTO 3040 2240 S$=LEFT(L$,2%) 2260 IF S$="DO" GOTO 3080 2280 IF B%=0% THEN S$=SYS(C2$+C3$) : GOSUB 4060 2300 GOSUB 1880 : S=66%-LEN(L$) : IF S<0% THEN S=0% 2320 L$="!!!"+SPACE$(S/2%)+L$+SPACE$(S/2+.6)+"!!!"+C3$ 2340 S$=SYS(C2$+L$) : B%=10% RETURN 360 L$=L+" AT LINE"+NUM$(N%(I%)) : IF E%<2% GOTO 2280 2380 L$=L$+" IN "+F$ : FOR K%=E%-1% TO 1% STEP -1% : GOSUB 2280 : L$= "'EXECUTED' FROM "+E$(K%)+" LINE"+NUM$(E1%(K%)) : NEXT K% : GOTO 2280 2400 L$=FNL$(RIGHT(L$,8%)) : GOTO 2420 2420 IF E%>10% THEN L$="'EXECUTE' RE-ENTRY MORE THAN 10 DEEP" : GOTO 2360 2440 E1%(E%)=I% : E$(E%)=F$ : F$=L$ : E%=E%+1% : CLOSE 1% : ON ERROR GOTO 2540 : OPEN F$ FOR INPUT AS FILE 1% : ON ERROR GOTO 0 : N%=N%(0%) 2460 L$="'*EXECUTING' - "+F$ : GOSUB 2280 2480 FORI%=1 WHILE I%<=N% : L$=P$(I%) : GOSUB 3840 2500 NEXT I% : IF E%>1% THEN GOSUB 2580 2520 RETURN 2540 RESUME 2560 2560 ON ERROR GOTO 0 : GOSUB 2580 : L$="ERROR"+NUM$(ERR)+"ON FILE - "+L$ : GOTO 2360 2580 E%=E%-1% : I%=E1%(E%) : F$=E$(E%) : CLOSE 1% : OPEN F$ FOR INPUT AS FILE 1% : N%=N%(0%) 2600 L$="RETURNING TO - "+F$ : GOTO 2280 2620 I%=I%+1% 2640 IF N%20% THEN L$="TOO MANY PROCEDURES DEFINED" : GOTO 2360 2720 P5$(P5%)=L$ : P4%(P5%)=I%+1% 2740 I%=I%+1% 2760 IF I%>N% THEN L$="NO END ON PROCEDURE DEFINITION" : GOTO 2360 2780 IF LEFT(P$(I%),4%) <> "*END" GOTO 2740 2800 P5%(P5%)=I%-1% : RETURN 2820 GOSUB 1780 : H%=0% : L$=C4$+"BYE"+C4$+"YES"+ C4$ : GOSUB 3960 : S$=SYS(CHR$(5%)) : GOTO 4260 2840 L$=RIGHT(L$,7%) : GOSUB 1240 : IF L%=0% THEN RETURN 2860 R%=R%+1% 2880 IF R%>10% THEN R%=R%-1% : L$="'REPEAT' RE-ENTRY MORE THAN 10 DEEP": GOTO 2360 2900 T%(R%)=L% : T$(R%)=L$ 2920 L$=T$(R%) : GOSUB 3840 : T%(R%)=T%(R%)1% 2940 IF T%(R%) > 0% GOTO 2920 ELSE R%=R%-1% : RETURN 2960 SLEEP 10% : GOSUB 3760 : RETURN 2980 ON ERROR GOTO 3000 : L$=RIGHT(L$,6%) : SLEEP VAL(L$) : ON ERROR GOTO 0 : RETURN 3000 L$="ERROR IN SLEEP COMMAND" : RESUME 3020 3020 ON ERROR GOT 0 : GOTO 2360 3040 S$=SYS(CHR$(6%)+CHR$(-5%)+CHR$(0%)+"==> FROM BATCH: "+ RIGHT(L$,5%)+C3$) 3060 L$='"'+RIGHT(L$,5%)+'"'+" SENT TO CONSOLE" : GOTO 2280 3080 P1%=P1%+1% 3100 IF P1%>10% THEN P1%=P1%-1% : L$="'DO' RE-ENTRY MORE THAN 10 DEEP" : GOTO 2360 3120 D$(P1%)=FNL$(RIGHT(L$,3%)) 3140 L$=D$(P1%) 3160 K%=INSTR(1%,L$,",") 3180IF K%=0% THEN K%=LEN(L$)+1% 3200 L$=LEFT(L$,K%-1%) 3220 D$(P1%)=RIGHT(D$(P1%),K%+1%) 3240 GOSUB 3480 3260 IF L1% GOTO 3340 3280 GOTO 3320 IF L$=P5$(J%) FOR J%=1% TO P5% 3300 L$=L$+"- PROCEDURE NOT FOUND" : GOTO 2360 3320 R1%(P1%)=P4%(J%) : R2%(P1%)=P5%(J%) : GOTO 3360 3340 R1%(P1%)=L1% : R2%(P1%)=L2% 3360 IF R1%(P1%)>R2%(P1%) GOO 3460 3380 L$=P$(R1%(P1%)) 3400 GOSUB 3840 3420 R1%(P1%)=R1%(P1%)+1% 3440 GOTO 3360 3460 IF LEN(D$(P1%)) GOTO 3140 ELSE P1%=P1%-1% : RETURN 3480 K%=INSTR(1%,L$,"-") : ON ERROR GOTO 3700 3520 IF K%=0% THEN T1%,T2%=VAL(L$) : GOTO 3560 3540 T1%=VAL(LEFT(L$,K%-1%)) : T2%=VAL(RIGHT(L$,K%+1%)) 3560 ON ERROR GOTO 0 : T%=T1% : GOSUB 3580 : L1%=K1% : T%=T2% : GOSUB 3580 : L2%=K2% : RETURN 3580 K1%=1% : K2%=N% 3600 K3%=(K1%+K2%)/2% : IF N%(K3%)=T% THEN K1%,K2%=K3% : RETURN 3620 IF T%K2% THEN RETURN ELSE 3600 3700 RESUME 370 3720 ON ERROR GOTO 0 3740 L1%,L2%=0% : RETURN 3760 S$=SYS(C1$+CHR$(3%)+"HELLO"+C4$) : 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%*K9%+2% 3780 T0%=ASCII(CHR$(PEEK(T%))) : IF T0%=0% OR T0%=J%*2% THEN 3780 ELSE T%=Q%(13%)+T0% : T0%=Q%(15%)+T0% : GOSUB 1880 3800 CHANGE SYS(CHR$(6%)+CHR$(14%)) TO Q% : S$=SYS(C1$+NUM$(Q%(8%))+"/"+ NUM$(Q%(7%))+C4$) : GOSUB 1880 3820 S$=SYS(C1$+RAD$(Q%(9%)+SWAP%(Q%(10%)))+RAD$(Q%(11%)+SWAP%(Q%(12%)))+ C4$) : GOSUB 1880 : S$=SYS(C1$+ C4$) : GOSUB 1880 : RETURN 3840 IF ASCII(L$)=42% GOTO 1940 3860 IF B% THEN B%=0% : GOSUB 4060 3880 J%=INSTR(1%,L$,"^") 3900 IF J% THEN L$=LEFT(L$,J%-1%)+CHR$(ASCII(MID(L$,J%+1%,1%))-64%)+ RIGHT(L$,J%+2%) : GOTO 3880 3920 IF L$="" THEN L$=CHR$(0%) 3940 GOSUB 1880 3960 S$=SYS(C1$+L$) 3980 IF LEN(L$)>50% THEN GOSUB 1880 4000 IF H% THEN S$=SYS(C2$+HR$(9%)+TIME$(0%)+" "+DATE$(0%)) 4020 S$=SYS(C1$+C4$) : RETURN 4060 GOSUB 1880 : S$=SYS(C2$+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"+ "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"+C3$) 4100 RETURN 4120 !STATUS REGISTERS FOR KEYBOARD PRINTERS 4140 !DECWRITER 4160 DATA -140 4180 !DL11'S & KL11'S 4200 DATA -700,-692,-684,-676,-668 4220 !DC11'S 4240 DATA -2044,-2036,-2028 4260 END