1000 GOSUB 1930 'cs 1010 PRINT:PRINT TAB(28);"DLETTERS March 20, 1982 1015 ' by Dan Dugan -- public domain 1020 PRINT:PRINT"In this program you control printing in the same way that 1030 PRINT"you control listing on the screen in DEDIT. The 'pause prompt' 1040 PRINT"Ready> will accept SPACE or RETURN to print, 'z' to print and keep 1050 PRINT"going without pausing, or ESCAPE to abort and return to DEDIT. 1051 PRINT:PRINT"It will also accept two commands special to the letters 1052 PRINT"program. 'r' will cause the previous letter to repeat, and 1053 PRINT"'n' will ask for a record number to start from. 1060 PRINT:PRINT"While printing without pause, hitting the space bar during 1070 PRINT"a letter will cancel the 'z' and cause the program to pause before 1080 PRINT"starting the next letter. 1090 ON ERROR GOTO 1780 1100 DEFINT A-Z 1110 COMMON I,J,K,X,Y,T$,R$,S$,T1$,SKIPPARSE,FT,SEARCH, C,N,NC,P6,P7,P8,P9,PI,S,T,T1,T2,C(),B$(),N$(), SEARCHWORD$(),SEARCHFIELD(),SKIPWORD$(),LOOKFIELD(),DD$(),F$,FT$ 1130 GOTO 1160 1140 PRINT:PRINT"Wait while editor program is re-loaded 1150 CHAIN DD$(1)+"DEDIT",1000 1160 ' PRINT LETTER SET-UP 1170 INPUT"Enter text file name (use prefix: to identify disk)"; G$ 1180 IF G$="x" OR G$="" THEN 1670 1190 X$=G$: GOSUB 1810 ' UCV 1200 G$=Y$ 1210 OPEN "I",3,G$ ' test 1220 CLOSE 3 1230 ' RECORD WORK LOOP 1240 C2=0 ' first time 1250 ' 1260 FOR I=T1 TO T2 ' <==== FOR 1270 GOSUB 2510 ' get rec 1280 IF ASC(T$)=0 THEN PRINT"0";:GOTO 1640 ELSE PRINT"+"; 1290 T1$=T$ ' save it 1300 IF SKIPPARSE=1 THEN 1320 1310 GOSUB 1690 ' parse record string 1320 IF SEARCH=0 THEN 1620 1330 ' SEARCH 1340 IF SEARCH<>2 THEN 1410 1350 IF INSTR(T$,SEARCHWORD$(0))=0 THEN 1640 1360 ' speed search 1370 LPRINT CHR$(7); ' found it 1380 GOSUB 1690 ' parse 1390 GOTO 1620 1400 ' field search 1410 J=0 ' check for skips first 1420 IF SKIPWORD$(J)="" THEN 1500 ' try search then 1430 IF LOOKFIELD(J)<>0 THEN 1470 ' look in field 1440 IF INSTR(T1$,SKIPWORD$(J))<>0 THEN 1640 1450 J=J+1 1460 GOTO 1420 1470 IF INSTR(B$(LOOKFIELD(J)),SKIPWORD$(J))<>0 THEN 1640 1480 J=J+1 1490 GOTO 1420 1500 IF SEARCHWORD$(0)="" THEN 1600 ' don't care so print it 1510 J=0: GOTO 1530 ' now search 1520 IF SEARCHWORD$(J)="" THEN 1640 1530 IF SEARCHFIELD(J)<>0 THEN 1570 ' field 1540 IF INSTR(T1$,SEARCHWORD$(J))<>0 THEN 1600 ' found it 1550 J=J+1 1560 GOTO 1520 1570 IF INSTR(B$(SEARCHFIELD(J)),SEARCHWORD$(J))<>0 THEN 1600 1580 J=J+1 1590 GOTO 1520 1600 LPRINT CHR$(7); 1610 IF SKIPPARSE=1 THEN GOSUB 1690 ' parse 1620 ' zag to do it 1630 GOTO 1960 1640 ' END OF RECORD WORK LOOP 1650 IPREV=I ' for repeat command 1660 NEXT 1670 ' FINISH 1680 GOTO 1140 ' exit 1690 ' (SUB) PARSE STRING 1700 K=0 1710 J=INSTR(T$,CHR$(126)) ' delimiter 1720 IF J=0 THEN RETURN 1730 K=K+1 1740 B$(K)=MID$(T$,1,J-1) 1750 T$=MID$(T$,J+1) 1760 GOTO 1710 1770 ' ERROR HANDLING 1780 IF ERL=1210 AND ERR=53 THEN CLOSE 3:PRINT"FILE NOT FOUND": RESUME 1160 1790 IF ERL=1210 AND ERR=64 THEN CLOSE 3:PRINT"UNACCEPTABLE FILE NAME": RESUME 1160 1800 ON ERROR GOTO 0 1810 ' (SUB) UCV 1820 Y$="" 1830 FOR J=1 TO LEN(X$) 1840 Y$=Y$+" " 1850 X=ASC(MID$(X$,J, 1)) 1860 IF 96"" THEN X=ASC(X$) 1915 IF X=27 THEN CLOSE 3:GOTO 1670 ' use ESC to escape listing 1920 RETURN 1930 ' (SUB) CLEAR SCREEN (TERM DEP) 1940 PRINT CHR$(12); 1950 RETURN 1960 ' PRINT LETTER (insert above) 1970 ' PAUSE CONTROLS (TERM DEP if uppercase) 1980 GOSUB 1900 ' exit 2000 IF X=122 THEN 2090 ' go on 2010 PRINT I;B$(1);TAB(20);"Ready>"; 2020 A$=INPUT$(1):PRINT A$ 2030 IF A$=CHR$(13) OR A$=CHR$(32) THEN 2090 2040 IF A$="z" THEN 2090 2050 IF A$="r" THEN I=IPREV:GOTO 1270 2060 IF A$="n" THEN 2070 ELSE 2080 2070 INPUT"Enter number of desired record: ";I:GOTO 1270 2080 GOTO 1970 ' loop 2090 ' DO IT 2100 C1=0 'counts data lines 2110 OPEN "I",3,G$ ' open each time to restore 2120 IF P9=0 THEN GOSUB 1930 ' clear screen 2130 IF EOF(3) THEN 2140 ELSE 2180 2140 ' END OF TEXT FILE 2150 IF P9=1 THEN LPRINT CHR$(12); ' form feed 2160 CLOSE 3 2170 GOTO 1640 ' next record 2180 ' GET LINE & TEST 2190 LINE INPUT #3,L$ 2200 IF LEFT$(L$,3)=".da" THEN 2210 ELSE 2450 2210 ' LINE IS DATA LINE 2220 C1=C1+1:IF C1>NC THEN 2130 2230 ON C1 GOTO 2240, 2310, 2340, 2370, 2400, 2430 ' six lines 2240 ' FIRST DATA LINE 2250 IF B$(1)="" AND B$(2)="" THEN 2300 2260 IF B$(1)="" THEN A$=B$(2):GOTO 2300 2270 IF B$(2)="" THEN A$=B$(1):GOTO 2300 2280 A$=B$(2)+CHR$(32)+B$(1) 2290 GOSUB 2480 2300 GOTO 2130 2310 ' DATA LINE 2 2320 IF B$(3)="" THEN 2130 2330 A$=B$(3):GOSUB 2480:GOTO 2130 2340 ' DATA LINE 3 2350 IF B$(4)="" THEN 2130 2360 A$=B$(4):GOSUB 2480:GOTO 2130 2370 ' DATA LINE 4 2380 IF B$(5)="" THEN 2130 2390 A$=B$(5):GOSUB 2480:GOTO 2130 2400 ' DATA LINE 5 2410 A$=B$(6)+CHR$(32)+B$(7) 2420 GOSUB 2480:GOTO 2130 2430 ' DATA LINE 6 2440 A$=B$(10):GOSUB 2480:GOTO 2130 2450 ' PRINT TEXT LINE 2460 IF P9 THEN LPRINT L$ ELSE PRINT L$ 2470 GOTO 2130 2480 ' (SUB) PRINT DATA LINE 2490 IF P9 THEN LPRINT A$ ELSE PRINT A$ 2500 RETURN 2510 ' GET RECORD "I" IN T$ SUB 2520 T$="" ' necessary! 2530 ON FT GOTO 2560,2540 2540 GET#1,FT*I+2 ' latter half 2550 T$=LEFT$(R$,127) 2560 GET#1,FT*I+1 ' whole or first half 2570 T$=R$+T$ 2580 RETURN