DK2:HELPER.BAS[30,2] 03-Sep-75 06:54 PM 1 A$="HELPER 6-AUG-75" ! DAVID & ELIEZER NADDOR & RAINER VON SALESKI 5 A%,C5%,C6%,C9%,K0%,Z%=0%: K1%=1%: K2%=2%: R$,F1$,K0$="": ON ERROR GO TO 7000: T6$=CHR$(6%): T7$=T6$+CHR$(-7%): D$=SYS(T7$): RESTORE: READ H$,Z1$,Z2$,Z3$,Z4$: Z0$=CHR$(26%) 10 DATA "[30,2]HELPER" 15 DATA "[30,2]CAT","[30,2]HELPER.TXT","[30,2]MSG","[40,3]ALPHA.BET" 20 C$=SYS(CHR$(7%)): IF LEFT(C$,4%)="HLPR" THEN C5%=(MID(C$,5%,K1%)="*"): C6%=(MID(C$,6%,K1%)="*"): S%=INSTR(K1%,C$,"\"): R$=RIGHT(C$,S%+K1%): F1$=MID(C$,7%,S%-7%): GO TO 25 22 C$=CVT$$(C$,7%): IF LEFT(C$,6%)<>"HELPER" OR LEN(C$)<7% THEN PRINT A$ ELSE PRINT: C$=RIGHT(C$,7%): C$="PRO"+C$ IF LEFT(C$,K1%)="/": C9%=999% 25 W$= "CHAFINSTOPRORENRUNLISLINEXACATCHEDELHELKILPAPNAMOFFAUTPUNMESPRIRETOUT"! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 30 W9%=LEN(W$): W3%=W9%/3%: MAT READ K$ ! K%= 1 2 3 4 5 6 7 8 9 10 35 DATA !,REM,DATA,'"',"'",THEN,ELSE,GO,ERL,SUME 40 N0$=STRING$(80%,K0%): T1$=CHR$(10%): T2$=T1$+CHR$(13%)+CHR$(K0%): T9$=CHR$(9%): T0$=" "+T9$+T2$: T3$=CHR$(13%)+T1$: T4$="<>="+T0$: T5$="0123456789 "+T9$: T8$=CHR$(8%): D0$=" -- " 50 T$="HLPR"+MID(NUM$(100%+ASCII(SYS(T6$+CHR$(-10%)))/K2%),3%,K2%): F3$=T$+".BAS" 55 OPEN "KB:" AS FILE 5%: FIELD #5%, 128% AS B$: GO TO 200 100 DIM L%(350),K$(10): DIM #4, A$(63)=8 105 DEF FNA%(C$): C$=LEFT(C$,3%): I%=K1%: I%=I%+3% UNTIL MID(W$,I%,3%)=C$ OR I%>W9%: FNA%=(I%+K2%)/3%: FN END 110 DEF FNB$(F$): F$=CVT$$(F$,66%): Y%=LEN(F$): GO TO 135 IF INSTR(K1%,F$,".") 115 GO TO 135 IF Y%K1%: Y%=INSTR(K1%,LEFT(F$,Y%),"(")-K1% IF MID(F$,Y%,K1%)=")": IF MID(F$,Y%,K1%)=">" THEN Y%=INSTR(K1%,LEFT(F$,Y%),"<")-K1%: GO TO 115 130 F$=LEFT(F$,Y%)+".BAS"+RIGHT(F$,Y%+K1%) UNLESS Y%=97% AND C%<=122%: L1$=L1$+LEFT(A$(C%-32%),7%) IF C%>=32% AND C%<=95%: NEXT I%: CLOSE 4%: FNL$=L1$: FN END 160 DEF FNO%(F$,F%): OPEN F$ FOR INPUT AS FILE F%: FN END 170 DEF FNP$(F$): F$=FNB$(F$): GO TO 180 IF INSTR(K1%,F$,"<") 175 F$=F$+"<"+CVT$$(NUM$(ASCII(MID( SYS(T6$+CHR$(17%)+CVT%$(K0%)+RIGHT(SYS(T6$+CHR$(-10%)+F$),5%)) ,15%,K1%))),K2%)+">" 180 FNP$=F$: FN END 200 F2$=LEFT(F1$,INSTR(K1%,F1$,":"))+T$+".TMP" 250 IF C5% THEN C8$="HLPR*" ELSE C8$="HLPR-" 255 IF C6% THEN C8$=C8$+"*" ELSE C8$=C8$+"-" 260 C8$=C8$+F1$+"\"+R$: GO TO 300 270 PRINT "COMMAND TOO LONG" 280 PRINT "BAD COMMAND": C9%=C9%+K1%: GO TO 300 290 GOSUB 8000 300 GO TO 360 IF C9%=999%: PRINT IF POS(K0%): PRINT: PRINT "? ";: A%=3%: Z%=K0%: C9%=C9%+K1%: INPUT LINE #5%, C$ 310 IF RIGHT(C$,LEN(C$)-K1%)<>T3$ THEN INPUT LINE #5,L1$: C$=C$+L1$: GO TO 310 320 PRINT: C$=LEFT(C$,LEN(C$)-K2%): IF C$=K0$ THEN PRINT 'TYPE "HELP" OR "STOP"': GO TO 300 330 IF R$=K0$ THEN 350 ELSE I%=-K1% 340 I%=INSTR(I%+K2%,C$,R$): IF I% THEN C$=LEFT(C$,I%-K1%)+T3$+RIGHT(C$,I%+LEN(R$)): GO TO 340 350 IF LEFT(C$,K1%)>="0" AND LEFT(C$,K1%)<="9" THEN A%=8%: S1$=C$: C9%=K0%: GO TO 1805 360 A%=FNA%(C$): GO TO 280 IF A%>W3%: C9%=K0%: ON A% GO TO 400, 400,9999,1300, 400,1600, 500,1800,1900,2000, 500, 500,2300,2400,2500,2600,2700,2700,2900,3000, 3100,3200,3300 400 I%=INSTR(K1%,C$,"\"):J%=INSTR(K1%,C$,"/") 410 IF I%+J%=K0% THEN IF A%=5% THEN 500 ELSE 280 420 IF (J%=K0% OR J%>I%) AND I%>K0% THEN A$="\"ELSE A$="/":I%=J% 430 J%=INSTR(I%+K1%,C$,A$) 440 IF A%=K1% AND J%=K0% THEN 280 450 IF A%=K2% OR A%=5% THEN S1$=RIGHT(C$,I%+K1%): GO TO 480 460 S1$=MID(C$,I%+K1%,J%-I%-K1%) 470 S2$=RIGHT(C$,J%+K1%) 480 C$=LEFT(C$,I%-K1%) 490 IF A%=K2% THEN S2%=K1% ELSE S2%=LEN(S2$) 500 G%=K1%: IF INSTR(K1%,C$,"LO") THEN P%=K2% ELSE IF INSTR(K1%,C$,"LIS") THEN P%=K1% ELSE P%=K0% 510 X0%=C5% OR INSTR(K1%,C$,"OUT") ! PROGRAM LINES OUT OF ORDER? 520 L$=C$: Y%=LEN(L$)+K1%: GOSUB 8299: IF R%N2% THEN IF X0% THEN 900 ELSE IF A%=11% THEN 2100 ELSE X%=-K1%: GO TO 900 800 IF A%=7% OR A%=19% THEN GOSUB 8800: GO TO 900 810 IF A%=11% THEN GOSUB 8900: PRINT #K2%,L$;: GOSUB 8800: GO TO 700 820 U%=K1%-S2%: G%=K0% 830 U%=INSTR(U%+S2%,L$,S1$): IF U% THEN G%=G%+K1%: L$=LEFT(L$,U%-K1%)+S2$+RIGHT(L$,U%+LEN(S1$)) IF A%=K1%: GO TO 830 840 C%=C%+G%: GOSUB 8800 900 PRINT #K2%,L$; IF F%: GO TO 700 IF F% OR X%>=K0% OR A%=11%: CLOSE K1%: GO TO 2950 IF A%=19%: GO TO 300 UNLESS A%<=K2% 950 PRINT: PRINT C%'"'S1$'" FOUND': ON A% GO TO 290,300 1300 I%=INSTR(K1%,C$,"/"): IF I% THEN C$=RIGHT(C$,I%+K1%) ELSE C9%=C9%+K1%: &: &"PROGRAM";: INPUT LINE C$: C$=LEFT(C$,LEN(C$)-K2%): & 1310 IF C$=K0$ THEN 300 1320 K%=INSTR(K1%,C$,"/K"): IF K% THEN C$=LEFT(C$,K%-K1%) 1330 J%=INSTR(K1%,C$," TO "): IF J%=K0% THEN F1$=FNP$(C$): GOSUB 8100: CLOSE K1%: GO TO 1390 1340 S1$=FNB$(LEFT(C$,J%-K1%)): S2$=FNB$(RIGHT(C$,J%+4%)) 1350 IF K%=K0% THEN OPEN S2$ FOR INPUT AS FILE K2%: CLOSE K2%: PRINT S2$" EXISTS. KILL IT";: INPUT C$: GO TO 300 IF LEFT(C$,K1%)<>"Y" 1360 D%=FNO%(S1$,K1%): OPEN S2$ FOR OUTPUT AS FILE K2% 1370 INPUT LINE #K1%,L$: & #K2%,L$;: GO TO 1370 1380 GO TO 9999 IF ERL<>1370: CLOSE K2%: F1$=S2$ 1390 C5%=K0%: PRINT F1$;" READY": GO TO 200 1600 C$=CVT$$(C$,6%): IF C$="RUNNH" THEN D%=FNC%(K0$,F1$) ELSE IF C$="RUN" THEN GOSUB 8700: D%=FNC%(K0$,F1$) 1610 S%=INSTR(K1%,C$,"/"): S%=3% UNLESS S%: D%=FNC%(K0$,RIGHT(C$,S%+K1%)) 1800 S1$=RIGHT(C$,INSTR(4%,C$,"/")+K1%) 1805 L$=S1$: Y%=LEN(L$)+K1%: GOSUB 8399: N1%,N2%=N%: X%,D0%=K1%:GOTO600 1880 IF D0% THEN PRINT #K2%,S1$: PRINT S1$ 1885 GOSUB 8000 1890 IF C6% THEN L$=S1$+T3$: GOSUB 8900: GOSUB 8250: &#K2%,L$;: GOTO2100 1895 GO TO 300 1900 S%=INSTR(K1%,C$,"/"): IF S% THEN C%=FNA%(RIGHT(C$,S%+K1%)) ELSE C%=-K1% 1910 GO TO 280 IF C%>W3%: D%=FNO%(Z2$,K1%): FOR J%=K0% TO W3%: GOSUB 8500: N%=VAL(LEFT(L$,K2%)): PRINT RIGHT(L$,4%); IF N%=C% OR (C%=-K1% AND N%>K0%): NEXT J%: CLOSE K1%: GO TO 300 2000 C$="CAT"+RIGHT(C$,8%) IF LEFT(C$,7%)="CATALOG": C$=C$+Z0$+H$+Z0$+C8$: GO TO 270 IF LEN(C$)>127%: D%=FNC%(C$,Z1$) 2100 PRINT #K2%, 'KILL"'F3$'"'T3$'CHAIN"'H$'"': D%=FNC%(C8$,F3$) 2300 C%=K0%: GO TO 1910 ! HELP 2400 S1%=INSTR(K1%,C$,"/"): GO TO 280 UNLESS S1%: F$=FNB$(RIGHT(C$,S1%+K1%)): KILL F$: GO TO 300 2500 L$=N0$+FNL$(RIGHT(C$,INSTR(K1%,C$,"/")+K1%)+" "): GOSUB 9000: K%=K1%+LEN(L$)/10%: K%=22% IF K%>22%: SLEEP K%: PRINT CHR$(12%): GO TO 300 2600 S1%=INSTR(K1%,C$,"/"): GO TO 280 UNLESS S1%: S2%=INSTR(S1%+K1%,C$,"/"): IF S2%=K0% THEN S1$,S2$=FNB$(RIGHT(C$,S1%+K1%)) ELSE S1$=FNB$(MID(C$,S1%+K1%,S2%-S1%-K1%)): S2$=FNB$(RIGHT(C$,S2%+K1%)) 2610 NAME S1$ AS S2$: GO TO 300 2700 C6% = (A%=18%): GO TO 250 ! OFF,AUTO 2900 S%=INSTR(K1%,C$,"/"): L$=K0$ ! PUNCH 2910 I%=INSTR(4%,C$,"NL"): IF (I%=K0%) OR (S%>K0% AND I%>S%) THEN L$=L$+F1$+" "+DATE$(K0%)+" "+TIME$(K0%)+" " 2920 IF S% THEN L$=L$+RIGHT(C$,S%+K1%)+" ": C$=LEFT(C$,S%-K1%) 2930 PRINT N0$;: IF L$<>K0$ THEN L$=FNL$(L$): GOSUB 9000: & CHR$(12%) 2940 C$="LIST"+C$: GO TO 500 2950 PRINT CHR$(154%);CHR$(12%);T3$;N0$;: GO TO 300 3000 I%=INSTR(K1%,C$,"/"): IF I%>K0% AND I%7% THEN L$=RIGHT(C$,I%+K1%) ELSE OPEN "KB:" AS FILE K1%: PRINT "ENTER YOUR MESSAGE, CONTINUE WITH LF, END WITH CR": GOSUB 8500: PRINT 3010 GOSUB 8250: PRINT #K2%, L$;Z0$;: D%=FNC%("MESG"+F3$+Z0$+H$+Z0$+C8$,Z3$) 3100 GOSUB 8250: PRINT #K2%, C$: GO TO 2100 ! PRINT 3200 S%=INSTR(K1%,C$,"/"): IF S% THEN R$=RIGHT(C$,S%+K1%) ELSE R$=K0$ 3210 GO TO 250 3300 C5%=-K1%: GO TO 250 ! OUT 5000 B%=100%: S%=10%: F%=K0%: GO TO 5030 UNLESS I%: L$=S1$: R%=K1%: Y%=LEN(L$)+K1%: GOSUB 8400: B%=N%: GO TO 5030 IF T%>=Y% 5010 IF MID(L$,T%,3%)="STE" THEN R%=T%: GOSUB 8300: S%=VAL(RIGHT(L$,R%)): GO TO 5030 5020 IF MID(L$,T%,3%)<>"PLU" THEN 280 ELSE F%=K1%: S%=K0% 5030 GO TO 280 IF B%N2%: GOSUB 8100: GOSUB 8180: N0%,Q%,M1%,L%(K0%)=K0%: N9,M2=32768 5100 GOSUB 8500: GOSUB 8399 5110 IF N%>=N1% AND N%<=N2% THEN Q%=Q%+K1%: L%(Q%)=N%: GO TO 5100 5120 N0%=N% IF N%N0%: N9 =N% IF N%>N2% AND N%M1%: M2 =N% IF N%>=B% AND N%N% THEN L%(J%+K1%)=L%(J%): GO TO 5220 5230 L%(J%+K1%)=N%: NEXT I%: T=0.0+B%+S%*(Q%-K1%)+F%*(L%(Q%)-N1%) 5240 IF T>32767 THEN PRINT "NEW LINE NUMBER"T"TOO LARGE": GO TO 280 5250 GO TO 5300 IF B%>N0% AND T=M2 THEN PRINT "INTERLEAVING NOT PERMITTED": GO TO 300 5260 &"OLD LINES"L%(K1%)"TO"L%(Q%)"WILL BE INSERTED BETWEEN"M1%"AND"M2: C5%=-K1%: C8$=LEFT(C8$,4%)+"*"+RIGHT(C8$,6%) 5300 GOSUB 8100: GOSUB 8200: N0%=-K1%: C$=K0$ 5400 GOSUB 8500: R%=K1%: G%,K%=K0% 5450 R%=R%+K1% WHILE INSTR(K1%,T0$,MID(L$,R%,K1%)) AND R%N2% THEN 5600 5510 M1%=K0%: M2%=Q%: GO TO 5530 5520 M%=(M1%+M2%)/K2%: IF L%(M%)K1% THEN 5520 5540 IF L%(M2%)<>N% THEN C$=C$+T3$+RIGHT(NUM$(N%),K2%)+"IN LINE"+NUM$(N9%): GO TO 5600 5550 N%=B%+S%*(M2%-K1%)+F%*(N%-N1%): I$=NUM$(N%): N9%=N% UNLESS K% 5560 J%=T%: J%=J%-K1% WHILE ASCII(MID(L$,J%-K1%,K1%))<33% 5570 GOSUB 8300: G%=K1% ! I THINK THE GOSUB 8300 CAN BE REMOVED. 5580 L$=LEFT(L$,R%-K1%) + MID(I$,K2%,LEN(I$)-K2%) + RIGHT(L$,J%) 5590 Y%=LEN(L$)-K1%: T%=R%+LEN(I$)-K2%+T%-J% 5600 R%=T%: IF K%=8% THEN GOSUB 8350: IF MID(L$,R%,K1%)="," THEN R%=R%+K1%: GO TO 5450 5700 R0%=Y%: K%=K0% 5710 FOR J%=K1% TO 10% 5720 R1%=INSTR(R%,L$,K$(J%)) 5730 IF R1%>K0% AND R1%K0% THEN R%=R2%+K1%:GO TO 5700 5760 IF K%=6% OR K%=7% OR K%=10% THEN R%=R0%+4%: GO TO 5450 5770 IF K%=8% THEN R%=R0%+K2%: GOSUB 8350: GO TO 5500 5780 IF K%=9% THEN R%=R0%+3%: R%=R%+K1% WHILE INSTR(K1%,T4$,MID(L$,R%,K1%)) AND R%K0$ THEN PRINT ", EXCEPT:";C$ ELSE PRINT 5920 GO TO 290 7000 D$=SYS(T7$): RESUME 7005 7005 CLOSE K1% 7010 IF ERR=28% THEN CLOSE K2%,4%: GO TO 8001 IF F9%: GO TO 1 UNLESS A%: GO TO 9999 IF C9%>K1%: GO TO 300 7015 IF ERR=27% OR (ERR=9% AND (ERL=300 OR ERL=310)) THEN SLEEP 5%: OPEN "KB:" AS FILE 5%: FIELD #5%, 128% AS B$: GO TO 300 7020 IF ERL=8001 AND ERR=5 THEN F9%=K2%: GO TO 8002 7025 IF ERL=8002 AND (ERR=5 OR ERR=16) THEN 8003 7030 IF ERL=8001 OR ERL=8002 THEN A%=3%: GO TO 7100 7035 IF ERR=5% AND ERL=1350 THEN 1360 7040 IF ERR<>11% THEN GO TO 7100 7045 IF ERL=8505 AND L$<>K0$ THEN Z%=K1%: L$=L$+T3$: Y%=LEN(L$)-K1%: RETURN 7050 ON A% GO TO 950, 950,9999,1380,5900,7100, 300,1880, 300,7100, 2100, 290, 300,7100,7100,7100,7100,7100,2950,7100, 7100,7100,7100 7100 C$=SYS(T6$+T9$+CHR$(ERR)): PRINT MID(C$,3%,INSTR(3%,C$,CHR$(K0%))-3%); 7110 IF ERL=8100 THEN PRINT D0$;F1$: F1$=K0$: GO TO 250 7115 IF ERL=175 THEN PRINT D0$;F$: F1$=K0$: GO TO 250 7120 &D0$;F2$ IF ERL=8200: &D0$;F3$ IF ERL=8250: &D0$;F$ IF ERL=2400 OR ERL=160: &D0$;S2$ IF ERL=1350 OR ERL=1360: &D0$;L$ IF ERL=8420: &D0$'NAME "'S1$'" AS "'S2$'"' IF ERL=2610: &D0$'CHAIN "'F$'"' IF ERL=150: & IF POS(K0%) 7200 GO TO 9999 IF A%=3%: PRINT "GIVE COMMAND PRO" IF ERR=9%: GO TO 300 8000 CLOSE K1%,K2%: F9%=K1% 8001 IF F9%=K1% THEN KILL F1$: F9%=K2% 8002 IF F9%=K2% THEN NAME F2$ AS F1$: F9%=K0% 8003 F9%=K0%: RETURN 8100 OPEN F1$ FOR INPUT AS FILE K1% UNLESS F1$=K0$: RETURN 8180 IF (STATUS AND 1024%)=K0% THEN RETURN ELSE PRINT F1$" IS WRITE-PROTECTED": GO TO 280 8200 OPEN F2$ FOR OUTPUT AS FILE K2%: RETURN 8250 OPEN F3$ FOR OUTPUT AS FILE K2%: RETURN 8299 R%=K1% 8300 R%=R%+K1% UNTIL MID(L$,R%,K1%)>="0" AND MID(L$,R%,K1%)<="9" OR R%>=Y%: RETURN 8350 R%=R%+K1% UNTIL INSTR(K1%,"0123456789,EIF:\",MID(L$,R%,K1%)) OR R%>=Y%:RETURN 8399 GOSUB 8299 8400 FOR T%=R% TO Y%: A$=MID(L$,T%,K1%): GO TO 8420 UNLESS INSTR(K1%,T5$,A$): NEXT T% 8420 N%=VAL(MID(L$,R%,T%-R%)):RETURN 8500 L$=K0$: IF Z% THEN Z%=K0%: GO TO 7050 8505 INPUT LINE #K1%,L1$: L$=L$+L1$: GO TO 8505 IF RIGHT(L1$,LEN(L1$)-K2%)=T2$: Y%=LEN(L$)-K1%: RETURN 8700 &F1$" "DATE$(K0%)" "TIME$(K0%): &: &N0$; IF A%=19%: RETURN 8800 IF P%>K0% AND G%>K0% THEN IF P%=K1% THEN & L$; ELSE & IF POS(K0%)>64%: & N%; 8805 RETURN 8900 I%=K0% 8905 I%=INSTR(I%+K1%,L$,"END"): RETURN UNLESS I%: C$=MID(L$,I%-K2%,K2%): IF C$="FN" OR C$="N " THEN 8905 ELSE L$=LEFT(L$,I%-K1%)+"!"+T3$: RETURN 9000 FOR I%=K1% TO LEN(L$) STEP 128%: J%=LEN(L$)-I%+K1%: J%=128% IF J%>128%: LSET B$=MID(L$,I%,J%): PUT #5%, RECORD K1%, COUNT J%: NEXT I%: RETURN 9999 CLOSE K1%,K2%,4%,5%: D$=SYS(T8$): END U.!;