10 REM PROGRAM LISTER 20 REM BY DANA NOONAN 30 REM COPYRIGHT 1982 40 REM SET-UP PROGRAM 50 DIM A$(500),F$(15),B$(20),R$(4),L$(12),Y$(1),D$(20),S$(30) 60 B$=" ":R$="REM " 70 OPEN #2,4,0,"K:":GOSUB 650 80 CLOSE #2:PK=PEEK(559):POKE 559,0 90 TRAP 720:OPEN #1,4,0,F$:OPEN #4,8,0,"P:":INPUT #1;A$ 100 ? #4;CHR$(T);B$;F$;B$(7);"PAGE ";PG;B$(7);D$:? #4:? #4 110 ? #4;B$;"| | = Inverse";B$(7);"[ ] = Control";B$(7);"< > = Control Inverse":? #4:L=5:PG=PG+1:GOTO 140 120 REM GET DATA 130 TRAP 720:INPUT #1,A$ 140 C=LEN(A$):RF=0:QF=0:S=0:LL=65*(T=18)+120*(T=15) 150 REM CHECK REMS, QUOTES, AND LINE NUMBERS 160 FOR I=1 TO C:A=ASC(A$(I,I)) 170 IF A=34 OR A>159 THEN QF=1:GOTO 190 180 NEXT I 190 FOR N=2 TO 6:IF ASC(A$(N))<>32 THEN NEXT N 200 TRAP 210:IF A$(N+1,N+4)<>R$ THEN RF=1:TRAP 40000 210 IF RF=0 THEN ? #4:L=L+1 220 S=6-N:? #4;B$(12-S);CHR$(158);A$(1,N);" ";:N=N+1 230 IF QF=0 AND C(LL+7) THEN ? #4;CHR$(155);B$(5);:L=L+1:LL=LL+65*(T=18)+120*(T=15) 300 IF A>31 AND A<125 THEN 560 310 IF A>159 AND A<254 THEN 490 320 IF A>127 AND A<155 THEN 430 330 IF A<27 THEN 460 340 RESTORE 350 READ D,DL,L$ 360 IF D<>A THEN GOTO 350 365 IF (II+DL)>(LL+7) THEN ? #4;CHR$(155);B$(5);:L=L+1:LL=LL+65*(T=18)+120*(T=15) 370 ? #4;"[";L$;"]";:II=II+DL:NEXT I 380 DATA 27,8,ESCAPE,28,4,UP,29,6,DOWN,30,6,LEFT,31,7,RIGHT 390 DATA 125,7,CLEAR,126,10,BACK SPACE,127,5,TAB 400 DATA 156,13,DELETE LINE,157,13,INSERT LINE,158,11,CLEAR TAB,159,9,SET TAB 410 DATA 253,6,BELL,254,8,DELETE,255,8,INSERT 420 REM INVERSE CONTROL CHARACTERS 430 IF A=128 THEN ? #4;"<,>";:II=II+3:NEXT I 440 A=A-64:? #4;"<";CHR$(A);">";:II=II+2:NEXT I 450 REM CONTROL CHARACTERS 460 IF A=0 THEN ? #4;"[,]";:II=II+3:NEXT I 470 A=A+64:? #4;"[";CHR$(A);"]";:II=II+2:NEXT I 480 REM INVERSE NORMAL CHARACTERS 490 IF A=253 THEN ? #4;"<;>";:II=II+3:NEXT I 500 A=A-128:? #4;"|";CHR$(A);:II=II+2 510 TRAP 540:I=I+1:II=II+1:A=ASC(A$(I,I)):IF II>(LL+7) THEN ? #4;CHR$(155);B$(5);:L=L+1:LL=LL+65*(T=18)+120*(T=15) 520 IF A>159 AND A<253 THEN A=A-128:? #4;CHR$(A);:GOTO 510 530 ? #4;"|";:II=II+1:GOTO 295 540 TRAP 830:? #4;"|";:? #4:L=L+1:GOTO 590 550 REM PRINT LINE AND GET NEXT ONE 560 IF A=96 THEN ? #4;"[.]";:II=II+2:NEXT I 570 IF A=123 THEN ? #4;"[;]";:II=II+2:NEXT I 580 ? #4;CHR$(A);:NEXT I:? #4 590 L=L+1:IF L<60 THEN GOTO 130 600 FOR NN=1 TO 6-(L-60):? #4:NEXT NN 610 ? #4;B$;F$;B$(7);"PAGE ";PG:? #4:? #4:PG=PG+1:L=3:GOTO 130 620 REM END 630 ? #4:POKE 559,PK:GRAPHICS 0:POSITION 12,8:? "COPY COMPLETE":CLOSE #1:CLOSE #4:CLR :END 650 GRAPHICS 0:? :? " PROGRAM LISTER" 660 ? :? :? " ENTER FILE NAME:";:INPUT F$ 665 IF F$(2,2)<>":" OR F$(3,3)<>":" THEN D$(20)=" ":D$(2)=D$ 670 ? :? " DATE";:INPUT D$ 680 ? :? " SOURCE";:INPUT S$ 690 ? :? " CONDENSED PRINT (Y OR N)";:INPUT Y$:IF Y$<>"Y" AND Y$<>"N" THEN GOTO 690 700 IF Y$="Y" THEN T=15:LL=120:PG=1:RETURN 710 IF Y$="N" THEN T=18:LL=65:PG=1:RETURN 720 REM ERROR TRAPPING 730 IF PEEK(195)=136 THEN 620 740 TRAP 830:CLOSE #1:CLOSE #4:POKE 559,PK:OPEN #2,4,0,"K:" 750 IF PEEK(195)=170 THEN 790 760 IF PEEK(195)=138 THEN 810 770 ? CHR$(125):POSITION 7,10:? "CANNOT PRINT THIS LISTING" 780 POSITION 7,12:? "PRESS RETURN TO TRY AGAIN":GET #2,Q:CLR :RUN 790 IF PEEK(195)=170 THEN ? CHR$(125):POSITION 10,10:? "NO FILE BY THAT NAME" 800 POSITION 7,12:? "PRESS RETURN TO TRY AGAIN":GET #2,Q:CLR :RUN 810 ? CHR$(125):POSITION 5,10:? "CHECK PRINTER AND PRESS RETURN":GET #2,Q:GOTO 80 820 ? #4;">";:LN=LN-1:GOTO 300