IMD 1.16: 28/05/2007 16:47:36 -FOG/UTL023         -FOG/UTL023APPEND AQM APPEND COM APPEND DOCAUTOMODDAQM AUTOMODDCOM CAT2 COMCATFILBOAQMCATFILBOCOMCATFILBODOCDISK DOC+,FINDBAD DOC. FNDBD541COMIF AQM4 IF COMIFSKIP DOC !"#$%&'LISTCAT COM LISTCAT DOC SKIP AQM()SKIP COM*CRCKLISTCRC-vAUTOMODD.ASM]  !"$#&%(')*+,.-/021o4537698:<;=>@?CABDEGFHIKJLMONPQRSTUWZXY[V\ (`U"jjNI9M Z%*ujv)]\KMZ%*iSPYb)|Z0% ͗eٲ rYjBE0ԜM|(ijX95  "jjfiU@U숕zjJfIVVAE0 P\;^K ?Nhwi~褝:*|(95J"jba=^ھ<8eҽ8?2Kzܸk+"io1@0Wr,ƋԴ`ңvRns!S$k7YF}#3/ɍk|? GOR(_-]G{==}ʋ{ r+~?RA'ZVD0Z[)u=7]5(_=dIsAfG1ޑTIH%_rQT"!=×^?ZsyrDL{><#a AXp&bR#3Azn"a AXp&bR#G`~&r1Y ~x{ٿ׍KǛ` .g^c9ףLB9c s)RU{i^oqv)Z絹 s>79zRnS 3+RNւ/Eȋ krg>7^ Qhog)*h|nfO1UL{w~d^\l|`S @\cl'D7ݚEwG;4y(/nen bYOS;ڻcjH}KEomy 2.̪̊SFVdV3Zޝ'&!y 19<_O` .nKYOuRaY>ih ̔Y71z,Vq6CgNc5774; ߕgCLg:AWq = 1)͢SjFkG7 ^AS jm]~5S5?QMƏ*KyhkTD"cB`w+ w[ էZZtwtkY^C3%7TSS;,+vNEf(,)[໕߻-Sn ,KbU٭Yr=XRQ{X.ڟNVﵯV|@O):%XhwN^y<-NVYѿ߭,m VRԯui=Oe;|{߻- =Ej]cl'Z)g=>7ύa} |uML w?+|5ŵ#d}`U_Bz*_W+1QM'~vAg"&A+1r@g|7fm>ھYm/mU>_n"&XvDhcّ%|"&q@S9|=^[ɹ~~!=_WrkbE KaəIF?w[ Vo"&loh۾/n ,4 U |"~^n=nF˹~tFrDLse e1~\r܋1ѭǍGA!K1Qm"齙)b25;1{9"&D7>9C0Z[ƍKY-4?W|_;_odEf5מU6Dz#Kq| { 8^AHORLj-A$${cfvz`SZ?OiE1sTB0Z[7|#m]5u$qݬڋx!9kbR#_/< rbs{Qh2tr̓#bk|Bz*:sPBz*:_.n=n\ M3;"qďUqywүkPE0*AS9"z?A$${cp{j7։Yc# j<_OgVz(_KH"]g^ޝkYE0|!]Dj_7K7r!l|1QozfG#l⾉a3<)o7rr؜!Қ&d#'y  ֏7a IHM1w䰙yG0B6r2tuaoZ?q;ƫ#MWO% d#'֏7a IH:1w_7K% ̬ȬɻDk*t+"H{3A9r yy2k H{3Syrk/ZrwoAX_2Bz*Ĥ~y|5ŵ#d} `!nSERTED, (36 CHARACTERS MAXIMUM) OR FOR NO COMMAND. If COMMAND LINE has N characters, where N > 6, first use SETUP.COM to establish (N - 6) dummy characters in FUNCTION KEY 0 (zero). This will avoid disastrous overlay of FUNCTION and ARROW ̻ L}hEʩv!a} ~\LsSjFkG7 ^AS T[;93B6r!cvO*MWV+f xDl7r2tu1oz* l|_mbRf%7l Q/I%F{b~ouTB0B6rr؜a32=:  2:  :kobrY"kL~1;|q#&C"cv|WA۸<AҚ&&忽hLPkӫ}Ǐff'z?SF0Nnoӿn1ur%h ;ƫ@wh ;r|4ޝGS@0r"&ncߗge"*G.blwJȊ̪A0ўMW2 2 *O !~`! # >2= R!"!"! "*DM*DM*DM:€ʒ :ʒ b::*¦*#"!#"*'z¾{"O ^#V^#V{=2>2$ 2:  :9ϓ _W+9z4>Ap[ѳ\5\kR "_|/Eypp[g?nQw}/8bᾧ!G~6ύsK}Ƌ^{R?A"Gz?gxpp\l|Ɨ?Gz7 7l|?Ƌ  ~LWGid#'y2 WRONG!$ lDISK READ ERRORm $ lERROR: CP/M NOT PRESENT ON SOURCE DISKm $ lDISK WRITE ERRORm $ʒ b::*¦*#"!#"*'z¾{"O ^#V^#V{=2>2$ 2:  :~ AUTOMOD REV. 1.1 PROGRAM TO INSERT A USER SELECTABLE COMMAND LINE INTO CP/M ON DISK, TO BE EXECUTED ON ALL COLD STARTS FOR OSBORNE CP/M 2.2A-00F ENTER CP/M SOURCE DRIVE (A or B): ?$ ENTER COMMAND LINE TO BE IN  CAT2.ASM 1/20/80 $ !9"1e͠!1#!/ A!?#!1? ͬ;!?1 ͡5sMAST CAT ]͡\<++NO MAST.CAT++$ʻ) ʻ ­++EARLY EOF++$!(͸#.,7w#6 #ɯ2M^ 3##:M~:M<2Mʻ l_P, 2M $~# x¡# x¬^#V#N#Fx#~G#~#fo>}ƀo|g+~+w+++ø#~g}o|g~ +p+q *ɴ\ . .  2M $~# x¡# x¬^#V#N#Fx#~G#~#fo>}ƀo|g+~+  vCATFILBO.ASMF   !"#%$'&()+*,.-/012354678:9;=<>?@Aȓm_7~^vt_s_׺h@ FA{^0'fS_&}4\ĘM FGw"_3IIxw7Tɥ?:zWIM;fĘ/5߬ 0Ɍ&GvdxSy^+|z߯0'ȓ'5z>_K9G߼xY#?_@.If49gy חoq OIx0BEDCo׺Nhu{?/N;#Q f#8cxu''~|BKMe߸Zi}Ny'&'nFV^{>[wۀ`x.m9.:}9]Ix0]Ix0)Zi;*"E5G?yJ{QQ0'ȓ-U|_EG߳uJ޿r jy-:u'ɟI`>ժ̧S4k$&9"7'ĘM-OyS4kz]2^ql>/n9S]$Il|)>mIwTD-U8zᅬZ4`'R"O̗~Bx}zzv1g(Qb/LdOW/`H)==]eL´ΞrΰDsΗ]V'WB}s%%l =-KB~o,o]ݻ|yfZG7_;@՞-U|.zo A k|un86fZbH5-gj&RR˳0tGE& mn:v;Kٹ0qu8~q[?+*?cw^wc?#({ CwR+8 -!O\CaƩuнjܓ[ݧs^7[x<#8>cO=fО7h?J=̉WIM{ c6`j0ɠ= //FK malj0z|ҧg0'  ")1 MAST.CAT translator program, V1.0 Reads MAST.CAT, writes TEMP.CAT. Strips off IGNORE names. Changes all PERIODS to COMMAS for SUPERSORT. MAST CAT͖ 2ͯ 1P6**}|!"*{z* *"*"!"**}>*#"ɯ22!P"",͛Ë>͛*}¯">͛£q<  CANNOT CLOSE MASTOUT$ FUNCTION COMPLETE (~_#~#  ++MISSING OR EMPTY MAST.CAT++NO IGNORE NAMES IN MAST.CAT++EOF READING FOR IGNORE NAMES. MAY BE MISSING ")" AFTER LAST NAME.  oEGFHIJKLMNOPQRTSVUWYX׫ѣ|_%o] >y% X%#îC"âOS K]L;0lƪ`qC6V-,]kƪtřU*}ڀUmSjX٪Ucg^6ƪwU[]y!ڐaѧ 1 jc+/V9ԪU0,\a'b{[l*G൪XV[b?\7Bʭ~XݮXU\mX kWkmF@W^tٜ=K\n( {KL@JߵҰr/37%&WíiM^g]j_U2]%P\8 (#1U@za5ļF#1}JɰS# >~p ]odk Y XuaѧӋXu=&âO[KY5ŴRVP&Q|f$t`~HR.F2 #@ I_Ӆ{P&QP9a8{lNiƺN$wH˿$V[bnXnꬺZ_enRw>YQW&}r]ݵ^qBx'+TK~Houف6;OVD=\>tѻo.z䁶 {Ǒgo/ӿOgv?if.asmZ  "!#%$&('*)+,-./0123456789:;<=>?@ACBDg=dT rM;oN; Pi*E2Iyſ9wϷg 6@mSPP@u9+HqO_ =?[rȀQ$=~oϊ~[yONZCQoL=Ce@$)U.?R4wC2`L^Vg^7 HqeROjFvUVԷ~[yOe8ЖsRſgh;? Po1)n+cX9?K(ۉ$Ugag 4E|vd=d@Ry)3t/8=ɴj!Eqy|' u57 IqLhoM?{%wrMrfxg (q]Z;4^`4OCe@޴I/%wrM>,w9~+?kw/Ȁ'Nv^k)|{7p~wr-HqLh5؛6)[?K).'o/3#N'2h]XPRy)ٻOV3t@ʽF=i=oO')eHRE3=osFXM̡wLh{}|gPvy*Cٻ'dY` N%CY[O,b8=CP<Ύe8ЖHH3޴IߚOY N}RD}?+.I/:T&+m#v^ki(״vPi"g/C_@N.?"}|fv8خk u57 :&š2y=޴I/\r'~@yTS/3#Nv^ki(W'š2y5؛6)[?KN.|a/ޙ8خk u57 jHqLhM?{%wrqC;{_VIX/rz)o+}.<?S2PMCnR<~P<оy!RK)*aݬr^#7NgW]y(rdXPMC:)\vLh߼PK%CYK }ɀɰ:+\Iqe'M+}.<?S2Ur5忔]25`2PkdO z4(T풡a5Nv^ki(RCe@`o;x)Œ7;s P~'`V5`4ECe@޴]\r'/PPh(\#8T>y} I*r#ƽO>IqlS# ۖbfi?M}D߸Sr|ոWu,o A'{|@; P]\#xZ񡇿gg?OlmR\Y8z?w}aۀ_JUCQ=0>°mb9=laTG{ (W^tjq)-e忔#1pykqYeO  ɵ>y(`~yyrqٱuOhgǟd؛u=S,{wO(`ߞsE;{;g[dh;*K{ڷWPF@>}U1 <蘭N;{H/'V~7-=CW[`}~sa?*zGh޲4"@Yڛ6)~U$"hOvǝUV7PPn^.?{skS$)}= ]~|*7uat.?< ^ZuD^Z̦rזI1;ouRIhgcgǟ-NrvcW@ɀrwGT#@ iܥEyo[d[}'Tqe3'K ΞvP夘3;(ɝ\~|+8'="O r@K5؛.'j7]g?/+P;N"h-K{&Eўe+ˏtM@[MIooud6)ٜ i:" ޴Iˇ->'o/9{PN.?^(uL)wy3c^s&ˏ i.Á&!]>l㤿9mPWsZu{&.9y{oٛ'wrBa P@[tBa*w)EH1 @zˏRzߗ\g5y(mw(]rqWHK1;out6VwٟgFxiy,MlcI<3ړY';F@OgE} zGNg[?]y2ݟNvi:Bet `[{(r'XAgF{[`Г^0Nu57UGK Pk#@;zgR<3ړ뇞4}Pk#@d;~Ö}'Tyf';@/lcuJyfo~i ~gƿxX?|fv$*jW>Vr/3V1v/ ^.w@O־L)ٕ-:;> Pkb$X;N.?.Iq~^>3;2m r)ٕ-ӝ(W5J1bv,['OƤ8f?o/.)faYytc'w՝*Ev{APPEND.ASMK ! "#%$&(')*+,.-/0123547689:;<>=A?CB@3}{x0f> }bdg _"j1O'\U4n@@K -12x1?r> f@y{(ߵUn2y~gEhRM|9/񥱷i`\\ /qr2YxHM  .0._?0/v7Ṕ1OL6]T;y,AxOx-lSaXZ隍g?**_ Y xO 9ciRQY&JS}޲uӟ**~*Χӹ+MUD>x`>y=&g*n8x}59SQqX]wuMVqXz1}Į3u]S}UT+(*_;X^́ǣ!/Q}UkkWT||x\Wlvo?{d-#QmW/^>=wQWvoTQpUT 3jrqLEOo4=&g*XwB NoY†*Pufi;Q~' t`ϴ+6Tc.uW.BrFg%Fw!_e_q t/By"WUۭZ)܁C..!9"V1V~# !\$ O ͵ ͠ ͖ 8{ Ăy0 2X *K*M}|گ!"M*K{zҡ*I$!›*E#"E*M"Mf*M"K!"M*I*K}>*M#"Mɯ202D!"K"M$<  NO INP FILE$$$!l > !\$ O ͵ ͠ ͖ 8XĂõ*:*<}|ڞ!"<*:{zҐ*8!Š*4#"4*<"<U*<":!"<*8*:}>*<#"<ɯ223!":"<<%>2X!"<<%  NO DIR SPACE: OUTP$!":*<}+"<*4}+"4î*:*<}|ڞ!"<*:{zҐ*8"r*4#"4*<"<= ~ DISK FULL: OUTP$!"<*8*<#"<#A¹ GRG (*<}":>(<   CANNOT CLOSE OUTP$*Vî*:*<}|ڞ!"<*:{zҐ*8DISK FULL: OUTP$!"<*8*<#"<#A¹ GRG (*<}":>(<   the bad blocks so CP/M will not use them. Originally written by Gene Cotton, published in "Interface Age", September 1980 issue, page 80. NOTE -- Ron Fowler Westland, Mich 7 April, 1981 This program has been re-written to allow it to work with (hopefully) all CP/M 2.x systems, and most 1.4 CP/M systems. It has been tested on several different disk systems, including Northstar, Micropolis, DJ2D, and Keith Petersen's 10 MByte hard disk system. I have tested it personally on my "modified" Northstar, under several different formats (including >16K per extent), and have had no difficulties. If you have have difficulties getting this program to run, AND if you are using CP/M 2.x, AND if you know your CBIOS to be bug-free, leave me a message on the CBBS mentioned below ...I am interested in making this program as "universal" as possible. I can't help with any version of CP/M 1.4, other than "st FINDBAD.HEX ver. 5.4 (revised 05/21/81) NON-DESTRUCTIVE DISK TEST PROGRAM FINDBAD will find all bad blocks on a disk and build a file named [UNUSED].BAD to allocate them, thus "locking out"andard" versions (whatever that means), because there are just too many heavily modified versions available. One possible problem you may find is with the system tracks of your diskettes...if they are of a different density than the data tra  cks, then see the note regarding the "SYSTST" equate. ------------------------------------------------------------- NOTE: If you have any difficulties with this program, please contact the "TECHNICAL CBBS" in Dearborn, Michigan - phone 313-846-CKS 104 FF F ;PUT [UNUSED.BAD] IN USER 15 105 31 . ;DONE WITH CHANGES -^C A>SAVE XX FINDBAD.COM ------------------------------------------------------------- USING THE PROGRAM Before using this program to "recl6127 (110, 300, 450 or 600 baud). ------------------------------------------------------------- SYSTST and BADUSR options: Many double-density disk systems have single-density system tracks. If this is true with your system, you can aim" a diskette, it is recommended that the diskette be reformatted. If this is not possible, at least assure yourself that any existing files on the diskette do not contain unreadable sectors. If you have changed disks since the last warm-bo change the program to skip the system tracks. To do this, set the byte at 103H to a 0 if you don't want the system tracks tested, otherwise leave it 1. This is also necessary if you have a "blocked" disk system; that is, when the same ot, you must warm-boot again before running this program. To use the program, insert both the disk containing the program FINDBAD.COM and the diskette to be checked into the disk drives. It is possible that the diskette containing the  physical disk is separated into logical disks by use of the SYSTRK word in the disk parameter block. If you are a CP/M 2.x user, you may assign the user number where [UNUSED.BAD] will be created by changing the byte at 104H to the desire program is the one to be checked. Assume that the program is on drive "A" and the suspected bad disk is on drive "B". In response to the CP/M prompt "A>", type in FINDBAD B:. This will load the file FINDBAD.COM from drive "A" and test the d user number. If you want it in the default user, then leave it 0FFH. CP/M 1.4 users can ignore this byte altogether. Note that these changes can be done with DDT as follows: A>DDT FINDBAD.COM -S103 103 01 0 ;DON'T TEST SYSTEM TRA diskette on drive "B" for unreadable sectors. The only allowable parameter after the program name is a drive specification (of the form "N:") for up to four (A to D) disk drives. If no drive is specified, the currently logged in    drive is assumed to contain the diskette to check. The program first checks the CP/M System tracks (0 and 1), and any errors here prohibit the disk from being used on drive "A", since all "warm boots" occur using the system tracks frest that if the diskette has more than 32 "bad blocks", perhaps it should be sent to the "big disk drive in the sky" for the rest it deserves. The nifty part of all this is that if any "bad blocks" do occur, they are allocated to [UNUSED].om the "A" drive. The program next checks the first two data blocks (groups to some of us) containing the directory of the diskette. If errors occur here, the program terminates and control returns to CP/M (no other data blocks are checked sBAD and no longer will be available to CP/M for future allocation...bad sectors are logically locked out on the diskette! AD and no longer will be available to CP/M for future allocation...bad sectors are logically locked out on the diskette! ince errors in the directory render the disk useless). Finally, all the remaining data blocks are checked. Any sectors which are unreadable cause the data block which contains them to be stored temporarily as a "bad block". At the end of this phase, the message "XX bad blocks found" is displayed (where XX is replaced by the number of bad blocks, or "No" if no read errors occur). If bad blocks occur, the filname [UNUSED].BAD is created, the list of "bad blocks" is plac1eh FINDBAD - ver 5.41 Bad sector lockout program Universal version Type CTL-C to abort $ ͦA}6ͮ> ͵*|ʖ͌Û  *" "x"p"{ " |2*.":\O*͵!"**DM Ϳ:»g" Bad block: $ x/y/ͮ* :<_" *#"* q#: p#" j:2!e" :X!yQ)=L:GdV}2* DMڑxʆ`i͑" f͑" !:<22|ʼڪ|¼.:22}2:G* !w#:w#$Þ Drive specTHIS FILE IS FOR PEOPLE WITH LARGE MAST.CAT FILES WHO WANT TO USE AN EXTERNAL SORT PROGRAM SUCH AS SUPERSORT RATHER THAN THE INTERNAL SORT IN CROSSREF. IT HAS THE SINGLE FUNCTION OF READING MAST.CAT AND CREATING FROM IT A FILE 'TEMP.CAT' WHICH IS IN Tifier out of range$ +++ Warning...System tracks bad +++ $CÞ Bad directory area, try reformatting$pÞ Can't create [UNUSED].BAD$ ڕ |Č{0͵> ͵> _*.*.   Test aborted by control-C $HE FORMAT FOR SORTING VIA SUPERSORT. THE 'IGNORE' NAMES ARE DELETED AND ALL PERIODS ARE CHANGED INTO COMMAS AS PROPER SUPERSORT FIELD DELIMITERS. *eDM6# x }o|g}/o|/g#~#&8Ɛ'@'õ:X:Xi&"_ Zɷ|g}o:|&*.:^#"^#"~#2~#2^#"^#"^"> _[UNUSED]BAD  TesNo$ bad blocks found $********** ; AUXBUF EQU 201DH ; CP/M AUX CMND BFR ST ADR (BYTE CNT = 1st) ; ORG 100H JMP START ; MSG1 DB 1AH,' AUTOMOD REV. 1.1',0DH,0AH DB ' PROGRAM TO INSERT A USER SELECTABLE COMMAND LINE',0DH,0AH DB 'INTO CP/M ON DISK, TO Be total sectors read $T HLT CMC STC CMA DAA RAR RAL RRC RLC NOP CPI ORI XRI ANI SBI IN SUI OUT ACI ADI CALLJMP LDA STA LHLDSHLDMOV ADD ADC SUB SBB ANE EXECUTED ON ALL COLD STARTS',0DH,0AH,0AH DB ' FOR OSBORNE CP/M 2.2A-00F',0DH,0AH,0AH,0AH DB 'ENTER CP/M SOURCE DRIVE (A or B): ?',8,8,8,'$' MSG2 DB 0DH,0AH,0AH,'ENTER COMMAND LINE TO BE INSERTED,',0DH,0AH DB '(36 CHARACTERS MAXIMUM) OR   FOR NO COMMAND.',0DH,0AH,0AH ; db 'If COMMAND LINE has N characters, where N > 6,',0dh,0ah db 'first use SETUP.COM to establish (N - 6) dummy',0dh,0ah db 'characters in FUNCTION KEY 0 (zero). This will',0dh,0ah db 'avoid disastrous over0$xIJ!LPHA0&1p=`!ULp!O0HP h0QHJ0=R#0"0gS0(BTP #0"XD0"U@0p`[UpW`qX Y Z0 ENTER DATE: Z91+YES x] p0^lay of FUNCTION and ARROW',0dh,0ah db 'KEY information but, also, will render FUNCTION',0dh,0ah db 'KEY 0 unusable.',0dh,0ah,0ah ; DB ' COMMAND ?: $' MSG3 DB 0DH,0AH,0AH,0AH,'**** COMMAND INSERTION COMPLETE ****',0DH,0AH,0AH DB '$' ; ;**** PRP @ 0j 0vYES 1 , xUc`dXAE PXBPB0&, 0 xg@0j0ewPH!0PH!0@0p`gpak`g1+5+YES xn00v oP !0`XC0p 0j0q`1+xgt@00INT HEADER AND REQUEST DRIVE ID START LXI SP,STACK ; LOCAL STACK ; MVI C,9 LXI D,MSG1 ; HEADER MSG/DRIVE ID REQ TO CONS CALL 0005 ; RETRY1 MVI C,1 ; INPUT 'DRIVE ID' CALL 0005 CPI 03 ; ^C ? JZ EXIT ; YES: ABORT CPI 60H JM UPPER SUIeu 00v 00w0H xXA0y0HzP "0`XC0{PHB0g`1+ 59+Nx~P 4B0XD0 b0 65+M x`q#0"0g0(B XA 0P # 20H ; MAKE UPPER CASE UPPER SUI 41H ; CONV A or B TO 0 or 1 JM CHERROR ; IF NOT 0 or 1 CPI 2 JM DRIVEOK ; CHERROR MVI C,9 LXI D,ERR1 ; 'WRONG' MSG TO CONS CALL 0005 JMP RETRY1 ; DRIVEOK MOV C,A PUSH B ; SAVE DRIVE # ; ;**** MOVE PA 0"XD0"Z9 2+1+ 0+x<Cd6kk=@!>dP|"c8W%6Ee@>D8P "O "c8R%C%CC6k@"<Cv@<@k42Rk@"C6>@"`'jZ>@0MAST.CAT P )d%i@"d<C/@!l%D$NO 1 02001 00MASTER CATALOG AS OF PAGE EF%EF'EF)EF+E i0E%FE'FE)FE+FE-Fi1&00Phpx3LISTCA!ÿD$$kE@"@#@"@#@#@>%@"$?X$E$J$M"F$@" Q]%A%B?E2F@k>DdO#XP"c8C?@#C%?>8%Ch6'C%C%C%C%C6kk=@>#>6=@$Q ZxA$Z$A#ZdAG$$=$@e#kn#R$Q$@>##E$\2Z0S#\0S#`$Uh  2G2hCAJ$L#@#$in#k%C6E$\2Z0S#$k7G26ks$=$@#kn#D$<@"@$ Q]%A%B?kEJ=S$>% C6kkR@>#'CeFP>$cXC6>@$EF@6$>kp%k%W6c664I555T5M455 2 2 2 2 2 2 ??V#^#{2 ))|2 )|2 "1V#^#"F~#2 ~#2 : Ҥ >2 !" "J 2 2 *1"7*F"9 á * #" ! á Ñ z :  ~2 2 2 2 *1"7*F"9 : *7w! P~: O!D ^ 2 2 2 <2 2 H ! ^#V7a uW: P<2 : 2 > 2 / <2 [! 4* / ! 4* / >*2 / : ‚: 2  / : -ʕ> 2 P ! 5H : -/ > 2 / : / : / > 2 / : / : 2 / : : : 2 : > 2 * ! 4#V"M: ' *7: ! i  h i h : 9 : *7h : *7*Mc Z ` N ! !"9c c h ! ###*7#"7*9+"9|: O*J "9: • >+w: ʥ =2 >0ú * |ʸ  D" {0*9+"9w! 5Õ * *Jr#s#~?2#V#^#"F"":/ :  :  : 2 : % > 2 ( * ! 4/ d P ! 5ͱ ; ͉ P! 5_ *  ~#~#" : 2 !q 0 )O:: ,Š  .–  9ž R :O® : : @ :  :  :  : ! :  ! N* ͚P! N*O * ^#V"X##"Z*XV#^z:z:s+r*Fb:<>2!"~2W#^#"Q"\V#^#cj"b"d~2~W#~GW~#_:Qgj"*XV#^!s#r:ʹV#^#"n"l*nDM ͚:!q>F#p#=~_#V#"y^#V#"}:ʫ*XV#^*Fbҫ ~0 >*w#  P! 5* ~#" 2 12  G: x:xH 0H > 2 : 2 x: O<2 * : wyr r : @: : >*2 : = : ʱ : ð : -: =: ʱ : ==O* : w: = : = : =O* :wV#^#C))|2 )|2 x2 ~ *ZV#^s+r*XV#^*FbҦ:2*"!"j!5*~2pW#^#"V#^#""&:ʎ*XV#^*Z**nDM*xڇyڇDM*l͏**j"j:pҦʎ:@>e.Y"^*"`!b])>|*Q>eo"^!`]T):*Qb>eo"^!` : /<2 ~#W^#" " " * ~2 2 ##~2 W#^#" K))): |M /<2 y2 ! j : ! q : ! G: 2 : G: 2 : 2 : G: 2 (* @! " 9! ! " !PI: = : 2 O* ~- >+2 XQ(???])*"^jc"d:!QV#_"f!`]!h*s#r!" !!^P*XV#^*Z*jZ!"**"*V#^"*r+sw#w###*#"*XV#^s+r: **\b æ**r#s:*\U"*V#^"!r+s!" !!qP**r#s:?*XV#^*Fb   >2*Xr#sP*XV#^*""M*Fb*XV#^***+"|#:*M*Xr#s--''-RXEP|Y ####^#V+++++#~!W&2**U*^#V#"^#V#"U^#VO* N#FxzW >͇O zW{_*3~#0*s#r*##s#r*3w#Q|/g}/o#z{V#^###z|~#2n> 2> 22!Yh:=O!m n*n** N#fir#s!Ph2T##P""U"ɯ2+ * ^#VO ##~#"P2*7^#V#"7*V#^#"z>͏IO* s#r:= ~>O!c ^#V2!!-#N"-#gD1L&F1j`dDUeD$fD !!B?H/'--R/k &d>J/kk zW"V#^#"9"7:Pʥ!"*)>V#^"~2#:P :=*+"|>2a := :D/>]/Ak2>p66>6>,6D@ d'ESTCOI.N (F>='%k1@>0>BIK%k1?ku1>>C/C6kk1@k1ku1'>%CC6kk1>&BD0=@0kI06>&=@>2a*9V#^#"9z"S-ͬ-͉*DM*7>͇##V#^"7V#^~2#>*7|d|hpZچ: Ì^#VÌ##^#VP> ~¾#~#^#V#N#F##~_q#pP2#~2#P~#2O~#V#^#""7"9V#^>"~'%C6E0Z0M0K06@=0@k2>p66>06 <@2@ ?<@2k26@(** RUN-TIME ERR:REDUNDANT OPEN DATA UNAVAILABLESUBSCRIPT FAULT INPUT/OUTPUT NON-NUMERIC DATAPERFORM OVERLAP CALL PARAMETERS ILLEGAL READ ILLEGAL WRITE ILL2#*|(:O(*9V*DM*7ͬa*DM*9*7͉:=a"7*|a*7:OV*DM ͬ:OG:|yʂ##Pyv^#VP>2x–# ʏڧ>è2>2x·~# ʱß##~͓)iDP#~#^#V#"7^#V#"9 V#^#zEGAL REWRITE REWRITE; NO READREDUNDANT CLOSE OBJ. CODE ERROR FEATURE UNIMPL. GO TO (NOT SET)FILE LOCKED READ BEYOND EOF DELETE; NO READ ILLEGAL DELETE ILLEGAL START V#~_)))U\!^#V#2G$UUUpUUUhD U6cD;UUCV#^#zz P:2M:M:2M!O ^#V ^#V*9be:e<2=O! s#r#*N#Fq#p*7P>͇#~#?ʖV#^#OzŠʊʒڒyO P=O ^#VP#~#N#F#*q#p2M:T:MO^p#Vq#"7^p#Vp#"9h*7s#r#*9s#r:MO   P:=S2MO! "9^#V"7 ^#Vba:MS2MO! ^#V ^#Vb.e~#^#WP*7#~ ʍV#^+r#s#zʍ*7##^#V"7^*9##^#V*s#r:=2P2I2L~2OV#^#{2H)))z2S>2L>2L:H>2I>2I"7:O¨ :8! O ^#V ( 4 N [ *7*~< *7~#"7+ʋ -ʋ ʋ *7*+~c *7~#"7*+"0: AS {ʋ }ʋ *DM*7xa~# 0:Ó }<G*7~#O y ñ a aa#~! O ^#V> !#2"9^#V#"9:IO:LO!- ^#V?NUUUNU*7V#^*9r#sP:SO*9 "9*7V#^z+2E-tZ"7:Hʆ*9:Ew*7|ʙ! D"7{0*9+"9w:S=P2SÆ>+2E:S:HO*7 ~2E:E-EZE!"*7~#"7{}MUIyR<~F>mc,Mlc}I,`LMV`Ev={}I,`u$TYe*jZe*jXe*z$T5$Tʵ$TgI8k*Pp(״U&PcV հ*V:YBVԷ=.>P&MIoV@Fj}P&B+ 2k>=+píOOwOM M>͇>0>0!E6-EG:HOx!9 ^#V*G|Z7"!H50 :> ͇>2#~#2^#V#"V#^#"V#^#"M* ^#V^#V*M)"M~2HV#^#zW"V#^#"M"7*MV#^zzW{_"~#"M*7J:H>+2E:E-Z#5d|~e+^ݵ^6,t `WK{(xMr$Tr\PfGTW㾧;=uE/Nu/`TOVZc6ކEN2SjiI#@ B+ʬUj{h>==א=^ɊaYk[rE.V²ro>{skV#^*+|8*C8|8*":==2*MÜ>͇**r#sP:H=ʁ=2H~#GOxG!dC8O 8M~G! C8Ox 8 §Z#~#2a:vÂ~2W#^#""7"9!"*|22~#W^#"is program was written because the abstract for volume 40 states that 40.1 works only under CP/M version 1.4, and that the source code cannot be provided. This version overcomes both of these difficulties. (Note: 40.1 "1.4 only" meant "not 1.3". ~#2W^#*Z| "2:2Z*7"7:O**"*7V̀P:a ̀lPl ̀P*DM*9*7͏"9*DM*9͚"9x ~#Ïx r#Ú#~#2"7V#^#{<2>">2:*DM*7 ~# AZxa2a:it does work with 2.2 ) PROCESSOR: ASM DEPENDENCIES: NONE NOTES: Set "DUP" to true, to define a version which will write "/.SUB" out to disk to facilitate re-executing the same commands. To re-execute them, REN $$$.SUB=/.SUB then   ^C. Alternatively, PIP $$$.SUB=/.SUB You might wish to name the version of this program assembled with DUP true, as ".COM (but this will "screw up" the Master CATalog system which reauires its "-name.xxx" to be the first file found) 0E"%!$ &:"!$"zW("&## &:"!P &PP#~2(!N#%&P%v"0%y "~"% "&͚%ʮ"0":(!="####&P:(!####ʼ"##P:(!+%##+%:"!"" &++&"&͚%2%!%:%! A program for quickie, use once and throw away submits. The command syntax is: A>/ [[;] ... ]  #~wî""&~@w:(!ʣ"!)!4"~2*!~#~2+!~2&!#"0!%".!&G!*!~&$~#Ã#####:&!P&PP#~ %x ʛ#0 %+~w#N##~#y$½# &++&8&"&͚%j$%e#%8&"&͚%e#:&!z#j$#x0 %#6 ; boot equ 0 ;for a warm start bdos equ 5 ;cp/m entry point chcnt equ 080h ;character count cibuf equ 081h ;console input buffer tpa equ 100h ;transient program area ; dup equ 0 ; org tpa ; slant: lxi h,chcnt mov a,l add m inr a #~+++$~%w$%8& "&##x0%##~+++H$~%wK$%"&͚%$:&!$x#$=$:&!+%&+%#~2&!~‘$=2'!#%&ʪ$0%~=%%".!:'!G"&͚%2%!$:&!$##&P##:&!P##P*.!+%#mov l,a mvi m,0 ;zero the byte after the end of the command line. ; lxi d,cibuf ;de is the source pointer. lxi h,subbuf+1;hl is the destination pointer. ; nxtcmd: ldax d cpi ' ' jnz xfer ;skip over leading blanks. inx d jmp nxtcmd ; xfer#",!P&oG:+!*^#V'2e#^#~<%VX%&==_*,!&zw%"%##&"%*!%P"P~P!)!~6P%`:~ p% C &{%x0w#x0wx:"! " &&|&:"!"##& &&xÇ&#~+ !* !#^#V~#W^#"P#~2$!~0ʤ!O#%&@%%~w~w#~+x!"&͚%+%#:"!ʆ!6+6+V+^!$!N* s#rP#A!+~ʞ!=³!@##%& %@%~?Gw#~+!"&͚%+%###~wP &zE"{p2"!^#V#V#^#s#r#r#s####~*U:"!0&##&P*0!## & &~#W~#_2H>{2I~2W#^~#2S>{2L"1"J:I '*1:HO *J:SO ~ ʳ&>+õ&>-~0:H=&2H+:S='2S~0:H=&2H:S='2S÷&:S='2S  >0w+&P>+2E:Gx2:I4'*1~#"1-G'2EG'G'*1:HO ~)'*1:HO +:Ls(*J:Lf'#:SO +"9:'<2>0w+:S=2So'*(;(G:ʝ'=2È':Sʳ'p"7+:S=2Sˆ':H'*(;(0ʳ'>2ó':LO!' ^#V''PP'(*9#'*7+:EwP*9(mp loop quit: finis outp EXIT LHLD STACK SPHL RET DS 50 ;STACK STACK DW 0 buffers EQU $ end pi eof jz quit cmp b mov b,a jnz cont cpi 0dh jz loop ; don't duplicate any carriage returns cont: put outp j*7~0(>{(w:E-P~{$(>}&( wP:H4(>0=2H{C(>0}M(>0k(0f(:0f(: :k(>͇G>-2Ex:SO*J "9> w2:O(( (*(;( (Ú((:Sš(:H(*(;(0ʱ(>2ñ(:E-( *9~wPG:2(xG~w+(p:S=APPEND.ASM This is a simple program which is sometimes useful. It copies a to the END of . If file2 does not exist a simple copy operation is performed. It also does a fixup on a problem sometimes seen, multiple carriage returns are reduced to one. Unfortunately it needs MAC so if you don't have it get the COM file for APPEND if you can. Jack Riley (303) 499-9169 RCPM. Useage: APPEND file1 file2  SHLD STACK LXI SP,STACK file infile,inp,,1,,BSIZE file append,outp,,2,,BSIZE xra a mov b,a loop: get inp cpi eof jz quit cmp b mov b,a jnz cont cpi 0dh jz loop ; don't duplicate any carriage returns cont: put outp j  2S`F*<|̰E#"<<w¬F =¸E!;>!:øE::B::C*:|=E#"::w::< DF*>|0z{2)Ҥ)2")*)~2 )##0" )0" )!)w#)*)00")]")j")z** )*)~-*!)o._!()w! D{2%):)(._}*1)w-:%)!&)w-:%)ʡ-:)=P._*1):%)wá-!&)4á-2)+ !3)"-)"/):)!)2){2)2#):)ʞ.l0!)5^*-)w}.!#)s}.!#)5^*-)w> 2)2#)2):).͜0!)5^*/)wʷ.!#)s÷.:#) .!&)4> 2)+!#)5^*/)w> 2)G4 1:)2)z1*: )1** )*)~-.*!)4 1zʑ**)00")2)o*!)F6!)~we*#6!)~n*w‘*!)F6!)~w*#6!)~*w!3)"1)> 2!)2)* )")*)"):)2 )** )&^#V***/t-^.:)2)!)~#I+!)~#G&+͜0Ol0!%)6*!()4 +!)> 2,)2):,)!/2%)2"):%)^/:)G:,)2)> 2)P///!%)6K/ 4w3/:%)/!")4/!)^4*1):")w:)G:,)2)> 2)2%)///!%)6/wÀ/!,)4/:)2!)> 2)!!)5+^*1)~*)+")wì/*)+")*-)~*)+")*/)N !%)4:)0l00!() !%)4!)^+s*1)w*!&)_:%)w*:%)+!)^A+s*1)6+!&)w+!)~#ʡ+͜0Gl0!%)N6!')qn+ !%)4v+!()4!)^+5*1)wI+G:')ʓ+> Ox2')!&)wI+:%)+:)2): )Y- !$)6*1) :)G +y+^:$)+{ /<++ /2)~|,~|,##~|,>2%)~|,! )4|,:)y0=2):)=2)*)+")* )~00 >Ç:)ʩ0=2):)=2)*)+")* )~00 0:)0=2):)=2)O!!)>G*1) ~V#^#0{gr,~),~,! )4*)~|,!)4|,##~7,!%)4~C,!)4~O,! )400|2)}2 )0"): )!)w#6|,~|,!)4:)2!)> 2): )š,!):)2)w:),:)>+ʬ,>-G:&)> ·,x*)*)w:%),0,2%)! )5,0!%)6 ,4 *)+")*)0w,!))))zo +>Ç~W#^#>"7"9*7͉1 PGz21p#21~W#~2_#>"7"9*7:x1C>'2{1n:P*9-1:1=1211> *1~#"1!1"1++  :1Õ11P FPfP!JQ !qNKBAD MODE (BUILD). P!.5~!!)-_*1)~!%)6!&)w:&)(->2*)~H-~H-: )H-"):)2)§):()d-n-2(- !3)w#z-:)!)2):)2)):)2*):)2+)>!2!):)W.!!)5~2)2%)l02")ʡ-:))2):*)2):+)2):)4.͜0_:")o&C:%)G!)5-^*1)~._QV#PP!*QV#P_XO> +9202yyg2xW2^#H2 Oyg2?2 =q2  *BQ"BQ Q C BO͢P!4Q #r#s#PTOQ>23Q*BQ">Q! ##ͯPQ  ͉Q͉Q!O":Q>23Q͉Q!4Q":@Q ͉Q >23Q͉QCOBLIBQ CzQBzQP*>23QQO͢P P P *EQ"EQ͢PͯPQP>23Q͢PͯPQQ0PG:DQx vQ2DQ͚P*EQ+"EQ*EQ|}xP+>2DQ*BQz/W{/_!>4{=*2|8DM:*2q#p22w;F+N22:*2,,*2OG(8(8r+s22*2DM:7BK*2:a3ʕ8 ̓B8.7*2#~.7172a3*2###~ >ʢ8*2"C.7bk:2³8p# ³8G:28xV8=747:29:29>2a3*2^#Vr+s*2V8 9:n3yOxG}o|g=3|W}_hb)&4 )+4 )04 )54 ):4 )?4 )D4 )I4 DM>͈>:2l4IA8 x\4;A89*2YN#F#^#V*2s#r*2^#Vx“4yʞ4p+qPY*28*2DM«4*_3*2~#fo>2a3<ʺ5x44+w#ö4>͈>*2PN#F###^#V#:24:24*2### 9*2~ 17*2w#BK*2̓B.7*2#~.717?9>2a3*2^ :]3w#:^3w*2~w*k3*2' :a3w6 :n3w*2:n3 o:DM*2*2s#r:n3ʬ9z¬9*2|9>9*2#x+»9y9PY:29*2V89:n39*2~ 17*2q#p99:a3*2^#V*22q#p#s#r͢<*2*_3~39#z5*2"V#^+r#s*]3A4>͈>:2> m4-A89> ͈>͢<39z2m3i5#4h5+4>͈>:m3~5RA~47*2+*2" r#s=9>͈>-A*2#"289͈>-A:2˜5> 8> 8;A89>͈>(;89>͈>(;͢<39> 6> 5z2m3>͈>(;:m35x47=9a39 *]33yG>O! BK:2_3 :2OS4*2 *2~G:#~+m::2a:^#V*29>22*2s#r*2BK͒8*2DM!xʋ:H4A yʙ:4 xʩ:HS4 S4y_xO>WG{_)}:o #u=^#Vz;#^#Vr+s##N#Fx::D7:r+s##4*2r+s=9>͈>(;-A89͈>*2b2:2G:7;6#*6:7(;-A*2`*2s#r#2:2Gw#X689###~>y6~>y6@#w#w)w#‡6ZA_###~?w+++{0x0"7> ͈>!'~!`6P N#F̓B60#~+0"7 7"C^N#Fq#p;#42\3"2BK:*2##N#Fp+q##:>222\3*b3DM;u=N#F`i"d3:n3;x<`i"2:D7 <:n3ʓ777*2N#F*2Vq#p:n3:\3×;*29:2ª;*2^#V*29*2+DM*]33yG>Oo: :2O 9*2$;u=^#V"2$%|=7DM:p;*2`^#V̓B"7!`̓B!̓B͠C_00$#"!S9!2:2O# K7:2_3y22PY3zu7 *2 ?3`i"]3*23zPY*2w#˜7^w#Vw#^#Vu=:2#!8:2!8r+s2\3u=*2~s#~r222\3###~#7~7p+q##^#Vr+sz8"2!A< N#FxR;:n39<:m3=47{=*3DM>2m3w;47{=:DM:!2:2O~# Q  x=<2&o:2Z=eo 3=@ := A= H=x O= V= ]=q d==+="b3*2 !"3"2"2"g3!2:2OGO! 3>w#Ÿ=!2w# ©= !"i3DM:*g3|=*]3"g3|:2==}2f3*2:2O= =I>D7>! 3G7B B >8B=>=w>AB# -B+w 8B4DM!,q#p! O~XB<GyO!(q#p<>ȯ<>ȯ*C!~0 C##~Cy2CxOo&~C*Cq B*C:CBB>B*I>w# >*i3"3*2?>!2G7I>w# !>*i3"2og"2ʁ>*3zI>{ʁ>R>*2 ~+h>~ڀ>*g3+"g3!f35*i3#"i3=÷=*32n3"2!9"k3!~22V#^"2!^#V"_3!?"2"2"2^#V"2!~2a3+~ @@>w2a3l?*2#~0ʥ?C~B>>*C yxGyO4~ʅC6~ fC%!4p!(<„CH"Cq`(##F#N#~C##xCy=COGyO~w#~wP>C2D|D|H?*2w#??*26#:2w#:2w#*2# ~22U7C*296??*26#:2w#:2w}#w Z?*29Ì?*28*2#~0ʥ?ʬ?*2~.7*2~#~#>?*2?*2~.7]T w# ¾?8!"2:n3?*2`:2Gw#?>*2*2P 6#p#pDDM!>))D D= D:DB|G||/D|/G}/O!>JD ID7>{_zW}o|g=@D|g}o''PP'(*9#'*7+:EwP*9(*7~0(>{(w:E-P~{$(>}&( wP:H4(>0=2H{C(>0}M(>0k(0f(:0f(: :k(>͇G>-2Ex#p#s#r#6#p#w:n3 *2P"2"2"2"2~22O@һ@:n3*2~#ng"2!"b3*2###~22U7{22:n3*2$N#F~_*~#fo #*2 F:2.7O2~#£@yʷ@ ±@=*2"~#ng"217*2+~+ng"]3:n3A|@@}@:n347"]3vEwP*9(*7~0(>{(w:E-P~{$(>}&( wP:H4(>0=2H{C(>0}M(>0k(0f(:0f(: :k(>͇G>-2Ex:EwP*9(*7~0(>{(w:E-P~{$(>}&( wP:H4(>0=2H{C(>0}M(>0k(0f(:0f(: :k(>͇G>-2Ex9RA:n3A~77~47|!A}:n3=7"]3IA8 x0A*2s#r>2a3*2DM*_3*2~#fo!$:>zA@yA>w#.ʚAw#~A.ʡA ‹AáA6 #šAw#£Aw#®A!~O%xByfB<>!~+++A4ADM!8!   UP.COM .032 .036 .043 .073 FOR.COM .021 (etc.) This program does NOT make any additional file, it merely prints the MAST.CAT file to the normal printer output.  Irvin M. Hoff Los Altos Hills, CA 94022 4 July 82LISTCAT.COM -- WRITTEN BY DAVID ALTEKRUSE (W6RAW) IN COBOL, THEN COMPILED TO AN ABSOLUTE FILE. WORKS DIRECTLY FROM "MAST.CAT" FILE TO PRINT A CATALOG LISTING. ASKS FOR THE CURRENT DATE, PAGINATES. CAN ACCEPT ANY LENGTH MAST.CAT FILE, NOT LIMITED IN ANY MANNER BY MEMORY AMOUNT OR NUMBER OF ENTRIES IN THE MAST.CAT FILE. CAN USE NAME AND NUMBER BOTH FOR "VOLUMNE NUMBER" FILE, PRINTS UP TO 12 CHARACTERS FOR EACH DISK HAVING THE SAME FILE. EXAMPLE: BASCOM53.COM BASIC.041 BASIC.043 BASIC.068 BASIC.123 BAUD3.ASM .058 BYE.ASM .064 CATALOG.DOC CATALOG.033 CATALOG.070 DUMP.ASM UTILITY.046 UTILITY.047 UTILITY.055 UTILITY.059 UTILITY.087 UTILITY.096 DUUP.DOC .044 DU  4 Ver:1.0 Copyright (c) 1982 Gary P. Novosielski !91!~2 y+~# #~ A}2lCˆ2lD“2lEž2lM©2lP´2lU¿2l02l12l22l2  Op'ylIrP$z}Anu.s_g/b#^m)AsRc[\~τ FH eF嶄"w>~sً:wK}FN}M_'o>7./b#RS%mz0/b#R-wz0/b#RPNo0/FY^%ȧH3/Q.b#,%d|B_"w$ Aw!%*Yl$QWtion "" not valid.$...CANCELED$::ڐ:?Ґ:ڐ: ڐ:.ڐ:Gڐ:Ĉڐ:9ڐ:?9Ґ:Ĝڐ<ʵ!5+6<ʵÍ Error accessing .SUB file.$!]>? #  is a string of single-character options with no intervening or trailing blanks. The option list must be separated from the preceding parameters by at least one blank, and mustarameters supplied, or the status of files on the disks when the jobstream is submitted. THE //IF COMMAND: Syntax: (Square brackets indicate optional parameters) //IF [parm1 [parm2]] [:options] where:  always begin with a colon (:) to identify it as the option list, and prevent it from being confused with parm1 or parm2 if one or both are omitted. The entire option list may also be omitted, in which case the idis a standard CP/M file reference either entered literally, or supplied by Submit parameter substitution. The syntax is the normal D:FILENAME.EXT form. If either Filename or Extension are not entered Page entifying colon should not be entered. The ordering of the options within the list is not significant. The option list is really a set of tests to be performed upon the first parameter, parm1. (Parm1 is assumed to be the 1. 82-06-10 The //IF command DOCUMENTATION FOR //IF.COM AND //SKIP.COM they default to blanks. If the Drive is not entered, the current drive is assumed. If the name or extension co name of a file, but may in fact be any text at all, as long as it conforms to the syntax for a valid file reference.) If the tests are passed, the //IF command does nothing at all, and the next line in the submit file is processed normally. ntain question mark (?) or asterisk (*) characters, the file reference is said to be ambiguous. Otherwise it is unambiguous. is an optional second filespec used by some of the options described below. The defaul If however, any of the specified option tests fails, the //IF command modifies the submit control file (A:$$$.SUB) to Page 2. 82-06-10 The //IF command DOCUMENTATION FOR //IF.COM AND //SKIP.COM    skip over the next command in the file. Command processing then continues with the line after the one which was skipped, if any. If two mutually exclusive options are included in the option list, the following line will never1 exists in the directory but contains no data. If Parm1 is ambiguous the test fails. Page 3. 82-06-10 The //IF command DOCUMENTATION FOR //IF.COM AND //SKIP.COM D Drive sub be executed. Explanation of option characters: A Ambiguous: True if parm1 is an ambiguous file reference. False otherwise. The A option does not test to see if a file or files exists. For example the stitution: This option is not really a test, and cannot fail as such. It causes whatever drive has been entered in parm2 to be moved into parm1 before any testing is done on parm1. For example if parm1 were A:TEST.FIL parameter *.ASM will pass the A test regardless of whether there are any .ASM files on the disk. U Unambiguous: True if parm1 is an unambiguous file reference. False otherwise. P Present: True if at least one fi and parm2 were B: all the remaining options would treat parm1 as if it had been B:TEST.FIL. If parm2 is blank, or does not contain a drive spec, parm1 is modified to remove any explicit drive spec. Parm1 then refele exists which matches the specification given in parm1. Parm1 may be ambiguous (unless of course the U option appears in the list) M Missing: True if there exists no file which matches the specification girs to the default drive. Note again that the order of the options makes no difference to the program. The D option is always performed before any other tests, even if it occurs at the end of the option list. ven in parm1. Parm1 may be ambiguous. C Contents: True if the file referenced by parm1 exists and contains at least one record (sector). If Parm1 is ambiguous the test fails. E Empty: True if the file referenced by parm The following three options are matching tests. They match portions of parm1 against the corresponding portions of parm2. 0 Matches the drivespec portions of parm1 and parm2. Tests true if the same drive is referred to   by both. Note that if one of the drives is explicit and the other is defaulted, the test will pass or not depending upon whether the explicit drive is in fact the current default drive. If both parm1 and parm2 are entered following the word //IF on the command line. If the remainder of the line (after Submit parameter substitution) is blank, the test fails. If any non-blank character appears on the line, the test  missing, this test will pass, since both parameters refer by default to the current drive. 1 Matches the filename portion of parm1 and parm2. Tests true if the filenames match or are both missing. If either passes. For example the line //IF $1 tests to see if parameter number $1 was defined on the Submit command line. If it was not, the line after substitution becomes just "//IF ", and the test fails.  or both of the filenames are ambiguous, the Page 4. 82-06-10 The //IF command DOCUMENTATION FOR //IF.COM AND //SKIP.COM ambiguous characters are considered to match the corresError Messages: The following error messages indicate fatal errors in processing. The remainder of the submit file is not processed, and control returns to the console. Option "X" not valid....CANCELED Page 5. 82-ponding portion of the other name. For example if parm2 is * this test will always pass. Note that only the first 8 characters of the names are tested. 2 Matches the extension (filetype) portion of parm1 and parm2. Same06-10 The //IF command DOCUMENTATION FOR //IF.COM AND //SKIP.COM A character appears in the option list which is not one of those defined above. Error accessing .SUB file....CANCELED  as option 1 except that only the three characters after the period of each parameter are tested. No option list: If the option list is omitted entirely, the //IF command merely tests to see if anything was  The file A:$$$.SUB could not be found, or could not be closed, by the //IF program. This error can also occur if //IF is run from the console rather than within a submit file, or if //IF is the last line in a submit file;    i.e. there is no next line to skip when a test fails. Page 6. 82-06-10 The //IF command DOCUMENTATION FOR //IF.COM AND //SKIP.Che argument is 0, //SKIP does nothing at all. Error Messages: The following error messages indicate fatal errors in processing. The remainder of the submit file is not processed, and control returns to the console. OM THE //SKIP COMMAND: The skip command is used to unconditionally skip over any number of lines within a Submit file. Normally it is used as the line immediately following an //IF command. In this way the testing capabilities of / Page 7. 82-06-10 The //SKIP command DOCUMENTATION FOR //IF.COM AND //SKIP.COM Error accessing .SUB file....CANCELED The file A:$$$.SUB could not be found, or could not be closed, by/IF can be extended to apply to more than one line of the file. //SKIP can also be used to implement IF...THEN...ELSE structures within Submit files. Syntax: (Square brackets indicate optional parameter.) //SKIP [number] where:  the //SKIP program. This error can also occur if //SKIP is typed directly from the console rather than within a submit file. //SKIP argument not numeric....CANCELLED The parameter contains characters other than is a decimal integer in the range 0-127 which indicates the number of lines in the submit file to be skipped. If omitted, the number 1 is assumed. The number must be separated from the //SKIP command by a 0 to 9. //SKIP argument exceeds file size....CANCELLED An attempt was made to skip over more lines than there are remaining in the A:$$$.SUB file. Page 8. 82-06-10 t least one space, and may not have any trailing spaces. //Skip operates by evaluating the argument and, if it is greater than zero, modifying the file A:$$$.SUB to cause the system to ignore the indicated number of lines. If t The //SKIP command DOCUMENTATION FOR //IF.COM AND //SKIP.COM USAGE EXAMPLES: Example 1: The following Submit file will assemble and load a source file. The file name is indicated as the first p  arameter. If the second parameter is EDIT, the file will first be edited. Some error checking is done. Note the use of lines beginning with a semicolon to supply messages to the operator. CP/M treats such lines as comments. The line n0 and 2 options are extra insurance that the drive and filetype are blank Line 6: If the test is passed the file is edited with a filetype of .ASM Line 7: The file is tested to see if it contains data. This helps insure that theumbers are for reference purposes, and are not part of the file. [1] //IF $1 :U2 [2] //SKIP 2 [3] ;PARAMETER 1 NOT VALID [4] ERA A:$$$$$$.SUB [5] //IF EDIT $2 :U012 [6] ED $1.ASM [7] //IF $1.ASM :C [8] ASM $1 [9]  editor terminated normally. Line 8: If the test is passed, the file is assembled. Line 9: The .HEX file is tested for contents to help insure that the assembler terminated normally Line 10: If the .HEX file is present, //IF $1.HEX :C [10] LOAD $1 Notes: Line 1: Tests that parameter 1 is unambiguous and has a filetype of all blanks. Parameter 2 is missing, and is treated as blanks for the comparison. Line 2: If the test is pass the file is LOADed to produce a .COM file. Page 10. 82-06-10 Usage Examples DOCUMENTATION FOR //IF.COM AND //SKIP.COM Example 2: The followed, lines 3 and 4 are skipped. Line 3: The operator is informed of an error condition Page 9. 82-06-10 Usage Examples DOCUMENTATION FOR //IF.COM AND //SKIP.COM Line 4: The submiing is a skeleton example of how //IF and //SKIP can be used to form an IF....THEN....ELSE structure. <--------------------------------------> <--------- prior submit lines ---------> <--------------------------------------> //It file is aborted by erasing A:$$$.SUB. Since $ is a special character to SUBMIT, each one must be represented by two in the source file. Line 5: The second parameter is tested to see if it is equal to the word "EDIT". The F : //SKIP m <--------------------------------------> <---- m-1 lines to be executed---------> <---- if test is FALSE ----------------> <--------------------------------------> //SKIP n <------------!  --------------------------> <---- n lines to be executed ----------> <---- if test is TRUE------------------> <--------------------------------------> <---- remainder of submit file to -----> <---- be executed unconditionally -----> <----slightly unorthodox. Page 12. 82-06-10 Usage Examples DOCUMENTATION FOR //IF.COM AND //SKIP.COM PROGRAM NOTES: ----------------------------------> Notes: The //IF condition tests whatever combination of options is desired. If the conditions are not met, the //SKIP immediately below is not executed. Instead, control passes throu The program is written for the 8080 processor and should execute properly on 8080, 8085, and Z-80 processors. It has been tested under CP/M80 version 2.2, but should operate properly with 2.1, 2.0 and 1.4 also. There is a minor diffgh to the lines to be executed if the test is false, in effect the ELSE section. The last line of the ELSE section is another //SKIP which skips past the THEN section Page 11. 82-06-10 Usage Examples erence in the operation of the C option depending on the version used. If the operating system identifies itself as version 2.0 or above (as determined by a call to Function 12) the C option will use Function 35, "Compute File Size" DOCUMENTATION FOR //IF.COM AND //SKIP.COM (those lines to be executed if the test is true) and executes the remainder of the file. If the //IF test is true, the first //SKIP statement skips over the ELSE section. The  in order to determine if the file contains any records. If the version test shows that the operating system is pre-version-2, the C option test merely tries to read the first record of the file. The only time this would make a dvalue m is chosen so that the last line skipped over is the second //SKIP statement. It takes some time to get used to seeing a structure where the ELSE comes between the IF and the THEN, but the structure is no less valid for being ifference is on a Random file which happens to have no records in the first extent. The sequential read would fail, but the Compute File Size function would properly report the existence of records in the file. While sequential files wi"  ll test correctly on any version, files which have been created randomly should not be tested for contents on CP/M 1.4 or earlier. I would appreciate being informed of any bugs found in either program, or suggestions for expansion or improvement. Gary P. Novosielski 21 W. Pierrepont Avenue Rutherford, NJ 07070 Page 13. 82-06-10 Program Notes nt Avenue Ruherford, NJ 07070 Page 13. 82-06-10 Program Notes nt Avenue RuCATFILBODOCLISTCAT COM IFSKIP DOC !"#$%&APPEND DOC#  v?@ACBDEGUކcXy3~Ѡcs7ssQU}}Ҝ׏1[%9)::kն ez3l"USΰy+sHaFU'#xsi.c5:D" ,E,#p2]T,3sac_m*z }mDħ-~y_y`bGOיKsYti_㽢/eiac_}ԸA#Z۬wi.$`%)?K4̂h }2뛨۬F +=ݜA&e75۬!>Osi6Rcj59$u>U)G6${x9$ŏڻh;#5JGYs=52g?){*6/|D %RG\(ؠ_;\t xA% re\$ѵ͂ۜQWʂۜ͂ۜOt R/]Sq}}PӜQWZ$e<ڮ$Dw0c΀9ͥ >" p/$onG$aTY:MՈW1u}H_\{4ŵwb>" Sm7 zKs똫h;#5R_-9Pvc.ynу#e;U<1aÈFj.͙g![LJm)kGy?A/Z.(_ɰ ۬ŵGZH}O?k/(,Nլ?41|s^A -HE5?F5k6Yx̕wsQǟO⹎9$uiC&2 ǕѨ9,Y,9By =h(x#*ls;wӁ6*oD`{PoRe8^TpW^i㌵s;/Gw !>mnHys8jy7A@ީ aV7"54'>m -0hJ0U*VC\Va 䒔`A}LYVaҜrbAʾoDW Y99,uZ}gFR߈T KSLj^yKLY@ 0svNR}u}HY Y񭦦}4tĜ׏1ns;8jjڈ^${x w 42=Jrx=&R5j>U Ǹ2cۜN!E 5gDЧ aW9B`.ͻ?}b=:9cw )R6x=&R5[*=Ƴ]0Sh̥? 1gIOM^g 15͜W35K}sOR9+69P|!eQSB8.5؈Ҝrb!*<Y_V 6fy1&j@J }hI<0sfϟ?x=&RwLm"9ã|B?^R`jۚC|ԬQ\nŤ|bmVssJ}i<sU̟ͯ۬ЏbkKT}߈U Ǹ2cۜN!!w P= .9fnyd_Y(Gsi_?4ҜOt@p]kKs?)&}~9B#Tς $`{fnsހ -~6\ment exceeds file size.$ f1 ...CANCELED$og~ #C|}}o|g0:?DM ) )$$$ SUBf<ʴ:uo&Q}2u2tf<ʴError accessing .SUB file.$//SKIP argument not numeric.$//SKIP argu%  spec1 filspec2 to merge filspec1 to the end of filspec2. Further information is contained in APPEND.DOC. Note that CP/M's PIP may be used for the same function. Also, see COMBINE on FOG/UTL.003. AUTOMODD is a double-density compatible version of AUTOMOD found on FOG/UTL.009. This will setup a command line to be executed upon each cold and/or warm start. Refer to AUTOMOD.DOC on FOG/UTL.009 for instructions. CAT2 is part of the CATALOG system found on FOG/UTL.002. It may be used to display all MAST.CAT master catalog entries in the alphabetized format filename diskname1, diskname2, ... identifying each of several disks containing the same file. To use, place CAT2.COM and MAST.CAT in drive A. At the A> prompt, type  CAT2 Also, see CROSSREF on FOG/UTL.002 and XCAT36 on FOG/UTL.012. CATFILBO will read the master catalog MAST.CAT file, strip all "ignore" names, and copy all of the remaining information to a file called TEMP.CAT with comma delimited fiel DISK.DOC FOG/UTL.023 First Osborne Group (FOG) Utilities Disk APPEND will concatenate one text file onto the end of another. Place APPEND.COM in drive A. At the A> prompt, type APPEND filds. The result is compatible with SuperSort, MailMerge, BASIC, etc. Place CATFILBO.COM and MAST.CAT in drive A. At the A> prompt, type CATFILBO Refer to CATFILBO.DOC. FNDBD541 is an update of FINDBAD found on FOG/UTL.005&  . Its function is to locate and isolate bad disk sectors. This version is modified to skip system tracks (which may be necessary with double- density disks) and to allocate bad blocks to the file [UNUSED].BAD in USER 15. To run, place the disk to be tested in drive B and FNDBD541.COM in drive A. At the A> prompt, type FNDBD541 B: Also, see FINDBAD.DOC. The above files were received from the Denver Osborne Group (DOG). IF and SKIP permit conditional execution of lines in a SUBMIT file. Refer to IFSKIP.DOC for detailed instructions. LISTCAT will print a catalog of your disk library maintained by the CATALOG system found on FOG/UTL.002 and .012. Place your MAST.CAT catalog file in drive A and LISTCAT.COM in drive B.  At the A> prompt, type B:LISTCAT Make sure your printer is turned on. Refer to LISTCAT.DOC. Also, see CROSSREF on FOG/UTL.002 and CAT2 on this disk. Squeezed assembly language .AQM files may be unsqueezed using utilities found on FOG/UTL.003, .004, and .014. Jim Woolley FOG Disk Librarian May 1983 '   --> FILE: -FOG/UTL.023 CRC = 00 00 --> FILE: APPEND .AQM CRC = 29 54 --> FILE: APPEND .COM CRC = 97 C7 --> FILE: APPEND .DOC CRC = C4 71 --> FILE: AUTOMODD.AQM CRC = A5 68 --> FILE: AUTOMODD.COM CRC = F5 27 --> FILE: CAT2 .COM CRC = 9A 34 --> FILE: CATFILBO.AQM CRC = D4 35 --> FILE: CATFILBO.COM CRC = 6B 16 --> FILE: CATFILBO.DOC CRC = 62 99 --> FILE: DISK .DOC CRC = FB DF --> FILE: FINDBAD .DOC CRC = 59 80 --> FILE: FNDBD541.COM CRC = E7 CF --> FILE: IF .AQM CRC = 11 53 --> FILE: IF .COM CRC = 0E 56 --> FILE: IFSKIP .DOC CRC = 2D 12 --> FILE: LISTCAT .COM CRC = 62 6D --> FILE: LISTCAT .DOC CRC = D2 B3 --> FILE: SKIP .AQM CRC = 5C 2B --> FILE: SKIP .COM CRC = DA 01 ---------------------> SUM OF CRCS = 51 68  --> FILE: LISTCAT .COM CRC = 62 6D --> FILE: LISTCAT .DOC CRC = D2 B3 --> FILE: SKIP .AQM CRC = 5C 2B --> FI