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
/
SIMTEL
/
CPMUG
/
CPMUG028.ARK
/
DBSETUP.BAS
< prev
next >
Wrap
BASIC Source File
|
1984-04-29
|
7KB
|
170 lines
PRINT "FILE SET-UP PROGRAM OF 3-23-78"
FIELDS = 20
ZERO = 0: ONE = 1: TWO = 2
SPARE = ZERO
NUMERIC = ZERO: ALPHA = ONE
DIM FIELD$(FIELDS),TYPE(FIELDS),WIDE(FIELDS),DATA$(FIELDS)
DIM FEED(FIELDS),MIN(FIELDS),MAX(FIELDS)
INPUT "DO YOU WANT INSTRUCTIONS";ANS$
IF ANS$="NO" THEN 1100
PRINT "THE PURPOSE OF THIS PROGRAM IS TO SET UP A FILE."
PRINT "THIS INVOLVES DEFINING ALL HEADINGS AND FIELDS."
PRINT "EXAMPLES OF FILES:"
PRINT "A LIST OF ALL THE INTEGRATED CIRCUITS ON HAND, OR"
PRINT "A LIST OF ALL THE SALES MADE ON A PARTICULAR DATE, OR"
PRINT "A LIST OF ALL THE ITEMS SHIPPED IN ONE WEEK."
PRINT "THE FILE IS MADE UP OF RECORDS, AND EACH RECORD"
PRINT "IS MADE UP OF FIELDS. THE RECORD MIGHT BE ONE"
PRINT "INVENTORY ITEM, OR ONE TRANSACTION. THE FIELD "
PRINT "MIGHT BE A QUANTITY, A PRICE, OR A PART NUMBER."
PRINT "WHEN THE FILE IS FIRST STARTED, IT IS NECESSARY TO"
PRINT "DEFINE EACH FIELD IN THE RECORDS, AS TO NUMERICAL"
PRINT "OR NON-NUMERICAL, WHAT THE NAME OF THE FIELD IS,"
PRINT "AND WHAT THE COLUMN HEADING SHOULD BE FOR THE FIELD."
PRINT "THERE ARE PRESENTLY FOUR TYPES OF FILES ALLOWED:"
PRINT " TYPE 0 SEQUENTIAL"
PRINT " TYPE 1 RANDOM"
PRINT " TYPE 3 INDEXED-RANDOM"
PRINT " TYPE 7 LINKED-INDEXED-RANDOM"
PRINT "A SEQUENTIAL FILE IS NORMALLY USED FOR ITEMS THAT"
PRINT "NEED NO CHANGES, SUCH AS A RECEIVING OR SHIPPING LOG."
PRINT "A RANDOM FILE IS NOT AS COMPACT AS A SEQUENTIAL FILE,"
PRINT "BUT IT HAS THE ADVANTAGE OF BEING EASY TO MAKE CHANGES."
PRINT "AN INDEXED FILE ALLOWS QUICK ACCESS TO ANY ENTRY BY"
PRINT "SPECIFYING A KEY FIELD, SUCH AS A PART NUMBER IN AN INVENTORY."
PRINT "A LINKED FILE ALLOWS DELETIONS AND INSERTIONS "
PRINT "WITHOUT HAVING TO READ AND WRITE THE WHOLE FILE."
1100 FILETYPE = ZERO REM START WITH THIS.
CODE = ZERO REM ACCESS CODE.
NHEAD = ZERO REM NUMBER OF HEADINGS.
NIND = ZERO REM NUMBER OF INDEXES.
RECNO = ONE REM RECORD NUMBER.
INPUT "WHAT DO YOU WANT TO NAME THE FILE (UP TO 8 CHARS)";FILENAME$
INPUT "DO YOU WANT RESTRICTIONS ON WHO CAN READ THIS FILE";ANS$
IF ANS$ = "YES" THEN CODE=CODE+1
INPUT "DO YOU WANT RESTRICTIONS ON WHO CAN CHANGE THIS FILE";ANS$
IF ANS$ = "YES" THEN CODE=CODE+2
1105 INPUT "DO YOU WANT COLUMNS, WITH HEADINGS DEFINED";COL$
IF COL$ = "YES" THEN \
NHEAD = ONE :\
INPUT "HOW MANY CHARS WIDE IS YOUR PRINTER PAPER";PAPER.WIDTH
N=ONE:TOTAL.WIDTH = ZERO:HEADINGS$=""
1110 REM THIS IS WHERE THE FIELD DEFINING LOOP STARTS.
MIN(N) = ZERO REM DEFAULT MINIMUM.
MAX(N) = ZERO REM DEFAULT MAXIMUM.
PRINT "WHAT IS THE NAME OF FIELD NUMBER ";N;
INPUT FIELD$(N)
PRINT "WILL ";FIELD$(N);" ALWAYS BE A NUMBER";
INPUT ANS$
IF ANS$="YES" THEN TYPE(N) = ZERO ELSE TYPE(N) = ONE
1115 IF COL$ <> "YES" THEN 1135 REM MUST BE FREE FORMAT.
INPUT "HOW MANY CHARACTERS WIDE DO YOU WANT THIS FIELD";WIDE(N)
TOTAL.WIDTH = TOTAL.WIDTH + WIDE(N)
X = TOTAL.WIDTH - PAPER.WIDTH - N - ONE
IF X <= ZERO THEN 1120
PRINT "THE PAPER WIDTH HAS BEEN EXCEEDED BY ",X," CHARACTERS."
INPUT "WANT TO USE A DIFFERENT WIDTH FOR THIS FIELD";ANS$
IF ANS$="YES" THEN TOTAL.WIDTH=TOTAL.WIDTH-WIDE(N):GOTO 1115
PRINT "OK THEN, WE'LL START ALL OVER."
GOTO 1105
1120 PRINT "WHAT IS THE HEADING FOR THE ";FIELD$(N);" FIELD";
INPUT HEADING$
IF LEN(HEADING$)<=WIDE(N) THEN 1130
PRINT "THAT HEADING IS TOO WIDE":GOTO 1120
1130 SPACES = WIDE(N) - LEN(HEADING$) + ONE
FOR I = ONE TO SPACES
HEADING$=HEADING$+" "
NEXT I
HEADINGS$=HEADINGS$+HEADING$
PRINT "SO FAR YOUR HEADINGS LOOK LIKE THIS:"
PRINT HEADINGS$
1135 IF COL$ = "YES" THEN 1137 REM MUST BE IN COLUMNS.
WIDE(N) = ZERO
FEED(N) = ZERO
IF N = ONE THEN 1137 REM FIRST FIELD?
PRINT "WILL ";FIELD$(N);" BE ON SAME LINE AS ";FIELD$(N-ONE);
INPUT ANS$
IF ANS$ = "NO" THEN FEED(N) = ONE
1137 IF TYPE(N) = ALPHA THEN 1138 REM SKIP IF ALPHANUMERIC.
INPUT "MINIMUM VALUE";MIN(N)
INPUT "MAXIMUM VALUE";MAX(N)
1138 INPUT "WANT TO DEFINE ANOTHER FIELD";ANS$
IF ANS$ <> "NO" THEN N = N + ONE:GOTO 1110
1140 PRINT "WILL IT EVER BE NECESSARY TO MAKE CHANGES IN THIS"
INPUT "FILE, BESIDES ADDING RECORDS TO THE END";ANS$
IF ANS$ = "NO" THEN KIND$ = "SEQ" ELSE KIND$ = "RAN"
RECLEN = TOTAL.WIDTH + 4 + N
IF KIND$ = "RAN" THEN \
FILETYPE = FILETYPE + ONE :\
FILE FILENAME$(RECLEN) REM OPEN RANDOM FILE.
IF KIND$ = "SEQ" THEN \
FILE FILENAME$ :\ REM OPEN SEQ. FILE.
GOTO 1144
INPUT "DO YOU WANT AN INDEX FILE MADE";INDEX$
IF INDEX$ = "NO" THEN 1144
INDEXFILE$ = FILENAME$ + ".IND"
FILE INDEXFILE$ REM OPEN INDEX FILE.
NIND = ONE REM NUMBER OF INDEXES.
FILETYPE = FILETYPE + TWO
1141 PRINT "HERE ARE THE FIELD NAMES:"
FOR I = ONE TO N
PRINT FIELD$(I)
NEXT I
INPUT "WHICH ONE MAKES THE INDEX";INDEX.FIELD$
FOR INDFLD = ONE TO N
IF FIELD$(INDFLD) = INDEX.FIELD$ THEN 1142
NEXT INDFLD
PRINT "TRY AGAIN"
GOTO 1141
1142 PRINT #TWO;INDEX.FIELD$ REM HEADER FOR INDEX.
INPUT "DO YOU WANT A LINKED FILE";LINKED$
IF LINKED$ = "YES" THEN FILETYPE = FILETYPE + 4
1144 PRINT "HOW MANY LINES OF HEADING DO YOU WANT IN ADDITION"
INPUT "TO POSSIBLE COLUMN HEADINGS";MHEAD
NHEAD = NHEAD + MHEAD
IF KIND$ = "RAN" THEN \
PRINT #ONE,RECNO;RECLEN,N,NHEAD,NIND,FILETYPE,CODE,SPARE :\
RECNO = RECNO + ONE
IF LINKED$ = "YES" THEN \
USED1=0: USEDL=0: FREE1=0: FREEL=0 :\
PRINT #ONE,RECNO;USED1,USEDL,FREE1,FREEL,SPARE :\
RECNO = RECNO + ONE
IF KIND$ = "SEQ" THEN \
PRINT #ONE;ZERO,N,NHEAD,NIND,FILETYPE,CODE,SPARE :\
RECNO = RECNO + ONE
FOR I = ONE TO MHEAD
1800 PRINT "HEADING LINE ";I;
INPUT ANS$
X = LEN(ANS$) - RECLEN - 4
IF X > 0 THEN \
PRINT "HEADING ";X;"CHARS TOO WIDE, TRY AGAIN." :\
GOTO 1800
IF KIND$ = "RAN" THEN \
PRINT #ONE,RECNO;ANS$
IF KIND$ = "SEQ" THEN \
PRINT #ONE;ANS$
RECNO = RECNO + ONE
NEXT I
IF COL$ <> "YES" THEN 1850
IF KIND$ = "RAN" THEN \
PRINT #ONE,RECNO;HEADINGS$
IF KIND$ = "SEQ" THEN \
PRINT #ONE;HEADINGS$
RECNO = RECNO + ONE
1850 FOR I = ONE TO N
IF KIND$ = "RAN" THEN \
PRINT #ONE,RECNO;FIELD$(I),TYPE(I),WIDE(I),FEED(I), \
MIN(I),MAX(I),SPARE
IF KIND$ = "SEQ" THEN \
PRINT #ONE;FIELD$(I),TYPE(I),WIDE(I),FEED(I), \
MIN(I),MAX(I),SPARE
RECNO = RECNO + ONE
NEXT I
1900 CLOSE ONE
IF INDEX$ = "YES" THEN \
CLOSE TWO
INPUT "WANT TO SET UP ANOTHER FILE";ANS$
IF ANS$ = "YES" THEN 1100
STOP
END