RIAG Crate 010: 143 Volume 143
Item Preview
Share or Embed This Item
Flag this item for
RIAG Crate 010: 143 Volume 143
- Language
- English
Notes
Disk info for 143_Volume_143.dsk:
File Name: riag_010_143_Volume_143/143_Volume_143.dsk
Disk Name: /VOLUME.143/
Physical Size (bytes): 143360
Free Space (bytes): 11264
Used Space (bytes): 132096
Physical Size (KB): 140
Free Space (KB): 11
Used Space (KB): 129
Archive Order: DOS
Disk Format: ProDOS
Total Blocks: 280
Free Blocks: 22
Used Blocks: 258
Volume Access: Destroy Read Rename Write
Block Number of Bitmap: 6
Creation Date: 06/24/1984
File Entries Per Block: 13
File Entry Length (bytes): 39
Active Files in Root Directory: 19
Minimum ProDOS Version Required: 0
Volume Created By ProDOS Version: 0
Volume Name: VOLUME.143
Disk directory for 143_Volume_143.dsk:
riag_010_143_Volume_143/143_Volume_143.dsk /VOLUME.143/
* PRODOS SYS 031 01/01/1984 06/24/1984 15,360 A=$2000
* BASIC.SYSTEM SYS 021 11/15/1983 06/24/1984 10,240 A=$2000
* STARTUP BAS 007 04/01/1985 06/24/1984 2,775 A=$0801
* MAIN BAS 024 06/29/1984 06/24/1984 11,506 A=$0801
* REPORT BAS 023 06/24/1984 06/24/1984 10,770 A=$0801
* CHANGE BAS 009 06/24/1984 06/24/1984 3,828 A=$0801
* SORT BAS 006 06/24/1984 06/24/1984 2,471 A=$0801
* FILES BAS 009 06/24/1984 06/24/1984 3,758 A=$0801
* FILECABINET BAS 043 07/01/1984 06/24/1984 21,455 A=$0801
* FILECAB.STUFFER BAS 011 07/02/1984 06/24/1984 5,022 A=$0801
* FILECAB.INITIAL BAS 009 06/21/1984 06/24/1984 3,877 A=$0801
* TYPE BIN 001 05/29/1984 06/24/1984 365 A=$1F61
* TYPE.ORIG BIN 001 05/28/1984 06/24/1984 362 A=$1F61
* FILECAB.INSTR BAS 014 06/29/1984 06/29/1984 6,217 A=$0801
* FILECAB.MOD BAS 010 07/01/1984 07/01/1984 4,164 A=$0801
TEST DIR 001 07/31/1984 07/31/1984 512
HEADER TXT 001 07/31/1984 07/31/1984 21
INDEX TXT 001 07/31/1984 07/31/1984 39
RPTFMTTEST TXT 001 07/31/1984 07/31/1984 39
RPTFMTNAME TXT 001 07/31/1984 07/31/1984 11
BASENAMES TXT 001 07/31/1984 07/31/1984 11
* DOM.INFORMATION TXT 006 04/01/1985 04/01/1985 2,399
* FILECAB.INSTRUC TXT 020 12/31/1984 04/01/1985 9,584
ProDOS format; 11,264 bytes free; 132,096 bytes used.
Text found in 143_Volume_143.dsk/BASENAMES.txt:
00001
TEST
Text found in 143_Volume_143.dsk/CHANGE.bas:
10 REM << FILE CABINET >>
20 REM << CHANGE MODULE >>
30 REM << PRODOS VERSION >>
40 REM << MODIFICATION BY >>
50 REM << MICHAEL MOORE >>
60 REM << MAY 1984 >>
70 :
100 GOTO 8010
2000 REM << PRINTER SET UP >>>
2010 PRINT D$"PR#1": PRINT CHR$(18);: PRINT CHR$(27) + CHR$(70);
2020 ON PF GOTO 2030,2050
2030 PRINT CHR$(9)"80N";: PRINT CHR$(27) + CHR$(69): RETURN
2050 PRINT CHR$(9)"132N";: PRINT CHR$(15);: RETURN
2090 REM << PRINT SET UP >>>
2100 PRINT :L$ = "PRINT SET-UP CORRECT ": GOSUB 2510: IF YES = 1 THEN GOTO 2110
2105 IF YES = 0 THEN POP : GOTO 28010
2110 PRINT : INVERSE : PRINT TAB( 10)"TURN YOUR PRINTER ON" SPC( 10)" ": NORMAL : PRINT
2120 INPUT "PRESS WHEN READY...";R$: RETURN
2400 REM <<< INPUT CHOICE >>>
2410 PRINT L$"->":V = PEEK(37)::H = LEN(L$) +3
2420 VTAB V: HTAB H: CALL -868: INPUT "";R$:R = VAL(R$): CALL -958
2430 IF R <1 OR R >CHOICE THEN 2450
2440 PRINT : RETURN
2450 IF V = 23 THEN V = 22
2460 CALL -868: PRINT " ENTER NUMBER 1 THRU ";CHOICE: GOTO 2420
2480 IF SEP = 1 THEN RETURN
2482 HOME : PRINT : PRINT "SPACING FOR PRINTED FORMAT": PRINT
2483 PRINT TAB( 3)"<1> SKIP BLANK LINE BETWEEN RECORDS"
2484 PRINT TAB( 3)"<2> RECORDS PRINTED THEN BLANK LINE"
2485 PRINT TAB( 3)"<3> RECORDS PRINTED THEN BLANK LINE"
2486 PRINT TAB( 3)"<4> RECORDS PRINTED THEN BLANK LINE"
2487 PRINT TAB( 3)"<5> RECORDS PRINTED THEN BLANK LINE"
2489 PRINT : PRINT TAB( 7)"WHICH ->:";: CALL -868: INPUT "";LC
2490 IF LC <1 OR LC >5 THEN PRINT CHR$(7) + CHR$(7): GOTO 2480
2493 IF LC = 1 THEN LT = 30
2494 IF LC = 2 THEN LT = 40
2495 IF LC = 3 THEN LT = 45
2496 IF LC = 4 THEN LT = 48
2497 IF LC = 5 THEN LT = 50
2499 RETURN
2500 REM << OBTAIN YES/NO >>
2510 V = PEEK(37) +1
2515 PRINT L$" (Y/N)"
2520 IF V >23 THEN V = 23
2530 VTAB V: HTAB ( LEN(L$) +8): CALL -868: INPUT A$: IF A$ = "Y" THEN YES = 1: RETURN
2540 IF A$ = "N" THEN YES = 0: RETURN
2550 INVERSE : PRINT " PRESS 'Y' OR 'N'...": NORMAL : IF V = >23 THEN V = 22
2560 GOTO 2530
8000 REM <<< SEARCH DATA >>>>
8010 L = 0
8020 GOSUB 21010
8070 PRINT I" MAKE CHANGES": PRINT I +1" RETURN TO THE MENU."
8080 V = PEEK(37) +2
8090 VTAB V: CALL -868: INPUT "WHICH ->";S$:S = VAL(S$)
8100 X = 0: FOR I = 1 TO NH: IF LEN(H$(I)) >X THEN X = LEN(H$(I))
8110 NEXT I:X = X +1
8120 IF S <0 OR S >NH +2 THEN 8090
8125 ON (S < = NH) GOTO 8140: ON S -NH GOTO 10010,28010
8140 HOME
8150 PRINT "PLEASE ENTER THE "H$(S): PRINT "YOU WANT TO FIND....";: CALL 768,Q$
8160 HOME : VTAB 3: INVERSE : FLASH : PRINT "PATIENCE";: NORMAL : PRINT " - HAVE "NR" RECORDS TO CHECK...": PRINT
8162 FOR W = 1 TO 500: NEXT W: HOME
8165 IF PF THEN GOSUB 2100: HOME
8170 IF PF THEN GOSUB 2010
8180 FOR J = 1 TO NR:Y = R(J)
8190 N$(Y,0) = STR$(Y)
8200 IF LEN(Q$) >0 THEN 8230
8210 IF LEN(N$(Y,S)) = 0 THEN GOSUB 11010
8220 GOTO 8240
8230 IF LEFT$(N$(Y,S), LEN(Q$)) = Q$ THEN GOSUB 11010
8240 IF NOT PF AND L +NH >20 THEN GOSUB 9010
8250 IF LF THEN J = NR
8260 NEXT J
8270 L = 0: PRINT D$"PR#0"
8280 IF LF THEN LF = 0: HOME : GOTO 8300
8290 PRINT "THAT'S ALL OF THEM. ";
8300 PRINT "NOW YOU MAY:"
8310 PRINT "1 DO MORE SEARCHES"
8320 PRINT "2 MAKE CHANGES"
8330 PRINT "3 RETURN TO THE MAIN MENU"
8340 PRINT :L$ = "WHICH ":CHOICE = 3: GOSUB 2410:S = R
8350 ON S GOTO 8020,10010,28010
9010 IF (PF) OR (AR) THEN 9030
9020 PRINT "PRESS RETURN TO CONTINUE, ESC TO ABORT";: GOTO 9050
9030 LF = PEEK( -16384): POKE -16368,0
9040 ON LF = 141 GOTO 9050: ON LF = 155 GOTO 9070: GOTO 9090
9050 LF = PEEK( -16384): IF LF <128 THEN 9050
9060 POKE -16368,0
9070 IF LF = 155 THEN LF = 1: GOTO 9100
9080 IF LF < >141 THEN 9050
9090 LF = 0
9100 IF PF = 0 AND AR = 0 THEN PRINT :L = 0: HOME
9110 RETURN
10010 HOME : VTAB 5: PRINT "ENTER THE NUMBER OF THE RECORD TO"
10020 L$ = "CHANGE ":CHOICE = NR: GOSUB 2410:J = R:Y = R(J)
10030 HOME : GOSUB 11010
10040 PRINT : PRINT "ENTER THE NUMBER OF THE FIELD YOU WANT"
10050 L$ = "TO CHANGE ":CHOICE = NH: GOSUB 2410:S = R
10060 PRINT
10070 PRINT "FROM "H$(S)": "N$(Y,S)
10080 PRINT
10090 PRINT TAB( 3)"TO "H$(S)" :";: CALL 768,N$(Y,S)
10100 HOME : GOSUB 11010
10110 PRINT
10120 L$ = "MORE CHANGES ": GOSUB 2510: IF YES THEN GOTO 10010
10130 F$ = "INDEX": GOSUB 24010: GOTO 28010
11010 LT = 60: IF PF AND L = 0 THEN PRINT TAB( 8)DB$" DATA BASE";: POKE 36, LEN(DB$) +20: PRINT TD$: PRINT :L = L +2
11015 PRINT TAB( 4 +5 *(PF >1))H$(0);J
11020 FOR I = 1 TO NH
11030 POKE 36,5 *(PF >0) +1: PRINT I" "H$(I)":";: POKE 36,X +5 *(PF >0) +5: PRINT N$(Y,I)
11040 NEXT I
11050 PRINT
11060 L = L +NH +2
11070 IF PF AND (L +NH) >(LT -1) THEN PRINT CHR$(12):L = 0
11080 RETURN
21000 REM <<>>
21010 HOME : PRINT "SELECT FROM:": PRINT
21020 IF MF = 0 THEN PRINT "0 "H$(0)
21030 FOR I = 1 TO NH: PRINT I" "H$(I): NEXT I: PRINT
21040 MF = 0
21050 RETURN
24010 NR$ = RIGHT$("00000" + STR$(NR),5)
24020 FF = 0: IF F$ < >"INDEX" THEN FF = 1
24030 Q$ = PB$ +FD$ +"/" +F$
24040 PRINT D$"OPEN"Q$: PRINT D$"WRITE"Q$
24050 PRINT NR$
24060 FOR J = 1 TO NR
24070 ON FF GOTO 24130
24080 Y = R(J)
24090 FOR I = 1 TO NH
24100 PRINT N$(Y,I)
24110 NEXT I
24120 GOTO 24140
24130 PRINT R$(J)
24140 NEXT J
24150 PRINT D$"CLOSE"
24160 FF = 0
24170 RETURN
28000 REM << RETURN TO MAIN PROGRAM >>>
28010 PRINT D$"CHAIN";PX$ +"MAIN"
61000 REM *********************
61010 REM FILE CABINET
61020 REM PRODOS
61030 REM ---------------------
61040 REM CONVERTED BY
61050 REM MICHAEL MOORE
61060 REM MAY 1984
61070 REM =====================
61080 REM BASED ON
61090 REM FILE CABINET-MACH 5
61100 REM BY ED AYMOND
61110 REM AND BOB MATZINGER
61120 REM AS MODIFICATION
61130 REM OF EARLIER VERSIONS
61140 REM *********************
61150 REM APPLE CORPS OF DALLAS
Text found in 143_Volume_143.dsk/DOM.INFORMATION.txt:
INTERNATIONAL APPLE CORE DOM 49
SUBMITTED BY THE APPLE CORPS OF DALLAS
PRODOS OPERATING SYSTEM
PRODOS
BASIC.SYSTEM
System files required for the operating system.
STARTUP
Menu program for selection of functions. (Written by Michael Moore).
MAIN
REPORT
CHANGE
SORT
FILES
Updated version of the FILECABINET database program from the February 1983 Disk of the Month (DOS 3.3). This series operates using the PRODOS 'chain' command to reduce the memory requirements during processing; thus providing more space for data. The file 'MAIN' provides the initial entry point. Database files are saved using the directory concept within PRODOS. Provision has been added to store datafiles on a different disk than the program files. (PRODOS conversion and update by Michael Moore; original by various authors-most recent Ed Aymond and Bob Matzinger).
FILECABINET
Updated version of the FILECABINET program with the entire program resident at one time. This is functionally the same as the series of chained programs except that fewer records can be entered to a database. (Same credits as chain version).
FILECABINET.STUFFER
File update program to permit mass changes to records within specified headers in FILECABINET database. (Converted to PRODOS by Michael Moore; original by Mike Kramer).
FILECABINET.INITIAL
File initializer which may be used to set up the record structure for use within the FILECABINET program. (Converted to PRODOS by Michael Moore; original by Mike Kramer).
FILECAB.INSTR
Description of the various versions of FILECABINET as issued by the Apple Corps of Dallas. Also contains notes regarding conversion of DOS 3.3 files to the PRODOS structure as used above. (Updated by Michael Moore from the earlier 'MACH 5' version).
FILECAB.MOD
This program permits the addition of headers to existing FILECABINET databases. Header descriptions can also be changed to revised descriptions. (Written by Michael Moore).
TYPE
TYPE.ORIG
These files provide a new command for PRODOS to permit the display of text files from disk to the screen (or to a printer if activated). TYPE.ORIG is the program as published by Cecil Fretwell in the May 1984 issue of Call-A.P.P.L.E. The TYPE program is a modified version by Michael Moore to overcome a problem with PRODOS as described in the article. Instructions are included in the STARTUP program.
Text found in 143_Volume_143.dsk/FILECAB.INITIAL.bas:
5 REM FILE CABINET INITIALIZER
10 REM WRITTEN BY
15 REM MIKE KRAMER
17 REM HAAUG
20 REM 1/7/81
21 :
22 REM PRODOS VERSION
23 REM BY MICHAEL MOORE 6/17/84
25 REM
28 TEXT
30 HOME : VTAB 10: FOR N = 1 TO 39: PRINT "*";: NEXT N: VTAB 12: HTAB 5: PRINT "FILE CABINET FILE INITIALIZER": PRINT : HTAB 15: PRINT "WRITTEN BY": PRINT : HTAB 14: PRINT "MIKE KRAMER"
35 VTAB 18: PRINT " PRODOS VERSION BY MICHAEL MOORE": VTAB 19: FOR N = 1 TO 39: PRINT "*";: NEXT N
40 VTAB 20: HTAB 13: INPUT "INSTRUCTIONS (Y/N) ? ";YN$:YN$ = LEFT$(YN$,1): IF YN$ < >"Y" AND YN$ < >"N" THEN GOTO 40
50 IF YN$ = "Y" GOTO 770
60 GOSUB 680: REM POKE IN ONERR ROUTINE
70 HOME : CLEAR
80 VTAB 12: PRINT "INSERT FILE CABINET DISK - PRESS A KEY";: GET A$: PRINT
90 D$ = CHR$(4)
100 PRINT D$;"PREFIX"
110 INPUT PX$: REM OBTAIN CURRENT DISK PATH
120 DIM HD$(20),BN$(40)
130 ONERR GOTO 630
135 PRINT D$;"VERIFY";PX$ +"BASENAMES"
140 PRINT D$;"OPEN";PX$ +"BASENAMES"
145 PRINT D$;"READ";PX$ +"BASENAMES"
150 INPUT NB$:NB = VAL(NB$)
160 FOR N = 1 TO NB: INPUT BN$(N): NEXT N
170 PRINT D$;"CLOSE"
180 ONERR GOTO 650
182 VTAB 14: CALL -958: PRINT
185 PRINT "TO EXIT THE PROGRAM, PRESS 'RETURN'"
187 PRINT "INSTEAD OF ENTERING A DATA BASE NAME."
190 PRINT : INPUT "NAME OF NEW DATA BASE? ";DB$: IF LEN(DB$) = 0 THEN HOME : GOTO 600
200 IF ASC( LEFT$(DB$,1)) <65 OR ASC( LEFT$(DB$,1)) >91 THEN PRINT : PRINT "NAME MUST START WITH A LETTER.": GOSUB 910: GOTO 182
210 IF LEN(DB$) >19 THEN PRINT : PRINT "NAME MUST HAVE LESS THAN 20 CHARACTERS": GOSUB 910: GOTO 182
212 FOR L = 1 TO LEN(DB$)
214 IF ASC( MID$ (DB$,L,1)) <46 OR ASC( MID$ (DB$,L,1)) >90 OR ASC( MID$ (DB$,L,1)) = 47 THEN FLAG = 1:L = LEN(DB$): GOTO 217
215 IF ASC( MID$ (DB$,L,1)) <65 AND ASC( MID$ (DB$,L,1)) >57 THEN FLAG = 1:L = LEN(DB$)
217 NEXT L
219 IF FLAG THEN PRINT "ONLY LETTERS, NUMERALS, OR PERIODS ARE PERMITTED WITHIN A DATA BASE NAME.":FLAG = 0: PRINT "PRESS ANY KEY TO CONTINUE.";: GET K$: GOTO 182
220 FOR J = 1 TO NB
230 IF DB$ = BN$(J) GOTO 260
240 NEXT J
250 NB = NB +1:NB$ = STR$(NB):BN$(NB) = DB$: GOTO 300
260 PRINT : PRINT ;" ALREADY EXISTS.": PRINT : INPUT "REPLACE EXISTING FILE (Y/N) ? ";YN$:YN$ = LEFT$(YN$,1): IF YN$ < >"Y" AND YN$ < >"N" GOTO 260
270 IF YN$ = "N" GOTO 182
280 PRINT D$;"DELETE";PX$ +BN$(NB) +"/" +"HEADER"
290 PRINT D$;"DELETE";PX$ +BN$(NB) +"/" +"INDEX"
295 PRINT D$;"DELETE";PX$ +BN$(NB)
300 PRINT : INPUT "NUMBER OF RECORDS? ";NR$:NR = VAL(NR$): IF NR <1 GOTO 300
310 NH = 0
320 PRINT : PRINT "ENTER HEADER # ";NH +1;": ";: INPUT "";H$: IF LEN(H$) < >0 THEN NH = NH +1:HD$(NH) = H$: GOTO 320
330 IF NH = 0 GOTO 320
335 PRINT D$;"CREATE";PX$ +BN$(NB)
340 Q$ = PX$ +BN$(NB) +"/" +"HEADER"
350 PRINT D$;"OPEN";Q$
360 PRINT D$;"WRITE";Q$
370 PRINT NH
380 FOR N = 1 TO NH
390 PRINT HD$(N)
400 NEXT N
410 PRINT D$;"CLOSE"
420 Q$ = PX$ +BN$(NB) +"/" +"INDEX"
430 PRINT D$;"OPEN";Q$
440 PRINT D$;"WRITE";Q$
450 PRINT NR
460 FOR M = 1 TO NR
470 FOR N = 1 TO NH
480 PRINT CHR$(32)
490 NEXT N: NEXT M
500 PRINT D$;"CLOSE"
510 Q$ = PX$ +"BASENAMES"
513 PRINT D$;"OPEN";Q$
517 PRINT D$;"WRITE";Q$
520 PRINT NB
530 FOR N = 1 TO NB
540 PRINT BN$(N)
550 NEXT N
560 PRINT D$"CLOSE"
570 PRINT : INPUT "INITIALIZE MORE FILES (Y/N) ? ";YN$:YN$ = LEFT$(YN$,1): IF YN$ < >"Y" AND YN$ < >"N" GOTO 570
580 IF YN$ = "N" THEN HOME : GOTO 600
590 GOTO 70
600 :
610 HOME : END
620 REM ** APPLESOFT ONERR CORRECTION
630 CALL 1013:I = PEEK(222): IF I = 5 OR I = 6 THEN POKE 216,0: HOME : GOTO 180 REM NO BASENAMEFILE .. LET ONE BE CREATED
640 GOTO 660
650 CALL 1013
660 HOME : VTAB 12: GOSUB 730: IF I >3 AND I <10 THEN PRINT : PRINT "CORRECT ERROR, THEN PRESS A KEY:";: GET A$: PRINT : RESUME
670 PRINT "FATAL ERROR IN LINE "; PEEK(218) +256 * PEEK(219): VTAB 23: END
680 FOR I = 1013 TO 1022: READ PP: POKE I,PP: NEXT I
690 I = 0
700 RETURN
710 DATA 104,168,104,166,223,154,72,152,72,96
720 REM ERROR MESSAGE PRINTING ADAPTED FROM CALL APPLE 9/80
730 MSG$ = CHR$(0):I = PEEK(222): POKE 216,0: IF I = 0 OR I >15 THEN J = 53856 +I +(I = 255) * -1: GOTO 750
740 J = 43377 + PEEK(43583 +I)
750 K = PEEK(J):MSG$ = MSG$ + CHR$(K): IF K <192 THEN J = J +1: GOTO 750
760 PRINT MSG$: PRINT : RETURN
770 HOME : PRINT
780 PRINT TAB( 2)"** FILE CABINET FILE INITIALIZER **": PRINT
790 PRINT "THIS PROGRAM SETS UP FILE CABINET FILES WITH A SPECIFIED NUMBER OF RECORDS."
800 PRINT
810 PRINT "YOU WILL BE ASKED FOR THE NEW DATA BASE NAME, THE NUMBER OF RECORDS, AND THE HEADERS TO BE USED. IF THE DATA BASE NAMED IS IN THE BASENAMEFILE, YOU WILL BE GIVEN A CHANCE TO ENTER ANOTHER NAME IF DESIRED."
820 PRINT : PRINT "WHEN THE DESIRED HEADERS HAVE BEEN ENTERED, PRESS TO INDICATE THERE ARE NO MORE."
830 VTAB 22: PRINT "PRESS TO CONTINUE, TO EXIT";: GET A$: PRINT ;
840 IF A$ = CHR$(13) GOTO 60
850 IF A$ = CHR$(27) THEN HOME : END
860 GOTO 830
900 REM << CONTINUE REQUEST >>
910 PRINT "PRESS ANY KEY TO CONTINUE";: GET K$
920 RETURN
1000 REM ***********************
1010 REM FILE CABINET INITIALIZER
1020 REM ORIGINAL 3.3 VERSION
1030 REM BY MIKE KRAMER
1040 REM
1050 REM PRODOS VERSION
1060 REM BY MICHAEL MOORE
1070 REM 6/17/84
1080 REM
1090 REM **********************
1100 REM APPLE CORPS OF DALLAS
Text found in 143_Volume_143.dsk/FILECAB.INSTR.bas:
5 REM << FILE CABINET INSTRUCTIONS >>>
10 D$ = CHR$(4): GOTO 510
15 PRINT : INPUT "PRESS RETURN TO CONTINUE ->";A$: RETURN
18 :
19 REM << MACH 4 INSTRUCTIONS >>
20 TEXT : HOME : PRINT TAB( 5)"FILE CABINET MACH 4 (DOS 3.3)": POKE 34,2: HOME
35 PRINT : PRINT "THE FILE CABINET MACH4 EPSON PROGRAM IS SET UP TO BE USED WITH THE EPSON MX-80 PRINTER. NO CHANGES ARE REQUIRED."
45 PRINT : PRINT "THE PRINTER ROUTINES ARE LOCATED IN LINES 2000 THRU 2099, IF YOU NEED TO CHANGE THEM TO A DIFFERENT TYPE OF PRINTER"
50 GOSUB 15: HOME
51 PRINT "THE FILE CABINET MACH 4 EPSON PROGRAM ISBOB MATZINGER'S MACH 3 WITH DAVID TOWNSEND'S REVISIONS TO ALLOW INPUT OF COMMAS, ETC. INTO THE FIELDS."
52 PRINT : PRINT "THIS VERSION ALSO HAS A PRINTER FORMAT OPTION TO PLACE BLANK LINES BETWEEN ITEMS BEGINING WITH DIFFERENT LETTERS.";
53 PRINT " THIS OPTION APPLIES ONLY TO THE FIRST COLUMN OF YOUR FORMAT. THIS COLUMN MUSTBE ALPHATYPE."
55 PRINT : PRINT "THIS MODIFICATION BY ED AYMOND 11/6/81.
56 GOSUB 15
60 HOME : PRINT "THE PROGRAM AND ALL DATA ARE MAINTAINED IN RAM MEMORY. BECAUSE OF THIS, THE AMOUNT OF DATA THAT CAN BE GENERATED IS LIMITED."
70 PRINT : PRINT "ALL ENTRIES SHOULD BE AS SHORT AS YOU CAN MAKE THEM, 10 TO 15 CHARACTERS ON THE AVERAGE."
80 PRINT : PRINT "WHEN ENTERING THE NAME FOR A FILE (SUCH AS THE NAME OF THE DATA BASE OR REPORT NAME), TRY TO STAY AT 10 CHARACTERS OR LESS."
110 GOSUB 15: GOTO 510
115 REM << MACH 5 INSTRUCTIONS >>
120 TEXT : HOME : PRINT TAB( 5): PRINT "FILE CABINET MACH 5 (DOS 3.3)": POKE 34,2: HOME
130 PRINT : PRINT "THE MACH 5 VERSION HAS ADDED ADDITIONAL": PRINT "PRINTER FORMAT OPTIONS TO PRINT 1, 2, 3": PRINT "4 OR 5 ENTRIES BEFORE SKIPPING A LINE"
135 PRINT "ON A REPORT. THE MACH 5 VERSION HAS": PRINT "ALSO ADDED ADDITIONAL PLACES TO BAIL"
140 PRINT "OUT OF A TASK BACK TO THE MAIN MENU.
150 PRINT : PRINT "ANY DATA BASE AND RECORDS THAT USED AN": PRINT "OLDER VERSION OF FILE CABINET CAN BE": PRINT "USED WITH THIS VERSION, EXCEPT YOUR": PRINT "PRINTED FORMATS."
155 INVERSE : PRINT : PRINT "CAUTION, THE LAST COLUMN ON PRINTER": PRINT : PRINT "FORMATS MAY NOT APPEAR.": NORMAL : PRINT
160 PRINT "PRINTER REPORTS MAY REQUIRE REFORMATING": PRINT "IF YOU ARE GOING TO USE THE MACH 5": PRINT "VERSION."
164 GOSUB 15
165 HOME : PRINT : PRINT "FOR ADDITIONAL INFORMATION ON CHANGES": PRINT "AND HOW TO USE FILE CABINET MACH 5,": PRINT "PLEASE READ ED AYMOND'S ARTICLE IN THE": PRINT "FEB. 1983 APPLE GRAM. ADDITIONAL"
170 PRINT "INFORMATION AND ARTICLES WILL FOLLOW IN": PRINT "IN LATER ISSUES OF THE APPLE GRAM."
190 GOSUB 15: GOTO 510
200 HOME : VTAB 10: PRINT "1. REVIEW INSTRUCTIONS AGAIN.": PRINT "2. RUN FILE CABINET MACH 5 EPSON": PRINT "3. QUIT AND CATALOG THE DISK": PRINT
205 INPUT "ENTER CHOICE ->";A$:A = VAL(A$): IF A <1 OR A >3 THEN 200
210 ON A GOTO 10,220,240
220 PRINT D$"RUN FILE CABINET MACH 5 EPSON": END
240 TEXT : HOME : PRINT D$"CATALOG": END
300 REM
310 REM FILE CABINET MACH4 INSTR
320 REM BY ED AYMOND
330 REM MODIFIED BY DAVID HURLEY
340 REM TEXT FILES:
350 REM NEC PRINTER
360 REM H-14 PRINTER
365 REM OTHER PRINTER
370 REM MODIFIED BY DAVID HURLEY
380 REM TO WORK WITH
390 REM FILE CABINET MACH 4 EPSON.
400 REM FILE CABINET MACH 5 INSTRUCTION BY DAVID HURLEY
410 REM ABOVE TEXT FILES
420 REM MODIFIED AGAIN BY DAVID HURLEY TO WORK
430 REM WITH FILE CABINET MACH 5 EPSON.
500 REM <<<< INSTRUCTIONS MENU >>>>
510 TEXT : HOME : VTAB 5
520 HTAB 5: PRINT "FILE CABINET-PRODOS INSTRUCTIONS": PRINT
530 HTAB 10: PRINT "SELECT FROM:": PRINT
540 PRINT " 1. PRODOS VERSION"
550 PRINT " 2. MACH 4 VERSION"
560 PRINT " 3. MACH 5 VERSION"
565 PRINT " 4. RUN FILE CABINET-PRODOS"
570 PRINT " 5. FILE CONVERSION (3.3 TO PRODOS)"
580 PRINT " 6. QUIT TO STARTUP MENU"
585 PRINT : PRINT
590 HTAB 10: INPUT "ENTER NUMBER OF SELECTION: ";K$
600 K = VAL(K$): IF K <1 OR K >6 GOTO 510
610 ON K GOTO 710,20,120,1210,810,1510
690 :
700 REM << PRODOS VERSION INSTRUCTIONS >>>
710 TEXT : HOME : PRINT TAB( 5): PRINT "FILE CABINET-PRODOS VERSION": POKE 34,2: HOME
720 PRINT "THE PRODOS VERSION OF FILE CABINET IS AN ILLUSTRATION OF THE 'CHAIN' FACILITY OF PRODOS -- USING THE FILE CABINET- MACH 5 AS A BASE.": PRINT
730 PRINT "THE ORIGINAL CONCEPT OF FILE CABINET AS ONE LARGE PROGRAM IN MEMORY RESULTED IN A LIMITATION ON THE NUMBER OF RECORDS WHICH COULD BE ENTERED IN A GIVEN FILE.": PRINT
740 PRINT "THE TRADEOFF FOR THE AVAILABLITY OF MORERECORDS IS THE NEED FOR DISK ACCESS WHENA CHANGE OF FUNCTION IS DESIRED. THIS WOULD BE LESS OF A PROBLEM ON A HARD DISK SYSTEM.": PRINT
750 GOSUB 15: HOME
760 PRINT "SOME DIFFERENCES BETWEEN THE PRODOS AND DOS 3.3 OPERATING SYSTEMS REQUIRE CHANGES IN THE NAMING CONVENTIONS WITH- IN THE PRODOS VERSION.": PRINT
770 PRINT "SINCE FILE CABINET USES THE RECORD NAMES AND REPORT NAMES WHEN CREATING THE DISK FILE NAMES, CARE MUST BE USED TO CONFORM WITH PRODOS NAMING RULES.": PRINT
780 PRINT "THESE RULES INCLUDE THE REQUIREMENT TO START NAMES WITH A LETTER AND TO USE ONLY LETTERS, NUMERALS AND PERIODS. NO SPACES ARE PERMITTED. FILE NAMES MUSTBE NO LONGER THAN 15 CHARACTERS,"
790 PRINT "INCLUDING ANY THAT ARE ASSIGNED BY THE PROGRAM.": PRINT
795 GOSUB 15: GOTO 510
800 REM << CONVERT 3.3 TO PRODOS >>
810 TEXT : HOME : PRINT TAB( 5): PRINT "CONVERTING 3.3 VERSION TO PRODOS VERSION": POKE 34,3: HOME
820 PRINT "TO CONVERT FILE NAMES TO THE PRODOS VERSION- FOLLOW THESE STEPS....": PRINT
830 PRINT " THE DATA BASE NAME 'TEST' WILL BE USED IN THE EXAMPLES.": PRINT
840 PRINT "1. SELECT A FILE NAME WHICH IS LESS THAN 10 CHARACTERS IN LENGTH AND WHICH FITS THE PRODOS REQUIREMENTS.": PRINT
850 PRINT "2. CREATE A DIRECTORY USING THE DATA BASE NAME - E.G. A DIRECTORY NAMED 'TEST' WOULD BE NEEDED.": PRINT
860 PRINT "3. CONVERT THE 'BASENAMEFILE' TO 'BASENAMES'": PRINT
865 GOSUB 15: HOME
870 PRINT "4. CONVERT THE FILE NAMED 'TEST INDEXFILE' TO 'TEST/INDEX'": PRINT
880 PRINT "5. CONVERT THE FILE NAMED 'TEST HEADERFILE' TO 'TEST/HEADER'": PRINT
890 PRINT "6. CONVERT ANY REPORT FILE NAMED 'TEST RPTFMTNAMEFILE' TO 'TEST/RPTFMTNAME'": PRINT
895 GOSUB 15: HOME
900 PRINT "7. CONVERT ANY REPORT FILE FOR A SPECIFIC REPORT FORMAT ('PRINT' WILL BE USED IN THIS EXAMPLE."
910 PRINT " 'TEST PRINT RPTFMTFILE' TO 'TEST/RPTFMTPRINT'": PRINT : PRINT : PRINT : PRINT
920 PRINT " STEP 2 AND STEPS 4 TO 7 WILL BE NEEDED FOR EACH DATA BASE THAT IS LISTED IN THE ORIGINAL 'BASENAMEFILE'.": PRINT
930 GOSUB 15: GOTO 510
1200 REM <<< RUN FILE CABINET >>>
1210 PRINT D$;"RUN MAIN"
1500 REM <<< RETURN TO STARTUP >>>
1510 PRINT D$;"RUN STARTUP"
Text found in 143_Volume_143.dsk/FILECAB.INSTRUC.txt:
FILE CABINET INSTRUCTIONS
FILE CABINET is an information storage and retrieval system that can be used for such diverse applications as mailing lists, phone directories, car service schedules, financial/chequebook assistance, and serial numbers of personal possessions.
INSTRUCTIONS
When you RUN this Applesoft BASIC program for the first time on a new disk, you will be asked to name your first database file. Give it a name that will help you remember the contexts of the file later (up to 6 letters, no commas or colons). For example, if you wish to create a list of telephone numbers, you could give it the name "PHONES".
You can conceive of the format of a FILE CABINET database by thinking of the information that you would like to store in rows and columns. Each column represents an item or field (eg. a NAME, ADDRESS, PHONE NUMBER). Each row represents a separate entry or record (eg. James Black, 47 Buchanan, 555-1212).
Next you will be asked for the HEADER FOR COLUMN NUMBER 1. As you add records to your new database file, the different items of information will appear in various appropriate columns. At the top of each column is the column's name, or header. HEADER FOR COLUMN 1: is a request to name the first data column for all subsequent records in this database. For instance, you might respond with a column name such as "NAME". You will continue to be prompted for additional column headers until you press as the only response. A possible example is as follows:
HEADER FOR COLUMN 1: NAME
HEADER FOR COLUMN 2: STREET ADDRESS
HEADER FOR COLUMN 3: CITY
HEADER FOR COLUMN 4: STATE/PROVINCE
HEADER FOR COLUMN 5: ZIP CODE
HEADER FOR COLUMN 6: PHONE NUMBER
HEADER FOR COLUMN 7: COMMENT
HEADER FOR COLUMN 8:
You will next be presented with a "menu" of further options:
1. SELECT DATA BASE
2. SEARCH AND/OR CHANGE DATA
3. ADD RECORDS
4. DELETE RECORDS
5. REPORT
6. SORT
7. TURN ON PRINTER
8. TURN OFF PRINTER
9. LIST DATA BASE
10. QUIT
As well, at the top of the page is some information about available memory and such.
The following is an explanation of each option in detail:
1. SELECT DATA BASE
This option displays for you a list of the available database files and gives yuo the option of selecting an existing database, starting a new database, or deleting a database. NOTE: A database, once deleted, cannot be recovered!
2. SEARCH AND/OR CHANGE DATA
Here you have a chance to locate Aunt Sally's phone number - or update it to reflect her move to Miami Beach.
SEARCHING:
The Apple will display a numbered list of categories under which you might wish to search. The list starts with RECORD NUMBER, and then continues through the various column headers (such as NAME or PHONE NUMBER).
If you want to look at a particular record, and you know its record number, type a 0. When you press , the Apple will ask you to type the number of the record you wish to see.
If, on the other hand, you want your Apple to search through the database for a certain key word, type the number for the column which should contain that word. In the above example, you might type a 1, to specify the column headed NAME. When you press , the Apple will ask you to type the NAME that you want to find: SALLY. You do not have to type a full NAME: as any character or series of characters, including numbers, may be searched for. However, the search will find the specified characters only if they are the FIRST characters of that column's entry. When you press this time, the Apple will display all the records in which the NAME entry begins with the characters SALLY. (Note that the Apple distinguished between upper and lower case. Searching for "SALLY" will not find "Sally".) Finally, you will be asked to choose between 1) do more searches, and 2) make changes. To return to the main menu, press .
CHANGING DATA:
One of the selections listed under the SEARCH will be MAKE CHANGES. Type the number of this selection if you wish to modify any of the data in your file. You will be asked first to specify the record number, then to specify the column number, and finally to make the necessary change. (NOTE: You MUST know the record number of the item you wish to change. If you don't know this number, use the SEARCH feature to find the appropriate record. Each searched-for record will be displayed along with its record number.)
3. ADD RECORDS
This is the one you've been waiting for... entering data. As you add data, the Apple will ask you to enter something under each of the headers you specified when you created the file. In our example above, the Apple will first ask for the NAME, then the STREET ADDRESS, then the CITY, and so forth. Simply type the information and press . Remeber that the Apple's INPUT statement will ignore everything after a comma or a colon if those characters appear in the middle of the string of data which is being input from the keyboard. At the end of each new record, you will be given the choice of returning to the main menu or continuing to add more new data records.
4. DELETE RECORDS
With this command, you can delete whole records within your database. As you delete records, the remaining records are renumbered to maintain the order. For example, if you delete record number 1, record number 2 becomes record number 1, record number 3 becomes number 2, and so on.
5. REPORT
Now that you have all of you data typed in, you would like to be able to print it out nicely, right? Right! REPORT is just the command you're looking for.
When you first use REPORT, you will be asked if you wish to create a report format file. Answer NO and you will return to the main menu. Answer YES and you will begin the first part of REPORT: the design phase. You will be given a list of the column headers used in the current database. Specify the total number of headers you wish to have printed. In other words, if you wish only NAMES and PHONE NUMBERS to be printed, type 2.
Now for each column to be printed, you must specify:
a) The number of that column's header.
b) The tab position where the printing of that column should start. (This must be a number from 1. the left edge, up to the character width of your printer. This number must not exceed 132.)
c) Do you wish the column's numbers added, with a grand total printed on the bottom line? (If this column does not contain numberic data, you should answer "N" for No.)
Finally, you will be asked to specify the tab position for printing a column of HORIZONTAL totals. After each record, this column will show the sum of all the numbers from that record which you specified for vertical summation. If you simply press , this last column will not be printed.
Reports are difficult to do properly the first time. Trying it once will give you a better idea of how to set the format for best appearance.
Next you must specify which parts of your database you wish printed. You will be asked, "SELECT RECORDS BY WHICH HEADER?". To select ALL entries in the database, simply press . To print out only a PORTION of the database, respond as if you were setting up a SEARCH. For instance, you might type the number for the header CITY. When you press , the Apple will first ask you to specify a SECOND HEADER. Press to ignore this option. Then the Apple will ask you to type the character or characters it is to look for under the column headed CITY. You might type the word MIAMI BEACH, as shown below:
SELECT RECORDS WHERE CITY= MIAMI BEACH
The Apple will then print out all the records in which the CITY entry BEGINS with the characters "MIAMI BEACH".
If you do not immediately press in response to the request for a SECOND HEADER, you can specify a second header and select records by TWO keys. For instance, you could print only those records that contain MIAMI BEACH listed under CITY and RELATIVE listed under COMMENTS.
6. SORT
You can sort your data file based on any key. Enter the header that you want the sort based on. Entering NAME, for instance, will order your database so that all the records are in alphabetical order by name.
If there are items that you would prefer sorted numberically, instead of alphabetically, a numberic sort option is provided. The numeric sort uses the VAL(X) function to determine the actual value of the data string. This means that 55C21 will be treated as the number 55, because VAL only evaluates the first characters, stopping at the first non-numeric character. Any string that does not have a digit in the first location will evaluate to zero.
7. TURN ON PRINTER
After this command, the Apple will prompt you for the character width of your printer (40, 80 or 132 column) and will adjust the output accordingly. With the printer option on, any command that normally causes output to be displayed on the screen (such as PRINT or LIST) will also send that output to the printer.
8. TURN OFF PRINTER
Turns off the printer option, so that the Apple's output is sent only to the monitor.
9. LIST
LIST will display and print the entire contents of the current database file, one item per line. If the printer option is not on, only one screen-full will be displayed at a time. Pressing will cause the listing to continue.
10. QUIT
Quitting will return you softly back to Applesoft BASIC. We hope you have enjoyed your trip...
Text found in 143_Volume_143.dsk/FILECAB.MOD.bas:
10 REM **FILE CABINET MODIFIER**
20 REM WRITTEN BY
30 REM MICHAEL MOORE
40 :
50 REM JUNE 1984
60 TEXT : HOME : CLEAR
62 TEXT : HOME : VTAB 5
64 HTAB 10: PRINT "FILECABINET MODIFIER"
66 HTAB 10: PRINT " BY MICHAEL MOORE": PRINT
70 GOSUB 2010: REM SETUP INPUT ANYTHING
75 VTAB 8: PRINT "DISPLAY INSTRUCTIONS ? (Y/N) ";: GET A$
76 PRINT A$
78 IF LEFT$(A$,1) = "Y" THEN GOSUB 3010
80 VTAB 12: PRINT "INSERT FILE CABINET DISK - PRESS A KEY";: GET A$: PRINT
90 D$ = CHR$(4)
100 PRINT D$;"PREFIX"
110 INPUT PX$: REM OBTAIN CURRENT DISK PATH
120 DIM HD$(20),BN$(40)
130 ONERR GOTO 1950
135 PRINT D$;"VERIFY";PX$ +"BASENAMES"
140 PRINT D$;"OPEN";PX$ +"BASENAMES"
145 PRINT D$;"READ";PX$ +"BASENAMES"
150 INPUT NB$:NB = VAL(NB$)
160 FOR N = 1 TO NB: CALL 768,BN$(N): NEXT N
170 PRINT D$;"CLOSE"
180 POKE 216,0
200 REM << DISPLAY DATA BASE NAMES >>
210 HOME : VTAB 5
220 PRINT "DATA BASE NAMES ON FILE----": PRINT
230 FOR N = 1 TO NB
240 PRINT N;" ";BN$(N)
250 NEXT N
260 PRINT : PRINT "ENTER NUMBER OF DATA BASE TO BE MODIFIED... ";: GET K$: PRINT K$
265 DB = VAL(K$)
270 ONERR GOTO 1950
280 Q$ = PX$ +BN$(DB) +"/" +"HEADER"
290 PRINT D$;"VERIFY";Q$
300 PRINT D$;"OPEN";Q$
310 PRINT D$;"READ";Q$
320 INPUT NH
330 FOR N = 1 TO NH
340 CALL 768,HD$(N)
350 NEXT N
360 PRINT D$;"CLOSE"
365 POKE 216,0
370 HOME : VTAB 5
380 PRINT "HEADERS ON FILE ---": PRINT
390 FOR N = 1 TO NH
400 PRINT N;" ";HD$(N)
410 NEXT N
420 PRINT : PRINT "TO CHANGE A HEADER, ENTER THE NUMBER OF THE HEADER TO BE MODIFIED.": PRINT
430 PRINT "TO ADD A NEW HEADER, ENTER A NUMBER GREATER THAN THE LAST SHOWN HEADER NUMBER.": PRINT
440 PRINT "PRESS 'RETURN' TO END MODIFICATIONS."
445 PRINT SPC( 10);"ENTER CHOICE : ";
450 GET K$:K = VAL(K$): PRINT K$
460 IF K = 0 AND ADDER = 0 AND CHANGE$ < >"YES" GOTO 1910
470 IF K = 0 AND ADDER >0 OR CHANGE$ = "YES" GOTO 810: REM WRITE NEW HEADER
480 IF K >N -1 GOTO 610
490 IF K <0 GOTO 370
500 REM << CHANGE HEADER >>
510 HOME : VTAB 5
520 PRINT "ORIGINAL HEADER NAME : ";HD$(K): PRINT
530 PRINT "TO MAKE NO CHANGE, PRESS 'RETURN": PRINT : PRINT
540 INPUT "ENTER REVISED HEADER NAME : ";H$
550 IF LEN(H$) = 0 GOTO 370
555 CHANGE$ = "YES"
560 HD$(K) = H$
570 GOTO 370
600 REM << ADD HEADER >>
610 NH = NH +1
620 HD$(NH) = "*MISC*"
630 ADDER = ADDER +1: REM FLAG TO INDICATE NUMBER OF ADDED HEADERS
640 GOTO 370
800 REM << WRITE NEW HEADER >>
810 Q$ = PX$ +BN$(DB) +"/" +"HEADER"
820 PRINT D$;"OPEN";Q$
830 PRINT D$;"WRITE";Q$
840 PRINT NH
850 FOR N = 1 TO NH
860 PRINT HD$(N)
870 NEXT N
880 PRINT D$;"CLOSE"
890 IF ADDER >0 GOTO 1010: REM NEED TO CHANGE INDEX
900 REM << MODIFY MORE FILES >>
910 PRINT : INPUT "MODIFY MORE FILES (Y/N) ? ";YN$:YN$ = LEFT$(YN$,1): IF YN$ < >"Y" AND YN$ < >"N" GOTO 910
920 IF YN$ = "N" GOTO 1910
930 GOTO 60
1000 REM << CHANGE INDEX >>
1010 Q$ = PX$ +BN$(DB) +"/" +"INDEX"
1020 PRINT D$;"OPEN";Q$
1030 PRINT D$;"READ";Q$
1040 INPUT NR
1050 FOR I = 1 TO NR
1055 FOR J = 1 TO NH -ADDER
1060 CALL 768,DX$(I,J)
1065 NEXT J
1070 NEXT I
1080 PRINT D$;"CLOSE"
1100 REM << WRITE REVISED INDEX >>
1110 PRINT D$;"OPEN";Q$
1120 PRINT D$;"WRITE";Q$
1130 PRINT NR
1140 FOR I = 1 TO NR
1145 FOR J = 1 TO NH -ADDER
1150 PRINT DX$(I,J)
1160 NEXT J
1170 FOR L = 1 TO ADDER
1180 PRINT CHR$(32)
1190 NEXT L
1200 NEXT I
1210 PRINT D$;"CLOSE"
1500 REM << MODIFY MORE FILES >>
1510 PRINT : INPUT "MODIFY MORE FILES (Y/N) ? ";YN$:YN$ = LEFT$(YN$,1): IF YN$ < >"Y" AND YN$ < >"N" GOTO 1510
1520 IF YN$ = "N" GOTO 1910
1530 GOTO 60: REM RETURN TO START
1900 REM << TERMINATION MESSAGES >>
1910 HOME : PRINT "ENTER 'RUN' TO RESTART....": END
1950 HOME : PRINT "PROGRAM ABORT DUE TO FILE ERROR..... CHECK FOR PROPER DISK AND FILES AND RETRY.": END
2000 REM << INPUT ANYTHING >>
2010 FOR X = 1 TO 71: READ X%: POKE 768 +X -1,X%: NEXT X: RESTORE : RETURN
2020 DATA 32,190,222,32,227,223,36,17,208,5,162,0,76,15,3,133,133,132,134,165
2030 DATA 184,164,185,133,135,132,136,32,44,213,173,0,2,201,3,208,3,76,99,216
2040 DATA 169,0,133,13,133,14,169,0,160,2,32,237,227,32,61,231,32,123,218,165
2050 DATA 135,164,136,133,184,132,185,32,183,0,96,0,0,0,0,0,0,0,0,0
3000 REM << INSTRUCTIONS >>
3010 TEXT : HOME : VTAB 5
3020 HTAB 10: PRINT "FILECABINET MODIFIER"
3030 HTAB 10: PRINT " BY MICHAEL MOORE": PRINT
3035 POKE 34,7: REM SET TOP WINDOW
3040 PRINT "THIS PROGRAM PERMITS THE ADDITION OF HEADERS TO FILES CREATED BY THE PRODOS VERSIONS OF 'FILECABINET'.": PRINT
3050 PRINT "BLANK DATA FIELDS ARE ADDED FOR EACH CORRESPONDING HEADER.": PRINT
3060 PRINT "A DUMMY HEADER NAME OF *MISC* IS PROVIDED FOR EACH ADDITION. THESE CAN BE CHANGED USING THE HEADER CHANGE FEATURE OF THIS PROGRAM.": PRINT
3070 GOSUB 4910: HOME
3080 PRINT "HEADERS CAN BE CHANGED BY ENTERING THE NUMBER CORRESPONDING TO THE HEADER TO BE REVISED. ": PRINT
3090 PRINT "ENTRY OF HEADER NAMES SHOULD CONFORM TO FILE CABINET LENGTH RESTRICTIONS OF 15 CHARACTERS MAXIMUM.": PRINT
3100 GOSUB 4910: HOME
3110 TEXT : RETURN
4900 REM << CONTINUE REQUEST >>
4910 PRINT "PRESS ANY KEY TO CONTINUE";: GET K$
4920 RETURN
5000 REM **********************
5010 REM FILE CABINET MODIFIER
5020 REM BY MICHAEL MOORE
5030 REM 6/30/84
5040 REM
5050 REM **********************
5060 REM APPLE CORPS OF DALLAS
Text found in 143_Volume_143.dsk/FILECAB.STUFFER.bas:
10 REM ORIGINAL 3.3 VERSION 1/07/80 BY MIKE KRAMER
13 REM PRODOS VERSION 6/17/84
15 REM BY MICHAEL MOORE
18 REM INPUT ANYTHING ROUTINE ADDED 6/17/84
20 REM *************************
30 REM * *
40 REM * FILE CABINET STUFFER *
50 REM * *
60 REM * WRITTEN BY *
70 REM * *
80 REM * MIKE KRAMER *
90 REM * *
100 REM * 10/10/80 *
110 REM * *
120 REM *************************
130 REM
140 D$ = CHR$(4)
150 PRINT D$"PREFIX"
155 INPUT PX$: REM OBTAIN PATH OF CURRENT DISK
160 MEM = FRE(0): IF MEM <0 THEN MEM = 65536 +MEM
170 RC = INT(MEM/110)
180 DIM FD$(30),IP$(RC,21),H$(21),IT(21),TI$(3)
185 GOSUB 1510: REM SET DATE
190 GOSUB 1300
192 GOSUB 1410: REM INPUT ANYTHING ROUTINE
195 TEXT
200 HOME : VTAB 6: PRINT "***************************************": VTAB 8: PRINT TAB( 10)"FILE CABINET STUFFER"
210 VTAB 10: PRINT TAB( 14)"MIKE KRAMER": PRINT TAB( 10)"2218 RUNNING SPRINGS": PRINT TAB( 10)"KINGWOOD,TEXAS 77339"
215 PRINT TAB( 5)"PRODOS VERSION BY MICHAEL MOORE"
220 VTAB 14: PRINT "***************************************"
230 VTAB 21: PRINT "INSERT FILE CABINET DISK AND PRESS ANY KEY:";
240 GET A$
260 REM ** READ BASENAMES **
270 ONERR GOTO 1250
280 PRINT D$"VERIFY";PX$ +"BASENAMES"
285 POKE 216,0
290 PRINT D$;"OPEN";PX$ +"BASENAMES"
300 PRINT D$;"READ";PX$ +"BASENAMES"
310 CALL 768,ND$:ND = VAL(ND$)
320 FOR N = 1 TO ND
330 CALL 768,FD$(N)
340 NEXT N
350 PRINT D$;"CLOSE"
360 ONERR GOTO 1270
370 REM ** DATA BASE MENU
380 TI$ = "FILE CABINET DATA CHANGE"
390 HOME : PRINT : PRINT TAB( 20 - LEN(TI$)/2)TI$: PRINT
400 PRINT "SELECT A DATABASE:"
410 FOR N = 1 TO ND
420 PRINT TAB( 5)"(";N;") ";FD$(N)
430 NEXT N
440 REM ** SELECT DATA BASE
450 PRINT : PRINT : INPUT "ENTER NUMBER OR '/' TO END: ";NU$:NU = VAL(NU$)
460 IF LEFT$(NU$,1) = "/" GOTO 1230
470 IF NU <1 OR NU >ND GOTO 450
480 REM ** READ HEADER FILE
490 Q$ = PX$ +FD$(NU) +"/" +"HEADER"
495 PRINT D$"VERIFY";Q$
498 POKE 216,0
500 PRINT D$;"OPEN";Q$
510 PRINT D$;"READ";Q$
520 CALL 768,NH$:NH = VAL(NH$)
530 FOR N = 1 TO NH
540 CALL 768,H$(N)
550 NEXT N
560 PRINT D$;"CLOSE"
570 GOSUB 580
580 POKE 34,0: HOME : VTAB 12: PRINT "READING ";FD$(NU);" DATA"
590 REM ** READ IN DATA
600 Q$ = PX$ +FD$(NU) +"/" +"INDEX"
610 PRINT D$;"OPEN";Q$
620 PRINT D$;"READ";Q$
630 CALL 768,NR$:NR = VAL(NR$)
640 FOR M = 1 TO NR
650 FOR N = 1 TO NH
660 CALL 768,IP$(M,N)
670 NEXT N
680 NEXT M
690 PRINT D$;"CLOSE"
700 REM ** SELECT HEADER TO CHANGE
710 HOME : VTAB 2: PRINT FD$(NU);" DATA HEADERS:"
720 PRINT TAB( 5)"(0) RECORD #"
730 FOR N = 1 TO NH
740 PRINT TAB( 5)"(";N;") ";H$(N)
750 NEXT N
760 POKE 34,NH +2
770 INPUT "LIST BY ITEM NUMBER: ";IT$:IT = VAL(IT$): IF IT <0 OR IT >NH GOTO 770
780 PRINT : INPUT "HOW MANY ITEMS TO CHANGE? ";NI$:NI = VAL(NI$)
790 IF LEFT$(NI$,1) = "A" OR NI = NH THEN NI = NH: FOR N = 1 TO NH:IT(N) = N: NEXT N: GOTO 850
800 IF NI <1 OR NI >NH GOTO 780
810 FOR N = 1 TO NI
820 PRINT : PRINT "NUMBER OF ITEM ";N;: INPUT ": ";IT$:IT(N) = VAL(IT$): IF IT(N) <1 OR IT(N) >NH THEN PRINT : PRINT "INVALID NUMBER.": GOTO 820
830 NEXT N
840 REM ** ENTER OR CHANGE DATA
850 POKE 34,0: HOME : PRINT TAB( 20 - LEN(FD$(NU))/2)DB$(NU): PRINT
860 PRINT "TYPE FOR NO CHANGE,<*>TO ABORT, TO ERASE OLD ENTRY": POKE 34,5
870 FOR M = 1 TO NR
880 PRINT : PRINT "REC #";M
890 IF IT = 0 GOTO 910
900 PRINT : PRINT "ITEM #";IT;" = ";IP$(M,IT)
910 FOR K = 1 TO NI
920 PRINT H$(IT(K));" = ";IP$(M,IT(K))
930 INPUT "CHANGE TO: ";CH$
940 IF LEFT$(CH$,1) = "*" GOTO 1000
950 IF LEN(CH$) = 0 THEN PRINT : PRINT "NO CHANGE MADE.": PRINT : GOTO 980
960 IF CH$ = CHR$(5) THEN IP$(M,IT(K)) = "": PRINT : PRINT "ENTRY ERASED": PRINT : GOTO 980
970 IP$(M,IT(K)) = CH$: PRINT : PRINT "CHANGED TO ";IP$(M,IT(K)): PRINT
980 NEXT K
990 NEXT M
1000 VTAB 20: PRINT : INPUT "UPDATE DISK FILE? ";YN$: POKE 34,0
1010 IF LEFT$(YN$,1) = "Y" GOTO 1040
1020 IF LEFT$(YN$,1) = "N" GOTO 1160
1030 GOTO 1000
1040 POKE 34,0
1050 REM ** UPDATE DISK FILE
1060 Q$ = PX$ +FD$(NU) +"/" +"INDEX"
1070 PRINT D$;"OPEN";Q$
1080 PRINT D$;"WRITE";Q$
1090 PRINT NR$
1100 FOR M = 1 TO NR
1110 FOR N = 1 TO NH
1120 PRINT IP$(M,N)
1130 NEXT N
1140 NEXT M
1150 PRINT D$;"CLOSE"
1160 PRINT : INPUT "MORE CHANGES? ";A$
1170 IF LEFT$(A$,1) = "N" GOTO 1230
1180 IF LEFT$(A$,1) < >"Y" GOTO 1160
1190 PRINT : INPUT "USE SAME FILES (Y/N) ? ";A$
1200 IF LEFT$(A$,1) = "N" GOTO 380
1210 IF LEFT$(A$,1) = "Y" GOTO 710
1220 GOTO 1190
1230 POKE 34,0: HOME : END
1240 REM ** APPLESOFT ONERR CORRECTION
1250 CALL 1013:I = PEEK(222): POKE 216,0: IF I = 5 OR I = 6 THEN VTAB 18: PRINT "FILE CABINET FILES NOT ON THIS DISKETTE.": GOTO 230
1260 GOTO 1280
1270 CALL 1013
1280 HOME : VTAB 12: GOSUB 1340: IF I >3 AND I <10 THEN PRINT TAB( 3)"CORRECT ERROR, THEN PRESS A KEY.";: GET A$: PRINT : RESUME
1290 PRINT TAB( 7)"FATAL ERROR IN LINE "; PEEK(218) +256 * PEEK(219): VTAB 23: END
1300 FOR I = 1013 TO 1022: READ PP: POKE I,PP: NEXT I
1310 I = 0
1320 RETURN
1330 DATA 104,168,104,166,223,154,72,152,72,96
1340 MSG$ = CHR$(0):I = PEEK(222): POKE 216,0:: IF I = 0 OR I >15 THEN J = 53856 +I +(I = 255) * -1: GOTO 1360
1350 J = 43377 + PEEK(43583 +I)
1360 K = PEEK(J):MSG$ = MSG$ + CHR$(K): IF K <192 THEN J = J +1: GOTO 1360
1370 PRINT TAB( 20 - LEN("** " +MSG$ +" **")/2)"** ";MSG$;" **": PRINT : RETURN
1380 REM ERROR MESSAGE PRINTING (CALL APPLE 9/80)
1400 REM << INPUT ANYTHING >>
1410 FOR I = 1 TO 71: READ I%: POKE 768 +I -1,I%: NEXT I: RESTORE : RETURN
1420 DATA 32,190,222,32,227,223,36,17,208,5,162,0,76,15,3,133,133,132,134,165
1430 DATA 184,164,185,133,135,132,136,32,44,213,173,0,2,201,3,208,3,76,99,216
1440 DATA 169,0,133,13,133,14,169,0,160,2,32,237,227,32,61,231,32,123,218,165
1450 DATA 135,164,136,133,184,132,185,32,183,0,96,0,0,0,0,0,0,0,0,0
1500 REM << SET PRODOS DATE >>
1510 TEXT : HOME
1520 VTAB 5: HTAB 8: INVERSE : PRINT "FILE CABINET - STUFFER"
1530 PRINT : HTAB 12: PRINT "PRODOS VERSION"
1540 PRINT : HTAB 11: PRINT "BY MICHAEL MOORE"
1550 HTAB 14: PRINT "JUNE 1984": NORMAL
1560 DD = PEEK(49040) - INT( PEEK(49040)/32) *32
1570 IF DD < >0 THEN RETURN : REM SKIP DATE SET IF NOT NEEDED
1580 VTAB 13: CALL -958: REM CLEAR TO BOTTOM
1590 PRINT " DATE INPUT ROUTINE": PRINT
1600 VTAB 15: CALL -868
1610 INPUT "ENTER NUMBER OF CURRENT MONTH : ";MM
1620 IF MM <0 OR MM >12 GOTO 1600
1630 VTAB 16: CALL -868
1640 INPUT "ENTER NUMBER OF CURRENT DAY : ";DD
1650 IF DD <0 OR DD >31 GOTO 1630
1660 VTAB 17: CALL -868
1670 INPUT "ENTER LAST TWO DIGITS OF THE YEAR : ";YY
1680 IF YY <0 OR YY >99 GOTO 1660
1690 POKE 49041,YY *2 +(MM >7)
1700 IF MM >7 THEN POKE 49040,(MM -8) *32 +DD
1710 IF MM <8 THEN POKE 49040,MM *32 +DD
1720 RETURN
Text found in 143_Volume_143.dsk/FILECABINET.bas:
10 REM FILE CABINET - PRODOS
20 REM PRINTER SETUP FOR EPSON
40 REM JUNE 1984 UPDATE
50 REM MICHAEL MOORE
60 :
70 REM APPLE CORPS OF DALLAS
80 :
310 DB$ = "":FD$ = "": ONERR GOTO 13010
500 REM << INTRO TITLE >>
510 TEXT : HOME : VTAB 5
520 HTAB 13: INVERSE : PRINT "FILE CABINET": PRINT
530 HTAB 12: PRINT "PRODOS VERSION": PRINT
540 HTAB 11: PRINT "BY MICHAEL MOORE": PRINT
550 HTAB 14: PRINT "JUNE 1984": NORMAL
560 FOR Z = 1 TO 1500: NEXT Z
600 REM << PRODOS DATE SET >>
610 DD = PEEK(49040) - INT( PEEK(49040)/32) *32
620 IF DD < >0 GOTO 1000: REM SKIP DATE IF NOT NEEDED
630 VTAB 13: CALL -958: REM CLEAR TO BOTTOM
640 PRINT " DATE INPUT ROUTINE": PRINT
645 VTAB 15: CALL -868
650 INPUT "ENTER NUMBER OF CURRENT MONTH :";MM
655 IF MM <0 OR MM >12 GOTO 645
657 VTAB 16: CALL -868
660 INPUT "ENTER NUMBER OF CURRENT DAY :";DD
665 IF DD <0 OR DD >31 GOTO 657
667 VTAB 17: CALL -868
670 INPUT "ENTER LAST TWO DIGITS OF THE YEAR :";YY
675 IF YY <0 OR YY >99 GOTO 667
680 POKE 49041,YY *2 +(MM >7)
690 IF MM >7 THEN POKE 49040,(MM -8) *32 +DD
700 IF MM <8 THEN POKE 49040,MM *32 +DD
710 PRINT : GOSUB 60110
720 PRINT "THE DATE ENTERED IS "
730 HTAB 25: PRINT TD$: PRINT
740 L$ = "IS THIS CORRECT? ": GOSUB 2510
750 IF NOT YES GOTO 630
1000 POKE 216,0: GOTO 3010
2000 REM <<< PRINTER SETUP >>>
2010 PRINT D$"PR#1": PRINT CHR$(18);: PRINT CHR$(27) + CHR$(70);
2020 ON PF GOTO 2030,2050
2030 PRINT CHR$(9)"80N";: PRINT CHR$(27) + CHR$(69): RETURN
2050 PRINT CHR$(9)"132N";: PRINT CHR$(15);: RETURN
2100 PRINT :L$ = "PRINT SET-UP CORRECT ": GOSUB 2510: IF YES = 1 THEN GOTO 2110
2105 IF YES = 0 THEN POP : GOTO 28010
2110 PRINT : INVERSE : PRINT TAB( 10)"TURN YOUR PRINTER ON" SPC( 10)" ": NORMAL : PRINT
2120 INPUT "PRESS WHEN READY...";R$: RETURN
2410 PRINT L$"->":V = PEEK(37)::H = LEN(L$) +3
2420 VTAB V: HTAB H: CALL -868: INPUT "";R$:R = VAL(R$): CALL -958
2430 IF R <1 OR R >CHOICE THEN 2450
2440 PRINT : RETURN
2450 IF V = 23 THEN V = 22
2460 CALL -868: PRINT "ENTER NUMBER 1 THRU ";CHOICE: GOTO 2420
2480 IF SEP = 1 THEN RETURN
2482 HOME : PRINT : PRINT "SPACING FOR PRINTED FORMAT": PRINT
2483 PRINT TAB( 3)"<1> SKIP BLANK LINE BETWEEN RECORDS"
2484 PRINT TAB( 3)"<2> RECORDS PRINTED THEN BLANK LINE"
2485 PRINT TAB( 3)"<3> RECORDS PRINTED THEN BLANK LINE"
2486 PRINT TAB( 3)"<4> RECORDS PRINTED THEN BLANK LINE"
2487 PRINT TAB( 3)"<5> RECORDS PRINTED THEN BLANK LINE"
2489 PRINT : PRINT TAB( 7)"WHICH ->:";: CALL -868: INPUT "";LC
2490 IF LC <1 OR LC >5 THEN PRINT CHR$(7) + CHR$(7): GOTO 2480
2493 IF LC = 1 THEN LT = 30
2494 IF LC = 2 THEN LT = 40
2495 IF LC = 3 THEN LT = 45
2496 IF LC = 4 THEN LT = 48
2497 IF LC = 5 THEN LT = 50
2499 RETURN
2510 V = PEEK(37) +1
2515 PRINT L$" (Y/N)"
2520 IF V >23 THEN V = 23
2530 VTAB V: HTAB ( LEN(L$) +8): CALL -868: INPUT A$: IF A$ = "Y" THEN YES = 1: RETURN
2540 IF A$ = "N" THEN YES = 0: RETURN
2550 INVERSE : PRINT "PRESS 'Y' OR 'N'...": NORMAL : IF V = >23 THEN V = 22
2560 GOTO 2530
3010 REM << STARTUP >>>
3030 TEXT : HOME
3040 GOSUB 32010
3045 GOSUB 34000
3050 IF MS = 1 AND NR = 0 GOTO 38010: REM CHECK FOR ZERO RECORDS IN NEW FILE
3055 CLEAR
3060 DIM R$(65),AC(21),K(66),H$(21),RN$(21)
3070 DIM L%(21)
3071 D$ = CHR$(4)
3072 PRINT D$;"PREFIX"
3073 INPUT PX$: REM OBTAIN PATH OF CURRENT DISK
3075 GOSUB 60110: REM SETUP DATE AFTER CLEAR
3090 H$(0) = "REC#"
3100 DB$ = "":FD$ = "": ONERR GOTO 13010
3105 PRINT D$;"VERIFY"PX$ +"BASENAMES"
3110 GOSUB 23010
3120 GOTO 13010
4000 REM << GET FILE >>
4010 F$ = "HEADER": ONERR GOTO 6010
4015 PRINT D$"VERIFY"PX$ +FD$ +"/" +F$
4020 GOSUB 23010
4100 FOR I = 1 TO NR:H$(I) = R$(I):L%(I) = LEN(R$(I)): NEXT I
4110 NH = NR:NR = 0:MEM = FRE(0)
4120 B = INT((MEM -16)/(18 *NH +8))
4130 DIM N$(B,NH),R(B),S(B)
4140 F$ = "INDEX": ONERR GOTO 28100
4150 GOSUB 23010
4160 GOTO 28010
5000 REM <<< SORT ROUTINE >>
5010 N = NR:M = N:FF = 0: ONERR GOTO 5080
5020 M = INT(M/2):K = N -M:J = 1: PRINT "SORTING ";: IF M = 0 THEN PRINT CHR$(13): GOTO 5100
5030 I = J
5040 LL = I +M:I2 = R(I):L2 = R(LL): ON L GOTO 5050,5060: ON ( VAL(N$(I2,S)) = > VAL(N$(L2,S))) GOTO 5080: GOTO 5070
5050 ON (N$(I2,S) < = N$(L2,S)) GOTO 5080: GOTO 5070
5060 ON ( VAL(N$(I2,S)) < = VAL(N$(L2,S))) GOTO 5080
5070 Y = R(I):R(I) = R(LL):R(LL) = Y:I = I -M: IF I > = 1 THEN 5040
5080 J = J +1: IF J >K THEN 5020
5090 GOTO 5030
5100 POKE 216,0: HTAB 10: INVERSE : FLASH : PRINT " ": NORMAL
5200 PRINT : PRINT "WANT TO SAVE >"FD$"< FILE":L$ = "SORTED BY >" +H$(S) +"< TO DISK ": GOSUB 2510: IF YES THEN F$ = "INDEX": GOSUB 24010
5210 GOTO 28010
5400 MF = 1: GOSUB 21010
5410 L$ = "ENTER # OF FIELD FOR SORT ":CHOICE = NH: GOSUB 2410:S = R
5411 ST = 0
5412 IF NR = <40 THEN ST = 2
5413 IF NR >40 THEN ST = 6
5414 IF NR >90 THEN ST = 15
5415 IF NR >140 THEN ST = 70
5416 IF NR >200 THEN ST = 150
5417 IF NR >250 THEN ST = 250
5418 IF NR >300 THEN ST = 370
5419 PRINT : PRINT "SORT WILL TAKE APPROX. ";: FLASH : PRINT (ST + INT(.06 *NR * LOG(NR)));: NORMAL : PRINT " SECONDS": PRINT
5420 PRINT : PRINT "DO YOU WANT TO SORT:": PRINT
5430 PRINT "1 ALPHABETICALLY"
5440 PRINT "2 NUMERICALLY (LOW TO HIGH)"
5450 PRINT "3 NUMERICALLY (HIGH TO LOW)": PRINT
5460 L$ = "WHICH ":CHOICE = 3: GOSUB 2410:L = R
5470 PRINT : PRINT : GOTO 5010
6000 REM << ENTER HEADERS >>
6010 CALL 1013
6020 POKE 216,0
6030 NR = 1
6032 HOME
6035 PRINT "HEADERS FOR <"DB$"> DATA BASE": PRINT
6036 PRINT TAB( 10)"MAXIMUM 20 HEADERS"
6037 PRINT " HEADER NAMES MAXIMUM 15 CHARACTERS"
6040 PRINT : PRINT "AFTER LAST HEADER, PRESS TO EXIT TO MAIN MENU"
6050 PRINT
6060 PRINT "HEADER NAME FOR COLUMN #"NR": ";: CALL 768,R$(NR)
6065 IF R$(1) = "" GOTO 6010
6070 IF R$(NR) = "" OR NR >20 THEN 6110
6080 L%(NR) = LEN(R$(NR))
6090 NR = NR +1
6100 GOTO 6060
6110 NR = NR -1
6120 IF NR <1 THEN 14100
6130 GOSUB 24010: GOTO 4100
7000 REM << DATA ENTRY >>>
7010 HOME
7020 PRINT "THERE ARE NOW "NR" RECORDS"
7030 PRINT "IN THE >"DB$"< DATA FILE"
7040 HOME :NR = NR +1:R(NR) = NR
7050 PRINT "YOU ARE ENTERING RECORD # "NR
7060 PRINT "HIT '/' TO USE LAST RECORD'S ANSWER"
7070 PRINT
7080 FOR I = 1 TO NH
7090 PRINT H$(I)":";: CALL 768,N$(NR,I)
7100 IF N$(NR,I) = CHR$(47) THEN N$(NR,I) = N$(NR -1,I): PRINT N$(NR,I)
7110 L = LEN(N$(NR,I)): IF L >L%(I) THEN L%(I) = L
7120 NEXT I
7130 PRINT
7140 L$ = "MORE ": GOSUB 2510: IF YES THEN GOTO 7040
7150 F$ = "INDEX"
7160 GOSUB 24010
7170 GOTO 28010
8000 REM << SEARCH ROUTINE >>>
8010 L = 0
8020 GOSUB 21010
8070 PRINT I" MAKE CHANGES": PRINT I +1" RETURN TO THE MENU."
8080 V = PEEK(37) +2
8090 VTAB V: CALL -868: INPUT "WHICH ->";S$:S = VAL(S$)
8100 X = 0: FOR I = 1 TO NH: IF LEN(H$(I)) >X THEN X = LEN(H$(I))
8110 NEXT I:X = X +1
8120 IF S <0 OR S >NH +2 THEN 8090
8125 ON (S < = NH) GOTO 8140: ON S -NH GOTO 10010,28010
8140 HOME
8150 PRINT "PLEASE ENTER THE "H$(S): PRINT "YOU WANT TO FIND....";: CALL 768,Q$
8160 HOME : VTAB 3: INVERSE : FLASH : PRINT "PATIENCE";: NORMAL : PRINT " - HAVE "NR" RECORDS TO CHECK...": PRINT
8162 FOR W = 1 TO 500: NEXT W: HOME
8165 IF PF THEN GOSUB 2100: HOME
8170 IF PF THEN GOSUB 2010
8180 FOR J = 1 TO NR:Y = R(J)
8190 N$(Y,0) = STR$(Y)
8200 IF LEN(Q$) >0 THEN 8230
8210 IF LEN(N$(Y,S)) = 0 THEN GOSUB 11010
8220 GOTO 8240
8230 IF LEFT$(N$(Y,S), LEN(Q$)) = Q$ THEN GOSUB 11010
8240 IF NOT PF AND L +NH >20 THEN GOSUB 9010
8250 IF LF THEN J = NR
8260 NEXT J
8270 L = 0: PRINT D$"PR#0"
8280 IF LF THEN LF = 0: HOME : GOTO 8300
8290 PRINT "THAT'S ALL OF THEM. ";
8300 PRINT "NOW YOU MAY:"
8310 PRINT "1 DO MORE SEARCHES"
8320 PRINT "2 MAKE CHANGES"
8330 PRINT "3 RETURN TO THE MAIN MENU"
8340 PRINT :L$ = "WHICH ":CHOICE = 3: GOSUB 2410:S = R
8350 ON S GOTO 8020,10010,28010
9010 IF (PF) OR (AR) THEN 9030
9020 PRINT "PRESS RETURN TO CONTINUE, ESC TO ABORT";: GOTO 9050
9030 LF = PEEK( -16384): POKE -16368,0
9040 ON LF = 141 GOTO 9050: ON LF = 155 GOTO 9070: GOTO 9090
9050 LF = PEEK( -16384): IF LF <128 THEN 9050
9060 POKE -16368,0
9070 IF LF = 155 THEN LF = 1: GOTO 9100
9080 IF LF < >141 THEN 9050
9090 LF = 0
9100 IF PF = 0 AND AR = 0 THEN PRINT :L = 0: HOME
9110 RETURN
10010 HOME : VTAB 5: PRINT "ENTER THE NUMBER OF THE RECORD TO"
10020 L$ = "CHANGE ":CHOICE = NR: GOSUB 2410:J = R:Y = R(J)
10030 HOME : GOSUB 11010
10040 PRINT : PRINT "ENTER THE NUMBER OF THE FIELD YOU WANT"
10050 L$ = "TO CHANGE ":CHOICE = NH: GOSUB 2410:S = R
10060 PRINT
10070 PRINT "FROM "H$(S)": "N$(Y,S)
10080 PRINT
10090 PRINT TAB( 3)"TO "H$(S)" :";: CALL 768,N$(Y,S)
10100 HOME : GOSUB 11010
10110 PRINT
10120 L$ = "MORE CHANGES ": GOSUB 2510: IF YES THEN GOTO 10010
10130 F$ = "INDEX": GOSUB 24010: GOTO 28010
11010 LT = 60: IF PF AND L = 0 THEN PRINT TAB( 8)DB$" DATA BASE";: POKE 36, LEN(DB$) +20: PRINT TD$: PRINT :L = L +2
11015 PRINT TAB( 4 +5 *(PF >1))H$(0);J
11020 FOR I = 1 TO NH
11030 POKE 36,5 *(PF >0) +1: PRINT I" "H$(I)":";: POKE 36,X +5 *(PF >0) +5: PRINT N$(Y,I)
11040 NEXT I
11050 PRINT
11060 L = L +NH +2
11070 IF PF AND (L +NH) >(LT -1) THEN PRINT CHR$(12):L = 0
11080 RETURN
12000 REM << DELETE RECORDS >>
12010 HOME : PRINT "ENTER 0 TO RETURN TO THE MENU!":I = 0
12020 VTAB 7: CALL -958: INPUT "ENTER RECORD NUMBER TO DELETE -> ";S$:S = VAL(S$): IF I = 0 AND S$ = "0" THEN 28010
12025 IF S$ = "END" THEN 12065
12030 IF S <1 OR S >NR THEN 12020
12040 R(S) = 0:I = I +1: IF I = NR THEN 14100
12050 PRINT : PRINT "RECORD NUMBER "S" DELETED!": PRINT
12060 L$ = "MORE ": GOSUB 2510: IF YES THEN HOME : PRINT "TYPE 'END' TO TERMINATE DELETIONS!": GOTO 12020
12065 I = 1:J = 0
12070 IF R(I) = 0 THEN 12090
12080 J = J +1:R(J) = R(I)
12090 I = I +1: ON I >NR GOTO 12095: GOTO 12070
12095 HOME : VTAB 7: HTAB 13: FLASH : PRINT "": NORMAL : PRINT
12097 PRINT : PRINT : PRINT NR" RECORDS BEING RE-NUMBERED...."
12100 ON J = 0 GOTO 14100: VTAB 15: PRINT "ONE MINUTE PLEASE...":NR = J:F$ = "INDEX": GOSUB 24010: GOSUB 23010: GOTO 28010
13000 REM << INITIAL MENU >>
13010 HOME
13011 VTAB 5: HTAB 10: PRINT "FILE CABINET -PRODOS": PRINT
13012 PRINT TAB( 6)"UPDATED BY MICHAEL MOORE": PRINT
13013 PRINT "INFORMATION STORAGE AND RETRIEVAL SYSTEM"
13015 PRINT : HTAB 3
13020 PRINT "SELECT FROM:": PRINT
13030 IF NOT NR THEN J = 1: GOTO 13050
13040 FOR J = 1 TO NR: PRINT J" "R$(J): NEXT J: PRINT
13050 PRINT J" QUIT"
13060 PRINT J +1" CREATE A NEW DATA BASE"
13070 IF J >1 THEN PRINT J +2" DELETE A DATA BASE"
13080 PRINT : HTAB 3
13090 INPUT "WHICH -> ";S$:S = VAL(S$)
13100 IF S NR THEN PRINT CHR$(7);: VTAB PEEK(37): CALL -868: GOTO 13090
13125 VTAB 22: CALL -868: HTAB 6: FLASH : PRINT "LOADING";: NORMAL : PRINT " - ONE MOMENT PLEASE"
13130 FD$ = R$(S)
13140 GOTO 4010
13150 PRINT
13510 VTAB 20: CALL -958
13520 IF J = 0 THEN J = 1
13525 PRINT : PRINT : PRINT "MAXIMUM 10 CHARACTERS, PLEASE!": PRINT
13527 PRINT SPC( 5);"NAME MUST START WITH A LETTER": PRINT
13530 INPUT "NAME FOR NEW DATA BASE FILE :";R$(J)
13540 IF NOT LEN(R$(J)) THEN 13010
13542 IF ASC(R$(J)) <65 GOTO 13510
13543 FOR T = 1 TO LEN(R$(J))
13544 IF ASC( MID$ (R$(J),T,T)) >64 AND ASC( MID$ (R$(J),T,T)) <91 GOTO 13551
13545 IF ASC( MID$ (R$(J),T,T)) >47 AND ASC( MID$ (R$(J),T,T)) <58 GOTO 13551
13546 IF ASC( MID$ (R$(J),T,T)) = 46 GOTO 13551
13547 VTAB 20 - CALL -958: PRINT "FILE NAME MUST CONFORM TO PRODOS RULES"
13548 PRINT " ONLY LETTERS, NUMERAL AND PERIODS ARE ALLOWED"
13549 T = LEN(R$(J)):R$(J) = ""
13550 PRINT " PRESS ANY KEY TO CONTINUE ";: GET K$
13551 NEXT T
13552 IF R$(J) = "" GOTO 13010
13554 FD$ = R$(J)
13556 PRINT D$"CREATE";PX$ +FD$
13558 NR = J: GOSUB 24010
13560 DB$ = R$(J -1): GOTO 4010
14000 REM << FILES ROUTINE >>
14010 PRINT : INPUT "DELETE WHICH -> ";S$:S = VAL(S$)
14020 IF S <1 OR S >J -1 THEN PRINT CHR$(7);: VTAB PEEK(37) -1: CALL -868: GOTO 14010
14030 HOME : VTAB (9): PRINT "READY TO DELETE ";: INVERSE : PRINT R$(S);: NORMAL : PRINT ".": PRINT
14040 PRINT "ONCE DELETED, THIS DATA CANNOT BE"
14050 PRINT "RECOVERED. ARE YOU SURE THAT YOU"
14060 PRINT "WANT TO DELETE IT? (Y/N) ";: INPUT "";S$
14070 IF S$ < >"Y" THEN 13010
14080 HOME : VTAB 12: INVERSE : PRINT "[ DELETING "R$(S)" DATABASE ]": NORMAL
14090 FD$ = R$(S)
14100 ONERR GOTO 14170
14110 F$ = "RPTFMTNAME"
14115 PRINT D$"VERIFY";PX$ +FD$ +"/" +F$
14120 GOSUB 23010
14125 VTAB 15: CALL -868: PRINT "DELETING ";PX$ +FD$ +"/" +F$
14130 PRINT D$"DELETE";PX$ +FD$ +"/" +F$
14140 FOR I = 1 TO NR
14145 VTAB 15: CALL -868: PRINT "DELETING ";PX$ +FD$ +"/" +"RPTFMT" +R$(I)
14150 PRINT D$"DELETE";PX$ +FD$ +"/" +RPTFMT"+R$(I)
14160 NEXT I
14170 POKE 216,0: CALL 1013
14175 VTAB 15: CALL -868: PRINT "DELETING";PX$ +FD$ +"/" +"INDEX"
14180 PRINT D$"DELETE";PX$ +FD$ +"/" +"INDEX"
14185 VTAB 15: CALL -868: PRINT "DELETING ";PX$ +FD$ +"/" +"HEADER"
14190 PRINT D$"DELETE";PX$ +FD$ +"/" +"HEADER"
14200 R$(0) = FD$
14210 F$ = "": GOSUB 23010
14212 IF NR -1 = >1 GOTO 14221
14215 VTAB 15: CALL -868: PRINT "DELETING ";PX$ +"BASENAMES"
14220 PRINT D$"DELETE";PX$ +"BASENAMES"
14221 VTAB 15: CALL -868: PRINT "DELETING ";PX$ +FD$
14222 PRINT D$"DELETE";PX$ +FD$
14225 IF NR -1 <1 GOTO 3050
14229 VTAB 15: CALL -868: PRINT "SAVING REMAINING FILE NAMES"
14230 I = 0:J = 1
14240 IF R$(J) = R$(0) THEN 14255
14250 I = I +1:R$(I) = R$(J)
14255 J = J +1: ON J >NR GOTO 14260: GOTO 14240
14260 NR = I: GOSUB 24010
14270 GOTO 13010
15000 REM << REPORT ROUTINE >>
15010 HOME :E = 0:WIDE = 0:L%(0) = 4:HR = 0
15020 FOR I = 0 TO (NH +1) *3:K(I) = 0: NEXT I:L%(NH +1) = 0:PAGE = 0:TF = 0
15030 FOR I = 1 TO NH:AC(I) = 0: NEXT I:HC = 0:GT = 0: ON E GOTO 15500: GOTO 22010
15100 POKE 34, PEEK(37) +2: HOME : IF E = 0 THEN INPUT "ENTER REPORT FORMAT NAME: ";RN$(NN)
15120 FOR I = 1 TO NH +1:K(I *3 -2) = 0:K(I *3 -1) = 0:K(I *3) = 0: VTAB I: HTAB 31: CALL -868: NEXT I: CALL -958:K(0) = 0: HOME
15130 RH = 0: INPUT "ENTER TAB FOR LEFT MARGIN (=>1) ";K$:L = VAL(K$): IF L <1 THEN L = 1
15140 FOR I = 1 TO (NH +1) *3 STEP 3
15150 HOME :V = PEEK(37) +1: VTAB 23: INVERSE : PRINT "PRESS ALONE TO EXIT FORMAT...": NORMAL
15155 VTAB V: PRINT "ENTER HEADER # FOR POSITION #"(I +2)/3" ";: INPUT "";K$: CALL -958: IF NOT LEN(K$) THEN I = (NH +1) *3: GOTO 15220
15160 K(I) = VAL(K$): IF K(I) <0 OR K(I) >NH THEN 15150
15180 PRINT :L$ = "TOTAL ON " +H$(K(I)): GOSUB 2510: CALL -958: PRINT : IF YES THEN K(I +2) = 1:K(0) = 1:TF = 1:L = L +2: GOTO 15190
15185 L$ = "RIGHT JUSTIFY DATA?": GOSUB 2510: IF YES THEN K(I +2) = 2
15190 K(I +1) = L:L = L +L%(K(I)) +2:WIDE = L -2:RH = RH +1
15200 VTAB K(I) +1: HTAB 32: PRINT (I +2)/3 TAB( 36)K(I +1);: IF K(I +2) = 1 THEN PRINT TAB( 39)"T";
15202 IF K(I +2) = 2 THEN PRINT TAB( 39)"F";
15205 PRINT : IF WIDE >131 -(10 *K(0)) THEN ER = 1:I = (NH +1) *3
15220 NEXT I:I = RH *3 +1: IF NOT ER THEN 15250
15230 ER = 0: HOME : PRINT "THIS REPORT IS TOO WIDE!":L$ = "TRY AGAIN?": GOSUB 2510: ON YES GOTO 15120: TEXT : GOTO 28010
15250 V = NH +2: ON K(0) = 0 GOTO 15300: HOME :L$ = "GRAND TOTAL?": GOSUB 2510:V = NH +2: IF NOT YES THEN K(0) = 0: GOTO 15300
15252 FOR J = 1 TO (NH +1) *3 STEP 3: ON K(J +2) = 1 GOTO 15254: GOTO 15264
15254 HOME : PRINT "ADD OR SUBTRACT ";: INVERSE : PRINT H$(K(J)): NORMAL : PRINT "TO/FROM GRAND TOTAL (A/S) ";: INPUT A$
15256 IF A$ = "A" THEN K(J +2) = 1:A$ = "+T": GOTO 15262
15258 IF A$ = "S" THEN K(J +2) = -1:A$ = "-T": GOTO 15262
15260 GOTO 15254
15262 VTAB K(J) +1: HTAB 38: PRINT A$
15264 NEXT J
15270 FOR J = 1 TO RH: IF K(3 *J) = 1 OR K(3 *J) = -1 THEN IF L%(K(3 *J -2)) >L%(NH +1) THEN L%(NH +1) = L%(K(3 *J -2)) +1
15275 NEXT J
15280 WIDE = L +L%(NH +1): IF WIDE >131 THEN 15230
15290 K(I) = NH +1:K(I +1) = L: VTAB V: PRINT "TOTAL" TAB( 32)RH +1 TAB( 36)K(I +1) +1:V = V +1
15300 VTAB V: PRINT "RIGHT MARGIN" TAB( 36)WIDE -1
15310 HOME :L$ = "IS THIS SATISFACTORY?": GOSUB 2510: ON YES GOTO 15500: GOTO 15120
15500 TEXT : IF TF THEN TF = 0: PRINT : GOSUB 27010
15505 GOSUB 21010
15507 POKE 34, PEEK(37) +1: HOME
15508 L$ = "FIRST COLUMN ONLY (IF ALPHA), SEPERATE DIFFERENT LETTERS?": GOSUB 2510:SEP = 0: IF YES THEN SEP = 1
15509 POKE 34, PEEK(37) -2: HOME
15510 L$ = "SELECT ALL RECORDS?": GOSUB 2510: IF YES THEN Q$ = "ALL": GOTO 15620
15520 HOME : INPUT "SELECT RECORDS BY WHICH HEADER #";S$:S = VAL(S$): IF S <0 OR S >NH THEN PRINT CHR$(7): GOTO 15520
15530 VTAB S +3: HTAB 20: INVERSE : PRINT "1ST": NORMAL
15535 HOME :L$ = "'OR' 2ND HEADER?": GOSUB 2510: CALL -958: IF NOT YES THEN 15560
15540 PRINT : INPUT "ENTER # OF 'OR' HEADER ->";K$:K = VAL(K$): IF K <0 OR K >NH THEN PRINT CHR$(7);: VTAB PEEK(37) -1: CALL -958: GOTO 15540
15550 HR = 1: GOTO 15575
15560 HOME :L$ = "'AND' 2ND HEADER?": GOSUB 2510: CALL -958: IF NOT YES THEN K$ = "NO":HR = 1: GOTO 15590
15570 PRINT : INPUT "ENTER # OF 'AND' HEADER ->";K$:K = VAL(K$):HR = 2: IF K <0 OR K >NH THEN PRINT CHR$(7);: VTAB PEEK(37) -1: CALL -958:HR = 0: GOTO 15570
15575 IF K = S THEN VTAB S +3: HTAB 20: FLASH : PRINT "1ST": NORMAL :V = HR:HR = 0:K$ = "": ON V GOTO 15535,15560
15580 VTAB K +3: HTAB 20: INVERSE : IF HR = 1 THEN PRINT "'OR' 2ND": GOTO 15590
15585 PRINT "'AND' 2ND"
15590 NORMAL : HOME : PRINT "ENTER RECORDS TO REPORT FOR "H$(S)"=";: INPUT Q$: PRINT : IF LEN(Q$) = 0 THEN Q$ = "@"
15600 ON K$ = "NO" GOTO 15620: IF HR = 1 THEN PRINT "OR ";: GOTO 15615
15610 PRINT "AND ";
15615 PRINT H$(K)"=";: CALL 768,K$: IF LEN(K$) = 0 THEN K$ = "@"
15620 TEXT : HOME : IF WIDE THEN 15630
15622 FOR J = 1 TO RH: IF K(3 *J) = 1 OR K(3 *J) = -1 THEN IF L%(K(3 *J -2)) >L%(NH +1) THEN L%(NH +1) = L%(K(3 *J -2)) +1
15624 NEXT J
15626 WIDE = K(RH *3 -1) +L%(K(RH *3 -2)): IF K(RH *3 +2) THEN WIDE = K(RH *3 +2) +L%(NH +1)
15630 IF PF THEN PF = 1 +(WIDE >79): GOTO 15646
15635 IF WIDE <40 THEN 15660
15640 PRINT CHR$(7)"THIS REPORT IS TOO WIDE FOR THE MONITOR": PRINT "SCREEN. DO YOU WANT YOUR PRINTER":L$ = "ON? ": GOSUB 2510: IF NOT YES THEN POKE 34,0: GOTO 15800
15641 IF NOT LEN(TD$) THEN GOSUB 2210
15645 T = S:S = 0: GOSUB 29020:S = T: GOTO 15630
15646 HOME : PRINT : PRINT "CONTINUOUS REPORT WITHOUT SPACING":L$ = "BETWEEN THE LINES?": GOSUB 2510:LC = 0:LT = 60: IF YES = 0 THEN GOSUB 2480
15650 PRINT : INPUT "ENTER PAGE # OF FIRST PAGE -> ";R$:PAGE = VAL(R$) -1: IF PAGE <0 THEN PAGE = 0
15655 GOSUB 2100
15660 IF PF = 0 THEN GOSUB 2480
15661 TEXT : HOME : FOR I = 1 TO RH:AC(I) = 0
15662 IF K(3 *I) = 1 THEN T9 = 1
15665 NEXT I
15670 IF PF THEN GOSUB 2010
15675 GOSUB 18010
15679 LS = 1
15680 FOR J = 1 TO NR:Y = R(J)
15685 N$(Y,0) = STR$(J)
15690 IF Q$ = "ALL" THEN 15760
15695 ON HR GOTO 15705,15740
15705 IF Q$ = "@" AND LEN(N$(Y,S)) >0 THEN 15760
15710 IF LEFT$(N$(Y,S), LEN(Q$)) = Q$ THEN 15760
15715 IF K$ = "NO" THEN 15765
15720 IF K$ = "@" AND LEN(N$(Y,K)) >0 THEN 15760
15725 IF LEFT$(N$(Y,K), LEN(K$)) < >K$ THEN 15765
15730 GOTO 15760
15740 IF Q$ = "@" AND LEN(N$(Y,S)) >0 THEN 15750
15745 IF LEFT$(N$(Y,S), LEN(Q$)) < >Q$ THEN 15765
15750 IF K$ = "@" AND LEN(N$(Y,K)) >0 THEN 15760
15755 IF LEFT$(N$(Y,K), LEN(K$)) < >K$ THEN 15765
15760 GOSUB 16010
15762 IF LS = LC THEN PRINT :LS = 0
15765 IF PF <1 THEN IF LN >16 THEN GOSUB 9010: IF NOT LF AND J LT THEN GOSUB 18010
15779 LS = LS +1
15780 NEXT J
15785 IF LF THEN LF = 0: PRINT : GOTO 15795
15790 ON T9 GOSUB 17020
15795 PRINT : PRINT D$"PR#0"
15800 ON E GOTO 15815
15805 PRINT : PRINT "DO YOU WANT TO SAVE THE FORMAT":L$ = "FOR THIS REPORT TO DISK ": GOSUB 2510
15810 IF YES THEN E = 1: GOSUB 19010
15815 POKE 216,0: PRINT : PRINT "MORE REPORTS USING THE "RN$(NN):L$ = "FORMAT ": GOSUB 2510
15820 IF YES THEN E = 1:PAGE = 0:LC = 0: GOTO 15030
15825 GOTO 28010
16010 FOR I = 1 TO RH: ON ABS(K(3 *I)) GOTO 16100,16030
16015 IF SEP = 1 AND J < >1 AND I = 1 THEN IF LEFT$(N$(Y,K(3 *I -2)),1) < > LEFT$(N$(R(J -1),K(3 *I -2)),1) THEN PRINT
16020 POKE 36,K(3 *I -1): PRINT N$(Y,K(3 *I -2));: GOTO 16040
16030 POKE 36,K(3 *I -1) +L%(K(3 *I -2)) - LEN(N$(Y,K(3 *I -2))): PRINT N$(Y,K(3 *I -2));
16040 NEXT I
16050 IF K(0) < >1 OR HC = 0 THEN 16080
16060 DT = HC:T = 0: GOSUB 27510
16070 POKE 36,T: PRINT DT$;:GT = GT +HC:HC = 0
16080 LN = LN +1: PRINT : RETURN
16100 N = 3 *I -2: IF LEN(N$(Y,K(N))) = 0 THEN 16040
16110 DT = VAL(N$(Y,K(N))):T = 0: GOSUB 27510:V = VAL(DT$): POKE 36,T: PRINT DT$;:AC(I) = AC(I) +V:HC = HC +(V *K(3 *I)): GOTO 16040
17010 POKE 36,K(2): FOR I = K(2) TO WIDE -1: PRINT "-";: NEXT I: PRINT : RETURN
17020 GOSUB 17010: FOR I = 1 TO RH: IF AC(I) = 0 THEN 17070
17050 DT = AC(I):T = 0: GOSUB 27510: POKE 36,T: PRINT DT$;
17070 NEXT I
17080 ON GT = 0 GOTO 17090:DT = GT:T = 0: GOSUB 27510: POKE 36,T: PRINT DT$;
17090 PRINT : RETURN
18010 HOME : IF LN AND LEN(TD$) >0 THEN PRINT CHR$(12)
18012 LS = 0
18015 T = (WIDE +K(2))/2 - LEN(DB$) -8: IF T <1 THEN T = 1
18020 LN = 0: POKE 36,T: PRINT CHR$(14) +FD$" DATA BASE":LN = LN +1
18030 POKE 36,K(2): PRINT RN$(NN)" REPORT FOR ";: IF Q$ = "ALL" THEN PRINT "ALL RECORDS":LN = LN +1: GOTO 18110
18040 PRINT H$(S)" ";: IF Q$ < >"@" THEN PRINT ": "Q$;
18050 IF K$ = "NO" THEN PRINT :LN = LN +1: GOTO 18110
18060 PRINT :LN = LN +1
18070 IF HR = 1 THEN POKE 36,K(2): PRINT "OR ";
18080 IF HR = 2 THEN POKE 36,K(2): PRINT "AND ";
18090 PRINT H$(K);: IF K$ < >"@" THEN PRINT ": "K$;
18100 PRINT :LN = LN +1
18110 PAGE = PAGE +1: POKE 36,T: PRINT TD$;
18115 IF NOT PF THEN PRINT : GOTO 18130
18120 POKE 36,WIDE -5 - LEN( STR$(PAGE)): PRINT "PAGE "PAGE:LN = LN +1
18130 GOSUB 17010
18140 FOR I = 1 TO RH
18150 POKE 36,K(3 *I -1): PRINT H$(K(3 *I -2));
18160 NEXT I
18170 IF K(0) = 1 THEN POKE 36,K(3 *I -1) +3: PRINT "TOTAL";
18180 PRINT : GOSUB 17010
18190 LN = LN +3: RETURN
19000 REM << WRITE FILES >>
19010 NS = NR
19020 PRINT
19030 F$ = "RPTFMT" +RN$(NN)
19040 NR = 3 *RH +3
19050 FOR I = 1 TO NR:R$(I) = STR$(K(I)): NEXT I
19060 R$(I -3) = STR$(K(0))
19070 R$(I -1) = STR$(FT)
19080 GOSUB 24010: GOSUB 25010
19090 RETURN
20000 REM << READ FILES >>
20010 F$ = "RPTFMT" +RN$(NN)
20020 GOSUB 23010
20030 RH = (NR -3)/3: FOR I = 1 TO NR:K(I) = VAL(R$(I)): NEXT I
20040 K(0) = VAL(R$(I -3)):K(I -3) = NH +1
20050 FT = VAL(R$(I -1))
20060 NR = NS
20070 GOSUB 21010: PRINT : GOTO 15508
21000 REM << SELECT FROM >>
21010 HOME : PRINT "SELECT FROM:": PRINT
21020 IF MF = 0 THEN PRINT "0 "H$(0)
21030 FOR I = 1 TO NH: PRINT I" "H$(I): NEXT I: PRINT
21040 MF = 0
21050 RETURN
22010 NN = 0: FOR I = 0 TO 21:RN$(I) = "": NEXT I:NS = NR
22020 F$ = "RPTFMTNAME"
22030 ONERR GOTO 22160
22035 PRINT D$;"VERIFY";PX$ +FD$ +"/" +F$
22040 GOSUB 23010
22050 POKE 216,0
22060 FOR I = 1 TO NR:RN$(I) = R$(I): NEXT I
22070 HOME : PRINT "SELECT FROM:": PRINT
22080 FOR I = 1 TO NR: PRINT I" "R$(I): NEXT I: PRINT
22090 PRINT I" CREATE A NEW REPORT FORMAT"
22100 PRINT I +1" DELETE A REPORT FORMAT": PRINT I +2" RETURN TO THE MENU": PRINT
22104 PRINT I +3" CHANGE PRINTER STATUS"
22106 PRINT " CURRENT STATUS IS ";: IF PF THEN INVERSE : PRINT "ON": NORMAL : GOTO 22110
22108 INVERSE : PRINT "OFF": NORMAL : PRINT
22110 L$ = "WHICH ":CHOICE = I +3: GOSUB 2410:S = R
22115 IF S = I +2 THEN NR = NS: GOTO 28010
22116 IF S = I +3 THEN GOSUB 29110: GOTO 22070
22120 NN = S
22130 IF S >
23010 FF = 0: IF F$ < >"INDEX" THEN FF = 1
23015 Q$ = PX$ +FD$ +"/" +F$
23017 IF F$ = "" THEN Q$ = PX$ +"BASENAMES"
23020 PRINT D$"OPEN";Q$
23030 PRINT D$"READ";Q$
23040 INPUT NR
23050 FOR J = 1 TO NR
23060 ON FF GOTO 23130
23070 FOR I = 1 TO NH
23080 CALL 768,N$(J,I)
23090 L = LEN(N$(J,I)): IF L >L%(I) THEN L%(I) = L
23100 NEXT I
23110 R(J) = J
23120 GOTO 23140
23130 CALL 768,R$(J)
23140 NEXT J
23150 PRINT D$"CLOSE"
23160 FF = 0
23170 RETURN
24010 NR$ = RIGHT$("00000" + STR$(NR),5)
24020 FF = 0: IF F$ < >"INDEX" THEN FF = 1
24025 ONERR GOTO 60010
24030 Q$ = PX$ +FD$ +"/" +F$
24032 IF F$ = "" THEN Q$ = PX$ +"BASENAMES"
24035 PRINT D$"CLOSE"
24040 PRINT D$"OPEN"Q$: PRINT D$"WRITE"Q$
24050 PRINT NR$
24060 FOR J = 1 TO NR
24070 ON FF GOTO 24130
24080 Y = R(J)
24090 FOR I = 1 TO NH
24100 PRINT N$(Y,I)
24110 NEXT I
24120 GOTO 24140
24130 PRINT R$(J)
24140 NEXT J
24150 PRINT D$"CLOSE"
24160 FF = 0
24170 RETURN
25010 NR = NN:I = 0
25020 F$ = "RPTFMTNAME"
25030 I = I +1: IF I >
26010 L = 0:LT = 60:AR = 0: HOME :X = 0: FOR I = 1 TO NH: IF LEN(H$(I)) >X THEN X = LEN(H$(I))
26020 NEXT I: IF PF THEN GOSUB 2100: HOME : GOTO 26040
26025 VTAB 3: PRINT "HOW DO YOU WISH TO 'LIST ALL RECORDS'?": PRINT : PRINT TAB( 8)"1. SCREEN AT A TIME."
26030 PRINT TAB( 8)"2. SCROLL ALL RECORDS.": PRINT : PRINT
26035 L$ = " WHICH ":CHOICE = 2: GOSUB 2410:AR = R -1: HOME
26040 IF (PF) OR (AR) THEN PRINT "PRESS TO STOP/START...": PRINT "PRESS TO ABORT...": POKE 34,3
26045 HOME : IF PF THEN GOSUB 2010
26050 FOR J = 1 TO NR:Y = R(J)
26060 GOSUB 11010
26065 IF (PF) OR (AR) THEN 26140
26070 IF AR = 0 AND L +NH >20 THEN 26130
26080 NEXT J
26085 IF PF THEN PRINT CHR$(12): POKE 34,0: HOME
26090 PRINT D$"PR#0"
26100 IF LF THEN LF = 0: GOTO 28010
26110 INPUT "PRESS RETURN FOR MENU...";L$
26120 GOTO 28010
26130 IF J = NR THEN 26080
26140 GOSUB 9010
26150 IF LF THEN J = NR
26160 GOTO 26080
27010 HOME : PRINT "SELECT NUMERICAL FORMAT:": PRINT
27020 PRINT "1. INTEGER X"
27030 PRINT "2. 1 DECIMAL PLACE X.X"
27040 PRINT "3. 2 DECIMAL PLACES X.XX"
27050 PRINT :L$ = "WHICH ":CHOICE = 3: GOSUB 2410: PRINT
27060 FT = R: RETURN
27510 IF NOT FT THEN 27620
27520 ON FT GOTO 27530,27540,27550
27530 DT = SGN(DT) * INT( ABS(DT) +.5): GOTO 27560
27540 DT = SGN(DT) * INT( ABS(DT) *10 +.5)/10:T = T -2: GOTO 27560
27550 DT = SGN(DT) * INT( ABS(DT) *100 +.5)/100:T = T -3
27560 P1 = INT( ABS(DT)): IF DT <0 THEN T = T -1
27570 P2 = INT(( ABS(DT) -P1) *100 +.5):DT$ = ""
27580 FOR L = 1 TO L%(K(3 *I -2)) -1:T = T +(P1 < INT(10 ^L)): NEXT
27590 DT$ = STR$( ABS(DT)): IF P1 = 0 THEN DT$ = "0" +DT$
27595 IF DT <0 THEN DT$ = "-" +DT$
27597 ON FT = 1 GOTO 27620
27600 IF P2 = 0 THEN DT$ = DT$ +".0": IF FT = 3 THEN DT$ = DT$ +"0": GOTO 27620
27610 IF FT = 3 AND ( INT(P2/10) = P2/10) THEN DT$ = DT$ +"0"
27620 T = K(3 *I -1) +T: RETURN
28000 REM << MAIN MENU >>
28010 TEXT : GOTO 28110
28100 CALL 1013
28110 HOME
28120 IF PF THEN PF = 1
28140 PRINT " ***** FILE CABINET - PRODOS *****"
28150 PRINT
28160 PRINT "CURRENT DATA BASE:": PRINT TAB( 16 -( LEN(FD$)/2))">>> "FD$" <<<"
28170 PRINT : PRINT "CURRENTLY CONTAINS: "NR" RECORDS": PRINT "ROOM FOR "B -NR" MORE RECORDS"
28180 PRINT
28190 PRINT "THE PRINTER IS ";: IF NOT PF GOTO 28200
28195 FLASH : PRINT "ON": NORMAL : GOTO 28210
28200 PRINT "OFF"
28210 PRINT
28220 PRINT "1. SELECT DIFFERENT DATA BASE"
28230 PRINT "2. ENTER RECORDS"
28240 PRINT "3. SEARCH AND/OR CHANGE DATA"
28250 PRINT "4. DELETE RECORDS"
28260 PRINT "5. REPORT"
28270 PRINT "6. SORT >"FD$"< DATA BASE"
28280 PRINT "7. LIST ALL RECORDS"
28290 PRINT "8. TURN PRINTER ";: IF PF THEN PRINT "OFF": GOTO 28310
28300 PRINT "ON"
28310 PRINT "9. QUIT"
28320 PRINT
28330 POKE 216,0: PRINT "WHICH -> ?"
28340 VTAB 21: HTAB 11: INPUT "";MS$:MS = VAL(MS$)
28500 IF MS <1 OR MS >9 THEN VTAB 21: HTAB 11: CALL -958: PRINT "?": GOTO 28340
28510 CALL -958: IF NR THEN 28540
28520 IF MS <3 OR MS >7 THEN 28540
28530 PRINT : PRINT "THERE ARE NO RECORDS ON FILE":MS = 0
28535 FOR Z = 1 TO 1500: NEXT Z: GOTO 28500
28540 ON MS GOTO 3050,7010,8010,12010,15010,5400,26010,29010,31005
29000 REM << PRINTER FLAG >>
29010 IF PF THEN PF = 0:LN = 0: GOTO 29030
29020 PF = 1
29030 IF MS = 0 THEN HOME : RETURN
29035 VTAB 9: HTAB 16: CALL -868: IF NOT PF GOTO 29040
29038 FLASH : PRINT "ON": NORMAL : GOTO 29050
29040 PRINT "OFF"
29050 VTAB 18: HTAB 17: CALL -868: IF PF THEN PRINT "OFF": GOTO 29070
29060 PRINT "ON"
29070 MS = 0: GOTO 28500
29100 REM << SET PRINTER MODE >>
29110 IF PF THEN PF = 0:LN = 0: GOTO 29130
29120 PF = 1
29130 RETURN
30000 REM << DELETE FILE >>
30010 HOME : PRINT "SELECT FROM:": PRINT
30020 FOR I = 1 TO NR: PRINT I" "R$(I): NEXT I: PRINT
30030 L$ = "DELETE WHICH NUMBER ":CHOICE = I -1: GOSUB 2410:S = R
30040 HOME : VTAB 10: PRINT "YOU HAVE SELECTED THE OPTION TO DELETE": INVERSE : PRINT RN$(S)" FORMAT": NORMAL
30050 L$ = "IS THIS CORRECT": GOSUB 2510: IF NOT YES THEN NR = NS: GOTO 28010
30060 F$ = "RPTFMT" +RN$(S)
30065 Q$ = PX$ +FD$ +"/" +F$
30070 PRINT D$"DELETE";Q$
30075 PRINT D$"CLOSE"
30080 IF S = NR THEN 30100
30090 FOR I = S TO NR -1:RN$(I) = RN$(I +1): NEXT I
30100 NR = NR -1:F$ = "RPTFMTNAME": IF NR <1 THEN 30130
30110 I = 0: GOSUB 25030
30120 GOTO 22010
30130 Q$ = PX$ +FD$ +"/" +F$
30132 PRINT D$"CLOSE"
30135 PRINT D$;"DELETE";Q$
30140 NR = NS: GOTO 28010
31000 REM << QUIT ROUTINE >>
31005 IF NR = 0 AND FD$ < >"" GOTO 38010: REM PREVENT FILES WITH ZERO RECORDS
31010 TEXT : HOME : VTAB 10
31020 HTAB 3: PRINT "A BACKUP COPY IS RECOMMENDED AFTER EACH CHANGE SESSION!"
31030 VTAB 15: HTAB 3
31040 PRINT "TO ACTIVATE THE PRODOS 'FILER' PROGRAM WHICH MUST HAVE BEEN TRANSFERRED TO THIS DISK, ANSWER 'Y' TO THE REQUEST FOR BACKUP.": PRINT : VTAB 20
31050 L$ = "BACKUP": GOSUB 2510
31060 IF NOT YES THEN TEXT : HOME : END
31070 ONERR GOTO 31110
31080 PRINT D$;"VERIFY";PX$;"FILER"
31090 PRINT D$"-";PX +"FILER/"
31100 END
31110 TEXT : HOME : VTAB 10
31120 PRINT "THE PRODOS 'FILER' WAS NOT FOUND ON PATH ";PX$;"FILER"
31130 PRINT : PRINT "IF A BACKUP COPY IS DESIRED, TAKE CORRECTIVE ACTION AND INITIATE THE COPY PROCESS FROM 'FILER'"
31160 POKE 216,0
31170 END
32000 REM << SETUP POKES >>
32010 FOR I = 1013 TO 1022: READ S: POKE I,S: NEXT I
32020 I = 0
32030 RETURN
32040 DATA 104,168,104,166,223,154,72,152,72,96
33040 REM
33075 GOSUB 60110: REM SETUP DATE AFTER CLEAR
34000 FOR I = 1 TO 71: READ I%: POKE 768 +I -1,I%: NEXT I: RESTORE : RETURN
34010 DATA 32,190,222,32,227,223,36,17,208,5,162,0,76,15,3,133,133,132,134,165
34020 DATA 184,164,185,133,135,132,136,32,44,213,173,0,2,201,3,208,3,76,99,216
34030 DATA 169,0,133,13,133,14,169,0,160,2,32,237,227,32,61,231,32,123,218,165
34040 DATA 135,164,136,133,184,132,185,32,183,0,96,0,0,0,0,0,0,0,0,0
38000 REM << ZERO RECORDS >>
38010 HOME : VTAB 10
38020 PRINT "---- WARNING ----": PRINT
38030 PRINT "CREATION OF FILES WITH ZERO RECORDS RESULTS IN ERROR CONDITIONS LATER WHEN RE-STARTING OR DELETING."
38040 PRINT
38050 PRINT "CREATE AT LEAST ONE RECORD WITH DATA TO PREVENT FUTURE PROBLEMS": PRINT
38060 PRINT "PRESS ANY KEY TO RETURN TO THE MAIN MENU"
38070 GET K$
38080 GOTO 28010
60000 REM << ERROR TRAP FOR INVALID INPUT >>
60010 TEXT : HOME : VTAB 10
60020 PRINT " INVALID INPUT": PRINT
60030 PRINT "PRODOS REQUIRES THAT FILE NAMES BEGIN WITH A LETTER AND CONTAIN ONLY LETTERS, NUMBERS OR PERIODS."
60040 PRINT : PRINT "NO SPACES ARE PERMITTED,NAMES MUST NOT EXCEED 15 CHARACTERS IN LENGTH - INCLUDING ANY ASSIGNED BY THE PROGRAM."
60050 PRINT "SIX CHARACTERS ARE ADDED BY THE PROGRAM WHEN SAVING REPORT NAMES."
60060 PRINT : PRINT " PRESS ANY KEY TO RETURN TO REPORT MENU ";: GET K$
60070 POKE 216,0: GOTO 22010
60100 REM << READ PRODOS DATE >>
60110 MD$ = "???JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
60120 DD = PEEK(49040) - INT( PEEK(49040)/32) *32
60130 YY = INT( PEEK(49041)/2)
60140 MM = ( PEEK(49041) -YY *2) *8 + INT( PEEK(49040)/32)
60150 MM$ = MID$ (MD$,MM *3 +1,3)
60160 TD$ = MM$ +" " + STR$(DD) +", 19" + STR$(YY)
60170 RETURN
60180 ::::
61000 REM *********************
61010 REM FILE CABINET
61020 REM PRODOS
61030 REM ---------------------
61040 REM CONVERTED BY
61050 REM MICHAEL MOORE
61060 REM JUNE 1984
61070 REM =====================
61080 REM BASED ON
61090 REM FILE CABINET-MACH 5
61100 REM BY ED AYMOND
61110 REM AND BOB MATZINGER
61120 REM AS A MODIFICATION
61130 REM OF EARLIER VERSIONS
61140 REM *********************
61150 REM APPLE CORPS OF DALLAS
Text found in 143_Volume_143.dsk/FILES.bas:
10 REM << FILE CABINET >>
20 REM << FILES MODULE >>
30 REM << PRODOS VERSION >>
40 REM << CONVERTED BY >>
50 REM << MICHAEL MOORE >>
60 REM << MAY 1984 >>
70 :
90 IF FLAG = 1 THEN FLAG = 0: GOTO 14100
100 GOTO 13010: REM << FILE ROUTINE
2400 REM <<<< GET CHOICE >>>>>
2410 PRINT L$"->":V = PEEK(37)::H = LEN(L$) +3
2420 VTAB V: HTAB H: CALL -868: INPUT "";R$:R = VAL(R$): CALL -958
2440 PRINT : RETURN
2500 REM <<<< GET YES/NO ANSWER >>>>
2510 V = PEEK(37) +1
2515 PRINT L$" (Y/N)"
2520 IF V >23 THEN V = 23
2530 VTAB V: HTAB ( LEN(L$) +8): CALL -868: INPUT A$: IF A$ = "Y" THEN YES = 1: RETURN
2540 IF A$ = "N" THEN YES = 0: RETURN
2550 INVERSE : PRINT " PRESS 'Y' OR 'N'...": NORMAL : IF V = >23 THEN V = 22
2560 GOTO 2530
13000 REM <<< LIST DATA BASES >>>>
13010 HOME
13020 VTAB 5: HTAB 10: PRINT "FILE CABINET - PRODOS": PRINT
13025 HTAB 12: PRINT "FILE DELETION MENU": PRINT
13030 POKE 216,0
13040 PRINT "SELECT FROM:": PRINT
13050 IF NOT NR THEN J = 1: GOTO 13070
13060 FOR J = 1 TO NR: PRINT J" "R$(J): NEXT J: PRINT
13070 PRINT J;" RETURN TO MAIN MENU": PRINT
14000 REM <<< FILES ROUTINE >>>>
14010 PRINT : INPUT "DELETE WHICH -> ";S$:S = VAL(S$)
14015 IF S = J THEN PRINT D$;"CHAIN";PX$ +"MAIN"
14020 IF S <1 OR S >J -1 THEN PRINT CHR$(7);: VTAB PEEK(37) -1: CALL -868: GOTO 14010
14030 HOME : VTAB (9): PRINT "READY TO DELETE ";: INVERSE : PRINT R$(S);: NORMAL : PRINT ".": PRINT
14040 PRINT "ONCE DELETED, THIS DATA CANNOT BE"
14050 PRINT "RECOVERED. ARE YOU SURE THAT YOU"
14060 PRINT "WANT TO DELETE IT? (Y/N) ";: INPUT "";S$
14070 IF S$ < >"Y" THEN GOTO 13010
14080 HOME : VTAB 12: INVERSE : PRINT "[ DELETING "R$(S)" DATABASE ]": NORMAL
14090 FD$ = R$(S)
14100 ONERR GOTO 14170
14110 F$ = "RPTFMTNAME"
14115 PRINT D$"VERIFY";PB$ +FD$ +"/" +F$
14120 GOSUB 23010
14125 VTAB 15: CALL -868: PRINT "DELETING ";PB$ +FD$ +"/" +F$
14130 PRINT D$"DELETE";PB$ +FD$ +"/" +F$
14140 FOR I = 1 TO NR
14145 VTAB 15: CALL -868: PRINT "DELETING ";PB$ +FD$ +"/" +"RPTFMT" +R$(I)
14150 PRINT D$"DELETE";PB$ +FD$ +"/" +"RPTFMT" +R$(I)
14160 NEXT I
14170 POKE 216,0: CALL 1013
14175 VTAB 15: CALL -868: PRINT "DELETING ";PB$ +FD$ +"/" +"INDEX"
14180 PRINT D$"DELETE";PB$ +FD$ +"/" +"INDEX"
14185 VTAB 15: CALL -868: PRINT "DELETING ";PB$ +FD$ +"/" +"HEADER"
14190 PRINT D$"DELETE";PB$ +FD$ +"/" +"HEADER"
14200 R$(0) = FD$
14210 F$ = "": GOSUB 23010
14212 IF NR -1 = >1 GOTO 14221
14215 VTAB 15: CALL -868: PRINT "DELETING ";PB$ +"BASENAMES"
14220 PRINT D$"DELETE";PB$ +"BASENAMES"
14221 VTAB 15: CALL -868: PRINT "DELETING ";PB$ +FD$
14222 PRINT D$"DELETE";PB$ +FD$
14225 IF NR -1 <1 GOTO 14265
14229 VTAB 15: CALL -868: PRINT "SAVING REMAINING FILE NAMES"
14230 I = 0:J = 1
14240 IF R$(J) = R$(0) THEN 14255
14250 I = I +1:R$(I) = R$(J)
14255 J = J +1: ON J >NR GOTO 14260: GOTO 14240
14260 NR = I:F2 = 1: GOSUB 24010
14265 VTAB 15: CALL -868: PRINT "RETURNING TO MAIN ROUTINE"
14270 PRINT D$;"CHAIN";PX$ +"MAIN"
23000 REM <<< READ FILE SUB ROUTINE >>>
23010 FF = 0: IF F$ < >"INDEX" THEN FF = 1
23015 Q$ = PB$ +FD$ +"/" +F$
23017 IF F$ = "" THEN Q$ = PB$ +"BASENAMES"
23020 PRINT D$"OPEN";Q$
23030 PRINT D$"READ";Q$
23040 INPUT NR
23050 FOR J = 1 TO NR
23060 ON FF GOTO 23130
23070 FOR I = 1 TO NH
23080 CALL 768,N$(J,I)
23090 L = LEN(N$(J,I)): IF L >L%(I) THEN L%(I) = L
23100 NEXT I
23110 R(J) = J
23120 GOTO 23140
23130 CALL 768,R$(J)
23140 NEXT J
23150 PRINT D$"CLOSE"
23160 FF = 0
23170 RETURN
24000 REM <<< WRITE INDEX FILE SUB ROUTINE >>>>
24010 NR$ = RIGHT$("00000" + STR$(NR),5)
24020 FF = 0: IF F$ < >"INDEX" THEN FF = 1
24030 Q$ = PB$ +FD$ +"/" +F$
24032 IF F$ = "" THEN Q$ = PB$ +"BASENAMES"
24033 IF F2 = 1 GOTO 24037: REM FLAG TO PERMIT REWRITE BASENAMES
24035 R$(I) = RN$(I): IF I >>
25030 I = I +1: IF I >>
30010 HOME : PRINT "SELECT FROM:": PRINT
30020 FOR I = 1 TO NR: PRINT I" "R$(I): NEXT I: PRINT
30030 L$ = "DELETE WHICH ":CHOICE = I -1: GOSUB 2410:S = R
30040 HOME : VTAB 10: PRINT "YOU HAVE SELECTED THE OPTION TO DELETE": INVERSE : PRINT RN$(S)" FORMAT": NORMAL
30050 L$ = "IS THIS CORRECT": GOSUB 2510: IF NOT YES THEN NR = NS: GOTO 13010
30060 F$ = RN$(S) +"RPTFMT"
30070 PRINT D$"DELETE";PB$ +FD$ +"/" +F$
30080 IF S = NR THEN 30100
30090 FOR I = S TO NR -1:RN$(I) = RN$(I +1): NEXT I
30100 NR = NR -1:F$ = "RPTFMTNAME": IF NR <1 THEN 30130
30110 I = 0: GOSUB 25030
30120 PRINT D$;"CHAIN";PX$ +"MAIN"
30130 PRINT D$"DELETE";PB$ +FD$ +"/" +F$
30140 NR = NS: PRINT D$;"CHAIN";PX$ +"MAIN"
61000 REM *********************
61010 REM FILE CABINET
61020 REM PRODOS
61030 REM ---------------------
61040 REM CONVERTED BY
61050 REM MICHAEL MOORE
61060 REM MAY 1984
61070 REM =====================
61080 REM BASED ON
61090 REM FILE CABINET-MACH 5
61100 REM BY ED AYMOND
61110 REM AND BOB MATZINGER
61120 REM AS A MODIFICATION
61130 REM OF EARLIER VERSIONS
61140 REM *********************
61150 REM APPLE CORPS OF DALLAS
Text found in 143_Volume_143.dsk/MAIN.bas:
10 REM FILE CABINET-PRODOS
15 :
20 REM PRINTER SETUP FOR EPSON
40 REM MAY 1984 UPDATE BY
50 REM MICHAEL MOORE
60 :
70 REM APPLE CORPS OF DALLAS
80 :
90 REM <<< MAIN MODULE >>>
100 :
210 IF MS >0 AND MS <9 GOTO 28010: REM RETURN FROM SUBPROGRAM
310 DB$ = "":FD$ = "": ONERR GOTO 13010
500 REM <<< INTRO TITLE >>>>
501 TEXT : HOME
502 VTAB 5: HTAB 13: INVERSE : PRINT "FILE CABINET"
505 PRINT
510 HTAB 12: PRINT "PRODOS VERSION"
515 PRINT
520 HTAB 11: PRINT "BY MICHAEL MOORE"
525 PRINT
530 HTAB 14: PRINT " MAY 1984"
540 NORMAL
600 REM <<<<< PRODOS DATE SET >>>
610 DD = PEEK(49040) - INT( PEEK(49040)/32) *32
620 IF DD < >0 GOTO 1000: REM SKIP DATE SETUP IF NOT NEEDED
630 VTAB 13: CALL -958: REM CLEAR TO BOTTOM
640 PRINT " DATE INPUT ROUTINE": PRINT
645 VTAB 15: CALL -868
650 INPUT "ENTER NUMBER OF CURRENT MONTH : ";MM
655 IF MM <0 OR MM >12 GOTO 645
657 VTAB 16: CALL -868
660 INPUT "ENTER NUMBER OF CURRENT DAY : ";DD
665 IF DD <0 OR DD >31 GOTO 657
667 VTAB 17: CALL -868
670 INPUT "ENTER LAST TWO DIGITS OF THE YEAR : ";YY
675 IF YY <0 OR YY >99 GOTO 667
680 POKE 49041,YY *2 +(MM >7)
690 IF MM >7 THEN POKE 49040,(MM -8) *32 +DD
700 IF MM <8 THEN POKE 49040,MM *32 +DD
710 PRINT : GOSUB 60110
720 PRINT "THE DATE ENTERED IS "
730 HTAB 25: PRINT TD$: PRINT
740 L$ = "IS THIS CORRECT? ": GOSUB 2510
750 IF NOT YES GOTO 630
810 GOTO 1000
900 REM <<< SCREEN DISPLAY WHILE ACCESSING DISK >>>
910 VTAB 22: CALL -868: HTAB 4: INVERSE : PRINT "LOADING :";: NORMAL : PRINT " ";L$
920 RETURN
1000 POKE 216,0: GOTO 3010
2000 REM <<< PRINTER SETUP >>>
2010 PRINT D$;"PR#1": PRINT CHR$(18);: PRINT CHR$(27) + CHR$(70);
2020 ON PF GOTO 2030,2050
2030 PRINT CHR$(9)"80N";: PRINT CHR$(27) + CHR$(69): RETURN
2050 PRINT CHR$(9)"132N";: CHR$(15);: RETURN
2090 REM <<< OPPORTUNITY TO TURN ON PRINTER IF FORGOTTEN >>>
2100 PRINT :L$ = "PRINT SET-UP CORRECT ": GOSUB 2510: IF YES = 1 THEN GOTO 2110
2105 IF YES = 0 THEN POP : GOTO 28010
2110 PRINT : INVERSE : PRINT TAB( 10);"TURN YOUR PRINTER ON"; SPC( 10)" ": NORMAL : PRINT
2120 INPUT "PRESS WHEN READY...";R$: RETURN
2400 REM <<<< ENTER NUMBER CHOSEN >>>
2410 PRINT L$"->":V = PEEK(37)::H = LEN(L$) +3
2420 VTAB V: HTAB H: CALL -868: INPUT "";R$:R = VAL(R$): CALL -958
2440 PRINT : RETURN
2500 REM << ENTER YES / NO >>>>
2510 V = PEEK(37) +1
2515 PRINT L$" (Y/N)"
2520 IF V >23 THEN V = 23
2530 VTAB V: HTAB ( LEN(L$) +8): CALL -868: INPUT A$: IF A$ = "Y" THEN YES = 1: RETURN
2540 IF A$ = "N" THEN YES = 0: RETURN
2550 INVERSE : PRINT " PRESS 'Y' OR 'N'...": NORMAL : IF V = >23 THEN V = 22
2560 GOTO 2530
3000 REM <<<
3010 REM << STARTUP >>>
3040 GOSUB 32010: REM SETUP POKES
3045 GOSUB 34000: REM SETUP POKES
3050 CLEAR
3060 DIM R$(65),AC(21),K(66),H$(21),RN$(21)
3070 DIM L%(21)
3071 D$ = CHR$(4)
3072 PRINT D$;"PREFIX"
3073 INPUT PX$: REM OBTAIN PATH OF CURRENT DISK
3075 GOSUB 60110: REM SETUP DATE AFTER CLEAR
3080 PB$ = PX$: REM SET PATH FOR DATA ACCESS
3085 GOTO 35010: REM DETERMINE PATH FOR DATA BASE
3090 H$(0) = "REC#"
3100 DB$ = "":FD$ = "": ONERR GOTO 13010
3105 PRINT D$"VERIFY"PB$ +"BASENAMES"
3110 GOSUB 23010
3120 GOTO 13010
4000 REM <<< GET FILE >>>
4010 F$ = "HEADER": ONERR GOTO 6010
4015 PRINT D$"VERIFY"PB$ +FD$ +"/" +F$
4020 GOSUB 23010
4100 FOR I = 1 TO NR:H$(I) = R$(I):L%(I) = LEN(R$(I)): NEXT I
4110 NH = NR:NR = 0:MEM = FRE(0)
4120 B = INT((MEM -16)/(18 *NH +8))
4130 DIM N$(B,NH),R(B),S(B)
4140 F$ = "INDEX": ONERR GOTO 28100
4150 GOSUB 23010
4160 GOTO 28010
5400 REM <<< GOTO SORT ROUTINE >>>
5410 L$ = "SORT SUBROUTINE": GOSUB 910
5420 PRINT D$;"CHAIN";PX$ +"SORT"
6000 REM <<< ENTER HEADERS >>>
6010 CALL 1013
6020 POKE 216,0
6030 NR = 1
6032 HOME
6035 PRINT "HEADERS FOR <"DB$"> DATA BASE": PRINT
6036 PRINT TAB( 10)"MAXIMUM 20 HEADERS"
6037 PRINT " HEADER NAMES MAXIMUM 15 CHARACTERS"
6040 PRINT : PRINT "AFTER LAST HEADER, PRESS TO EXIT TO MAIN MENU"
6050 PRINT
6060 PRINT "HEADER NAME FOR COLUMN #"NR": ";: CALL 768,R$(NR)
6065 IF R$(1) = "" GOTO 6010
6070 IF R$(NR) = "" OR NR >20 THEN 6110
6080 L%(NR) = LEN(R$(NR))
6090 NR = NR +1
6100 GOTO 6060
6110 NR = NR -1
6120 IF NR <1 THEN FLAG = 1: GOTO 14010: REM FLAG TO CAUSE JUMP IN SUB PROGRAM 'FILES'
6130 GOSUB 24010: GOTO 4100
7000 REM <<< DATA ENTRY >>>
7010 HOME
7020 PRINT "THERE ARE NOW "NR" RECORDS"
7030 PRINT "IN THE >"DB$"< DATA FILE"
7040 HOME :NR = NR +1:R(NR) = NR
7050 PRINT "YOU ARE ENTERING RECORD # "NR
7060 PRINT "HIT '/' TO USE LAST RECORD'S ANSWER"
7070 PRINT
7080 FOR I = 1 TO NH
7090 PRINT H$(I)":";: CALL 768,N$(NR,I)
7100 IF N$(NR,I) = CHR$(47) THEN N$(NR,I) = N$(NR -1,I): PRINT N$(NR,I)
7110 L = LEN(N$(NR,I)): IF L >L%(I) THEN L%(I) = L
7120 NEXT I
7130 PRINT
7140 L$ = "MORE ": GOSUB 2510: IF YES THEN GOTO 7040
7150 F$ = "INDEX"
7160 GOSUB 24010
7170 GOTO 28010
8000 REM <<< GOTO SEARCH ROUTINE >>>
8010 L$ = "CHANGE SUBROUTINE": GOSUB 910
8020 PRINT D$;"CHAIN";PX$ +"CHANGE"
9000 REM <<< ABORT SUBROUTINE >>>
9010 IF (PF) OR (AR) THEN 9030
9020 PRINT "PRESS RETURN TO CONTINUE, ESC TO ABORT";: GOTO 9050
9030 LF = PEEK( -16384): POKE -16368,0
9040 ON LF = 141 GOTO 9050: ON LF = 155 GOTO 9070: GOTO 9090
9050 LF = PEEK( -16384): IF LF <128 THEN 9050
9060 POKE -16368,0
9070 IF LF = 155 THEN LF = 1: GOTO 9100
9080 IF LF < >141 THEN 9050
9090 LF = 0
9100 IF PF = 0 AND AR = 0 THEN PRINT :L = 0: HOME
9110 RETURN
11000 REM <<< GOTO REPORT >>>
11010 LT = 60: IF PF AND L = 0 THEN PRINT TAB( 8);FD$" DATA BASE";: POKE 36, LEN(FD$) +20: PRINT TD$: PRINT :L = L +2
11015 PRINT TAB( 4 +5 *(PF >1))H$(0);J
11020 FOR I = 1 TO NH
11030 POKE 36,5 *(PF >0) +1: PRINT I" "H$(I)":";: POKE 36,X +5 *(PF >0) +5: PRINT N$(Y,I)
11040 NEXT I
11050 PRINT
11060 L = L +NH +2
11070 IF PF AND (L +NH) >(LT -1) THEN PRINT CHR$(12):L = 0
11080 RETURN
12000 REM <<< DELETE RECORDS >>>
12010 HOME : PRINT "ENTER 0 TO RETURN TO THE MENU!":I = 0
12020 VTAB 7: CALL -958: INPUT "ENTER RECORD NUMBER TO DELETE -> ";S$:S = VAL(S$): IF I = 0 AND S$ = "0" THEN 28010
12025 IF S$ = "END" THEN 12065
12030 IF S <1 OR S >NR THEN 12020
12040 R(S) = 0:I = I +1: IF I = NR THEN FLAG = 1: GOTO 14010: REM FLAG TO CAUSE JUMP IN SUB PROGRAM 'FILES'
12050 PRINT : PRINT "RECORD NUMBER "S" DELETED!": PRINT
12060 L$ = "MORE ": GOSUB 2510: IF YES THEN HOME : PRINT "TYPE 'END' TO TERMINATE DELETIONS!": GOTO 12020
12065 I = 1:J = 0
12070 IF R(I) = 0 THEN 12090
12080 J = J +1:R(J) = R(I)
12090 I = I +1: ON I >NR GOTO 12095: GOTO 12070
12095 HOME : VTAB 7: HTAB 13: FLASH : PRINT "": NORMAL : PRINT
12097 PRINT : PRINT : PRINT NR" RECORDS BEING RE-NUMBERED...."
12100 IF J = 0 THEN FLAG = 1: GOTO 14010: REM SET FLAG TO CAUSE JUMP IN SUB PROGRAM 'FILES"
12110 VTAB 15: PRINT "ONE MINUTE PLEASE...":NR = J:F$ = "INDEX": GOSUB 24010: GOSUB 23010: GOTO 28010
13000 REM <<< INITIAL MENU >>>
13010 HOME
13011 VTAB 5: HTAB 10: PRINT "FILE CABINET-PRODOS": PRINT
13012 PRINT TAB( 6)"UPDATED BY MICHAEL MOORE": PRINT
13013 PRINT "INFORMATION STORAGE AND RETRIEVAL SYSTEM"
13015 PRINT : HTAB 3
13019 POKE 216,0: REM RESET ERROR INDICATOR
13020 PRINT "SELECT FROM:": PRINT
13030 IF NOT NR THEN J = 1: GOTO 13050
13040 FOR J = 1 TO NR: PRINT J" "R$(J): NEXT J: PRINT
13050 PRINT J" QUIT"
13060 PRINT J +1" CREATE A NEW DATA BASE"
13070 IF J >1 THEN PRINT J +2" DELETE A DATA BASE"
13080 PRINT : HTAB 3
13090 INPUT "WHICH -> ";S$:S = VAL(S$)
13100 IF S NR THEN PRINT CHR$(7);: VTAB PEEK(37): CALL -868: GOTO 13090
13125 VTAB 22: HTAB 6: FLASH : PRINT "LOADING";: NORMAL : PRINT " - ONE MOMENT PLEASE"
13130 FD$ = R$(S)
13140 GOTO 4010
13150 PRINT
13510 VTAB 20: CALL -958
13520 IF J = 0 THEN J = 1
13525 PRINT : PRINT "MAXIMUM 10 CHARACTERS, PLEASE!"
13527 PRINT SPC( 5);"NAME MUST START WITH A LETTER": PRINT
13530 PRINT "NAME FOR NEW DATA BASE FILE :";: CALL 768,R$(J)
13540 IF NOT LEN(R$(J)) THEN 13010
13542 IF ASC(R$(J)) <65 GOTO 13510
13544 X$ = R$(J)
13546 GOSUB 37010: REM TEST FOR VALID NAME
13550 IF X$ = "" THEN R$(J) = "": GOTO 13010
13554 FD$ = R$(J)
13556 PRINT D$"CREATE";PB$ +FD$
13558 NR = J: GOSUB 24010
13560 DB$ = R$(J -1): GOTO 4010
14000 REM << GOTO FILES >>>
14010 PRINT D$;"CHAIN";PX$ +"FILES"
15000 REM <<< GOTO REPORT ROUTINE >>>
15010 L$ = "REPORT SUBROUTINE": GOSUB 910
15020 PRINT D$;"CHAIN";PX$ +"REPORT"
23000 REM <<<< READ FILES >>>>
23010 FF = 0: IF F$ < >"INDEX" THEN FF = 1
23015 Q$ = PB$ +FD$ +"/" +F$
23017 IF F$ = "" THEN Q$ = PB$ +"BASENAMES"
23020 PRINT D$"OPEN"Q$
23030 PRINT D$"READ"Q$
23040 INPUT NR
23050 FOR J = 1 TO NR
23060 ON FF GOTO 23130
23070 FOR I = 1 TO NH
23080 CALL 768,N$(J,I)
23090 L = LEN(N$(J,I)): IF L >L%(I) THEN L%(I) = L
23100 NEXT I
23110 R(J) = J
23120 GOTO 23140
23130 CALL 768,R$(J)
23140 NEXT J
23150 PRINT D$"CLOSE"
23160 FF = 0
23170 RETURN
24000 REM <<< WRITE FILES >>>
24010 NR$ = RIGHT$("00000" + STR$(NR),5)
24020 FF = 0: IF F$ < >"INDEX" THEN FF = 1
24030 Q$ = PB$ +FD$ +"/" +F$
24032 IF F$ = "" THEN Q$ = PB$ +"BASENAMES"
24037 PRINT D$"CLOSE"
24040 PRINT D$"OPEN"Q$
24045 PRINT D$"WRITE"Q$
24050 PRINT NR$
24060 FOR J = 1 TO NR
24070 ON FF GOTO 24130
24080 Y = R(J)
24090 FOR I = 1 TO NH
24100 PRINT N$(Y,I)
24110 NEXT I
24120 GOTO 24140
24130 PRINT R$(J)
24140 NEXT J
24150 PRINT D$"CLOSE"
24160 FF = 0
24170 RETURN
26000 REM <<<< LIST RECORDS >>>
26010 L = 0:LT = 60:AR = 0: HOME :X = 0: FOR I = 1 TO NH: IF LEN(H$(I)) >X THEN X = LEN(H$(I))
26020 NEXT I: IF PF THEN GOSUB 2100: HOME : GOTO 26040
26025 VTAB 3: PRINT "HOW DO YOU WISH TO 'LIST ALL RECORDS'?": PRINT : PRINT TAB( 8)"1. SCREEN AT A TIME."
26030 PRINT TAB( 8)"2. SCROLL ALL RECORDS.": PRINT : PRINT
26035 L$ = " WHICH ":CHOICE = 2: GOSUB 2410:AR = R -1: HOME
26040 IF (PF) OR (AR) THEN PRINT "PRESS TO STOP/START...": PRINT "PRESS TO ABORT...": POKE 34,3
26045 HOME : IF PF THEN GOSUB 2010
26050 FOR J = 1 TO NR:Y = R(J)
26060 GOSUB 11010
26065 IF (PF) OR (AR) THEN 26140
26070 IF AR = 0 AND L +NH >20 THEN 26130
26080 NEXT J
26085 IF PF THEN PRINT CHR$(12): POKE 34,0: HOME
26090 PRINT D$"PR#0"
26100 IF LF THEN LF = 0: GOTO 28010
26110 INPUT "PRESS RETURN FOR MENU...";L$
26120 GOTO 28010
26130 IF J = NR THEN 26080
26140 GOSUB 9010
26150 IF LF THEN J = NR
26160 GOTO 26080
28000 REM <<< MAIN MENU >>>
28010 TEXT : GOTO 28110
28100 CALL 1013
28110 HOME
28120 IF PF THEN PF = 1
28140 PRINT " ***** FILE CABINET-PRODOS *****"
28150 PRINT
28160 PRINT "CURRENT DATA BASE:": PRINT TAB( 16 -( LEN(FD$)/2))">>> "FD$" <<<"
28170 PRINT : PRINT "CURRENTLY CONTAINS: "NR" RECORDS": PRINT "ROOM FOR "B -NR" MORE RECORDS"
28180 PRINT
28190 PRINT "THE PRINTER IS ";: IF NOT PF GOTO 28200
28195 FLASH : PRINT "ON": NORMAL : GOTO 28210
28200 PRINT "OFF"
28210 PRINT
28220 PRINT "1. SELECT DIFFERENT DATA BASE"
28230 PRINT "2. ENTER RECORDS"
28240 PRINT "3. SEARCH AND/OR CHANGE DATA"
28250 PRINT "4. DELETE RECORDS"
28260 PRINT "5. REPORT"
28270 PRINT "6. SORT >"FD$"< DATA BASE"
28280 PRINT "7. LIST ALL RECORDS"
28290 PRINT "8. TURN PRINTER ";: IF PF THEN PRINT "OFF": GOTO 28310
28300 PRINT "ON"
28310 PRINT "9. QUIT"
28320 PRINT
28330 POKE 216,0: PRINT "WHICH -> ?"
28340 VTAB 21: HTAB 11: INPUT "";MS$:MS = VAL(MS$)
28500 IF MS <1 OR MS >9 THEN VTAB 21: HTAB 11: CALL -958: PRINT "?": GOTO 28340
28510 CALL -958: IF NR THEN 28540
28520 IF MS <3 OR MS >7 THEN 28540
28530 PRINT : PRINT " THERE ARE NO RECORDS ON FILE":MS = 0
28535 FOR Z = 1 TO 1500: NEXT Z: GOTO 28500
28540 ON MS GOTO 3050,7010,8010,12010,15010,5400,26010,29010,31005
29000 REM <<< PRINTER FLAG >>>
29010 IF PF THEN PF = 0:LN = 0: GOTO 29030
29020 PF = 1
29030 IF MS = 0 THEN HOME : RETURN
29035 VTAB 9: HTAB 16: CALL -868: IF NOT PF GOTO 29040
29038 FLASH : PRINT "ON": NORMAL : GOTO 29050
29040 PRINT "OFF"
29050 VTAB 18: HTAB 17: CALL -868: IF PF THEN PRINT "OFF": GOTO 29070
29060 PRINT "ON"
29070 MS = 0: GOTO 28500
31000 REM <<< QUIT ROUTINE >>>
31005 IF NR = 0 AND FD$ < >"" GOTO 38010: REM PREVENT FILES WITH ZERO RECORDS
31010 TEXT : HOME : VTAB 10
31020 HTAB 3: PRINT "A BACKUP COPY IS RECOMMENDED AFTER EACH CHANGE SESSION!"
31030 VTAB 15: HTAB 3
31040 PRINT "TO ACTIVATE THE PRODOS 'FILER' PROGRAM WHICH MUST HAVE BEEN TRANSFERRED TO THIS DISK, ANSWER 'Y' TO THE REQUEST FOR BACKUP.": PRINT : VTAB 20
31050 L$ = "BACKUP": GOSUB 2510
31060 IF NOT YES THEN TEXT : HOME : END
31070 ONERR GOTO 31110
31080 PRINT D$"VERIFY";PX$;"FILER"
31090 PRINT D$"-";PX$;"FILER/"
31100 END
31110 TEXT : HOME : VTAB 10
31120 PRINT "THE PRODOS 'FILER' WAS NOT FOUND ON PATH ";PX$;"FILER"
31130 PRINT : PRINT "IF A BACKUP COPY IS DESIRED, TAKE CORRECTIVE ACTION AND INITIATE THE COPY PROCESS FROM 'FILER'"
31160 POKE 216,0
31170 END
32000 REM <<< SETUP POKES >>>
32010 FOR I = 1013 TO 1022: READ S: POKE I,S: NEXT I
32020 I = 0
32030 RETURN
32040 DATA 104,168,104,166,223,154,72,152,72,96
33040 REM
33075 GOSUB 60110: REM SETUP DATE AFTER CLEAR
34000 FOR I = 1 TO 71: READ I%: POKE 768 +I -1,I%: NEXT I: RESTORE : RETURN
34010 DATA 32,190,222,32,227,223,36,17,208,5,162,0,76,15,3,133,133,132,134,165
34020 DATA 184,164,185,133,135,132,136,32,44,213,173,0,2,201,3,208,3,76,99,216
34030 DATA 169,0,133,13,133,14,169,0,160,2,32,237,227,32,61,231,32,123,218,165
34040 DATA 135,164,136,133,184,132,185,32,183,0,96,0,0,0,0,0,0,0,0,0
35000 REM << SET UP PATH FOR DATA >>
35010 TEXT : HOME : VTAB 5
35020 HTAB 3: INVERSE : PRINT "PATH SETUP FOR FILECABINET DATA BASE": NORMAL : PRINT
35030 PRINT "THE CURRENT PATH FOR ACCESSING THE FILE-CABINET DATA IS ";PB$: PRINT
35040 PRINT "IF A DIFFERENT PATH IS DESIRED, ENTER THE PRODOS STRUCTURED PATH BELOW."
35050 PRINT "IF THE CURRENT PATH IS ACCEPTABLE, PRESS 'RETURN' IN RESPONSE TO THE PATH REQUEST.": PRINT
35060 PRINT "ENTER ONLY THE NAME OF THE NEW PATH -- THE REQUIRED SLASH AT THE FIRST AND THE END WILL BE PROVIDED AUTOMATICALLY.": PRINT
35100 VTAB 21: PRINT "ENTER THE NEW PATH OR PRESS 'RETURN' ";: CALL 768,PT$
35110 IF PT$ = "" THEN PB$ = PX$: GOTO 3090
35115 IF ASC(PT$) <65 GOTO 35010
35120 X$ = PT$
35130 GOSUB 37010
35140 IF X$ = "" THEN PT$ = "": GOTO 35010
35150 PB$ = "/" +PT$ +"/"
35151 ONERR GOTO 35155
35152 PRINT D$;"VERIFY";PB$
35153 POKE 216,0: GOTO 35160
35155 VTAB 21: CALL -958: PRINT "->-> THE NEW PATH COULD NOT BE FOUND.": PRINT
35156 POKE 216,0:PB$ = PX$
35157 PRINT "PRESS ANY KEY TO CONTINUE ";: GET K$: GOTO 35010
35160 GOTO 3090: REM RETURN TO MAIN STREAM
36000 END
37000 REM << TEST FOR VALID PRODOS NAME FORMAT >>
37010 FOR T = 1 TO LEN(X$)
37020 IF ASC( MID$ (X$,T,T)) >64 AND ASC( MID$ (X$,T,T)) <91 GOTO 37090
37030 IF ASC( MID$ (X$,T,T)) >47 AND ASC( MID$ (X$,T,T)) <58 GOTO 37090
37040 IF ASC( MID$ (X$,T,T)) = 46 GOTO 37090
37050 VTAB 20: CALL -958: PRINT "FILE NAME MUST CONFORM TO PRODOS RULES"
37060 PRINT " ONLY LETTERS, NUMERALS AND PERIODS ARE ALLOWED"
37070 T = LEN(X$):X$ = ""
37080 PRINT " PRESS ANY KEY TO CONTINUE ";: GET K$
37090 NEXT T
37100 RETURN
38000 REM <<< ZERO RECORDS >>>
38010 HOME : VTAB 10
38020 PRINT "---- WARNING ----": PRINT
38030 PRINT "CREATION OF FILES WITH ZERO RECORDS RESULTS IN ERROR CONDITIONS LATER WHEN RE-STARTING OR DELETING."
38040 PRINT
38050 PRINT "CREATE AT LEAST ONE RECORD WITH DATA TO PREVENT FUTURE PROBLEMS": PRINT
38060 PRINT "PRESS ANY KEY TO RETURN TO MAIN MENU"
38070 GET K$
38080 GOTO 28010
60000 REM <<< READ PRODOS DATE >>>
60100 :
60110 MO$ = "???JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
60200 DD = PEEK(49040) - INT( PEEK(49040)/32) *32
60300 YY = INT( PEEK(49041)/2)
60400 MM = ( PEEK(49041) -YY *2) *8 + INT( PEEK(49040)/32)
60500 MM$ = MID$ (MO$,MM *3 +1,3)
60510 TD$ = MM$ +" " + STR$(DD) +", 19" + STR$(YY)
60530 RETURN
60590 ::::
61000 REM *********************
61010 REM FILE CABINET
61020 REM PRODOS
61030 REM --------------------
61040 REM CONVERTED BY
61050 REM MICHAEL MOORE
61060 REM MAY 1984
61070 REM ====================
61080 REM BASED ON
61090 REM FILE CABINET-MACH 5
61100 REM BY ED AYMOND
61110 REM AND BOB MATZINGER
61120 REM AS A MODIFICATION
61130 REM OF EARLIER VERSIONS
61140 REM ********************
61150 REM APPLE CORPS OF DALLAS
Text found in 143_Volume_143.dsk/REPORT.bas:
10 REM <<< FILE CABINET >>>
20 REM <<< REPORT ROUTINE >>>
30 REM <<< PRODOS VERSION >>>
40 REM <<< UPDATED BY >>>
50 REM <<< MICHAEL MOORE >>>
60 REM <<< MAY 1984 >>>
1000 GOTO 15010: REM START POINT
2000 REM <<< PRINT SETUP >>>
2010 PRINT D$"PR#1": PRINT CHR$(18);: PRINT CHR$(27) + CHR$(70);
2020 ON PF GOTO 2030,2050
2030 PRINT CHR$(9)"80N";: PRINT CHR$(27) + CHR$(69): RETURN
2050 PRINT CHR$(9)"132N";: PRINT CHR$(15);: RETURN
2090 REM <<< REM PRINT SETUP >>>
2100 PRINT :L$ = "PRINT SET-UP CORRECT ": GOSUB 2510: IF YES = 1 THEN GOTO 2110
2105 IF YES = 0 THEN POP : GOTO 22010
2110 PRINT : INVERSE : PRINT TAB( 10)"TURN YOUR PRINTER ON" SPC( 10)" ": NORMAL : PRINT
2120 INPUT "PRESS WHEN READY...";R$: RETURN
2410 PRINT L$"->":V = PEEK(37)::H = LEN(L$) +3
2420 VTAB V: HTAB H: CALL -868: INPUT "";R$:R = VAL(R$): CALL -958
2430 IF R <1 OR R >CHOICE THEN 2450
2440 PRINT : RETURN
2450 IF V = 23 THEN V = 22
2460 CALL -868: PRINT " ENTER NUMBER 1 THRU ";CHOICE: GOTO 2420
2480 IF SEP = 1 THEN RETURN
2482 HOME : PRINT : PRINT "SPACING FOR PRINTED FORMAT": PRINT
2483 PRINT TAB( 3)"<1> SKIP BLANK LINE BETWEEN RECORDS"
2484 PRINT TAB( 3)"<2> RECORDS PRINTED THEN BLANK LINE"
2485 PRINT TAB( 3)"<3> RECORDS PRINTED THEN BLANK LINE"
2486 PRINT TAB( 3)"<4> RECORDS PRINTED THEN BLANK LINE"
2487 PRINT TAB( 3)"<5> RECORDS PRINTED THEN BLANK LINE"
2489 PRINT : PRINT TAB( 7)"WHICH ->:";: CALL -868: INPUT "";LC
2490 IF LC <1 OR LC >5 GOTO 2480
2493 IF LC = 1 THEN LT = 30
2494 IF LC = 2 THEN LT = 40
2495 IF LC = 3 THEN LT = 45
2496 IF LC = 4 THEN LT = 48
2497 IF LC = 5 THEN LT = 50
2499 RETURN
2510 V = PEEK(37) +1
2515 PRINT L$" (Y/N)"
2520 IF V >23 THEN V = 23
2530 VTAB V: HTAB ( LEN(L$) +8): CALL -868: INPUT A$: IF A$ = "Y" THEN YES = 1: RETURN
2540 IF A$ = "N" THEN YES = 0: RETURN
2550 INVERSE : PRINT " PRESS 'Y' OR 'N'...": NORMAL : IF V = >23 THEN V = 22
2560 GOTO 2530
9000 REM <<< SUBROUTINE >>
9010 IF (PF) OR (AR) THEN 9030
9020 PRINT "PRESS RETURN TO CONTINUE, ESC TO ABORT";: GOTO 9050
9030 LF = PEEK( -16384): POKE -16368,0
9040 ON LF = 141 GOTO 9050: ON LF = 155 GOTO 9070: GOTO 9090
9050 LF = PEEK( -16384): IF LF <128 THEN 9050
9060 POKE -16368,0
9070 IF LF = 155 THEN LF = 1: GOTO 9100
9080 IF LF < >141 THEN 9050
9090 LF = 0
9100 IF PF = 0 AND AR = 0 THEN PRINT :L = 0: HOME
9110 RETURN
15010 HOME :E = 0:WIDE = 0:L%(0) = 4:HR = 0
15020 FOR I = 0 TO (NH +1) *3:K(I) = 0: NEXT I:L%(NH +1) = 0:PAGE = 0:TF = 0
15030 FOR I = 1 TO NH:AC(I) = 0: NEXT I:HC = 0:GT = 0: ON E GOTO 15500: GOTO 22010
15100 POKE 34, PEEK(37) +2: HOME : IF E = 0 THEN INPUT "ENTER REPORT FORMAT NAME (NO LONGER THAN 9 LETTERS) :";RN$(NN)
15120 FOR I = 1 TO NH +1:K(I *3 -2) = 0:K(I *3 -1) = 0:K(I *3) = 0: VTAB I: HTAB 31: CALL -868: NEXT I: CALL -958:K(0) = 0: HOME
15130 RH = 0: INPUT "ENTER TAB FOR LEFT MARGIN (=>1) ";K$:L = VAL(K$): IF L <1 THEN L = 1
15140 FOR I = 1 TO (NH +1) *3 STEP 3
15150 HOME :V = PEEK(37) +1: VTAB 23: INVERSE : PRINT "PRESS ALONE TO EXIT FORMAT...": NORMAL
15155 VTAB V: PRINT "ENTER HEADER # FOR POSITION #"(I +2)/3" ";: INPUT "";K$: CALL -958: IF NOT LEN(K$) THEN I = (NH +1) *3: GOTO 15220
15160 K(I) = VAL(K$): IF K(I) <0 OR K(I) >NH THEN 15150
15180 PRINT :L$ = "TOTAL ON " +H$(K(I)): GOSUB 2510: CALL -958: PRINT : IF YES THEN K(I +2) = 1:K(0) = 1:TF = 1:L = L +2: GOTO 15190
15185 L$ = "RIGHT JUSTIFY DATA?": GOSUB 2510: IF YES THEN K(I +2) = 2
15190 K(I +1) = L:L = L +L%(K(I)) +2:WIDE = L -2:RH = RH +1
15200 VTAB K(I) +1: HTAB 32: PRINT (I +2)/3 TAB( 36)K(I +1);: IF K(I +2) = 1 THEN PRINT TAB( 39)"T";
15202 IF K(I +2) = 2 THEN PRINT TAB( 39)"F";
15205 PRINT : IF WIDE >131 -(10 *K(0)) THEN ER = 1:I = (NH +1) *3
15220 NEXT I:I = RH *3 +1: IF NOT ER THEN 15250
15230 ER = 0: HOME : PRINT " THIS REPORT IS TOO WIDE!":L$ = "TRY AGAIN?": GOSUB 2510: ON YES GOTO 15120: TEXT : GOTO 28010
15250 V = NH +2: ON K(0) = 0 GOTO 15300: HOME :L$ = "GRAND TOTAL?": GOSUB 2510:V = NH +2: IF NOT YES THEN K(0) = 0: GOTO 15300
15252 FOR J = 1 TO (NH +1) *3 STEP 3: ON K(J +2) = 1 GOTO 15254: GOTO 15264
15254 HOME : PRINT "ADD OR SUBTRACT ";: INVERSE : PRINT H$(K(J)): NORMAL : PRINT "TO/FROM GRAND TOTAL (A/S) ";: INPUT A$
15256 IF A$ = "A" THEN K(J +2) = 1:A$ = "+T": GOTO 15262
15258 IF A$ = "S" THEN K(J +2) = -1:A$ = "-T": GOTO 15262
15260 GOTO 15254
15262 VTAB K(J) +1: HTAB 38: PRINT A$
15264 NEXT J
15270 FOR J = 1 TO RH: IF K(3 *J) = 1 OR K(3 *J) = -1 THEN IF L%(K(3 *J -2)) >L%(NH +1) THEN L%(NH +1) = L%(K(3 *J -2)) +1
15275 NEXT J
15280 WIDE = L +L%(NH +1): IF WIDE >131 THEN 15230
15290 K(I) = NH +1:K(I +1) = L: VTAB V: PRINT "TOTAL" TAB( 32)RH +1 TAB( 36)K(I +1) +1:V = V +1
15300 VTAB V: PRINT "RIGHT MARGIN" TAB( 36)WIDE -1
15310 HOME :L$ = "IS THIS SATISFACTORY?": GOSUB 2510: ON YES GOTO 15500: GOTO 15120
15500 TEXT : IF TF THEN TF = 0: PRINT : GOSUB 27010
15505 GOSUB 21010
15507 POKE 34, PEEK(37) +1: HOME
15508 L$ = "FIRST COLUMN ONLY (IF ALPHA), SEPARATE DIFFERENT LETTERS?": GOSUB 2510:SEP = 0: IF YES THEN SEP = 1
15509 POKE 34, PEEK(37) -2: HOME
15510 L$ = "SELECT ALL RECORDS?": GOSUB 2510: IF YES THEN Q$ = "ALL": GOTO 15620
15520 HOME : INPUT "SELECT RECORDS BY WHICH HEADER #";S$:S = VAL(S$): IF S <0 OR S >NH THEN PRINT CHR$(7): GOTO 15520
15530 VTAB S +3: HTAB 20: INVERSE : PRINT "1ST": NORMAL
15535 HOME :L$ = "'OR' 2ND HEADER?": GOSUB 2510: CALL -958: IF NOT YES THEN 15560
15540 PRINT : INPUT "ENTER # OF 'OR' HEADER ->";K$:K = VAL(K$): IF K <0 OR K >NH THEN PRINT CHR$(7);: VTAB PEEK(37) -1: CALL -958: GOTO 15540
15550 HR = 1: GOTO 15575
15560 HOME :L$ = "'AND' 2ND HEADER?": GOSUB 2510: CALL -958: IF NOT YES THEN K$ = "NO":HR = 1: GOTO 15590
15570 PRINT : INPUT "ENTER # OF 'AND' HEADER ->";K$:K = VAL(K$):HR = 2: IF K <0 OR K >NH THEN PRINT CHR$(7);: VTAB PEEK(37) -1: CALL -958:HR = 0: GOTO 15570
15575 IF K = S THEN VTAB S +3: HTAB 20: FLASH : PRINT "1ST": NORMAL :V = HR:HR = 0:K$ = "": ON V GOTO 15535,15560
15580 VTAB K +3: HTAB 20: INVERSE : IF HR = 1 THEN PRINT "'OR' 2ND": GOTO 15590
15585 PRINT "'AND' 2ND"
15590 NORMAL : HOME : PRINT "ENTER RECORDS TO REPORT FOR "H$(S)"=";: INPUT Q$: PRINT : IF LEN(Q$) = 0 THEN Q$ = "@"
15600 ON K$ = "NO" GOTO 15620: IF HR = 1 THEN PRINT "OR ";: GOTO 15615
15610 PRINT "AND ";
15615 PRINT H$(K)"=";: CALL 768,K$: IF LEN(K$) = 0 THEN K$ = "@"
15620 TEXT : HOME : IF WIDE THEN 15630
15622 FOR J = 1 TO RH: IF K(3 *J) = 1 OR K(3 *J) = -1 THEN IF L%(K(3 *J -2)) >L%(NH +1) THEN L%(NH +1) = L%(K(3 *J -2)) +1
15624 NEXT J
15626 WIDE = K(RH *3 -1) +L%(K(RH *3 -2)): IF K(RH *3 +2) THEN WIDE = K(RH *3 +2) +L%(NH +1)
15630 IF PF THEN PF = 1 +(WIDE >79): GOTO 15646
15632 IF NOT PF GOTO 15661
15635 IF WIDE <40 THEN 15660
15640 PRINT CHR$(7)"THIS REPORT IS TOO WIDE FOR THE MONITOR": PRINT "SCREEN. DO YOU WANT YOUR PRINTER":L$ = "ON? ": GOSUB 2510: IF NOT YES THEN POKE 34,0: GOTO 15800
15645 T = S:S = 0: GOSUB 29010:S = T: GOTO 15630
15646 HOME : PRINT : PRINT "CONTINUOUS REPORT WITHOUT SPACING":L$ = "BETWEEN THE LINES?": GOSUB 2510:LC = 0:LT = 60: IF YES = 0 THEN GOSUB 2480
15650 PRINT : INPUT "ENTER PAGE # OF FIRST PAGE -> ";R$:PAGE = VAL(R$) -1: IF PAGE <0 THEN PAGE = 0
15655 GOSUB 2100
15660 IF PF = 0 THEN GOSUB 2480
15661 TEXT : HOME : FOR I = 1 TO RH:AC(I) = 0
15662 IF K(3 *I) = 1 THEN T9 = 1
15665 NEXT I
15670 IF PF THEN GOSUB 2010
15675 GOSUB 18010
15679 LS = 1
15680 FOR J = 1 TO NR:Y = R(J)
15685 N$(Y,0) = STR$(J)
15690 IF Q$ = "ALL" THEN 15760
15695 ON HR GOTO 15705,15740
15705 IF Q$ = "@" AND LEN(N$(Y,S)) >0 THEN 15760
15710 IF LEFT$(N$(Y,S), LEN(Q$)) = Q$ THEN 15760
15715 IF K$ = "NO" THEN 15765
15720 IF K$ = "@" AND LEN(N$(Y,K)) >0 THEN 15760
15725 IF LEFT$(N$(Y,K), LEN(K$)) < >K$ THEN 15765
15730 GOTO 15760
15740 IF Q$ = "@" AND LEN(N$(Y,S)) >0 THEN 15750
15745 IF LEFT$(N$(Y,S), LEN(Q$)) < >Q$ THEN 15765
15750 IF K$ = "@" AND LEN(N$(Y,K)) >0 THEN 15760
15755 IF LEFT$(N$(Y,K), LEN(K$)) < >K$ THEN 15765
15760 GOSUB 16010
15762 IF LS = LC THEN PRINT :LS = 0
15765 IF PF <1 THEN IF LN >16 THEN GOSUB 9010: IF NOT LF AND J LT THEN GOSUB 18010
15779 LS = LS +1
15780 NEXT J
15785 IF LF THEN LF = 0: PRINT : GOTO 15795
15790 ON T9 GOSUB 17020
15795 PRINT : PRINT D$"PR#0"
15800 ON E GOTO 15815
15805 PRINT : PRINT "DO YOU WANT TO SAVE THE FORMAT":L$ = "FOR THIS REPORT TO DISK ": GOSUB 2510
15810 IF YES THEN E = 1: GOSUB 19010
15815 POKE 216,0: PRINT : PRINT "MORE REPORTS USING THE "RN$(NN):L$ = "FORMAT ": GOSUB 2510
15820 IF YES THEN E = 1:PAGE = 0:LC = 0: GOTO 15030
15825 GOTO 22010
16010 FOR I = 1 TO RH: ON ABS(K(3 *I)) GOTO 16100,16030
16015 IF SEP = 1 AND J < >1 AND I = 1 THEN IF LEFT$(N$(Y,K(3 *I -2)),1) < > LEFT$(N$(R(J -1),K(3 *I -2)),1) THEN PRINT
16020 POKE 36,K(3 *I -1): PRINT N$(Y,K(3 *I -2));: GOTO 16040
16030 POKE 36,K(3 *I -1) +L%(K(3 *I -2)) - LEN(N$(Y,K(3 *I -2))): PRINT N$(Y,K(3 *I -2));
16040 NEXT I
16050 IF K(0) < >1 OR HC = 0 THEN 16080
16060 DT = HC:T = 0: GOSUB 27510
16070 POKE 36,T: PRINT DT$;:GT = GT +HC:HC = 0
16080 LN = LN +1: PRINT : RETURN
16100 N = 3 *I -2: IF LEN(N$(Y,K(N))) = 0 THEN 16040
16110 DT = VAL(N$(Y,K(N))):T = 0: GOSUB 27510:V = VAL(DT$): POKE 36,T: PRINT DT$;:AC(I) = AC(I) +V:HC = HC +(V *K(3 *I)): GOTO 16040
17010 POKE 36,K(2): FOR I = K(2) TO WIDE -1: PRINT "-";: NEXT I: PRINT : RETURN
17020 GOSUB 17010: FOR I = 1 TO RH: IF AC(I) = 0 THEN 17070
17050 DT = AC(I):T = 0: GOSUB 27510: POKE 36,T: PRINT DT$;
17070 NEXT I
17080 ON GT = 0 GOTO 17090:DT = GT:T = 0: GOSUB 27510: POKE 36,T: PRINT DT$;
17090 PRINT : RETURN
18010 HOME : IF LN AND LEN(TD$) >0 THEN PRINT CHR$(12)
18012 LS = 0
18015 T = (WIDE +K(2))/2 - LEN(FD$) -8: IF T <1 THEN T = 1
18020 LN = 0: POKE 36,T: PRINT CHR$(14) +FD$" DATA BASE":LN = LN +1
18030 POKE 36,K(2): PRINT RN$(NN)" REPORT FOR ";: IF Q$ = "ALL" THEN PRINT "ALL RECORDS":LN = LN +1: GOTO 18110
18040 PRINT H$(S)" ";: IF Q$ < >"@" THEN PRINT ": "Q$;
18050 IF K$ = "NO" THEN PRINT :LN = LN +1: GOTO 18110
18060 PRINT :LN = LN +1
18070 IF HR = 1 THEN POKE 36,K(2): PRINT "OR ";
18080 IF HR = 2 THEN POKE 36,K(2): PRINT "AND ";
18090 PRINT H$(K);: IF K$ < >"@" THEN PRINT ": "K$;
18100 PRINT :LN = LN +1
18110 PAGE = PAGE +1: POKE 36,T: PRINT TD$;
18115 IF NOT PF THEN PRINT : GOTO 18130
18120 POKE 36,WIDE -5 - LEN( STR$(PAGE)): PRINT "PAGE "PAGE:LN = LN +1
18130 GOSUB 17010
18140 FOR I = 1 TO RH
18150 POKE 36,K(3 *I -1): PRINT H$(K(3 *I -2));
18160 NEXT I
18170 IF K(0) = 1 THEN POKE 36,K(3 *I -1) +3: PRINT "TOTAL";
18180 PRINT : GOSUB 17010
18190 LN = LN +3: RETURN
19000 REM <<<< WRITE FILES >>>
19010 NS = NR
19020 PRINT
19030 F$ = "RPTFMT" +RN$(NN)
19040 NR = 3 *RH +3
19050 FOR I = 1 TO NR:R$(I) = STR$(K(I)): NEXT I
19060 R$(I -3) = STR$(K(0))
19070 R$(I -1) = STR$(FT)
19080 GOSUB 24010: GOSUB 25010
19090 RETURN
20000 REM <<< READ FILES >>>
20010 F$ = "RPTFMT" +RN$(NN)
20020 GOSUB 23010
20030 RH = (NR -3)/3: FOR I = 1 TO NR:K(I) = VAL(R$(I)): NEXT I
20040 K(0) = VAL(R$(I -3)):K(I -3) = NH +1
20050 FT = VAL(R$(I -1))
20060 NR = NS
20070 GOSUB 21010: PRINT : GOTO 15508
21000 REM <>>
21010 HOME : PRINT "SELECT FROM:": PRINT
21020 IF MF = 0 THEN PRINT "O "H$(0)
21030 FOR I = 1 TO NH: PRINT I" "H$(I): NEXT I: PRINT
21040 MF = 0
21050 RETURN
22010 NN = 0: FOR I = 0 TO 21:RN$(I) = "": NEXT I:NS = NR
22020 F$ = "RPTFMTNAME"
22030 ONERR GOTO 22160
22035 PRINT D$;"VERIFY";PB$ +FD$ +"/" +F$
22040 GOSUB 23010
22050 POKE 216,0
22060 FOR I = 1 TO NR:RN$(I) = R$(I): NEXT I
22070 HOME : PRINT "SELECT FROM:": PRINT
22080 FOR I = 1 TO NR: PRINT I" "R$(I): NEXT I: PRINT
22090 PRINT I" CREATE A NEW REPORT FORMAT"
22100 PRINT I +1" DELETE A REPORT FORMAT": PRINT I +2" RETURN TO THE MAIN ROUTINE": PRINT
22104 PRINT I +3" CHANGE PRINTER STATUS"
22106 PRINT " CURRENT STATUS IS ";: IF PF THEN INVERSE : PRINT "ON": NORMAL : GOTO 22110
22108 INVERSE : PRINT "OFF": NORMAL : PRINT
22110 L$ = "WHICH ":CHOICE = I +3: GOSUB 2410:S = R
22115 IF S = I +2 THEN NR = NS: GOTO 28010
22116 IF S = I +3 THEN GOSUB 29110: GOTO 22070
22120 NN = S
22130 IF S >
23010 FF = 0: IF F$ < >"INDEX" THEN FF = 1
23015 Q$ = PB$ +FD$ +"/" +F$
23020 PRINT D$"OPEN"Q$
23030 PRINT D$"READ"Q$
23040 INPUT NR
23050 FOR J = 1 TO NR
23060 ON FF GOTO 23130
23070 FOR I = 1 TO NH
23080 CALL 768,N$(J,I)
23090 L = LEN(N$(J,I)): IF L >L%(I) THEN L%(I) = L
23100 NEXT I
23110 R(J) = J
23120 GOTO 23140
23130 CALL 768,R$(J)
23140 NEXT J
23150 PRINT D$"CLOSE"
23160 FF = 0
23170 RETURN
24010 NR$ = RIGHT$("00000" + STR$(NR),5)
24020 FF = 0: IF F$ < >"INDEX" THEN FF = 1
24025 ONERR GOTO 60010
24030 Q$ = PB$ +FD$ +"/" +F$
24040 PRINT D$"OPEN"Q$: PRINT D$"WRITE"Q$
24050 PRINT NR$
24060 FOR J = 1 TO NR
24070 ON FF GOTO 24130
24080 Y = R(J)
24090 FOR I = 1 TO NH
24100 PRINT N$(Y,I)
24110 NEXT I
24120 GOTO 24140
24130 PRINT R$(J)
24140 NEXT J
24150 PRINT D$"CLOSE"
24160 FF = 0
24170 RETURN
25010 NR = NN:I = 0
25020 F$ = "RPTFMTNAME"
25030 I = I +1: IF I >>
29010 PRINT "VERIFY THAT PRINTER IS TURNED ON"
29020 PRINT " PRESS ANY KEY WHEN READY": GET K$
29030 PF = 1
29040 RETURN
29100 REM <<< SET PRINTER MODE >>>
29110 IF PF THEN PF = 0:LN = 0: GOTO 29130
29120 PF = 1
29130 RETURN
30000 REM << DELETE FILE >>>
30010 HOME : PRINT "SELECT FROM:": PRINT
30020 FOR I = 1 TO NR: PRINT I" "R$(I): NEXT I: PRINT
30030 L$ = "DELETE WHICH NUMBER ":CHOICE = I -1: GOSUB 2410:S = R
30040 HOME : VTAB 10: PRINT "YOU HAVE SELECTED THE OPTION TO DELETE": INVERSE : PRINT RN$(S)" FORMAT": NORMAL
30050 L$ = "IS THIS CORRECT": GOSUB 2510: IF NOT YES THEN NR = NS: GOTO 28010
30060 F$ = "RPTFMT" +RN$(S)
30065 Q$ = PB$ +FD$ +"/" +F$
30070 PRINT D$"DELETE"Q$
30075 PRINT D$"CLOSE"
30080 IF S = NR THEN 30100
30090 FOR I = S TO NR -1:RN$(I) = RN$(I +1): NEXT I
30100 NR = NR -1:F$ = "RPTFMTNAME": IF NR <1 THEN 30130
30110 I = 0: GOSUB 25030
30120 GOTO 22010
30130 Q$ = PB$ +FD$ +"/" +F$
30132 PRINT D$"CLOSE"
30133 ONERR GOTO 30137
30135 PRINT D$"DELETE";Q$
30137 POKE 216,0
30140 NR = NS: GOTO 28010
60000 REM <<< ERROR TRAP FOR INVALID INPUT>>>
60010 TEXT : HOME : VTAB 10
60020 PRINT " INVALID INPUT": PRINT
60030 PRINT "PRODOS REQUIRES THAT FILE NAMES BEGIN WITH A LETTER AND CONTAIN ONLY LETTERS,NUMBERS OR PERIODS."
60040 PRINT : PRINT "NO SPACES ARE PERMITTED. NAMES MUST NOT EXCEED 15 CHARACTERS - INCLUDING ANY ASSIGNED BY THE PROGRAM."
60045 PRINT "SIX CHARACTERS ARE ADDED BY THE PROGRAM WHEN SAVING REPORT NAMES."
60050 PRINT : PRINT " PRESS ANY KEY TO RETURN TO REPORT MENU ";: GET K$
60060 POKE 216,0: GOTO 22010
61000 REM *********************
61010 REM FILE CABINET
61020 REM PRODOS
61030 REM ---------------------
61040 REM CONVERTED BY
61050 REM MICHAEL MOORE
61060 REM MAY 1984
61070 REM =====================
61080 REM BASED ON
61090 REM FILE CABINET-MACH 5
61100 REM BY ED AYMOND
61110 REM AND BOB MATZINGER
61120 REM AS A MODIFICATION
61130 REM OF EARLIER VERSIONS
61140 REM *********************
61150 REM APPLE CORPS OF DALLAS
Text found in 143_Volume_143.dsk/SORT.bas:
10 REM << FILE CABINET >>
20 REM << PRODOS >>
30 REM << SORT MODULE >>
40 REM << CONVERTED BY >>
50 REM << MICHAEL MOORE >>
60 REM << MAY 1984 >>
70 :
100 GOTO 5400: REM << SORT ROUTINE >>
2400 REM << GENERAL PURPOSE ROUTINE >>>
2410 PRINT L$"->":V = PEEK(37)::H = LEN(L$) +3
2420 VTAB V: HTAB H: CALL -868: INPUT "";R$:R = VAL(R$): CALL -958
2430 IF R <1 OR R >CHOICE THEN 2450
2440 PRINT : RETURN
2450 IF V = 23 THEN V = 22
2460 CALL -868: PRINT " ENTER NUMBER 1 THRU ";CHOICE: GOTO 2420
2469 :
2500 REM <<<< GET ANSWER ROUTINE >>>
2510 V = PEEK(37) +1
2515 PRINT L$" (Y/N)"
2520 IF V >23 THEN V = 23
2530 VTAB V: HTAB ( LEN(L$) +8): CALL -868: INPUT A$: IF A$ = "Y" THEN YES = 1: RETURN
2540 IF A$ = "N" THEN YES = 0: RETURN
2550 INVERSE : PRINT " PRESS 'Y' OR 'N'...": NORMAL : IF V = >23 THEN V = 22
2560 GOTO 2530
5000 REM <<< SORT ROUTINE >>>>
5010 N = NR:M = N:FF = 0: ONERR GOTO 5080
5020 M = INT(M/2):K = N -M:J = 1: PRINT "SORTING ";: IF M = 0 THEN PRINT CHR$(13): GOTO 5100
5030 I = J
5040 LL = I +M:I2 = R(I):L2 = R(LL): ON L GOTO 5050,5060: ON ( VAL(N$(I2,S)) = > VAL(N$(L2,S))) GOTO 5080: GOTO 5070
5050 ON (N$(I2,S) < = N$(L2,S)) GOTO 5080: GOTO 5070
5060 ON ( VAL(N$(I2,S)) < = VAL(N$(L2,S))) GOTO 5080
5070 Y = R(I):R(I) = R(LL):R(LL) = Y:I = I -M: IF I > = 1 THEN 5040
5080 J = J +1: IF J >K THEN 5020
5090 GOTO 5030
5100 POKE 216,0: HTAB 10: INVERSE : FLASH : PRINT " ": NORMAL
5200 PRINT : PRINT "WANT TO SAVE >"FD$"< FILE":L$ = "SORTED BY >" +H$(S) +"< TO DISK ": GOSUB 2510: IF YES THEN F$ = "INDEX": GOSUB 24010
5210 GOTO 28010
5400 MF = 1: GOSUB 21010
5410 L$ = "ENTER # OF FIELD FOR SORT ":CHOICE = NH: GOSUB 2410:S = R
5411 ST = 0
5412 IF NR = <40 THEN ST = 2
5413 IF NR >40 THEN ST = 6
5414 IF NR >90 THEN ST = 15
5415 IF NR >140 THEN ST = 70
5416 IF NR >200 THEN ST = 150
5417 IF NR >250 THEN ST = 250
5418 IF NR >300 THEN ST = 370
5419 PRINT : PRINT "SORT WILL TAKE APPROX. ";: FLASH : PRINT (ST + INT(.06 *NR * LOG(NR)));: NORMAL : PRINT " SECONDS": PRINT
5420 PRINT : PRINT "DO YOU WANT TO SORT:": PRINT
5430 PRINT "1 ALPHABETICALLY"
5440 PRINT "2 NUMERICALLY (LOW TO HIGH)"
5450 PRINT "3 NUMERICALLY (HIGH TO LOW)": PRINT
5460 L$ = "WHICH ":CHOICE = 3: GOSUB 2410:L = R
5470 PRINT : PRINT : GOTO 5010
21000 REM <<< SELECT SUB ROUTINE >>
21010 HOME : PRINT "SELECT FROM:": PRINT
21020 IF MF = 0 THEN PRINT "O "H$(0)
21030 FOR I = 1 TO NH: PRINT I" ";H$(I): NEXT I:NS = NR
21040 MF = 0
21050 RETURN
24000 REM << WRITE INDEXFILE >>>>
24010 NR$ = RIGHT$("00000" + STR$(NR),5)
24020 FF = 0: IF F$ < >"INDEX" THEN FF = 1
24030 Q$ = PB$ +FD$ +"/" +F$
24040 PRINT D$"OPEN"Q$: PRINT D$"WRITE"Q$
24050 PRINT NR$
24060 FOR J = 1 TO NR
24070 ON FF GOTO 24130
24080 Y = R(J)
24090 FOR I = 1 TO NH
24100 PRINT N$(Y,I)
24110 NEXT I
24120 GOTO 24140
24130 PRINT R$(J)
24140 NEXT J
24150 PRINT D$"CLOSE"
24160 FF = 0
24170 RETURN
28010 PRINT D$"CHAIN";PX$ +"MAIN"
30000 REM <<< SORT MODULE FOR FILE CABINET - USING PRODOS >>>>
61000 REM *********************
61010 REM FILE CABINET
61020 REM PRODOS
61030 REM ---------------------
61040 REM CONVERTED BY
61050 REM MICHAEL MOORE
61060 REM MAY 1984
61070 REM =====================
61080 REM BASED ON
61090 REM FILE CABINET-MACH 5
61100 REM BY ED AYMOND
61110 REM AND BOB MATZINGER
61120 REM AS A MODIFICATION
61130 REM OF EARLIER VERSIONS
61140 REM *********************
61150 REM APPLE CORPS OF DALLAS
Text found in 143_Volume_143.dsk/STARTUP.bas:
10 REM ** STARTUP **
20 D$ = CHR$(4)
30 TEXT : HOME : HTAB 10: PRINT "APPLE CORPS OF DALLAS"
40 PRINT : HTAB 7: PRINT "DISK OF THE MONTH JULY,1984": PRINT
45 HTAB 4: PRINT "INTERNATIONAL APPLE CORE DOM # 49": PRINT
50 HTAB 8: PRINT "PRODOS DISK: /DOM.PRODOS"
55 PRINT
60 PRINT
70 PRINT "SELECT FROM THE FOLLOWING": PRINT
80 PRINT "1 FILE CABINET-PRODOS"
90 PRINT "2 FILE CABINET STUFFER"
100 PRINT "3 FILE CABINET INITIALIZER"
110 PRINT "4 FILE CABINET MODIFIER"
120 PRINT "5 FILE CABINET INSTRUCTIONS"
130 PRINT "6 FILE CABINET-ONE PROGRAM"
135 PRINT
140 PRINT "7 TYPE COMMAND INSTRUCTIONS"
150 PRINT "8 INSTALL 'TYPE.ORIG' COMMAND"
160 PRINT "9 INSTALL 'TYPE' COMMAND"
170 PRINT "10 QUIT TO BASIC": PRINT
180 INPUT " ENTER THE NUMBER OF YOUR SELECTION :";K$
190 K = VAL(K$): IF K <1 OR K >10 GOTO 30
200 ON K GOTO 210,220,230,235,240,250,260,270,280,290
210 PRINT D$;"RUN MAIN"
220 PRINT D$;"RUN FILECAB.STUFFER"
230 PRINT D$;"RUN FILECAB.INITIAL"
235 PRINT D$;"RUN FILECAB.MOD"
240 PRINT D$;"RUN FILECAB.INSTR"
250 PRINT D$;"RUN FILECABINET"
260 GOSUB 310: REM DISPLAY TYPE INSTRUCTIONS
265 GOTO 30
270 HOME : VTAB 10
272 PRINT "INSTALLING 'TYPE.ORIG COMMAND"
274 PRINT D$;"BLOAD TYPE.ORIG"
276 CALL 8033
278 PRINT "'TYPE.ORIG' COMMAND NOW INSTALLED PRESS ANY KEY TO CONTINUE": GET K$: GOTO 30
280 HOME : VTAB 10
282 PRINT "INSTALLING 'TYPE' COMMAND"
284 PRINT D$;"BLOAD TYPE"
286 CALL 8033
288 PRINT "'TYPE' COMMAND NOW INSTALLED PRESS ANY KEY TO CONTINUE": GET K$: GOTO 30
290 HOME : PRINT "TO RETURN TO MENU, TYPE 'RUN'": END
300 REM << TYPE INSTRUCTIONS >>
310 TEXT : HOME : VTAB 5: INVERSE
320 HTAB 10: PRINT "TYPE COMMAND": NORMAL : PRINT
330 PRINT "THE 'TYPE' COMMAND PROVIDES THE ABILITY TO LIST A TEXT FILE FROM DISK TO THE SCREEN OR TO A PRINTER, IF ACTIVE.": PRINT
340 PRINT "THIS VERSION WAS PUBLISHED BY CECIL FRETWELL IN THE MAY 1984 ISSUE OF CALL- A.P.P.L.E.": PRINT
350 PRINT "THE 'TYPE' COMMAND CAN BE INSTALLED BY A 'BRUN' COMMAND OR BY 'BLOAD' FOLLOWED BY A 'CALL 8033'; EITHER IN IMMEDIATE MODE OR FROM PROGRAM MODE.": PRINT
360 HTAB 5: PRINT "PRESS ANY KEY TO CONTINUE ->->-> ";: GET K$
370 HOME : PRINT
380 PRINT "TWO VERSIONS OF THIS COMMAND WERE PRO- VIDED IN THE ARTICLE. THE LISTED VERSIONIS NAMED 'TYPE.ORIG' ON THIS DISK."
390 PRINT "THE AUTHOR INDICATES THAT A POTENTIAL BUG EXISTS IN PRODOS; SUCH THAT THE ORIGINAL VERSION MAY RESULT IN 'SYNTAX ERROR' BEING DISPLAYED."
400 PRINT "THE SYSTEM WILL REQUIRE A RE-BOOT IF THIS CONDITION OCCURS.": PRINT
410 PRINT "THE SUGGESTED CORRECTION INVOLVED THE USE OF A 'POKE 48647,PEEK(48647)-1' SEQUENCE BEFORE INSTALLATION OF THE 'TYPE' COMMAND."
420 PRINT "THE ALTERNATE PROGRAM WHICH IS NAMED 'TYPE' ON THIS DISK CONTAINS THE FIX FORTHIS PROBLEM WITHIN THE FIRST STEPS OF THE PROGRAM; THUS NO ADDITIONAL WORK IS REQUIRED.": PRINT
430 HTAB 5: PRINT "PRESS ANY KEY TO CONTINUE ->->-> ";: GET K$
440 HOME : PRINT
450 PRINT "ACTUAL USE OF THE 'TYPE' COMMAND ONLY REQUIRES ADHERENCE TO THE PRODOS PATH CONVENTIONS - SUCH AS:": PRINT
460 HTAB 10: PRINT "TYPE TEXTFILE": PRINT
470 HTAB 10: PRINT "TYPE /DISKA.WORK/TEXTFILE/"
480 VTAB 18
490 HTAB 5: PRINT "PRESS ANY KEY TO RETURN TO STARTUP MENU ->->-> ";: GET K$
500 RETURN
- Addeddate
- 2014-08-18 01:17:16
- Emulator
- apple2e
- Emulator_ext
- dsk
- Identifier
- riag_010_143_Volume_143
- Scanner
- Internet Archive Python library 0.7.0
comment
Reviews
135 Views
DOWNLOAD OPTIONS
IN COLLECTIONS
Uploaded by Jason Scott on