1000 GOSUB 7180 'cs
1010 PRINT:PRINT TAB(29);"DGET - March 20, 1982
1015 ' by Dan Dugan -- public domain
1020 PRINT
1030 DEFINT A-Z
1040 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$
1055 DIM DEST(30),USED(30)
1060 '

                              OPEN SOURCE FILE

1070 PRINT:INPUT"Name of source file";X$
1080 GOSUB 7290:F2$=Y$          'ucv
1090 IF MID$(F2$,2,1)=":" THEN 1120
1100 F2$=DD$(5)+F2$
1120 '

              TEST FOR EXISTENCE

1130 ON ERROR GOTO 1160
1140    OPEN"I",3,F2$
1150    ON ERROR GOTO 0:GOTO 1210       'ok
1160 CLOSE 3
1170 IF ERR=53 THEN CLOSE 3:PRINT"File not found":RESUME 1060
1180 IF ERR=64 THEN PRINT"Bad file name, try again.":RESUME 1060
1190 ON ERROR GOTO 0
1210 '

                              ENTER SEQUENCE OF FIELDS

1212 PRINT:PRINT"Here's the first line of "F2$".
1214 LINE INPUT#3,T1$
1216 PRINT:PRINT T1$
1218 CLOSE 3:OPEN"I",3,F2$
1220 PRINT:INPUT"Number of fields in the source file records";NF
1225 PRINT:FOR I=1 TO NC:USED(I)=0:NEXT
1230 FOR I=1 TO NF
1240    PRINT"Destination field of field"I;:INPUT DEST(I)
1245    IF DEST(I)>NC THEN 1240
1247    IF DEST(I)=0 THEN 1270
1250    IF USED(DEST(I)) THEN 1240
1260    USED(DEST(I))=1
1270 NEXT
1280 PRINT:PRINT"Is this ok (y/n)?";
1282 A$=INPUT$(1):PRINT A$
1284 IF A$<>"y" THEN CLOSE 3:GOTO 1060
1286 C=1:PRINT
1300 '

                              READ FILE

1305 GOSUB 7140                 'exit
1310 IF EOF(3) THEN 7020
1315 FOR I=1 TO NC:B$(I)="":NEXT:NR=NR+1
1320 FOR I=1 TO NF
1330    IF EOF(3) THEN 7020
1340    INPUT#3,T1$
1350    IF DEST(I) THEN 1352 ELSE 1360
1352    QUOTE=INSTR(T1$,CHR$(126))
1353    IF QUOTE THEN MID$(T1$,QUOTE,1)=CHR$(34):GOTO 1352
1355    B$(DEST(I))=T1$
1360 NEXT
1370 '

                              ADD RECORD TO DIMS FILE

1380 T$=""
1390 FOR J=1 TO NC
1400    IF LEN(T$)+LEN(B$(J))+1>FT*128
      THEN PRINT"Record too long."
1410    T$=T$+B$(J)+CHR$(126)
1420 NEXT
1425 N=N+1:PRINT N;T$;
1430 GOSUB 1450:PRINT"*";:GOSUB 1520:PRINT"!":C=1
1440 '

                              LOOP

1445 GOTO 1300
1450 '

              (SUB) WRITE T$ AS RECORD # N

1460 ON FT GOTO 1490,1470
1470 LSET R$=MID$(T$,129)       'latter half
1480 PUT #1,FT*N+2
1490 LSET R$=LEFT$(T$,128)      'first half
1500 PUT #1,FT*N+1
1510 RETURN
1520 '

              (SUB) WRITE T$ AS DUPE REC N

1530 ON FT GOTO 1560,1540
1540 LSET S$=MID$(T$,129)
1550 PUT #2,FT*N+2
1560 LSET S$=LEFT$(T$,128)
1570 PUT #2,FT*N+1
1580 RETURN
7020 '

                              FINISH

7024 CLOSE 3
7025 PRINT:PRINT NR"records added.
7030 PRINT:PRINT TAB(32)"Re-loading DEDIT.
7040 CHAIN DD$(1)+"DEDIT",1000
7140 '


                              EXIT TEST (TERM DEP)

7150 X$=INKEY$:X=0
7152 IF X$<>"" THEN X=ASC(X$)
7160 IF X=27 THEN CLOSE 3:GOTO 7020     'use ESC to escape listing
7170 RETURN
7180 '


                              CLEAR SCREEN (TERM DEP)

7190 PRINT CHR$(12);
7200 RETURN
7290 '

                              (SUB) UCV

7300 Y$=""
7310 FOR K=1 TO LEN(X$)
7320    Y$=Y$+CHR$(32)
7330    X=ASC(MID$(X$,K,1))
7340    IF 96<X AND X<123 THEN MID$(Y$,K,1)=CHR$(X-32):GOTO 7360
7350    MID$(Y$,K,1)=MID$(X$,K,1)
7360 NEXT
7370 RETURN