10 ' ******************************** 20 ' * NOTICE * 30 ' * COPYRIGHT (c) 1983 DAN DUGAN * 40 ' ******************************** 50 ' STANDALONE ENTRY 60 PRINT:PRINT "CHESHIR 1.03 November 2, 1983 70 PRINT:PRINT "This program prints 4-up Cheshire labels from a sequential data file. 80 PRINT 90 DEFINT A-Z 100 WIDTH LPRINT 255 105 I=0 110 ' OPEN SOURCE FILE 120 PRINT:INPUT"Name of source file";X$ 130 IF X$="" THEN STOP 140 GOSUB 2430:F2$=Y$ 'ucv 150 IF MID$(F2$,2,1)=":" THEN 170 160 F2$=DD$(5)+F2$ 170 ' TEST FOR EXISTENCE 180 ON ERROR GOTO 210 190 OPEN"I",3,F2$ 200 ON ERROR GOTO 0:GOTO 260 'ok 210 ' LOCAL ERROR TRAP 220 CLOSE 3 230 IF ERR=53 THEN CLOSE 3:PRINT"File not found":RESUME 110 240 IF ERR=64 THEN PRINT"Bad file name, try again.":RESUME 110 250 ON ERROR GOTO 0 260 ' SHOW AND ASK 270 PRINT:PRINT"Here's the first line of "F2$". 280 LINE INPUT#3,T$ 290 PRINT:PRINT T$ 300 CLOSE 3:OPEN"I",3,F2$ 310 PRINT: INPUT"Please enter the total number of fields in the source file: ",NC 320 IF NC=0 THEN CLOSE:STOP 330 DIM B$(NC),L$(4,NC) 340 DIMS=0 'switch for sequential file 350 GOTO 1090 1000 ' DIMS ENTRY 1010 GOSUB 2130 'cs 1020 PRINT:PRINT TAB(16);"CHESHIRE 1.03 October 26, 1983 1030 PRINT"Prints Cheshire labels 4-up 1040 ' by Dan Dugan -- public domain 1050 PRINT 1060 DEFINT A-Z 1070 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$ 1080 DIMS=1 'switch for dims data file 1090 ' INITIALIZATION FOR BOTH MODES 1100 DIM COLPOS(4) 1110 ' COLUMN PRINT POSITIONS 1120 COLPOS(1)=2:COLPOS(2)=43:COLPOS(3)=84:COLPOS(4)=124 1130 ' MAXIMUM FIELD LENGTH 1140 MAXLEN=34 1145 DONE=0 'EOF flag 1150 ' SET-UP LABELS 1160 PRINT:PRINT"Please indicate the form that this list is in: 1170 PRINT:PRINT" 1. Short form, (NAME, N2, ADDR, C-ST, ZIP) 1180 PRINT" 2. Medium form, (LNAM, FNAM, N2, ADDR, C-ST, ZIP) 1190 PRINT" 3. Long form, (LNAM, FNAM, TITL, ORG, ADDR etc.) 1200 PRINT:PRINT"Enter 1, 2 or 3: "; 1210 A$=INPUT$(1): IF A$=CHR$(13) THEN A$="1" 1220 PRINT A$: A=VAL(A$): IF A=0 THEN 1950 1230 IF A<1 OR A>3 THEN 1200 1240 FORM=A-1 1242 PRINT:PRINT"Set up printer:" 1244 PRINT"Print head on perforation. 1245 PRINT"Hit return when ready to print":A$=INPUT$(1) 1250 ' RECORD WORK LOOP 1260 LC=0 ' count 1270 COL=0 ' print column 1280 ' 1290 IF DIMS THEN FOR I=T1 TO T2 ' <==== FOR 1300 COL=COL+1:IF COL>4 THEN COL=1 1302 IF COL=1 THEN 1304 ELSE 1310 1304 FOR J=1 TO 4 1305 FOR K=1 TO 4 1306 L$(J,K)="" 1307 NEXT 1308 NEXT 1310 IF DIMS THEN GOSUB 2280 ELSE GOSUB 2520 ' get rec 1320 IF DIMS=0 THEN 1670 1330 IF ASC(T$)=0 THEN PRINT"0";:GOTO 1920 1340 PRINT"+"; 1350 T1$=T$ ' save it 1360 IF SKIPPARSE=1 THEN 1380 1370 GOSUB 1990 ' parse record string 1380 IF SEARCH=0 THEN 1670 1390 ' SEARCH 1400 IF SEARCH<>2 THEN 1450 1410 ' FIND 1420 IF INSTR(T$,SEARCHWORD$(0))=0 THEN 1920 1430 GOSUB 1990 ' parse 1440 GOTO 1670 1450 ' FIELD SEARCH 1460 J=0 ' check for skips first 1470 IF SKIPWORD$(J)="" THEN 1550 ' try search then 1480 IF LOOKFIELD(J)<>0 THEN 1520 ' look in field 1490 IF INSTR(T1$,SKIPWORD$(J))<>0 THEN 1920 ' whole rec search - skip it 1500 J=J+1 1510 GOTO 1470 1520 IF INSTR(B$(LOOKFIELD(J)),SKIPWORD$(J))<>0 THEN 1920 ' field compare - skip 1530 J=J+1 1540 GOTO 1470 1550 IF SEARCHWORD$(0)="" THEN 1650 ' don't care so print it 1560 J=0: GOTO 1580 ' now search 1570 IF SEARCHWORD$(J)="" THEN 1920 ' hesitate no longer 1580 IF SEARCHFIELD(J)<>0 THEN 1620 ' field 1590 IF INSTR(T1$,SEARCHWORD$(J))<>0 THEN 1650 ' found it 1600 J=J+1 1610 GOTO 1570 1620 IF INSTR(B$(SEARCHFIELD(J)),SEARCHWORD$(J))<>0 THEN 1650 1630 J=J+1 1640 GOTO 1570 1650 ' GET READY TO DO IT 1660 IF SKIPPARSE=1 THEN GOSUB 1990 ' parse 1670 ' PAUSE CONTROLS (TERM DEP IF UPPERCASE ONLY) 1680 GOSUB 2080:IF DIMS=0 THEN 1770 ' exit returns A 1690 IF A=122 THEN 1770 ' z means go on 1700 PRINT I;B$(1);TAB(14);"Ready (SPACE/z/r/n/ESC) >"; 1710 A$=INPUT$(1):A=ASC(A$): IF A=27 THEN IF DIMS THEN CLOSE 3:GOTO 1950 ELSE GOTO 50 1720 PRINT A$:IF A=13 OR A=32 OR A=122 THEN 1770 1730 IF A=114 THEN I=IPREV:GOTO 1310 ' r 1740 IF A=110 THEN 1750 ELSE 1670 ' n or loop 1750 INPUT"Enter number of desired record: ";I:GOTO 1310 1760 GOSUB 2080 ' exit 1770 ' STORE LABEL IN 4-UP ARRAY 1780 IF DIMS THEN IPREV=I ELSE I=I+1 1790 IF FORM=1 THEN GOSUB 2360 ' reformat medium to short form 1800 IF FORM=2 THEN GOSUB 2160 ' reformat long to short form 1810 PRINT "("I")" 1820 LIN=1 1830 FOR J=1 TO 3 1840 IF B$(J)="" THEN 1880 1850 IF LEN(B$(J))>MAXLEN THEN B$(J)=LEFT$(B$(J),MAXLEN) 1860 L$(COL,LIN)=B$(J) 1870 LIN=LIN+1 1880 NEXT J 1890 X=LEN(B$(5))+1 1900 IF LEN(B$(4))>MAXLEN-X THEN B$(4)=LEFT$(B$(4),MAXLEN-X) 1910 L$(COL,LIN)=B$(4)+" "+B$(5) 1920 GOSUB 2080 ' check exit 1930 IF COL=4 THEN GOSUB 2900: IF DONE THEN IF DIMS GOTO 1950 ELSE STOP 'print labels 1940 IF DIMS THEN NEXT I ELSE GOTO 1300 ' END OF RECORD WORK LOOP 1942 FOR J=COL+1 TO 4 1944 FOR K=1 TO 4 1945 L$(J,K)="" 1946 NEXT 1947 NEXT 1948 GOSUB 2900 1950 ' GO HOME TO DIMS 1970 PRINT:PRINT:PRINT TAB(17)"Re-loading DEDIT. 1980 CHAIN DD$(1)+"DEDIT",1000 1990 ' (SUB) PARSE STRING 2000 K=0 2010 M=INSTR(T$,CHR$(126)) ' delimiter 2020 IF M=0 THEN RETURN 2030 K=K+1 2040 B$(K)="" 2050 B$(K)=MID$(T$,1,M-1) 2060 T$=MID$(T$,M+1) 2070 GOTO 2010 2080 ' (SUB) EXIT TEST (TERM DEP) 2090 X$=INKEY$ 'use ESC to escape printing 2100 IF X$<>"" THEN A=ASC(X$) 2110 IF A=27 THEN CLOSE 3:IF DIMS GOTO 1970 ELSE GOTO 110 2120 RETURN 2130 ' (SUB) CLEAR SCREEN (TERM DEP) 2140 PRINT CHR$(26); 2150 RETURN 2160 ' (SUB) LONG FORM LABEL RE-FORMAT 2170 IF B$(1)="" AND B$(2)="" OR B$(3)="" THEN 2260 2180 IF B$(2)="" THEN B$(1)=B$(1)+", "+B$(3): GOTO 2200 2190 B$(1)=B$(2)+" "+B$(1)+", "+B$(3) 2200 IF LEN(B$(1))>39 THEN B$(1)=LEFT$(B$(1),39) 2210 B$(2)=B$(4) 2220 B$(3)=B$(5) 2230 B$(4)=B$(6) 2240 B$(5)=B$(7) 2250 RETURN 2260 IF B$(2)+B$(1)="" THEN B$(1)=B$(3) ELSE IF B$(2)="" THEN B$(1)=B$(1) ELSE B$(1)=B$(2)+" "+B$(1) 2270 GOTO 2200 2280 ' (SUB) GET DIMS RECORD "I" IN T$ 2290 T$="" ' necessary! 2300 ON FT GOTO 2330,2310 2310 GET#1,FT*I+2 ' latter half 2320 T$=LEFT$(R$,127) 2330 GET#1,FT*I+1 ' whole or first half 2340 T$=R$+T$ 2350 RETURN 2360 ' (SUB) MEDIUM FORM RE-FORMAT 2370 IF B$(2)="" THEN 2380 ELSE B$(1)=B$(2)+" "+B$(1) 2380 B$(2)=B$(3) 2390 B$(3)=B$(4) 2400 B$(4)=B$(5) 2410 B$(5)=B$(6) 2420 RETURN 2430 ' (SUB) UCV 2440 Y$="" 2450 FOR K=1 TO LEN(X$) 2460 Y$=Y$+CHR$(32) 2470 X=ASC(MID$(X$,K,1)) 2480 IF 96NC THEN 2600 ELSE 2610 2600 PRINT"Input file line"INREC"defective."CHR$(7) 2610 FOR K=1 TO J 'recover quotes encoded by DPUT.BAS 2630 QUOTE=INSTR(B$(K),CHR$(126)) 2640 IF QUOTE THEN MID$(B$(K),QUOTE,1)=CHR$(34):GOTO 2630 2660 NEXT 2670 RETURN 2680 ' (SUB) PARSE COMMA-DELIM. RECORD T$ -> B$ ARRAY 2690 ' returns J = number of fields found 2700 FOR J=1 TO NC:B$(J)="":NEXT 2710 J=0 2720 ' process loop 2730 J=J+1:IF J=NC THEN 2830 2740 X=INSTR(T$,CHR$(44)) 'comma 2750 IF X=0 THEN 2830 'must be last field 2760 Y=INSTR(T$,CHR$(34)) 'quote 2770 IF Y=0 OR ( Y<>0 AND X126 THEN LPRINT TAB(X);:GOTO 3030 ' Diablo abs. tab limit 3020 LPRINT CHR$(27);CHR$(137);CHR$(X+128); 3030 RETURN 3010 IF X>126 THEN LPRINT TAB(X);:GOTO 3030 ' D