L%hh LHH` X% " ӠӠΠǠ ˮԠˠǠӬĠӠ٠٠ϠŮ+JJJJ ,,,L Lک ٥ҥ>ӥ? ( ㆭ  ؆` | A""""""QQQYV <"<Q '(h((QQQ`@GHOHO $"!$q}T@` `@@``p0 8p@@`00 |0@` `pppPox`D3 < p?|@@@|@`f ppn|>0p  qcs6<, 3['Nxxxpp0` ```@vl  ?`@:3q  AcqcCyO@  0p`@@q @p?|`3cC ? ?>|xp`p`@Acwsssssss__????????~^^ ?~~~~~~~?>~||xpp`@~| xyy{~|@`pp xpp`@yyyyyyyx~ ~x`|xpxqa` cqx|||||||cCC?>>>??<<|||~?`ppxx||<||xxpp`|||||||| |?|p`@@@@`p|? OOGgccqpxsssssssppxxx|<<~?>~||xxxxppp```@@@`?~|x|~|||||||p@@p|~><|xp`@>|x|xpx}yyyyyyyAA?~|xpp`ppx|~? ?? 33@``@@glloLL LlOgloloG @`@glolo@@gLLL GaamGGlg`GGlg`G  xL| x@@xMLLxMyyM MyxAxMx|Yq @lllLglllgG LlL`@GLOLo033366m~0>3>33~G<`G}rccb``acccq{{{{8008????~ |lL COoooog CgoooocCFFLLXXPpqa88`}}}}>????~ | ~FCCFL ____|GG|GGccp{{{{ ;1q``qp`aas{{{{8008 0y| |}}}}AAQg((h' $C@0j ed`y < I1@@q q s8EE9EE8> ` `$DC0ANPQN@'h(' WPG((H@stq q8AyEx:NPQ@GhHHG#$p# @ (*Y9AyEy: QQQO~C%%C~_DDD qAAAaq9`ppxxx|xxx|AsGN8088 CcˆʎõĵL õ ĵµ aµ`` L̦µ_bJLuLz`  ȟ QlXJ̥KlV  ȟ QlV eօ3L e3L &RL &QL d L4 Ne)n `@-eff L f`L . tQLѤ LҦL` OPu d L Ne)noon 8ɍ` ^f\õL ^NR  RΩLҦ)\Z ʽ LHv 3h`0h8` [L NС õ`A@` ŵL^L iõ`  \ 濭0 \  ȟ Q ^\lZl^?cqH şch`fhjõĵ@OAP`u@`@&`QR`E Ls  @DAE@u`8` %@ @A@`@`@A`Mµ ) LЦ`8@AWc@8@-@HAȑ@hHȑ@ȑ@hHȑ@Ȋ@ch8&ȑ@Hȑ@Ah@LHȑ@ȑ@ htphso`hMhL`9V8U897T6S67`INILOASAVRUCHAIDELETLOCUNLOCCLOSREAEXEWRITPOSITIOOPEAPPENRENAMCATALOMONOMOPRINMAXFILEFINBSAVBLOABRUVERIF!pppp p p p p`" t""#x"p0p@p@@@p@!y q q p@  LANGUAGE NOT AVAILABLRANGE ERROWRITE PROTECTEEND OF DATFILE NOT FOUNVOLUME MISMATCI/O ERRODISK FULFILE LOCKESYNTAX ERRONO BUFFERS AVAILABLFILE TYPE MISMATCPROGRAM TOO LARGNOT DIRECT COMMANč$3>L[dmx- ( t Ϡ@跻~!Wo*9~~~~ɬƬ~_ j ʪHɪH`Lc (L ܫ㵮赎 ɱ^_ J QL_Ls贩紎 DǴҵԵƴѵӵµȴ 7 ַ :ŵƴѵǴҵȴµ納贍﵎ٵ്ᵭⳍڵL^ѵ-I `  4 ò-յ!  8صٵ紭ﵝ 7L (0+BC  7L HH`LgL{0 HH` õL H hBL BH [ h`Lo õ ڬL B ڬ LʬH hB@ յյ [L (ȴ) ȴ 7L L ( L (ȴL{ƴѵ洩ƴǴҵ 7 ^* B0 HȱBh ӵԵ 8 L8 ݲ` ܫ  / / ED B / / ]ƴS0Jȴ ȴ)  紅D贅E B ƴ  / 0L Ν `HD٤DEEhiHLGh ` ŵBѵ-` ѵB-` ܫ XI볩쳢8 DH E𳈈췍Ȍ X0 · JLǵBȵC`,յp` 䯩 R-յյ`յ0` K R-յյ`ɵʵӵԵ` 4 K ( ѵҵLBȱBL8` DBHBH : ַ޵BȭߵBhhӵԵ RBܵmڵ޵ȱBݵm۵ߵ` 䯩LR˵̵ֵ׵`êĪLR E( 8` R` ELRŪƪ`췌 յյI뷭鷭귭ⵍ㵍跬ª 뷰` Lf ݵܵߵ޵ ^`8ܵ i B8` 4L ֵȱB׵ ܯ䵍൭嵍 ` DȑB׵Bֵ  ַ յյ`굎뵎쵬 뵎쵌``õĵBCõĵ`µµ`L õBĵCصص Qƴ0"Bƴ 󮜳` 0۰ϬBƴ8`i#`ЗLw!0>ﵭ` m ﳐ 7i볍 8 ЉLw`H h ݲL~ `浍국䵍뵩嵠Jm赍嵊mjnnn浈m浍浭m䵍䵐`"L ŵ8ŵH ~(` d ֠z# u`٠ŠĠЬϬìԠŬϬìŠҬϬìˍŬҬì٬ҬɬŬҬҬĬˍŬҬì٬ҬɬŬҬҬҬҠŬҬìҠŬҬìԠӬϬìٮƍˬҍččԠҬҬìάҬìҠŬҬɬͬϬɬͬϬɬҬˍŬҬì٬ҬɬŬҬҬĬ NEXT : PRINT : GOTO 3580"-5"NOMON C,I,O"A5D$;"CLOSE ";B$S5:"ALL DONE"5':"INSERT THE PDS*BASE MASTER IN DRIVE 1"::"AND PRESS ANY KEY ";:A$::D$"RUN MENU1"I ZQ$ : ZH(ZJ)=VAL(ZQ$) : GOTO 3580"4|"3750 IF LEFT$(ZQ$,2) = ";QM$;"CE";QM$;" THEN PRINT ";QM$;"ENTER NEW CHAIN END ";QM$;";ZJ; : INPUT ZQ$ : ZE(ZJ)=VAL(ZQ$) : GOTO 3580"5"3760 PRINT CHR$(7);"QM$;"NO SUCH CODE OR NUMBER";QM$;" : FOR ZJ=1 TO 1000 :QM$;";ZQ$ : ZN=VAL(ZQ$) : GOTO 3580"I3^"3720 IF LEN(ZQ$)<>3 GOTO 3580"3h"3730 ZJ=VAL(RIGHT$(ZQ$,1)) : IF ZJ < 1 OR VAL ZJ > ZS$(ZA,4) GOTO 3580"#4r"3740 IF LEFT$(ZQ$,2) = ";QM$;"CH";QM$;" THEN PRINT ";QM$;"ENTER NEW CHAIN HEAD ";QM$;";ZJ; : INPUTBER ? ";QM$;";ZQ$ : ZC=VAL(ZQ$) : GOTO 3580"2J"3700 IF ZQ$=";QM$;"PR";QM$;" THEN INPUT ";QM$;"ENTER NEW PREVIOUS MASTER NUM. ? ";QM$;";ZQ$ : ZP=VAL(ZQ$) : GOTO 3580"$3T"3710 IF ZQ$=";QM$;"NR";QM$;" THEN INPUT ";QM$;"ENTER NEW NEXT RECORD NUMBER ? ";80"{16"3680 IF ZQ$=";QM$;"FP";QM$;" THEN INPUT ";QM$;"ENTER NEW FORWARD POINTER ? ";QM$;";ZQ$ : ZF=VAL(ZQ$) : GOTO 3580",2@"3690 IF ZQ$=";QM$;"AR";QM$;" THEN PRINT ";QM$;"ENTER NEW QUAN OF MASTERS WITH THIS";QM$;" : INPUT ";QM$;"CALCULATED RECORD NUMUB 700 : GOTO 3500"0""3660 ZJ=VAL(ZQ$) : IF ZJ>0 THEN PRINT : PRINT ";QM$;"ENTER NEW ";QM$;";ZN$(ZA,ZJ,1); : INPUT Y$(ZJ) : GOTO 3580"1,"3670 IF ZQ$=";QM$;"BP";QM$;" THEN INPUT ";QM$;"ENTER NEW BACKWARD POINTER ? ";QM$;";ZQ$ : ZB=VAL(ZQ$) : GOTO 35NT : IF ZQ$<>";QM$;"Y";QM$;" GOTO 3650"/"3640 FOR ZJ=1 TO ZS%(ZA,7) : PRINT ZJ;";QM$;" - ";QM$;";ZN$(ZA,ZJ,1);";QM$;" = ";QM$;";Y$(ZJ) : NEXT"0"3650 PRINT : INPUT ";QM$;"ENTER FEILD NUM. OR POINTER CODE ? ";QM$;";ZQ$ : IF ZQ$=";QM$;QM$;" THEN GOS) : PRINT : PRINT "QM$;"CE";QM$;";ZJ;";QM$;" - CHAIN END = ";QM$;";ZE(ZJ) : NEXT"."3610 PRINT : PRINT ";QM$;"DO YOU WISH TO SEE THE DATA ? ";QM$;"; : INVERSE : PRINT ";QM$;"N";QM$;"; : NORMAL : HTAB(31)"."3620 GET ZQ$"'/"3630 PRINT ZQ$ : PRI ADDR RECS = ";QM$;";ZC : PRINT : PRINT ";QM$;" PR - PREV REC. = ";QM$;";ZP : PRINT : PRINT ";QM$;" NR - NEXT REC. = ";QM$;";ZN"R."3600 IF ZS%(ZA,4)>0 THEN FOR ZJ=1 TO ZS%(ZA,4) : PRINT : PRINT ";QM$;"CH";QM$;";ZJ;";QM$;" - CHAIN HEAD= ";QM$;";ZH(ZJPE**VALUE";QM$;" : PRINT"U,"3570 ZZ=1 : GOSUB 610 : REM READ THE SELECTED RECORD","3580 IF ZS%(ZA,1)=2 THEN PRINT ";QM$;" BP - BACK PTR. = ";QM$;";ZB : PRINT : PRINT ";QM$;" FP - FOWD PTR. = ";QM$;";ZF : GOTO 3610"-"3590 PRINT ";QM$;" AR - +"3550 IF ZR<1 OR ZR>ZS%(ZA,2) THEN PRINT : PRINT CHR$(7);";QM$;"RECORD NUMBER GREATER THAN THE RECORD";QM$;" : PRINT ";QM$;"CAPACITY OF ";QM$;";ZS%(ZA,2);";QM$;" FOR THIS FILE.";QM$;" : PRINT : GOTO 3520","3560 PRINT : PRINT ";QM$;"CODE**FIELD TYZJ,1) : NEXT : PRINT : INPUT ";QM$;" ENTER FILE NUMBER ? ";QM$;";ZQ$ : ZA=VAL(ZQ$) : IF ZA=0 GOTO 2110"*"3530 IF ZA<1 OR ZA >";SI;" GOTO 3510"*"3540 PRINT : INPUT ";QM$;" ENTER RECORD NUMBER ? ";QM$;";ZR$ : ZR=VAL(ZR$) : IF ZR=0 GOTO 3510" HOME : PRINT ";QM$;"SECTION 5 TO HARD MODIFY A RECORD.";QM$;" : PRINT : PRINT ";QM$;"YOU CAN MODIFY BOTH THE DATA AND THE";QM$;" : PRINT ";QM$;"POINTERS IN ANY RECORD.";QM$;" : PRINT"j*"3520 FOR ZJ=1 TO ";SI;" : PRINT : PRINT ZJ;";QM$;" - ";QM$;";ZS$(C;(Z"3110 NEXT ZK : PRINT D$ : PRINT D$;";QM$;"PR#1";QM$(d"3120 PRINT ZJ;TAB(8); : FOR ZK=1 TO ZL : PRINT C$(ZK); : NEXT ZK : PRINT : PRINT D$;";QM$;"PR#0";QM$(n"3130 NEXT ZJ"(x"3140 GOTO 3000"("3500 REM HARD MODIFY A RECORD")"3510RINT ";QM$;"RECORD";QM$;" : PRINT : PRINT D$;";QM$;"PR#0";QM$_'2"3070 FOR ZJ=1 TO ZS%(ZA,2)"'<"3080 PRINT D$;";QM$;"READ ";QM$;";ZS$(ZA,1);";QM$;",R";QM$;";ZJ"'F"3090 FOR ZK=1 TO ";NC(P"3100 GET C$(ZK) : IF ASC(C$(ZK))=13 THEN ZL=ZK : ZK=";NZQ$) : IF ZA<0 OR ZA>";SI;" GOTO 3000"z&"3050 PRINT : PRINT ";QM$;"TURN ON THE PRINTER FOR THE LISTING";QM$;" : PRINT"='("3060 PRINT D$;";QM$;"PR#1";QM$;" : PRINT ";QM$;"SERIAL (RAW) LISTING OF THE '";QM$;";ZS$(ZA,1);";QM$;" FILE.";QM$;" : PRINT : PILE # FILE NAME RECORDS";QM$;" : PRINT"%"3020 FOR ZJ=1 TO ";SI;" : PRINT TAB(2)ZJ;TAB(10)ZS$(ZJ,1);TAB(26)ZS%(ZJ,2) : PRINT : NEXT : PRINT"% "3030 INPUT ";QM$;"ENTER FILE NUMBER ";QM$;";ZQ$ : IF ZQ$=";QM$;QM$;" GOTO 2110"&&"3040 ZA=VAL(;QM$;";ZR : PRINT ";QM$;"LAST IN CHAIN NOT EQUAL TO CHAIN END IN MASTER (BROKEN CHAIN)";QM$$"2810 PRINT D$;";QM$;"PR#0";QM$;" : RETURN"$"3000 REM SERIAL LIST THE FILES".%"3010 HOME : PRINT ";QM$;"FILE LIST MENU";QM$;" : PRINT : PRINT ";QM$;"F"2780 IF ZE(Y4)=ZR THEN RETURN : REM REACHED CHAIN END AND IT IS = CHAIN END IN MASTER"}#"2790 PRINT D$;";QM$;"PR#1";QM$[$"2800 PRINT :PRINT ";QM$;"MASTER FILE ";QM$;";Y1;";QM$;" RECORD ";QM$;";Y2;";QM$;" DETAIL FILE ";QM$;";ZA;";QM$;" RECORD ";QM$;" RECORD ";QM$;";Y2;";QM$;" DETAIL FILE ";QM$;";ZA;";QM$;" RECORD ";QM$;";ZR : PRINT ";QM$;"BACKWARD POINTER NOT EQUAL LAST DETAIL RECORD NUMBER (BROKEN CHAIN)";QM$""2760 PRINT D$;";QM$;"PR#0";QM$;" : RETURN"""2770 IF ZF>0 GOTO 2720"X#";QM$%!~"2710 IF ZF=0 THEN RETURN"b!"2720 Y5=ZR : ZR=ZF : GOSUB 600 : REM READ NEXT DETAIL"!"2730 IF ZB=Y5 GOTO 2770 : REM BACK PTR=LAST RECORD NUMBER"!"2740 PRINT D$;";QM$;"PR#1";QM$""2750 PRINT :PRINT ";QM$;"MASTER FILE ";QM$;";Y1;"PRINT :PRINT ";QM$;"MASTER FILE ";QM$;";Y1;";QM$;" RECORD ";QM$;";Y2;";QM$;" DETAIL FILE ";QM$;";ZA;";QM$;" RECORD ";QM$;";ZR : PRINT ";QM$;"1ST DETAIL HAS ZERO FORWARD PTR BUT CHAIN END IN MASTER NOT THE SAME NUMBER";QM$!t"2700 PRINT D$;";QM$;"PR#0M$;";Y2;";QM$;" DETAIL FILE ";QM$;";ZA;";QM$;" RECORD ";QM$;";ZR : PRINT ";QM$;"1ST DETAIL HAS ";QM$;";ZB;";QM$;" AS BACKWARD POINTER";QM$L"2660 PRINT D$;";QM$;"PR#0";QM$V"2670 IF ZF>0 GOTO 2710"`"2680 PRINT D$;";QM$;"PR#1";QM$ j"2690 M READ CHAIN HEAD RECORD"s$"2620 IF ZH(Y4)=0 AND ZE(Y4)=0 AND ZB=0 AND ZF=0 THEN RETURN : REM 1 SLAVE - ALL OK"."2630 IF ZB=0 GOTO 2670"8"2640 PRINT D$;";QM$;"PR#1";QM$B"2650 PRINT :PRINT ";QM$;"MASTER FILE ";QM$;";Y1;";QM$;" RECORD ";Q"2490 ZS%(Y1,6)=Y3 : REM RESET ASSIGNED RECORDS COUNTER"L"2500 NEXT Y1"b"2510 GOTO 2110"r"2520 REM""2600 REM SUBROUTINE TO CHECK OUT THE CHAIN FOR MASTER Y2 AND THE Y4TH ASSOCIATED SET""2610 ZA=ST(Y4) : ZR=ZH(Y4) : GOSUB 600 : RE Y3=0 : FOR Y2=1 TO ZS%(Y1,2)"C"2440 ZZ=1 : ZR=Y2 : GOSUB 610"l"2450 IF ZL$=";QM$;QM$;" GOTO 2490""2460 Y3=Y3+1 : FOR Y4=1 TO ZS%(Y1,4) : IF ZH(Y4)<>0 THEN GOSUB 2600 : REM CHECK THE CHAIN HEAD""2470 NEXT Y4""2480 NEXT Y2"8E) ";QM$;"; : GET ZQ$ : PRINT"4"2380 GOTO 2110"c"2400 REM CHECK FOR BROKEN DETAIL CHAINS""2410 PRINT CHR$(7);";QM$;"TURN ON THE PRINTER FOR ERROR LIST";QM$"2420 FOR Y1=1 TO";SI;" : IF ZS%(Y1,1)<>1 OR ZS%(Y1,4)=0 GOTO 2500""2430Y2=Y2+1"R\"2340 X=PEEK(37) : POKE 37,X-1 : PRINT TAB(2)ZA;TAB(9)ZR;TAB(20)Y2;"vf"2350 NEXT ZR : PRINT : PRINT"p"2360 ZS%(ZA,6)=Y2 : REM UPDATE RECORDS ASSIGNED"z"2370 NEXT ZA""2375 PRINT : PRINT ";QM$;" (PRESS ANY KEY TO CONTINUER QUANTITY ASSIGNED"d4"2305 PRINT : PRINT ";QM$;"FILE * RECORD * ACTIVE RECORDS";QM$;" : PRINT">"2310 FOR ZA=1 TO ";SI;" : IF ZS%(ZA,1)<>1 GOTO 2370"H"2320 Y2=0 : FOR ZR=1 TO ZS%(ZA,2)"R"2330 ZZ=1 : GOSUB 610 : IF ZL$<>";QM$;QM$;" THEN -1 : PRINT TAB(2)ZA;TAB(9)ZR;SPC(1);TAB(20)ZL;";QM$;" ";QM$;" : ZL=ZR"j"2260 NEXT ZR : PRINT : PRINT" "2270 ZS%(ZA,6)=Y2 : ZS%(ZA,8)=ZL : REM RESET THE HOUSEKEEPING POINTERS""2280 NEXT ZA" "2290 GOTO 2375"*"2300 REM RESET THE MAST00 : Y1=0 : FOR ZJ=1 TO ZS%(ZA,7) : IF Y$(ZJ)<>";QM$;QM$;" THEN Y1=1"y"2240 NEXT : IF Y1=1 THEN Y2=Y2+1 : GOTO 2260""2250 ZF=ZL : GOSUB 700 : ZL=ZR : REM SET THE FORWARD POINTER TO THE NEXT HIGHER VACANT RECORD"F"2255 X=PEEK(37) : POKE 37,XRESET DETAIL VACANT RECORD POINTERS"p"2205 PRINT : PRINT ";QM$;"FILE * RECORD * LAST VACANT";QM$;" : PRINT""2210 FOR ZA=1 TO ";SI;" : IF ZS%(ZA,1)<>2 GOTO 2280""2220 ZL=ZS%(ZA,2)+1 : Y2=0 : FOR ZR=ZS%(ZA,2) TO 1 STEP -1"E"2230 GOSUB 6 ";QM$;"5 - HARD MODIFY A RECORD";QM$"2165 PRINT : PRINT ";QM$;" ENTER CODE ? ";QM$;"; :GET ZQ$ : PRINT ZQ$ : ZK=VAL(ZQ$) : IF ZK=0 GOTO 400""2170 IF ZK < 0 OR ZK > 5 GOTO 2110""2180 ON ZK GOTO 2200,2300,2400,3000,3500"$"2200 REM '";QM$;" : PRINT ";QM$;" RECORDS";QM$"2150 PRINT : PRINT ";QM$;"3 - VERIFY MASTER/DETAIL RELATIONSHIPS";QM$;" : PRINT ";QM$;" FOR BROKEN DETAIL CHAINS";QM$"2155 PRINT : PRINT ";QM$;"4 - SERIAL PRINT THE FILES";QM$%"2160 PRINT : PRINT;QM$;B$;QM$;" : PRINT"Nb"2120 PRINT TAB(12)";QM$;"DBUTILITY MAIN MENU";QM$l"2130 PRINT : PRINT ";QM$;"1 - RESET DETAIL 'NEXT VACANT RECORD'";QM$;" : PRINT ";QM$;" POINTERS";QM$(v"2140 PRINT : PRINT ";QM$;"2 - RESET MASTER 'QUANTITY ASSIGNED(J,4)+1"%0"2025 FOR L=J+1 TO ";SIW:"2030 IF ZS$(J,K)=ZS$(L,1) THEN ST(J,K-1)=L"sD"2035 NEXT L : NEXT K"N"2040 NEXT J"X"2110 HOME : PRINT ";QM$;"PDS*BASE DATA BASE DBUTILITY PROGRAM FOR";QM$;" : PRINT : PRINT TAB(";((40(B$))2);");""(:"ENTER THE EXEC FILE NAME? ";F$9F$""10000KD$;"MON I,O"`D$;"APPEND ";F$tD$;"WRITE ";F$"2005 DIM ST(10,10),C$(";NC;")""2010 FOR J=1 TO ";SI"2015 IF ZS%(J,1)=2 OR ZS%(J,4)=0 GOTO 2040"&"2020 FOR K=2 TO ZS%1SIrS(J,2)NSNSS(J,2)6|S(J,3)NVNVS(J,3)OS(J,6)NCNCS(J,6)hS(J,7)NDNDS(J,7)~S(J,8)0NCNC1S(J,1)1S(J,4)NRNRS(J,4) *** CREATE THE EXEC FILE ***(7):"INSERT YOUR PROGRAM DISC IN DRIVE #12),SV$(J,K,3),SV%(J,K), FIELD NAME, REQUIRED/OPTIONAL FLAG (R OR O), DATA TYPE (R=REAL, I=INTEGER, C=CHARACTER), NUMBER OF CHARACTERS IN THIS FIELD.6K@JJD$;"CLOSE ";B$TK(B$):B$(B$,(K4))^NS0:NV0:ND0:NC0:NR0:NC0hJNO SLAVES.K1S(J,2))S$(J,K1) NAME OF THE ASSOCIATED FILES (MASTER IF THIS FILE IS A DETAIL, OR THE DETAIL FILES IF THIS IS A MASTER FILE).KK1S(J,3) S(J,3) IS THE NUMBER OF FIELDS IN THIS FILE."SV$(J,K,1),SV$(J,K,CORD NUMBER ON THIS DRIVE, ENDING RECORD NUMBER ON THIS DRIVE, SLOT NUMBER AND DRIVE NUMBER (IN THIS SLOT) FOR THIS DRIVE. K S(J,2)0270  S(J,2) IS THE NUMBER OF ASSOCIATED FILES. THUS, WE SKIP THE NEXT FOR-NEXT LOOP IF IT IS A MASTER WITH R RECORD, NUMBER OF DISC DRIVES TO HOLD THIS FILE, SECTORS IN COMP FILE.X K1S(J,7) S(J,7) IS THE NUMBER OF DRIVES NECESSARY TO CONTAIN THIS FILE. SR%(J,K,1),SR%(J,K,2),SR%(J,K,3),SR%(J,K,4),SR%(J,K,5)z DRIVE NUMBER (1-12), STARTING REOF THE BASE DEFINITION FILE' J1SIl S$(J,1),S(J,1),S(J,2),S(J,3),S(J,4),S(J,5),S(J,6),S(J,7),S(J,8)H FILE NAME,TYPE (1=MASTER, 2=DETAIL), NUMBER OF ASSOCIATED FILES, NUMBER OF FIELDS, NUMBER OF RECORDS IN FILE, SECTORS REQUIRED, CHARACTERS PEnSI,DT,BT$:BT$B$ĺD$;"CLOSE ";B$:D$::(7);"YOU INPUT '";B$;"' ,BUT":"'";BT$;"' WAS FOUND IN THE 1ST RECORD.":"MUST CANCEL THIS RUN":10000 x NUMBER OF FILES (INCLUDING BOTH MASTER AND DETAIL), THE REQUIRED NUMBER OF DISC DRIVES, AND THE NAME PDS*BASE UTIL1 PROGRAM":::4)"COPYRIGHT 1985, PRO DEV SOFTWARE"::7)"MUSKEGON, MICHIGAN 49442"::w <J11000: F"ENTER THE DEFINITION FILE"::"NAME ? ";B$:B$""10000 P(B$,4)".DEF"B$B$".DEF" ZD$;"OPEN ";B$ dD$;"READ ";B$ -m ** PROGRAM DBUTIL01 ** COPYRIGHT 1985, PRO DEV SOFTWARE, 545 GROVER ROAD, MUSKEGON, MICHIGAN 49442 **sSV$(10,40,3),SV%(10,40),S$(10,10),S(10,8),SR%(10,12,5)(D$(4):CM$(44):QM$(34)g 2::13)"DBUTIL01 PROGRAM"::" TO CREATE                E PDS*BASE MASTER IN DRIVE 1"::"AND PRESS ANY KEY ";:A$::D$"RUN MENU1"ED PRESS ANY KEY ";:A$::D$"RUN MENU1"D;ZF$ : PRINT : PRINT ";QM$;"SORT KEY FILE '";QM$;";ZF$;";QM$;"' IS CREATED.";QM$ NT YA%(ZI,2) : NEXT ZI">"2290 PRINT D$;";QM$;"CLOSE ";QM$;";YF$ : PRINT : PRINT ";QM$;"SORT KEY FILE '";QM$;";YF$;";QM$;"' IS CREATED.";QM$H"2300 GOTO 400"R"NOMON I,O"\D$;"CLOSE ";F$fD$;"NOMON I,O"p"ALL DONE"K':"INSERT THM$< "2250 PRINT : PRINT ";QM$;"THE SORT IS BEING SAVED."*"2270 PRINT D$;";QM$;"OPEN ";QM$;";YF$ : PRINT D$;";QM$;"DELETE ";QM$;";YF$ : PRINT D$;";QM$;"OPEN ";QM$;";YF$ : PRINT D$;";QM$;"WRITE ";QM$;";YF$"4"2280 PRINT Z5 : FOR ZI=1 TO Z5 : PRIZK0 THEN HTAB(1) : PRINT YA$(YA%(ZJ,1));SPC(20);""2220 IF Z7 THEN ZK=YB%(Z7,0) : ZL=YB%(Z7,1) : Z7=Z7-1 : GOTO 2160""2230 PRINT : PRINT : PRINT""2240 PRINT : PRINT CHR$(7);";QM$;"THE SORT IS FINISHED!!!!";QI,1)=Y1 : Y1=YA%(ZJ,2) : YA%(ZJ,2)=YA%(ZI,2) : YA%(ZI,2)=Y1 : Z8=ABS(Z8-1) : REM PERFORM THE SWAP OF TAGS""2180 ZI=ZI+Z8 : ZJ=ZJ-(1-Z8) : IF ZI YA$(YA%(ZJ,1)) THEN Y1=YA%(ZJ,1) : YA%(ZJ,1)=YA%(ZI,1) : YA%(Z,2)"!"2070 ZZ=1 : GOSUB 610""2100 IF ZL$<>";QM$;QM$;" THEN Z5=Z5+1 : FOR ZJ=1 TO ZL : YA$(Z5)=YA$(Z5)+Y$(YF%(ZJ)) : NEXT ZJ : YA%(Z5,1)=Z5 : YA%(Z5,2)=ZR""2120 NEXT ZR : ZS%(ZA,6)=Z5 : REM CORRECT RECORDS ASSIGNED"@"2130 PRINT : PRINT55 PRINT : PRINT ";QM$;"THE SORT KEYS ARE BEING LOADED FROM";QM$;" : PRINT ";QM$;"THE '";QM$;";ZS$(ZA,1);";QM$;"' FILE.";QM$;" : Z5=0 : ZO$=";QM$;"Z";QM$;"l"2060 ZO$="QM$;"ZZZZ";QM$;" : FOR Z1=1 TO 4 : ZO$=ZO$+ZO$ : NEXT"v"2065 FOR ZR=1 TO ZS%(ZAPRINT ZJ;";QM$;" - ";QM$;";TAB(8)ZN$(ZA,ZJ,1) : NEXT ZJ : PRINT"N"2045 FOR ZJ=1 TO ZS%(ZA,7) : INPUT ";QM$;"ENTER FIELD NUMBER ? ";QM$;";ZQ$ : YF%(ZJ)=VAL(ZQ$) : IF YF%(ZJ)=0 THEN ZL=ZJ-1 : ZJ=ZS%(ZA,7)"X"2050 NEXT ZJ : IF ZL=0 GOTO 400"b"20ER FILE NUMBER ";QM$;"; : INPUT ZA : IF ZS%(ZA,1)<>1 THEN PRINT : PRINT CHR$(7);";QM$;"BAD CODE - TRY AGAIN";QM$;" : PRINT : GOTO 2035"@D"2040 PRINT : PRINT ";QM$;"ENTER MAJOR TO MINOR SORT FIELD NUMBERS";QM$;" : PRINT : FOR ZJ=1 TO ZS%(ZA,7) : PRINT :IF YF$=";QM$;QM$;" GOTO 400"0"2030 PRINT : PRINT ";QM$;"CHOOSE ONE OF THE MASTER FILES TO SORT:";QM$;" : PRINT : FOR ZJ=1 TO ";SI;" : IF ZS%(ZJ,1)=1 THEN PRINT : PRINT ZJ;";QM$;" - ";QM$;";TAB(8)ZS$(ZJ,1)":"2035 NEXT ZJ : PRINT : PRINT ";QM$;"ENTR;"),YA%(";NR;",2),YF%(";NV;"),YB%(";((NR5));",1)"u"2017 YB$=";QM$;40);QM$;" : REM USED TO GENERATE BLANKS""2020 PRINT : PRINT ";QM$;"ENTER EXTERNAL SORT KEY FILE NAME";QM$;" : PRINT ";QM$;"TO SAVE THE SORT ";QM$;"; : INPUT YF$"&"2025 ME? ";F$F$""10000+D$;"MON I,O"@D$;"APPEND ";F$TD$;"WRITE ";F$"2010 HOME : PRINT ";QM$;" PDS*BASE DATA BASE SORT PROGRAM FOR";QM$;" : PRINT : PRINT TAB(";((40(B$))2);");";QM$;B$;QM$;" : PRINT : PRINT"6"2015 DIM YA$(";NrS(J,2)NSNSS(J,2)/|S(J,3)NVNVS(J,3)HS(J,7)NDNDS(J,7)^S(J,8)0NCNC1S(J,1)1S(J,4)NRNRS(J,4) *** CREATE THE EXEC FILE ***(7):"INSERT YOUR PROGRAM DISC IN DRIVE #1":"ENTER THE EXEC FILE NA,SV$(J,K,3),SV%(J,K), FIELD NAME, REQUIRED/OPTIONAL FLAG (R OR O), DATA TYPE (R=REAL, I=INTEGER, C=CHARACTER), NUMBER OF CHARACTERS IN THIS FIELD.6K@JJD$;"CLOSE ";B$TK(B$):B$(B$,(K4))^NS0:NV0:ND0:NC0:NR0hJ1SI SLAVES.K1S(J,2)'S$(J,K1) NAME OF THE ASSOCIATED FILES (MASTER IF THIS FILE IS A DETAIL, OR THE DETAIL FILES IF THIS IS A MASTER FILE).KK1S(J,3) S(J,3) IS THE NUMBER OF FIELDS IN THIS FILE."SV$(J,K,1),SV$(J,K,2)RD NUMBER ON THIS DRIVE, ENDING RECORD NUMBER ON THIS DRIVE, SLOT NUMBER AND DRIVE NUMBER (IN THIS SLOT) FOR THIS DRIVE. K S(J,2)0270 S(J,2) IS THE NUMBER OF ASSOCIATED FILES. THUS, WE SKIP THE NEXT FOR-NEXT LOOP IF IT IS A MASTER WITH NORECORD, NUMBER OF DISC DRIVES TO HOLD THIS FILE, SECTORS IN COMP FILE.V K1S(J,7) S(J,7) IS THE NUMBER OF DRIVES NECESSARY TO CONTAIN THIS FILE. SR%(J,K,1),SR%(J,K,2),SR%(J,K,3),SR%(J,K,4),SR%(J,K,5)x DRIVE NUMBER (1-12), STARTING RECO THE BASE DEFINITION FILE% J1SIj S$(J,1),S(J,1),S(J,2),S(J,3),S(J,4),S(J,5),S(J,6),S(J,7),S(J,8)F FILE NAME,TYPE (1=MASTER, 2=DETAIL), NUMBER OF ASSOCIATED FILES, NUMBER OF FIELDS, NUMBER OF RECORDS IN FILE, SECTORS REQUIRED, CHARACTERS PER SI,DT,BT$:BT$B$ĺD$;"CLOSE ";B$:D$::(7);"YOU INPUT '";B$;"' ,BUT":"'";BT$;"' WAS FOUND IN THE 1ST RECORD.":"MUST CANCEL THIS RUN":10000 x NUMBER OF FILES (INCLUDING BOTH MASTER AND DETAIL), THE REQUIRED NUMBER OF DISC DRIVES, AND THE NAME OFS*BASE SORT KEY FILE":::4)"COPYRIGHT 1985, PRO DEV SOFTWARE"::7)"MUSKEGON, MICHIGAN 49442"::u <J11000: F"ENTER THE DEFINITION FILE"::"NAME ? ";B$:B$""10000 P(B$,4)".DEF"B$B$".DEF" ZD$;"OPEN ";B$ dD$;"READ ";B$ nLk ** PROGRAM DBSORT ** COPYRIGHT 1985, PRO DEV SOFTWARE, 545 GROVER ROAD, MUSKEGON, MICHIGAN 49442 **qSV$(10,40,3),SV%(10,40),S$(10,10),S(10,8),SR%(10,12,5)(D$(4):CM$(44):QM$(34)e 2::13)"DBSORT PROGRAM"::" TO CREATE A PD                ZJ)=";QM$;"OVERFLOW";QM$;" : RETURN"5V> "NOMON I,O"IVH D$;"CLOSE ";F$]VR D$;"NOMON I,O"qV\ ::"ALL DONE"V':"INSERT THE PDS*BASE MASTER IN DRIVE 1"::"AND PRESS ANY KEY ";:A$::D$"RUN MENU1"" SE MASTER IN DRIVE 1"::"AND PRESS ANY K,3)+";QM$;",";QM$;"+RIGHT$(YT$(ZJ),6) : RETURN"U* "5100 IF Z3<15 THEN YT$(ZJ)=Z1$+";QM$;"$";QM$;"+LEFT$(YT$(ZJ),Z3-15)+";QM$;",";QM$;"+MID$(YT$(ZJ),Z3-11,3)+";QM$;",";QM$;"+MID$(YT$(ZJ),Z3-9,3)+";QM$;",";QM$;"+RIGHT$(YT$(ZJ),6) : RETURN"$V4 "5110 YT$(;QM$;"$";QM$;"+YT$(ZJ) : RETURN"T "5080 IF Z3<10 THEN YT$(ZJ)=Z1$+";QM$;"$";QM$;"+LEFT$(YT$(ZJ),Z3-6)+";QM$;",";QM$;"+RIGHT$(YT$(ZJ),6) : RETURN"/U "5090 IF Z3<13 THEN YT$(ZJ)=Z1$+";QM$;"$";QM$;"+LEFT$(YT$(ZJ),Z3-9)+";QM$;",";QM$;"+MID$(YT$(ZJ),Z3-80";QM$;" : Z3=Z3+1"US "5040 IF Z3>6 AND Z3+2>Z1 THEN YT$(ZJ)=Z1$+YT$(ZJ) : RETURN"S "5050 IF Z3>9 AND Z3+3>Z1 THEN YT$(ZJ)=Z1$+YT$(ZJ) : RETURN"S "5060 IF Z3>12 AND Z3+4>Z1 THEN YT$(ZJ)=Z1$+YT$(ZJ) : RETURN" T "5070 IF Z3<7 THEN YT$(ZJ)=Z1$+"T$(YT$(ZJ),1)<>";QM$;".";QM$;" THEN YT$(ZJ)=YT$(ZJ)+";QM$;".00";QM$;":Z3=Z3+3"R "5020 IF MID$(YT$(ZJ),Z3,1)=";QM$;".";QM$;" THEN YT$(ZJ)=YT$(ZJ)+";QM$;"00";QM$;" : Z3=Z3+2"S "5030 IF MID$(YT$(ZJ),Z3-1,1)=";QM$;".";QM$;" THEN YT$(ZJ)=YT$(ZJ)+";QM$;" = ";QM$;"+";QM$;" THEN Z1$=LEFT$(YT$(ZJ),1) : YT$(ZJ)=MID$(YT$(ZJ),2) : REM SAVE & STRIP SIGN"Q "5010 Z1=YT%(ZJ,4) : Z3=LEN(YT$(ZJ)) : IF Z3=O THEN YT$(ZJ)=";QM$;"$0.00";QM$;" : RETURN"NR "5015 IF Z3<3 AND RIGHT$(YT$(ZJ),1)<>";QM$;".";QM$;" AND LEF TO ";LM;" : PRINT CHR$(95); : NEXT Z1 : PRINT : PRINT"vP "4560 ZL=";5LA;" : PRINT D$;";QM$;"PR#0";QM$;" : RETURN"P MF03390P "5000 REM MONITARY SUBROUTINE"_Q "5005 Z1$=";QM$;QM$;" :IF LEFT$(YT$(ZJ),1) = ";QM$;"-";QM$;" OR LEFT$(YT$(ZJ)),1)";QM$;"PR#1";QM$HOl "4520 IF ZI>1 THEN PRINT CHR$(12) : REM FORM FEED"oOv QD$"Y"ĺ"4525 PRINT ZD$;SPC(2);"O "4530 YP=YP+1 : PRINT ";QM$;TP$;" PAGE ";QM$;";YP : PRINT"O LN4530:K1LA:LNLN5:LN;" PRINT ";QM$;LA$(K);QM$:K7P "4550 FOR Z1=1NT YL$ : PRINT D$;"QM$;"PR#0";QM$;" : YL$=";QM$;QM$;" : ZL=ZL+1"N: "4105 NEXT ZJ : PRINT D$;"QM$;"PR#1";QM$;" : PRINT : PRINT D$;";QM$;"PR#0";QM$;" : ZL=ZL+1"ND "4110 RETURN"NN "4120 REM"NX "4500 REM PAGE HEADING SUBROUTINEOb "4510 PRINT D$;Z4+1)))"8M "4060 IF YT%(ZJ,6)=1 THEN YL$=YL$+YT$(ZJ)"M "4070 IF YT%(ZJ,6)>1 AND Z1>Z3 THEN YL$=YL$+LEFT$(YB$,Z1-Z3)+YT$(ZJ)"M "4080 IF YT%(ZJ,6)>1 AND Z1= ";PL;2600 : REM PRINT THE LINE"Jr "2550 IF YT%(YJ,9)=4 THEN YT$(YJ)=STR$(VAL(YT$(YJ))+VAL(Y$(YT%(YJ,2)))) : REM RUN TOTAL ON THIS FIELD"J| "2560 IF ZF>0 THEN YF=ZF : GOTO 2530"J "2590 GOSUB 4000 : REM PRINT LINE"J "2600 NEXT ZI"nK PC80ĺ"2610 =1 : GOSUB 610 : REM READ THE NEXT DETAIL RECORD"ZIT "2535 IF YT%(YJ,9) < > 0 GOTO 2550"I^ "2540 FOR Z1=1 TO ";J;" : IF ZA=YT%(Z1,1) THEN YT$(Z1)=Y$(YT%(Z1,2)) : REM SET UP FIELDS FOR THE DETAIL RECORD"Jh "2545 NEXT Z1 : GOSUB 4000 : IF ZF=0 GOTO ARCH VALUE"H "2495 NEXT Z1"3H" "2500 NEXT ZJ"YH, "2510 IF YJ=0 OR YF=0 GOTO 2590"H6 "2515 IF YT%(YJ,9)=0 THEN GOSUB 4000 : REM PRINT 1ST LINE WHEN A LINE FOR EACH DETAIL (FIELD YJ) IS TO BE PRINTED"H@ "2520 ZA=YT%(YJ,1)"1IJ "2530 ZR=YF : ZZJ)=Y$(YT%(ZJ,2)) : IF YT%(ZJ,9)=0 OR YT%(ZJ,9)=4 THEN YJ=ZJ : YF=ZF : REM SET UP TO READ ADDITIONAL DETAILS AT 2510"G "2485 IF YT%(ZJ,3)=0 GOTO 2500" H "2490 FOR Z1=1 TO ";J;" : IF ZA=YT%(Z1,7) THEN YR$(Z1)=Y$(YT%(Z1,8)) : REM SET UP FUTURE FIELD SEJ,1)"BF "2460 IF YT%(ZJ,9)<>2 THEN ZR=YH%(YT%(ZJ,7),YT%(ZJ,8))"~F "2470 IF YT%(ZJ,9)=2 THEN ZR=YE%(YT%(ZJ,7),YT%(ZJ,8))"F "2472 IF ZR>0 THEN ZZ=1 : GOSUB 610 : REM READ THE 1ST OR LAST DETAIL RECORD"F "2477 IF ZR=0 GOTO 2500"tG "2480 YT$(ZO ZS%(ZA,4) : YH%(ZA,ZK)=ZH(ZK) : YE%(ZA,ZK)=ZE(ZK) : NEXT ZK : REM STORE THE CHAIN HEAD AND ENDS FOR THIS MASTER RECORD"E "2435 GOTO 2485"E "2440 REM HANDLE THE DETAIL RECORD"E "2445 IF ZA=YT%(ZJ,1) GOTO 2477"F "2450 YJ=0 : ZR=0 : ZA=YT%(Z NEW FIELD IF THE FIELD LEADING TO IT WAS BLANK"D "2420 IF ZA<>YT%(ZJ,1) AND ZS%(YT%(ZJ,1),1)=1 THEN ZA=YT%(ZJ,1) : ZR$=YR$(ZJ) : GOSUB 500 : GOSUB 600 : YT$(ZJ)=Y$(YT%(ZJ,2)) : REM FIELD IN A DIFFERENT MASTER"yE "2430 IF ZS%(ZA,4)>0 THEN FOR ZK=1 Tx "2405 IF ZS%(YT%(ZJ,1),1)=2 GOTO 2440"C "2410 IF ZA=YT%(ZJ,1) THEN YT$(ZJ)=Y$(YT%(ZJ,2)) : GOTO 2500 :REM ADDITIONAL FIELD IN THE SAME MASTER"0D "2415 IF ZA < > YT%(ZJ,1) AND ZS%(YT%(ZJ,1),1) = 1 AND YR$(ZJ) = ";QM$;QM$;" GOTO 2500 : REM SKIP THE$;QM$;" : YR$(ZJ)=";QM$;QM$;" : NEXT"kBd "2398 FOR ZJ=1 TO ";J;" : REM LOOP FOR EACH FIELD IN THE REPORT"Bn "2400 IF ZJ=1 THEN ZZ=1 : ZA=YT%(1,1) : ZR=YA%(ZI,2) : GOSUB 610 : YT$(1)=Y$(YT%(1,2)) : GOTO 2430: REM READ THE RECORD FOR THE FIRST FIELD")CZA=0"AF AC$"Y"ĺ"2392 PRINT D$;";QM$;"PR#1";QM$;" : PRINT CHR$(15) : PRINT D$;";QM$;"PR#0";QM$;" : REM SET UP COMPRESSED PRINTING"AP "2394 FOR ZI=1 TO Z5 : REM LOOP FOR EACH RECORD IN THE SORT FILE"%BZ "2396 YJ=0 : FOR ZJ=1 TO ";J;" : YT$(ZJ)=";QML(K,1),1)1FL(FL(K,7),3)1: SETS FL(J,3)=1 TO FLAG THAT A FIELD WILL BE AN ENTRY ITEM FOR A LATER FIELDo@ @ LN2359:K1J@ LNLN1:L$(LN)" DATA "@ L110@ L1L$L$","@( L$L$(FL(K,L))@2 L:L$:KA< "2390 YL$=";QM$;QM$;" : LE NUMBER, 2=FIELD IN THAT FILE, 3=FUTURE FLD FLAG, 4=# OF CHAR, 5=TAB VALUE"? "2355 REM 6=JUSTIFICATION CODE, 7=FILE TO LEAD TO THIS FLD, 8=FIELD TO LEAD TO THIS FIELD, 9=SLAVE FLD ACTION CODE, 10=1 IF END OF LINE"i@ K1J:FL(K,3)0:FL(K,7)0S(F(K,1),2)> p> "2330 DIM YT%(";J;",10),YT$(";J;"),YR$(";J;")";:X0ĺ",YH%(";SI;",";X;"),YE%(";SI;",";X")";v> > "2340 FOR ZI=1 TO ";J;" : FOR ZJ=1 TO 10 : READ YT%(ZI,ZJ) : NEXT ZJ : NEXT ZI"M? "2350 REM YT%(X,Y) X=FIELD ON REPORT, Y=1 IS FI">= "2320 YP=0 : ZL=";PL5;" : REM PAGE AND LINE COUNTERS"= "2325 PRINT D$;";QM$;"PR#1";QM$;" : PRINT ";QM$;"XX";QM$;" : PRINT CHR$(12) : PRINT D$;";QM$;"PR#0";QM$;" : REM FORM FEED TO CLEAR THE PRINTER BUFFER"> X0:K1J:S(FL(K,1),2)XXS(FLPRINT YA%(ZI,2) : NEXT ZI" ";QM$;"Y";QM$;" GOTO 2300"?;V "2260 INPUT ";QM$;"ENTER S=ZJ-(1-Z8) : IF ZI YA$(YA%(ZJ,1)) THEN Y1=YA%(ZJ,1) : YA%(ZJ,1)=YA%(ZI,1) : YA%(ZI,1)=Y1 : Y1=YA%(ZJ,2) : YA%(ZJ,2)=YA%(ZI,2) : YA%(ZI,2)=Y1 : Z8=ABS(Z8-1) : REM PERFORM THE SWAP OF TAGS" 9"2180 ZI=ZI+Z8 : ZJ1) : YA%(Z5,1)=Z5 : YA%(Z5,2)=ZR"l7"2120 NEXT ZJ : ZS%(";FL(1,1);",6)=Z5 : REM CORRECT RECORDS ASSIGNED"7"2130 PRINT : PRINT CHR$(7);";QM$;"THERE WILL BE A FILE SORT DELAY.";QM$;" : PRINT"8"2150 ZK=1 : ZL=Z5 : ZM=0 : REM THIS IS THE QUIK TAG FILE.";QM$;" : ZA=";FL(1,1);" : ZO$=";QM$;"Z";QM$;"{6"2045 ZO$="QM$;"ZZZZ";QM$;" : FOR Z1=1 TO 4 : ZO$=ZO$+ZO$ : NEXT"6"2050 FOR ZJ=1 TO ";S(FL(1,1),4)6"2060 ZR=ZJ : ZZ=1 : GOSUB 610"!7"2100 IF ZL$<>";QM$;QM$;" THEN Z5=Z5+1 : YA$(Z5)=Y$(THEN PRINT ";QM$;"SINCE NO FILE NAME ENTERED - END";QM$;" : GOTO 400":2440~5QS$"Y"ĺ"2035 IF ZF$<>";QM$;QM$;" GOTO 2300"46"2040 PRINT : PRINT ";QM$;"THE SORT KEYS ARE BEING LOADED FROM";QM$;" : PRINT ";QM$;"THE '";QM$;";ZS$(";FL(1,1)",1);";QM$;"' KEY FILE";QM$;" : PRINT ";QM$;"DOESN'T = NUMBER OF RECORDS IN DATA BASE";QM$;" : GOTO 400"4p"2030 IF ZF$<>";QM$;QM$;" THEN FOR Z1=1 TO Z5 : INPUT YA%(Z1,2) : NEXT Z1 : PRINT D$;";QM$;"CLOSE ";QM$;";ZF$ : PRINT"K5zQS$"Y"ĺ"2035 IF ZF$=";QM$;QM$;" RED ";QM$;"; : INPUT ZF$"3\"2025 IF ZF$<>";QM$;QM$;" THEN PRINT D$;";QM$;"OPEN ";QM$;";ZF$ : PRINT D$;";QM$;"READ ";QM$;";ZF$ : INPUT Z5"[4f"2027 IF ZF$<>";QM$;QM$;" AND Z5 <> ZS%(";FL(1,1);",6) THEN PRINT CHR$(7);";QM$;"THE NUMBER OF RECORDS IN THE2>"2015 DIM YA$(";S(FL(1,1),4)1;"),YA%(";S(FL(1,1),4)1;",2),YB%(";((S(FL(1,1),4)5));",1)"2H"2017 YB$=";QM$;40);QM$;" : REM USED TO GENERATE BLANKS"3R"2020 PRINT : PRINT ";QM$;"ENTER EXTERNAL SORT KEY FILE NAME";QM$;" : PRINT ";QM$;"IF DESIAME? ";F$1 F$""10000,1D$;"MON I,O"A1 D$;"APPEND ";F$U1*D$;"WRITE ";F$u1/T((40(TP$))2):T1T114"2010 HOME : PRINT ";QM$;" PDS*BASE DATA BASE REPORT PROGRAM FOR";QM$;" : PRINT : PRINT TAB(";T;");";QM$;TP$;QM$;" : PRINT : PRINT"a THE TITLE LINE FOR THE PAGE TOP":TP$0:"ENTER THE MAXIMUM PRINTED LINES FOR":"A PAGE (DEFAULT=60) ? ";PL$:PL(PL$):PL0PL600 *** CREATE THE EXEC FILE ***0(7)0:"INSERT YOUR PROGRAM DISC IN DRIVE #1" 1:"ENTER THE EXEC FILE N A STAND ALONE":"SORT PROGRAM THAT CONSERVES MEMORY, AND":"ALLOWS LARGER SORTS. HOWEVER, DO YOU"/QS$"":"WISH A SORT WITHIN THE PROGRAM? ";:QS$:QS$//:"WILL YOU DESIRE THAT A DATE BE PRINTED":"ON YOUR REPORT ? ";:QD$:QD$&0:"ENTERL$"*"B.NL1(L$):L1FL(K1,5)1L$L$(BL$,(FL(K1,5)L11))d.SFL(K,10)1(L$)LMLM(L$).XFL(K,10)1Q$"Y"ĺL$.bFL(K,10)1LALA1:LA$(LA)L$:L$"".l.Q$"Y"ĺ(18).Q$"Y"ĺD$;"PR#0".b/:"PROGRAM DBSORT WILL BUILD "=-Q$"Y"ĺD$;"PR#1":" "X-AC$"Y"Q$"Y"ĺ(15)n-L$"":LA0:K1J-L$""FL(K,5)1L$(BL$,FL(K,5)1)-&FL(K,1)0L$L$SV$(FL(K,1),FL(K,2),1)-0FL(K,1)0L$L$FL$(K)-:KJFL(K,10)11875.DL$:(7);"NO SUCH FIELD - TRY AGAIN"::16200,N, CONTINUATION OF PROGRAM,J1ĺ:(7);"NO FIELDS DEFINED.... ALL DONE":10000,JJ1:FL(J,10)1,:"DO YOU WISH TO SEE WHAT THE COLUMN":"HEADINGS WILL LOOK LIKE? ";:Q$:Q$!-BL$" ;" : ";#+^C$:C$;:(C$)441680<+h(C$)13F101700L+r(C$)13ı\+|(C$)27ıq+C1$C1$C$:1630+C(C1$):C1$"":C01740+F1C:1630+C(C1$):C0ĺ(7);"MUST HAVE A NUMBER - TRY AGAIN"::1620+F2C*,F1SIF2S(F1,3)ĺELD NAME - TRY AGAIN":JJ1:1040*,:"MAXIMUM FIELD DATA SIZE = ";FL(J,4):FL(J,4)0ĺ:(7);"CAN'T BE ZERO - TRY AGAIN":JJ1:FL$(J)"":1570*6FL(J,3)(FL$(J))*@:1110*J FIELD # SUBROUTINE+TC1$"":F10:F20:"ENTER FILE, FIELD NUMBERS ":1040M)SV$(F1,F2,3)"C"ĺ:"DO YOU WISH TO TOTAL THIS FIELD? ";:Q$:Q$m)FL(J,9)3:Q$"Y"FL(J,9)4w)1040) DEFINE YOUR OWN FIELD)EF1)::"**** SPECIAL FIELD ****"!*":"ENTER THE FIELD NAME : ";FL$(J):FL$(J)""ĺ:(7)"NO FIINE FOR":"EACH OF THESE DETAIL RECORDS? ";:Q$:Q$:Q$"Y"FL(J,9)0:1040(:"DO YOU WISH TO USE ONLY THE 1ST DETAIL":"RECORD? ";:Q$:Q$:Q$"Y"FL(J,9)1:1040):"DO YOU WISH TO USE ONLY THE LAST DETAIL":"RECORD? ";:Q$:Q$:Q$"Y"FL(J,9)2,7)=MASTER FILE, FL(K,8)=WHICH DETAIL FILE FOR THE MASTER'X0ĺ:(7);"YOU CALLED FOR A DETAIL FILE FIELD, BUT":"IT'S MASTER FILE HAD NOT PREVIOUSLY":"BEEN CALLED FOR - TRY ALL OVER FOR THIS":"FIELD."::1050K(:"DO YOU WISH TO WRITE A REPORT L RECORDG&x:(7);"FILE NOT PREVIOUSLY DEFINED-TRY AGAIN":1610:1380V&X0:K1Jo&S(FL(K,1),1)21460&K12S(FL(K,1),2)1&S$(F1,1)S$(FL(K,1),K1)X1:K2FL(K,1):K3K11:K1S(FL(K,1),2)1:KJ&:9'X1FL(J,7)K2:FL(J,8)K3: FL(KER FILE. WHAT FIELD":"IN A PREVIOUSLY CALLED FOR FILE WILL":"LEAD TO A RECORD IN THIS FILE?"::KJ:1610%dX0:K1J:FL(K,1)F1X1:FL(J,7)F1:FL(J,8)F2:FL(K,5)1:KJ&n:X11040: FL(J,7)=THE FILEX & FL(J,8)= THE FIELD THAT LEADS TO THIS MASTERFL(J,6)3ĺ(7);"MUST BE 1 TO 3 - TRY AGAIN.":1310H$(FL(J,6)3MF1W$2EF11040$<J1ĺ:"IT IS ASSUMED THAT FILE '";S$(F1,1):"IS THE FILE TO BE SORTED FOR THE REPORT.":1040$FF1FL(J1,1)1040$PS(F1,1)21410j%Z:"THIS IS A NEW MASTDO YOU WISH TO START A NEW LINE ? ";::"Y";::(35):C$:C$_#C$"Y"(C$)13(C$)321190# :"THE MAXIMUN VALUE YOU CAN USE = ";PCT21:1200#FL(J,5)T:FL(J,10)0:TTT214$:"ENTER JUSTIFICATION CODE ? ";:C$:C$:FL(J,6)(C$):FL(J,6)1ED.":11900"T2FL(J,3):FL(J,4)T2T2FL(J,4)K"T1(C1$):C1$""T1Tk"TT1T1T2PCTT1:1300"TT1ĺ:(7);"CAN'T ENTER A LOWER VALUE":1200<#T1T2PCĺ:(7);"THIS FIELD WON'T FIT ON THIS LINE WITH":"WITH A TAB VALUE OF ";T1;".":" A NEW LINE WILL BE STARTED.":4!T1:FL(J1,10)1x!C1$""::"TAB POSITION = ";::T;::" ENTER CHANGE";:(16)!C$:C$;:(C$)13(C$)32C1$C1$C$:1210 "C1$"NEW"ĺ:"STARTING A NEW LINE. CHANGE TAB VALUE":"IF COLUMN 1 IS NOT DESIRENTER SHORTER FIELD NAME IF DESIRED":13);:X1FL(J,4):(95);::(13):N$f tN$""FL(J,3)(N$) ~N$""FL(J,1)0SV$(F1,F2,1)N$ N$""FL(J,1)0FL$(J)N$ PCTFL(J,4)1200!:(7);"THIS FIELD EXCEEDS THE PRINTER WIDTH.":"THUS,(FL(J,1),1)::"FIELD NAME = ";::SV$(FL(J,1),FL(J,2),1)::"DATA LENGTH= ";::SV%(F1,F2)):::VFL(J,1)0ĺ:"FILE = ";::"SPECIAL FIELD"::"FIELD NAME = ";::FL$(J)::"DATA LENGTH= ";::FL(J,4)):::`FL(J,3)FL(J,4)1200L j"0::"FOR FIELD ";K:1610:(C$)2715408$F101740R.FL(J,1)F1:FL(J,2)F28FL(J,3)(SV$(FL(J,1),FL(J,2),1)): LENGTH OF FEILD NAMEBFL(J,4)SV%(FL(J,1),FL(J,2)): NUMBER OF CHARACTERS ALLOWED IN THE FIELD INPUTcL:"FILE = ";::S$G FILES FROM THEIR":"BEING SLAVES OF PREVIOUSLY SELECTED""FILES, OR REFERRED TO BY FIELDS IN":"PREVIOUSLY REQUESTED FILES.":" (NOW, IT'S YOUR TURN)"::" (PRESS ANY KEY TO CONTINUE) ";:Q$::J0:T1:MF0JJ1)KJ:EFIAL FIELD THAT DOESN'T COME":"FROM THE '";B$;"' DATA BASE.":"THEN ENTER THE JUSTIFICATION CODE":"1 = LEFT, 2=RIGHT, 3=MONITARY FORMAT"::"START WITH THE FILE THAT WILL BE SORTED":"FOR THE REPORT. IT MUST BE POSSIBLE TO":"REACH THE SUCCEEDINYOU CAN ENTER YOUR":"OWN TAB POSITION NUMBER.":"IF THE FIELD IS TO START A NEW REPORT":"LINE, ENTER THE WORD 'NEW' FOR THE":"NEW TAB VALUE.":" (PRESS ANY KEY TO CONTINUE) ";:Q$::>:"PRESS ESC KEY IF YOU WISH TO DEFINE":"A SPEC""SEPARATE THE FILE AND FIELD NUMBERS":"WITH A COMMA, PER THE FOLLOWING EXAMPLE":"FOR FILE 1 FIELD 3:"::"ENTER FILE, FIELD NUMBERS : 1,3":/"THE PROGRAM WILL DISPLAY THE CALCULATED":"TAB POSITION. DEPRESS RETURN IF IT":"IS OK. OTHERWISE, DOES YOUR PRINTER HAVE COMPRESSED":"PRINTING CAPABILITY ? ";::"N";::(23):C$:C$:C$"Y"AC$C$:"USING THE NUMBERS IN PARENTHESIS":"JUST TO THE LEFT OF THE FIELD NAMES":"ON THE FILE AND FIELD NAME LISTING,":"ENTER THE FILE AND FIELD NUMBERS.:"(COMMAS) AND THE CARRIAGE RETURN AT THE END OF THE RECORD."M\D$;"PR#0"SfpC1$""::"HOW MANY COLUMNS HAS THE PRINTER ? ";::"80";::(36)zC$:(C$)13(C$)32ĺC$;:C1$C1$C$:890PC(C1$):PC0PC80PC80930d::" L$L$L1$" "SV$(J,K,2)* L$:1*K74>>JH::J179:(95);::::"THE NUMBER OF FILE CHARACTERS IS MORE THAN THE SUM OF THE FIELD SIZES DUE TO">R"RECORD OVERHEAD. THIS OVERHEAD CONSISTS OF RECORD POINTERS, FIELD SEPERATORS"")":L1(L1$):L1$L1$(BL$,(25L1))TL$L1$SV$(J,K,1)(BL$,(30(SV$(J,K,1)))){SV$(J,K,3)"R"L$L$"REAL "SV$(J,K,3)"I"L$L$"INTEGER "SV$(J,K,3)"C"L$L$"CHARACTER " L1$(SV%(J,K)):(L1$)5L$L$(BL$,(5(L1$)))L$L$" (INCLUDES SORT FILE)"=L$L1$(BL$,(55(L1$)))^S(J,1)1L$L$"MASTER "S(J,1)2L$L$"DETAIL "L1$(S(J,6)):(L1$)5L$L$(BL$,(5(L1$)))L$L$L1$L$:K1S(J,3)$L1$(BL$,15)"("(J)","(K)=";DT::"FILE AND FEILD NAME LISTING":X"FILE NAME****************FIELD NAME********************TYPE*******SIZE**REQ/OPT"bJ179:(95);:::lJ1SIv:"SET # ";JL1$S$(J,1):S(J,1)2L1$L1$" (MASTER="S$(J,2)")"S(J,8)0L$L1$" "LL1$(SR%(J,K,3)):L1(L1$):L25L1:L20L$L$(BL$,L2)L$L$L1$" "(SR%(J,K,4))" "(SR%(J,K,5))L$KK1:K10580&SR%(J,K,1)05800L$(BL$,33):460D::J(N:"TOTAL DISC DRIVE(S) REQUIRED "J1SIjL1$(S(J,5)):L(L1$):L17L:L$(BL$,L1)L1$" "S$(J,1)(BL$,(24(S$(J,1))))rK1L1$(SR%(J,K,1)):L1(L1$)L11L$L$" "L$L$L1$" "L1$(SR%(J,K,2)):L1(L1$):L25L1:L20L$L$(BL$,L2)L$DATA BASE":T"SECTORS**FILE NAME**************DISC **FROM****** TO ***SLOT*DR*"" REQ. DRIVE REC # REC #"J164:(95);:::BL$" :"DO YOU NEED A DATA BASE DEFINITION":"LISTING ?";:A$:A$:A$"Y"870h:"NOW WE WILL PRINT THE BASE DEFINITION.":"TURN ON THE PRINTER"::" (PRESS ANY KEY WHEN READY) ";:A$:A$rD$;"PR#1" |".":"DATA BASE DESCRIPTION FILE FOR ";B$;" THIS FILE.:"SV$(J,K,1),SV$(J,K,2),SV$(J,K,3),SV%(J,K), FIELD NAME, REQUIRED/OPTIONAL FLAG (R OR O), DATA TYPE (R=REAL, I=INTEGER, C=CHARACTER), NUMBER OF CHARACTERS IN THIS FIELD.6K@JJD$;"CLOSE ";B$TK(B$):B$(B$,(K4))I^OR-NEXT LOOP IF IT IS A MASTER WITH NO SLAVES.>K1S(J,2)MS$(J,K1) NAME OF THE ASSOCIATED FILES (MASTER IF THIS FILE IS A DETAIL, OR THE DETAIL FILES IF THIS IS A MASTER FILE).KK1S(J,3)  S(J,3) IS THE NUMBER OF FIELDS IN DRIVE NUMBER (1-12), STARTING RECORD NUMBER ON THIS DRIVE, ENDING RECORD NUMBER ON THIS DRIVE, SLOT NUMBER AND DRIVE NUMBER (IN THIS SLOT) FOR THIS DRIVE. K S(J,2)0270. S(J,2) IS THE NUMBER OF ASSOCIATED FILES. THUS, WE SKIP THE NEXT FILE, SECTORS REQUIRED, CHARACTERS PER RECORD, NUMBER OF DISC DRIVES TO HOLD THIS FILE, SECTORS IN COMP FILE.| K1S(J,7) S(J,7) IS THE NUMBER OF DRIVES NECESSARY TO CONTAIN THIS FILE. SR%(J,K,1),SR%(J,K,2),SR%(J,K,3),SR%(J,K,4),SR%(J,K,5) NUMBER OF DISC DRIVES, AND THE NAME OF THE BASE DEFINITION FILEK J1SI S$(J,1),S(J,1),S(J,2),S(J,3),S(J,4),S(J,5),S(J,6),S(J,7),S(J,8)l FILE NAME,TYPE (1=MASTER, 2=DETAIL), NUMBER OF ASSOCIATED FILES, NUMBER OF FIELDS, NUMBER OF RECORDS IN FD$;"OPEN ";B$! dD$;"READ ";B$ nSI,DT,BT$:BT$B$ĺD$;"CLOSE ";B$:D$::(7);"YOU INPUT '";B$;"' ,BUT":"'";BT$;"' WAS FOUND IN THE 1ST RECORD.":"MUST CANCEL THIS RUN":10000? x NUMBER OF FILES (INCLUDING BOTH MASTER AND DETAIL), THE REQUIRED BREPORT PROGRAM"::" TO CREATE A PDS*BASE REPORT PROGRAM":::4)"COPYRIGHT 1985, PRO DEV SOFTWARE"::7)"MUSKEGON, MICHIGAN 49442":: <J11000: F"ENTER THE DEFINITION FILE"::"NAME ? ";B$:B$""10000 P(B$,4)".DEF"B$B$".DEF" ZNm ** PROGRAM DBREPORT ** COPYRIGHT 1985, PRO DEV SOFTWARE, 545 GROVER ROAD, MUSKEGON, MICHIGAN 49442 **sSV$(10,40,3),SV%(10,40),S$(10,10),S(10,8),SR%(10,12,5),FL(40,10),FL$(40),SA%(11),LA$(5)(D$(4):CM$(44):QM$(34) 2::12)"D                                       "RUN MENU1":ZJ=ZJ-1"=-"5340 IF ZJ=1 THEN ZI$(ZI)=";QM$;QM$;":RETURN"u-"5350 ZL$=MID$(ZI$(ZI),1,ZJ-1):ZI$(ZI)=ZL$:RETURN"-"NOMON I,O"-D$;"CLOSE ";F$-D$;"NOMON I,O" .':"INSERT THE PDS*BASE MASTER IN DRIVE 1"::"AND PRESS ANY KEY ";:A$::D$$;":PRINT:GOTO 5030"S,x"5300 REM **SUBROUTINE FOR BACKSPACE AND FORWARD ARROW**","5310 IF ASC(YC$)=21 THEN YC$=";QM$;" ";QM$;":RETURN","5320 IF ZJ=1 THEN PRINT ";QM$;" ";QM$;";:RETURN" -"5330 HTAB(Z3+ZJ-2) : PRINT CHR$(95); : HTAB(Z3+ZJ-2)Z"5212 ZJ=0:FOR ZK=1 TO LEN(ZI$(ZI)):IF MID$(ZI$(ZI),ZK,1)<>";QM$;" ";QM$;" THEN ZJ=1"}+d"5214 NEXT:IF ZJ=1 THEN RETURN",n"5216 PRINT:PRINT CHR$(7);";QM$;"ENTRY FOR THIS ITEM REQUIRED.";QM$;":PRINT ";QM$;"PRESS 'ESC'TO CANCEL THE ENTIRE ENTRY.";QMIF ASC(YC$)<>13 THEN PRINT"*A"5207 IF ASC(YC$)=13 AND LEN(ZI$(ZI))=0 AND ZS%(ZA,1)=1 THEN RETURN : REM FINISHED ADDING MASTERS"*F"5210 IF MID$(ZN$(ZA,ZI,2),1,1)<>";QM$;"R";QM$;" OR ASC(YC$)=27 THEN RETURN"*P"5211 IF LEN(ZI$(ZI))=0 GOTO 5216"X+;" GOTO 5190"e)"5160 IF YC$=";QM$;".";QM$;" AND MID$(ZN$(ZA,ZI,2),2,1)=";QM$;"R";QM$;" GOTO 5190")"5170 PRINT:PRINT CHR$(7);";QM$;"MUST BE A NUMBER - TRY AGAIN";QM$;":PRINT:GOTO 5030")("5190 ZI$(ZI)=ZI$(ZI)+YC$")2"5200 NEXT ZJ"*<"5205 IF ASC(YC$)=21 THEN GOSUB 5300"P("5130 IF ASC(YC$)=13 THEN ZJ=Z2:GOTO 5200"("5140 IF MID$(ZN$(ZA,ZI,2),2,1)=";QM$;"C";QM$;"GOTO5190"( "5150 IF VAL(YC$)>0 OR YC$=";QM$;"0";QM$;" GOTO 5190" )"5155 IF YC$=";QM$;"-";QM$;" OR YC$=";QM$;"+";QM$"5070 GET YC$"L'"5075 IF ASC(YC$)=44 OR ASC(YC$)=58 THEN YC$=CHR$(32)"'"5080 IF ASC(YC$)=27 THEN ZJ=Z2:ZI$(ZI)=";QM$;QM$;":GOTO 5200"'"5090 PRINT YC$;"'"5100 IF ASC(YC$)=8 THEN GOSUB 5300"'"5110 IF ASC(YC$)=8 GOTO 5070" ("5120t"5025 IF (Z2+Z3)>39 THEN Z3=1">&~"5030 ZI$(ZI)=";QM$;QM$&"5040 PRINT ";QM$;"ENTER ";QM$;";ZN$(ZA,ZI,1);";QM$;"?";QM$;";"&"5044 IF Z3=1 THEN PRINT"&"5046 FOR Y1=1 TO Z2 : PRINT CHR$(95); : NEXT : HTAB(Z3)"&"5060 FOR ZJ=1 TO Z2"'"2410 IF ZS%(ZA,1)=1 THEN GOSUB 1200:GOTO 2200"g%BNS1ĺ"2420 IF ZS%(ZA,1)=2 THEN YS=ZR:GOSUB 1300"%L"2430 ZA=YC:GOTO 2200"%V"5000 REM ** SUBROUTINE TO INPUT DATA **"%`"5010 Z2=VAL(MID$(ZN$(ZA,ZI,2),3))%j"5020 Z3=LEN(ZN$(ZA,ZI,1))+8"!&EXISTING ";QM$;";ZN$(ZA,1,1);:INPUT ZR$:IF ZR$=";QM$;QM$;"GOTO 2010"y$$"2335 GOSUB 500:GOSUB 600:GOSUB 1500:GOTO 2295"$."2400 PRINT:PRINT ";QM$;"DO YOU WISH TO DELETE THE ABOVE (Y/N) ";QM$;";:GET YQ$:PRINT YQ$:IF YQ$<>";QM$;"Y";QM$;" GOTO 2200"0%87)>20 AND ZI=20 THEN PRINT : PRINT ";QM$;"(PRESS ANY KEY TO CONTINUE)";QM$;"; : GET ZQ$ : PRINT"#"2304 NEXT : IF YB=2 GOTO 2280"#"2305 IF YB=3 GOTO 2400"#"2310 IF Y5=0 GOTO 2200"#"2315 GOSUB 750:GOTO 2200"D$"2330 PRINT ";QM$;"ENTER UB 5000:IF ASC(YC$)=27 GOTO 2010":""2292 Y5=Y5+1:HOME"X""2295 IF ZV>0 GOTO 2200"""2297 PRINT:FOR ZI=1 TO ZS%(ZA,7)"""2300 PRINT ZI;";QM$;" - ";QM$;";ZN$(ZA,ZI,1);";QM$;" = ";QM$;";ZI$(ZI) : IF ZS%(ZA,7)<9 THEN PRINT"`#"2302 IF ZS%(ZA,";QM$;";:INPUT Y4$ : Y4=VAL(Y4$):IF Y4=0 THEN GOTO 2310"q!"2285 IF Y4>ZS%(ZA,7) THEN PRINT CHR$(7):GOTO 2280"!"2287 IF ZS%(ZA,1)=1 AND Y4=1 THEN PRINT CHR$(7);";QM$;"CAN'T MODIFY THE SEARCH VALUE.";QM$;":PRINT:GOTO 2280"!""2290 PRINT:ZI=Y4:GOS8 NEXT"Y "2270 IF ZF=0 THEN PRINT:PRINT CHR$(7);";QM$;"END OF CHAIN";QM$;":GOTO 2277" "2275 GET YQ$:PRINT YQ$:IF YQ$<>";QM$;"S";QM$;" THEN ZR=ZF:GOTO 2250" "2277 IF YB=3 GOTO 2400"8!"2280 PRINT:PRINT ";QM$;"ENTER NUMBER OF ITEM TO CHANGE PRINT:FOR ZI=1 TO ZS%(ZA,7)""2265 PRINT ZI;";QM$;" - ";QM$;";ZN$(ZA,ZI,1);";QM$;" = ";QM$;";ZI$(ZI) : IF ZS%(ZA,7)<10 THEN PRINT""2267 IF ZS%(ZA,7)>20 AND ZI=20 THEN PRINT : PRINT ";QM$;"(PRESS ANY KEY TO CONTINUE); : GET ZQ$ : PRINT" "226"NO DETAIL SETS FOR THIS MASTER";QM$;":GOTO 2200:REM WE NOW HAVE THE CHAIN HEAD IN THE DETAIL SET"f"2250 ZA=ZS:GOSUB 600:GOSUB 1500:Y3=Y3+1"p"2255 HOME:PRINT ";QM$;"PRESS SPACE=NEXT - S=STOP";QM$;":PRINT :PRINT";QM$;"RECORD ";QM$;";Y3z"2260 M$;" GOTO 2010"X4"2225 ZA=ZM:GOSUB 500:GOSUB 600:YM=ZR:IF ZV>0 THEN ZA=YC:GOTO 2200"}>"2230 ZA=ZS:Y2=0:FOR ZI=2 TO 4"H"2235 IF ZS$(ZM,ZI)=ZS$(ZS,1) THEN Y2=ZI-1:ZI=4"R"2240 NEXT"b\"2245 ZR=ZH(Y2):Y3=0:IF ZR=0 THEN PRINT CHR$(7);";QM$;THEN Y1=ZI:ZM=Y1:ZI=ZQ" "2215 NEXT:IF Y1=0 THEN PRINT CHR$(7);";QM$;"NO MASTER SET FOUND FOR '";QM$;";ZS$(ZA,1);";QM$;".";QM$;":FOR ZI=1 TO 5000:NEXT:GOTO 2010"*"2220 PRINT ";QM$;"FIRST ENTER EXISTING ";QM$;";ZN$(ZM,1,1) :INPUT ZR$:IF ZR$=";QM$;Q$;"Y";QM$;" GOTO 2130"M"2190 PRINT ";QM$;"THEN ";QM$;";:ZA=ZM:GOTO 2120"q"2200 REM **MODIFY DATA SET**"NS0ĺ"2205 Y5=0 : GOTO 2330":940 "2205 Y5=0:IF ZS%(ZA,1)=1 GOTO 2330""2210 ZS=ZA:Y1=0:FOR ZI=1 TO ZQ:IF ZS$(ZA,2)=ZS$(ZI,1) REATE NEXT ";QM$;";ZS$(ZA,1):PRINT:GOTO 2100"NS1ĺ"2180 IF ZS%(ZA,1)=2 THEN PRINT:PRINT CHR$(7);";QM$;"ADD ANOTHER ";QM$;";ZS$(ZA,1);";QM$;" TO MASTER ";QM$;";ZR$;";QM$;" (Y/N)?";QM$;";:GET YQ$:PRINT YQ$"NS1ĺ"2185 IF ZS%(ZA,1)=2 AND YQ$=";QM0"'"2138 IF ASC(YC$)=27 GOTO 2010"]"2140 ZD$=ZI$(1):IF ZS%(ZA,1)=1 THEN ZR$=ZI$(1)""2150 IF ZS%(ZA,1)=1 THEN GOSUB 800:ZA=YC"NS1ĺ"2160 IF ZS%(ZA,1)=2 THEN GOSUB 1000:ZA=YC"-"2170 IF ZS%(ZA,1)=1 THEN PRINT:PRINT CHR$(7);";QM$;"CEN ZA=YC:GOTO 2100"5"2130 FOR ZI=1 TO ZS%(ZA,7)""2135 PRINT:GOSUB 5000:IF ZI=1 AND ZS%(ZA,1)=1 AND ZI$(ZI)=";QM$;QM$;" THEN ZI=ZS%(ZA,7)""2136 IF ASC(YC$)=27 THEN ZI=ZS%(ZA,7)""2137 NEXT:IF ZS%(ZA,1)=1 AND ZI$(1)=";QM$;QM$;" GOTO 201;";QM$;"NO MASTER SET FOUND FOR '";QM$;";ZS$(ZA,1);";QM$;".";QM$;":FOR ZI=1 TO 5000:NEXT:GOTO 2010"v"2120 PRINT ";QM$;"FIRST ENTER ";QM$;";ZN$(ZM,1,1);:INPUT ZR$:IF ZR$=";QM$;QM$;" GOTO 2010""2125 ZA=ZM:GOSUB 500:GOSUB 600:YM=ZR:ZA=ZS:IF ZV>0 TH$(7):GOTO 2010":D"2080 HOME:ON YB GOTO 2100,2200,2200"\N"2100 REM ADD NEW DATA SETS"X"2105 IF ZS%(ZA,1)=1 GOTO 2130"b"2110 ZS=ZA:Y1=0:FOR ZI=1 TO ZQ:IF ZS$(ZA,2)=ZS$(ZI,1) THEN Y1=ZI:ZM=ZI:ZI=ZQ"cl"2115 NEXT:IF Y1=0 THEN PRINT CHR$(7)z#X˰      9("Š(ԠP Ԡ̰/ٮƠ̠Ϡ ̠Ϯà!Ϡՠձ ƠG Š@@YY3fP*U*U*U*U*U*U*U*U*U*U*U`<P*U*U*U*UP*U*U*U*U`P*U*U*U*U*U@*U*U*U*U*U`F `P*ysdy?N3N3~9~O9fys"$'6.'*** WRITTEN BYN8'*** LYNELL JACKSONhB'*** JANUARY 14, 1987nL'V'*** LAST MODIFIED BY`'*** LYNELL JACKSONj'*** JANUARY 27, 1987t'~'<*** "ISL HELLO" ***>LST MONDAY-SATURDAY." #""@#"TECHNICAL SUPPORT HOURS ARE"q#"8:30 AM --> 4:30 PM PST MONDAY - FRIDAY." y#""#"CALL US FOR A FREE CATALOG OF"#"COMPUTER SUPPLIES AND THE LATEST AND"#"MOST UP TO DATE PUBLIC DOMAIN SOFTWARE." '"/ Z#"A DIVISION OF U.S.COMPUTER SUPPLY INC."R d#"511-104 ENCINITAS BOULEVARD"m n#"ENCINITAS, CA 92024" x#"(800) 992-1992 (USA) #"(800) 992-1993 (FOR CA) #"(619) 942-9998 (FOREIGN) #"" #"ORDER HOURS ARE"#"6:00 AM --> 4:30 PM P" l24:7110 vGO$: & = TB%(21(PR$)2)L TB%:PR$;R X (#u +#<*** DATA LOCATION ***>{ /# 2#"FOR OTHER PUBLIC DOMAIN AND" <#"USER-SUPPORTED PROGRAMS PLEASE CONTACT:" F#"" P#"THE INTERNATIONAL SOFTWARE LIBRARY+ 16297,1:16300,1:16301,1:16304,15 7010; C :P I1ND%b PR$:I:7110i Is 7010y  RN$""ė:D$;"CATALOG": (:D$;"RUN ";RN$ 2 X [<*** SUBROUTINES ***> _ bPR$"< PRESS ANY KEY TO CONTINUE > GF%11110 :H PR$" U.S. COMPUTER SUPPLY INC. PRESENTS:"V 10:7110 PR$"THE INTERNATIONAL SOFTWARE LIBRARY" $13:7110 .7010:1210 L V: `PR$"* LOADING PROGRAM *" j11:7110: ~D$;"BLOAD ISL HELLO.GRAPHIC"CING FOR PRINTING DATA LINE6 * I = LOOP VARIABLE S * GO$ = CONTINUE STRING GF%1:* DISPLAY GRAPHIC FLAG, 1=YES, 0=NO ND%20:* NUMBER OF DATA LINES RN$"HELLO":* NAME OF THE PROGRAM TO RUN NEXT  <*** MAIN PROGRAM ***>  <*** "ISL HELLO" ***>">*** PROGRAM WRITTEN BYV(*** LYNELL JACKSONp2*** JANUARY 14, 1987vdg<*** VARIABLES ***>knD$(4):* CONTROL-DxH$(8):* CONTROL-H* PR$ = DATA LINE FOR PRINTING * TB% = TAB SPA     P*Os?~~?O`P*U*U*U*U*U@*U*U*U*U*U``P*?U`<P*U*U*U*U T*U*U*U*U`P*U*U*U*U*U*U*U*U*U*U*U`L}|L1`><P*ysd?N3N?~9rO9fIs`P*U*U*U*U*U@*U*U*U*U*U``s3O{qc<P*?U`<P*U*U*U*UP*U*U*U*U`P*U*U*U*U*UP*U*U*U*U*U` `P*ysx?N30~9O9fpS(I,4)10CS(I,4)2:870 HS(I,4)100C18((S(I,4)9)3):870 RS(I,4)1000C288((S(I,4)99)4):870 !\S(I,4)10000C3888((S(S(I,4)FS((C255)256)r FSFS(FS122): NEEDS 1 TRACK/SECTOR LIST SECTOR FOR EACH 122 SECTORS OF FILE.FSSPFSFS(((FSSP1)FS)): ADD NEW TRK/SECT LIST FOR EACH DISC DRIVE S(I,5)FS*S(I,1)2900] 4:"DO YOU WISH TO SAVE ROD NUMBER OF RECORDS":"FOR THE '";S$(I,1);"' FILE ";:S(I,4):S(I,4)1ĺ(7):710S(I,4)S(I,4)1: ADD 1 FOR THE EXTRA RECORD TO KEEP TRACK OF INFO ON THE FILEC12T1CC6(S(I,2)12)J1S(I,3):CCSV%(I,J)1::CC1S(I,8)C:CC:"Y";(8);::A$:A$:(A$)13A$"Y"QA$"Y"A$"N"(A$)13ĺ(7):660aA$"Y"710S(I,3)40ĺ(7);"40 FIELDS IS THE PDS*BASE LIMIT."::710JS(I,3)140:1050:SV$(I,J,1)""S(I,3)J1:J40:660Q:"NOW ENTER THE DESIRE)""ĺ:(7);"YOU DIDN'T ENTER EVEN ONE FIELD NAME":"FOR THIS SLAVE. TRY AGAIN."::" (PRESS ANY KEY TO CONTINUE) ";:A$:A$:II1:340J240:1050:SV$(I,J,1)""S(I,3)J1:J40':"ARE YOU DONE ADDING FIELDS TO FILE":S$(I,1);" ? ";:,FD,2)R:NFNF1+;DDRDF1DD1:1890R;DD1:FDFD1:DDRDF1:D1:1970\; 1970k;DTDDTDy; S(L,9)FD;*J;4NFMFĺ:2120;>E0ERR0ĺ:"WOW!! - WE FIT THEM ALL IN ";DT;" DISC(S)":MKT SV$(J,K,1);",";SV$(J,K,2);",";SV$(J,K,3);",";SV%(J,K)K^ FIELD NAME, REQUIRED/OPTIONAL FLAG (R OR O), DATA TYPE (R=REAL, I=INTEGER, C=CHARACTER), NUMBER OF CHARACTERS IN THIS FIELD.Kh KKr J;L| E1ĺ::"SEE THE REMARKS LINES AT THE END LOOP IF IT IS A MASTER WITH NO SLAVES.6J K1S(J,2)EJ" S$(J,K1)J, NAME OF THE ASSOCIATED FILES (MASTER IF THIS FILE IS A DETAIL, OR THE DETAIL FILES IF THIS IS A MASTER FILE).J6 KJ@ K1S(J,3)KJ S(J,3) IS THE NUMBER OF FIELDS IN THIS FI NUMBER (1-12), STARTING RECORD NUMBER ON THIS DRIVE, ENDING RECORD NUMBER ON THIS DRIVE, SLOT NUMBER AND DRIVE NUMBER (IN THIS SLOT) FOR THIS DRIVE.I KI S(J,2)02880&J S(J,2) IS THE NUMBER OF ASSOCIATED FILES. THUS, WE SKIP THE NEXT FOR-NEXT ORD, NUMBER OF DISC DRIVES TO HOLD THIS FILE, SECTORS FOR THE COMP FILEWH K1S(J,9)H S(J,9) IS THE NUMBER OF DRIVES NECESSARY TO CONTAIN THIS FILE.H SR%(J,K,1);",";SR%(J,K,2);",";SR%(J,K,3);",";SD(SR%(J,K,1),1);",";SD(SR%(J,K,1),2)I DRIVEIgG S$(J,1);",";S(J,1);",";S(J,2);",";S(J,3);",";S(J,4);",";S(J,5);",";S(J,8);",";S(J,9);",";S(J,10)GH FILE NAME,TYPE (1=MASTER, 2=DETAIL), NUMBER OF ASSOCIATED FILES, NUMBER OF FIELDS, NUMBER OF RECORDS IN FILE, SECTORS REQUIRED, CHARACTERS PER RECD$;"OPEN ";B$;".DEF"0F D$;"DELETE ";B$;".DEF"JF D$;"OPEN ";B$;".DEF"eF D$;"WRITE ";B$;".DEF"F I;",";DT;",";B$;".DEF"F NUMBER OF FILES (INCLUDING BOTH MASTER AND DETAIL), DISC DRIVES REQUIRED, AND NAME OF THE BASE DEFINITION FILEG J1URE ? ";::"N";(8);::Q$:Q$:(Q$)13Q$"N"pEZ Q$"Y"ĺ:"OK - IT'S YOUR WORK DOWN THE TUBES. BYE":10000Ed A$"Y"2640En Es :(7);"INSERT YOUR PROGRAM DISC IN DRIVE #1"::" (PRESS ANY KEY WHEN READY) ";:A$:A$Eu D$;"MON O"Fx ORD."qD< ERR0E0ĺ:"DUE TO ERRORS THE ";B$;".DEF""FILE CAN NOT BE CREATED. RUN CANCELED.":D$;"PR#0":10000DF D$;"PR#0"DP :"DO YOU WISH TO SAVE THE":"'";B$;".DEF' FILE ? ";::"Y";(8);::A$:A$:(A$)13A$"Y"0EU A$"Y"ĺ(7);"ARE YOU SC JsC( ::J179:(95);::::"THE NUMBER OF FILE CHARACTERS IS MORE THAN THE SUM OF THE FIELD SIZES DUE TO"D2 "RECORD OVERHEAD. THIS OVERHEAD CONSISTS OF RECORD POINTERS, FIELD SEPERATORS":"(COMMAS) AND THE CARRIAGE RETURN AT THE END OF THE REC)(BL$,(30(SV$(J,K,1))))BB SV$(J,K,3)"R"L$L$"REAL "iB SV$(J,K,3)"I"L$L$"INTEGER "B SV$(J,K,3)"C"L$L$"CHARACTER "B L1$(SV%(J,K)):(L1$)5L$L$(BL$,(5(L1$)))B L$L$L1$" "SV$(J,K,2)B L$:B KB $)))%A~ S(J,1)1L$L$"MASTER "FA S(J,1)2L$L$"DETAIL "zA L1$(S(J,8)):(L1$)5L$L$(BL$,(5(L1$)))A L$L$L1$A L$:A K1S(J,3)A L1$(BL$,15)"("(J)","(K)")":L1(L1$):L1$L1$(BL$,(25L1))B L$L1$SV$(J,K,1*******************TYPE*******SIZE**REQ/OPT"F@B J179:(95);:::Q@L J1Ic@V :"SET # ";J@` L1$S$(J,1):S(J,1)2L1$L1$" (MASTER="S$(J,2)")"@j S(J,10)0L$L$" (INCLUDES ACTIVE/SORT FILE)":S(J,10)(S(J,10))At L$L1$(BL$,(55(L1(SD(SR%(J,K,1),1))" "(SD(SR%(J,K,1),2))6?L$K?KK1:K102340b? SR%(J,K,1)02340s? L$(BL$,33)}? 2220?$ ::J?. :"TOTAL DISC DRIVE(S) REQUIRED=";DT::"FILE AND FEILD NAME LISTING":,@8 "FILE NAME****************FIELD NAME*(J,1))))>K10>L1$(SR%(J,K,1)):L1(L1$)D>L11L$L$" "Y>L$L$L1$" ">L1$(SR%(J,K,2)):L1(L1$):L25L1:L20L$L$(BL$,L2)>L$L$L1$" ">L1$(SR%(J,K,3)):L1(L1$):L25L1:L20L$L$(BL$,L2).?L$L$L1$" " DRIVE REC # REC #"K=zJ164:(95);:::=BL$" "=J1I>L1$(S(J,5)):L(L1$):L17L:L$(BL$,L1)L1$" "S$(J,1)(BL$,(24(S$":"TURN ON THE PRINTER"::"(PRESS ANY KEY WHEN READY - N=NO PRINT)":A$:A$^D$H:(7)"ALL DONE":)":730SS%(I,3)0730J1SS%(I,3)L$L$",0,0"$;"WRITE ";F$;",R";L'vS(J,1)1ĺL$;IS(J,1)2FPFP1:L$;",";FP;dN1S(J,3):",";:N:kL~KS(J,7)710D$;"WRITE ";F$;",R";M1S(J,1)1ĺ"0"S(J,1)2ĺ"0,1"D$;"CLOSE ";F$S(J,8)0S(J,8)0:460K(J,K,4);",D";SR%(J,K,5),D$;"DELETE ";F$KD$;"OPEN ";F$;",L";S(J,6)^S(J,8)0ī710wS(J,1)1L$"0,0,0"S(J,1)2L$"0":590&S(J,2)05900L1S(J,2):L$L$",0,0"DNXMSR%(J,K,3)SR%(J,K,2)1bL1MlD" (PRESS ANY KEY WHEN READY) ";:A$:/:J1ICFP1SK1S(J,7)xS(J,8)0F$S$(J,1)".SRT":480S(J,7)1F$S$(J,1)S(J,7)1F$S$(J,1)".S"(K):"CREATING THE '";F$;"' FILE.D$;"OPEN ";F$;",L";S(J,6);",S";SR%TD$;"CLOSE ";B$a^:"IF YOUR DATA IS TO BE ON A DIFFERENT":"DISK, INSERT THAT DISK NOW.":hDT1ĺ"INSERT AN INITIALIZED DISC INTO DRIVE 1.":400r"INSERT INITIALIZED DISCS INTO DRIVES"|DT2ĺ"1 AND 2."DT2ĺ"1 TO ";DT;"."):S FILE.6"SV$(J,K,1),SV$(J,K,2),SV$(J,K,3),SV%(J,K), FIELD NAME, REQUIRED/OPTIONAL FLAG (R OR O), DATA TYPE (R=REAL, I=INTEGER, C=CHARACTER), SHORT VARIABLE NAME TO BE USED IN YOUR PROGRAMS, NUMBER OF CHARACTERS IN THIS FIELD.6K@JJEXT LOOP IF IT IS A MASTER WITH NO SLAVES.:K1S(J,2)IS$(J,K1) NAME OF THE ASSOCIATED FILES (MASTER IF THIS FILE IS A DETAIL, OR THE DETAIL FILES IF THIS IS A MASTER FILE).KK1S(J,3) S(J,3) IS THE NUMBER OF FIELDS IN THIDRIVE NUMBER (1-12), STARTING RECORD NUMBER ON THIS DRIVE, ENDING RECORD NUMBER ON THIS DRIVE, SLOT NUMBER AND DRIVE NUMBER (IN THIS SLOT) FOR THIS DRIVE. K S(J,2)0270* S(J,2) IS THE NUMBER OF ASSOCIATED FILES. THUS, WE SKIP THE NEXT FOR-NIRED, CHARACTERS PER RECORD, NUMBER OF DISC DRIVES TO HOLD THIS FILE, COMPANION ACTIVE/SORT FILE (1=YES)x K1S(J,7) S(J,7) IS THE NUMBER OF DRIVES NECESSARY TO CONTAIN THIS FILE. SR%(J,K,1),SR%(J,K,2),SR%(J,K,3),SR%(J,K,4),SR%(J,K,5) DRIVES, AND THE NAME OF THE BASE DEFINITION FILE; J1I S$(J,1),S(J,1),S(J,2),S(J,3),S(J,4),S(J,5),S(J,6),S(J,7),S(J,8)h FILE NAME,TYPE (1=MASTER, 2=SLAVE), NUMBER OF ASSOCIATED FILES, NUMBER OF FIELDS, NUMBER OF RECORDS IN FILE, SECTORS REQU dD$;"READ ";B$ nI,DT,BT$:BT$B$ĺD$;"CLOSE ";B$:D$::(7);"YOU INPUT '";B$;"' ,BUT":"'";BT$;"' WAS FOUND IN THE 1ST RECORD.":"MUST CANCEL THIS RUN":100000 x NUMBER OF FILES (INCLUDING BOTH MASTER AND DETAIL), THE REQUIRED NUMBER OF DISC TA BASE":::4)"COPYRIGHT 1985, PRODEV SOFTWARE"::7)"MUSKEGON, MICHIGAN 49442"::g <J11000: F"INSERT THE DISK CONTAINING YOUR":"DEFINITION FILE AND ENTER IT'S":"NAME ? ";B$:B$""10000 P(B$,4)".DEF"B$B$".DEF" ZD$;"OPEN ";B$ m ** PROGRAM DBCREATE ** COPYRIGHT 1985, PRO DEV SOFTWARE, 545 GROVER ROAD, MUSKEGON, MICHIGAN 49442 **sSV$(10,40,3),SV%(10,40),S$(10,10),S(10,8),SR%(10,12,5)(D$(4)W 2::12)"DBCREATE PROGRAM"::2)"TO CREATE A PDS*BASE BLANK DA    ;::::"FOLLOWING IS A LISTING OF THE '";B$;".DEF' FILE."::2720M :(7);B$;".DEF FILE HAS BEEN CREATED"::"PROGRAM DBDEF IS FINISHED...."M':"INSERT THE PDS*BASE MASTER IN DRIVE 1"::"AND PRESS ANY KEY ";:A$::D$"RUN MENU1"IARIABLE NAME OF THE DBDEF PROGRAM TO DECODE THE ABOVE.":D$;"PR#0":2990VL D$;"CLOSE ";B$;".DEF"hL D$;"NOMON O"L :"DO YOU WISH TO PRINT THE ":B$;".DEF FILE DATA ? ";::"N";(8);::A$:A$:(A$)13A$"N"L A$"Y"2990CM D$;"PR#1":E1:J179:(95)STER, 2=DETAIL)"H"73 REM ZS%(X,2)=SET CAPACITY (NUMBER OF RECORDS)""74 REM ZS%(X,3)=RECORD SIZE INCLUDING COMMAS & RETURN""75 REM ZS%(X,4)=NUMBER OF ASSOCIATED SETS""76 REM ZS%(X,5)=NUMBER OF DRIVES REQUIRED" "77 REM ZS%(X,6)=NU ZS$(";SI;",";NS1;"),ZS%(";SI;",10),ZT%(";SI;",";ND;",4)";`NS0ĺ",ZH(";NS;"),ZE(";NS;")";NC0ĺ",YC%(";NC;",50),YC(";NC;")";"71 REM ZS$(X,Y) Y=1 IS NAME OF SET, Y=2-4 IS NAME OF ASSOCIATED SETS""72 REM ZS%(X,1)=SET TYPE (1=MAIS D$ FOR DISC COMMANDS **")"40 REM"X"50 REM *** OPEN THE DATA BASE FILES ***"fL(B$)4"60 TEXT : HOME : D$=CHR$(4) : ZO$=CHR$(44) : ZB$=";QM$;(B$,1,L);QM$;" : ZQ=";SI;" : REM CONTROL D, COMMA, BASE NAME, NUMBER OF FILES";"70 DIM0 REM"6b"25 PRINT CHR$(4);";QM$;"MAXFILES ";BF;QM${l"30 REM *** THIS PROGRAM OPERATES AGAINST A PDS*BASE DATA BASE"v"REM ** ALMOST ALL VARIABLES WILL START WITH THE LETTER Y OR Z TO ALLOW YOU TO USE ANY OTHER VARIABLE NAME. THE ONLY EXCEPTION :D$;"OPEN DBTEMP":D$;"WRITE DBTEMP":B$;",";F$;",";NS;",";QC$:D$;"CLOSE DBTEMP":D$hD$;"MON I,O"&D$;"OPEN ";F$;",";DR$:D$;"DELETE ";F$:D$;"OPEN ";F$0D$;"WRITE ";F$:"MON I,O"D"NEW"N"10 REM *** PROGRAM '";F$;"' ***"X"2NVNVS(J,3)%S(J,7)NDNDS(J,7)ES(J,8)0NCNC1:S(J,8)NCgS(J,1)1S(J,4)NRNRS(J,4)m *** CREATE THE EXEC FILE ***:"ENTER THE EXEC FILE NAME? ";F$F$""10000A10540VD$;"OPEN DBTEMP":D$;"DELETE DBTEMP""3"ĄL$,L$,L$,LPTQC$"1"QC$"4"ĄSV$(J,K,1),SV$(J,K,2),SV$(J,K,3),SV%(J,K)W^K^hJdrx|D$;"CLOSE ";B$B1$(3),B2$(3)CO$(59)(34)(44)(34)(59)NS0:ND0:NV0:NC0:NR0J1SIS(J,2)NSNSS(J,2) S(J,3)2),S(J,3),S(J,4),S(J,5),S(J,6),S(J,7),S(J,8)CS(J,8)0S(J,8)1TBFBFS(J,7)dK1S(J,7)SR%(J,K,1),SR%(J,K,2),SR%(J,K,3),SR%(J,K,4),SR%(J,K,5)KS(J,2)0320"K1S(J,2),S$(J,K1)6K@K1S(J,3)JQC$"2"QC$(B$,4)".DEF"B$B$".DEF"1D$;"OPEN ";B$DD$;"READ ";B$SI,DT,BT$:BT$B$ĺD$;"CLOSE ";B$:D$::(7);"YOU INPUT '";B$;"' ,BUT":"'";BT$;"' WAS FOUND IN THE 1ST RECORD.":"MUST CANCEL THIS RUN":10000J1SI,S$(J,1),S(J,1),S(J,76):(1):A$:A$:A$"Y"A11 :"WILL YOUR PROGRAM NEED TO KNOW THE":"FIELD NAMES ? ";::"N";::(15):A$:A$:A$"Y"A21 (7) :"INSERT YOUR PROGRAM DISC IN DRIVE #1.": :"ENTER THE DEFINITION FILE"::"NAME ? ";B$:B$""10000HE DATA BASE FILES":> s"5 - WRITE YOUR OWN MAIN PROGRAM":{ x" ENTER CODE ? ";:QC$:QC$:(QC$)1(QC$)510000 QC$"1"QC$"4"ĆSV$(10,40,3),SV%(10,40):A11:A21 QC$"5"140 :"WILL YOUR PROGRAM CREATE RECORDS ? ";::"N";::(EPORT FROM":16)"DATA BASE RECORDS": d"3 - DBSORT - TO CREATE A MAIN PROGRAM":16)"TO PRODUCE A SPECIAL":16)"MULTI-FIELD SORT": n"4 - DBUTIL1 - TO CREATE A MAIN PROGRAM":16)"TO CORRECT POINTERS AND":16)"RECORDS AND TO RAW LIST":16)"T::"WHICH 'MAIN' PROGRAM GENERATOR WILL YOU":"BE RUNNING AFTER THIS PROGRAM?": P"1 - DBMANAGE - TO CREATE A MAIN PROGRAM":16)"TO ADD, DELETE OR MODIFY":16)"DATA BASE RECORDS":& Z"2 - DBREPORT - TO CREATE A MAIN PROGRAM":16)"TO PRODUCE A RTIONAL SUBRUOTINES":::4)"COPYRIGHT 1985, PRO DEV SOFTWARE"::11)"545 GROVER ROAD"::7)"MUSKEGON, MICHIGAN 49442":: <:"THIS PROGRAM WILL BUILD THE OPERATIONAL":"SUBROUTINES TO BE USED FOR ONE OF THE":"FOLLOWING PROGRAMS."R FJ13000:::7n ** DBOPSUB PROGRAM ** COPYRIGHT 1985, PRO DEV SOFTWARE, 545 GROVER ROAD, MUSKEGON, MICHIGAN 49442 **tS$(10,10),S(10,8),SR%(10,12,5)(D$(4):BF1:QM$(34):CM$(44):A10:A20| 2::11)"DBOPSUB PROGRAM"::"CREATE PDS*BASE OPERA                     : END"&1460&"360 IF Z5>0 THEN PRINT CHR$(7);";QM$;"WARNING - THE DETAIL FILE POINTERS ARE";QM$;" : PRINT ";QM$;"IN ERROR. RUN DBUTILITY PROGRAM TO FIX.";QM$;" : PRINT : PRINT ";QM$;" (PRESS ANY KEY TO CONTINUE) ";QM$;"; : GET ZQ$ : PRINT"*'1"%"355 PRINT D$"2%QC$"1"QC$"5"1450&"360 IF Z5>0 THEN PRINT CHR$(7);";QM$;"THE DETAIL FILE POINTERS ARE IN ERROR";QM$;" : PRINT ";QM$;"RUN THE DBUTILITY PROGRAM TO FIX";QM$;"PRINT ";QM$;"MUST CANCEL";QM$;" : PRINT D$;";QM$;"CLOSE";QM$;"OTO 350"+$Z"342 IF ZS%(Z1,1)=1 GOTO 350"$d"344 ZA=Z1 : ZZ=1 : ZR=ZS%(Z1,8) : GOSUB 610 : FOR Y1=1 TO ZS%(ZA,7) : IF Y$(1) <> ";QM$;QM$;" THEN Z5=1 : REM CHECK TO SEE THAT THE NEXT RECORD TO BE WRITTEN TO IS BLANK"$n"345 NEXT Y1"%x"350 NEXT Z;QM$;"READ ";QM$;";ZF$;";QM$;",R";QM$;";ZS%(Z1,2)+1 : INPUT ZS%(Z1,6),ZS%(Z1,8)"i#<DT1ĺ"340 NEXT Z2"x#FA101400$P"341 IF ZS%(Z1,6)=ZS%(Z1,2) THEN PRINT CHR$(7);";QM$;"WARNING - THE ";QM$;";ZS$(Z1,1) : PRINT ";QM$;"DATA FILE IS FULL.";QM$;" : GREAD ";QM$;";ZF$;";QM$;",R";QM$;";(ZT%(Z1,Z2,2)-ZT%(Z1,Z2,1)+2) : INPUT ZS%(Z1,6),ZS%(Z1,8)""(DT1ĺ"335 IF ZS%(Z1,1)=1 THEN PRINT D$;";QM$;"READ ";QM$;";ZF$;";QM$;",R";QM$;";ZS%(Z1,2)+1 : INPUT ZS%(Z1,6)"P#2DT1ĺ"337 IF ZS%(Z1,1)=2 THEN PRINT D$;" PRINT D$;";QM$;"OPEN ";QM$;";ZL$"!DT1ĺ"335 IF Z2=ZS%(Z1,5) AND ZS%(Z1,1)=1 THEN PRINT D$;";QM$;"READ ";QM$;";ZF$;";QM$;",R";QM$;";(ZT%(Z1,Z2,2)-ZT%(Z1,Z2,1)+2) : INPUT ZS%(Z1,6)"\"DT1ĺ"337 IF Z2=ZS%(Z1,5) AND ZS%(Z1,1)=2 THEN PRINT D$;";QM$;"5 Z2=1" "320 ZF$=ZS$(Z1,1)"g DT1ĺ"325 IF ZS%(Z1,5)>1 THEN ZF$=ZF$+";QM$;".S";QM$;"+STR$(Z2)" "327 ZL$=ZF$+";QM$;",S";QM$;"+STR$(ZT%(Z1,Z2,3))+";QM$;",D";QM$;"+STR$(ZT%(Z1,Z2,4))" "328 ZL$=ZL$+";QM$;",L";QM$;"+STR$(ZS%(Z1,3))""! "330S LOADED""300 PRINT TAB(7)";QM$;"PDS*BASE DATA BASE SYSTEM";QM$;":PRINT:PRINT:PRINT ";QM$;"INSERT DATA DISC(S) AND PRESS ANY KEY";QM$;"; : GET YQ$:PRINT""305 Z5=0""310 FOR Z1=1 TO ";SIDT1ĺ"315 FOR Z2=1 TO ZS%(Z1,5)" DT1ĺ"319vLFLC225LC260ĺ: CARRIAGE RETURN AT END OF LINE[xLFLC225ĺLN;" DATA ";:LC9q~K1LC9ĺCM$;QM$;SV$(J,K,1);QM$;CM$;QM$;SV$(J,K,2);SV$(J,K,3);(SV%(J,K));QM$;:LCLCLFK::LC255J LNLN1:LN;" REM ALL VARIABLE NAME."200 DIM ZN$(";SI;",";NV;",2)"=8"205 FOR ZI=1 TO ";SI^B"210 FOR ZJ=1 TO ZS%(ZI,7)"L"215 READ ZN$(ZI,ZJ,1),ZN$(ZI,ZJ,2):NEXT ZJ:NEXT ZI"VLN219:LC260`J1SIjK1S(J,3)tLF(SV$(J,K,1))((SV%(J,K)))8:LFLC225LNLN1 LC255oLNLN1:LN;" DATA ";SR%(J,1,2);CM$;SR%(J,1,3);CM$;SR%(J,1,4);CM$;SR%(J,1,5);:S(J,7)1ĺ:1050K2S(J,7):CM$;SR%(J,K,2);CM$;SR%(J,K,3);CM$;SR%(J,K,4);CM$;SR%(J,K,5);:K:J$A201200: A2=0 IF NO FIELD NAMES ARE REQUIRED"NEXT Z2""125 NEXT Z1"&LN1292J1SILNLN1:LN;" DATA ";S(J,1);CM$;S(J,4);CM$;S(J,6);CM$;S(J,2);CM$;S(J,7);CM$;S(J,3);CM$;S(J,8)LNLN1:LN;" DATA ";QM$;S$(J,1);QM$;S(J,2)0ĺ:1020K2S(J,2)1:CM$;QM$;S$(J,K);QM$;::%(Z1,1),ZS%(Z1,2),ZS%(Z1,3),ZS%(Z1,4),ZS%(Z1,5),ZS%(Z1,7),ZS%(Z1,9),ZS$(Z1,1)""110 IF ZS%(Z1,4) > 0 THEN FOR Z2=1 TO ZS%(Z1,4) : READ ZS$(Z1,Z2+1) : NEXT Z2"120 FOR Z2=1 TO ZS%(Z1,5) : READ ZT%(Z1,Z2,1),ZT%(Z1,Z2,2),ZT%(Z1,Z2,3),ZT%(Z1,Z2,4) : NUMBER (MULTI-DISC FILES)">\"86 REM Z=1 = STARTING RECORD"`f"87 REM Z=2 = ENDING RECORD"yp"88 REM Z=3 = SLOT"z"89 REM Z=4 = DRIVE""90 DIM ZI$(";NV;"),Y$(";NV;")": INPUT AND BUFFER ARRAYS""100 FOR Z1=1 TO ";SIN"105 READ ZSGNED AT THIS TIME">"83 REM FOR MULTI-DISC FILES THE LOCATION OF RECORDS IS LOCATED IN ZT%(X,Y,Z). THE FILE NAME WILL BE FOUND ON EACH DISC WITH .S1, .S2, .S3, ETC FILE NAME EXTENSION."H"84 REM ZT%(X,Y,Z) X=SET NUMBER"R"85 REM Y=FILE SECTION MBER OF RECORDS ASSIGNED"O"78 REM ZS%(X,7)=NUMBER OF VARIABLES IN THE SET" "79 REM ZS%(X,8)=POINTER TO NEXT RECORD TO BE CREATED IF A DETAIL FILE"*"80 REM ZS%(X,9)=1 IF A COMPANION ACTIVE/SORT FILE IS PRESENT"4"81 REM ZS%(X,10)= UNNASSIREM ** BE SURE THAT 'ZA'=THE NUMBER OF THE DATA SET AND ZR=THE DESIRED RECORD NUMBER"6HDT1ĺ"705 PRINT D$;";QM$;"WRITE ";QM$;";ZS$(ZA,1);";QM$;",R";QM$;";ZR"H7RDT1ĺ"705 YZ=1 : GOSUB 610 : PRINT D$;";QM$;"WRITE ";QM$;";ZF$;";QM$;",R";QM$;";YR : RE FOR ";QM$;";ZR$;";QM$;" IN THE DATA BASE.";QM$;" : ZV=1 : RETURN"5"685 ZR=ZN : GOTO 610 : REM LOOK AT THE NEXT SECONDARY MASTER"5 "695 REM"5*A10245054"700 REM ** SUBROUTINE TO UP-DATE OR CREATE A RECORD USING Y$(X) BUFFER **"U6>"701 THEN ZZ=0 : PRINT D$:RETURN:REM IT'S A MASTER BUT, NO TEST FOR SEARCH ITEM IS DESIRED."4"674 REM ** TEST FOR SEARCH ITEM **"4"675 IF ZL$=ZR$ THEN PRINT D$ : RETURN : REM FOUND IT!"B5 "680 IF ZN=0 THEN PRINT D$ : PRINT CHR$(7);";QM$;"NO MASTER"}3"671 REM ** WITH A MASTER, ZH(X)=THE CHAIN HEAD OF THE XTH DETAIL SET CHAIN AND ZE(X)=THE CHAIN END OF THE XTH CHAIN."3"672 IF ZS%(ZA,1)=2 THEN PRINT D$ : RETURN : REM NEED NO FURTHER INFO FOR A DETAIL SET."X4"673 IF ZR$=";QM$;QM$;" OR ZZ=12LNLN1*2LN;" ZL$=Y$(1) : GOTO 670"12I3"670 REM ** IF A DETAIL DATA SET, ZB=THE BACKWARD POINTER AND ZF=THE FORWARD POINTER. IF A MASTER, ZC=NUMBER OF SECONDARY MASTERS, ZP=PREVIOUS SECONDARY POINTER, ZN=NEXT SECONDARY MASTER REC # POINTER.19101XL$"ZC,ZP,ZN,"*1bS(I,2)01910_1lJ1S(I,2):L$L$"ZH("(J)"),ZE("(J)"),":|1vL1$(I)L$:S(I,3)119301J1(S(I,3)1):L$L$"Y$("(J)"),":1L$L$"Y$("(S(I,3))")"1LNLN11L2$(I)L$:L$(LN)" INPUT "L$1L$ IF RECORD FOUND AND ZV=1 IF RECORD NOT FOUND"<0SI11850U0L$"640 ON ZA GOTO "`0LN6390&J1SI1:LNLN2:L$L$(LN)",":00LNLN2:L$L$(LN):L$;":REM BRANCH TO CORRECT INPUT STATEMENT"0:LN6400DI1SI1NS(I,1)2L$"ZB,ZF,":: IF ZR >= ZT%(ZA,Y2,1) AND ZR <= ZT%(ZA,Y2,2) THEN Y1=Y2 : Y2=ZS%(ZA,5)"/"625 YR=ZR-ST%(ZA,Y1,1)+1 : ZF$=ZF$+";QM$;".S";QM$;"+STR$(Y1):IF YZ=1 THEN YZ=0 : RETURN"/"630 PRINT D$;";QM$;"READ ";QM$;";ZF$";QM$;",R";QM$;";YR"-0"635 ZV=0:REM ZV=0 IS SUBROUTINE IS CALLED FROM 800 OR 1300 SUBROUTINES THEN ZZ WILL=1 AND RETURN WILL BE AT 665."."610 ZF$=ZS$(ZA,1) : YR=ZR : IF ZS%(ZA,5)=1 AND YZ=1 THEN YZ=0 : RETURN".DT11780."615 IF ZS%(ZA,5)=1 GOTO 630"I/"620 FOR Y2=1 TO ZS%(ZA,5) **"-"601 REM * BE SURE THAT 'ZA'=THE NUMBER OF THE DESIRED SET AND ZR=THE DESIRED RECORD NUMBER (FROM SUBROUTINE AT 500). IF A MASTER IS BEING READ ZR$=THE SEARCH ITEM VALUE. YI$(X) RETURNED WITH THE DATA."_."605 ZZ=0 : YZ=0 : Z1=ZR : REM WHEN THD FOR SEARCH STRING OVER 12 CHAR."h,"525 Z0=((ASC(MID$(ZR$,Z4,1))-32)*Z5) : Z3=Z3+(Z0*Z0*Z0) : NEXT","530 ZR=INT(Z3-(Z2*(INT((Z3-1)/Z2)))) : IF ZR<=0 THEN ZR=1","540 RETURN","550 REM"-"600 REM ** SUBROUTINE TO DIRECT READ A DATA SETTHE DATA SET. SET ZR$=THE SEARCH ITEM. IF NECESSARY CONVERT INTEGER OR REAL SEARCH ITEMS TO A STRING FOR ZR$.":"506 REM"+r"510 Z3=0:Z1=LEN(ZR$):Z2=ZS%(ZA,2)"",|"520 FOR Z4=1 TO Z1 : Z5=Z4 : IF Z1 > 12 THEN Z5=1/Z4 : REM PROVIDES BETTER RANDOM SPREAINT ";QM$;"ALL DONE";QM$;" : END"?*J"460 REM END OF PROGRAM"c*T"480 END : REM ** ALL DONE **"*^"500 REM ** SUBROUTINE TO CALCULATE THE RANDOM ACCESS RECORD NUMBER **"y+h"502 REM":"504 REM BEFORE CALLING THIS SUBROUTINE, ZA MUST=THE NUMBER OF ZS%(Z1,1)=1 THEN PRINT ZS%(Z1,6) : PRINT D$;";QM$;"CLOSE ";QM$;";ZF$")"434 IF ZS%(Z1,1)=2 THEN PRINT ZS%(Z1,6);";QM$;",";QM$;";ZS%(Z1,8) : PRINT D$;";QM$;"CLOSE ";QM$;";ZF$")"DT1ĺ"435 NEXT Z2"),"440 NEXT Z1")6"445 PRINT D$"!*@"450 PR430 PRINT D$;";QM$;"CLOSE ";QM$;";ZF$":1580(DT1ĺ"430 IF Z2=ZS%(Z1,5) THEN PRINT D$;";QM$;"WRITE ";QM$;";ZF$;";QM$;",R";QM$;";(ZT%(Z1,Z2,2)-ZT%(Z1,Z2,1)+2)"(DT1ĺ"430 PRINT D$;";QM$;"WRITE ";QM$;";ZF$;";QM$;",R";QM$;";ZS%(Z1,2)+1"F)"432 IF"380 GOTO 2000:REM TO THE MAIN PROGRAM"O'"400 REM ** CLOSE ALL FILES **"v'DT1ĺ"415 FOR Z2=1 TO ZS%(Z1,5)"'"410 FOR Z1=1 TO ";SI'"420 ZF$=ZS$(Z1,1)"'DT1ĺ"425 IF ZS%(Z1,5) > 1 THEN ZF$=ZF$+";QM$;".S";QM$;"+STR$(Z2)",(A10ĺ"RINT D$ : PRINT CHR$(7);ZR$;";QM$;" ALREADY EXISTS IN THE DATA BASE.";QM$;" : ZV=2 : RETURN" "890 IF ZC=0 GOTO 950 : REM IF ZC>=1 THEN WE ARE AT THE HEAD OF A MASTER CHAIN""900 GOSUB 1800 : ZZ=1 : GOSUB 610 : REM Z1 WILL= A VACANT RECORD NUMBER"> "835 FOR ZI=1 TO ZS%(ZA,4) : ZH(ZI)=0 : ZE(ZI)=0 : NEXT"k "840 GOSUB 750 : REM CREATE THE RECORD" "850 ZS%(ZA,6)=ZS%(ZA,6)+1" "860 RETURN" "880 REM ** RECORD ALREADY EXISTS AT THE CALCULATED LOCATION **"\ "885 IF ZL$=ZR$ THEN PCORD TO SEE IF RECORD ALREADY EXISTS AT THIS CALCULATED LOCATION." "820 IF ZL$<>";QM$;QM$;" GOTO 880 : REM IF ZL$=BLANK THEN NO MASTER EXISTS AT THIS LOCATION" "825 ZC=1 : ZP=0 : ZN=0 : REM SET HEADER VARIABLES" "830 IF ZS%(ZA,4)=0 GOTO 840"HE NUMBER OF THE DATA SET, ZR$=THE SEARCH ITEM, ZI$(X)=THE NEW DATA VARIABLES **" "805 GOSUB 500 : ZZ=1 : REM ZR NOW=THE CALCULATED RECORD # IN 'ZA' AND WITH ZZ=1 ANY CALLS TO SUBROUTINE AT 610 WILL RETURN FROM 665."B "810 GOSUB 610 : REM CHECK RE DBTEMP":D$;"READ DBTEMP":B$,F$,NS,QR$:D$;"DELETE DBTEMP":D$;"CLOSE DBTEMP"a FD$;"MON I,O"v PD$;"APPEND ";F$ ZD$;"WRITE ";F$ dQR$"Y"1020 n"800 REM ** SUBROUTINE TO CREATE A NEW MASTER DATA SET **Q x"801 REM ** BE SURE THAT 'ZA'=TB&o ** DBOPSUBA PROGRAM ** COPYRIGHT 1985, PRO DEV SOFTWARE, 545 GROVER ROAD, MUSKEGON, MICHIGAN 49442 **uD$(4):QM$(34)((7)2:"INSERT YOUR PROGRAM DISC IN DRIVE #1"::" (PRESS ANY KEY WHEN READY) ";:Q$:Q$O <D$;"OPEN           !!! ! ! ! ! !!!!!!!!!"1",I$(Z1)=Y$(Z1) : NEXT Z1"7> "1530 RETURN":"1540 REM"a> "2000 REM *******MAIN PROGRAM******"y> D$;"CLOSE ";F$:D$> D$;"NOMON I,O"> :"END OF PROGRAM"?':"INSERT THE PDS*BASE MASTER IN DRIVE 1"::"AND PRESS ANY KEY ";:A$::D$"RUN MENU THE PDS*BASE MASTER IN DRIVE #1"::" (PRESS ANY KEY WHEN READY) ";:Q$:Q$g= D$;"RUN DBOPSUBA"= "1500 REM ** SUBROUTINE TO CREATE ZI$(X) FROM Y$(X) **"= "1510 REM ** ZA MUST=THE NUMBER OF THE DATA SET"> "1520 FOR Z1=1 TO ZS%(Z1,7) : Z1);";QM$;",";QM$;"; : NEXT Y1 : PRINT ZI$(ZS%(ZA,7)) : PRINT D$ : RETURN"u1 THEN FOR Y1=1 TO ZS%(ZA,7)-1 : PRINT ZI$(Y 'ZA'=THE NUMBER OF THE DATA SET AND ZR=THE DESIRED RECORD NUMBER AND THAT ZD$=THE DATA":DT1ĺ"755 PRINT D$;";QM$;"WRITE ";QM$;";ZS$(ZA,1);";QM$;",R";QM$;";ZR": DT1ĺ"755 YZ=1 : GOSUB 610 : PRINT D$;";QM$;"WRITE ";QM$;";ZF$;";QM$;",R";QM$;";YR"O ZS%(ZA,7)-1 : PRINT Y$(Y1);";QM$;",";QM$;"; : NEXT Y1 : PRINT Y$(ZS%(ZA,7)) : PRINT D$ : RETURN"9"745 PRINT Y$(1) : PRINT D$ : RETURN"9"750 REM ** SUBROUTINE TO UP-DATE OR CREATE A RECORD USING ZI$(X) VARIABLES **"X:"751 REM ** BE SURE THATC"CO$"ZP"CO$"ZN"CO$?8S(I,1)2L3$(I)"ZB"CO$"ZF"CO$[8S(I,2)0S(I,1)222408J1S(I,2):L3$(I)L3$(I)"ZH("(J)")"CO$"ZE("(J)")"CO$:8LNLN1:LN;" PRINT ";L3$(I);" : GOTO 740"8Ib9"740 IF ZS%(ZA,7)>1 THEN FOR Y1=1 TM FOR MULTI-DISC FILES GOSUB 610 TO GET THE FILE NAME AND RECORD NUMBER"a7\L$"710 ON ZA GOTO "l7fLN7117pJ1SI1:L$L$(LN)",":LNLN1:7zL$L$(LN):L$;":REM BRANCH TO CORRECT PRINT STATEMENT"7LN7107I1SI8S(I,1)1L3$(I)"ZTS.";QM$;" : ZV=1 : RETURN","1215 NEXT"q"1220 IF ZC=0 GOTO 1240 : REM ZC=0 IF IT IS A SECONDARY MASTER""1225 IF ZC>1 GOTO 1280 : REM IF ZC>1 THEN THERE ARE SECONDARY MASTERS TO DEAL WITH""1230 FOR Y1=1 TO ZS%(ZA,7) : ZI$(Y1)=";QM$;QM$ Y4=ZR : IF ZC=0 THEN GOSUB 500 : Y5=ZR "N"1210 IF ZS%(ZA,4)=0 GOTO 1220""1213 FOR ZI=1 TO ZS%(ZA,4) : IF ZH(ZI)<>0 OR ZE(ZI)<>0 THEN PRINT D$ : PRINT CHR$(7);";QM$;"CAN'T DELETE THIS MASTER RECORD AS IT";QM$;" : PRINT ";QM$;"STILL HAS DETAIL SEADD 1 TO THE ACTIVE RECORDS COUNT"Tv"1150 PRINT D$ : ZR=YM : RETURN":"1160 REM""1200 REM ** DELETE A MASTER RECORD **""1201 REM ** ZA MUST=# OF THE SET, ZR$ MUST=VALUE OF SEARCH ITEM. IT IS ASSUMED THAT THE RECORD HAS BEEN READ")"1205AIN END IN MASTER"3N"1130 ZA=ZS:ZZ=1:GOSUB 610"X"1135 ZF=Z1:GOSUB 700:ZB=Z2:REM SET FORWARD POINTER FOR PREVIOUS CHAIN END DATA SET"b"1140 ZA=ZS : ZF=0 : ZR=Z1 : GOSUB 750 : REM WRITE NEW DETAIL RECORD""l"1145 ZS%(ZA,6)=ZS%(ZA,6)+1 : REM 8)"0&"1110 IF ZF>ZS%(ZS,2) THEN ZS%(ZA,8)=0"r0"1115 ZA=ZM : ZR=YM : ZZ=1 : GOSUB 610 : IF Z7<>0 GOTO 1125":"1120 ZH(Z6)=Z1:ZE(Z6)=Z1:GOSUB 700:ZB=0:ZF=0:ZR=Z1:GOTO 1140"D"1125 Z2=ZE(Z6):ZE(Z6)=Z1:ZA=ZM:ZR=YM:GOSUB 700:ZR=Z2:REM SET NEW CHRINT : PRINT ";QM$;" (PRESS ANY KEY TO CONTINUE)";QM$;"; : GET YQ$ : PRINT : RETURN""1100 Z2=ZR : ZR=Z1 : ZZ=1 : GOSUB 610 : ZS%(ZS,8)=ZF : ZR=Z2 : REM READ THE NEW DETAIL TO GET THE POINTER TO THE NEXT VACANT DETAIL FOR FUTURE REFERENCE IN ZS%(ZS,ERS FROM THE MASTER""1050 IF ZS%(ZS,1)<>2 THEN PRINT CHR$(7);";QM$;"PROGRAMMING ERROR-";QM$;";ZS$(ZS,1);";QM$;" ISN'T A DETAIL SET.";QM$;" : POP : GOTO 400 "V"1060 Z1=ZS%(ZS,8) : IF Z1=0 THEN PRINT CHR$(7);";QM$;"THIS DATA SET IS FULL";QM$;" : P PRINT D$ : PRINT CHR$(7);ZS$(ZS,1);";QM$;" DOES NOT MATCH ";QM$;"ZS$(ZM,1) : PRINT ";QM$;"PROGRAMMING ERROR";QM$;" : POP : GOTO 400 : REM Z6=WHICH DETAIL SET FOR THE MASTER""1040 Z7=ZH(Z6) : Z8=ZE(Z6) : REM SAVE THE EXISTING CHAIN HEAD AND END POINTE CHAIN HEAD MASTER HAS ALREADY BEEN READ AS ZR. ZM=MASTER SET NUM, ZS=DETAIL SET NUM. SAVE ZR AS YM **"z"1010 YM=ZR""1020 Z6=0""1025 FOR ZI=2 TO ";NS1"1030 IF ZS$(ZM,ZI)=ZS$(ZS,1) THEN Z6=ZI-1 : ZI=4""1035 NEXT : IF Z6=0 THENTAIL SETS IN THE DATA BASEW"1000 REM ** SUBROUTINE TO CREATE A DETAIL DATA SET **""1001 REM ** ZR$ MUST= THE SEARCH ITEM OF THE DETAIL'S MASTER SO THE CHAIN HEAD AND END OF THE DETAIL CHAIN CAN BE UPDATED"h"1002 REM ** IT IS ASSUMED THAT THESET THE POINTERS ON THE NEXT RECORD IN THE CHAIN OF THE SECONDARY THAT WE JUST MOVED""970 ZR=Z2:ZC=0:ZP=0:ZN=0:GOTO 825 : REM SET ZR BACK TO THE CALCULATED VALUE THEN GOTO 825 TO CREATE THE NEW MASTER CHAIN HEAD""975 REM"NS0640: NO DE TO IT."r"955 Z1=ZR : ZR=ZP : Z3=ZN : ZZ=1 : GOSUB 610 : ZN=Z1 : GOSUB 700 : REM READ AND RESET POINTERS OF THE PREVIOUS RECORD FOR THE SECONDARY WE JUST MOVED"|"960 IF Z3=0 GOTO 970"V"965 ZR=Z3 : ZZ=1 : GOSUB 610 : ZP=Z1 : GOSUB 700 : REM RRECORD."T^"945 ZR=Z1:ZN=0:ZP=Z3:ZC=0:GOTO 830: REM CREATE THE NEW MASTER AT 830"h"950 GOSUB 1800 : ZZ=1 : GOSUB 610 : Z2=ZR:ZR=Z1:GOSUB 700 : REM READ SECONDARY MASTER AT CALCULATED POSITION, FIND A NEW VACANT RECORD AND XFER THE SECONDARY MASTER@"930 IF ZN=0 GOTO 940"YJ"935 ZR=ZN:GOTO 925:REM READ THE NEXT SECONDARY MASTER"T"940 ZN=Z1:Z3=ZR : GOSUB 700:ZR=Z2 : ZZ=1 : GOSUB 610 : ZC=ZC+1 : GOSUB 700 : REM SET THE POINTERS ON THE FORMER LAST RECORD IN THE CHAIN AND ON THE HEAD MASTER 830 TO CREATE THE NEW MASTER"x,"920 Z2=ZR:ZR=ZN : REM WE GOT HERE FROM 905 WHEN THERE ARE ALREADY SECONDARY MASTERS"6"925 ZZ=1 : GOSUB 610 : IF ZL$=ZR$ THEN PRINT D$ : PRINT CHR$(7);ZR$;";QM$;" ALREADY EXISTS IN THE DATA BASE.";QM$;" :ZV=2:RETURN"V"905 IF ZC>1 GOTO 920 : REM IF ZC=1 THEN THERE ARE NO PRESENT SECONDARY MASTERS""910 ZC=2 : ZN=Z1 : GOSUB 700 : REM UPDATE THE POINTERS ON THE CHAIN HEAD MASTER"""915 ZC=0 : ZP=ZR : ZN=0 : ZR=Z1 : GOTO 830 : REM SET HEADER VARIABLES, GOTO RECORD"C-"1991 REM 1500 - TO CREATE ZI$(X) FROM Y$(X) BUFFER"v-"1995 REM 1800 - TO LOCATE A VACANT RECORD"-"2000 REM *******MAIN PROGRAM******"-D$;"CLOSE ";F$:D$- D$;"NOMON I,O"-:"END OF PROGRAM"A.':"INSERT THE PDS*BASE986 REM 750 - TO UPDATE A RECORD USING ZI$(X) BUFFER"h,"1987 REM 800 - TO CREATE A NEW MASTER","1988 REM 1000 - TO CREATE A NEW DETAIL DATA SET","1989 REM 1200 - TO DELETE A MASTER RECORD"-"1990 REM 1300 - TO DELETE A DETAIL PROGRAM FOLLOWS **"R+~"1982 REM ** THE FOLLOWING SUBROUTINES CAN BE CALLED **"+"1983 REM 500 - TO CALCULATE A RECORD NUMBER"+"1984 REM 600 - TO DIRECT READ A RECORD"+"1985 REM 700 - TO UPDATE A RECORD USING Y$(X) BUFFER"8,"1 A VACANT RECORD"*L"1830 ZZ=1 : ZR=Z1 : GOSUB 610 : IF ZL$ <> ";QM$;QM$;" GOTO 1820 : REM READ THE LOWER RECORD AND CHECK FOR BLANK SEARCH FIELD"*V"1840 ZR=Z2 : REM FOUND A BLANK RECORD"*`"1850 RETURN"*j"1860 REM"+t"1981 REM ** THE MAINCANT MASTER RECORD **")8"1810 Z1=ZR : Z2=ZR : IF ZS%(ZA,6)=ZS%(ZA,2) THEN PRINT D$ : PRINT ";QM$;"DATA SET ";QM$;";ZS$(ZA,1);";QM$;" IS FULL.";QM$;";CHR$(7) : POP : ZV=1 : RETURN"*B"1820 Z1=Z1-1 : IF Z1=0 THEN Z1=ZS%(ZA,2) : REM SEARCH DOWNWARD FORM ** SUBROUTINE TO CREATE ZI$(X) FROM Y$(X) **"f("1510 REM ** ZA MUST=THE NUMBER OF THE DATA SET"("1520 FOR Z1=1 TO ZS%(Z1,7) : ZI$(Z1)=Y$(Z1) : NEXT Z1"("1530 RETURN":"1540 REM"($QR$"Y"1260)."1800 REM ** SUBROUTINE TO LOCATE A VA(ZM,4) : IF ZS$(ZM,ZI)=ZS$(ZS,1) THEN Z6=ZI-1 : ZI=4"_'"1380 NEXT : IF Z3=0 THEN ZH(Z6)=Z2"'"1385 IF Z2=0 THEN ZE(Z6)=Z3"'"1390 GOSUB 700 : RETURN : REM UP-DATE THE CHAIN HEAD AND CHAIN ENDS IF THE ASSOCIATED MASTER":"1395 REM"0("1500 REDATE THE ASSOCIATED MASTER IF NECESSARY"&"1365 IF Z2<>0 AND Z3<>0 THEN RETURN : REM THE DELETED DETAIL WAS IN THE MIDDLE OF A DETAIL CHAIN"&"1370 ZA=ZM : ZR=YM : ZZ=1 : GOSUB 600 : REM READ THE ASSOCIATED MASTER"5'"1375 Z6=0 : FOR ZI=2 TO ZS%ECORD IN THE DETAIL CHAIN"8%"1340 IF Z2=0 GOTO 1360"%"1345 ZR=Z2 : ZZ=1 : GOSUB 610 : REM READ THE NEXT RECORD IN THE DETAIL CHAIN"%"1350 ZB=Z3 : GOSUB 700 : REM UP-DATE THE BACKWARD POINTER IN THE NEXT RECORD IN THE CHAIN"(&"1360 REM UP-ECORD # IN ZS%(ZA,8) & SET FORWARD POINTER TO NEXT VACANT RECORD^$z"1315 IF Z3=0 GOTO 1340"$"1325 ZR=Z3 : ZZ=1 : GOSUB 610 : REM READ THE PREVIOUS RECORD IN THE CHAIN"%"1330 ZF=Z2 : GOSUB 700 : REM UP-DATE THE FORWARD POINTER IN THE PREVIOUS RMASTER RECORD (IN ZM)."1#\"1305 ZA=ZS : Z1=YS"#f"1310 FOR Y1=1 TO ZS%(ZA,7) : ZI$(Y1)=";QM$;QM$;" : NEXT Y1 : Z2=ZF : ZF=ZS%(ZA,8) : Z3=ZB : ZB=0 : GOSUB 750 : ZS%(ZA,8)=YS : ZS%(ZA,6)=ZS%(ZA,6)-1 @$p"1311 REM SET THE RECORD TO BLANKS, SAVE THE R30""9NS010203"> **DELETE A DETAIL RECORD**_"H"1300 REM ** DELETE A SLAVE RECORD **"#R"1301 REM ** ASSUMES THAT YS=THE RECORD NUMBER OF THE DETAIL RECORD THAT HAS PREVIOUSLY BEEN READ (IN ZS), AND THAT YM=THE RECORD NUMBER OF THE ASSOCIATED D RECORD NUMBER"{! "1285 ZC=ZX-1 : ZP=0 : ZR=Y2 : GOSUB 700 : REM THIS MOVED THE 1ST SECONDARY MASTER TO THE CHAIN HEAD"!*"1290 IF Y3<>0 THEN ZR=Y3 : ZZ=1 : GOSUB 610 : ZP=Y2 : GOSUB 700 : REM RESET POINTER ON NEXT RECORD""4"1295 ZR=Y9 : GOTO 12SET THE NUMBER OF MASTERS IN THE CHAIN HEAD"J "1260 ZR=Y4 : GOTO 1230"!"1280 Y2=ZR : ZR=ZN : Y9=ZN : ZX=ZC : ZZ=1 : GOSUB 610 : Y3=ZN : REM WE ARE REMOVING THE CHAIN HEAD THAT HAS SECONDARY MASTERS. THUS, WE MOVE THE 1ST SECONDARY TO THE CHAIN HEAC"1245 GOSUB700:REM RESET THE POINTERS ON THE PREVIOUS RECORD""1250 IF Y3<>0 THEN ZR=Y3 : ZZ=1 : GOSUB 610 : ZP=Y2 : GOSUB 700 : REM RESET POINTERS IN NEXT RECORD", "1255 IF Y2<>Y5 THEN ZR=Y5 : ZZ=1 : GOSUB 610 : ZC=ZC-1 : GOSUB 700 : REM RE;" : NEXT Y1 : ZC=0 : ZP=0 : ZN=0 : GOSUB 750 : ZS%(ZA,6)=ZS%(ZA,6)-1 : REM SET FIELDS BLANK, UPDATE RECORD, SUBTRACT 1 FROM NUMBER OF RECORDS ASSIGNED""1235 RETURN""1240 Y2=ZP : Y3=ZN : ZR=Y2 : ZZ=1 : GOSUB 610 : ZN=Y3 : IF Y2=Y5 THEN ZC=ZC-1"0 IF MID$(YC$,ZI,1)=";QM$;"M";QM$;" THEN YB=2"a(SI1ĺ"2060 IF YC$=";QM$;"M";QM$;" THEN YB=2"0SI1ĺ"2065 IF MID$(YC$,ZI,1)=";QM$;"D";QM$;" THEN YB=3"2SI1ĺ"2065 IF YC$=";QM$;"D";QM$;" THEN YB=3":"2070 IF YB < 1 OR YB > 3 THEN PRINT CHR050 ZA=YC:ZI=LEN(YC$):IF YC<10 AND ZI<2 GOTO 2070"P SI1ĺ"2050 ZA=1 : YC=1"SI1ĺ"2052 IF YC>9 AND ZI < 3 GOTO 2070"SI1ĺ"2055 IF MID$(YC$,ZI,1)=";QM$;"A";QM$;" THEN YB=1"SI1ĺ"2055 IF YC$=";QM$;"A";QM$;" THEN YB=1".&SI1ĺ"206, M, OR D ";QM$;":PRINT ";QM$;"A=ADD, M=MODIFY, D=DELETE";QM$;":NORMAL:PRINT ";QM$;"ENTER ";QM$;";:INPUT YC$"SI1ĺ"2045 YC=VAL(YC$) : IF YC=0 GOTO 400"SI1ĺ"2045 IF YC$=";QM$;QM$;" THEN 400"SI1ĺ"2047 IF YC>ZQ GOTO 2010"2SI1ĺ"2$;K;" - ";S$(I,1);QM$ISI1ĺ"2040 PRINT:INVERSE:PRINT ";QM$;"ENTER CODE + A, M, D ";QM$;":PRINT ";QM$;"A=ADD, M=MODIFY, D=DELETE";QM$;":NORMAL:PRINT ";QM$;"ENTER ";QM$;";:INPUT YC$"nSI1ĺ"2040 PRINT:INVERSE:PRINT ";QM$;"ENTER EITHER A WORK MENU FOR";QM$;":PRINT:Z2=LEN(ZB$)+9:PRINT TAB(INT((40-Z2)/2))ZB$;";QM$;" DATA BASE";QM$;":PRINT"vLN2020:K0SI1ĺ"2025 PRINT ";QM$;"TO POST TO ";S$(1,1);QM$:492I1SISI7LNLN1:LN;" PRINT"LNLN1:KK1:LN;" PRINT ";QMRS IN THIS FIELD.JKTJ%^9hD$;"CLOSE ";B$\r *** CREATE THE EXEC FILE ***|:"ENTER THE EXEC FILE NAME? ";F$F$""10000D$;"MON I,O"D$;"APPEND ";F$D$;"WRITE ";F$f"2010 HOME:PRINT TAB(7)";QM$;"PDS*BASE FILEIS IS A MASTER FILE).K,"K1S(J,3)_, S(J,3) IS THE NUMBER OF FIELDS IN THIS FILE.6SV$(J,K,1),SV$(J,K,2),SV$(J,K,3),SV%(J,K)@ FIELD NAME, REQUIRED/OPTIONAL FLAG (R OR O), DATA TYPE (R=REAL, I=INTEGER, C=CHARACTER), NUMBER OF CHARACTEJ,2)0290 S(J,2) IS THE NUMBER OF ASSOCIATED FILES. THUS, WE SKIP THE NEXT FOR-NEXT LOOP IF IT IS A MASTER WITH NO DETAILS.K1S(J,2)S$(J,K1) NAME OF THE ASSOCIATED FILES (MASTER IF THIS FILE IS A DETAIL, OR THE DETAIL FILES IF THO CONTAIN THIS FILE.P SR%(J,K,1),SR%(J,K,2),SR%(J,K,3),SR%(J,K,4),SR%(J,K,5) DRIVE NUMBER (1-12), STARTING RECORD NUMBER ON THIS DRIVE, ENDING RECORD NUMBER ON THIS DRIVE, SLOT NUMBER AND DRIVE NUMBER (IN THIS SLOT) FOR THIS DRIVE. K S(LDS, NUMBER OF RECORDS IN FILE, SECTORS REQUIRED, CHARACTERS PER RECORD, NUMBER OF DISC DRIVES TO HOLD THIS FILE, SECTORS IN COMP FILE. S(J,1)2NS1: INDICATES THE USE OF A DETAIL FILE K1S(J,7) S(J,7) IS THE NUMBER OF DRIVES NECESSARY T AND DETAIL), THE REQUIRED NUMBER OF DISC DRIVES, AND THE NAME OF THE BASE DEFINITION FILEf J1SI S$(J,1),S(J,1),S(J,2),S(J,3),S(J,4),S(J,5),S(J,6),S(J,7),S(J,8) FILE NAME,TYPE (1=MASTER, 2=DETAIL), NUMBER OF ASSOCIATED FILES, NUMBER OF FIE)".DEF"B$B$".DEF") nD$;"OPEN ";B$< xD$;"READ ";B$ SI,DT,BT$:BT$B$ĺD$;"CLOSE ";B$:D$::(7);"YOU INPUT '";B$;"' ,BUT":"'";BT$;"' WAS FOUND IN THE 1ST RECORD.":"MUST CANCEL THIS RUN":10000Z NUMBER OF FILES (INCLUDING BOTH MASTERPDS*BASE MANAGEMENT PROGRAM":::4)"COPYRIGHT 1985, PRO DEV SOFTWARE"::7)"MUSKEGON, MICHIGAN 49442"::| <J11000: F(7) P:"INSERT YOUR PROGRAM DISC IN DRIVE #1" Z:"ENTER THE DEFINITION FILE"::"NAME ? ";B$:B$""10000 d(B$,4 &m ** PROGRAM DBMANAGE ** COPYRIGHT 1985, PRO DEV SOFTWARE, 545 GROVER ROAD, MUSKEGON, MICHIGAN 49442 **sSV$(10,40,3),SV%(10,40),S$(10,10),S(10,8),SR%(10,12,5)(D$(4):CM$(44):QM$(34)l 2::12)"DBMANAGE PROGRAM"::"TO CREATE A " " " " " """""""""           MASTER IN DRIVE 1"::"AND PRESS ANY KEY ";:A$::D$"RUN MENU1":1560h+L$"ZC,ZP,ZN,"{+S(I,2)01560+J1S(I,2):L$L$"ZH("(J)"),ZE("(J)"),":+L1$(I)L$:S(I,3)11580+"J1(S(I,3)1):L$L$"YI$("(J)"),":,,L$L$"YI$(