home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.barnyard.co.uk
/
2015.02.ftp.barnyard.co.uk.tar
/
ftp.barnyard.co.uk
/
cpm
/
walnut-creek-CDROM
/
CPM
/
DATABASE
/
DIMS103.ARK
/
DCHESHIR.ASC
< prev
next >
Wrap
Text File
|
1986-12-07
|
9KB
|
351 lines
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 96<X AND X<123 THEN MID$(Y$,K,1)=CHR$(X-32):GOTO 2500
2490 MID$(Y$,K,1)=MID$(X$,K,1)
2500 NEXT
2510 RETURN
2520 '
(SUB) GET NEXT SEQUENTIAL RECORD
2530 GOSUB 2080 'exit
2540 IF EOF(3) THEN DONE=1
2550 FOR K=1 TO NC:B$(K)="":NEXT
2555 IF DONE THEN RETURN
2560 LINE INPUT #3,T$
2570 GOSUB 2680 'parse into B$ array j=fields found
2580 IF J<>NC 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 X<Y ) THEN 2800 ELSE 2780 'comma before quote
2780 Z=INSTR(Y+1,T$,CHR$(34))
2790 X=INSTR(Z+1,T$,CHR$(44))'loc of next comma after close quote
2800 B$(J)=MID$(T$,1,X-1):GOSUB 2860
2810 ' TRIM OFF USED PART
2820 T$=MID$(T$,X+1):GOTO 2720
2830 ' LAST FIELD
2840 B$(J)=T$:GOSUB 2860
2850 RETURN
2860 '
(SUB) TRIM QUOTES OFF STRING
2870 IF LEFT$(B$(J),1)=CHR$(34) THEN B$(J)=RIGHT$(B$(J),LEN(B$(J))-1)
2880 IF RIGHT$(B$(J),1)=CHR$(34) THEN B$(J)=LEFT$(B$(J),LEN(B$(J))-1)
2890 RETURN
2900 '
(SUB) PRINT LABELS
2910 LPRINT
2920 FOR LIN=1 TO 4
2930 FOR COL=1 TO 4
2940 X=COLPOS(COL):GOSUB 3000 'diablo tab
2950 LPRINT L$(COL,LIN);
2960 NEXT COL
2970 LPRINT
2980 NEXT LIN
2990 LPRINT
2995 RETURN
3000 '
(SUB) TAB LPRINT (DIABLO)
3010 IF X>126 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