10 REM Serial Printer Driver for M200 20 REM by Jeff D. Schneider 30 CLS:PRINT "Serial Printer Driver":PRINT 40 FILES:MAXFILES=2:DIM A$(90),S$(80) 50 PRINT @600,"File to print or 'E' to Exit";:INPUT F$:IF F$="E" THEN MENU 60 IF RIGHT$(F$,3) <> ".DO" THEN F$=F$+".DO" 70 ONERRORGOTO 10000 80 OPEN F$ FOR INPUT AS #1 90 OPEN "COM:38N1ENN" FOR OUTPUT AS #2 100 ONERRORGOTO 0 110 CLS:RJ=0:LM=7:RM=72:TM=4:BM=5:TIT$="":DS=0:PN=1 120 PRINT "Hit for Defaults":PRINT 130 INPUT"Right Justify (N/Y)";RJ$ 140 IF RJ$="Y" THEN RJ=1:GOTO 170 150 IF RJ$="" OR RJ$="N" THEN RJ=0:GOTO 170 160 GOTO 130 170 INPUT "Left Margin (7)";LM 180 INPUT "Right Margin (72)";RM 190 IF LM>RM THEN PRINT "LM must be less than RM":GOTO 170 200 WID=RM-LM 210 INPUT "Top Margin (4)";TM 220 INPUT "Bottom Margin (5)";BM 230 INPUT "Space Between Lines (0)";DS 240 PRINT "Page title after First page" 250 INPUT TIT$ 260 IF LEN(TIT$)>(WID-7) THEN PRINT "TITLE TOO LONG":GOTO 240 270 PRINT "PRESS A KEY WHEN READY TO PRINT" 280 I$=INKEY$:IF I$="" THEN 280 290 CO=0 300 PRINT#2,:MK=0 310 IF PN<>1 THEN PRINT#2,SPACE$(LM);TIT$;SPACE$(WID-LEN(TIT$)-6);"Page ";PN ELSE PRINT#2, 320 LC=2 330 FOR X=3 TO TM:PRINT#2,:LC=LC+1:NEXT X 340 IF CO>0 THEN GOSUB 4000 350 FOR X=(CO+1)TO WID 360 IF EOF(1) THEN 690 370 A$(X)=INPUT$(1,1) 380 IF A$(X)=CHR$(13) THEN D$=INPUT$(1,1):GOTO 410 390 NEXT X 400 GOTO 490 410 IF X=1 THEN 450 ELSE PRINT#2,SPACE$(LM); 420 FOR Y=1 TO (X-1) 430 PRINT#2,A$(Y); 440 NEXT Y 450 IF DS<>0THEN FOR X=1TODS:PRINT#2,:LC=LC+1:NEXT X 460 PRINT#2,:LC=LC+1 470 IF LC>=66-BM THEN PN=PN+1 GOTO 780 480 CO=0:GOTO 350 490 CO=0:IF A$(WID)=" " THEN NWID=WID-1:GOTO 570 500 FOR X=WID TO 1 STEP-1 510 CO=CO+1 520 S$(CO)=A$(X) 530 IF A$(X-1)=" "THEN 560 540 NEXT X 550 STOP 560 NWID=WID-(CO+1) 570 IF A$(NWID)=" " THEN NWID=NWID-1:GOTO 570 580 IF A$(1)=" " AND A$(2)<>" " THEN 5000 590 IF RJ=1 THEN GOSUB 8000 600 PRINT#2,SPACE$(LM); 610 FOR X=1 TO NWID 620 PRINT#2,A$(X); 630 NEXT X 640 PRINT#2,CHR$(13) 650 LC=LC+1 660 IF DS<>0 THEN FOR X=1TODS:PRINT#2,:LC=LC+1:NEXT X 670 IF LC>=66-BM THEN PN=PN+1:GOTO 780 680 GOTO 340 690 IF X=1 THEN 730 ELSE PRINT#2,SPACE$(LM); 700 FOR Y=1 TO (X-1) 710 PRINT#2,A$(Y); 720 NEXT Y 730 FOR X=LC TO 66:PRINT#2,:NEXT X 740 CLOSE 1,2:CLS 750 PRINT "Finished Printing" 760 INPUT "Print Another (Y/N)";YN$ 770 IF YN$="Y" THEN 30 ELSE MENU 780 FOR Z=1 TO BM:PRINT#2,:NEXT Z 790 CLS:PRINT "HIT A KEY TO CONTINUE PRINTING" 800 I$=INKEY$:IF I$="" THEN 800 810 GOTO 300 1000 IF A$(W+1)<>" " THEN RETURN 1010 W=W+1:GOTO 1000 1020 STOP 1200 IF A$(W-1)<>" " THEN RETURN 1210 W=W-1:GOTO 1200 1220 STOP 1400 FOR X=NWID TO (W+1) STEP-1 1410 A$(X+1)=A$(X) 1420 NEXT X 1430 NWID=NWID+1 1440 RETURN 4000 AC=0 4010 FOR W=CO TO 1 STEP-1 4020 AC=AC+1 4030 A$(AC)=S$(W) 4040 NEXT W 4050 RETURN 5000 FOR W=2 TO NWID 5010 A$(W-1)=A$(W) 5020 NEXT W 5030 NWID=NWID-1 5040 GOTO 580 8000 IF MK=0 THEN MK=1 ELSE MK=0 8010 IF MK=1 THEN 8070 8020 ST=2 8030 FOR W=ST TO (NWID-1) 8040 IF A$(W)=" " THEN GOSUB 1000:GOSUB 1400:A$(W+1)=" ":ST=W+3:IF NWID=WID THEN RETURN ELSE 8030 8050 NEXT W 8060 GOTO 8020 8070 ST=NWID-1 8080 FOR W=ST TO 2 STEP-1 8090 IF A$(W)=" " THEN GOSUB 1400:A$(W+1)=" ":GOSUB 1200:ST=W-1:IF NWID=WID THEN RETURN ELSE 8080 8100 NEXT W 8110 GOTO 8070 10000 CLS 10010 PRINT "FILE NOT FOUND" 10020 FOR W=1 TO 500:NEXT W 10030 RESUME 30