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 >
BASIC Source File  |  1984-04-29  |  7KB  |  170 lines

  1.     PRINT "FILE SET-UP PROGRAM OF 3-23-78"
  2.     FIELDS = 20
  3.     ZERO = 0: ONE = 1: TWO = 2
  4.     SPARE = ZERO
  5.     NUMERIC = ZERO: ALPHA = ONE
  6.     DIM FIELD$(FIELDS),TYPE(FIELDS),WIDE(FIELDS),DATA$(FIELDS)
  7.     DIM FEED(FIELDS),MIN(FIELDS),MAX(FIELDS)
  8.     INPUT "DO YOU WANT INSTRUCTIONS";ANS$
  9.     IF ANS$="NO" THEN 1100
  10.     PRINT "THE PURPOSE OF THIS PROGRAM IS TO SET UP A FILE."
  11.     PRINT "THIS INVOLVES DEFINING ALL HEADINGS AND FIELDS."
  12.     PRINT "EXAMPLES OF FILES:"
  13.     PRINT "A LIST OF ALL THE INTEGRATED CIRCUITS ON HAND, OR"
  14.     PRINT "A LIST OF ALL THE SALES MADE ON A PARTICULAR DATE, OR"
  15.     PRINT "A LIST OF ALL THE ITEMS SHIPPED IN ONE WEEK."
  16.     PRINT "THE FILE IS MADE UP OF RECORDS, AND EACH RECORD"
  17.     PRINT "IS MADE UP OF FIELDS.  THE RECORD MIGHT BE ONE"
  18.     PRINT "INVENTORY ITEM, OR ONE TRANSACTION.  THE FIELD "
  19.     PRINT "MIGHT BE A QUANTITY, A PRICE, OR A PART NUMBER."
  20.     PRINT "WHEN THE FILE IS FIRST STARTED, IT IS NECESSARY TO"
  21.     PRINT "DEFINE EACH FIELD IN THE RECORDS, AS TO NUMERICAL"
  22.     PRINT "OR NON-NUMERICAL, WHAT THE NAME OF THE FIELD IS,"
  23.     PRINT "AND WHAT THE COLUMN HEADING SHOULD BE FOR THE FIELD."
  24.     PRINT "THERE ARE PRESENTLY FOUR TYPES OF FILES ALLOWED:"
  25.     PRINT "  TYPE 0        SEQUENTIAL"
  26.     PRINT "  TYPE 1        RANDOM"
  27.     PRINT "  TYPE 3        INDEXED-RANDOM"
  28.     PRINT "  TYPE 7        LINKED-INDEXED-RANDOM"
  29.     PRINT "A SEQUENTIAL FILE IS NORMALLY USED FOR ITEMS THAT"
  30.     PRINT "NEED NO CHANGES, SUCH AS A RECEIVING OR SHIPPING LOG."
  31.     PRINT "A RANDOM FILE IS NOT AS COMPACT AS A SEQUENTIAL FILE,"
  32.     PRINT "BUT IT HAS THE ADVANTAGE OF BEING EASY TO MAKE CHANGES."
  33.     PRINT "AN INDEXED FILE ALLOWS QUICK ACCESS TO ANY ENTRY BY"
  34.     PRINT "SPECIFYING A KEY FIELD, SUCH AS A PART NUMBER IN AN INVENTORY."
  35.     PRINT "A LINKED FILE ALLOWS DELETIONS AND INSERTIONS "
  36.     PRINT "WITHOUT HAVING TO READ AND WRITE THE WHOLE FILE."
  37. 1100    FILETYPE = ZERO        REM  START WITH THIS.
  38.     CODE = ZERO        REM  ACCESS CODE.
  39.     NHEAD = ZERO        REM  NUMBER OF HEADINGS.
  40.     NIND = ZERO        REM  NUMBER OF INDEXES.
  41.     RECNO = ONE        REM  RECORD NUMBER.
  42.     INPUT "WHAT DO YOU WANT TO NAME THE FILE (UP TO 8 CHARS)";FILENAME$
  43.     INPUT "DO YOU WANT RESTRICTIONS ON WHO CAN READ THIS FILE";ANS$
  44.     IF ANS$ = "YES" THEN CODE=CODE+1
  45.     INPUT "DO YOU WANT RESTRICTIONS ON WHO CAN CHANGE THIS FILE";ANS$
  46.     IF ANS$ = "YES" THEN CODE=CODE+2
  47. 1105    INPUT "DO YOU WANT COLUMNS, WITH HEADINGS DEFINED";COL$
  48.     IF COL$ = "YES" THEN \
  49.         NHEAD = ONE :\
  50.         INPUT "HOW MANY CHARS WIDE IS YOUR PRINTER PAPER";PAPER.WIDTH
  51.     N=ONE:TOTAL.WIDTH = ZERO:HEADINGS$=""
  52. 1110    REM  THIS IS WHERE THE FIELD DEFINING LOOP STARTS.
  53.     MIN(N) = ZERO        REM  DEFAULT MINIMUM.
  54.     MAX(N) = ZERO        REM  DEFAULT MAXIMUM.
  55.     PRINT "WHAT IS THE NAME OF FIELD NUMBER ";N;
  56.     INPUT FIELD$(N)
  57.     PRINT "WILL ";FIELD$(N);" ALWAYS BE A NUMBER";
  58.     INPUT ANS$
  59.     IF ANS$="YES" THEN TYPE(N) = ZERO ELSE TYPE(N) = ONE
  60. 1115    IF COL$ <> "YES" THEN 1135    REM  MUST BE FREE FORMAT.
  61.     INPUT "HOW MANY CHARACTERS WIDE DO YOU WANT THIS FIELD";WIDE(N)
  62.     TOTAL.WIDTH = TOTAL.WIDTH + WIDE(N)
  63.     X = TOTAL.WIDTH - PAPER.WIDTH - N - ONE
  64.     IF X <= ZERO THEN 1120
  65.     PRINT "THE PAPER WIDTH HAS BEEN EXCEEDED BY ",X," CHARACTERS."
  66.     INPUT "WANT TO USE A DIFFERENT WIDTH FOR THIS FIELD";ANS$
  67.     IF ANS$="YES" THEN TOTAL.WIDTH=TOTAL.WIDTH-WIDE(N):GOTO 1115
  68.     PRINT "OK THEN, WE'LL START ALL OVER."
  69.     GOTO 1105
  70. 1120    PRINT "WHAT IS THE HEADING FOR THE ";FIELD$(N);" FIELD";
  71.     INPUT HEADING$
  72.     IF LEN(HEADING$)<=WIDE(N) THEN 1130
  73.     PRINT "THAT HEADING IS TOO WIDE":GOTO 1120
  74. 1130    SPACES = WIDE(N) - LEN(HEADING$) + ONE
  75.     FOR I = ONE TO SPACES
  76.     HEADING$=HEADING$+" "
  77.     NEXT I
  78.     HEADINGS$=HEADINGS$+HEADING$
  79.     PRINT "SO FAR YOUR HEADINGS LOOK LIKE THIS:"
  80.     PRINT HEADINGS$
  81. 1135    IF COL$ = "YES" THEN 1137    REM  MUST BE IN COLUMNS.
  82.     WIDE(N) = ZERO
  83.     FEED(N) = ZERO
  84.     IF N = ONE THEN 1137        REM  FIRST FIELD?
  85.     PRINT "WILL ";FIELD$(N);" BE ON SAME LINE AS ";FIELD$(N-ONE);
  86.     INPUT ANS$
  87.     IF ANS$ = "NO" THEN FEED(N) = ONE
  88. 1137    IF TYPE(N) = ALPHA THEN 1138    REM  SKIP IF ALPHANUMERIC.
  89.         INPUT "MINIMUM VALUE";MIN(N)
  90.         INPUT "MAXIMUM VALUE";MAX(N)
  91. 1138    INPUT "WANT TO DEFINE ANOTHER FIELD";ANS$
  92.     IF ANS$ <> "NO" THEN N = N + ONE:GOTO 1110
  93. 1140    PRINT "WILL IT EVER BE NECESSARY TO MAKE CHANGES IN THIS"
  94.     INPUT "FILE, BESIDES ADDING RECORDS TO THE END";ANS$
  95.     IF ANS$ = "NO" THEN KIND$ = "SEQ" ELSE KIND$ = "RAN"
  96.     RECLEN = TOTAL.WIDTH + 4 + N
  97.     IF KIND$ = "RAN" THEN \
  98.         FILETYPE = FILETYPE + ONE :\
  99.         FILE FILENAME$(RECLEN)        REM  OPEN RANDOM FILE.
  100.     IF KIND$ = "SEQ" THEN \
  101.         FILE FILENAME$ :\            REM  OPEN SEQ. FILE.
  102.         GOTO 1144
  103.         INPUT "DO YOU WANT AN INDEX FILE MADE";INDEX$
  104.         IF INDEX$ = "NO" THEN 1144
  105.         INDEXFILE$ = FILENAME$ + ".IND"
  106.         FILE INDEXFILE$            REM  OPEN INDEX FILE.
  107.         NIND = ONE            REM  NUMBER OF INDEXES.
  108.         FILETYPE = FILETYPE + TWO
  109. 1141        PRINT "HERE ARE THE FIELD NAMES:"
  110.         FOR I = ONE TO N
  111.             PRINT FIELD$(I)
  112.         NEXT I
  113.         INPUT "WHICH ONE MAKES THE INDEX";INDEX.FIELD$
  114.         FOR INDFLD = ONE TO N
  115.             IF FIELD$(INDFLD) = INDEX.FIELD$ THEN 1142
  116.         NEXT INDFLD
  117.         PRINT "TRY AGAIN"
  118.         GOTO 1141
  119. 1142        PRINT #TWO;INDEX.FIELD$        REM  HEADER FOR INDEX.
  120.         INPUT "DO YOU WANT A LINKED FILE";LINKED$
  121.         IF LINKED$ = "YES" THEN FILETYPE = FILETYPE + 4
  122. 1144    PRINT "HOW MANY LINES OF HEADING DO YOU WANT IN ADDITION"
  123.     INPUT "TO POSSIBLE COLUMN HEADINGS";MHEAD
  124.     NHEAD = NHEAD + MHEAD
  125.     IF KIND$ = "RAN" THEN \
  126.         PRINT #ONE,RECNO;RECLEN,N,NHEAD,NIND,FILETYPE,CODE,SPARE :\
  127.         RECNO = RECNO + ONE
  128.     IF LINKED$ = "YES" THEN \
  129.         USED1=0: USEDL=0: FREE1=0: FREEL=0 :\
  130.         PRINT #ONE,RECNO;USED1,USEDL,FREE1,FREEL,SPARE :\
  131.         RECNO = RECNO + ONE
  132.     IF KIND$ = "SEQ" THEN \
  133.         PRINT #ONE;ZERO,N,NHEAD,NIND,FILETYPE,CODE,SPARE :\
  134.         RECNO = RECNO + ONE
  135.     FOR I = ONE TO MHEAD
  136. 1800        PRINT "HEADING LINE ";I;
  137.         INPUT ANS$
  138.         X = LEN(ANS$) - RECLEN - 4
  139.         IF X > 0 THEN \
  140.         PRINT "HEADING ";X;"CHARS TOO WIDE, TRY AGAIN." :\
  141.         GOTO 1800
  142.         IF KIND$ = "RAN" THEN \
  143.         PRINT #ONE,RECNO;ANS$
  144.         IF KIND$ = "SEQ" THEN \
  145.         PRINT #ONE;ANS$
  146.     RECNO = RECNO + ONE
  147.     NEXT I
  148.     IF COL$ <> "YES" THEN 1850
  149.     IF KIND$ = "RAN" THEN \
  150.         PRINT #ONE,RECNO;HEADINGS$
  151.     IF KIND$ = "SEQ" THEN \
  152.         PRINT #ONE;HEADINGS$
  153.     RECNO = RECNO + ONE
  154. 1850    FOR I = ONE TO N
  155.         IF KIND$ = "RAN" THEN \
  156.         PRINT #ONE,RECNO;FIELD$(I),TYPE(I),WIDE(I),FEED(I), \
  157.                  MIN(I),MAX(I),SPARE
  158.         IF KIND$ = "SEQ" THEN \
  159.         PRINT #ONE;FIELD$(I),TYPE(I),WIDE(I),FEED(I), \
  160.                MIN(I),MAX(I),SPARE
  161.     RECNO = RECNO + ONE
  162.     NEXT I
  163. 1900    CLOSE ONE
  164.     IF INDEX$ = "YES" THEN \
  165.         CLOSE TWO
  166.     INPUT "WANT TO SET UP ANOTHER FILE";ANS$
  167.     IF ANS$ = "YES" THEN 1100
  168.     STOP
  169.     END
  170.