IMD 1.15: 15/05/2007 13:22:00 fog hak 006         INV INDSTRTRK/2BAS-FOG/HAK006MFACCESSLIB !UCOPY AQM#"#$DIRS9/8 AQM*%&'PROM AQM=()*+DISK DOC ,v!ADE.ASMG  o !#"$%&(')*+,-./0123465789:;=><?@ABDCEFJE{ *0ϑ܃*<(aF{ Xt9^2˰Cz 0Qw@Tp^[ZIgO\%*Cp]g m~bF^|:e 3Œ P֌ ޾n5 #UXS#Qt3KTG/ MVloZ*:u.hLh/'Xrʭrs.f WADE AQM>BANNER AQMDDTPATCHAQM DATABASEDOC* DBENTRY BAS* DBQUERY BAS4DBSETUP BAS4INV   }FWo「:0GyC{FTYnrԲ50 _P1p.8}WګL&G-K}eڽsJT1Gm`]=#жt]ol7mJzb|tta~Lf{%} ̽kgDӼ',1s۽:n_kDQM:UGyT1סv8{ oRԡéJq;:^GmdoRԡ4*As便^ԁ?+nߤ܃+p:2^ՇoJ{`+*sToqȘ}y)*pBu8Ae9+ja}# b\pFWΞub: nrԲ7Z+0^iD1Gt^P`߈bPږD 0s۽yItV7^QV!cB}ψ#UXS Ȅpc /mJj{F>['5łb|t*éaH LXoRuHh0S.Duu$b8 taN.Y^?9wbg:xʷ9D0=g[ˁG*taZl:x2ls^ 9 bf$9dɺ^?fϖ킮sFp{c9Qޞe0 {]m%(p:tcm`][}Wګ` :1ab$^c7b!WL ޭhAT} ̽jo{>ln߈N%glޭhAYQl793s7ܫJ!cB}ψu$` pjpM7L ذA):tc^ KV}{E|/mJj{F{66VoEӽ:7Z+u{]{FT*N`Ei7 79S`J1 {ktYoB{e,Y1^i)6`zG{EKQi׆FWm(o+Jogt;+8b.qȘ}K` xC^3kۅQqshv*mR}17wKD섶%QfE 7;s8d>`>#xVN=C] YQ:oJ{Ն 0Gt_{F{66$7^Q7um(GrFoJ{Ն 0G8+^gD|gcNb|toΔ}<}Fiԑ( B a-o39* FoR3uRk mKH1C^s^Q0G۽TΊ:i7wKD7;mI} ̽kgD1 mK0s۽yy3"9ם jv0 _脅F^y`{7z:^ѵ3i^̺^w%qnW1k=u gy+s{E1iXQ:)4wbt1^iDu}0il}Wګ1i:CYS b^c-]炓bǽo「>a to܃*<(7%[z=jbW6@URk mKH]M~y{UKJsI]Mf(繢HhVlo^Slo20W^U׼gDHhVf}2fT1?B]oDu66k Yut'K>^B{Q:{0Zu858}2f1?B]oDu66k Y9 `#k.fpjp}AVloZa'JVXs.f t`F{X0&x mK9Hd xfgUrϺޫNu85I z0EsEk1 UGyհD0=%{!l( +sFo ΙO{]Q{Eba'Ѓ}ݫr_sNjs^u8{Fu8c1>p{Eܧ)WDwD=},aW{^1i U0}J{e,Y1o「>ټ}19{F+:+s^·lG8}V=>{9`ګT0yȘ}sֹ}un/lvէc߈b%+f}} ̽k3"޳ s^>MEko}LWtNvV&͘s0^ѵ3MNO+{a+t}Eӽ*}FdBgc3gSps-]}{F:u8|>}J{`eڽ}#"Q֡Nt8}_>{Nܧ)W5Q@C]u͗W‡O+^>{s^>#Q]s5y·r^>{5w}Eӽ*Ȅp֫5f"Ϧ>}#0FƬ sWFovVI1KfTޥ^y}#"QjN1Ͼyvz}Zqn)8hAG8s3e/MsVgLK{S0Y~RT8hAԝr^Q`̧cd7}Eӽ*Z{0o*Z{gV,YϊQ?bhǭp{u":/br6>q{u0o(Z{g˴{EWngEt}2f9s0yȘ}K``sz"/Ekت<镍B"/pjp^٘+Ի>^:\E_H]Hl/o/Bj]2R.w5+s^[3yǶd&KVX ;A`s:ݻgD0sֹ}\g˴{%_٘x^=#wHg}9hɊsckv|l6>p{%c{-a[ܫs=#Wg):AT+4'h폹_>~{R`'hb^qK^ s-]3u7s0yȘ}K`eڽ:W}#Z+[Mw0W+=#cZ9 s^>M^` ̽kgD1},YsV' W>V<Q+*9V}=#ܫZl(Dusu&Wls*c+)[C^:sm`]>[+3"yt]>-YQa[㗷O_x|<`kv|l}ZJ'[s"} ̽:W3YQWAk+>+ʘbJʖb1g{E׳gD.+VV}R{%eK1yȘ}K`^K^9ýWwbAf(Z{yh$|qJ',g˴{EW)K)>{}#udY1Z}߫8Zu'hbWg):AT+4&5;1Mhsޫgtpj}0%|9Ɓ~dհD09/'^Z{vVŬuڊO>;t`ӹC^}ޫ{vVu8Ak+>osݽs*0+gS,1yȘ}Q3"TFrF7+jX>OK&Fېz1cu1WXi sǽg+:+sFoݷ3uҢBlisǽ>MsǽE>Ft;+ꪣ<2]-&cګ67YQ׆,}vd}G{E䋦{Uc^qB{'PBݟWFo~y{uȘ}K`  bz}O8{Ug{%_iψ:1a+VV}B{U\B{Uhf>6>"}WJR0IaJ٫O*eB{Uhﱘյs^"W}{J}+E"\Kfs^"W}z0yڃOsz^+y)mܧ^>{=tP1%HhVlo9k Z:0D:u#^tM1yȘ}K;9}Z+n)$q`5Lp0oR?Ì^:g:[aԏ;9:j Üխun0yk >os[>~w/>+>[ݫs!cq;{uw/>p;{U0y{8}:ÌPczuV.BD09G:sKQ'&Lb1p>[+34QwؘUXut1N8+Vب ҁO8{թ1+Uu"`׳ob$k bs*:U=oz=&F\ptP1%:yC=:0ש{_@ollZ}E^cz[gc&s|qScWګG}zMDp-V}`A\Ug ns*0>92{0Zu858aQ/ns8sԏ2fwtξ92Ñ[̅v' `vf{7)k=u:a/~1yȘ} }F$WL0y{Ad-;XQa{娟}#\]`Ü~y^0{F{66 }Eӽrԏ_}ZJ_Vfe-6h*r^ɘ7_8LJr{a ̽kgDp*j s0Y+y)[>^0yke}B{U]lsΕ0yȘ}Cs^>"}Eӽr}4s+GsW^u8"`^qWst{0Ig{eO8{0i+sm`][9jsΕ0yȘ}Cp0yȘ};q{d}ޫ;{aAf0wK9/oos+QGnVLb1pBWRdqЂX `EO+^KA MT}q{L4Qq䋦{>p958bv+*8}:&F2Uss^9*~ѩs Üsx{uk9}Z[>.ceڽ:Wwbs:>p;{U0y{8}:WWcu{euzqa }՟}qe\=\>է9h/яz9jGs \tyx aZW/Ё sK_0W]3oQ‡9t>^‡(}\io*}s K_0W\y{U‡6U kaas fzZQ?<NN=ecj20w88ͼ}:ssֹ}\g˴{u>%t}+sw`^qtP1%J'Xc[2%+`sȼŭun1wWV#'^iJ+J}jsQ &@_'KV^I=#0>M<ݫ0o(Eܧ05WRtψNLpu1Q?:[aWa' `s^^{Ŏq{FTl?jas{c1zs ?0I+}R{%eK1o9Fv;+յs^ yl(!iհD09/sxx˴{E0yȘ}K`eڽa{s0%A՜ D 1  x*M1w#赇K }`\n|7*M資U }6a\nAa!T廉sm}'XFU+TA=\*Mw[7tO }|7&* F*Mw a|MkRnAAog廅-4SnpwlŢ SnB=,*M w[7tO튨 FVӚ*-(B:,|7V +mQK廩mm)5\|7φ*mWDM\N/1/0Sn;#wۑ~OIn#ɭpzk^{}:[v%Uێ${Jr|I.WNTNguEnX-YݚZнn{TN_6YXpV`+i{+!7-%^n&*m{E zO/V ݑhYCt*m")Z ]n;譱&tvGm7zku鰪=}k7$"*-(B:m*-DkmPn;Fb*-(B:|(L튨C UnB=+M ˨wlŢBvX*m\nAAog廅-tz .&يE廭݄>{XTgVnwQGXz;Q&4w \*MO }6fRnpwl SnB-XUgwl¸݄>[1]n}QnK/yĎ]n;RF^rwH/]TNTO_{*-l?@L廅埾4TK@ME/n?}i_|7SdTNTj٣*ߍ@@:ƱtiB-oe\yx}]n꠷u'vnQ,tn\DFko݂"z$VK5hTEH[ |Mmn/$]\rﶄw /)_r!va;\[|7Ƭ*MAJB+[Uq?AT)v̢Vl@QSnBMXU8V16K_+MA }|WT)6|W0wځcW02nC`(Tg+wl̤zQp|7+m=&قU }|7&+MwSjUnqD }v`UnAAo:|7V*-Dk_D{Cw v/wj|7qB/*-(B:M!BUۮZaFW6TEHP&ε!zq|X݄>[Tgc&Fk7Vp|7+m=&قU }|7&+Qv;(Tg+wl̤z .&قq廭݄>[|7V&لq}6fԦVvqd廉sm}8 UnQ6+Mw z}E:j\np(Tg+nwaQnBMXUۺ{* Cn+qĹ6拾|(~ƕ&فqEH݂"t|_nAAo:|HG+ma!ĹvKEHĹv&T튨t|_AU8? #*6vK EH[廅h*mr[[ }6ͪAz .&يE廭݄>{XTgV&يwlBvX*mr:|頷vC,W[P4SnpwlŢ SnB=,*M w[7tO튨+c- Un u|iZw  *-(B:,|]uj'Xmwa\nBM8TmlRnB}|7L*ߍwl SnB-XUgwl¸݄>[|7V+: |7Ƭ*-ߦq }v`\nAQ| SnWA=1 .&يE廭݄>{XTgVnwaPnȕQ$Ĺv`PnAQ| Sn"(z=ݢmz$D4oӰ݄>Pn\;p|i "5騱HGvBANNER.ASM<  o !"#%$&'()*+,-/.012436758;:9  !OAH!w0T°| #a)5 |7_n>OAz>a|7@ q |7q>a|7nFSn++we _ _T1D!OA1,1|W0!#1 Sn? `=|\`* R>CRSn?>u#|v DDTPATCH.ASM9  !"#$%'&)(*+-,./01234o7685Pᱽo>7_J wq7?KC>C>|7_J !0wq7| wÇ<K:|\ ~)5|Ç<| T/u\uXJMA<,y `* a yRj* R:,H!OARj@0 ~)52Fa)5KaapXJMARjyT/q>T/y1n<_پ`no٬ϟ "6e{A[}c-Dg{Y݋YBd$ܞ[w}clR~1n1v$[wj;:mEߺT S˺ou9MuxPaks}#*[$`[wݪ괯cl([TrU鍧 K g|rTm%G=| T/5,wn>  `XJ `Sn0<, ~)a A|7_J 08rXJMA1 1|12԰ |7@ }y* 푕AUnT#+qPo"zwlŢZUr SnBXU[PtЛ+mWD/~n+ }~+wz|K"؞7vu3rU}#-3:WH \c#{7S7ќ6rͣ9dH0:V^1D>"}KXӾ`5$pxkx"A$#a$5"yYb$UkH_NFH-DRfeFRc_W?Uc1Rxr+Dn9"9$Fr8 [$Y/_з[|7?,Lw/:Zt̢DK^ hY}륣UcmrQnEۭUG*ޫn4Y7erQnXP__{ZNJGn H[Q^$"\j~I~FTe#%$FTefFKHd>:0DRH곬/!1,km-FKHd>GKHd>:#YϲNH~ ,gYH~ ,gY'gH~ ,gYc$H곬FH b{- J޽;:kb$KVH:Ƶ\^ zHYc^2N׭NZ=Ɔmӆ[ "y=uCUۮA[TEHi,!ߦa }6*Mk(Q!U["5騧z_( Un? 0 0Sn| | _LA:,ap+wb ` `* ap+|7W0|W0|Sn?@ c\e0|LAzyT/yXJ ySn?R>Gn  red for a particular situation, and yet the different parts of it can also be much more compatible. The following programs are provided: DBSETUP - This program is used to set up database files. It is an interactive program, which asks the operator a series of questions concerning the structure of the file. Field names and types are entered, and it is decided whether the file will be random or sequential, whether it will have an associated index file (.IND), and whether there will be links between each data record. DBENTRY - This program is also an interactive program, which is used to enter items into a file. It may be used for initial entries or to append additional entries on the end of a file. DBQUERY - This program is used to ask questions of the database, and may also be used to enter new items or make changes. Reports of different types may be generated. DBMAIN - This program is a transaction entry program. The main idea is to update several different files by en TARBELL DATABASE MANAGEMENT SYSTEM March 23, 1978 The main theme of this system is to provide a common set of programs that help the user create, modify, and access data files for a variety of needs. In this way, the system can be better tailotering each transaction only once. This program is more specialized than any of the others, as it is oriented toward one user's situation: in this case a small manufacturing company (mine). Each set of transactions is entered by first typing in 1EڭH^  !",gYH~ ,gY'gH~ ,gYc$H곬FH b{- J޽;:kb$KVH:Ƶ\^ zHYc^2N׭NZ=Ɔmӆ[ "y  create the other files if something goes wrong. The other files are generally divided into two parts: an index, which is sequential, and the main file, which is random. The index contains a list of keys which are used to access the records in the rauffer are used to update the appropriate files. The commands and the files they update are listed below: Commands: Transaction Files Updated R Received items: RLOG, PINV, PAYABLE, PURCHASE S Shipped items: SLOG, PINV, RECEIVBL, ORDERS Andom file more quickly than a search of the entire file would allow. These programs only represent a start. Tarbell Electronics would appreciate any additions that people would like to contribute. Close attention has been paid to making the system  Assembled or packaged items: PLOG, PINV O Order Received: OLOG, ORDERS P We Paid someone: PLOG, PAYABLE C Someone paid us: CLOG, RECEIVBL M An order was made by us to someone: MLOG, PURCHASE Q A query is to be made: all files D Setas extensible as possible, with the hope that it will continue to grow and change to meet different user's needs. It may also be noticed that certain features explained or referred to by the programs or documentation are not actually implemented. Th the Date: no files Filename Description RLOG Receiving log PINV Production Inventory PAYABLE Accounts Payable PURCHASE Open Purchase Orders SLOG Shipping log RECEIVBL Accounts Receiveable ORDERS Open Orders to us PLOG is is because the programs are in a continuous state of flux. It is felt, however, that the programs are already to a certain level of usefulness, which is why they are being made available. Notes about the file formats: Each file has some genera Payment Log (like checkbook) OLOG Order (Sales) log CLOG Cash, checks, or money orders received log MLOG Purchase orders by us log The log files are sequential; they are added to as time goes along by each command. They may be used to rel information at the beginning, called a Header Block. This block contains information about the structure of the rest of the file, and may be several records long. The first record is called Header 1. The format of this record follows: RECLEN numa one-letter command. The computer program then asks the operator a series of questions to obtain the data for that transaction. The responses normally go into a buffer until all transactions of that type are entered. Then the responses in the b   restrictions: 0=none,1=read,2=write,3=r/w. SPARE for future expansion. After header 1, there may be as many lines of headings as are desired. Then the field definition records start, with the following format: FIELD field name in ASCII. TYPE 0=numeric, 1=alphanumeric. WIDE bytes for this field, 0=variable. FEED 0 means same line, 1 means next line. MIN minimum value if numeric (0 is default). MAX maximum value if numeric (0 is default). SPARE for future expansion. The data then starts, with the following format: field1!field2!field3!...!fieldn! All of the above formats are generated automatically by the program in response to operator answers and input. The sequence is normally to first run the SETUP program to define  PRINT "DATA ENTRY PROGRAM OF 3-22-78" FIELDS = 20 ZERO = 0: ONE = 1: TWO = 2 SEQUENTIAL = ZERO RANDOM = 1 INDEXED = 3 LINKED = 7 ALPHA = ONE: NUMERIC = ZERO DIM FIELD$(FIELDS),TYPE(FIELDS),WIDE(FIELDS),DATA$(FIELDS) DIM FEED(FIELDS),MIN(the name and structure of the file; then run the ENTRY program to make the initial entries; then run the QUERY program to access the files. Don Tarbell FIELDS),MAX(FIELDS) INPUT "DO YOU WANT INSTRUCTIONS";ANS$ IF ANS$="NO" THEN 2100 PRINT "THE PURPOSE OF THIS PROGRAM IS TO ALLOW THE OPERATOR" PRINT "TO MAKE ENTRIES INTO A FILE PREVIOUSLY SET UP BY THE" PRINT "SET-UP PROGRAM. EXAMPLES OF SUCH FIber of bytes per record, zero if sequential. NO.OF.FIELDS number of fields per record (1 or more). NHEAD number of heading lines for the file. NIND number of indexes for the file (0 or 1). FILETYPE 0=sequential,1=random,3=indexed,7=linked CODE    SIGN (#) TO CANCEL LAST ENTRY." PRINT "ENTER A PERIOD (.) AFTER THE LAST ITEM." PRINT PRINT "ENTER AN EQUAL SIGN (=) INSTEAD OF A" PRINT "DATA ENTRY IF YOU WANT THE SAME DATA" PRINT "AS IN THE LAST RECORD." PRINT 2100 REM FILE SELECTION INNT "IS MADE UP OF FIELDS. THE RECORD MIGHT BE ONE" PRINT "INVENTORY ITEM, OR ONE TRANSACTION. THE FIELD " PRINT "MIGHT BE A QUANTITY, A PRICE, OR A PART NUMBER." PRINT "THERE ARE PRESENTLY THREE TYPES OF FILES ALLOWED:" PRINT " TYPE 0 SEQUENTIAPUT "WHAT IS THE NAME OF THE FILE";FILENAME$ 2900 REM READ A PREVIOUSLY STORED FILE TO THE END. FILE FILENAME$ RECNO = ONE REM INIT. RECORD NUMBER. REM READ HEADER (FIRST) RECORD. READ #ONE;RECLEN,NO.OF.FIELDS,NHEAD,NIND,FILETYPE,CODE,SPARE L" PRINT " TYPE 1 RANDOM" PRINT " TYPE 3 INDEXED-RANDOM" PRINT " TYPE 7 LINKED-INDEXED-RANDOM" PRINT "A SEQUENTIAL FILE IS NORMALLY USED FOR ITEMS THAT" PRINT "NEED NO CHANGES, SUCH AS A RECEIVING OR SHIPPING LOG." PRINT "A RANDOM FILE ISREM RECLEN IS RECORD LENGTH. REM NHEAD IS NUMBER OF HEADERS. REM NIND IS NUMBER OF INDEXES. REM FILETYPE IS EXPLAINED ABOVE. RECNO = RECNO + ONE REM BUMP RECORD NUMBER. IF FILETYPE <> SEQUENTIAL THEN \ CLOSE ONE :\ REM THEN CLOSE IT NOT AS COMPACT AS A SEQUENTIAL FILE," PRINT "BUT IT HAS THE ADVANTAGE OF BEING EASY TO MAKE CHANGES." PRINT "AN INDEXED FILE ALLOWS QUICK ACCESS TO ANY ENTRY BY" PRINT "SPECIFYING A KEY FIELD, SUCH AS A PART NUMBER IN" PRINT "AN INVENTORY OR A COM, FILE FILENAME$(RECLEN) REM AND REOPEN CORRECTLY. N = NO.OF.FIELDS IF NHEAD = ZERO THEN 2910 REM NO HEADINGS? REM READ HEADINGS. FOR I = ONE TO NHEAD IF FILETYPE = SEQUENTIAL THEN \ READ #ONE;HEADINGS$ \ REM READ THIS WAY. PANY NAME IN AN ORDER FILE." PRINT "A LINKED FILE MAKES IT POSSIBLE TO DELETE AND INSERT" PRINT "RECORDS, WITHOUT REWRITING THE WHOLE FILE." PRINT PRINT "AFTER EACH ENTRY:" PRINT "ENTER AN AMPERSANS (&) FOR ANOTHER ENTRY." PRINT "ENTER A NUMBER ELSE \ REM OTHERWISE, READ #ONE,RECNO;HEADINGS$ RECNO = RECNO + ONE NEXT I 2910 FOR I = ONE TO NO.OF.FIELDS REM READ FIELDS INTO AN ARRAY. IF FILETYPE = SEQUENTIAL THEN \ READ #ONE;FIELD$(I),TYPE(I),WIDE(I),FEED(I),MIN(I),MAX(I),SPARLES WOULD BE" PRINT "A LIST OF ALL THE INTEGRATED CIRCUITS ON HAND, OR" PRINT "A LIST OF ALL THE SALES MADE ON A PARTICULAR DATE, OR" PRINT "A LIST OF ALL THE ITEMS SHIPPED IN ONE WEEK." PRINT "THE FILE IS MADE UP OF RECORDS, AND EACH RECORD" PRI   IF DIF > ZERO THEN \ PRINT "ENTRY IS ";DIF;" TOO LARGE." :\ GOTO 2215 2217.5 RECORD$ = RECORD$ + ANS$ + "!" IF NIND<>0 AND INDEX.FIELD$=FIELD$(I) THEN \ INDEX.ENTRY$ = ANS$ NEXT I 2218 INPUT "& OR # OR .";ANS$ IF ANS$ = "#" THEN 22 READ #ONE,RECNO;DUMMY$ RECNO = RECNO + ONE GOTO 2920 2600 REM IF THERE'S AN INDEX, READ IT TO THE END. IF NIND = 0 THEN 2200 REM IF NO INDEXES, SKIP IT. INDEX.FILE$ = FILENAME$ + ".IND" FILE INDEX.FILE$ REM OPEN SEQUENTIAL INDEX10 IF ANS$ = "&" THEN 2219 IF ANS$ <> "." THEN 2218 2219 IF NIND<>0 THEN \ REM IF THERE'S AN INDEX, PRINT #TWO;INDEX.ENTRY$,RECNO REM WRITE OUT TO IT. IF FILETYPE = SEQUENTIAL THEN \ PRINT #ONE;RECORD$ IF FILETYPE = INDEXED THEN \  FILE. READ #TWO;INDEX.FIELD$ REM READ INDEX FILE HEADER. 2650 IF END #TWO THEN 2200 REM READ REST TILL END. READ #TWO;DUMMY$ GOTO 2650 2200 REM DATA ENTRY PRINT PRINT "START ENTERING DATA NOW." PRINT 2210 PRINT REM PUT A PRINT #ONE,RECNO;RECORD$ IF FILETYPE = LINKED THEN \ PRINT #ONE,RECNO;RECORD$,RECNO+1 IF ANS$ = "." THEN 2220 REM CHECK FOR LAST ENTRY. RECNO = RECNO + ONE REM INCREMENT RECORD NUMBER. GOTO 2210 2220 PRINT RECNO = RECNO - NO.OF.FI LINE BETWEEN EACH RECORD ENTRY. RECORD$ = "" FOR I = ONE TO N PRINT FIELD$(I); 2215 INPUT ANS$ IF ANS$ = "=" THEN ANS$ = DATA$(I) DATA$(I) = ANS$ IF WIDE(I) = ZERO THEN 2217 REM FREE FIELD? X = LEN(ANS$) - WIDE(I) IF X > ZERO THENELDS - NHEAD - ONE PRINT "THERE ARE NOW ";RECNO;"RECORDS IN ";FILENAME$;"." CLOSE ONE IF NIND <> 0 THEN CLOSE TWO REM CLOSE INDEX FILE. INPUT "DO YOU WANT TO ENTER DATA INTO ANOTHER FILE NOW";ANS$ IF ANS$ = "YES" THEN 2100 STOP END  \ PRINT "ENTRY ";X;" CHARACTERS TOO WIDE." :\ GOTO 2215 2217 IF TYPE(I) = ALPHA THEN 2217.5 DIF = MIN(I) - VAL(ANS$) IF DIF > ZERO THEN \ PRINT "ENTRY IS ";DIF;" TOO SMALL." :\ GOTO 2215 DIF = VAL(ANS$) - MAX(I) E \ ELSE \ READ #ONE,RECNO;FIELD$(I),TYPE(I),WIDE(I),FEED(I),MIN(I),MAX(I), \ SPARE RECNO = RECNO + ONE NEXT I 2920 IF END #ONE THEN 2600 REM READ REST OF FILE. IF FILETYPE = SEQUENTIAL THEN \ READ #ONE;DUMMY$ \ ELSE \   INT "BYE - EXITS BACK TO CP/M OPERATING SYSTEM." PRINT PRINT "CHANGE - CHANGES THE ITEMS REQUESTED FROM THE KEYBOARD." PRINT GOTO 3000 PRINT "ADD - ADD NEW ITEMS TO A FILE." PRINT " EXAMPLE: ADD LAB SUPPLIES" PRINT PRINT "RUN - RUN A PREVIOUSLY SET UP SEQUENCE" PRINT " EXAMPLE: RUN PACKAGE" PRINT 3000 PRINT PRINT INPUT "COMMAND";CMD$ CMD$ = LEFT$(CMD$,3) IF CMD$ = "LIS" THEN 3100 IF CMD$ = "SUM" THEN 3200 IF CMD$ = "CHA" THEN 3300 IF CMD$ = "ADD" THEN 3400 IF CMD$  PRINT "QUERY PROGRAM OF 3-23-78" FIELDS = 20 REM POSSIBLE NUMBER OF FIELDS. DIM DATA$(FIELDS), FIELD$(FIELDS), TYPE(FIELDS), FIELD.WIDTH(FIELDS) DIM SKIP(FIELDS),MIN(FIELDS),MAX(FIELDS) BUFSIZ = 200 REM MAIN STRING BUFFER SIZE. DIM BUFFER$(= "RUN" THEN 3500 IF CMD$ = "BYE" THEN STOP GOTO 3001 3100 REM LIST THE ITEMS REQUESTED GOSUB 4000 REM FIND FILE NAME(S). PHEAD = ONE GOSUB 4500 REM READ AND PRINT HEADINGS. 3110 GOSUB 4100 REM READ FIELD SPECIFICATIONS. PRINT 3120 GOBUFSIZ), REC(BUFSIZ) REM CONSTANTS ZERO =0: ONE=1: TWO=2 DATA$(ZERO) = "1" 3001 INPUT "DO YOU NEED INSTRUCTIONS";ANS$ IF ANS$="NO" THEN 3000 PRINT PRINT "THE PURPOSE OF THIS PROGRAM IS TO PROVIDE A WAY TO" PRINT "EXAMINE AND CHANGE THE DATASUB 4300 REM READ A RECORD INTO DATA ARRAY. IF ENDFILE = ONE THEN 3130 REM QUIT IF END OF FILE. GOSUB 4400 REM PRINT DATA ARRAY IN FORMAT. IF FIELD.WIDTH(ONE) = ZERO THEN PRINT RECNO = RECNO + ONE GOTO 3120 REM READ ANOTHER LINE. 3130 CLOSBASE." PRINT "THE COMMANDS PROVIDED FOR THIS ARE:" PRINT PRINT "LIST - LISTS THE ITEMS REQUESTED. ALL ITEMS ARE" PRINT " LISTED THAT ARE INCLUDED IN THE SET NAMED." PRINT PRINT "SUM - SUMS THE FIELDS OF THE ITEMS REQUESTED." PRINT PRE ONE GOTO 3000 3200 REM SUM THE FIELDS OF THE ITEMS REQUESTED TOTAL = ZERO GOSUB 4000 REM FIND FILE NAME. PHEAD = ZERO GOSUB 4500 REM READ HEADINGS, NO PRINT. GOSUB 4100 REM READ FIELD SPECIFICATIONS. PRINT "THE FIELDS ARE:" FOR I   (I) REM FOUND RECORD NUMBER. GOSUB 4300 REM READ DATA RECORD AND SEPERATE. PRINT HEADINGS$ PRINT GOSUB 4400 REM PRINT DATA ARRAY IN FORMAT. 3330 INPUT "CHANGE WHICH FIELD ";ANS$ IF ANS$ = INDFLD$ THEN \ PRINT "YOU CAN'T CHANGE INDEX AME OF FIELD OR NONE)";ANS$ IF ANS$ = "NONE" THEN MFIELD = 0: GOTO 3230 FOR I = ONE TO NO.OF.FIELDS IF ANS$ = FIELD$(I) THEN MFIELD = I: GOTO 3230 NEXT I PRINT "NO SUCH FIELD" GOTO 3220 3230 GOSUB 4300 REM READ DATA FROM FILE. IF ENDFIFIELD.": GOTO 3330 FOR I = ONE TO NO.OF.FIELDS REM LOOK FOR FIELD TO CHANGE. IF ANS$ = FIELD$(I) THEN 3340 NEXT I PRINT ANS$;" WAS NOT A VALID FIELD." GOTO 3330 3340 PRINT "NEW ";FIELD$(I); INPUT DATA$(I) GOSUB 4200 REM PRINT DATA OUTLE = ONE THEN 3240 REM QUIT IF END OF FILE. AF = VAL(DATA$(AFIELD)) MF = VAL(DATA$(MFIELD)) TOTAL = TOTAL + MF*AF RECNO = RECNO + ONE REM INCREMENT RECORD NUMBER. GOTO 3230 3240 CLOSE ONE PRINT "THE SUM IS ";TOTAL GOTO 3000 3300 REM CHA TO DISK. INPUT "DO YOU WANT TO CHANGE MORE ITEMS";ANS$ IF ANS$ = "YES" THEN 3310 3350 CLOSE ONE REM CLOSE DATA FILE. GOTO 3000 3400 REM ADD ITEMS TO THE REQUESTED FILE 3500 REM RUN THE SEQUENCE REQUESTED PRINT "COMMAND NOT ACTIVATED" GOTONGE THE ITEMS REQUESTED GOSUB 4000 REM FIND FILE. PHEAD = ZERO GOSUB 4500 REM READ HEADINGS. GOSUB 4100 REM READ FIELD SPECS. GOSUB 4600 REM READ INDEX. IF NIND = ZERO THEN 3350 REM QUIT IF NO INDEX. 3310 PRINT "WHAT ";INDFLD$;" D 3000 4000 REM FIND FILE NAME(S) REQUESTED BY COMMAND COMMAND$. INPUT "NAME OF FILE";FILE.NAME$ FILE FILE.NAME$ REM OPEN THE FILE. RECNO = ONE REM READ RECORD #1. READ #ONE;RECLEN,NO.OF.FIELDS,NHEAD,NIND,FILETYPE,CODE,SPARE RECNO = RECNO + O YOU WANT"; INPUT ANS$ FOR I = ONE TO INDSIZ IF ANS$ = BUFFER$(I) THEN 3320 NEXT I PRINT ANS$;" NOT FOUND." PRINT "INDEX TABLE:" FOR I = ONE TO INDSIZ REM PRINT INDEX TABLE. PRINT BUFFER$(I) NEXT I GOTO 3310 3320 RECNO = RECONE REM INCREMENT RECORD NUMBER. IF RECLEN <> ZERO THEN \ CLOSE ONE :\ FILE FILE.NAME$(RECLEN) REM MAKE RANDOM INSTEAD OF SEQ. PRINT RETURN 4100 REM READ THE FIELD SPECIFICATIONS. FOR I = ONE TO NO.OF.FIELDS IF RECLEN = ZERO THEN \ = ONE TO NO.OF.FIELDS PRINT FIELD$(I) NEXT I 3210 INPUT "SUM ON WHAT FIELD";ANS$ FOR I = ONE TO NO.OF.FIELDS IF ANS$ = FIELD$(I) THEN AFIELD = I: GOTO 3220 NEXT I PRINT "NO SUCH FIELD" GOTO 3210 3220 INPUT "MULTIPLY BY WHAT FIELD (N   PRINT RETURN 4500 REM READ HEADINGS, ALSO PRINT IF PHEAD = 1 IF NHEAD = ZERO THEN 4510 FOR I = ONE TO NHEAD IF RECLEN = ZERO THEN READ #1;HEADINGS$ IF RECLEN <> ZERO THEN READ #ONE,RECNO;HEADINGS$ IF PHEAD = 1 THEN PRINT HEADINGS$ MBLE DATA INTO A RECORD AND WRITE TO DISK. RECORD$ = "" FOR I = ONE TO NO.OF.FIELDS RECORD$ = RECORD$ + DATA$(I) + "!" NEXT I PRINT #ONE,RECNO;RECORD$ REM WRITE TO DISK. RETURN 4300 REM READ A RECORD OF DATA AND SEPERATE INTO FIELDS. I RECNO = RECNO + ONE NEXT I 4510 RETURN 4600 REM READ INDEX INTO MEMORY IF THERE IS ONE. IF NIND = ZERO THEN PRINT "THERE'S NO INDEX.": RETURN INDEX.FILE$ = FILE.NAME$ + ".IND" FILE INDEX.FILE$ REM OPEN INDEX FILE. READ #TWO;INDFLD$ REF RECLEN = ZERO THEN \ READ #ONE;RECORD$ IF RECLEN <> ZERO THEN \ READ #ONE,RECNO;RECORD$ IF END #ONE THEN 4340 START = ONE FOR I = ONE TO NO.OF.FIELDS LENGTH = ZERO FOR P = START TO LEN(RECORD$) IF MID$(RECORD$,P,ONE) = "!" THM READ INDEX FIELD NAME. FOR I = ONE TO BUFSIZ READ #TWO;BUFFER$(I),REC(I) IF END #TWO THEN 4610 NEXT I 4610 INDSIZ = I REM INDEX SIZE. CLOSE TWO RETURN END EN 4320 LENGTH = LENGTH + ONE NEXT P 4320 DATA$(I) = MID$(RECORD$,START,LENGTH) START = START + LENGTH + ONE NEXT I ENDFILE = ZERO 4330 RETURN 4340 ENDFILE = ONE RETURN 4400 REM PRINT DATA IN CORRECT FORMAT. POSITION = ONE REM STARTING TAB POSITION. FOR I = ONE TO NO.OF.FIELDS IF FIELD.WIDTH(I) <> ZERO THEN PRINT TAB(POSITION); IF SKIP(I) = ONE THEN PRINT IF DATA$(I) <> "" THEN PRINT DATA$(I);" "; POSITION = POSITION + FIELD.WIDTH(I) + ONE NEXT I READ #ONE;FIELD$(I),TYPE(I),FIELD.WIDTH(I),SKIP(I), \ MIN(I),MAX(I),SPARE IF RECLEN <> ZERO THEN \ READ #ONE,RECNO;FIELD$(I),TYPE(I),FIELD.WIDTH(I),SKIP(I), \ MIN(I),MAX(I),SPARE RECNO = RECNO + ONE NEXT I RETURN 4200 REM ASSE  TRUCTIONS";ANS$ IF ANS$="NO" THEN 1100 PRINT "THE PURPOSE OF THIS PROGRAM IS TO SET UP A FILE." PRINT "THIS INVOLVES DEFINING ALL HEADINGS AND FIELDS." PRINT "EXAMPLES OF FILES:" PRINT "A LIST OF ALL THE INTEGRATED CIRCUITS ON HAND, OR" PRINT "A LIST OF ALL THE SALES MADE ON A PARTICULAR DATE, OR" PRINT "A LIST OF ALL THE ITEMS SHIPPED IN ONE WEEK." PRINT "THE FILE IS MADE UP OF RECORDS, AND EACH RECORD" PRINT "IS MADE UP OF FIELDS. THE RECORD MIGHT BE ONE" PRINT "INVENTORY ITEM, OR ONE TRANSACTION. THE FIELD " PRINT "MIGHT BE A QUANTITY, A PRICE, OR A PART NUMBER." PRINT "WHEN THE FILE IS FIRST STARTED, IT IS NECESSARY TO" PRINT "DEFINE EACH FIELD IN THE RECORDS, AS TO NUMERICAL" PRINT "OR NON-NUMERICAL, WHAT THE NAME OF THE FIELD IS," PRINT "AND WHAT THE COLUMN HEADING SHOULD BE FOR THE FIELD." PRINT "THERE ARE PRESENTLY FOUR TYPES OF FILES ALLOWED:" PRINT " TYPE 0 SEQUENTIAL" PRINT " TYPE 1 RANDOM" PRINT " TYPE 3 INDEXED-RANDOM" PRINT " TYPE 7 LINKED-INDEXE PRINT "FILE SET-UP PROGRAM OF 3-23-78" FIELDS = 20 ZERO = 0: ONE = 1: TWO = 2 SPARE = ZERO NUMERIC = ZERO: ALPHA = ONE DIM FIELD$(FIELDS),TYPE(FIELDS),WIDE(FIELDS),DATA$(FIELDS) DIM FEED(FIELDS),MIN(FIELDS),MAX(FIELDS) INPUT "DO YOU WANT INSD-RANDOM" PRINT "A SEQUENTIAL FILE IS NORMALLY USED FOR ITEMS THAT" PRINT "NEED NO CHANGES, SUCH AS A RECEIVING OR SHIPPING LOG." PRINT "A RANDOM FILE IS NOT AS COMPACT AS A SEQUENTIAL FILE," PRINT "BUT IT HAS THE ADVANTAGE OF BEING EASY TO MAKE CH  " THEN 1135 REM MUST BE FREE FORMAT. INPUT "HOW MANY CHARACTERS WIDE DO YOU WANT THIS FIELD";WIDE(N) TOTAL.WIDTH = TOTAL.WIDTH + WIDE(N) X = TOTAL.WIDTH - PAPER.WIDTH - N - ONE IF X <= ZERO THEN 1120 PRINT "THE PAPER WIDTH HAS BEEN EXCEEDED BY "." 1100 FILETYPE = ZERO REM START WITH THIS. CODE = ZERO REM ACCESS CODE. NHEAD = ZERO REM NUMBER OF HEADINGS. NIND = ZERO REM NUMBER OF INDEXES. RECNO = ONE REM RECORD NUMBER. INPUT "WHAT DO YOU WANT TO NAME THE FILE (UP TO 8 CHARS)";,X," CHARACTERS." INPUT "WANT TO USE A DIFFERENT WIDTH FOR THIS FIELD";ANS$ IF ANS$="YES" THEN TOTAL.WIDTH=TOTAL.WIDTH-WIDE(N):GOTO 1115 PRINT "OK THEN, WE'LL START ALL OVER." GOTO 1105 1120 PRINT "WHAT IS THE HEADING FOR THE ";FIELD$(N);" FIELD";FILENAME$ INPUT "DO YOU WANT RESTRICTIONS ON WHO CAN READ THIS FILE";ANS$ IF ANS$ = "YES" THEN CODE=CODE+1 INPUT "DO YOU WANT RESTRICTIONS ON WHO CAN CHANGE THIS FILE";ANS$ IF ANS$ = "YES" THEN CODE=CODE+2 1105 INPUT "DO YOU WANT COLUMNS, WITH HEA INPUT HEADING$ IF LEN(HEADING$)<=WIDE(N) THEN 1130 PRINT "THAT HEADING IS TOO WIDE":GOTO 1120 1130 SPACES = WIDE(N) - LEN(HEADING$) + ONE FOR I = ONE TO SPACES HEADING$=HEADING$+" " NEXT I HEADINGS$=HEADINGS$+HEADING$ PRINT "SO FAR YOUR HDINGS DEFINED";COL$ IF COL$ = "YES" THEN \ NHEAD = ONE :\ INPUT "HOW MANY CHARS WIDE IS YOUR PRINTER PAPER";PAPER.WIDTH N=ONE:TOTAL.WIDTH = ZERO:HEADINGS$="" 1110 REM THIS IS WHERE THE FIELD DEFINING LOOP STARTS. MIN(N) = ZERO REM DEFEADINGS LOOK LIKE THIS:" PRINT HEADINGS$ 1135 IF COL$ = "YES" THEN 1137 REM MUST BE IN COLUMNS. WIDE(N) = ZERO FEED(N) = ZERO IF N = ONE THEN 1137 REM FIRST FIELD? PRINT "WILL ";FIELD$(N);" BE ON SAME LINE AS ";FIELD$(N-ONE); INPUT ANS$ IAULT MINIMUM. MAX(N) = ZERO REM DEFAULT MAXIMUM. PRINT "WHAT IS THE NAME OF FIELD NUMBER ";N; INPUT FIELD$(N) PRINT "WILL ";FIELD$(N);" ALWAYS BE A NUMBER"; INPUT ANS$ IF ANS$="YES" THEN TYPE(N) = ZERO ELSE TYPE(N) = ONE 1115 IF COL$ <> "YESF ANS$ = "NO" THEN FEED(N) = ONE 1137 IF TYPE(N) = ALPHA THEN 1138 REM SKIP IF ALPHANUMERIC. INPUT "MINIMUM VALUE";MIN(N) INPUT "MAXIMUM VALUE";MAX(N) 1138 INPUT "WANT TO DEFINE ANOTHER FIELD";ANS$ IF ANS$ <> "NO" THEN N = N + ONE:GOTO 111ANGES." PRINT "AN INDEXED FILE ALLOWS QUICK ACCESS TO ANY ENTRY BY" PRINT "SPECIFYING A KEY FIELD, SUCH AS A PART NUMBER IN AN INVENTORY." PRINT "A LINKED FILE ALLOWS DELETIONS AND INSERTIONS " PRINT "WITHOUT HAVING TO READ AND WRITE THE WHOLE FILE  E :\ RECNO = RECNO + ONE IF LINKED$ = "YES" THEN \ USED1=0: USEDL=0: FREE1=0: FREEL=0 :\ PRINT #ONE,RECNO;USED1,USEDL,FREE1,FREEL,SPARE :\ RECNO = RECNO + ONE IF KIND$ = "SEQ" THEN \ PRINT #ONE;ZERO,N,NHEAD,NIND,FILETYPE,CPE + ONE :\ FILE FILENAME$(RECLEN) REM OPEN RANDOM FILE. IF KIND$ = "SEQ" THEN \ FILE FILENAME$ :\ REM OPEN SEQ. FILE. GOTO 1144 INPUT "DO YOU WANT AN INDEX FILE MADE";INDEX$ IF INDEX$ = "NO" THEN 1144 INDEXFILE$ = FODE,SPARE :\ RECNO = RECNO + ONE FOR I = ONE TO MHEAD 1800 PRINT "HEADING LINE ";I; INPUT ANS$ X = LEN(ANS$) - RECLEN - 4 IF X > 0 THEN \ PRINT "HEADING ";X;"CHARS TOO WIDE, TRY AGAIN." :\ GOTO 1800 IF KIND$ = "RAILENAME$ + ".IND" FILE INDEXFILE$ REM OPEN INDEX FILE. NIND = ONE REM NUMBER OF INDEXES. FILETYPE = FILETYPE + TWO 1141 PRINT "HERE ARE THE FIELD NAMES:" FOR I = ONE TO N PRINT FIELD$(I) NEXT I INPUT "WHICH ONE MAKES THE INN" THEN \ PRINT #ONE,RECNO;ANS$ IF KIND$ = "SEQ" THEN \ PRINT #ONE;ANS$ RECNO = RECNO + ONE NEXT I IF COL$ <> "YES" THEN 1850 IF KIND$ = "RAN" THEN \ PRINT #ONE,RECNO;HEADINGS$ IF KIND$ = "SEQ" THEN \ PRINT #ONE;HEADINGS$ DEX";INDEX.FIELD$ FOR INDFLD = ONE TO N IF FIELD$(INDFLD) = INDEX.FIELD$ THEN 1142 NEXT INDFLD PRINT "TRY AGAIN" GOTO 1141 1142 PRINT #TWO;INDEX.FIELD$ REM HEADER FOR INDEX. INPUT "DO YOU WANT A LINKED FILE";LINKED$ IF LINKED$  RECNO = RECNO + ONE 1850 FOR I = ONE TO N IF KIND$ = "RAN" THEN \ PRINT #ONE,RECNO;FIELD$(I),TYPE(I),WIDE(I),FEED(I), \ MIN(I),MAX(I),SPARE IF KIND$ = "SEQ" THEN \ PRINT #ONE;FIELD$(I),TYPE(I),WIDE(I),FEED(I), \ MIN(I),MAX= "YES" THEN FILETYPE = FILETYPE + 4 1144 PRINT "HOW MANY LINES OF HEADING DO YOU WANT IN ADDITION" INPUT "TO POSSIBLE COLUMN HEADINGS";MHEAD NHEAD = NHEAD + MHEAD IF KIND$ = "RAN" THEN \ PRINT #ONE,RECNO;RECLEN,N,NHEAD,NIND,FILETYPE,CODE,SPAR(I),SPARE RECNO = RECNO + ONE NEXT I 1900 CLOSE ONE IF INDEX$ = "YES" THEN \ CLOSE TWO INPUT "WANT TO SET UP ANOTHER FILE";ANS$ IF ANS$ = "YES" THEN 1100 STOP END 0 1140 PRINT "WILL IT EVER BE NECESSARY TO MAKE CHANGES IN THIS" INPUT "FILE, BESIDES ADDING RECORDS TO THE END";ANS$ IF ANS$ = "NO" THEN KIND$ = "SEQ" ELSE KIND$ = "RAN" RECLEN = TOTAL.WIDTH + 4 + N IF KIND$ = "RAN" THEN \ FILETYPE = FILETY  58,4,2,1,3,0,0 "INVENTORY" "PART NO. QTY DESCRIPTION COST " "PART NUMBER",1,15,0,0,0,0 "QUANTITY",0,5,0,0,10000,0 "DESCRIPTION",1,20,0,0,0,0 "COST",0,10,0,0,200,0 "7654!67!UJHG!76!" "T6TTG!300!66!.8!"  ".!657!HGJHGHGJHG!77!"  "7654!67!UJHG!76!" "T6TTG!300!66!.8!"   "PART NUMBER" "7654",8 "T6TTG",9 ".",10 DBQUERY BAS4"#$%DBSETUP BAS4&'()INV *INV $$$  :Q2(())LS1(()):S2(()) M WARP ENGINES,SHORT RANGE SENSORS,LONG RANGE SENSORS8M PHASERS, PHOTON TORPEDOES,SHIELD CONTROLtM DAMAGE CONTROL, COMPUTER,DAMAGE REPAIR,COMMUNICATIONSM A : D$(A): AMA$()" . ":A$()" E ":A$()" * ":A$()" K ":A$()" B "NF1(\:F2 #z:F333s:F4p}:K9:B9K95N I:J:R1():R2():R3(())pN K3(R1F1F2R9)(R1F3F2R9)(R1F4F2R9):K9K9K3N B3(R2F3):B9B9B3:G(I,J)dK3I:EXPANDED APRIL 1977 BY W.A.BURTONI:PIRATED JAN. 1978 BY ZOSOI G(,),S(,),K(,) J()$J )"--STARTREK--":*JhJ "WHAT IS YOUR SECURITY CLEARANCE NUMBER (1 TO 1000)";T9rJE8T9J T9 T9 AR$;"INVALID! B3R3:J,IN  (B9K9)N "OBJECTIVE:DESTROY"K9"KLINGONS USING"B9"STARBASE";OUK9:YB9OB9ϑ" ";:!O"S ";YOT9K9()K9R9 R9:PRT9K9:"IN"T9"STARDAYS."cO OS3:B3S3:K3B3:A:B:S(A,B):B,AO! REENTER!!": J A T9JR9():R9()JK:():" ENTER RANK (1=LOW,12=HIGH)";R9KRRR9=KX4R9:R9R9nw:W1W1nwJK ()mK "COMMAND ORDER : STAND BY !"K "YOU ARE PRESENTLY BEING ASSIGNED TOA:B:K(A,B):B,A:S(S1,S2)OX #zG(Q1,Q2):K3(X):Y(XK3) :B3(Y)PS3G(Q1,Q2)dK3 B3:P K3ςA:B:K(A,B):B,A:aPAR$;"CONDITION RED !!!!!":AK3PR1(()):R2(()):S(R1,R2) A MISSION..."K " WITH A FAILURE FACTOR OF"; (RR)K" GOOD-BYE, SIR..." LCX{:AR$" ---> "-LXA(X42):AC((X4L})) COMMAND";A}S0A Aϑ"WARNING - PROPER COMMANDS ONLY !! ": .S1A5S2D(A)WW:D(R1):"DAMAGE CONTROL REPORT: "D$(R1)" REPAIRED.": XXW1W1:A1Q2S2:B1HQ1S1:W1W1W1 .XYEEW1:TTW1:TT9OXZA2(A1W1(C1CX))pX[B2(B1W1(C1CX))X\(A2A2?B2B2?)_X]5S3AR$;"CAPTAIN, WE DON'T HAVE ";D$(A);" ANYMORE."S4 DT  : .T5A9,*,z,,,,,,,m6T6:A:A;" = ";D$(A):A?T7A VT8A;"= ";D$(A):.~T9"COURSE";C1: C1 C13 <T:"WARP FACTOR";W1T;AR$;"CAPTAIN, HEED STARFLEET REGULATIONS! ( STAY IN GALAXY ) !!X^TTW1:.Y_ A1(X)(A1X(C1CX))6Y` B1(X)(B1X(C1CX))FYaX(W1)|Yb(Q1(B1(X))Q2(A1(X)))XW1:sYcS3B1(X)(B1(X)SL:KP: =T<AR$"REJECTED ! COURSE MUST BE IN RANGE OF O TO 359.99 DGRS."T=(W1).U>D()W1ACALU?AR$;"WARP ENGINES ARE DAMAGED, MAXIMUM SPEED = ";ACUU@9tUATECTEC:C$"":K3ύUBEW1IUCSUD"):S4A1(X)(A1(X))YdS(S3,S4)sYeS(S1,S2):S1B1(X)(B1(X))&ZfS2A1(X)(A1(X 1)):S(S1,S2)]ZgAR$;"NAVIGATIONAL ERROR :ENGINES SHUT DOWN AT (";Zh((S1),,);","((S2),,);")"ZiTT(W1)CAPTAIN, YOU ONLY HAVE"E"UNITS OF ENERGY. "VE"REFUEL FROM YOUR SHIELD RESERVES, WHICH HAVE"S"UNITS?"VFAVGD(A)!VH.:VII :D(I)MVVJD(I)D(I):D(I)MfVKD()MVL"DAMAGE CONTROL REPORT: "D$(I)" REPAIRED."Zj" YOU LOST "T" UNITS STARTIME RESTARTING ENGINES."ZkZl S(S3,S4) .[m"SHIELDS LOWERED FOR REFUELING"2[nS:P :C$"D":E XAd<[o J[pR1  a[qD(R1)σR1:.[rD(R1)D(R1)( ()R9):R1:.[s X:S(S1,S2(G(Q1,Q2))Q#Q$"QUADRANT (";((Q1),,);",";((Q2),,);")" R%"SECTOR (";((S1),,);",";((S2),,);")"/R&KP|@R' DT xR(SK3ϑAR$;"SHIELD ENERGY TOO LOW":SL:A:2R)A: 2R*R+D$():  `A1Q2S2:B1HQ1S1:C1Z(C1Z)` A1(W1)(A1W1(C1CX))a B1(W1)(B1W1(C1CX))-aW1 fffHaW1S3S1:S4S2:za(Q1(B1(W1))Q2(A1(W1))).aS3B1(W1)(B1(W1))\|ABABϑ" ***";:B:" "::A:.\}" "(G(A,B))( ));]~((G(A,B)),,(G(A,B))( ));D]G(A,B)(G(A,B)):B:" "::A:.J]Y]K3j]D()]AR$;" COMPUTER FAILURE HAMPERS ACCURACY"):S4A1(W1)(A1(W1))aA1(W1)A2B1(W1)B2aA2A1(W1):B2B1(W1)-b"(";((S3),,);",";((S4),,);")";A$(S(S3,S4))Rb S(S3,S4),,,,b()(L}X4) ϑ"SHIELDS DEFLECT TORPEDO":.b"KLINGON ]"PHASERS LOCKED ON TARGET. ENERGY AVAILABLE="E]"NUMBER OF UNITS TO FIRE:";] X^ EXϑ"NOT ENOUGH POWER":.3^TTL|:TT9=^EEXR^ C$"D" c^D()q^XX()|^I^K(I,)^H(XDESTROYED":S(S3,S4):G(Q1,Q2)G(Q1,Q2)dbK3K3:K9K9:K9bAcK(A,)S3K(A,)S4K(A,):K(A,):K(A,)&cA/c.jcAR$;"STARBASE DESTROYED":B3:B9B9:S(S3,S4):cAR$;"YOU CAN'T DESTROY A STAR":.cD())(())()^K(I,)K(I,)H_H"UNIT HIT ON VESSEL AT (";((K(I,)),,);",";/_((K(I,)),,);"), LEAVING"K(I,)"A_K(I,)_"KLINGON AT (";((K(I,)),,);",";((K(I,)),,);_") DESTROYED":K3KG(Q1,Q2)G(Q1,Q2) :.c W1c.cW1cS3(S1W1(C1CX))dS4(S2W1(C1CX))"dS3S4S3S4.+d1dnd"ENERGY AVAILABLE="ES" NUMBER OF UNITS TO SHIELDS";vd XdX.dESXd3:K9K9:K9_G(Q1,Q2)G(Q1,Q2)d:S(K(I,),K(I,)):K(I,):K(I,)_K(I,)` I `.``PE`AR$;"ALL PHOTON TORPEDOES EXPENDED"N`.b`"DIRECTION";C1z`TTL|:TT9`PP: C$"D" EESXdSXdSL)d.dd"DEVICE STATE OF REPAIR"eR1 :D$(R1);) D(R1):R1&e DT  : .ee"SHORT RANGE SENSORS REPORT NO KLINGONS IN THIS QUADRANT"}e DT  : .e C$"D" K3 "S):S1B2(B2):S2A2(A2)[tQ3(B2):Q4(A2)\u(Q1Q3Q2Q4)Q1Q3:Q2Q4:/\vS(S1,S2):AS1S1:BS2S2H\wABAByZ\xS(A,B)mh\yB,A:.n\z\{ A(Q1) (Q1): B(Q2) (Q2  "j" 7 = MISSION PROGRESS REPORT"j" 8 = EXIT COMPUTER"j k:"--TEMPORARY MALFUNCTION--": .k XM ]k AR$;"SAFETY CHECK -- DO YOU WISH TO ABORT MISSION": AN$k (AN$,)"Y"  : kk"YOU HAVE NOTfR1(()):R2(())f(S(R1,R2)) gS(R1,R2):S(K(I,),K(I,)):K(I,)R1:K(I,)R2gIg?g AR$;" ENTERPRISE DEAD IN SPACE"EgUgCY::dgK3mgvg|gg:::::AR$;g"I BEEN AUTHORIZED FOR NEW MISSION !!":k k "QUADRANT CODE MEMORY MAP"l A:B:G(A,B)(G(A,B))ϑ" ???";: ;l " "(G(A,B))( ));fl ((G(A,B)),,(G(A,B))( ));{l B:" ":A: l" STATUS REPORT"lT IS STARDATE"T:ggg:::::AR$;g"ENTERPRISE DISABLED !!"::gCY*h"THERE ARE"K9"KLINGONS REMAINING.":CYKFh"YOU HAVE FAILED !!":XhL(())vhL ?,B,D,F,Ih:"DO YOU WANT TO TRY AGAIN""NUMBER OF KLINGONS LEFT ="K9l"NUMBER OF STARDATES LEFT ="T9Tm"NUMBER OF STARBASES LEFT ="B9 mA:2mK30mD()A:1Wm"COORD","LOWDIR","HIGHDIR","DIST"lmA/:"-";:Arm}mIm(K(I,))&mW;X$h (X$,)"Y"  : h"THE FEDERATION IS SAVED !!" i"YOU ARE HEREBY PROMOTED TO ADMIRAL!!!!":iiDT=i"COMPUTER ON--COMMAND";Ami A AR$;" NO SUCH COMMAND !!": iA ,,,,#,;,=,,1((S1K(I,))(S2K(I,)))m W1 ϑ"--->MALFUNCTION !":.m &nC1I((K(I,)S2)W1(((K(I,)S2)W1)))4n OnC1C1(S1K(I,))CXgn C2(I)C1( ())n!C3(I)C1( ())n" C3(I) C3(I)C3.i"FUNCTIONS AVAILABLE FROM COMPUTER"i" 0 = GALACTIC MEMORY MAP" j" 1 = GENERAL STATUS REPORT")j" 2 = PHOTON TRAJECTORY"Cj" 3 = NEW MISSION"bj" 4 = PRESENT POSITION"~j" 5 = SELF-DESTRUCT"j" 6 = WARP-COMPASS(I)hn# C2(I) C2(I)C2(I)hn$"(";((K(I,)),,);",";((K(I,)),,); o%")",C2(I),C3(I),W1o&I*o' DT  : .0o(Fo)MR(T9T)K9:DT]o*XM((MRPR)PR)do+KAϑTKT"STARDATES LEFT TO SAVE STARBASE.":4o,TARBASE PROTECTS ENTERPRISE" : e.eeIeK(I,)fHK(I,)D()(())()HfSSH:H"UNIT HIT FROM ("((K(I,)),,);",";nf((K(I,)),,);"), LEAVING"S{fSfPf()R9   "18O . . . . . . .OOO WARP-COMPASS"t[" . . ."u\" . . ."&u]" 225 . 315">u^" 27O"Du_Ju``uaXX(() )fubwuc:X4 lud"COMMAND CENTRAL ADVISES THDER ATTACK!!"p3"YOU HAVE"TKT"STARDATES TO SAVE IT!":p4TTK9q5"TOO LATE!":KA:G(K1,K2)G(K1,K2) :B9B9)q6(Q1K1Q2K2)ώNq7A:B:S(A,B)S(A,B)Yq8B,A:q9Q1K1Q2K2ϑ"YOU ARRIVED IN TIME! STARBASE SAVED!"q:KAT YOUR RANKING-";X4;"-IS IN THE EXPERT"ve"CATEGORY. BE ADVISED THAT IF YOU ARE NOT PROPERLY QUALIFIED"4vf"YOUR CHANCES OF AVOIDING FAILURE ARE NIL.":vgvh"DO YOU WISH REASSIGNMENT TO A LESS HAZARDOUS MISSION (Y OR N)"viAN$vj(AN$,)A:.q; SD  : q<.q= Uq> r?"YOU HAVE SCREWED UP ONCE TOO OFTEN !",r@"OFF TO THE VULCAN TORTURE CAMPS !!"@rAT :KgrB"YOU WILL BE EXECUTED AT SUNRISE"prCKrD"YOU WILL BE PUT TO DEATH FOR YOUR"Y"vk():vl"YOU HAVE REQUESTED A SUICIDE MISSION":gwm"--COMMUNICATIONS ACTIVE--"wnwoawpPDXX$wqa.wrPEXX7wsaAwtPFXXJwuaTwvPGXXdwwPHPD PEtwxPJPF PGwyPHPJ wzKP:PDPEPF INCOMPETENCE"rEKrF"YOU WILL BE CONFINED TO YOUR QUARTERS UNTIL"sG"VULCAN'S MOONS BECOME TOURIST TRAPS !!"#sHT:KTsI"IMBECILE !! WE HOPE YOU CONSIDER SUICIDE!"gsJT:KsKL(UK9) ((UK9)T)d(YB9)sLEPG{:}w{"SUNSPOTS BLOCK TRANSMISSION AT : ":$w|"MOVE ELSEWHERE AND TRY AGAIN":: 9x}"AUTHORIZED FREQUENCIES":Bx~"FEDERATION COMMAND BASE = ";PHgx"KLINGON COMMAND CENTRAL = ";PJmxx"COMMUNICATION ON CHANNEL ";XFxXSLLsMK9LL(R9d)sN:sO"YOUR MISSION RATING IS: ";LsP::::sQ  tR()tStT!tU9tV" O9O"[tW" 135 . O45"ytX" . . ."tY" . . ."tZFPHxXFPJxxAR$;"ALERT !!"y"ATTEMPTED COMMUNICATION ON UNAUTHORIZED FREQUENCY"y?y"WHILE SECURITY CHECK IS CONDUCTED ON ENTERPRISE"Mya:AXXfya:I(XX)(X4)y"YOUR ";D$(A);" WILL BE INOPERATIVE FOR ";I () #zR9B9ώo-KA:A:Bp.G(A,B)d(G(A,B)d)K1A:K2B:()A:B8p/B,A:TKTQ8}((Q1K1)(Q2K2))( R9)Dp0TKTK|p1AR$;"!!! STARBASE IN QUADRANT ("((K1),,)",";p2((K2),,)") IS UN  EADERS AND REQUEST THEIR SURRENDER":KQ~:m~AR$;"MESSAGE FROM COMMAND BASE"(:"ENEMY HAS SURRENDERED TO FEDERATION COMMAND !!"4:::=[ KQ : EQ x (XM) ,, (XM)TF:"KLIS";PRz azTF(XXX4)L: TF TFTF {" THE TOLERANCE FACTOR FOR THIS MISSION IS [+/-]";TF;"PERCENT"{ {:{(XM),,U{(XM)(TF@)h{(XM)TF{:"CAPTAIN, YOU ARE BEHIND SCHEDULE - LET'INGON COMMAND ON FREQUENCY""NATURALLY, WE ARE PLEASED THAT YOU ARE CONCEDING, CAPTAIN" "WE ARE PRESENTLY BOARDING YOUR CRAFT"V:"HERE IS A MESSAGE FROM YOUR LEADERS-":: h(): r aXX :"MESSAGE FROM S GO !!"{ .{:"YOU ARE EXACTLY ON COMPUTED SCHEDULE; PROCEED WITH MISSION"{.|XMTF:XM(TF@)_|:"YOU ARE AHEAD OF COMPUTED SCHEDULE, KEEP UP THE GOOD WORK !!"h|.|:"YOU ARE BEHIND SCHEDULE AND OUT OF TOLEKLINGON COMMAND....""NO FURTHER COMMUNICATIONS AT THIS TIME": :"WE'LL TALK WITH OUR WEAPONS, EARTH-SWINE !!": % a9AQ((XX))X AQ ,,,,hGFTF@xXMGF XMTF ΁:"CAPTAINRANCE FACTOR !!"|"COMMAND CONTROL PROJECTS FAILURE...YOU MAY SURRENDER TO ENEMY"}EQ:SD: m}YYACX4}()N}AR$;"---------COMPUTER PROJECTION----------":}"PROJECTED LIKELIHOOD OF SUCCESS FOR YOUR MISSION =";YY;"PERCENT"}, DESPITE YOUR SLIGHT ADVANTAGE, YOU ARE NO MATCH FOR""THE GLORIOUS KLINGON FLEET"$)"END OF MESSAGE FROM KLINGON COMMAND":.-aaXXϑ" KLINGON COMMAND TO ENTERPRISE..":jv():"MESSAGE FROM KLINGON LEAD"WE HAVE AUTO ACTIVATED SELF-DESTRUCT SYSTEM ON YOUR VESSEL"}"GOODBYE, CAPTAIN.............":0~"END OF MESSAGE FROM FEDERATION COMMAND":::~ D~ ~:"YOU ARE AHEAD OF SCHEDULE AND BEYOND TOLERANCE FACTOR"~"CALL KLINGON LERS..."ق:"WE CONCEDE THE WAR, SIR, CONGRATULATIONS !!":PAV(X4):DR TECAV  C$"D"  : CAUAVTEC:AUKF$"":KF$"S"f:"DAMAGE REPAIR INACTIVE !!""REQUIRES";AU;"MORE RECHARGE UNIT";KF$"UNITS OF STARTIME"yD(A)D(A)I:.yz"SECURITY CONTROL ADVISES THAT NO AUTHORIZATION HAS BEEN"5z"GIVEN TO ACTIVATE SELF- DESTRUCT SYSTEM."bz"PROCEED WITH ASSIGNED MISSION":: hzz"BE ADVISED, YOUR MISSION PROGRESS FACTOR   )"THREE":: ˆ )"TWO":: ؈)"ONE":: "ZERO": (): I 2:AA::. I :AA::4O":: ؈)"ONE":: "ZERO": (): I 2:AA::. ϑAR$;: . D(A) :D$(A);" NOT DAMAGED !!": :)D$(A);"---REPAIRED":D(A):TEC:.H:AR$;"NOTHING DAMAGED AT PRESENT":.NW"INITIAL MISSION PROGRESS FACTOR WAS";PR"CURRENT MISS; ; MUST BE ASSEMBLED BY "MAC" ; ;MULTI-FILE ACCESS SUBROUTINE. ALLOWS PROCESSING ;OF MULTIPLE FILES (I.E. *.ASM) FROM DISK. THIS ;ROUTINE BUILDS THE PROPER NAME IN THE FCB EACH ;TIME IT IS CALLED. THIS COMMAND WOULD BE USED ;IN SUCH PROGRAMS AS ION PROGRESS FACTOR IS ";MR XM PW$" WORSENED ": PW$" IMPROVED "-"YOUR COMBAT SITUATION HAS";PW$;"BY A FACTOR OF";XM;"PERCENT"V (XM)TF EG$" NOT ": EG$" "v EG$" " EH$"": EH$AR$ EH$;"YOUR PROGRESS IS";EG$;MODEM TRANSFER, TAPE SAVE, ;ETC IN WHICH YOU WANT TO PROCESS SINGLE OR ;MULTIPLE FILES. ; ;JUST CALL "MFNAME" (Multiple File NAME) AND THE FCB ;WILL BE SET UP WITH THE NEXT NAME, READY TO ;DO NORMAL PROCESSING (OPEN, READ, ETC.) ; ;CARRY IS SET IF "WITHIN TOLERANCE FOR THIS MISSION"߆ EG$" NOT "  :  XM  : :SD:KDM"CAPTAIN, COMMAND CENTRAL PROJECTS DEFEAT BY ENEMY. YOU ARE NOW""AUTHORIZED TO SURRENDER OR TO ACTIVATE SELF-DESTRUCT SYSTEM"NO MORE NAMES CAN BE FOUND ; ;DEFINE DATA MOVE MACRO ; MOVE MACRO ?F,?T,?L,?I IF NOT NUL ?F LXI H,?F ENDIF IF NOT NUL ?T LXI D,?T ENDIF IF NOT NUL ?L LXI B,?L ENDIF IF NOT NUL ?I LOCAL ?B,?Z CALL ?Z ?B DB ?I ?Z POP H ;GET TO :SD:KD"CAPTAIN, FEDERATION COMMAND PROJECTS SUCCESS FOR YOUR MISSION." () 5"SELF DESTRUCT SYSTEM ACTIVATED"E::: b"COUNTDOWN BEGUN !"::z)"FIVE":: )"FOUR"::  LXI B,?Z-?B ENDIF CALL MOVER MF SET -1 ;;SHOW EXPANSION ENDM ; ;DEFINE CP/M MACRO - CPM FNC,PARM ; CPM MACRO ?F,?P PUSH B PUSH D PUSH H IF NOT NUL ?F MVI C,?F ENDIF IF NOT NUL ?P LXI D,?P ENDIF CALL BDOS POP H POP D PO: .ރ:AR$"YOU MUST BE DOCKED AT STARBASE FOR DAMAGE REPAIR !!": .:A *D(A)ϑ  )A;)D$(A);()"DAMAGED"0l:"IF NO DAMAGE INDICATED ABOVE, ANSWER WITH 0 (ZERO)" "WHICH ONE TO REPAIR ";AAA   C JNZ MOVER RET ; ;EQUATES USED BY MULTI-ACCESS SUBROUTINE ; SRCHF EQU 17 SRCHN EQU 18 BDOS EQU 5 FCB EQU 5CH FCBEXT EQU FCB+12 FCBRNO EQU FCB+32 FCBEXT ;<> LDA MFFLG1 ! ORA A ! JNZ MFN01 ; <> MVI A,1 ! STA MFFLG1 ; <> MOVE FCB,MFREQ,12 ;SAVE ORIG REQ LDA FCB ! STA MFCUR ;SAVE DISK IN CURR FCB ; <> MOVE MFREQ,FCB,12 CPM SRCHF,FCB ;<> JMP MFN02 MFN01: ; <> MOVE MFCUR,FCB,12 CPM SRCHF,FCB ; <> MOVE MFREQ,FCB,12 CPM SRCHN,FCB ;<> MFN02: ;<> INR A ! STC ! RZ ;<> DCR A ! ANI 3 ! ADD A ADD A ! ADD A ! ADD A ! ADD A ADI 81H ! MOV L,A ! MVI H,0 PUSH H ;SAVE NAME POINTER MOVE ,MFCUR+1,11 ;<> POP H ! MOVE ,FCB+1,11 ;<> XRA A ! STA FCBEXT ;<> RET ; ;MULTI-FILE ACCESS WORK AREA ; MFFLG1 DB 0 ;1ST TIME SW MFREQ DS 12 ;REQ NAME MFCUR DS 12 ;CURR NAME ;------------------------------------------------ ; ;MOVE SUBROUTINE ; MOVER MOV A,M STAX D INX H INX D DCX B MOV A,B ORAP B ENDM ; ;------------------------------------------------ ; ; MULTI-FILE ACCESS SUBROUTINE ; ;THE ROUTINE IS COMMENTED IN PSEUDO CODE, ;EACH PSEUDO CODE STATEMENT IS IN <<...>> ; MFNAME: ;<> CPM STDMA,80H XRA A ! STA   Y ~ըnOc!u{{-5 ~5f ~? QZ'$u{Ks5 HXdTkѺ=o-*PRط*~x1NHlm.KrݾF??kZX3o^)Q8v bR;1V\pw_kp]4r.EةmjRt %9x$~?CjKۺ)|bx{9jzK_jWm2@|/0)W"DKԯfېrWq ;}ku8˭S]m3%߼Na`~=/HKyAJ|_í{^ډ!d2_í{^x%H6Qpk}ԤvbHvUĐfvBY[ډ!MИQԎ6:J@vBYv&UCOPY.ASM>  ! "$#%&')(*+,-/.10o32456789:<=;~'R<7L Rp"QBm)C?>r&5n+5>ŒޫR)(-bWMS,H^FɳPծ@(j'tw 1ԎN kq~w8bvO@/t[RO ~ _Skw;5vjnUИQns9uA}j'tUׯL5tp+v^0~-N "RokKǗvq-0A>@K K.)}w)vBdk&:hGX] +PE ~ۖ1PmScYvj=) Ҽm,ݽec>vjYC-~vP^w%[w;O (`]ZoN z o/y}`N zu@J}8 8H_g AjGj3s}X4r.ڦ&EAVRe ~,jelݞ\ ~2Ѻ=oVu{jkA&n[>|꫎j7n ~x!/x#/vbHW2 /vCVs67xs_ 5^ѱvj=s*n/ vi1׳߱dkgV; Tqk&sCXj#(؇ρp]Zv~if^~ͼ_gbYy]rL  %{՗Qx>o (8]. R\z63Fɱ6<葠ܵԮ;v %+Wpv|Վ65||^y>_Ԯ@7Վ??}@M '(mFAr}nᄏX_5(8].߽ܳwOv/er(8h>z$(jeZj ]RreԮ66=CK.]mKA^5]2O!8f]x>6秾=쫝AB@w)v4\|SGO}qʪvű^rƣ O!m~<\,A9P3iv8 ?<Ic~S9x ɽLj&C ~emju@J}ϖD PܺA?'Rzm N$R]Z/QK͍.E3 z%HN J&Ԏ6R.{왳_#{߱dc~F;ggdfV;o~<ٳٳٳʞ\mSQZjzQ QԎ??}@MB3Jn뮐?wXX_ծm~"w8nծj'~mllr;+v dv+P뉘VviKvep}[j+jWKԥp BER9aj۱dkg~s>ֳo]Zt+ߎEQ9ծ@'bNXڥv,ٷՎ6D] "Zwu)b b0^Aj't%+P땡v-+PQ@ZrO zM1S=W P; T( -Rތ*`F%[r Rt354bg37۩]Qڦ]$uAJvY.~FA_íЗ5%)Q=ꗢv=ꗢvEv.Kз_Le .}0mj) NH"=lfۺءvx;CMm;:ԥb>_k?+v^Cm/HP/|`xURܮ}~ &M[j])p8^v/HPPfoV=WoA j  vDIRS9/8.ASMX  !"$#&%'(*),+.-/1032546789:;=<>?A@BCDEFGHIJoKMLPQONRSWUTV)b7BuMN7l`Qh2Q$τ"~fP:=??S4k7 ${CjlA)2Pm~ө}9Mq% '[.oڧwꞵј]3mKK<5Կ+StG56!dgϥsY=}k])gŜD+_y#rB}{aV_1Ewz6gj36!Jy+̎+]M5Ϯ}wWL)zgfo?qͯ]s\WL)z"jSwt) &ߙ"S|֞>r؞gwZVՙbl?;]-kH.EW4FH2`HIVCÍ-,17|xn,4r(skabQ)*ߍ)]$Íٽ#njƴd(5fnLarSvo %Ƣ4^&"f79†ҳt!] 6 l-\XzcZ[G~靅 wn-<[ 74Y&"ݷGzwR;GJz V,C-gWLLix%ɿ1jV)]v1H.EL+Yk_zg!)[ VCÍ-,ll-!  )6s)ާ.=O'0#}L?g *>f` kg`[M{=WLO]:z2?v-=S.d >u\LxB.ԥgd8Ccڽ3IȄZ[`C?wi{ig>e}GlO4s³sL܊4Q>u9zY{6g;?r)LG(x:ZO1F䎸Y󭎞)OAQQ3Uέ,Lz? B-"jutxM1} 2^k& dL>^ oU+j]z#dGmNYm2}/5Ĺ-ɄWȅ=w=zT嚮+Ĺbc>ui=K~dL%\sτZhS{Sהc ~Ͽ1u.g7dGu~N-'Բ̟KPW rZ2E(%'}M&\cb.3!`ϳ9t܇znakp:܇znarZ2Eu[/sYOd;غ)ic[ۈe.c:j~L ::_<DŽ1!W%Sd]r5SUѴ^@t} ]FS Uv'Sgt})2V&P:o9ֳȄܥ5"[sT?$rZ2E&gTd,&Kk;#֥1>G4 R sߏeԆIŹ$lx-Dcҿ׼τ*$+ğ\rꯞٙ Sl2jaBp8?M1AfI@Ź$zcVTwxay6`Ã;RDc?/㎿ u}<&t}p_qC~:o]_†w)YO/e_d$'[Ub]UGCdmU4C~&VEhl2*vAb.{Y3=kәaBPK۪hڥ -~' ?<ķtL1AfIq}ugeK_J&Kk;~NG4ϥjPC:Q>L/TlmY]TץϳɄ'} UѴKmQxtz" -Oղf0wWl6dGK1utsJͳvMm3A\*vAb(u20y6 ]rü>ja8v@9? 3&\c>2!>u處-\LhȄ>8?M1AfIxu"S)>tw]r^b+xgL.{SL@8+zO?_xy#0C߬ޜYgͪ;RDc/eBp9cw&t}7bbqG'snKhoFz~ζkJ1&1AfIܞs3E{hS:omrB=htw]rjlҿgYSYg۪hS9?}M~Y w9;& Noo{j95L=LJgsSg F4;R&ASLY竽YZL>~N8+`C߬ķ7'pc̒@?_b?_yN8+Gܿ.\kvpV¶*!?zcVT"S]:oM.ThHI.ߘ-J/H%/Sj$n4sx{Nb'ɠF196!FJ)+!獝R#p.7 g[һ7)ߑ19[ f[ f^aCdQh vMqc 2p)`N2E OfL{dL|'GCuc)ɤOutg{",ʱXݳO[ }D}~N?<ys1"  }7f󧟯L_ B^Q3z:/t~ȏaFC1Ìbz"I&b!v}zk]r i'S?wi=uv==}j] t {Y3@(@~'rɤ)n.9ɥϤϳ4!wğ/L.55MdLqp4;Sd5i G;L5 YQwNYm' Y;=_OWj)ĥkhLmrjSw2=k;2=kK9+bϜZ8?' 6Y96{F֕LppߖK}Y„_/9dK)2 ޾f;"S_ _O SK ^rqCw"޿.LR!me.LpZNץS=ic毚?zƝՏMץHsr!޿.wV?6˒ɝi5ǝէSܹ> @,*F>_tD((&&ۮؕ5%GdlbW,ylbW&Я>vhLK~13Lz4aDc8\jcјa/czUkβ{L SݭX++;ޠAϳ9/q.ȶ@煱 u0Av3~."SKKko6Sds\5Iw{ &~o0A .]Lύ  12E&Y\ڂ Y ɄZh܇%Y ?)2oKKkx Y qx"D[2=k;K .n|Sz"֕LL)#s񵮜+;ޠAϳ9/q.ȶ@煱 u0A B[ 4 u0A \[0&sLs 9l}3gw~&\cdr7lx-xLp`B]-4L 2p7saO;+;!G>Z'}mrGgoRL77gsw#^H&sk &BÄ .9{zpZxtĐ65G׼bL2lUYpVN{~v=?sL٪ ؀]#S0]fB Dq.9zsL@z+ObL+[D\ٜ\LK<!ҿwL)"b+S߬E{&g-¿Rץ~' R불_)g=}cJ\rĥµY]t}9\{LpZxtķssc 2K;_ Y2KץSr9y +[9?}͹O] \mhL{PW Ĺ 1u:/τZh%ǿ ϳ9K3#y6'2A\*<IJڜDeԆ Y#  }я4h2 iY- jqlL|k/eMx{ȉ.(o S2[?Z6.KӐe-/֘ntz<~&ղCfo, ZVj؉rkB-e| u=oy-eM7`k12{`kB-e̿Gzղ!}KgwZV@BCDEGFVt-es7;2xv絬Tr'6D~lRvu3[D}jLI⭁(={%~I|.g8_[jY-g4kMHOˆyi"i0[† Oˆy?ALzi00cGZ6zO?ZVjYuK3xϭ]xE}jh}޹-nIyPǐLl-wȝc(/[h٘yC!]~(o][%C?-f?Z%~ A$pj~w/{Oe-w?Kg6e O_6??l~މ ; &/1f{ƓK' ݧ?-[׽O (Z\9-~|etZVf [FNg8ױe ﻻs_N=kY APp('e2܉{|'/Sx`1~kY.]bfބxH yafв \@bx ew_?a##Ϸvn!.fOI]g6l Dyݝ`ݧղZ27H yabKe O_w;~4zѲy.Sxlu;7kc;uݰ9-e[6IwZ`l~4)V&s{c<`lMaAbx{c9`lM? +9^ Y7ncckm0C!i0_aAbwp'o,]^mc/`lM[a|86{8֓ Yul-06?>,1LiY-e}O.;?O2ݹ^~;Բ-2'ZV>7|/D-wֻ;ﰑg{o𝹃-{3w[[ޝwȳqoAղp']jY-e3܉K<}!'e2K\.O}'-{՟ԲZVGwc K*O~ ֲGhpOԲ~w3G]᧖ y7X=o׃]^)QxoCeo|Ktykݝw}?Yo'K9-$Ͳ~]ʇ]^%J-eȜ <`'V8x~4iŠ{;X/~4 Qax~X/kY-eu| xײZozB )AVF 9lAb~!ҲZ~۾vuPROM.ASMH  o "!#$&%'()*+,-./0124357689:;=<>?A$  vd'uG]H=:#5:cGZG*Ƒ9uL^t7N@>2td>:R&/7h,}oyZ:2`h)G\Na#sOKGcz #e|iֽ>FґCH82rZu?}0u:Rpԑfu#֑͛td>֑vdS:R3vyi)đuGRH%)#0kb}ґy:R!x-eNвZVhC#p؇]X-Z38b?GP祌7w-382=]Ph#p؇]ñ:8b?G#pXfIg_sZGÂxu ~4̡aAbx&Pqn82"ȳwn82orl{8֓ZVj]kF:2wbr3T#~IV"˗a##Goi3vu<-#euZ#3pԑf~0uy:Riݏܾ#!ґi1#֑J#td #eGn_[}d>:cG:RiݏGC#/uL㈙:R#u֑̿2yqd#7xiRHE;2S:R3vGJ#%82ߴX\#0kH>bF:,܏֑vd)9[Slh)&9[±s`s8'3>#5D:28y:R&#fuı$^ZG4i|)k2| đ|g'?e#5D:2BZGǑyPH܏ؚbC>Ȝ/QG>u-p>#(&4w)֑j~dޏ4Ñ׻ k#s9)3;j;ҼruLG{huFgHOCH%̅:Ri#!{v:_}d.#f 1v Vr;'VwBN.Zi)$6h& GxjY-|-ƛ ^]#;2GdM#etG uX#S˯u$,2'^ 1tNHF:2=Di)呹:RbHsi)&<M|<9yYH%̻֑r֑"[GdZ8cmi1ZZq7:cGpuX#SHXϷ;`0vinhŝɋ#SֺaHiņ֑btdNM.]#5:cGZ#&/̇GJ>2.Kv35V8]xع-2O+HT}d|awV;X#2L`K+<-Řf#M.&/"0v-ƛ}f&>{?91{-bLcq3\N+HoއMRx~ ] b{^+Lt >Za"P;<-E x*l?spVo vxZ>ATw QZrW˻w}Zx#(p7̥V$r4b hѧM+1/~E4luy2uݝ iYX3[DiY- w҄ղ2rnBZxkɋoa[~!z-eDOK'G ^|b޶ZV:guӲZ~w xoCeRlzӲZ~w ܵMVxZ1AxemkS 4bLb3VXlr90yԲZ&lNn1ĀV-[;Ę3V3i)4wZ1:cbVbCV"b{^+Lt5vE$nl/º86"/&}AX%p=Lu~jE) @iìշ!ЇVt݁.e[o;X#[>B+do_)<oy-%-7BjE⍠/ZIjE=VBoi/60qoZ!G#V0!#Cm'5R)~a[׽O (Zi)$6h& >m}\^rYjer&& ߆ibo.1^+[i=^Ze6η.x7j=|i"60хwxHŦL~"]+EllH! bLb3VXlr90yV ob[g| >rZƛ ~P8v[;|ݡ$xOM hb?xOɞ'ˬ1{?71rx?oOgi[?~ƽJOK1M L LZVjٷ8ݠp$.Sx(睖ղZVjaoa!xs_^+L^PjaOK1&7BZ]-eu`ro+}sk`.ԲZV ߷LFC׊!bT_w&N/ZIjE=V#\Zat&/»?VH!'񖏰'?RO`񺏰b%/{ݟ[e /Zl̷^'ɞV0!#xX7BjE⍠bx[=?&N? h'Z^  >rF Q+L^w/BN&W+<-ŘfrZa"mb[쿟wȝ܏->xZ!ط>wx˷xZ!KY Aƛ \ZݛҟʳxZ!es?濷~ob@+w3fߌ{-vxZ1ŝVXlr9"žy&k) Int`xV8]$VF j~/Zk)_J+Lt!Z]-%Z};<-EV,#+:'mkY xZ!_w(oƽOH! HbLb3VXlr90yᵬV obi;7^jyBN&Ccbtbiɋ?Sje!ob`ڃ؍Ex3w/H! RIlЊM.&/»L-aP;M Lo܌{-e4˞zݷCDTXFi[^kjtvF 9eZi)$6h& 803!ob`b@+{ߡx7o?71r6|9~?71r,<8޵~!i[gAw4ĀV-ƛ} ?6ƛ ~X<:l~ob`b@+''ƴq8|;<-ŘN+Fg,6V b߼ ] b&w)_DbtƢ%.&   also from -CPMUG.008, is a patch for DDT. UCOPY is a universal disk copy program. DIRS9/8 is a sorted directory program. PROM is for programming PROMs. These last three programs are from -CPMUG.047. Squeezed .AQM files may be unsqueezed using utilities found on -FOG/UTL.003 and .004. Jim Woolley FOG Disk Librarian October, 1982  DISK.DOC -FOG/HAK.006 First Osborne Group (FOG) Hackers Disk This disk contains the Tarbell database programs DBSETUP, DBENTRY, and DBQUERY previously found on -FOG.020. These are CBASIC programs. INV and INV.IND are sample database files. For information, see DATABASE.DOC. STRTRK/2 is an MBASIC Startrek program which needs work. It was received from the Osborne Users Group (OUG) of the Washington D.C. area. MFACCESS, from -CPMUG.036, is an assembly language library file which processes wild card filenames. The remaining are squeezed assembler files (.AQM). ADE is an absolute disk editor from -CPMUG.019. BANNER, from -CPMUG.008, prints some sort of banner. DDTPATCH, Z'C͵~Z;O@Pa͵~!O2~̵~Z]V !]|jN;ݙa RjY-8C,BjE⍠/ZIjE=VBoi/60!ob`ڃ؍Ex3w/H! RIlЊM.&/»L-aP;M Lo܌{-e4˞zݷCDTXFi[^kjt'