730 POKE 216,0: PRINT CHR$(7)"THAT FILE IS NOT ON THIS DISK.": PRINT "PRESS ANY KEY TO CONTINUE.": GET K$: PRINT : GOTO 700
740 INPUT IN$: IF MID$ (IN$,10,3) = "EOF" THEN PRINT D$"CLOSE": GOTO 780
750 NI = NI +1
760 IF LEFT$(IN$,8) < >" " THEN NL = NL +1
770 GOTO 740
780 DIM OP(56,12),OP$(56)
790 DIM IN$(NI),MD(NI),LB$(NI),TP$(NI),LN(NI),LO(NI +1)
800 DIM LF$(NL),AF(NL),LR$(NL),DR(NL)
810 RESTORE
820 VTAB 12: CALL -958: PRINT "FIRST PASS:"
830 PRINT D$"OPEN"PR$: PRINT D$"READ "PR$
840 INPUT LA$: IF MID$ (LA$,10,3) < >"ORG" OR LEN(LA$) <14 THEN PRINT : PRINT D$"CLOSE "PR$: PRINT CHR$(7): PRINT "SOURCE CODE MUST BEGIN WITH 'ORG'": GOTO 2270
850 N = 1:HX$ = MID$ (LA$,14): IF LEFT$(HX$,1) = "$" THEN GOSUB 2580:LA = DT: GOTO 870
2270 VTAB 22: CALL -958: INPUT "DO YOU WISH TO EDIT THE FILE? (Y/N)";K$: IF K$ = "Y" THEN PRINT D$"RUN SOURCE.EDITOR"
2280 IF K$ = "N" THEN HOME : END
2290 PRINT CHR$(7): GOTO 2270
2300 REM CHECK DRS FOR CONSTANTS
2310 XL = LEN( STR$(LN(N))) +14
2320 IF XL > = LEN(IN$) THEN RETURN
2330 IF MID$ (IN$,XL,1) = "!" THEN XA = LO(N) +SA: GOSUB 2500
2340 RETURN
2350 DIM PN(15)
2360 PN(1) = 66:PN(2) = 89:PN(3) = 32
2370 PN(4) = 74:PN(5) = 79:PN(6) = 72
2380 PN(7) = 78:PN(8) = 32:PN(9) = 87
2390 PN(10) = 72:PN(11) = 73:PN(12) = 84
2400 PN(13) = 78:PN(14) = 69:PN(15) = 89
2410 FOR VN = 1 TO 15
2420 VTAB 5
2430 FOR VO = VN TO 1 STEP -1
2440 PRINT CHR$(PN(16 -VO));
2450 NEXT VO
2460 PRINT
2470 NEXT VN
2480 PRINT
2490 RETURN
2500 REM INSTALL CONSTANTS
2510 XL = XL +1
2520 IF XL > LEN(IN$) THEN RETURN
2530 IF MID$ (IN$,XL,1) = "!" THEN RETURN
2540 POKE XA, ASC( MID$ (IN$,XL,1))
2550 XA = XA +1
2560 GOTO 2500
2570 REM HEX CONVERSION
2580 HF = 0:DT = 0
2590 FOR K = 1 TO LEN(HX$)
2600 IF MID$ (HX$,K,1) = "$" THEN HV$ = MID$ (HX$,K): IF LEN(HV$) >1 THEN HV$ = MID$ (HV$,2): GOTO 2620
2610 NEXT K: RETURN
2620 HV$ = HV$ +" ": FOR K2 = 1 TO 5: IF MID$ (HV$,K2,1) < >" " AND MID$ (HV$,K2,1) < >"." AND MID$ (HV$,K2,1) < >")" THEN NEXT : GOTO 2670: REM OPERAND TOO LONG
2622 IF K2 = 1 THEN 2670: REM NULL HEX STRING
2625 HV$ = RIGHT$("000" +HV$, LEN(HV$) +(5 -K2))
2630 FOR K1 = 1 TO 4
2640 HD = ASC( MID$ (HV$,K1,1))
2650 HD = HD -48: IF HD >9 THEN HD = HD -7: IF HD > = 10 AND HD < = 15 THEN 2680
2660 IF HD > = 0 AND HD < = 9 THEN 2680
2670 PRINT D$"CLOSE": PRINT "OPERAND ERROR IN LINE:";N: GOTO 2260
2680 DT = DT +HD *(16 ^(4 -K1))
2690 NEXT
2700 IF K >1 THEN HX$ = LEFT$(HX$,K -1) + STR$(DT) + MID$ (HX$,K +K2): GOTO 2720
2710 HX$ = STR$(DT) + MID$ (HX$,K2 +1)
2720 RETURN
2799 :
2800 REM CHECK FOR ASC CONSTANTS
2801 :
2810 Q$ = "'":LB$(N) = MID$ (IN$,15,15): IF MID$ (IN$,14,1) < >Q$ THEN 2900
2820 FOR XL = 15 TO 1 STEP -1: IF MID$ (LB$(N),XL,1) < >" " THEN 2840