home *** CD-ROM | disk | FTP | other *** search
- 5 ' ***** DIMS *****
- 6 '
- 7 '
- 10 ' INITIALIZATION
-
- 20 DEFINT A-Z
- 30 GOSUB 3420 'cs
- 40 PRINT:PRINT TAB(29);"DIMS 1.03, January 20, 1984
- 45 'ACT-5A TERMINAL
- 50 PRINT
- 80 ' Dan's Information Management System
- 85 ' for Basic-80 and CP/M
- 90 ' originates from PIMS written by Madan L. Gupta
- 95 ' which comes from A People's Data Base System
- 96 ' by Gupta and Brent Lander (1977)
- 100 ' re-written by Dan Dugan, 1979, 1980, 1981, 1982, 1983
- 110 ' Public Domain - removal of this notice constitutes fraud
- 120 ' makes random disk records of 128 or 255 bytes
- 130 ' allows 15 or 30 data fields in record
- 140 ' makes automatic duplicate file
- 150 CLEAR,,1000 ' stack space for MBASIC 5.x
- 155 DEFINT A-Z
- 160 WIDTH LPRINT 255
- 170 ' init vars in this order for speed
- 180 I=0:J=0:K=0:X=0:Y=0:T$="":R$="":T1$="":SKIPPARSE=0:T=0:FT=0:SEARCH=0
- 190 ' then these for COMMON
- 200 C=0:N=0:NC=0:P6=0:P7=0:P8=0:P9=0:PI=0:S=0:T1=0:T2=0:F$="":FT$="":S$=""
- 210 DIM DD$(5)
- 220 DIM C$(10) ' commands
- 230 DIM N$(31), B$(32), C(30) ' 30 names + stop + N
- 240 DIM SEARCHWORD$(10), SEARCHFIELD(10), SKIPWORD$(10), LOOKFIELD(10)
- 243 NDRIVES=2:GOSUB 1360 ' init disk name strings
- 245 PRINT TAB(33);NDRIVES"disk system.
- 250 GOTO 1050
- 1000 '
-
- WARM ENTRY
-
- 1010 DEFINT A-Z
- 1020 GOSUB 3420'cs
- 1023 IF C THEN GOSUB 1970 ' save header
- 1025 IF T=7 THEN CLOSE:GOTO 1650 ' goto
- 1030 IF T=8 THEN 4200 ' reopen
- 1033 IF T=9 THEN CLOSE:T=0:GOTO 1050 ' done
- 1035 IF T=11 THEN 2100 ' backup
- 1040 IF T=12 THEN 3000 ' renumber
- 1050 'some not needed but commoned to keep places for speed
- 1060 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$
- 1070 ON ERROR GOTO 3290
- 1080 '
-
-
- NO-FILE MENU
-
- 1100 WIDTH 70 :RESET 'RESET here for floppy system
- 1105 IF E$<>"" THEN PRINT E$:PRINT
- 1110 PRINT:PRINT TAB(22)"Here are the data files on this disk:
- 1120 PRINT:FILES DD$(3)+"*.D?"
- 1125 WIDTH 255
- 1130 PRINT:PRINT:PRINT TAB(16);"************* DIMS NO-FILE MENU **************
- 1140 PRINT:PRINT TAB(16);"Open any data file shown above ............... 1
- 1150 PRINT TAB(16);"Install new disks ............................ 2
- 1160 PRINT
- 1170 PRINT TAB(16);"Design structure of a new file (DCREATE) ..... 3
- 1180 PRINT TAB(16);"Change number of disk drives for this session. 4
- 1190 PRINT
- 1200 PRINT TAB(16);"Exit DIMS to Basic ........................... 9
- 1210 PRINT TAB(16);"Exit DIMS to CP/M ............................ 0
- 1220 PRINT:PRINT TAB(16);STRING$(48,42):PRINT
- 1230 PRINT TAB(16);:
- PRINT"To continue enter a number ................... ";
- 1240 A$=INPUT$(1): IF A$=CHR$(13) THEN A$="1"
- 1250 PRINT A$
- 1255 RESET ' safety for floppies
- 1260 IF A$="0" THEN SYSTEM
- 1270 IF A$="1" THEN GOTO 1650
- 1280 IF A$="2" THEN GOTO 1000
- 1290 IF A$="3" THEN CHAIN DD$(2)+"DCREATE"
- 1300 IF A$="4" THEN GOSUB 1330:GOTO 1000
- 1310 IF A$="9" THEN GOSUB 3420:STOP
- 1320 GOTO 1230
- 1330 '
- (SUB) ASK # DISKS
-
- 1340 PRINT:PRINT TAB(27);:INPUT"Number of disks in system";NDRIVES
- 1345 PRINT:IF NDRIVES<1 THEN 1000
- 1350 IF NDRIVES>4 THEN 1340
- 1360 '
- (SUB) INSTALL DISK NAMES
-
- 1370 RESTORE 1390
- 1380 ' DD$(1) (2) (3) (4) (5) ' file groups
- 1382 ' main trans data dupe misc
- 1383 ' pgms pgms file file files
- 1390 DATA 1,"A:","A:","A:","A:","A:"
- 1400 DATA 2,"A:","B:","A:","B:","B:"
- 1410 DATA 3,"A:","A:","B:","C:","A:"
- 1420 DATA 4,"A:","A:","B:","C:","D:"
- 1430 READ J
- 1440 FOR K=1 TO 5
- 1450 READ DD$(K)
- 1460 NEXT
- 1470 IF J<>NDRIVES THEN 1430
- 1480 IF A$<>"4" THEN RETURN
- 1490 ON NDRIVES GOTO 1500,1510,1540,1580
- 1500 PRINT"One disk system - all files and programs on A.":GOTO 1630
- 1510 PRINT"Two disk system: A: = main program and main data files
- 1520 PRINT TAB(19)"B: = transient programs, backup data files, aux. data files
- 1530 GOTO 1630
- 1540 PRINT
- "Three disk system: A: = main program, transient programs, aux data files
- 1550 PRINT TAB(21)"B: = main data files
- 1560 PRINT TAB(21)"C: = backup data files
- 1570 GOTO 1630
- 1580 PRINT"Four disk system: A: = main and transient programs
- 1590 PRINT TAB(20)"B: = main data files
- 1600 PRINT TAB(20)"C: = backup data files
- 1610 PRINT TAB(20)"D: = aux. data files
- 1630 PRINT:PRINT TAB(29)"Hit return to continue.":A$=INPUT$(1)
- 1640 RETURN
- 1650 '
-
-
- LOAD HEADER
-
- 1660 GOSUB 3480 ' get name & open up files
- 1670 GOSUB 3420 'cs
- 1690 GOSUB 3750 ' get record
- 1700 GOSUB 1880 'parse into B$'s
- 1710 FOR I=1 TO 31
- 1720 N$(I)=B$(I) 'load names
- 1730 IF LEFT$(N$(I),4)="stop" GOTO 1760
- 1740 C(I)=1
- 1750 NEXT I
- 1760 N=VAL(B$(I+1))
- 1770 NC=I-1 ' # cols
- 1780 PRINT TAB(20)"File "F$" is open. It has"N"records."
- 1790 '
-
-
- EXIT TO DEDIT
-
- 1795 PRINT:PRINT TAB(24)"Waiting while DEDIT is loading."
- 1800 CHAIN DD$(1)+"DEDIT",1000
- 1810 '
-
-
- (SUB) WRITE T$ AS RECORD # I
-
- 1820 ON FT GOTO 1850,1830
- 1830 LSET R$=MID$(T$,129) ' latter half
- 1840 PUT #1,FT*I+2
- 1850 LSET R$=LEFT$(T$,128) ' first half
- 1860 PUT #1,FT*I+1
- 1870 RETURN
- 1880 '
-
-
-
- (SUB) PARSE STRING
-
- 1890 K=0
- 1900 J=INSTR(T$,CHR$(126)) ' delimiter
- 1910 IF J=0 THEN RETURN
- 1920 K=K+1
- 1930 B$(K)=MID$(T$,1,J-1)
- 1940 T$=MID$(T$,J+1)
- 1950 GOTO 1900
- 1970 '
-
- (SUB) SAVE HEADERS
-
- 1990 PRINT:PRINT TAB(31)"Saving file header":PRINT TAB(39);
- 2000 T$=""
- 2010 FOR I=1 TO 31:
- T$=T$+N$(I)+CHR$(126):
- T1$=LEFT$(N$(I),4):
- IF T1$="stop" THEN 2030
- 2020 NEXT I
- 2030 T$=T$+STR$(N)+CHR$(126) 'add N at end
- 2040 I=0
- 2050 GOSUB 1810 ' put rec 0
- 2060 PRINT "*";
- 2062 NR=0:T1$=T$:GOSUB 3960 'put dupe head
- 2064 PRINT"!"
- 2070 RETURN
- 2100 '
-
- BACKUP makes dupe file
-
- 2110 CLOSE 2:KILL DD$(4)+F$+".DD"+FT$
- 2120 GOSUB 3720 ' open up .DD on 2
- 2130 PRINT"Copying main file to dupe file, same numbers.":PRINT
- 2140 FOR I=0 TO N
- 2150 IF INKEY$=CHR$(27) THEN PRINT:PRINT:PRINT"Copy aborted.":GOTO 3260
- 2160 GOSUB 3750: PRINT"+"; ' get record I in T$
- 2170 NR=I:T1$=T$:GOSUB 3960:PRINT"*"; ' put record NR
- 2180 NEXT
- 2190 PRINT:GOTO 3260 ' to DEDIT
- 3000 '
-
-
- RENUMBER
-
- COPY MAIN TO DUPE
-
- 3010 CLOSE 2:KILL DD$(4)+F$+".DD"+FT$
- 3020 GOSUB 3720 ' open 2
- 3030 PRINT"Copying main file to dupe file, renumbering.":PRINT
- 3040 NR=0
- 3050 FOR I=1 TO N
- 3060 IF INKEY$=CHR$(27) THEN PRINT:PRINT:PRINT"Renumber aborted.":GOTO 3260
- 3070 GOSUB 3750 ' get rec I in T$
- 3080 IF ASC(T$)=0 THEN PRINT"0";:GOTO 3100' skip it
- 3090 PRINT"+";:NR=NR+1:T1$=T$:GOSUB 3960:PRINT"!"; ' put rec NR
- 3100 NEXT
- 3110 GOSUB 4030 ' save header (NR)
- 3120 '
-
- ERASE MAIN FILE AND COPY DUPE TO MAIN
-
- 3130 CLOSE
- 3140 PRINT:PRINT"The following operation removes space from deleted records:
- 3150 PRINT: PRINT"Erasing main file.
- 3160 KILL DD$(3)+F$+".D"+FT$
- 3170 PRINT:PRINT:PRINT"Copying dupe to main file.":PRINT
- 3180 GOSUB 3680 ' open both files
- 3190 FOR J=1 TO FT*(NR+1)
- 3200 GET #2,J
- 3210 PRINT"&";
- 3220 LSET R$=S$
- 3230 PUT #1,J
- 3240 PRINT"*";
- 3250 NEXT J
- 3251 N=NR
- 3252 PRINT:GOSUB 1970 'put header
- 3255 '
-
- RETURN TO DEDIT
- 3260 GOTO 1790
- 3280 '
-
- GENERAL ERROR ROUTINES
-
- 3290 IF ERL=1120 AND ERR=53 THEN RESUME 1130 ' if disk empty
- 3300 IF ERL=1740 AND ERR=9
- THEN CLOSE:E$="CAN'T READ HEADER PROPERLY":RESUME 1000
- 3310 IF ERR=61 THEN PRINT:PRINT"Out of disk space.":PRINT:CLOSE:RESUME 1000
- 3312 IF ERR=53 THEN E$="FILE NOT FOUND":RESUME 1080
- 3320 ON ERROR GOTO 0
- 3330 '
-
-
- UCV
-
- 3340 Y$=""
- 3350 FOR K=1 TO LEN(X$)
- 3360 Y$=Y$+" "
- 3370 X=ASC(MID$(X$,K, 1))
- 3380 IF 96<X AND X<123 THEN MID$(Y$,K,1)=CHR$(X-32): GOTO 3400
- 3390 MID$(Y$,K,1)=MID$(X$,K,1)
- 3400 NEXT
- 3410 RETURN
- 3420 '
-
-
- (SUB) CLEAR SCREEN (TERM DEP)
-
- 3430 PRINT CHR$(12);
- 3440 RETURN
- 3480 '
-
-
- (SUB) OPEN UP FILES
- GET NAME
-
- 3490 F$=""
- 3500 C=0 ' clear change flag
- 3505 IF T=7 THEN F$=B$(0):T=0:GOTO 3525 ' goto commmand
- 3510 PRINT: PRINT TAB(17);: INPUT"Name of the file you want to open"; F$
- 3525 IF F$="" THEN 1000
- 3530 X$=F$
- 3540 GOSUB 3330 ' UCverter
- 3550 F$=Y$ ' make UC
- 3560 '
-
- TEST NAME, EXTRACT FILE TYPE
-
- 3570 CLOSE
- 3580 ON ERROR GOTO 3610
- 3590 OPEN"I",1,DD$(3)+F$+".D"
- 3600 FT=1: FT$=" ": GOTO 3690 ' file is type 1
- 3610 IF ERR=64 THEN 3612 ELSE 3620
- 3612 E$="BAD FILE NAME":PRINT E$:IF T=7 THEN T=0:RESUME 1000
- 3614 RESUME 3480
- 3620 IF ERR=53 THEN CLOSE:RESUME 3630'not found
- 3630 ON ERROR GOTO 3660
- 3640 OPEN"I",1,DD$(3)+F$+".D2"
- 3650 FT=2: FT$="2": GOTO 3690 ' file is type 2
- 3660 IF ERR=53 THEN 3662 ELSE 3670
- 3662 E$="FILE NOT FOUND":PRINT E$:IF T=7 THEN T=0:RESUME 1000
- 3664 RESUME 3480
- 3670 ON ERROR GOTO 0
- 3680 '
-
- OPEN UP FILES FOR REAL
-
- 3690 CLOSE:I=0:ON ERROR GOTO 3280
- 3700 OPEN "R",1,DD$(3)+F$+".D"+FT$
- 3710 FIELD #1,128 AS R$
- 3720 OPEN "R",2,DD$(4)+F$+".DD"+FT$
- 3730 FIELD #2, 128 AS S$
- 3740 RETURN
- 3750 '
-
- (SUB) GET REC. I IN T$
-
- 3760 T$=""
- 3770 ON FT GOTO 3800,3780
- 3780 GET#1,FT*I+2 ' latter half
- 3790 T$=LEFT$(R$,127)
- 3800 GET#1,FT*I+1 ' whole or first half
- 3810 T$=R$+T$
- 3820 RETURN
- 3830 '
-
- (SUB) SHOW FIELDS
-
- 3840 FOR J=1 TO NC
- 3850 IF C(J)=0 THEN 3880
- 3860 PRINT TAB(29);
- 3870 PRINT USING"##";J;:PRINT". "LEFT$(N$(J),4)" "RIGHT$(N$(J),1)
- 3880 NEXT
- 3890 PRINT
- 3900 RETURN
- 3960 '
-
- (SUB) PUT T1$ AS REC NR
-
- 3970 ON FT GOTO 4000,3980
- 3980 LSET S$=MID$(T1$,129)
- 3990 PUT#2,FT*NR+2
- 4000 LSET S$=LEFT$(T1$,128)
- 4010 PUT#2,FT*NR+1
- 4020 RETURN
- 4030 '
-
- (SUB) CLOSE DUPE FILE
-
- 4040 IF F2$=F$ THEN C=1:N=NR:GOTO 4130
- 4050 PRINT:PRINT:PRINT"Closing dupe file,"NR"records.
- 4060 T$=""
- 4070 FOR I=1 TO 31
- 4080 T$=T$+N$(I)+CHR$(126)
- 4090 IF LEFT$(N$(I),4)="stop" THEN 4110
- 4100 NEXT
- 4110 T1$=T$+STR$(NR)+CHR$(126)
- 4120 N1=NR:NR=0:GOSUB 3960:NR=N1
- 4130 CLOSE 2
- 4140 RETURN
- 4200 '
-
- RE-OPEN AFTER DISK ERR
-
- 4210 CLOSE:GOSUB 3700:GOTO 1790