IMD 1.16: 31/05/2007 20:02:17 FOGCPM.113 ååååååååååååååå--FOGCPM113CBIOSDEFHQ RUNTIME ASM] RUNTIME TXTSTDLIB ASM€ !"#STDLIB ASM>$%&'()*+-CPM115 DOC¯°±²-07-00 86 «STDLIB20DOC ,-STDLIB20TXT./0C DOC1234C-LANG2 DOC5CCREF COM}6789:;<=>?@ABCDECCREF DOCFGGREP COMPHIJKLMNOPQGREP DOCRSTGREP C @UVWXYZ[\TOOLS CQ N]^_`abcdefTOOLS H ghijPROBE102COM€klmnopqrstuvwxyzPROBE102COM{-CPM113 DOC¬­®PROBE102DOC6|}~€�‚ASCTOBINCQ ƒBDOSDEF HQ „…†FUNCTIONASM‡ˆ‰PROBE102CQ cŠ‹Œ�Ž��‘’“”•–PROBE102SUB—PROBE102UPD˜™šPROBSDPBCQ R›œ�žŸ ¡¢£¤¥PROBSERNCQ ¦§¨PROBSIGNCQ ©ªåThis is the disk name. ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååvÿ§CBIOSDEF.HTßÿ šÿÐÿÕÿ‹ÿ–ÿ�ÿ›ÿŒÿ�ÿ‘ÿœÿõÿžÿòÿ™ÿ !"#$%&oÿ“ÿÍÿÜÿ¤ÿ¢ÿŠÿ’ÿÎÿùÿºÿ'()*+,-./0123¬ÿöÿ°ÿ«ÿ�ÿ²ÿ—ÿ‰ÿ†ÿ¼ÿ¶ÿ”ÿ�ÿÌÿ456789:;<=>?­ÿ³ÿ±ÿ»ÿ‡ÿøÿ˜ÿÏÿ¯ÿªÿ¾ÿ@ABCDEFGHIJKLûÿËÿÇÿÆÿ½ÿ©ÿˆÿÊÿÉÿÈÿÒÿ§ÿÑÿ´ÿ×ÿÔÿ·ÿ¨ÿÖÿÂÿ¹ÿ¦ÿ•ÿMNO…ÿóÿPQRSåÿãÿâÿáÿÅÿÄÿ¸ÿÿþŒW,ÆQü{ÿ갘ᚲtRHë Šq–ãÅKa>Ÿ3ŽGC«öl�áÓ ¾‚³æó9ãð¶ÔˆNãMT=ŒˆJ j­È2à,…ZS–Žðj±X¢xv�â–q4C‹¨”Ü6¤YÙÞ–FD%`vFP�ÒF ÎR¨5eéß_-KŠ[ÆÑT-¢RrKØ�"de{¼‰ª‡Q p–B )ÌçsÆñhHcµÃþ�­1|ºÁWp–Â|>gÒ�:Ál'N�€¦­ô„è=ÎR¨5eéûÅÕl  BqË8šs ¿!D¶ Þ:cK‚ßD½ EQïÀY µ¦,a¿¸:\8£¸eÍ󊢆·ÎØ’à7QE/HA:p–B­)KGØ/®�Kà9Š[ÆÑ¼mñFIAðÖ[ü&ªè)ØN€³jMY:Âåa¶Dñì-Š[ÆÑ¼kñFIA(¥д•žà7QE/HÁvœ¥PkÊÒ¯öß¼CqË8š÷-Þ()§Îù 4m¥'øMTÑ R°�g)Ôš²t„‹éézºÞ£¸eÍ‹Š¢†¢¨IAÓVz‚ßD½ éÀY )¤0ŸÏÇ£!�Õû¶Æðé_ÁY óùœqôÑaU¼#hÚJOˆÞ“1à,…ZS–Žðm±žP<{�â–q4/[ôvKBEÄ=¬ƒ¡’¼ -Íœ¥PkÊÒfÓåõì3ðÅ-ãh†û†JòZš#´’[g)Ôš²t„Ù´\^|†{#ãh†¡…!¡¢?ÂuýŠ8K¡Ö”¥#̦ålÚÀbdÍPµ0$`È «àº~E œ¥PkÊÒfÓòzý Š‘q4ù…!ÝGD­ÎR¨5eéÓÓ5ŠgÃÅÈ8šáy‹7J ‚¡’¼ C^XÎR¨5eéß/Ë ÀðÅÈ8šám‹7J ‚¡’¼ C^XÎRH!…ù|Î8¢Ö¤±ÚaÿÀÖ¨>ÝÜ€³jMY:Âåa¶œ-�á-Š‘q4û~CþˆlJi4m¥'8+°êÌœ¥PkÊÒfÓ~yñt…ኑq4ÃûBEgÊ(¥½“>–§ÍÎHKòÂ*p–B )ÌçsƵ&�Õû¶þŠ/çO77?ð% ”�€±=ý€¦9-Ý8Ka>Ÿ3ë 6„LQtŠ ¤óV�¬Š‚4V;˜�ÔC:Aw* «ÀY µ¦,a¿¸ZÌ–ÀðÅÈ8šáE ¿!„íÄ©0"ŠÎÀfxëŒ- œ¥PkÊÒž?fK`x�bdÍð²…ß�?BºS'`D��͈Ý�,eT;hÚJOà,…ZS–Žðôøq1[ÃK#ãhªû~CþÛ‰S'`D��͈Ý�,eT;hÚJOà,…ZS–Žp=½^¾ºª{#ãhª¡Å D­›á7QE/HA2 W%�³jMY:ÂõôúpuªÅÈ8šªj!�2–ò/‚ßD½ É,4m¥'ÎR¨5eéׯ—¯.�ªB12ަ:·¸#�¨µ"c`3´4Gh%·W%�³jMY:ÂúñryXÕÅÈ8šêy C®ëW¤`3ú®òÃûC^XeÀY µ¦,á×åãì€ê9Š‘q4ÕÛ¹ìÌkV]Τð¥3¤>˜ît*%i¬Jë�ÒÝ�³jMY:ÂzñzBñ¬z‹bdMõ®EO½U»Â~è©·j‡Uiý½Ý8K¡Ö”¥#,ë ųꊑq4Õûw$` Ù|iýœ¥PkÊÒfÓåzZÕ{#ãhª- ôÔ[µÃ*º#>|@\[v‚ÀY µ¦,a6-_]}ª(FÆÑT/[è©·j‡UtGd«àèFàzý„Þn œ¥PkÊÒ>®¯'ÕK#ãhÎ÷- ôÔ[µÃ*º#\ׯHd«àèF ·[‚�e ÎR¨5eé�³éâ€ó=Š‘q4ç¡…"CjKÙ*˜�ÔãNEa8K¡Ö”¥#\L³éâõ€ó€bd͹j¡È�Ú’F¶ ¹�"t†ÀY µ¦,ábšM¯+œ+#ãhÎçŠ ©-id«�;Ñ)Bgœ¥�B óùœq`ýÀÖ8ðñ°˜ÁDzğ®?ÁuýŠ”A¶eißüœ¥PkÊÒfÓåzZ/.~£¸Þ£G3¼h1£’¼@O½U;ºëÉ p–B­)KGxX\^^O¯û Å8¼@12ŽfxÙâš¶ÒlYJwÎR¨5eé³åÓÅr¹ØF1/QŒŒ£©î[ÌDT¾´þÎR¨5eé³åâa¹ØFq[Ý£GS -fžàKë�à,…ZS–Ž0}<,/¦ÿW(Æj@12ަªZL7RÀ+)¤�%ÝIëÀY µ¦,aýôq¿¸š-.'cU¡GS�[¬ã�ì»Þ:cK‚ëú)ø ù#8K¡Ö”¥#Ì~Ï–ÓúpuX¢«3Š‘q4Õóv¶3‚zH'…Œ¥ü+ i¼-5VÖ p–B­)KG8\_N(þ®ž£GS½m±8 i],!uI8)ëIwŠÀY ÿ)¤�B )¤�‚g)¤€âÙI(üÄ»ÿ¢ø'ã0$p ÂâÕõb†?]BÔZ‘1à,Ï^ikð_øIü?n&ÍóÑë![ s#r!@ å~#foëás#r!@ ^#Vr+sënå!@ ^#Vr+së–Žp=½^¾ºª{#ãhª¡Å D­›á7QE/HA2 W%�³jMY:ÂõôúpuªÅÈ8šªj!�2–ò/‚ßD½ É,4m¥'ÎR¨5eéׯ—¯.�ªB12ަ:·¸#�¨µ"c`3´4Gh%·W%�³jMY:ÂúñryXÕÅÈ8šêy C®ëW¤`3ú®òÃûC^XeÀY µ¦,á×åãì€ê9Š‘q4ÕÛ¹ìÌkV]Τð¥3¤>˜ît*%i¬Jë�ÒÝ�³jMY:ÂzñzBñ¬z‹bdMõ®EO½U»Â~è©·j‡Uiý½Ý8K¡Ö”¥#,ë ųꊑq4Õûw$` Ù|iýœ¥PkÊÒfÓåzZÕ{#ãhª- ôÔ[µÃ*º#>|@\[v‚ÀY µ¦,a6-_]}ª(FÆÑT/[è©·j‡UtGd«àèFàzý„Þn œ¥PkÊÒ>®¯'ÕK#ãhÎ÷- ôÔ[µÃ*º#\ׯHd«àèF ·[‚�e ÎR¨5eé�³éâ€ó=Š‘q4ç¡…"CjKÙ*˜�ÔãNEa8K¡Ö”¥#\L³éâõ€ó€bd͹j¡È�Ú’F¶ ¹�"t†ÀY µ¦,ábšM¯+œ+#ãhÎçŠ ©-id«�;Ñ)Bgœ¥�B óùœq`ýÀÖ8ðñ°˜ÁDzğ®?ÁuýŠ”A¶eißüœ¥PkÊÒfÓåzZ/.~£¸Þ£G3¼h1£’¼@O½U;ºëÉ p–B­)KGxX\^^O¯û Å8¼@12Ž title runtime package for small "C" ram equ 0 ;start of ram in system extrn main ;******************************************************** ; * ; run time libray for small c compiler * ; * ; by Ron Cain * ; * ;******************************************************** ; ; fetch a single byte from stack pointer plus ; offset of byte following call and sign extend ; into hl ; @gcharss:csect pop b ldax b mov l,a inx b mvi h,0 dad sp push b mov a,m jmp @sxt ; ; fetch a single byte from stack plus a 2 byte offset ; and sign extend byte into hl ; @gcharsl:csect pop b ldax b mov l,a inx b ldax b mov h,a inx h dad sp push b mov a,m jmp @sxt ; ; fetch a single byte from address in hl and ; sign extend into hl ; @gchar: csect mov a,m jmp @sxt ; ; put the accum into hl and sign extend through h ; @sxt: csect mov l,a rlc sbb a mov h,a ret ; ; fetch a full 16-bit integer from offset plus stack pointer ; into hl ; @gintss:csect pop b ldax b mov l,a mvi h,0 inx b dad sp push b mov a,m inx h mov h,m mov l,a ret ; ; fetch a 16-bit integer from stack pointer plus ; a 16 bit offset and put value in hl ; @gintsl:csect pop b ldax b mov l,a inx b ldax b mov h,a inx b dad sp push b mov a,m inx h mov h,m mov l,a ret ; ; fetch a full 16-bit integer from the address in hl ; into hl ; @gint: csect mov a,m inx h mov h,m mov l,a ret ; ; store a byte stack plus 8 byte offset ; @pcharss:csect xchg pop b ldax b mov l,a mvi h,0 inx b dad sp mov m,e xchg push b ret ; ; store a byte at stack plus offset ; @pcharsl:csect xchg pop b ldax b mov l,a inx b ldax b mov h,a inx b dad sp mov m,e xchg push b ret ; ; store 16-bit integer at offset plus stack ; @pintss:csect xchg pop b ldax b mov l,a mvi h,0 inx b dad sp mov m,e inx h mov m,d xchg push b ret ; ; store a 16 bit integer in hl at stack plus offset ; @pintsl:csect xchg pop b ldax b mov l,a inx b ldax b mov h,a inx b dad sp mov m,e inx h mov m,d push b xchg ret ; ; store a 16-bit integer in hl at the address in de ; @pint: csect mov a,l stax d inx d mov a,h stax d ret page @incdec:csect ; ; take the address in hl and add value that follow and save back ; address in hl ; @preinc: call @incdecl call @inc nop ret ; ; take the address in hl and sub value that follow and ; save it back in place ; @predec: call @incdecl call @dec nop ret ; ; take the address in hl and sub value that follow and save ; back in address in hl and restore value to pre inc ; @postinc: call @incdecl push d call @inc pop h nop ret ; ; take the address in hl and add value that follow and ; save back in address in hl restore value pre dec ; @postdec: call @incdecl push d call @dec pop h nop ret ; ; load needed valut for inc and dec ; @incdecl: pop d pop b ldax b inx b push b push d dcx b ora a jp @incdec1 mov e,m inx h mov d,m ret @incdec1: mov e,m mov a,e rlc sbb a mov d,a ret ; ; add value in a to de and save at address in hl ; @inc: ani 07fh add e mov e,a mov a,d aci 0 mov d,a jmp @incdecs ; ; subtract value in a to de and save at address in hl ; @dec: ani 07fh cma inr a add e mov e,a mov a,d aci 0ffh mov d,a jmp @incdecs ; ; store value in de at address in hl ; @incdecs: ldax b ora a jp @incdec2 mov m,d dcx h mov m,e xchg mov a,h ora l ret @incdec2: mov m,e xchg mov a,h ora l ret page ; ; inclusive "or" hl and de into hl ; @or: csect pop b pop d push b mov a,l ora e mov l,a mov a,h ora d mov h,a ora l ret ; ; excluseive "or" hl and de into hl ; @xor: csect pop b pop d push b mov a,l xra e mov l,a mov a,h xra d mov h,a ora l ret ; ; "and" hl and de into hl ; @and: csect pop b pop d push b mov a,l ana e mov l,a mov a,h ana d mov h,a ora l ret ; ; in all the following compare routines hl is set to 1 ; if the condition is true, otherwise it is set to 0 ; ; not current condition ; @nlog: csect mov a,h ora l jnz @nlog1 lxi h,1 mov a,h ora l ret @nlog1: lxi h,0 mov a,h ora l ret page @comp: csect ; ; test if hl equal to de ; @eq: pop b pop d push b lxi b,@compret push b call @cmp rz dcx h ret ; ; test if de to hl for not equal ; @ne: pop b pop d push b lxi b,@compret push b call @cmp rnz dcx h ret ; ; test if de greater then hl (signed) ; @gt: pop b pop d push b lxi b,@compret push b xchg call @cmp rc dcx h ret ; ; test if de less then hl (signed) ; @lt: pop b pop d push b lxi b,@compret push b call @cmp rc dcx h ret ; ; test if de greater then or equal to hl (signed) ; @ge: pop b pop d push b lxi b,@compret push b call @cmp rz rnc dcx h ret ; ; test if de less than or equal to hl (signed) ; @le: pop b pop d push b lxi b,@compret push b call @cmp rz rc dcx h ret page ; ; test if de greater than hl (unsigned) ; @ugt: pop b pop d push b lxi b,@compret push b xchg call @ucmp rc dcx h ret ; ; test if de less than hl(unsigned) ; @ult: pop b pop d push b lxi b,@compret push b call @ucmp rc dcx h ret ; ; test if de greater than or equal to hl (unsigned) ; @uge: pop b pop d push b lxi b,@compret push b call @ucmp rnc dcx h ret ; ; test if de less than or equal to hl (unsigned) ; @ule: pop b pop d push b lxi b,@compret push b call @ucmp rz rc dcx h ret ; ; common routine to preform a signed compare of ; de and hl ; ; de-hl and sets the conditions: ; carry set means de < hl ; zero/non-zero set according to equality ; @cmp: mov a,e sub l mov e,a mov a,d sbb h lxi h,1 jm @cmp1 ora e ret @cmp1: ora e stc ret ; ; common routine to perform unsinged compare ; ; carry set if de less than hl ; zero/non-zero set accordingly hl=de ; @ucmp: mov a,d cmp h jnz @ucmp1 mov a,e cmp l @ucmp1: lxi h,1 ret ; ; set machine status for all comditional operators ; @compret: mov a,h ora l ret page ; ; shift de arithmetically right by hl return in hl ; @asr: csect pop b pop d push b @asr1: xchg mov a,h ral mov a,h rar mov h,a mov a,l rar mov l,a dcr e jnz @asr1 ret ; ; shift de arithmetically left by hl and return in hl ; @asl: csect pop b pop d push b @asl1: xchg dad h dcr e jnz @asl1 ret ; ; subtract hl from de and return in hl ; @sub: csect pop b pop d push b mov a,e sub l mov l,a mov a,d sbb h mov h,a ret ; ; from the two's complement of hl ; @neg: csect call @com inx h ret ; ; from the one's complement of hl ; @com: csect mov a,h cma mov h,a mov a,l cma mov l,a ret ; ; mutiply de by hl and return in hl (signed) ; @mult: csect pop b pop d push b mov b,h mov c,l lxi h,0 @mult1: mov a,c rrc jnc @mult2 dad d @mult2: xra a mov a,b rar mov b,a mov a,c rar mov c,a ora b rz xra a mov a,e ral mov e,a mov a,d ral mov d,a ora e rz jmp @mult1 ; ; divide de by hl and return quotient in hl ; return remainder in de (signed) ; @div: csect pop b pop d push b mov b,h mov c,l mov a,d xra b push psw mov a,d ora a cm @deneg mov a,b ora a cm @bcneg mvi a,16 push psw xchg lxi d,0 @div1: dad h call @rdel jz @div2 call @cmpbcde jm @div2 mov a,l ori 1 mov l,a mov a,e sub c mov e,a mov a,d sbb b mov d,a @div2: pop psw dcr a jz @div3 push psw jmp @div1 @div3: pop psw rp call @deneg xchg call @deneg xchg ret ; ; negate the integer in bc (used by divide only) ; @deneg: mov a,d cma mov d,a mov a,e cma mov e,a inx d ret ; ; negate then integer in bc (used by divide only) ; @bcneg: mov a,b cma mov b,a mov a,c cma mov c,a inx b ret ; ; roate de left one bit (used by divide only) ; @rdel: mov a,e ral mov e,a mov a,d ral mov d,a ora e ret ; ; compare bc to de (used by divide only) ; @cmpbcde: mov a,e sub c mov a,d sbb b ret ; ; used by switch to search table ; calling format form compiler ; d-pointer to table ; h-where to go if value not in table ; b- number of entry in table ; @switch:csect xthl ;get value of expresstion to check xchg ;put value in de @switch1: mov a,e cmp m ;check to see if low byte match inx h ;move pointer to next byte of data jnz @switch2 ;no nov to next entry mov a,d ;move high byte of data cmp m ;check to see if match jnz @switch2 ;yes jump to address inx h mov e,m ;get low byte of address inx h mov d,m ;get high byte of address xchg ;put address in hl pop b ;remove entry from stack pchl ;jump to needed case statement @switch2: inx h ;move pointer to next entry inx h inx h dcr b ;check to see if done with scan jnz @switch1 xthl ;get address of where to go when done pop b ;remove entry from stack pchl ;go there ; ; call a bios routine with be loaded ; bios: csect pop h pop b pop d push d push b push h lhld 1 dcx h dcx h dcx h mvi d,0 dad d dad d dad d call bios1 mov l,a mvi h,0 ret bios1: pchl ; ; call bods to do a cpm function bods(c,de) ; bdos: csect pop h pop d pop b push b push d push h jmp 5 ; ; exit back to system ; exit: csect mvi c,0 call 5 ; ; take command buffer and build pointer list @init: csect lhld 6+ram ;get pointer to high memory dcx h ;move to just below bdos sphl ;make it current stack lxi h,80h+ram ;pointer to start of command buffer mov e,m ;number of bytes in command line mvi d,0 ;make it 16 bit value dad d ;point to end of text inx h ;move past end of buffer mvi m,0 ;make end of text lxi d,cpointer ;place where pointer should place lxi h,80h+ram ;address of text string lxi b,1 ;number of arg @init2: inx h ;move pointer to next byte mov a,m ;check for end of buffer ora a ;set machine status jz @init10 ;yes call main line cpi ' ' ;is there a leading space jz @init2 ;yes mov a,l ;save pointer value stax d mov a,h inx d stax d inx d inr c ;add 1 to arg count @init3: inx h ;move to next byte mov a,m ;get byte into a ora a ;see if end of buffer jz @init10 ;yes... cpi ' ' ;check for space jnz @init3 ;no keep looking mvi m,0 ;mark as end of parm jmp @init2 ;loop for next command @init10: lxi h,cpointer-2 ;get address of pointers push b ;push argc on stack push h ;push argv on stack call main ;execute main line jmp 0 ;it just return from main exit to cpm dw @ccnull cpointer: dw @ccnull,@ccnull,@ccnull,@ccnull,@ccnull dw @ccnull,@ccnull,@ccnull,@ccnull,@ccnull dw @ccnull,@ccnull,@ccnull,@ccnull,@ccnull dw @ccnull,@ccnull,@ccnull,@ccnull,@ccnull dw @ccnull,@ccnull,@ccnull,@ccnull,@ccnull @ccnull: db 'noname',0 page @oeq equ @eq-@comp @one equ @ne-@comp @ogt equ @gt-@comp @olt equ @lt-@comp @oge equ @ge-@comp @ole equ @le-@comp @ougt equ @ugt-@comp @oult equ @ult-@comp @ouge equ @uge-@comp @oule equ @ule-@comp @oprei equ @preinc-@incdec @opred equ @predec-@incdec @oposi equ @postinc-@incdec @oposd equ @postdec-@incdec end  ;check for space jnz @init3 ;no keep looking mvi m,0 ;mark as end of parm jmp @init2 ;loop for next command @init10: lxi h,cpointer-2 ;get address of pointers push b ;push argc on stack push h ;push argv on stack call main ;execute main line jmp 0 ;it just return from main exit to cpm dw @ccnull cpointer: dw @ccnull,@ccnull,@ccnull,@ccnull,@c$EMAIÎ@GCHARSÓ @GCHARSÌ @GCHAÒ@SXÔ@GINTSÓ" @GINTSÌ/@GINÔ=@PCHARSÓB @PCHARSÌN @PINTSÓ[@PINTSÌi@PINÔx@INCDEÃ~b@OÒà @XOÒë @ANÄö @NLOÇ@COMÐ¥@ASÒ·@ASÌÈ @SUÂÒ $E @NEÇÜ@COÍá@MULÔè#@DIÖ a@SWITCÈlBIOÓŠBDOÓ£ EXIÔ¬@INIÔ±€$T Á o&9Å~Ã$R $T Á o g#9Å~Ã$R $T~Ã$R$ToŸgÉ$T "Á o&9Å~#foÉ$T/Á o g9Å~#foÉ$T=~#foÉ$T BëÁ o&9sëÅÉ$T NëÁ o g9sëÅÉ$T [ëÁ o&9s#rëÅÉ$T iëÁ o g9s#rÅëÉ$T x}|É$T 9~͢ͷÉÍ¢ÍÂÉÍ¢ÕÍ·áÉÍ¢ÕÍÂáÉÑÁ ÅÕ ·ò±^#VÉ^{ŸWÉ$T )·æƒ_zÎWÃÏæ/<ƒ_zÎÿWÃÏ ·òÛr+së|µÉsë|µÉ$R         - B O T $T àÁÑÅ}³o|²gµÉ$T ëÁÑÅ}«o|ªgµÉ$T öÁÑÅ}£o|¢gµÉ$T|µÂ !|µÉ!|µÉ$R$T9ÁÑÅ´ÅÍ™È+ÉÁÑÅ´ÅÍ™À+ÉÁÑÅ´ÅëÍ™Ø+ÉÁÑÅ´ÅÍ™Ø+ÉÁÑÅ$T9J´ÅÍ™ÈÐ+ÉÁÑÅ´ÅÍ™ÈØ+ÉÁÑÅ´ÅëÍ©Ø+ÉÁÑÅ´ÅÍ©Ø+ÉÁÑÅ´$T3„ÅÍ©Ð+ÉÁÑÅ´ÅÍ©ÈØ+É{•_zœ!ú¦³É³7Éz¼Â°{½!É|µÉ$R#,09=GKUZcgpt}��š$T·ÁÑÅë||g}oºÉ$R$T ÈÁÑÅë)ÂËÉ$R$T ÒÁÑÅ{•ozœgÉ$TÜÍá#É$R$Tá|/g}/oÉ$T#èÁÑÅDM!yÒö¯xGyO°È¯{_zW³ÈÃð$R !$T9 ÁÑÅDMz¨õz·üOx·üW>õë)Í_Ê;Ígú;}öo{‘_z˜Wñ=ÊDõÃ$$T(DñðÍOëÍOëÉz/W{/_Éx/Gy/OÉ{_zW³É{‘z˜É$R  !$37<@$Tlãë{¾#€z¾Â€#^#VëÁé###ÂnãÁé$R $TŠáÁÑÕÅå*+++Í¢o&Éé$R$T £áÑÁÅÕåÃ$T¬Í$T9±*+ù!€^#6ø!€#~·Êëþ ÊÉ}| #~·Êëþ ÂÛ6ÃÉ$T9è!öÅåÍÃ***********************$T ***noname$R"!.38;@EGIKMOQSUWY[]_acegikmoqsuw$Q9J´ÅÍ™ÈÐ+ÉÁÑÅ´ÅÍ™ÈØ+ÉÁÑÅ´ÅëÍ©Ø+ÉÁÑÅ´ÅÍ©Ø+ÉÁÑÅ´$T3„ÅÍ©Ð+ÉÁÑÅ´ÅÍ©ÈØ+É{•_zœ!ú¦³É³7Éz¼Â°{½!É|µÉ$R title small c i/o package ; ;revised by Jim Woolley, FOG Disk Librarian, 1/83 ; extrn bios bdos equ 5 ;address on entry address for bdos cpmcmd equ 80h ;address of cpm command line true equ 1 ;value for true false equ 0 ;value for false ; ; toupper ; ; function: to shift lower case character to upper ; ; calling format from "c" ; toupper(char); ; toupper:csect mov a,l ;get character to test cpi 61h ;check to see if less then 'a' rc ;yes return to caller cpi 7bh ;check to see if greater then 'z' rnc ;yes..return to caller ani 5fh ;mask off lower case bit mov l,a ;put it in reg for return ret ;return to caller ; ; tolower ; ; function: to convert character to lower case ; ; calling format from "c" ; tolower(char) ; tolower:csect mov a,l ;get character to shift to lower case cpi 'A' ;see if less then 'A' rc ;yes...return to caller cpi 'Z'+1 ;see if greater then 'Z' rnc ;yes...return to caller ori 20h ;add lower case bit mov l,a ;put chracter back in place ret ; tolowwer:csect ;compatible w/ prev. vers. jmp tolower ; ; isalpha ; ; function check to see if alpha character a-z or A-Z only ; ; calling format from "c" ; isalpha(char) ; isalpha:csect push h ;save calling arg for later call isupper ;check to see if upper case xchg ;put answer in de pop h ;get character to test back call islower ;check to see if lower case dad d ;add isupper to is lower answer ret ; ; isupper ; ; function: to check to see if character is upper case ; ; calling format in "c" ; isupper(char) ; isupper:csect mov a,l ;get character to check cpi 'A' ;see if less then upper case a jc isupper1 ;not upper case cpi 'Z'+1 ;check to see if less then jnc isupper1 ;no upper case lxi h,true ;yes it is upper case ret isupper1: lxi h,false ;not upper case ret ; ; islower ; ; function: to check to see if character is lower case ; ; calling format from "c" ; islower(char) ; islower:csect mov a,l ;get character to check cpi 61h ;see if less then 'a' jc islower1 ;yes...not upper case cpi 7bh ;is it greater then 'z' jnc islower1 ;yes...not lower case lxi h,true ;return true for lower case ret islower1: lxi h,false ;return false for anything but lower case ret ; islowwer:csect ;compatible w/ prev. vers. jmp islower ; ; isdigit ; ; function: to check to see if character is digit 0-9 only ; ; calling format from "c" ; isdigit(char) ; isdigit:csect mov a,l ;get character to test cpi '0' ;see if less then a zero jc isdigit1 ;yes...not a vaild digit cpi '9'+1 ;is it greater than nine jnc isdigit1 ;yes...not a vaild digit lxi h,true ;is a vaild digit ret isdigit1: lxi h,false ;not a vaild digit ret ; ; isspace ; ; function: to check to see if white space tab or blank ; ; calling format from "c" ; isspace(char) ; isspace:csect mov a,l ;get character to check lxi h,true ;assume true cpi ' ' ;check for a space rz cpi 9 ;check for a tab rz lxi h,false ret ; ; strlen ; ; function: to get the lenght of a string ; ; calling format in "c" ; len=strlen(string); ; strlen: csect xchg ;put address of string in de lxi h,0 ;make string of zero lenght strlen1: ldax d ;get character from string ora a ;check to see if end of string rz ;yes return to caller inx h ;add 1 to string lenght inx d ;move to next character jmp strlen1 ;loop till end of string found ; ; strcpy ; ; function: to copy second string to first string ; ; calling format from "c" ; strcpy(object,source); ; strcpy: csect pop b ;get return address from stack pop d ;get source address pop h ;get object address push h ;restore machine stack push d push b push h strcpy1: ldax d ;get address of source character mov m,a ;store character in object string ora a ;check to see if end of string jz strcpy2 ;end of string return to caller inx h inx d ;move pointer to next byte jmp strcpy1 ;loop till done with copy strcpy2: pop h ;return address of object string ret ; ; strcat ; ; function: to put string2 at then end of string1 and return address of ; string 1 ; ; calling format in "c" ; strcat(string1,string2); ; strcat: csect pop b ;get return address pop d ;get address of string 2 pop h ;get address of string 1 push h ;retore machine stack push d push b push h ;save address of source string strcat1: mov a,m ;get character from source buffer ora a ;check to see if zero jz strcat2 ;yes end of string found inx h ;move pointer to next byte jmp strcat1 ;loop till end of string found strcat2: ldax d ;get character from string 2 mov m,a ;save character in string1 ora a ;check to see if end of buffer jz strcat3 ;yes return to caller inx h ;move object pointer up 1 inx d ;move source pointer up 1 jmp strcat2 strcat3: pop h ;get address of string1 ret ; ; strpos ; ; function: to look for string 2 in string 1 ;  returns position in string 1 where string 2 begins ; position 1 is first character ; ; calling format in "c" ; strpos(string1,string2); ; strpos: csect pop b ;get return address pop h ;get address of string 2 pop d ;get address of string 1 push d ;restore stack push h push b lxi b,1 ;initialize offset pointer strpos1: ldax d ;get character to check ora a ;check to see if end of string jz strpos5 ;end of string1 string 2 not found in string1 cmp m ;is it equal to string2 character 1 jz strpos2 ;yes... inx d ;no add 1 to string 1 pointer inx b ;add 1 to offset pointer jmp strpos1 ;loop till end of string1 or string2 found strpos2: push h ;save strating address of string 2 push d ;save current address of string 1 strpos3: inx d inx h mov a,m ;get character from string 2 ora a ;set machine flags jz strpos4 ;end of string2 found must be a mathc ldax d ;get arg1 cmp m ;is this character a match jz strpos3 pop d ;restore pointer for string1 and string 2 pop h inx d ;add 1 to string pointer inx b ;add 1 to offset in string1 jmp strpos1 ;loop till end of string 1 strpos4: mov l,c ;string found return offset for caller mov h,b pop b pop b ret strpos5: lxi h,0 ;string not found ret ; ; setmem ; ; function: to fill a block of memory with a given constant ; ; calling format in "c" ; setmem(address,count,constant); ; setmem: csect pop b ;get return address pop h ;get constant mov a,l ;put constant in a pop b ;get count pop d ;get address lxi h,-8 ;offset in to put stack back dad sp sphl ;restore stack pointer mov l,a ;place to save constant setmem1: mov a,b ;check to see if count is zero ora c rz ;all done with move mov a,l ;get constant to store stax d ;set memory loaction inx d ;move pointer to next pointer dcx b ;subtract 1 from count jmp setmem1 ;loop till all bytes set ; ; movmem ; ; function: to move source address to object address for count bytes ; ; calling format from "C" ; movmem(object,source,count); ; movmem: csect call argload ;get args bc=1, de=2, hl=3 push b ;switch args so that push d ;bc=count push h ;de=object pop b ;hl=source pop h pop d mov a,b ;check to see if count = 0 ora c rz ;zero return to caller call movmemht ;check to see if source'+1 ;is it : ; < = > rc ;yes - invalid character setfcb12a: cpi '!' ;is it less than ! rc ;yes - invalid cpi '.' jz setfcb121 cpi ',' jz setfcb121 cpi '[' jz setfcb121 cpi ']' jnz setfcb122 setfcb121: ;invalid character stc ret setfcb122: ;valid character stc cmc ret ; ; rsvstk ; ; function: to set how close to go to machine stack pointer ; ; calling format in "C" ; rsvstk(amount); ; rsvstk: csect shld @alocmx ;save number of bytes not to used ret ; ; storinit ; ; function: to init stroage allocation system ; ; calling format from "c" ; storinit(); ; storinit:csect lxi h,@base_free ;get address of start of free list shld @base_free ;save as first element shld @allocp ;save as pointer to last block lxi h,0 ;get size of free list area shld @base_free+2 ;save as current size of free area lxi h,3000 ;size of memory not to use shld @alocmx ;save it for later use ret ; ; data area used for free storage mangment ; @free_list:dsect @base_free: ds 4 @allocp: ds 2 @alocmx ds 2 ; ; argload ; ; function to load bc with 1st arg, de with 2nd arg, hl with 3rd arg. ; calling routine must call argload before any other operation argload:csect lxi h,9 ;offset to 1st arg past 2 ret addresses dad sp ;add to stack pointer mov b,m dcx h mov c,m dcx h mov d,m dcx h mov e,m dcx h mov a,m dcx h mov l,m mov h,a ret umber of bytes not to used ret ; ; storinit ; ; function: to init stroage allocation system ; ; calling format from "c" ; storinit(); ; storinit:csect lxi h,@base_free ;get address of start of free list shld @base_free ;save as first element STDLIB20.DOC STDLIB.ASM and .TXT were obtained as part of Mike Bernson's small-c compiler package. They provide the input/output functions. Unfortunately, the original STDLIB was full of bugs. This version 2.0 corrects errors found in tolowwer (changed to tolower), islowwer (changed to islower), strpos, setmem, movmem (order of args changed), getch, gets, kbstat (used bdos instead of bios), unlink, setfcb, and argload. Read and write were compacted by use of a common function called fileio. Setfcb was generalized to accept all CP/M file name characters. All functions except outp, inp, rsvstk, and storinit were tested for proper operation; tests performed were not exhaustive. STDLIB.ASM should be assembled using the Panacea assembler provided with small-c, creating STDLIB.TXT. (It should be noted that the Panacea assembler converts lower case ASCII character/string constants to upper case.) The .TXT file can be linked using the Panacea linker.   Jim Woolley FOG Disk Librarian January, 1983 the Panacea linker. provide the input/output functions. Unfortunately, the original STDLIB was full of bugs. This version 2.0 corrects errors found in tolowwer (changed to tolower), islowwer (changed to islower), strpos, setmem, movmem (order of args changed), getch, gets, kbstat (used bdos instead of bios), unlink, setfcb, and argload. Read and write were compacted by use of a common function called fileio. Setfcb was generalized to accept all CP/M file name characters. All functions except outp, inp, rsvstk, and storinit were tested for proper operation; tests performed were not exhaustive. STDLIB.ASM should be assembled using the Panacea assembler provided with small-c, creating STDLIB.TXT. (It should be noted that the Panacea assembler converts lower case ASCII character/string constants to upper case.) The .TXT file can be linked using the Panacea linker. $EBIOÓTOUPPEÒ TOLOWEÒ TOLOWWEÒISALPHÁ ISUPPEÒ$ISLOWEÒ7ISLOWWEÒJISDIGIÔMISSPACÅ`STRLEÎn STRCPÙzSTRCAÔŽSTRPOÓ«5SETMEÍàMOVMEÍõEOUTÐ:INÐH PUTÓRPUTCÈdGETCÈz"$EGETÓœ*KBSTAÔÆOPEÎÔ"CREATÅö)CLOSÅUNLINË4-REAÄa WRITÅj FILEIÏsQSETFCÂÄÇRSVSTË‹STORINIÔ�@FREE_LISÔ¥ARGLOAÄ­$T }þaØþ{Ðæ_oÉ$T }þAØþ[Ðö oÉ$Tà $R$T åÍ$ëáÍ7É$R$T$}þAÚ3þ[Ò3!É!É$R $T7}þaÚFþ{ÒF!É!É$R $TJÃ7$R$TM}þ0Ú\þ:Ò\!É!É$R $T `}!þ Èþ È!É$T në!·È#Ãr$R  $T zÁÑáåÕÅåw·ÊŒ#Ã�áÉ$R   $T ŽÁÑáåÕÅå~·Êž#Õw·Ê©#ÞáÉ$R     $T 5«ÁáÑÕåÅ·ÊܾÊÂôåÕ#~·Ê×¾ÊÄÑáôi`ÁÁÉ!É$R     # * $TàÁá}ÁÑ!øÿ9ùox±È} Ãë$R$T9õÍ­ÅÕåÁáÑx±ÈÍ4Ú><êí°É~# x±ÂÉ ë ë><ê)í¸É~+ $T .x±Â)É|ºÀ}»É$R" #/<$T:ÁáÑÕåÅ{2F}ÓÉ$R$T H}2MÛ&oÉ$R$TRå~·ÊbåoÍdá#ÃSáÉ$R $Td}þ Âs Í. ]ÍÉ$R$T"zÍþ Â� Í! Éþ˜!ÿÿÉo&É$R$T*œåå6€ ëÍÑáå#F+x·Ê»w#³6 ÍáÉ$R$TÆ Í·!È!É$T"ÔÁáÑÕåÅÕåÍÄÑÑ,ÊòÍ<Êò!É!ÿÿÉ$R $T)öÁáÑÕåÅÕåÍÄÑÑ,ÊÕÍÑÍ<Ê!É!ÿÿÉ$R $TÁÑÕÅÍ<Ê0!É!ÿÿÉ$R $T-4ÁÑÕÅ!Üÿ9ùåÕÍÄÑÑ,ÊWÍ<ÊWÃZÿÿ!$9ùëÉ$R !$T aÅÍsÁÉ$R$T jÅÍsÁÉ$R$T9s!9~^#¶Vʰr+s##^#åVÍáå#^#V!9NÍá·Â¶V+^ë€ ës#$T¬rÃs!ù!ÿÿå€ÍáÉ$R ,;A$T9ÄÁáÑÕåÅ+#~·Ê%þ ÊËå~·Êà#Ã×+~þ Êà#6á#~+þ:Âþ~Í)Ö@##Ãÿ$T9û¯Í2Â%þ.Â#Í2Â%>Â!É!ÿÿÉþaØþ{Ðæ_É~þ*>$T95?ÊT~ÍdÚK#Â2ÃZ·ÊRþ.À> ÂT~·Èþ.È#ÃZÍ)þ:Úoþ?Ø$Toþ!Øþ.ʆþ,ʆþ[ʆþ]ˆ7É7?É$R !-18@CHNQ[tx{‚…‰”ž¡¦±¶»À$T‹"«É$R!$T �!¥"¥"©!"§!¸ "«É$R !!! !!$T"­! 9F+N+V+^+~+ngÉ$Qþ Â� Í! Éþ˜!ÿÿÉo&É$R$T*œåå6€ ëÍÑáå#F+x·Ê»w#³6 ÍáÉ$R$TÆ Í·!È!É$T"ÔÁáÑÕåÅÕåÍÄÑÑ,ÊòÍ<Êò!É!ÿÿÉ$R $T)öÁáÑÕåÅÕåÍÄÑÑ,ÊÕÍÑÍ<Ê!É!ÿÿÉ$R $TÁÑÕÅÍ<Ê0!É!ÿÿÉ$R $T-4ÁÑÕÅ!Üÿ9ùåÕÍÄÑÑ,ÊWÍ<ÊWÃZÿÿ!$9ùëÉ$R !$T aÅÍsÁÉ$R$T jÅÍsÁÉ$R$T9s!9~^#¶Vʰr+s##^#åVÍáå#^#V!9NÍá·Â¶V+^ë€ ës#$T¬rÃs!ù!ÿÿå€ÍáÉ$R ,;A$T9ÄÁáÑÕåÅ+#~·Ê%þ ÊËå~·Êà#Ã×+~þ Êà#6á#~+þ:Âþ~Í)Ö@##Ãÿ$T9û¯Í2Â%þ.Â#Í2Â%>Â!É!ÿÿÉþaØþ{Ðæ_É~þ*>$T95?ÊT~ÍdÚK#Â2ÃZ·ÊRþ.À> ÂT~·Èþ.È#ÃZÍ)þ:Úoþ?Ø$Toþ!Øþ.ʆþ,ʆþ[ʆþ]ˆ7É7?É$R !-18@CHNQ[tx{c.def Has all static and macros defintion for "C" compiler c1.c Has main line and opening text plus #include, #if, #nif,error summary, dumpingt extern , and static area c2.c Has new function handleing ,statement parser, some ending charater check routines, compound statement, if statement, while statement,switch statement, for statement return statement, break statement, contiune statement, #asm statement, #endasm c3.c,c4.5 have needed utils and other little function c5.c-c7.c expression handler c8.c-c9.c code generation for the compiler c.sub submit script to compile the current version of the compiler and link it. cl.sub submit script to link the compiler if all crl file exist cc.sub submit script to run the compiler used by typeing "submit filename" runtime.asm source to runtime routines needed by the compiler runtime.txt object of runtime.asm stdlib.asm a few assembler function that one needs ... thing link puts,putch,gets,getch, ...  stdlib.txt object of stdlib.c function.asm needed assemble function for speed... strcpy,strcat,strpos,strlen function.crl bdsc object format of this function c1.com compile version of the compiler assemble.com assembler needed to assemble output from the c compiler link.com link to link files submit.c a copy of a submit written in c that aollow nesting of submits time.c a copy of a program that get a d set time for qt clock board ============================================================================== what my version of small c has: statements: #asm allow assembler code to follow #endasm to end assembler code and go back to c #define macro definition #ifdef constant see if defined #ifndef constant see if not defined #include include source from file fname int identifier,... define a 16 bit integer char identifier,.. define a 8 bit unsigned value {} defines a block of statements if (expression) statement; {else statement;} while (expression) statement; for(expression; expression; expression) statement; switch(expression) { case constant: default : } return {expression}; break; contiune; operators: * expression & lvale - expression ~ expression ++ lvalue -- lvalue lvalue ++ lvalue -- expression + expression expression - expression expression * expression expression / expression expression % expression expression << expression expression >> expression expression & expression expression ^ expression expression | expression expression && expression expression !! expression expression < expression expression > expression expression <= expression expression >= expression ! expression lvalue = expression lvalue += expression lvalue -= expression lvalue *= expression lvalue /= expression lvalue %= experession lvalue &= expression lvalue ^= expression lvalue != expression constant: n just a base ten number \n,\r,\t,\b,\f just a few character constant \\,\",\' \nnn a base 8 number 0xnn a base 16 number ============================================================================= compiler used to compile programs is bdsc 1.41 memory in system is 56k Mike Bernson 2103 Glencoe Hills APT 6 Ann Abror, Mi 48104 Phone 313-973-6404 or 313-996-0646 if any problem come up please give me a call or write   Aýÿ\Î&Avw.ïÿkj‡ÂDzÿ­#›‰U}Mÿÿ�/¦NN]ÿ•g«æÕg¿ÿÿÓdÓç›ÿÿ�Ç«:¸ÿòûÿëÍ$÷ïÿ^‘S©«°¶ýñyŒKiüËÿNl$žuœ¹ÿ¯ïÒä_ÌÿÿO–'&½ýÿ�ý–|õ‹ÿÞ‚} expression && expression expression !! expression expression < expression expression > expression expression <= expression expression >= expression ! expression lvalue = expression lvalue += expression lvalue -= expression lvalue *= expression lvalue /= expression lvalue %= experession lvalue &= expression lvalue ^= expreThese files contain a portion of the C Compiler. To use, place C1.COM in drive A. At the A> prompt, type C1 When requested, enter an output file name of type .ASM (outfile.ASM) and an input file name of type .C (infile.C), which should be the source file written in C. Next, place ASSEMBLE.COM in drive A. At the A> prompt, type ASSEMBLE outfile where outfile is the .ASM file produced by C1. This step produces a file named outfile.TXT. To complete the process, place LINK.COM in drive A. At the A> prompt, type LINK outfile d:STDLIB d:RUNTIME where outfile is the .TXT file produced by ASSEMBLE and STDLIB and RUNTIME on drive d are library .TXT files provided. The result of LINK is a file named outfile.COM, which may be executed at a CP/M > prompt. The compilation process may be automated using SUBMIT.COM, XSUB.COM, and CC.SUB. Sample C programs SUBMIT.C and TIME.C are found on this diskette. For further information, see C.DOC .COM, and CC.SUB. SampÃ`$ÍÚüÿ! 9^#VBK!9^#V!9s#r!9^#V!9s#rÃG`i#DM+!9å~#fo#ëás#rë+!9^#Vë^ÕÍk6Ñå`i^ÕÍk6ÑÑÍ ÊŠ!9^#Vë^ÕÍk6Ñå`i^ÕÍk6ÑÑëÍ%É`i~·Ê¨!9å~#fo+ëás#rz³Ê¨Ã0! 9^#VBK!9^#V!9s#r!9^#V!9s#rÃç`i#DM+!9å~#fo#ëás#rë+!9^#Vë^Õ`i^áÍ Ê!9^#Vë^Õ`i^áÍ%É`i~·Ê3!9å~#fo+ëás#rz³Ê3ÃÐ!ÉÍÚ!9N#F`i^#Vë^!\Í Ê``i^#Vë^ëÉ`i^#Vë#~·Âp!\É`iå~#fo#ëás#r`i^#Vë^ë}2,:`i^#Vë^Õ!-:åÍÍÑÑ":^ëÉÍÚüÿ! 9N#F!ë!9s#rÃÔ`ië!9s#r!9^#VBKx±Êô`i^#V!9s#r!9^#V`is#rÃÁ!9^#VëÉÍÚ!9^#VÕÍ­ÑDM! 9^#V`is#r`iÉÍÚ!9N#FÃ3`i#DM! 9å~#fo#ëás#rë+^Õ`i^áÍÊb`i~·Â_!ÉÃ.!ÉÍÚþÿ! 9N#F!9^#V!9s#rÃ’!9å~#fo+ëás#r!9~#¶Ê¼! 9å~#fo#ëás#rë+^Õ`i#DM+ÑsÃ!9^#VëÉÍÚþÿ! 9N#FÃå! 9å~#fo#ëás#rë+! 9^#Vë~·Ê>`ië!9s#rÃ!9å~#fo#ëás#rë+!9^#Vë~·Ê;! 9^#Vë^Õ!9^#VëÑsz³Â>ÃÿÃÔ!9^#V`iÍ%ÉÍÚþÿ! 9N#F!ë!9s#rÃt!9å~#fo#ëás#r`i#DM+~·Ê‚Ãe!9^#VëÉÍÚþÿ! 9^#VÕÍKÑ#ë!9s#r!9^#VÕÍ­ÑDM!9^#VÕ! 9^#VÕÅÍfÑÑÑ`iÉÍÚþÿ! 9N#F`ië!9s#rÃõ!9å~#fo#ëás#r`i~·Ê!9^#Vë^! 9n&Í ÊÃæ!9^#V`iÍ%ÉÍÚþÿ! 9N#F`i~#¶Ê¨!å`i^#V!^#VÕ!9^#VÕÍÑÑÑë!9s#r!ÍKʃ! 9^#VÕ`i^#Vë##åÍ$ÑÑDMè!9^#V!ÍLʨ! 9^#VÕ`i^#VÕÍ$ÑÑDM`iÉÍÚ!åÍ­ÑDM!å!åÅ;4ÑÑÑ!ë! s#r! s#r! 9^#V! s#r`iå! 9^#VëÑs#rÉÍÚ!9N#Fx±Ê?! 9^#VÕ! ^#VÕÍùÑÑÅ! 9^#VëÍÙÑ! 9^#VÕ`i^#VÕÍùÑÑÉÍÚúÿ!9^#VÕ!u?åÍ$ÑÑë!9s#rë~#¶Â!9^#VÕÍ‹Ñå!9^#VÕÍ«ÑÑ!9^#VÕ!9^#Vë^#V!åÍ$ÑÑë!9s#rë~#¶Â!9^#VÕ!i?åÍ$ÑÑë!9s#rë~#¶Âå!9^#VÕÍ‹Ñå! 9^#VÕÍ«ÑÑ!9^#Vë^#V!^#VÕ!9^#VÕÍ«ÑÑ!9^#Vë^#V!DM`i~#¶Ê7`i^#Vë##^#V!9~#foÍ Ê``i^#VÕ!åÍýÑÑë`is#r!9^#VÕ`i^#Vë##Ñs#rÉÍÚüÿ! 9N#F`i^! ͉`i^! ÍÊ‘`i#DMÃm`i^! Íʶ!9^#VÕÍKÑë!9s#rÃ?`i^!"ÍÊ×!Hë!9s#r`i#DMÃ`i^!<ÍÊø!Kë!9s#r`i#DMÃ!Në!9s#r!9^#VÕÅÍÅÑÑåÅ!9^#VÕÍfÑÑÑë!9s#r!å!9^#V!9~#foÑs!9^#VëÉ" > ÍÚ*s?#"s?*·>å!‡å!8:åÍ,ÑÑÑ!8:ÉÍÚ!9N#F`i^#Vë^! ͤ`i^#Vë^! Íʨ!É`i^#Vë^!/ÍÊA `i^#Vë#^!*ÍÊA `iå~#fo#ëás#rë^!/Í Ê= `iå~#fo#ëás#rë^!*Í Ê: `i^#Vë~·Â7 ÍRë`is#rë~·Ê+ `iå~#fo+ëás#rÃ7 !E åÍÙÑ!ÉÃçÃÍ!É!Éunexpected eof in white space ÍÚÿÿ! 9N#FÅÍtÑʈ `iå~#fo#ëás#rÃp `i^#Vë^Õ!aÑëÍ1ʯ `i^#Vë^!zÍ1Âè `i^#Vë^Õ!AÑëÍ1ÊÖ `i^#Vë^!ZÍ1Âè `i^#Vë^!_ÍÊ‹ !aë!9s`iå~#fo#ëás#rë+^Õ! 9å~#fo#ëás#rë+Ñs`i^#Vë^ÕÍC6ÑÂñ `i^#Vë^Õ!aÑëÍ1ÊO `i^#Vë^!zÍ1Âñ `i^#Vë^Õ!AÑëÍ1Êv `i^#Vë^!ZÍ1Âñ `i^#Vë^!_ÍÂñ à `i^#Vë^!"ͯ `i^#Vë^!'ÍÊ `i^#Vë^!9sÅÍ7Ñ`iå~#fo#ëás#r`i^#Vë~·Âì ÍRë`is#rë^z³Ê `i^#Vë^!9n&Í ½ `iå~#fo#ëás#rà `i^#Vë^ÕÍC6ÑÊê `iå~#fo#ëás#rë^!9s!9^ÕÍk6Ñë!9s!0ë!9n&Í1Êl !9^!9Í1Â# !aë!9n&Í1Ê� !9^!fÍ1Â# !Aë!9n&Í1Ê® !9^!FÍ1Â# !9^!xÍÂ# !9^!lÍÂ# !9^!.ÍÂ# !0ë!9sà `i^#Vë^!9s`iå~#fo#ëás#r!å! 9^#VëÑs!9^ëÉÍÚüÿ! 9N#F!¿:ë!9s#rÃF !9å~#fo##ëás#r!9^#Vë~#¶Êz !9^#Vë^#VÕÅÍÑÑë!9s#r!Í1Âz Ã6 !9^#V!ÍÉautobreakcasecharcontinuedefaultdodoubleelseexternfloatforgotoifintlongregisterreturnshortsizeofstaticstructswitchtypedefunionunsignedwhileÍÚuÿ!“9N#F!"s?ÍRë!Œ9s#rë~·ÊÉ!9å!Ž9åÍd ÑÑë!Ž9s!#Í ÊÆ !Ž9^! Í Êà !Ž9^!aÍÊ« !9åÍ Ñ« *s?åÅ!9åÍ@ÑÑÑ!9å!Ž9åÍd ÑÑë!Ž9sÃo ÃÆ!9å!Ž9åÍd ÑÑaÍÊÆ!Êå!9åÍÑÑÊ!9å!Ž9^#VÕÍaÑÑ*s?åÅ!9åÍ@ÑÑÑÃÆ!Òå!9åÍÑÑÊG!9å!Ž9åÍd ÑÑ*s?åÅ!9åÍ@ÑÑÑÃÆ!Ùå!9åÍÑÑÊ[ÃÆ!ßå!9åÍÑÑÊoÃÆ!äå!9åÍÑÑ‘!êå!9åÍÑÑʳ!9å!Ž9åÍd ÑÑ*s?åÅ!9åÍ@ÑÑÑÃÆ!9å!ñå!J>åÍüÑÑÑÃ@ Éincludedefineendifelseifdefifndef? can't parse token = %s ÍÚþÿ!ë!9s#r! 9^#Vë~·Ê^!?>å! 9^#Vë^ÕÍ¢ÑÑ! 9å~#fo#ëás#r!9å~#fo#ëás#rÃ!9^#VëÉÍÚ÷ÿ!9N#F!måÍ Ñë! 9s#r! ^#VÕÍ Ñë! 9å~#foëás#r! ^#VÕͧÑë! 9s#rÃÈ! 9^#Vë^#V! 9s#r! 9~#¶ÊT! 9~#¶Âì!råÍ Ñë! 9s#r!zåÍ Ñë! 9å~#foëás#r! 9^#Vë##^#VÕ!~åÍÙÑÑ!ë! 9å~#foëás#r! 9^#V!F͆ÊQ!‚åÍ Ñ!ë! 9s#rö! 9^#V!͆Êl!„åÍ ÑÉ %4d ÍÚ!9^#V!^#VÕÍ Ñ!¿åÍ Ñ!gå! 9^#V!^#VÕÍùÑÑÉ ÍÚ!9N#F`iëÍ1Êä!|åÍÙÑÃk`i+DMëÍLÊk!œå! 9å~#fo##ëás#rë^#VÕÍ;ÑÑ"·>|µÂ6! 9^#Vë^#VÕ!žå!J>åÍüÑÑÑÃh! 9^#Vë^#VÕ!´å!J>åÍÙÑÑÑ! 9^#Vë^#VÕÍ. Ñ*·>åÍ&ÑÃä!†å*u?åÍùÑÑͲ'ÉUse: cref file1 file2 file3... r? can't open file %s Processing file: %s |¢g}£o´É|/g}/o´ÉéáÅ^#V#DM!9ë9ùÕ`iÍÙëáùÁë|µÉz¬2ø:Ívë:ø:·úá}´ÉÍ�ë}´É}“Â|’Ê*!¯É}“Â*|’Ê!}´Éë|ªúC}“|š?>Îo&Ézæo&Éë|ªú]}“|š>Îo&É|æo&Éz2ø:Ív:ø:·úá|µÉ|·ò�/g}/o#z·ò�/W{/_Ã�ÅDM!>2÷:)ë)ëÒ¢#}‘o|˜gÒº :÷:=2÷:šÁ}´É:÷:=2÷:šÁ}´ÉÅDM!>)ë)ëÒÙ =ÂÑÁ}´É}/o|/g#}´É|µÊ*Ã|²g}³o´Éë{æ_Ê"|´òš|7g}o´Éë{æ_Ê")Â}´Éë}“o|šgµÉëáÅN#F#ë ëN#F#z¸ÚF{¹ÒJ##^#VëÁéëáÅBK^#Vz·úp#y¾Êj###ÃX#x¾Âe#~#foÁéë}“|š>?Îo&Éë}“|š>Îo&Éë{æ_Ê"|·g}oš´É|ªg}«o´É~# x±Â¯ÉÑ!9ÅÕù:~#ÂÆ!ÓãéÁ|µÉ§ÉÍÚ!?>"ÿ:! 9å! 9^#VÕ!$åÍ~ÑÑÑÉÍÚ!9^#Vë"ÿ:! 9å! 9^#VÕ!$åÍ~ÑÑÑÉÍÚ*ÿ:å! 9^#VÕÍ¢ÑÑÉÍÚþÿ!4>DM`i~·Êi`i DM­>ëÍwÊf!ÉÃE! 9^#Vë#^!+Íë!9s#r! 9^#Vë^ëÃl!9~#¶Ê¢!Ã¥!å! 9^#VÕÍD(ÑÑë! s!ÿÿÍÊÆ!ÉÃ!9~#¶ÊÙ!ÃÜ!Íóå! 9^#VÕÍD(ÑÑë! s!ÿÿÍÊ!ÉÃ!9~#¶Ê!Ã!Íóå! 9^#VÕÍD(ÑÑë! s!ÿÿÍÊ@!É!åÍ�6ͼ6! ^ÕÍ´2ë!9ùÃ!úÿ"#?!ÉÍPr’wÉab!ë! s!ë! s#r!ë`is#r! s#r! s#r`iÉÍÚþÿ! 9^#VBK!4>åÍÍÑë!9s#r!ÿÿÍ Ê÷!9^#V! Í Ê÷!9^#VÕ`i#DM+Ñsû!ë`is!9^#V!ÿÿÍÊ#`ië! 9~#foÍÊ#!É! 9^#VëÉÍÚþÿ! 9^#V!9s#r! 9å~#fo+ëás#r!ÍLÊ’!9^#VÕÍÍÑDMÿÿÍ Ê’`iå!9å~#fo#ëás#rë+Ñs`i ÍÂ’Ã?!å!9^#VëÑs`iÿÿÍÊÄ!9^#V! 9~#foÍÊÄ!É! 9^#VëÉÍÚþÿ! 9N#FÅÍ@ÑÍÉë!9s#rëÃ`iå~#fo+ëás#r!ÿÿÉÃÙÍPð !9^#VëÉÍÚ!9N#F`i~·ÊV!?>å`i#DM+^ÕÍ¢ÑÑÿÿÍÊS!ÿÿÉÃ,!?>å! åÍ¢ÑÑÉÍÚ!9N#F`i~·Êž! 9^#VÕ`i#DM+^ÕÍ¢ÑÑÿÿÍÊ›!ÿÿÉÃp!ÉÍÚ!9N#F!PYÍÉDM`i ÍÊá! 9^#VÕ! åÍ�ÑÑÿÿÍÊá!ÿÿÉ! 9^#VÕÅÍ�ÑÑÉÍÚþÿ! 9^#VÕÍ@ÑDMÿÿÍÂ)! 9^#VÕÍ@Ñë!9s#r!ÿÿÍÊ-!ÿÿÉ!9^#V!ÍPYÍóÉÍÚþÿ! 9N#F! ^#VÕ`i^#VáÍwÊ! ^!ÍÉÊt!ÿÿÉ!ûÿå`iÑån&ÍÉëás`i~#¶ÂšÅÍÑ! ^#VÕ! ^#VÕ! ^ÕÍ6,ÑÑÑë!9s#r!Í1Êò!9~#¶ÂÙ!ÃÜ!å`iÑån&Íóëás!ÿÿÉ! ^#V`is#r!9~#foë! s#r`iå~#fo#ëás#rë+^!ÿÍÉÉÍÚ!J>å! 9^#VÕÍ�ÑÑÉÍÚ!9N#F! 9^#VÕÅÍ�ÑÑëÍKÊg!ÿÿÉ! 9^#VÕ`iëÍ’åÍ�ÑÑëÍKÊŒ!ÿÿÉ`iÉÍÚ! 9N#F! ^#VÕ`i^#VáÍwÊÄ!9^#V!ÿÍÉåÅÍÅÑÑÉ!9^#VÕ`iå~#fo#ëás#rë+Ñs!ÿÍÉÉÍÚ!ÿÿå! 9^#VÕÍÅÑÑÉÍÚ!4>DM`i­>ëÍ…Ê%`i DMõÿåÍ&ÑÃÉÍÚþÿ! 9N#F!ë!9s#r`i~·Ê³! ^!ÍÉÊj!ÿÿåÅÍÅÑÑë!9s#r! ^ÕÍ'*Ñë!9å~#foÍóëás#r! ^!ÍÉʳ*µ>å! ^#VëÑs#r! ^#Vë"µ>!ë! s!9^#VëÉÍÚþÿ! 9N#F! ^!ÍÉÊ:! ^#VÕ`i^#VáÍ%ë!9s#r!9^#VÕ! ^#VÕ! ^Õͪ/ÑÑÑÿÿÍÊ:!å`iÑån&Íóëás!ÿÿÉ! 9^#V!ÿÿÍÊs!ûÿå`iÑån&ÍÉëás!ë`is#r! s#r!É`i~#¶Â„ÅÍÑ! ^#V!Íʽ!å!9å! ^Õͪ/ÑÑÑÿÿÍÂ!! 9^#VëÉ! ^#V`is#r! ^#VÕ! ^#Váë! s#r!å`iÑån&Íóëás! 9^#VÕ`iå~#fo#ëás#rë+Ñs!ÿÍÉÉÍÚþÿ! 9N#F! ^#V!ÍÊB`ië! s#rÉ*µ>|µÊb*µ>ë!9s#r*µ>^#Vë"µ>É! ^#VÕÍ­Ñë!9s#rz³Â‰!ë! s#rÃ3!å`iÑån&Íóëás!9^#V! s#rÉÍÚ*;|µÂÈ!åÍJ%Ñ";";*;DM!9^#V*;";PYëÍ…Êí`i";!É*;ë*;͆Ê,*;ë*;Í%ÿþÍÉë!9s#rÕÍJ%ÑÊä!9^#V*;";`iÉÍÚ!9^#Vë";! 9å! 9^#VÕ!`åÍ~ÑÑÑ!å*;ÑsÉÍÚ!9^#VÕ*;#";+Ñs!ÿÍÉÉÍÚ¼ÿ!L9N#F!N9å~#fo#ëás#rë+^!F9s#rz³Ê#!F9^#V!%ÍÊ #!ë!9s!ë!D9s#r! ë!B9s#r!ÿë!@9s#r!N9^#Vë^!F9s#r!-ÍÊ%!ë!D9s#r!N9å~#fo#ëás#rë+^!F9s#r!F9^#V!0ÍÊ@!0ë!B9s#r!ë!>9s#r!N9å~#fo#ëás#rë+^!F9s#r!0Í0Ê¥!F9^#V!9Í1Ê¥!>9^#V! ÍÉë!F9~#foÐÿë!>9s#rÃK!F9^#V!.ÍÊ!ë!@9s#r!N9å~#fo#ëás#rë+^!F9s#r!0Í0Ê!F9^#V!9Í1Ê!@9^#V! ÍÉë!F9~#foÐÿë!@9s#rÃÀ!F9^#V!lÍÊk!N9å~#fo#ëás#rë+^!F9s#r!:9å!R9å~#foëás#rëüÿÍ–6áÍ©6à !F9^#V!dÍÊ¡!:9å!R9å~#fo##ëás#rë++^#VëÍ:áÍ©6à !F9^#V!eÍÂÑ!F9^#V!fÍÂÑ!F9^#V!gÍÊ÷!9å!R9å~#foëás#rëøÿÍ!:áÍ!:à !:9å!R9å~#fo##ëás#rë++^#VëÍø9áÍ©6!F9^#VëÃÖ!!9å!å!>9Í–6ͼ6Í‚#ë!9ù!49s#rÃý!!:9Í–6Í�6ÍÎ9Êž !9å! å!>9Í–6Í÷6ͼ6Í#ë!9ù!49s#r!-å!69å~#fo+ëás#rëÑsÃÁ !9å! å!>9Í–6ͼ6Í#ë!9ù!49s#rÃý!!9å! å!>9Í–6ͼ6Í‚#ë!9ù!49s#rÃý!!9å!å!>9Í–6ͼ6Í‚#ë!9ù!49s#rÃý!!:9Í–6Í:ë!49s#rÕÍ85Ñë!89s#rÃ"!F9^#V!eÍÊH!!ÃK!!å!B9^#V!ÿÍÊb!!Ãj!!B9^#Vëå!9å! 9Í!:Í!:Í!:ë!9ù! 9ë!49s#rÕÍ85Ñë!89s#r!Èë!@9s#rÃ"!:9Í–6Í:ë!F9s#r!F9^#VÕ!9ë!69s#rëÑsÃý!ÍPo% dK uÄ xê s!e2!f2!cª!¼!!9ë!49~#foÍ%ë!89s#r!89^#V!@9~#foÍLÊ8"!@9^#V!89s#r!D9~#¶Ês"!>9å~#fo+ëás#rë#ë!89~#foÍLÊs"!B9^#VÕ`iÍÙÑÃB"!ë!69s#rÃ�"!69å~#fo#ëás#r!49^#Vë~·ÊÐ"!69^#V!@9~#foÍKÊÐ"!49å~#fo#ëás#rë+^Õ`iÍÙÑÃ�"!D9~#¶Â#!>9å~#fo+ëás#rë#ë!89~#foÍLÊ#! å`iÍÙÑÃÚ"Ã#!F9^#VÕ`iÍÙÑÊÉÍÚ! 9N#F`iÍ:ͼ6! 9Í–6ÍÔ6Í|8Í:;^Õ!9å~#fo+ëás#rëÑs!9å`iÍ:Íè6áåÍ–6ÍB8áÍ©6Í7Â(#!9^#VëÉÍÚþÿ!9N#F! 9Í–6Í�6ÍÎ9ÊB$! 9Í–6Í:ÍÉë!9s#r! 9å! 9Í–6Í�6Íù7Í�6ÿÿÿÍ~7áÍ©6`iëÍûÍ:ͼ6!9Í–6ÍÔ6Í|8Í:)ë!9~#fo;^Õ!9å~#fo+ëás#rëÑs! 9å`iëÍûÍ:Íè6áåÍ–6ÍB8áÍ©6!9^#VÕÅ!9Í–6ͼ6Í#ë!9ùëÉ*ùÍq%ÍÃg$ͺÍ{$ëÉͺ*ù:DM*û:ëÍëo&ÉͺÍ™$o&Éͺ*ù:ë*+++ë*û:DM*ý:ëéÅ!9N#F#^#Vkb6#> 6 #=ÂÄ$>6#=ÂÍ$ë þ: >Â% æþAÚ:%þ[Òñ$Ö@Ãý$þaÚ:%þ{Ò:%Ö`w# þ.Ê%·Ê4%Ê%ÍA%w#Ã%{…o|Îg ·Ê4%ÍA%w#Â%%!¯ÁÉ!ÿÿ|·ÁÉþaØþ{ÐÖ É!9^#V*;ë!þ9}“|šÚl%*;ë";ë|µÉ!¯ÉÍÚüÿ!å!�å!V;åÍž4ÑÑÑ!å:€o&ÍÉV;Ñs!�'";!V;DM!"Ö;*Ö;ëÍKÊz'`i^! ÍÂØ%`i^! ÍÊà%`i#DMü%`i^z³Êz'`i^!>ÍÊ&!ë!9s#rÃ&`i^!<ÍÊ+'!ë!9s#r`i#DM^! ÍÂ>&`i^! ÍÊA&Ã&`ië!9s#r`i#DM~·Êƒ&`i^! ÍÂq&`i^! ÍÊ€&!å`i#DM+ÑsÃ&ÃK&!9^#VÕÍ'*Ñ!9~#¶Êµ&!¶å!9^#VÕÍ$(ÑÑë!9s#rÃÎ&!å!9^#VÕÍD(ÑÑë!9s#r!9^#V!ÿÿÍÊ('!Ž'å!€åÍ5ÑÑ!9^#VÕ!€åÍ~5ÑÑ!°'å!€åÍ~5ÑÑ!€åÍ85Ñå!€å!åͪ/ÑÑÑ! åͲ'ÑÃw'`iå*Ö;#"Ö;+);Ñs#r`i#DM~·Êw'`i^! ÍÂe'`i^! ÍÊt'!å`i#DM+ÑsÃw'Ã?'ï%!;å*Ö;åÍÁÑÑåͲ'ÑÉCan't open file for redirection: ÍÚÍû!9~#¶ÊÌ'!Ð'åÍx4ÑÍg$ÉA:$$$.SUBÍÚ!ýÿ"#?!ÿÿÉÍÚ!Écon:CON:lst:LST:prn:PRN:pun:PUN:rdr:RDR:ÍÚ! 9^#VÕ!å! 9^#VÕÍD(ÑÑÑÉÍÚøÿ!Å>ë! 9s#r!ë!9s#rÃ(! 9å~#foëás#r!9å~#fo#ëás#r!9^#V! ÍKÊ­(! 9^#V!^#V!Ú'Í·(Ãb(!øÿ"#?!ÿÿÉ!%?DMÃÇ(`iDM`i~#¶Êè(!9^#VÕ`i^#VÕÍÚ4ÑÑÊè(ÿ(! ^#V!9s#r!9^#V!ÍÉ#ë!9s#r!9^#V!ÍÉÊA)!9^#Vë^Õ! 9^#VëÑsz³ÂA)!öÿ"#?!ÿÿÉ!9^#V!ÍÉÊx)!9^#Vë#^Õ! 9^#Vë#Ñsz³Âx)!öÿ"#?!ÿÿÉ! ^#VÕ! 9^#V!Ñs#r!9^#Vë##^Õ! 9^#Vë##Ñs!9^#Vë###^Õ! 9^#Vë###Ñs!-,å! 9^#V!Ñs#rÅ! 9^#VÕ!9^#VÕ!9^#VÕ!9^#VÕ!9^#V!^#VëÍÙë! 9ù!ÍKÊ*!ÿÿÉ!9^#VëÉÍÚ!9^#V!ÍKÂL*!9^#V! ÍLÊV*!ýÿ"#?!ÿÿÉ!9^#Vë)))Å>DM! ^#VÕ! ^#VëÍÙÑë!9s#r!ë! s! s! s`is!Ú'ë! s#r!9^#VëÉÍÚ!Ø;DMÃÂ*`i&DM`i=ëÍ…ÊÝ*!% ^z³Êç*ú*!ùÿ"#?!ÿÿÉÅ! 9^#VÕͱ$ÑÑÊ+!úÿ"#?!ÿÿÉ! 9^#V!ÍÉÊ+Å!åÍx$ÑÑÅ!åÍx$ÑÑÿÍÊ_+! 9^#V!ÍÉÊR+Å!åÍx$ÑÑÿÍÊ\+!ÿÿ"#?!ÿÿÉÃ+! 9^#V!ÍÉÍÊ+!ûÿ"#?!ÿÿÉ!ë!! s#r!# s!$ s`iå!9^#V!Ñs#r! 9^#V!ÍÉ#ë!% s!ÍÉÊÙ+! ,å!9^#V!Ñs#rÃì+!ð+å!9^#V!Ñs#r!ÉÍÚ!å! 9^#V!%Ñs!ÉÍÚ!9N#FÅ!åÍx$ÑÑ!ë!% s!ÉÍÚ!ÉÍÚ!9^#V!ÍKÂ[,!9^#V! ÍLÊe,!ýÿ"#?!ÿÿÉ!9^#Vë)))Å>DM! 9^#VÕ! 9^#VÕ! ^#VÕ`i^ë)=^#VëÍÙÑÑÑÉÍÚúÿ!DM!9^#V!9s#r!9^#V!$~·Ê-!9^#V!$^Õ!€ÑëÍ%DMë!9~#fo͆Êý,!9^#VBKÅ!9^#VÕ! 9^#VÕÍÞ-ÑÑÑÊ-!ÿÿÉ!9^#V`iÍ%ëÍ’ë!9s#rz³Ê†-!9^#VÕ!9^#V`iå! 9^#VÕÍ'4ÑÑÑë!9s#rz³Ê†-!9^#V!9~#foÍ%ëÍPYÉ!9^#V!ÍPYDM`ië!9~#foÍ…ÊÕ-!9^#V`iÍ%å!9^#V`iå! 9^#VÕÍÞ-ÑÑÑÊÕ-`iÉ!9^#VëÉÍÚ!9N#F!€å!åÍx$ÑÑÅ!!åÍx$ÑÑ"#?|µÊ .!ÿÿÉ! 9^#VÕ!$ ^!€å!9^#VÕÍž4ÑÑÑ!$ ^! 9~#foÍÉë!$ sz³Âa.`i!å~#fo#ëás#r!ÉÍÚ:=o&|µÂí.!ÿ}2=!}2=}2=!=å! åÍx$ÑÑ! å!åÍx$ÑÑ:=o&ÍÊ».!}2=!É! å:=o&#}2==#Ñs! å:=o&#}2==#Ñs!">:=o&DMë! 9~#foÍLÊ /! 9^#VBKÅ*>=å!9^#VÕÍž4ÑÑÑ`ië*>">`ië:=o&ëÍ%}2=`iÉÍÚþÿ! 9N#F!ë!9s#rÃk/!9å~#fo#ëás#r!9^#V!9~#foÍKÊ¡/! 9^#VÕÍx$Ñå`i#DM+Ñs!Í¡/Ã\/!9^#VëÉÍÚ!9^#V!ÍKÂÏ/!9^#V! ÍLÊÙ/!ýÿ"#?!ÿÿÉ!9^#Vë)))Å>DM! 9^#VÕ! 9^#VÕ! ^#VÕ! ^ë)>^#VëÍÙÑÑÑÉÍÚúÿ!DM!9^#V!9s#r!9^#V!$~·Ê‘0!9^#V!$^Õ!€ÑëÍ%DMë!9~#fo͆Ês0!9^#VBKÅ!9^#VÕ! 9^#VÕÍT1ÑÑÑÊ‘0!ÿÿÉ!9^#V`iÍ%ëÍ’ë!9s#rz³Êü0!9^#VÕ!9^#V`iå! 9^#VÕÍ/4ÑÑÑë!9s#rz³Êü0!9^#V!9~#foÍ%ëÍPYÉ!9^#V!ÍPYDM`ië!9~#foÍ…ÊK1!9^#V`iÍ%å!9^#V`iå! 9^#VÕÍT1ÑÑÑÊK1`iÉ!9^#VëÉÍÚ!9N#F!€å!åÍx$ÑÑÅ!!åÍx$ÑÑ"#?ÍÂ�1*#?Íʪ1!"#?!å!€å!€å;4ÑÑÑö1*#?|µÊ¶1!ÿÿÉ! 9^#VÕ! 9^#VÕ!$ ^!€åÍž4ÑÑÑÅ!"åÍx$ÑÑ"#?|µÊî1!ÿÿÉ!$ ^! 9~#foÍÉë!$ sz³Â 2`i!å~#fo#ëás#r!ÉÍÚüÿ!9N#F!ë!9s#rÃM2!9å~#fo#ëás#r!9^#V!9~#foÍKÊ«2`i#DM+^!9s#r!9^#V! ÍÊ“2! å!9^#VÕÍx$ÑÑ!9^#VÕ!9^#VÕÍx$ÑÑÃ>2!9^#VëÉÍÚ!9^#V!ÍKÂð2!9^#V! ÍLÂð2!9^#Vë)))È>^z³Âþ2!ýÿ"#?Í�6ÿÿÿÿÉ!9^#Vë)))Ë>^#VBK!9^#Vëß3Å!åÍx$ÑÑÿÍÊ>3!ýÿ"#?Í�6ÿÿÿÿÉÅ!#åÍx$ÑÑ!ë!$ s! 9å!! ^#VëÍø9Í�6ÍË7ͼ6!$ ^ëÍ:ÍÔ6ÍR7Íè6áåÍ–6ÍR7áÍ©6ò3!úÿ"#?Í�6ÿÿÿÿÉÍP3Q3Ž3‘3!ë!# s! 9Í–6Í�6ÍÎ9Êí3!ë!! s#r!$ s!úÿ"#?Í�6ÿÿÿÿÉ! 9Í–6Í:ÍÉë!$ s! 9Í–6Í�6Íù7Í:ë!! s#r! 9Í–6Éͺ!Ã44ͺ"Å*û:ë!€"û:ÍÁÅ*ù:ëÍ·Âm4*ù:!4Â_4#4*ý:+"ý:}´Â54ÁÉo&"#?Á*ý:ÉÍÚÜÿ!9å!.9^#VÕͱ$ÑÑ!9å!åÍx$ÑÑÉÅ! 9F+N+V+^+~+ngx±Ê¼4w# ï4ÁÉÅ!9^#V#N#F#nëx±ÊØ4s# ÃÍ4ÁÉ!9Åÿ^#V#~#fox±Êþ4¾Â5·Êþ4# Ãê4Á!ÉÁÚ 5!}´É!ÿÿ}´É!9Åÿ^#VÕ#~#fox±Ê55~·Ê55# Ã$5áÁÉ!9~#fo¯¾ÊM5#ÃD5ë}´É!9Å^#VÕ#^#V#N#FëÑÃê4!9Å^#VÕÕ#^#V#N#FëÑÃ$5Åÿ!9^#VÕ#~#foëx±Ê55~·ÊŸ5# Ã�5ëÃ$5!9Å^#VÕÕ#^#V#N#Fá¯Ã�5Å!9^#V#në~·ÊÒ5»ÊØ5#ÃÅ5!¯ÁÉ|µÁÉÅ!9^#V#n믾Êô5#Ãë5x±ÊÒ5 +~»Âô5ÃØ5!9~þ Ê)6þ Ê)6þ Ê)6Ã>6!9~þAÚ>6þ[Ò>6!}·É!9~þaÚ>6þ{Ú)6!¯É!9~þ0Ú>6þ:Ò>6Ã)6!9~þaÚf6þ{Òf6Ö o&·É!9~þAÚ|6þ[Ò|6Æ o&·ÉÑ!åëë*³>Ú6Ñ!åëë*±>w#w#w#wÉë*±>~#~#~#~Éá">*±>V+^+ÕV+^Õ*>éá">*³>Ñs#r#Ñs#r*>é*³>ë*±>"³>ë"±>É*±>¯>žw#Âý6É*±>~·ÂÈ9# 7ý9¯=Áɯ<ÁÉÅ*±>ë*³>###·ú;7®ú7Ã?7®ú7¾Ú7Â7+ÂA7¯ÁÉÅ*±>ë*³>¯Ž#Â]7ÁÉÅ*±>ë*³>¯ž#Âs7ÁÉÅ*±>ë*³>¦#ˆ7ÁÉÅ*±>ë*³>¶#Â�7ÁÉÅ*±>ë*³>®#²7ÁÉ*±>~/w#ÂÂ7É*³>~æ?ÈÅG*±>^#V#~#fo)ë)ëÒç7#Âß7DM*±>s#r#q#pÁÉ*³>~æ?ÈW*±>###~·ú8å·~w+Â8á 8Éå7~w+Â"8áÂ8ÉÕ~#Â38áO·ðÃú6Å*±>(>Í08y2&>*³>0>Í08:&>©2&>ͯ8(>*±>w#Âk8Á:&>·ú÷6ÉÅ*±>(>Í08y2&>*³>0>Í08ͯ8,>*±>w#ž8Á:&>·ú÷6É!,>¯w#µ8> 2'>!(>·~�w#ÂÆ8ŸæO,>!0>·ž#ÂÛ8yÞÂö8!(>4!'>5ÂÀ8É!'>5Ê(9!(>·~�w#Â9ŸO,>!0>·Ž#Â9yÎÂö8Ãê8,>!0>·Ž#Â19ÉÅ*³>0>~#ÂD9*±>,>~#ÂT9!(>¯w#Âb9> 2'>!(>·~�w#Âs9Òž9(>!0>·Ž#‡9ÎÒž9Â’9!'>5Âm9*±>(>w#­9ÁÉÍ!7ÊÈ9!¯ÉÍ!7ʽ9!¯<ÉÍ!7úÈ9ý9Í!7úÈ9ÊÈ9ý9Í!7ú½9ÃÈ9Í!7ú½9ʽ9ÃÈ9ë*±>s#r#6#6Éë*±>s#r#z·ò:6ÿ#6ÿÉ*±>^#VëÉÉ v (!)^btvfnr(!)^ˆ � “ ˜ � ¦ ® ± ¸ ½ Ä Ê Î Ó Ö Ú ß è ï õ ü     ( 0123456789abcdefw?Ú'¤,e.B/Ú'0$2$2>">-,-,é'é'é'Ú'Ú'Ú'Ú'Ú'Ú'Ú'Ú'-,ò'?÷'?ü'¹>(¹>(¹> (¹>(¹>(¹>(¿>(¿>m?­* CCREF.DOC CROSS-REFERENCE C PROGRAM SOURCE FILES CCREF will generate a cross-reference listing for a program written in the C language. (Actually, CCREF may be used to cross-reference any text file, but C keywords and operators will be ignored.) At the > prompt, type CCREF filname1.typ filname2.typ ... to produce a global cross-reference of the C source files named filname1.typ, filname2.typ, etc., and display results on the terminal. One or more source files may be included on the com- mand line. It is normally desirable to record results for later use; therefore, use the command CCREF filname1.typ filname2.typ ... >output.fil to cross-reference and save results in the file named output.fil. The symbol > followed immediately (with no spaces) by the output filename must appear as the last item on the command line. With either command form, it takes considerable time for the program to complete. If the second form is used, there will normally be no output sent to the terminal; therefore, CCREF may be detached using the MP/M signal , freeing the terminal for additional activity. Sample output from CCREF is listed below. This sample was pro- duced by typing the command CCREF MODEM.C MODEMF1.C MODEMF2.C >MODEM.REF The first three lines list references to #include statements, although this fact is not identified in the output. Remaining lines indicate first the variable name, then line numbers where that variable appears, grouped by source file name. Sample output follows: MODEM.C 43 46 MODEMF1.C 31 33 MODEMF2.C 37 39 abort MODEM.C 62 72 MODEMF1.C 394 ACK MODEMF1.C 53 MODEMF2.C 530 533 675 711 allrights MODEM.C 39 This is the end of CCREF.DOC. *+%"H%"F%"DÜÿ "Ž "Œ "Šyÿ 6"C+6„+ù!€^6 ÅF+N+ò<!* å!å!9~#·Ê—þ ÊROþ"Êkþ'Êk +Ñ}|Õå+#~·Ê‚¹Âu6#ã~#þ<Ê·þ>ÊÉ!4áÃRá6ÿ#6ÿ*å!åÍ * |µÊ´åÍÃå!Ååͯ"ÇÃÔrå! åͯ" ÁÁÚááÑÕÃRî ÍÍCan't open > or < file.$èwÉÑÁÅÕ*6ååÑ ååÍ ÑÂ)! þ9ÍúÑÁ!ÿÿÀë"6ÅáÉ´(É*ÇåÍÁÉ:B<*C¾ØÈë ͯ2B Í�ÃF Í·ÈÍþÊþÊþ €> _*C~+¾Ð#4N s> »ÌÉÍ> !£Í+ØÅ:E¹ÂºÍF2B_~ýÍÁþ ÂÓ ÂÎ Í> ÃG ÂÜþʘþÊäÃG!ÿÿÉÁÑÕÅ* ÕåÍŸÁÁÉë> å!§Í+ÑØÕë}þ  ÅÍÁ> _ÍáÉcon:rdr:pun:lst:Ö Ú=þò=_~O·À7ÃäÉÿÿÿÿÿÿÿ !"# ÁáÑÕåÅ! Õåö ¾ÂÑ#¾Ñái&ÉáÑ ~·Âº!h~þÿÊð#ÂâÃÁÑÕÅë~#Fë÷ÿ6%pùÿw623˜ëÍ7å!9ÍLÁÅy=åÍSáÊÕëÍò>þwÂDÑÕÍÑÍÑ<Ê!gs 6#6Ôÿ ~+¶Â|ÕåÅÍÁëás#r{²ÑÊë¯ÉÁÑÕÅ{þ ÚŸ!§Í+#Ø^{·Ä!É!P¯w#w!g~<Ê6ÿÍ !|~þrÊù!ƒN!nÕÍL}·Êøëõ*eyþbÊè>w#Âá%ñå!€=òò)åÍ$ÁÁÑ{=ÕÍSÍ<áÀ!7É!BN#FÅá"eÉÍx·Ê›þ Ò�¯¹+ÂJåÕ*eå!åÍTÁÁÑÕë˜ s{²ÑáÊäÕåÍL#ÍQ+ë*eF!ƒÑ>b¾Êtxþ ÊþÊä·Êh&ÉáÁÑÕÅå{·Èþ ÐÍ !˜~!nN#F¹{Àp+pH#ÉÍx·Â¯ÁáÑÕåÅÃ÷þ Ú½ÁÑáåÕÅÃú+å!9~þ Âçå!ƒ~þbÊä!á5Ââ> áÃç6á> *e wãåå`i#ÍQ᯾áÂÁÑÕÅÕ%,å!åÍ$ÁÁÁ|µ!ÿÿÈø!9n&:á·ÊŸɯ2Ú>Ã[å!9ÍLëáå):Ú¤õ|!P†wÒL#4!^ñwáÉ>ÿ2Ú>2-:E·ÄcÍÛÅx±ÊÇÕåÅÕëÍÑ:-OÍÁ·Â”!€ÿ DMá€ÑÃiáÑ:-þÂÇá­ Í!ÿÿÃÍWrite error - Disk full $Ñ`iÍ7å€ÍáÃ.!9~=+åÍSáÕV+^+F+NáëÉ "I> w+ Âû¯w w##w wàÿ ë#~+þ:Â&~##ÍKÖ@~#·Èþ.Ê7ÍKÃ&ë*I++·ÈÍKw#Ã=æþaøÖ ÉO!Š ~_#V²Àå!$åÍëáár+sbk#|µÉÁÑÅ}³o|²gÉÁÑÅ}«o|ªgÉÁÑÅ}£o|¢gÉ|µÈ!,ÉÁÑÅ|º}!­»Â­,ɯÉ|µÊ™!¯ÉÁÑÅ|º}!À»À-Éëz¼ÂÙ{½Âä!,Éëz¬úêz¼Âä{½!Ø-É|§!úèµÉ|î€gÉë|ºÂ}»!Ò -ɵÉëz¼Â{½!Ø-Éë|ø|g}oÃë¯Ãëø)Ã.ÁÑÅ{•ozœgÉ+|/g}/oÉ~oŸgÉ~#foÉëáãs#rëÉëáN#F#x±Êr~#»~#Â[ºÂ[`iéDM!z·>‚S\)ë)ëÒŠ =‚ɯõßz¬õ¬ëü>ë|·ô>MD!x<³z�>Ú¸jS\>)ë)ëÒÀ#å áÒÈ =¸ëñðëÍ>ëÃ>ÉT'!9"ØÉ*Ø++"ØÍLåÍp Á!9ë*ØÍ Ê *ØåÍI Áà É*Ø++"ØÍL}2Ü:ÜÍGå*Ø++"ØÍLåÍ‚ ÁÁà É*Ø++"ØÍL"Ý*Ýå*Ø++"ØÍLåÍ› ÁÁà É!å!9ÍLåÍ‚ ÁÁÉ!9ÍF}2Ü!9ÍL"ÚÍ· É!9ÍL"Ý!þÿå!9ÍLåÍ‚ ÁÁÉ*ÚÍFÍ“ÊÐ *ÚÍFÛÿ͓͓Êé *Ú#"Ú+ÍFåÍê Á÷ É:ÜÍGÃ0 !9ÍFåÍèÁÉ*Ý#"Ý+å!9ÍFÑ}*Ý6É!9ÍFå:ÜÍGåÍŸÁÁÃ@ ÍYó þÿà É!"A "á!9å*ØÍQ*Ø++"Ø*Ú#"ÚÍF"ãͯÊy É! }2å*ãÓÿͯ"æ|µÊ  *Ú#"Ú+ÍF"ã*ãÐÿ|µÂÁ !0}2å*Ú#"Ú+ÍF"ãÍ "ß*ãÒÿ|µÂà *Ú#"ÚÍ "á*Ú#"Ú+ÍF"ã�ÿÍ“Ê *áÍØÍ“Ê !"á*ãÃô !9åÍL++ÍQÍLåÍê Áà !9åÍL++ÍQÍLå! åÍ ÁÁà !"A Ã` ! "A Ã` !"A !9åÍL++ÍQÍL"C *C å*A åÍ´ ÁÁà !9åÍL++ÍQÍL"E "G *G #"G +ÍF|µÊ¬ Ù *G +"G å*E Í4ë*áÍ×ÊÇ *áÍ“ÊØ *E ë*á"G *E å*G åÍó ÁÁà É*ãåÍê Áà ÍY c+ dH oQ uZ xƒ sè Ãé Í· É* å!" *ÚÍF"ã0ÍÈÊC *ã9ÍÇÍ“Êj *  Íså*Ú#"Ú+ÍFÑÐÿ" Ã( * ëá" ëÉ!9ÍL"t !9ÍL"v !9åÍL+ÍQå*t öÿͯÊ´ *v ë! Í�ëÿ *t +å*v ͉åÍ‹ÁÑ}*t øÿͯÊá *v ë!Í(à *t öÿͯÊû *v ë! Í�à *v ë!Í("v *v |µÂŒ !9ÍLÉ!°ÿ9ù!T9ÍLÍ×Ê< !T9ÍLÍ>ÃC !T9ÍL" !9P"êå* å!V9ÍLåÍx ÁÁÁ"è!T9ÍLÍ×Ê¡ :åÍGàÿ|µÊ˜ !-åÍê Á*ß+"ßá *è+"è6-*èå*êåÍó ÁÁ!P9ùÉ!°ÿ9ù!9P"êå!V9ÍLå!V9ÍLåÍx ÁÁÁ"è*èå*êåÍó ÁÁ!P9ùÉ!9ÍLå!9ÍLÍ4"ñ *æͯÊ!:åÍGå*ñ åÍcÁÁ*ñ +"ñ #|µÊM!9åÍL#ÍQ+ÍFåÍê Á*ß+"ßÃ!*æ|µÊb! å!åÍcÁÁÉ!9ÍLë*ßÍØÊŠ!9ÍLåÍê Á*ß+"ßÃcÉ!9ÍL ÍÇÊ¡!0ä!7ë!9ÍLÉ*²å*°å*®å! 9ÍL|µÂÞ!ëá"®á"°á"²ëÉ! 9ÍL"²! 9ÍL|µÊ! 9ÍLÍFÖÿͯÊ! 9ÍLÍLÍ“ÊÙ! 9å! 9ÍLÍLÍQ! 9ÍL"®! 9ÍLÍF|µÊ]! 9å! 9ÍLåÍ3ÁÁÍ“ÊfÃ<! 9å! 9ÍLÍLÍQ|µÊÖ! 9ÍLë*®ÍúÊÐ! 9ÍLå! 9ÍLå! 9ÍLåÍ´ÁÁÁ"°|µÊÁ*°ÃÏÃÍ! 9åÍL+ÍQÃ�!ÃÏÃ! 9å! 9ÍLå! 9ÍLåÍ3ÁÁÁ|µÊ! 9å! 9ÍLÍLÍQÃ!ÃÏÃè*²å!9åÍL+ÍQåÍ ÁÁÃÏ*4å!9ÍL"4!9åÍL&ÍQ*4ÍF|µÊm*4ÍFå!9ÍL͹Í“Ê~*4#"4+ÃQ*4ÍF|µÊ¢*4å*4#ÍFÑ}*4#"4+Ã~á"4É*­å*«å*©å*§å! 9ÍL"§!9ÍLÍL"­!"«*­ÍF|µÊø*­ÍFå!9ÍL͹Í“Ê*§å!9ÍLÍ4å! 9ÍLÑÍØÍ“Ê0*­ÍF¤ÿ|µÂQ! 9åÍL#ÍQ+å!­åÍ`ÁÑ}*­#"­+Ã'*­ÍFÓÿ|µÊ! 9åÍL#ÍQ+å*­#"­+ÍFÑ}Ã'*«|µÂ™*­#ÍFå!9ÍL͓͛ʱ! 9åÍL#ÍQ+6-Ã'*­+ÍFå*­#ÍFÑÍÈÊ*­#"­+*­++ÍF"©*©#"©å*­ÍFÑÍÈÊ! 9åÍL#ÍQ+å*©Ñ}ÃÚ*­#"­+Ã'!ëá"§á"©á"«á"­ëÉ!"«ÃÜ! 9åÍL#ÍQ+6!9ÍLå*­ÍQ! 9ÍLå*§Í4Ã*^å!9ÍLÍLÍF¤ÿ|µÊ�!9ÍLÍLÍF"^Ã!9ÍLåÍL#ÍQ+!9ÍLÍLÍFåÍ2'ÁÃþ!\"^Ã! "^Ã! "^Ã! "^Ã!"^Ã! "^Ã!9ÍLÍLÍF"^ÃÃÍY²»SÄNÍTÖBßRÃè*^ëá"^ëÉ!9ÍLå!åÍ�ÁÁÉ*<å*:å!9ÍL":*:"<*:ÍF|µÊl*:#":+ÃV*:#å*:ÍFÑ}*:+":#*<ë*:ÍûÂl*<å! 9ÍLÑ}á":á"<É*¨å!9ÍL"¨*¦å!9ÍL"¦*¦&}æo"¦*¨ÍF|µÊê*¨ÍFå*¦͹Í“Êû*¨#"¨+ÃÒ*¨ÍF|µÊ *¨Ã!ëá"¦á"¨ëÉ!9ÍLaÍÈÊ7!9ÍLzÍÇÍ“Â]!9ÍLAÍÈÊZ!9ÍLZÍÇ͓͓ƒ!9ÍL0ÍÈÊ€!9ÍL9ÍÇ͓͓É!€ÿ9ù*�å*‹å*‰å*‡å!Œ9ÍLÍFͯÂÉ!Œ9ÍLÍFå!Œ9ÍL͓͛Âà!Œ9ÍLÍFöÿͯÍ“Â÷!Œ9ÍLÍFÖÿͯÍ“Ê!ëá"‡á"‰á"‹á"�!€9ùëÉ!"�!"‡!"‰!Œ9ÍLÍF|µÊN!Œ9ÍLÍFå!Œ9ÍL͹Í“Êe!Œ9ÍLÍFöÿ͓͓Êq*�ͯÍ“Êû!åÍ(%Á"‹*‹##å*‹#ÍQ*‹#6*‹6#6!Œ9ÍLÍFÃ*‹6.Ã*‡|µÂÆ*‹6^ÃÌ!"�Ã!Œ9ÍL#ÍFå!Œ9ÍLÍ›Âö!Œ9ÍL#ÍFͯÍ“Â!Œ9ÍL#ÍFöÿͯÍ“Ê*‹6$Ã"!"�Ã!Œ9ÍL#ÍF¢ÿͯÊO*‹6!!Œ9åÍL##ÍQÃa*‹6[!Œ9åÍL#ÍQ+!]å!Ž9å! 9å!€åͯÁÁÁÁ"�*�|µÊ¯*‹##å*�åÍ(%ÁÍQ*‹##ÍLå! 9åÍ"'ÁÁ!"�Ã*‡|µÊå*‰ÍFÃÑ!Ã*‹6*ÃåÍYÃ^Ã$Ã*ÃÉÃ*‹6L*‹#å!Ž9åÍ`ÁÑ}ÃÍY®.¶^Ï$%[²*Ãè*�|µÂ+*‹ͯÍ“ÊB*‡åÍÎÁ!ÃÃë*‡|µÂb*‹6#6*‹"‰"‡Ãë*‹ÍFÖÿ|µÊ–*‰å*‹ÍQ*‹å*‰ÍQ*‹"‰Ãë*‰å*‡͹ÊÉ*‰ÍLå*‹ÍQ*‹å*‰ÍQÃë*‹å*‡ÍQ*‰å*‹ÍQ*‹"‡!Œ9åÍL#ÍQ+Ã**‰6#6*‡Ã*å* å! 9ÍL"! 9ÍLÍF|µÊ‡! 9ÍLå! 9ÍLå*åÍ´ÁÁÁ" ͯÊe! 9åÍL#ÍQ+Ä!9ÍL|µÊw* Ã~! 9ÍL" ÇÃ#* ëá" á"ëÉ*•å!9ÍL"•!9ÍLÍF|µÊÿ!9ÍLÍFaÍÈÊ×!9ÍLÍFzÍÇÍ“Êï!9ÍLåÍFàÿÑ}!9åÍL#ÍQ+Ã¥*•ëá"•ëÉ!9ÍLå!9ÍLÑÍ×Ê)!9ÍLÃ0!9ÍLÉ*1å!ÿÿ"1!9ÍLÍLÍF|µÊ‘!9ÍLÍFÃq!9ÍLÍLÍFå!9ÍL#ÍFÍ›Ê�!"1Ñ!9ÍLÍLå!9ÍL͛ʢ!"1Ñ!9ÍLÍLÍFöÿ|µÊÁ!"1Ñ!9ÍLÍLÍFöÿ|µÂà!"1Ñ!9ÍLÍLÍFå!9ÍL##ÍLåͪÁÁ|µÊ!"1Ñ!9ÍLÍLÍFå!9ÍL##ÍLåͪÁÁͯÊ=!"1ÑÍì!U'åÍôÁÍì!l'å!9ÍLÍFå! 9ÍLÍFåÍôÁÁÁÑÍY\L„^¥.Ä$ã[!Ã@*1ÍÈʰ!9ÍLåÍLë*1ÍQ*1#"1ëá"1ëÉ*¾å!9ÍL"¾*¾ÍF|µÊCÃç*¾#"¾+ÃÎ*¾ÍF ÍÈÊ*¾ÍF~ÍÇÍ“Ê*¾ÍFåÍèÁÃ@Íì!'å*¾ÍFåÍôÁÁ*¾ÍFöÿ|µÂ@! åÍèÁÃÜá"¾É*Hå!9ÍL|µÊ¿Ãv!9å!9ÍLÍLÍQÃN!9ÍLÍFÃæ!‡'"HÃ!‹'"HÃ!�'"HÃ!“'"HÃ!›'"HÃ!¢'"HÃ!¦'"HÃ!­'"HÃ!´'"HÃ!¹'"HÃ!Á'"HÃÍYƒ^Œ$•.žL§\°[¹]Â^Ë!Ô*ÃÝÍì!Ó'å*Hå!9ÍLåÍôÁÁÁ!9ÍLÍF¥ÿͯÂT!9ÍLÍFßÿͯÍ“ÊvÍì!ã'å!9ÍL##ÍLåÍôÁÁá!9ÍLÍF´ÿ|µÂ¡Íì!ô'å!9ÍL#ÍFåÍôÁÁÍì!(å!9ÍLÍLåÍôÁÁÃ]! åÍèÁá"HÉ*Ìå!9ÍL|µÊ=!9ÍLÍFÃ*!9ÍL##ÍLåÍ@&Á!9ÍL"Ì!9å!9ÍLÍLÍQ*ÌåÍ@&ÁÃ:Ã:ÍYë[ë!ÃüÃÒá"ÌÉ*Få*Då*Bå!9ÍL"B! 9ÍL"F! 9åÍL+ÍQÍØÊŒ*BåÍÁ"D#͓͓ʱ*F#"F+å*DÑ}öÿͯÊ®ñÃh*F6*D#ͯÊÎ! 9ÍLå*F͓͛ÊÚ!Ãá! 9ÍLëá"Bá"Dá"FëÉ!€þ9ù* å*å*å*å*å*å*þå!"þ!’9ÍLÍ×ÊP!åÍÄ!ÁåÍÕ!Á*þ)ë!�9ÍLÍLÍFÓÿ|µÂ¤*þ#"þ+)ë!�9ÍLÍLåÍÙ!Á!’9ÍLå*þÍ›ʤ!åÍÄ!ÁåÍÕ!Á!9å!@å*þ#"þ+)ë!”9ÍLåÍÌ#ÁÁÁ"ͯÊÜ!åÍÄ!ÁåÍÕ!Á!’9ÍLå*þÍ4"Íì!å!(åÍ ÁÁ*|µÊR*þ)ë!�9ÍLÍLå!D(åͯÁÁ" * |µÂOÍì!å!F(å*þ)ë!”9ÍLÍLåÍ ÁÁÁÃz ÃX*Ç" !"!"!Ž9å!€å* åÍHÁÁÁ|µÊS *üͯˆ*ò͓ʗ!Ž9åÍ—Á*"*+"ÍÈÊ< !Ž9å*)ë!9ÍLå!åÍÁÁÁ|µÊ *#"+*å!�9å*þ)ë!”9ÍLÍLå!å*åÍø ÁÁÁÁÁÃ. *å!�9å*þ)ë!”9ÍLÍLå!å*åÍø ÁÁÁÁÁ*#"+Íé$Ã�*ö|µÊG *Í“ÊP ÃS Ãd*å*þ)ë!’9ÍLÍLå*å͵ ÁÁÁ* åÍÁ*þ#"þå!”9ÍLÑÍØÂýÍÕ!á"þá"á"á"á"á"á" !€9ùÉ*ôͯÊ¿ É!9ÍLÍØÊã Íì!U(å!9ÍLåÍôÁÁÍì!](å!9ÍLåÍôÁÁÉ!°ÿ9ù*ô|µÊ !!P9ùÉ*ð|µÊ!!T9ÍLͯÍ“Â6!*ðͯÊ3!!T9ÍL͓͓ÊÁ!*úͯÊ[!!R9ÍLÍØÂX!*ö͓͓ʈ!Íì!a(å!X9ÍLå*ö|µÊ~!!j'Ã�!!f(åÍôÁÁÁ*ø|µÊ¤!Íì!h(å!\9ÍLåÍôÁÁ*öͯÊÁ!Íì!c(å!Z9ÍLåÍôÁÁÃ!Íì!å!n(åÍ ÁÁÉͨÉ!"ð!"ô!"ö!"ø!"ú!"ü!"ò!9ÍLÍF|µÊ³"!9ÍLÍFåÍ2'ÁÃw"ã"!"ôã"!"üã"!"úã"!"öã"!"øã"!"ðã"!"òã"!åÍÄ!ÁÍÕ!ã"ã"ÍY$"-$"E'"C0"F9"HB"LK"NT"V]"YÃf"!9åÍL#ÍQ+Ã"É*¸"å*¶"å*´"å!"´"*ò|µÊà"! 9ÍLåÍ—Á!|å!9ÍLåͪÁÁ"¸"|µÊ_#!9ÍLë*´"ÍÇÊ#! 9ÍLå!|åÍ�ÁÁ"¶"Í“ÊB#! 9åÍL##ÍQ++å*¶"ÍQ*´"#"´"+! 9å*¸"#"¸"ÍQ*¶"|µÂ\#è#Ãà"!9ÍLë*´"ÍÇÊ„#! 9ÍLå!|åÍ�ÁÁ"¶"͓ʠ#*´"#"´"+! 9ÍLå*¶"ÍQ*¶"|µÂ¶#Íì! (åÍôÁͨ*´"ëá"´"á"¶"á"¸"ëÉ!€ÿ9ù*Ê#å*È#å!"Ê#*ü|µÊ�$!†9ÍLÍLå!D(åͯÁÁ"È#ͯÊ#$Íì!å!F(å!Š9ÍLÍLåÍ ÁÁÁÍÕ!!ˆ9ÍLå*Ê#Í4|µÊI$!9å!€å*È#åÍHÁÁÁ͓ʂ$!9å*Ê#)ë!Œ9ÍLå!Œ9ÍLå*Ê#Í4åͺ"ÁÁÁë*Ê#"Ê#Ã#$*È#åÍÁÃÖ$!†9ÍLÍLå*Ê#)ë!Œ9ÍLå!Œ9ÍLå*Ê#Í4åͺ"ÁÁÁë*Ê#"Ê#|µÊÖ$!†9ÍLå!á'ÍQ*Ê#ëá"È#á"Ê#!€9ùëÉ! å!åÍD'ÁÁ|µÊ%!å!åÍD'ÁÁ&}æo+++ͯÍ“Ê%ÍÕ!Éÿÿ!9åÍL##ÍQÍ ÊG%!96#6!%""%*"%##ÍL"$%#Í“Êñ%Ãk%*$%""%ÃM%*$%ÍLå!9ÍLÑÍúÊî%!9ÍLå*$%ÍLÑÍûÊ×%*"%##å*$%ë!9ÍLÍQ""%*"%å*$%ÍLå!9ÍLÍ4ÍQ*$%å!9ÍLÍQ*"%##å*$%##ÍLÍQ*$%##ÉÃb%!9ÍLÍ Ê&!Ã&!9ÍL"&%åÍÁ""%#ͯÊ$&!ÿÿÉ*"%å*&%ÍQ*"%##åÍ@&ÁÃG%É!9åÍL++ÍQ!%"<&*<&#Í“Ê!'Ãi&*>&"<&ÃS&*<&##ÍL">&å!9ÍLÑÍ Ê'!9ÍLÍLë!9ÍLå*>&Í›ÊÂ&!9ÍLåÍLå*>&ÍLÑÍQ*>&##ÍL">&*<&ÍLë*<&å!9ÍLÍ›Êý&*<&åÍLå!9ÍLÍLÑÍQ!9å*<&ÍQ*<&##å!9ÍLÍQ!9ÍL##å*>&ÍQÉÃ`&ÉÁáÑÕåÅ+#~·Â)'É!9n&}þaØþ{Ðî oÉáÑÁÅÕåÍo&·ð%É omatch: can't happen char = %c, %x hex \0x%02xBOLEOLANYLITCHARESCAPECCLCCLENDNEGATENCCLCLOSURE**** unknown ****%-8s at: 0x%x, string = [%s]=, lchar = %c, next = 0x%x (c) Copyright 1984, Software Engineering Consultants rCan't open %s %-12s: %d %s%s:%03d:usage: grep [-cefhlnvy] [expression] Illegal expression grep.c, tools.c, and tools.h were published in the October 84 issue of Dr. Dobb's Journal. Grep is a global regular expression print utility according to THE UNIX PROGRAMMERS MANUAL, although a more common expansion is generalized regular expression pattern matching utility. My purpose in uploading these files is to save others the trouble of typing them in (about 20 pages source code). The programs have been modified by me to compile with C/80, as explained below. See Dr. Dobb's for instructions in using the program. As a brief example, the command "grep -n pattern file1 file2 file3" will search the files for pattern and list the line number(s) if found. The pattern can incorporate wild cards and other generalities. C/80 Version 3.0 from The Software Toolworks will not compile grep.c as listed because it has no: a) linker b) typedef statement c) FILE type d) #defined NULL e) stdin f) stdout g) stderr h) fgets i) stdio.h j) capability to call a function with a different number of arguments than defined. To compile grep.c with C/80: In TOOLS.H: 1. After #define NUL 0, add #define NULL NUL 2. Add #define EOF -1 3. Add #define TOKEN struct token 4. As explained in Section 8 of the C/80 Version 3.0 documentation add the following: #define FILE int #define stdin fin #define stdout fout #define stderr 0 extern int fin, fout; 5. In the typedef statement on page 58 delete the words "typedef" and "TOKEN". In TOOLS.C: 1. Delete the two #include directives 2. On page 61 add the argument "boln" to the omatch() call. The modified line should read: while(*lin && omatch(&lin, pat, boln)) 3. On page 64 change the expression (dstart - dest < maxccl) to (dest - dstart < maxccl) In GREP.C: 1. Delete the line #include "a:stdio.h" 2. Change #include "b:tools.h" to #include "tools.h" 3. Add #include "printf.c" 4. Add #include "tools.c" 5. Add char *fgets(); 6. On page 77 change if(matchs(line, exprv[j])) to if(matchs(line, exprv[j], 0)) 7. On page 83 change bdos(11) to bdos(11,0) 8. At the end of grep.c add #include "STDLIB.C" 9. In STDLIB.C add the function fgets() from page 155 of K&R. Robert C. Briggs FOG Member #92 de "STDLIB.C" 9. In STDLIB.C add the function fgets() from page 155 of K&R. Robert C. Bri#define stderr 0 extern int fin, fout; 5. In the typedef statement on page 58 delete the words "typedef" and "TOKEN". In TOOLS.C: 1. Delete the two #include directives 2. On page 61 add the argument "boln" to the omatch() call. The modified line should read: while(*lin && omatch(&lin, pat, boln)) 3. On page 64 change the expression (dstart - dest < maxccl) to (dest - dstart < maxccl) In GREP.C: 1. Delete the line #include "a:stdio.h" 2. Change #include "b:tools.h" to #include "tools.h" 3. Add #include "printf.c" 4. Add #include "tools.c" 5. Add char *fgets(); 6. On page 77 change if(/* ------------------------------------------------------------------- * GREP.C: A generalized regular expression parser * * Published in Dr. Dobb's Journal, October 1984, page 50 * * Copyright (c) 1984 Allen Holub * Copyright (c) 1984 Software Engineering Consultants * P.O. Box 5679 * Berkeley, CA, 94705 * * All rights reserved. * * This program may be copied for personal, non-commercial use * only, provided that this copyright notice is included in all * copies and that this program is not modified in any way. * Copying for any other use without previously obtaining the * written permission of the author is prohibited. * *-------------------------------------------------------------------- */ #include "printf.c" #include "a:tools.h" #include "a:tools.c" /* * GREP * * Search a file for a pattern. * * The algorithm used here is essentially the algorithm in Software Tools in * Pascal (pp 145f.). Though the routines have been changed somewhat to put * them into good 'C'. See tools.c for details. * * This program is a healthy subset of the UNIX program of the same name. * The differenced are as follows: * * - the -s, -x, and -b options are not supported. * - the meta-characters b()+? are not supported. * * Usage is: * grep [-vclnhyef] [expression] files ... * * To compile with the Computer Innovations C86 compiler use: * * cc1 grep * cc2 grep * cc3 grep * cc4 grep * cc1 tools * cc2 tools * cc3 tools * cc4 tools * link grep tools,,,c86s2s.lib * * To compile with Aztec CII use: * * cc1 -x4000 grep.c * as grep.asm * cc1 -x4000 tools.c * as tools.asm * ln grep.o tools.o a:libc.lib */ #define CPM 1 /* Comment this out if you're compiling * in an MSDOS system. */ #define MAXLINE 128 /* Maximum size of an input line. */ #define MAX_EXPR 64 /* The maximum number of regular expressions * separated by newlines or | allowed. */ /* The following global flags are true if a switch was set in the * command line, false otherwise. */ int vflag, yflag, cflag, lflag, nflag, hflag, fflag; main(argc, argv) int argc; char **argv;{ int i, j, linenum, count, numfiles, exprc; int line[MAXLINE]; FILE *stream; TOKEN *exprv[MAX_EXPR]; char *fgets(); i = 1; if(argc < 2) abort(pr_usage(1)); if(*argv[i] == '-'){ /* expand the switches on the command line */ expand_sw(argv[i++]); if(i == argc) abort(pr_usage(1)); } /* Get the pattern string */ if((exprc = get_expr(exprv, MAX_EXPR, &argv[i++])) == 0) abort(pr_usage(2)); numfiles = argc - i; /* Get number of files left to process * on the command line. */ fprintf(stderr, "(c) Copyright 1984, Software Engineering Consultants\n"); do{ if(numfiles){ stream = fopen(argv[i], "r"); if(stream == NULL){ fprintf(stderr, "Can't open %s\n", argv[i]); continue; } } else stream = stdin; count = 0; linenum = 1; while(fgets(line, MAXLINE, stream)){ #ifdef CPM if(!fflag || yflag) stoupper(line); #else if(yflag) stoupper(line); #endif for(j = exprc; --j >= 0; ){ if(matchs(line, exprv[j], 0)){ count++; pr_match(linenum, line, argv[i], 1, numfiles); } else pr_match(linenum, line, argv[i], 0, numfiles); linenum++; cntrl_c(); } if(lflag && count) break; } pr_count(numfiles, argv[i], count); fclose(stream); }while(++i < argc); abort(); } /* ----------------------------------------------------------------------- */ pr_count(fcount, fname, count) int fcount, count; char *fname;{ /* Process the -c flag by printing out a count and, if more than * one file was listed on the command line, the file name too. */ if(!cflag) return; if(fcount > 1) printf("%-12s: ",fname); printf("%d\n",count); } /* ----------------------------------------------------------------------- */ pr_match(linenum, line, fname, match, numfiles) int linenum, match; char *line, *fname;{ /* If a match is found print the correct thing * as specified by the command line switches. */ char buf[80]; if(cflag) return; if((vflag && !match) || (!vflag && match)){ if(!hflag && ((numfiles > 1) || lflag)) printf("%s%s", fname, lflag ? "\n" : ":"); if(nflag) printf("%03d:", linenum); if(!lflag) printf("%s", line); } } /* ----------------------------------------------------------------------- */ pr_usage(num) int num;{ #ifdef DEBUG fprintf(stderr,"%d ",num); #endif fprintf(stderr,"usage: grep [-cefhlnvy] [expression] \n"); } /* ----------------------------------------------------------------------- */ abort(){ exit(); } /* ----------------------------------------------------------------------- */ expand_sw(str) char *str;{ /* Set global flags corresponding to specific * switches if those switches are set. */ vflag = 0; cflag = 0; lflag = 0; nflag = 0; hflag = 0; fflag = 0; yflag = 0; while(*str){ switch(toupper(*str)){ case '-': case 'E': break; case 'C': cflag = 1; break; case 'F': fflag = 1; break; case 'H': hflag = 1; break; case 'L': lflag = 1; break; case 'N': nflag = 1; break; case 'V': vflag = 1; break; case 'Y': yflag = 1; break; default: pr_usage(3); abort(); break; } str++; } } /* ----------------------------------------------------------------------- */ int do_or(lp, expr, max) char *lp; TOKEN **expr; int max;{ int found; TOKEN *pat; char *op; found = 0; /* Extract regular expressions separated by 0R_SYMs from lp and * put them into expr. Extract only up to max expressions. If * yflag is true, map string to upper case first. */ if(yflag) stoupper(lp); while(op = in_string(OR_SYM, lp)){ if(found <= max && (pat = makepat(lp, OR_SYM))){ *expr++ = pat; found++; } lp = ++op; if(pat == 0) goto fatal_err; } if(found <= max && (pat = makepat(lp, OR_SYM))){ found++; *expr = pat; } if(pat == 0){ fatal_err: printf("Illegal expression\n"); exit(); } return(found); } /* ----------------------------------------------------------------------- */ get_expr(expr, max, defexpr) TOKEN *expr[]; int max; char **defexpr;{ FILE *stream; int count; char line[MAXLINE]; #ifdef DEBUG int i; #endif /* Get regular expressions separated by | or newlines either out of * a file or off the command line depending on whether the -f flag * is set. The expressions are converted into pattern templates * (see tools.c) and pointers to the templates are put into the array * expr[] (which works similar to argv). * * Return the number of expressions found (which can be used in a * similar fashion to argc). */ count = 0; if(fflag){ /* Then *defexpr is the file name and expressions should be * taken from that file. */ if((stream = fopen(*defexpr, "r")) == NULL){ fprintf(stderr, "Can't open %s\n", *defexpr); abort(); } while((max - count) && fgets(line, MAXLINE, stream)) count += do_or(line, &expr[count], max - count); fclose(stream); } else /* *defexpr is the expression itself. */ if(count += do_or(*defexpr, &expr[count], max - count)) *defexpr = " "; #ifdef DEBUG /* Print out all the regular expressions after they have been * converted into pattern templates (see tools.c). */ for(i = count; --i >= 0;){ pr_tok(expr[i]); printf("------------------------------------------------\n"); } #endif return(count); } /* ----------------------------------------------------------------------- */ cntrl_c(){ #ifdef CPM /* If any character was hit, and that character is a ^C, then abort. */ if(bdos(11,0) && ((bdos(1,0) & 0x7f) == 0x03)) abort(); #endif } #include "STDLIB.C" ter is a ^C, then abort. */ if(bdos(11,0) && ((bdos(1,0) & 0x7f) == 0x03)) abort(); #endivÿÆŒTOOLS.Cbßÿ šÿ‹ÿžÿ�ÿöÿ‘ÿõÿòÿ–ÿŒÿ�ÿ—ÿÕÿ“ÿœÿ !"›ÿ�ÿÄÿÂÿ×ÿ#$%&'()*+,-./01Öÿ™ÿŠÿ’ÿ˜ÿ�ÿ”ÿoÿÐÿØÿÒÿÑÿÓÿÏÿ23456789:;<=>?@A‰ÿ¼ÿˆÿûÿºÿÝÿ‡ÿ³ÿÔÿ†ÿ‚ÿÁÿ„ÿÅÿ°ÿ«ÿ±ÿBCDEFGHIJKLMNOPÙÿ¾ÿ¬ÿ£ÿ­ÿÎÿ¶ÿ ÿúÿƒÿÞÿÃÿ´ÿªÿ½ÿ¯ÿÆÿ¹ÿ·ÿËÿ…ÿÈÿ»ÿ²ÿŽÿQRSTUÚÿÍÿÇÿVWXYZ[\¤ÿ¢ÿÊÿ¸ÿ¦ÿ¥ÿÀÿ•ÿÛÿ]^_`aÌÿÉÿ¡ÿùÿåÿµÿ¨ÿŸÿ�ÿÿþ«ŒÍòÐYd}wwþd{x Ü'�µŠBðÑ Ha¨Áü3EíÖYdg‘õÇɼø�¨�7ø¡¶øçóuÀlj2Rv¸«ç¤ðüÓ_wh·øËÞYdg‘µ>Œí¥ò³ÄêÏ?ýñ�K!ƒ/±LæÎ"ëÃØ^*?KŒ¡ŽðüÓ_ñ$ŽùHáÄ̼!RÞÌpM˜ÃÁYd­õÇíÝâþòïß?9‹¬5–¯>�ZP¡Ëïðéë÷ý_œEvYk,_=.ÊÏ( ¤¨Ù:‹ì,²¾O> Uq¦dŠ©\bN¨±õÔ`ZR!);˜h65N§¤ª—‚I g‘u4år‡VÅßPNÂàäjl/•Ÿ%†‰ì+ÁxSˤ¡Þ@JqYרz Ó€“08ù€VÅ™’)|€‰ŒilüØSo æGr¹uYÆöÒ›ÆQAÌ%"'R˜‘ç'ŒVÑ��“P.ç,Þx3'rY)ÏL-©©ÁGƒ8'‚L8EЪ˜üÜ35[g‘�EÞ,8‹¼rÖÙU†³Èú>ù€il&…P£añ&€á@”�“'ì ¢†Ì/1SÔ:‹¬9b*\Í&Eè¬U‚�&l�gqÂÞP€(BT )jœEÖRÚ$sb_¥”Ë­³È+g�õ†µL…kŠ7;´Â;Ìc1#Ô$ ¹x³CžÇb:Üß½;y@n…»g�]e<©b8©8™%p"´ÂLÊ€iÚaB‰qáÍ ã¨ ˜ ׄ#Ï Å›­³È8‘š@…¦dqŒâ |@�ÓV58òœÀ‰À4m‹0abØ�çDÊYd¦>l¦Â5ÁŒãÄ4ˆ œdÄ18˜¦m&øER5[à…qœ㨦¤P%{øE@ÐFo˜¼áˆÓâÍ)Ž’¯ mô†„Á‰œEÖº&QR™„Á‰0§™7Æ›âÅÚ:‹¼rÖY,�Í|`R¨Iò<Ö²CVRvÈ�U`QÜ9ë,–Ç~<´Âè{ìGPÄe†ý¨sÖY,�«À¢=Š7�³Îby|”|¡¡Ý8«ýxh…7×è{žß=yÿì�¡Þ\:ãÑ�³Z¯2œÕYT±RÔÃDÑ­³Z#ëÏ^FXøñ€8j‰a¢dÀœÈY­‘uœÿ“*ƒ#æE- S³î“ˆóReT1˜ÄY­‘uM¢¤2)Ô"!l�Õy嬳Z·ÂèÑ o® �q笳Z¯2ôC<ÂT¸&HÀTÌ%b­¥ÈT ˆcp"ÔÃD‘³Z#ëV˜IH@CðóB[gµF^9ë¬ÖóX zo:g�Õú(ùBrñ�!N…kovh…w˜ÇbF£ÎYgµ^eèõ¹7k˜x„6zÃÁ‰P“(©L œ„1•†0 Îj�¬ÇâËxˆG˜EDŽhU¬8Fƒ9«5²¬¼™m�ÇhUœš"‘"øAM¢¤2)gµFÖãXJ<òfN„Zb˜(ÂQò5¡ÆIi�ä€0'2ðÆY­‘5'B-1Lm�ÕYŽ t&Ó¶ÐÞ€¡fR§’Í·?g>Åp”|MÎj�¬§Â5Q€˜K”xDjS%Ž¢j@¦ñfo àÑÎY­‘5'ÂØ)XóG¾Ì aRÔ`ÒÂp"%_ÈY­‘u‰±ÝOâ~ N„©pM‹/a‡#Â\ê“â¬ÖÈÚD® b°ºGL…k'‚¢Àˆcp"VÞÌœÕYËL¼ÙAQKÂÞÌÀÉ´*V ŠêD@åÒY­‘õİ/8"̈1—ºGp"Ìiæ�ñf†8'rVkd]K E[à>Õ‰ >Ì"…„1��wà£è¬ÖȺЕ€†¨Ý:«5òÊYgµöã¡F�VxsmèŒG7Îj­�’/4`kÁÛÅ›Ñ�³zyìǃ:�‚2®i(ÞìÐ ï0�ÅŒFÎêå1Ej�HÑxð/Ú<ûh•³ÈÔ$J*“ú0¼ -šHÿ”Āáäî5‰’ʤà9P#*4‘<;‹Œ)‰'BM¢¤2)ƒ�Lƒ8'Bñ†¶#ા¡‰�£³È˜Ê‚àSN„qTSR;xƒ¨Ràˆ©,œsJrà£BC¦Â5 #g‘Q£ >0Þ/ƸŒÌüA¦Â5�¡fRÿñ/ Sáš ¥ xCÁYdÔh‚ìÍ Ñ”KÄ1Ä€Lƒ8Fñ†FàDf‡àM%„8%NÞÌ�$€#æä,2ñDjv´Ñ&ŽàD Ó ŽQ¼!Ô$J*“‚ç@e  ˆ'ÊP³uÙYdÜÂØ)h£7¼^Œq'˜‚`*UEx˜¤AC H Âd®â„½!g‘Á �½!LålíÀ‰ XN„ͦxƒ8aÄ18¦RUD•RÀr}ã,2‚ohCã1UŠ7˜“734TMÉ05à#_i´uy嬳X+â‰2ÃTΆÀ*°(Þa³)ÞŒF�³WÎ:»ÊØ,#¯œu¶¡BLCM;V#x詃¢™L 5‰B¬ºg�Õ«ŒTˆ œc¯#Ö:QŠL%Ä1j%•Ia¬â�•73Lã�73g52è€Ô%'of ñ€&rMàˆ±/œ)Ú:«‘WÎ:«k£û³ñ¸sÖY}”|¡9°Â£GÈ�Þô¨i„Àêâ¢Ó«Œ7=’´Š*5d*!¯œuV%_h@¬F7Îj�+ôÈC`uñ|Ô9«u`uqÑ9«¯œ½rÖÙUÆfùy嬳Þ0šØHHCCÅOwªîÐPà¦rVk9«½a4Tüt‡©œÕZºšD!ç ê¹¡ÀÝ�³Î®2NÎZ1 81Úè SŽ˜_"Uá G4xë,2žpl!Œ†ŠŸn�gÄe°G4 ¥¢BTþ!ŽQ“(©L µHˆÆYd„I­Âxß6„TG´Ñ†0*~º#£ŠA’B4*4%ÃÎ"ãæì Q!Ð)) BS20Üȼ64ž%ÿÏE™šØþR�'Gg—ß® ¦Á�l¾]A9‹ ú5ñRÈðh ¦ræ§“)Ìd:'…8FM¢¤2©o ¨I”T&…Z$ø€†ÆÞPƒù¥³È˜ÊY­eë,òÊYg±êpq±ÀÛ9´¬ºrC�/.ÐcÑ9«uhY]\tÎê+g�ÕTAO”ö£ÎYgµðË9ͼA�}ç,–ÇWÎ:‹åqn(ðÅz¬Ÿî÷ûuç,–Ç9¨Š¡eÕ9ë,–ÇŠx¢ÌÐP`lÐÅ£ÎYg¯œuv•±Y>F^9ë¬7¬)Ô!ŒP“(äºg�Õ«ŒŸÒ‚B•–èׄL¥o8‚yú5ñRÈ0ÂåtKØψ'Êg528jTŠ*ãñ“Ã/P“(©Lj ¼ÃDP¨ÒZEcÐ* dØY� Ndà&†ã¤&j ¦AðŠx¢ 5;DN¤Ž| äàœÕÈ�æ@L¥ÑFoÂàD P¥¥5‰’ʤ ¦'rV#ƒ•˜P„©AM¢¤2)øEÀp"VÞÌvØÃ�á>ÀDÞ"¯œuV7Tü�zìϾ�;gõQò…†XáÑ#äÀ oz4Tüt„Àêâ¢sV+â‰2C¬ðV¸Å~Ô9{嬳«ŒÍò3òÊYg½aø ¥Mb&Ó¡Žà £v7Î:«Wψ'Ê€Õ„àǨðb ¥M2'ö5‰’ʤ?ó¼ÃXJ g52"'RG>ÐÖY�¼rÖY­ˆ'Ê Ö²ÆÛ�¡âm�õ·õ¯_;«õ°~¼ÆÛ�¡âm�õß×#¼~í¬ÖÃz¿ÆÛ�¡âm�õ§õÈY�åŽ:g¯œuv•±Yž ¯œuöþîÝɃÎSYP+<ˆšíÐPñÓj…,jÖÁFCÅO»g�Õ«ŒŸ² Za&eÀ4m‹0a¬âœ�•73´Ñ¦1¿„¨ÙÖY�Œ'[%2h¨ø)¢Âúé~¿_#*¬Ÿš5|À8NLo j¶žO”qV#CÐFo˜8‚¡fRLÓ¶ÓÖY�ì¬FÆ}"´ÂLÊ€iÚa ˜j�HDBœÒQFãÇcRdœÄ8«‘Á)Â$PoÀ‰0�qÑ$5�ã‚ |€ °šTž(Bƒ9«‘1ŽjŠû»w'8ƶi´ƒã‚ j4Áˆcˆ�oȰ{R;g52mô†I�#�•7³Å3))¨I”T&1 mô†I�£³b"'Rภ³î“(>`?'R`"Âdèׄ ;«‘ÁqAfë¬FvV#ã>¢!Vbfd($RPe¨Á 3ñf„ù%Ïïž¼v‚£äkrV##IGÌ í„á Æ*Fƒ¡Utàã$€ã‚̸�˜Ê‚ÀÉg52¼ ¤ØGAñÌ…@<©8Ö†Îx�±§Ò ŽÁ‰P$°³dà 8jo0p"DCh£7L 8b~‰5‹/ë|ÀTrV#ƒ#Úè Cœ­¢'&6´þ'‘ÁAaì�‰š�³,¾l® �1|@ Gì·Îj䕳Îêû»w'ȉ¤Ù!³ø²C6�³º&Q˜OÆ:<òòÉ‹¿Ÿü¹sV{à ¥¢êœuV¯2ÕÆQ¡&QR™T'aˆ"³fšI�08æ4óÆx3C;«‘!`š¶E˜¶Îj䕳Îj?²¨úë§û5^¿vVÈ¢fè{4Tü¯_;«dQ3ô=ÖOͯ_;«dQ3ô=Ïïž¼v2‚"ž(3ìG�³ÎjR**ôØwÎêDҠǾsV³ø‚ûÎYgõQò…dQ3Bߣ¡â§Àë×Îêå1–Çy5»x>Bßcýt¿ß¯ñúµ³zyŒåqDÍ.ž�Ð÷X?5ë ÇÅæšã=NîÎ;gõò˜J �RQ¡ÇóÎY½<ž+’Eç¬ÖºJ žß:«—Ç~< ¢fÏGè{<œüõñýÉèÆY½|e8.6×èñpxxÞ9«—¯DÍpÑã÷ÎY½<¾rV/�©ºqV/_Ž‹Í5ÇzžwÎêå+Q³‹‹ÎY½<¾rV/�I©¨Ð£‰�„4žŸ<üØá‘¨ÙóÉx‡Ãó'/Ÿ¼øûɨsV/�ýx ¥¢Â›ûÑ�³zùÊp\l®+ofè!¥Ä:�RQ�:gõòU`UÛËÁp\l®+of;Ì'ãQç¬^¾"¥¢B�}ç¬^_9«—ÇsE²èœÕZW „Ãó»'ïŸ�Ü:«—Ç~<$’ozìGÎêå«p书�Å—Í5ÇÅèÆY½| J |¸;¿uV/_¨'wç·Îêå+UáðüîÉûg'·PÄe†ý¨sV/_hh,“·0›kŽ ô8<¿{òþÙIç¬^¾ºrV/�çŠdÑ9«µnh,“·0›kŽ ô8qøåñ³ÎY½<†á¸Ø\—šD¡…:<5uÎj}å¬Ö~<�RQáõkŽ ô=ö£gµÖ3•µÂC"iF�³ZkEŒ/½™�a*\“³Yðc(â—dš>ÀD³ùF*n�ÕÈúß¶xŒ6zäÀœsšyc¼™!ŽÁ‰0®‰VÞÌàÇÎjd @¿$Ó´ðûÎY�ì¬FÆç¨@g2m Ý:«‘õT¸¦€áôùïÿöõ/ÿþý�OûÓfÄ­ðpúõOûͧ?çï§£ö£ÎY�Œ#_ ñDÚè “Gp"¬¿®w8J¾�³YO…k NŸÿþo_ÿòïßÿø´?ÝaFÜ §_ÿ´ß|úsþ~:Úáù¨sV#ãÈ—EÝŸ½Mt3™ÎI]Ÿn�Ç3ñfN>Àˆ³Èhh>™Í¼™A|³^0 qÀeœ á( ¯I)—ˆœÅÚ:‹¼rÖY=Žj@‡\L‡b..F7ÎjíÇðÆo{äbFxôC.o{¬ÿo=¡�pM¢†\̨sVk*�nœÕZ·Ê§OŸîÏ~Ûÿ~vºC.fÔ9«µöã!ƒ¾Çú©Y�ÐN¸&QÃú©Y�:gµ¾rV_9{嬳«ŒÍò òÊYg[õ’ãbH$Í÷wïN�IÓÝ8ëì*ã£ò†' N„V˜I0MÛ"LŠ7 jP|`Ä1îïÞ�<„Úè SŽ˜_:‹ŒDÒl�ûä|€`h<)hh>™Í¼™A|³"8 £U/9.†þ9 ŒPÅg‘!%š8Š7 jP|à˜ÔÔaofˆ3)mô†Iu@ˆ;\Æ ª˜5;‹ŒI ´ê%ÇÆ*NáMð a* j…‡æTe,¾l® �1Úè p'r­¢'&6o“4ˆcÌÉ›̤”­³È+g� hæ“BM¢�«ÎYgŒ£Ð!‘4Iƒ‰¤Ù\:ãÑ�³:y®iH$Íæšãbtã¬Æò¸J |¸;¿E`…§îÎO;ÌÉ¢sVcy\%NîÎoX¡ÇéÉÝùi‡¹"YtÎj,�«ÂㇿÝ"°B�ÓÇ;í0W$‹ÎY�åq•@8qøåñ³[VèqzþâþðËãg§æŠdÑ9«±<®'O<¹E`…§'O<9í0W$‹ÎY�åq•@8<<¿E`…§‡‡ç§æŠdÑ9«±<®‡‡ç'?nX¡ÇéááùÉÃ�ÓsE²èœÕXW „‡“¿>¾?¹E`…§'}|rÚa®H�³Ëã*�ðpxx~‹À =NÏO;ÌÉ¢sVcy\%Ïïž¼vr‹À =NÏïž¼vrÚa®H�³Ëã†Æ2)|‹À =Nóò³0ñÈ /�O;gõ•³ºUÞðx8ýmóG€ð-ög¿�ípºC`µC"iF�³Ú�‡DÒl®9.Ð÷8<<Çë×H$Íæšã}�‡ÃÃó‘³Z·Ê§�•73ôøÓoáÏý§»DÒl®+of£ÎYM%üxH$Íæšã}�ó÷‡_?9«u«¼áñpZj…¿ÕNw‰¤Ù\—šD�:gu«¼áñpjèŒÑcöÛÙSsºK$ÍæÚÐ�:g\9  �pM¢†õS³uÎ^9ëì*c³ü‚¼rÖÙ‰™Ê‚Zá!‘4#Üß½;y@N$Mw㬳«ŒÏŠ“œSšFu‰I ã¨À‰ÀqA�•73䕳ÎjE3˜îïÞ�< ÇÒ¼L$M笳ú(ùBC"iFGžkI³¹æ¸Ý8«µ®‡‡ç·Îj­«ÂÃááù-ÆŠhH$Íæ:°òf6êœÕËãU†‰˜+’Åc)œTœÌ8¢¡±L #¯œÕZ74–Iá[gõò8–æe"iÐ#‘4�³zyœHôH$ÍæÚÐwÎêåñX ±4/I3êœÕËã¹"YtÎj�åñ•³WÎ:»ÊØ,¿ ¯œuö¿´+¢!–æe"iF�³zyÛ2^>Ó2a>É2`2cÍ>¯2s2t>2r>2v!Ì"@!"D!@"B!"F Í·ÊÉÍ!€ùF#x·ÂÜÃ:~#Âܯ!ù|¯2i~#þ Êó·Ê:þ" 2ià +}|~#·Ê:ÅG:i·xÁÊ.þ"¯2i+w#þ Â+6#ÃóÕ!Þ6#Â@ÍA¯2n2?*jé*ë*Íú|µÈ+¯Ã`É"d!è"f!!ÿÿÉ>õÍÅÚŒo&åÍ–áñ=þÂ}à Í ÍÅÚw~Í2æʸåÍÅͼëÍÁáÍ56þÿ!À+ÉWÖØþ ?ØÕ_!Þ~æ7ÑzÈ?ÉÅͧåþ:>Â÷ÍžÖ@w#ÍÍ5þ.Âͯww#w#w#wÑÁÉÅþ*>?Ê@ÍŒÚ>w#ÂÁÍŒØÃ5> w#Â@ÁÉÅåͧ͵ÒgÕ ÿÍÑ2qáÁÃ&ÕÖ0Ox‡‡‡€€�G͵Òjþ/ʆÑÃSáxÃ\Ížþ.7Èþ:7Èþ7Èþ!ÉþaØþ{ÐÖ Éþ ʨþ ʨÉþ0Øþ:?ÉÅ·OÂæ Þ!šæyÂÕÁÉÕ$Ñ ÂÌ7ÁÉÍÅÚãÖo&))T])))ë!šyÁÉÅåÕõ ÿÍ2pñõæ_ ÍñÑáÁÉÅåÕõ:pÃÿÿÿÿÿÿÿÿÿÿùÃÆÿ÷ÿÿÿÿÿÿÿù(Âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý$Çÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù ÃÆÿ÷ÿÿÿÿÿÿÿù(Âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý%Çÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù!ÃÆÿ÷ÿÿÿÿùÿ¾ÿùÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿ÷ÿÿÿÿùÿ¾ÿùÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿù ÿ¾ÿÂùÿÄÿøÃÿ±ÿÿøÆÿÿÿÿÿÿÿ÷ÿÿÿÿÿ÷ÿÿÿÿÿ÷ÿÿÿÿÿ÷ÿÿÿÿÿ÷ÿÿÿÿ›ÿÿÿÿù ÿ¾ÿøÆÿ–ú>Âù ÿºÿù Ûÿÿÿÿÿÿÿÿÿ÷›ÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÿÿ¿Âù ÿ¸ÿø ÃÿÃÿ÷ÿ›ÿ÷ÿÿÿÿ÷ÿÿÿÿÿÿÿÿù(Âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý&ÇÿÿÿÿÿÿÿùÃÆÿ÷ÿÿÿÿÿÿù"ÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÍÁ8Í&%ÍÒ%Í7ÍÓÍ/ÍÄ&ÍÌCÁÉÅ!©ÿ9ùDM! ë!7 s#r! ë!9 s#r! ë!; s#r! ë!= s#r!# ë!? s#r!' ë!A s#r!+ ë!C s#r!/ ë!E s#r!3 ë!G s#r!7 ë!I s#r!; ë!K s#r!? ë!M s#r!C ë!O s#r!G ë!Q s#r!K ë!S s#r!O ë!U s#r*~#foÿÒ¤ !S åÍÉ=Ñà !å!åÍÏCÑÑë`is! å`in&åÍ&ÑÑ`in&å!z åÍõ=ÑÑ! å`in&å!£ åÍõ=ÑÑÑ`in&À|¢g}£oÍåë! s`in&0|¢g}£oÍåë! s`in& |¢g}£oÍåë!! s`in&|¢g}£oë!, s! å! n&åÍ&ÑÑ! å! n&åÍ&ÑÑ!" å!! n&åÍ&ÑÑ!- å!, n&åÍ&ÑÑ! n&)ë!7 ~#foå! å! n&å!à åÍõ=ÑÑÑÑ! n&)ë!? ~#foå! å! n&å!þ åÍõ=ÑÑÑÑ!! n&)ë!G ~#foå!) å!! n&å!9 åÍõ=ÑÑÑÑ!, n&)ë!O ~#foå!4 å!, n&å!t åÍõ=ÑÑÑÑ!¯ åÍÉ=Ñ! å`in&å!Ù åÍõ=ÑÑÑ!åÍÉ=Ñ!*åÍÉ=Ñ!4 å!) å! å! å!OåÍõ=ÑÑÑÑÑ!tåÍÉ=Ñ!™åÍÉ=Ñ!¾åÍÉ=Ñ!ãåÍÉ=Ñ!, n&)ë!O ~#foå!! n&)ë!G ~#foå! n&)ë!? ~#foå! n&)ë!7 ~#foå! å! åÍõ=ÑÑÑÑÑÑë!W9ùëÁÉTTYCRTLPTUL1TTYPTPUP1UP2TTYPTRUR1UR2TTYCRTBATUC1 MP/M does not implement the I/O BYTE I/O Byte value is currently %d decimal, %x hexadecimal or [%s] binary LST: is currently %02x hex or [%s ] binary, or %s: PUN: is currently %02x hex or [ %s ] binary, or %s: RDR: is currently %02x hex or [ %s ] binary, or %s: CON: is currently %02x hex or [ %s] binary, or %s: ----------- Making the IOBYTE %02x hex or [%s] binary where, for the following devices: Device LST: PUN: RDR: CON: Value %s %s %s %s 00 assigns TTY: TTY: TTY: TTY: 01 assigns CRT: PTP: PTR: CRT: 10 assigns LPT: UP1: UR1: BAT: 11 assigns UL1: UP2: UR2: UC1: [%s] assigns %3s: %3s: %3s: %3s: Å!´ÿ9ùDM!2åÍÉ=Ñ!oåÍÉ=Ñ!¬åÍÉ=Ñ`i6#6`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r! ~#fo+++ë! s#r`i6#6`i^#Vr+sënå`i^#Vr+sën&ÍóÑúÿë! s#r! ~#foøë! s#r! ~#fo#ë`is#r`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë! s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!" s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!$ s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!& s#r*~#fo|µÊ`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!( s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!* s#r*~#foÿÚ¦* n}þÂ`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!, s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!. s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!0 s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!2 s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!4 s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!6 s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!8 s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!: s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!< s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!> s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!@ s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!B s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!D s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!F s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!H s#r`i^#Vr+s`i^#Vr+sënå`i^#Vr+sën&ÍóÑë!J s#r! ~#foå!ßåÍõ=ÑÑ! ~#foå!åÍõ=ÑÑ! ~#foå!CåÍõ=ÑÑ! ~#foå!uåÍõ=ÑÑ! ~#foå!§åÍõ=ÑÑ! ~#foå!ÙåÍõ=ÑÑ! ~#foå! åÍõ=ÑÑ! ~#foå!=åÍõ=ÑÑ! ~#foå!oåÍõ=ÑÑ! ~#foå!¡åÍõ=ÑÑ! ~#foå!ÓåÍõ=ÑÑ! ~#foå!åÍõ=ÑÑ! ~#foå!7åÍõ=ÑÑ! ~#foå!iåÍõ=ÑÑ! ~#foå!›åÍõ=ÑÑ! ~#foå!ÍåÍõ=ÑÑ!" ~#foå!ÿåÍõ=ÑÑ!$ ~#foå!1åÍõ=ÑÑ!& ~#foå!cåÍõ=ÑÑ*~#fo|µÊ)!( ~#foå!•åÍõ=ÑÑ!* ~#foå!ÇåÍõ=ÑÑ* n}þÂÞ!ùåÍÉ=Ñ!. åÍÉ=Ñ!c åÍÉ=Ñ!™ åÍÉ=Ñ!, ~#foå!¶ åÍõ=ÑÑ!. ~#foå!ê åÍõ=ÑÑ!0 ~#foå!!åÍõ=ÑÑ!2 ~#foå!R!åÍõ=ÑÑ!4 ~#foå!†!åÍõ=ÑÑ!6 ~#foå!º!åÍõ=ÑÑ!8 ~#foå!î!åÍõ=ÑÑ!: ~#foå!""åÍõ=ÑÑ!< ~#foå!V"åÍõ=ÑÑ!> ~#foå!Š"åÍõ=ÑÑ!@ ~#foå!¾"åÍõ=ÑÑ!B ~#foå!ò"åÍõ=ÑÑ!D ~#foå!&#åÍõ=ÑÑ!F ~#foå!Z#åÍõ=ÑÑ!H ~#foå!Ž#åÍõ=ÑÑ!J ~#foå!Â#åÍõ=ÑÑ*~#foÿÒ)!ö#åÍÉ=Ñ!, ~#foå!"$åÍõ=ÑÑ!. ~#foå!V$åÍõ=ÑÑ!0 ~#foå!Š$åÍõ=ÑÑ!2 ~#foå!¾$åÍõ=ÑÑ!4 ~#foå!ò$åÍõ=ÑÑ!6 ~#foå!]Ñ Maximum console number check routine at: %04xH.åÍõ=ÑÑ!8 ~#foå!¦ÃÚ System initialization cold boot routine at: %04xH.åÍõ=ÑÑ!: ~#foå!ïÃ# Optional idle procedure routine at: %04xH.åÍõ=ÑÑë!L9ùëÁÉ This portion will tell you where your CCP starts, what your BDOS entry address is, and where your CBIOS jump table begins. The CBIOS jump table is also displayed. Your CCP beginning address is: %04xH. Your BDOS beginning address is: %04xH. Your BDOS entry address is: %04xH. Your CBIOS jump table begins at: %04xH. Cold start routine address is: %04xH. Warm start routine address is:  %04xH. Console Status routine address is: %04xH. Console Input routine (waits for char.): %04xH. Console Output routine address is: %04xH. List device output routine address is: %04xH. Punch device output routine address is: %04xH. Reader device input routine address is: %04xH. Home disk routine address is: %04xH. Select disk routine address is: %04xH. The set track disk routine address is: %04xH. The set sector disk routine address is: %04xH. The set DMA disk routine address is: %04xH. The read disk routine address is: %04xH. The write disk routine address is: %04xH. List device status routine address is: %04xH. Sector translate disk routine address is: %04xH. CP/M+ (3.x) extended bios calls follow. Note that some of these may NOT have been implemented by your system integrator. Check carefully with your manual before trying to use them. Console output status check routine at: %04xH. Aux device input status check routine at: %04xH. Aux device output status check routine at: %04xH. Character i/o table addr check routine at: %04xH. Character i/o devices init routine at: %04xH. Get disk drive table address routine at: %04xH. Set # of multi-R/W sectors routine at: %04xH. Flush host buffer routine address at: %04xH. Memory-to-memory block move routine at: %04xH. Get or set time clock routine at: %04xH. Set memory bank -- absolute routine at: %04xH. Set mem bank for next DMA move routine at: %04xH. Set mem bank #s for next move routine at: %04xH. Bios call reserved for system integr at: %04xH. Bios call 1 reserved for future use %04xH. Bios call 2 reserved for future use %04xH. MP/M II XIOS call jump addresses follow. Select memory segment routine at: %04xH. Device Polling routine at: %04xH. Start clock routine at: %04xH. Stop clock routine at: %04xH. Exit critical region routine at: %04xH.Å!å! åÍÏCÑÑå*Ñs#r*~#foÍå|µÊT%!Å%ÃW%!Ê%å!Ï%å*##åÍ>ÑÑÑ*~#fo|µÂ‰%* 6* 6ÃÃ%*~#fo|¢g}£oå* Ñs*~#foÍå|¢g}£oå* ÑsÁÉMP/MCP/M%sÅ* n&å* n&å*##å!ü%åÍõ=ÑÑÑÑÁÉ This is %s %d.%d. Å!þÿ9ùDM`i¯w#w`i~#fo÷ÿ|Ò­&`i~#fo++++|µÂU&! ~#foå`i^#Vr+sëÑ6 ! n&€|¢g}£o|µÊ‚&! ~#foå`i~#foÑ61&Õ&! ~#foå`i~#foÑ60! ån&)ëás`i^#Vr+sÃ&! ~#fo 6ë!9ùëÁÉÅ!‘ÿ9ùDM!ñ/åÍÉ=Ñ!(0åÍÉ=ÑÍàCåÍ3>Ñë!B s!B n}þ Âþ&!B 6YÃ'!B n}þYÊ'!B n}þNÂÔ&!B n}þNÂ"'Ãè/!,0åÍÉ=ÑÍàCåÍ3>Ñë!B s!B n}þ ÂL'!B 6ÃŽ'!B n&¿ÿ|Úl'!B n&¯ÿ|Úw'!\0åÍÉ=ÑÃ*'!B n&¿ÿë!B sÃŽ'Ã*'!å! åÍÏCÑÑë!J s#r!œÿ|Ò¹'!å! åÍÏCÑÑ!å!B n&å! åÍDÑÑÑë!H s#r!H ~#fo|µÂç'ÃÌ&!B n&å!åÍÏCÑÑ!å!åÍÏCÑÑAë!? s!å!åÍÏCÑÑë!F s#r!F ~#foë!@ s#r!C 6!C n&ñÿ|Òv(!C n&ë! å!@ ~#foå!C n&Ñnëás!C 4Ã:(!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë!L s#r!@ ^#Vr+sënë!N s!@ ^#Vr+sënë!O s!@ ^#Vr+sënë!P s!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë!Q s#r!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë!S s#r!@ ^#Vr+sënë!U s!@ ^#Vr+sënë!V s!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë!W s#r!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë!Y s#r`iå!U n&åÍ&ÑÑ! å!V n&åÍ&ÑÑ!F ~#foå!? n&å!`0åÍõ=ÑÑÑ!Ÿ0åÍÉ=Ñ!F ~#foå!Û0åÍõ=ÑÑ!C 6!C n&ñÿ|Ò^*!C n&ë! n&å!ã0åÍõ=ÑÑ!C 4Ã,*!é0åÍÉ=Ñ!L ~#foå!L ~#foå!&1åÍõ=ÑÑÑ!N n&å!N n&å!S1åÍõ=ÑÑÑ!O n&å!O n&å!‚1åÍõ=ÑÑÑ!P n&å!P n&å!±1åÍõ=ÑÑÑ!Q ~#foå!Q ~#foå!à1åÍõ=ÑÑÑ!S ~#foå!S ~#foå! 2åÍõ=ÑÑÑ`iå!U n&å!U n&å!:2åÍõ=ÑÑÑÑ! å!V n&å!V n&å!n2åÍõ=ÑÑÑÑ!W ~#foå!W ~#foå!¢2åÍõ=ÑÑÑ!Y ~#foå!Y ~#foå!Ï2åÍõ=ÑÑÑ!ü2åÍÉ=Ñ!*3åÍÉ=Ñ!Y ~#foå!W ~#foå!V n&å!U n&å!S ~#foå!Q ~#foå!P n&å!O n&å!N n&å!L ~#foå!^3åÍõ=ë!9ùë!H ~#foå!? n&å!œ3åÍõ=ÑÑÑ!H ~#foë!@ s#r!C 6!C n&ðÿ|Ò^,!C n&ë!. å!@ ~#foå!C n&Ñnëás!C 4Ã",!Ü3åÍÉ=Ñ!H ~#foå!4åÍõ=ÑÑ!C 6!C n&ðÿ|Ò°,!C n&ë!. n&å!!4åÍõ=ÑÑ!C 4Ã~,!H ~#foë!@ s#r!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë![ s#r!@ å~#foëás#r!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë!] s#r!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë!_ s#r!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë!a s#r!@ ^#Vr+sënå!@ ^#Vr+sën&ÍóÑë!c s#r!'4åÍÉ=Ñ![ ~#foå!Y4åÍõ=ÑÑ!] ~#foå!‹4åÍõ=ÑÑ!_ ~#foå!½4åÍõ=ÑÑ!a ~#foå!ï4åÍõ=ÑÑ!c ~#foå!!5åÍõ=ÑÑ!N n&+++Íòë!e s#r!Q ~#fo#å!e ~#foÑÍkë!g s#r!S ~#fo#ë!i s#r!S ~#fo#Íåë!k s#r!g ~#foå!k ~#foÑÍúë!m s#r!e ~#foå!S5åÍõ=ÑÑ!g ~#foå!Œ5åÍõ=ÑÑ!i ~#foå!Ä5åÍõ=ÑÑ!k ~#foå!ý5åÍõ=ÑÑ!m ~#foå!56åÍõ=ÑÑ![ ~#foë!@ s#r!c ~#foë!@ s#r!Q ~#fo#Íåë!D s#r!C 6!C nå!D ~#foÑÍìÒå/!C n& ëÍ|µÂˆ/!e ~#foå!m6åÍõ=ÑÑ!’6åÍÉ=Ñ!Ê6åÍÉ=Ñ!C n&ëÍ|µÂ¯/!C n&)))å!7åÍõ=ÑÑ! å!@ ~#foå!C n&Ñn&åÍ&ÑÑ! å! 7åÍõ=ÑÑ!C 4ÃÑÑÁÉÁÉÅ!9ùDM! å!QBå! åÍg>ÑÑÑÍ�6ÁÉÅ!9ùDM! n&åÍoBÑ|µÊZ>! n&àÿÃa>! n&&ÁÉÁÉÅ!Yÿ9ùDM!« ^#Vr+së~#foë! s#rÍ�«ë!¥ s#r! ^#Vr+sënë`is{·ÊBB`in}þ%ÂB! ë!œ s#r!£ 6#6!  s!ž s!Ÿ sÍ�n}þ-Â÷>! ^#Vr+s!Ÿ 4Í�n}þ0Â?!  4Í�n&åÍ@CÑ}·Ê$?! åÍoCÑÃ'?!ë!¡ s#r! ^#Vr+sënë`is{þ.Âo?! åÍoCÑë!£ s#r!ž 4! ^#Vr+sënë`is`in&åÍ3>Ñ}þDÊ ?þUÊÜ?þXÊå?þOÊî?þCÊ4@þSÊe@þÊÞAÃäAÍ�¥~#fo|ÒÜ?!œ ^#Vr+së6-Í�¥åÍ�¥~#foÍúëás#r!¡ ^#Vr+s! 6 Ãô?! 6Ãô?! 6!¡ å~#foå! n&å!¥ ^#Vr+së~#foå!œ åÍžBÑÑÑѯgÍúëás#rÃÝ@!œ ^#Vr+sÕ!¥ ^#Vr+së~#foëás!¡ ^#Vr+sÃÝ@!ž n}·Âx@!£ 6È#6!¥ ^#Vr+së~#foë! s#rÍ�n}·ÊÝ@Í�£|µÊÝ@!œ ^#Vr+sÕ! ^#Vr+sënëás!£ ^#Vr+s!¡ ^#Vr+sÓ@Í�œ6! ë!œ s#r!Ÿ n}·ÂKA!¡ ^#Vr+s!ÿÿ|ÚKAÍ�­åÍ�¯å!  n}·Ê(A!0Ã+A! å!9Aå!9~#foéÑÑÑ#|µÂHA!ÿÿÃHBÃù@Í�œn}·Ê�AÍ�­åÍ�¯å!œ ^#Vr+sën&å!}Aå!9~#foéÑÑÑ#|µÂŒA!ÿÿÃHBÃKA!Ÿ n}·ÊÛA!¡ ^#Vr+s!ÿÿ|ÚÛAÍ�­åÍ�¯å! å!ÉAå!9~#foéÑÑÑ#|µÂØA!ÿÿÃHBÙAÃB!ÃHBÍ�­åÍ�¯å`in&å!Bå!9~#foéÑÑÑ#|µÂB!ÿÿÃHBÃ?BÍ�­åÍ�¯å`in&å!0Bå!9~#foéÑÑÑ#|µÂ?B!ÿÿÃHBÖ>!ÃHBë!§9ùëÁÉÅ!9ùDMÍ�^#Vr+sÕÍ�ëásÁÉÅ!9ùDM! n&Ÿÿ|ͯÚšB! n&…ÿ|Í©ÁÉÁÉÅ!ÿÿ9ùDMÍ�åÍ� ÑÍìÒìBÍ�^#Vr+sÕÍ�öÿÚÙBÍ�0ÃáBÍ�7ëás!&Ã7CÍ� åÍ�åÍ� Ñ͉åÍ�åÍžBÑÑÑë`isÍ� åÍ�åÍ� ÑÍ)åÍ�åÍžBÑÑÑ`in&#&Ã7Cë!9ùëÁÉÅ!9ùDM! n&Ðÿ|ͯÚkC! n&Æÿ|Í©ÁÉÁÉÅ!þÿ9ùDM`i¯w#wÍ�~#fon&åÍ@CÑ}·Ê¼CÍ� Í?åÍ�^#Vr+sënѯgÐÿë`is#rÃ}CÍ�ÃÃCë!9ùëÁÉà Í7Å:PO*RëÍÁÉ:n·oÊïC¯2n&ÉÅÍÁþÊ þ!ÿÿÈoþ ÂDÅ ÍÁ. &ÉÍ7Å*+++:PG‡€_å*RDM*TT]!9DãéÁÉÍ Åþ ÂOD Í> _Í Í·Â^DÁÉÍþÊ ÁÉn&å!U n&å!S ~#foå!åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå/******************************************************************************/ /* PROBE.C Version 1 Revision 02 2 January 1985 */ /******************************************************************************/ /* */ /* Copyright (c) 1984, 1985 by Paul M. Sittler */ /* */ /* Released for non-commercial use. Commercial use is expressly undesired. */ /******************************************************************************/ PROBE will tell you what version of CP/M or MP/M you are running, display the operating system serial number, and display the I/O byte if appropriate. It then displays the addresses of the CCP, BDOS, and BIOS. The BIOS jump table will next be displayed including the extended BIOS calls for CP/M+, and XIOS calls if running MP/M. It then displays the disk parameter blocks (DPB's), disk parameter headers (DPH's), group size, total disk size, number of directory entries, space required for directory entries, total usable space on the disk, and the disk space allocation vectors for any selected drive (A: through P:). PROBE was written in 'c' to help decode the disk formats of a number of different machines to aid in transportability. It was inspired by BDLOC, TELL, ALLOC, SERNO2, and a number of other public domain CP/M utilities. My method of use of PROBE has been to move it to the target machine and run it after pressing a CTRL-P to get a hard copy print of the target machine's disk parameter blocks. Because of this modus operandi, I have not used any pretty screen stuff. You may wish to be prepared to hit the old control-S as it starts scrolling by. I have used the information gathered this way to write a "Uniform(tm)"-like utility (also in 'c') to change my disk parameter blocks to read/write a whole bunch of floppy formats. This works very nicely on my machine (Heath H-89/90 using the CDR soft-sectored controller), and I have plans to move it to Osborne and Kaypro, as well as certain others. PROBE is NOT a "uniform(tm)"-like utility. It is a tool I developed to develop one for the Heath w/CDR controller. Use it in good health! /******************************************************************************/ /* Files and what they do */ /******************************************************************************/ For PROBE version 102, the files have been broken into a number of smaller files instead of all in one huge thing. PROBE102.SUB Submit file to put it all together. PROBE102.C Contains following functions: main() calls all the other functions. getsysversn() gets the operating system version, figures out what it is, and splits it into version and revision numbers. Writes a text string of either MP/M or CP/M, depending on which it found. shosysversn() prints the operating system version. showiobyte() gets the I/O byte and displays it so that even my brother can understand it. He said "I never saw it explained that way before!" Well, neither had I, before. . . tell() displays all those addresses of jumps and things, for CP/M, CP/M+, MP/M, like BDOSLOC and TELL used to, only more of them. ASCTOBIN.C asciitobin() takes a byte and returns a null-terminated string of 0's and ones, grouped in two groups of four, with a space between groups. For example, 'E5' will return "1110 0101\0". PROBSDPB.C showdpb() prompts for drive, resets disk system, and decodes and displays the disk parameter block (dpb), the disk parameter header (dph), shows allocation block size, disk size, number of directory entries, total useful disk capacity, etc. Then it displays the disk space allocation vector as a series of 0's and 1's in a nice table. PROBSERN.C get_ser_num() gets the CP/M serial number and prints it. PROBSIGN.C signon() is the why and whodunnit thing that prints all the garbage on the screen at first. Also answers the wadduzzit do question (sorta). BDOSDEF.H Sometimes useful BDOS definitions that are used in some of the files. CBIOSDEF.H Sometimes useful CBIOS definitions that are used in some of the files. /******************************************************************************/ /* Style notes. . . (or soapbox time) */ /******************************************************************************/ I tend to 'overdocument' the code in an attempt to make the code readable for others (and for myself 6 months later). This is probably due to my mother having been frightened by an assembler when she was pregnant. My variable and function names are huge but hopefully descriptive. I had the experience a few years ago of needing to make "a few small changes" on old fortran-iv code that I had myself written only a few months before. You remember, variable names like A1, AA, A2, and no comment cards allowed. . . I personally feel that no-one should EVER be allowed to teach programming courses until they have spent at least two years doing maintenance programming. I am also VERY tired of hearing people say that "c is a terse and obtuse language." So is COBOL, if properly written. . . I hope that the source may be useful as a tutorial on both techniques of 'c' programming and system-level programming in the CP/M operating system. My placement of the curly braces is pragmatic; it is easier for me to see them in that rather baroque placement, and it enables me to draw squiggly lines with a pencil in a bizarre game of connect the braces that I sometimes play. . . Sometimes that's how I function. . . If the whitespace and comments get in the way, just use "HACK" and remove all comments, whitespace, line feeds, returns. Then, globally search and replace with your favorite editor and shorten all variable names and function names to two characters or less. It will save a lot on disk space, fer shure!! /******************************************************************************/ /* Who was that masked man anyway? */ /******************************************************************************/ Scapegoat for this drivel is: Paul Sittler - My Word!! RCP/M (409) 845-0510 (late nights) Veterinary Public Health RCP/M (409) 845-0509 (24 hours) Dept of Veterinary Public Health, Texas A&M University College Station, Texas 77840-4468  å! åÍsDÑÑ#|µÂwQ!ÿÿÁÉÍ�åÍ�åÍables me to draw squiggly lines with a pencil in a bizarre game of connect the braces that I sometimes play. . . Sometimes that's how I function. . . If the whitespace and comments get in the way, just use "HACK" and remove all comments, whitesvÿ7%ASCTOBIN.CHßÿ õÿòÿœÿ–ÿÐÿ�ÿžÿ‹ÿÕÿoÿ‘ÿ—ÿŒÿšÿ�ÿ�ÿöÿÏÿÄÿ“ÿÂÿ !"#$%&'()* ÿÎÿØÿ×ÿÖÿ±ÿ›ÿ™ÿÆÿûÿÔÿ+,-./012345¤ÿ¢ÿ˜ÿ�ÿ†ÿãÿÃÿ¬ÿáÿÓÿ6789:;<=>?@AËÿÇÿºÿ°ÿ’ÿŠÿ‰ÿ‡ÿ„ÿ‚ÿúÿùÿñÿïÿîÿêÿéÿåÿÞÿBCDEFÜÿÙÿÒÿÑÿÅÿÀÿ¼ÿ²ÿ¯ÿGˆÿÿþÓÞ˜,"=ù*ª¡ï4o¥<×àvH÷ј,"ýø§¿½szS¶²Ãúôòº;üçßÎø÷O0 zĶӼ’‚eÁ‹Ó€t®Á]ušWR.—k,Ø`31 [)øãû—ã£wÕi^I¹Æ‚Ízƒ¿Pƒ»ê4¯¤\cÁfÜLLƒ<<,XOLÃG&¤s îêt�¯^?NL™~SLßÿÅ#OFLO×~ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååvÿÈ�BDOSDEF.HNßÿ šÿ‘ÿ�ÿ–ÿ›ÿÐÿ‹ÿ™ÿŒÿÕÿoÿœÿ�ÿŠÿ !ºÿõÿ�ÿòÿÜÿ­ÿùÿ«ÿ¬ÿ"#$%&'()*+,“ÿ¶ÿžÿ±ÿ»ÿ°ÿ¼ÿ¾ÿ²ÿøÿ-./012345678Ìÿ¯ÿÎÿÍÿ³ÿ�ÿ÷ÿ˜ÿ’ÿ¹ÿ¸ÿ”ÿ9:;<=>?@ABCDªÿˆÿËÿ½ÿ¨ÿ†ÿÏÿ—ÿ‰ÿÊÿÉÿÈÿÇÿÆÿ´ÿ©ÿ¦ÿöÿ·ÿEFGHIôÿáÿ®ÿ¥ÿŽÿ…ÿJKLMúÿåÿ×ÿÖÿÒÿ§ÿ‡ÿÿþ6¦­í[‘~½Û/Ø‘WV§Âé÷hûÖÆ´µ};òÊ„åÇ26K3#ݽC:ÛˆÎH€¯œ� #¼ ŽP(�C´};òÊ„Ã~»Þ"ýv…t¶�‘_9;F²"(ßV‡hûv0ä• ‡ývÿbFj¯‘Î6¢3à+g§ÂÈÂAV©î¶:DÛ·ƒ!¯Lwãz‹ôÛ`#—ö„ÎH€¯œ� £ÐÆP�òmuˆ¶oC^™pùb»1#µ¯q¸´'tF|åìT·•ó{Hu·Õ!Ú¾ yeÂx|sØo×[¤» ÀFœ.í �‘_9;FÙ¼D²"(ßV‡hûv0ä• ãñÍa¿Ý¿˜‘ίqº´'tF|åìTeóY8ÈŠ ÕÝV‡hûv0ä• 7ëe>ü:ŽHw‘Î6¢3à+g§ÂXipÈï7Np[”DÛ·ƒ!¯LØ­ÇÃ~»Þ#Ý}lÄÁž.í �‘_9;†ÑBÙ! YÔ ¢íÛÁ�W&<5ózÿúÇÜ �?6âpiOèŒøÊÙ©0îÉA­ {ëÑöí`È+–f^ï_ÿ˜¤óÀF.í �‘_9;F µ‚î­#DÛ·ƒ!¯L¸·ó2�Û'¤óW¤³�èŒøÊÙ©0n‹²CpEùÑöí`È+ÆÝa¿}ýâéîêÒd#:#¾rv*ŒBƒ,dEèª÷Tm߆¼2á©™ûí2g¤éê i²�‘_9;Æ=9dá +BpW¢íÛÁ�W&ŒÍübÜ~oF¤óÕ5Òd#:#¾rv*ŒB®Æ*A…Áõ¡£‚hûv0ä• c³4ón½|C:_] M6¢3à+g§Â(ÈÁhxFx= Ú¾ yeÂÒÜìÖË7¤ŸW¯�&Ñ ð•³SaZQv0žm߆¼2aÙl×7 ÒÝÕG¤ÉFtF|åìTrK ¯+B´};òÊ„ÃÍ~i×7 ÒùêÒd#:#¾rv*Œ¼’@ðº"DÛ·ƒ!¯LXÆÃ¯Çõ¸ÌHç«ÏH“�èŒøÊÙ©0mJ~/^Kp0Z@ìÊ[DÛ·ƒ!¯LXÆÃ¯móßéîê Òd#:#¾rv*Œ@›’ßÃKÓÿŒ»òÑöí`È+vÍM37�ë›iºúŠ4ÙˆÎH€¯œ� ÃЊÁëŠm߆¼2alŽ»¥ùéçõ;¤ÉFtF|åìT…6�þªÄN7+ÊR ¢íÛÁ�W&¼×s³4 Ý]_!M6¢3à+g§ÂxYÔýU‰�nV(”¥DÛ·ƒ!¯L8¿5�ë›éîúi²�‘_9;ÆÃæ™àuEˆ¶oC^™06Ûã©y\ß4HÓõÒd#:#¾rv*ŒB¼y x]¢íÛÁ�W&<5óÍþi½Eº»~…4ÙˆÎH€¯œ� ãžVr¯Œ”�DÛ·ƒ!¯LxjæÝzù†ôóú#Òd#:#¾rv*Œ{rȵb£áÑöí`È+–fÞ�ŽHíõ'¤ÉFtF|åìT�v§#6ÆDÛ·ƒ!¯LxjæãÍÍþ€twýi²�‘_9;Æ=9w»ñ_›ÕJò¿m߆¼2á͸ž›Ëq?#�¯¿ M6¢3à+g§ÂxYÔn‹8ÊFÃ3¢íÛÁ�W&ŒÍq·ßÞü@º»þŠ4ÙˆÎH€¯œ� ãžF»ÇÊN ¢íÛÁ�W&,Í|œçqýé|ñi²�‘_9;F ¯+ÂÆ¹¢]um߆¼2á©™w—¯‘Ú‹+¤ÉFtFîÉÁhxÆí¦lÈQA·’üŒ�1…B@´};òÊ„¥™ŸšùÅÒŒHÓÅ5Òd#:#¾rv*Œ@ÎÞ“C T�Å¢íÛÁ�W&ŒÍq7·;¤»‹ ¤ÉFtF|åìT…6eÃFP(K1ˆ¶oC^™ðf\ÏÍxÜî�ί�&Ñ ð•³Sa¼,êeÃFP(K1Ñöí`È+ûÓåãúfYÿ‰4]|DšlDg$ÀWÎN…‘åá¶:‚×!èß„hûv0ä• K3�ÇínlHÓÅ'¤ÉFtF|åìT�ʆ�< P–bm߆¼2al–fÞ�ëï Òtñi²�‘_9;F¡@á–2LÑ„hûv0ä• ÇáY–ݸþÞ ýãâ lÄéҞРØäL!(ßÃý@Èfqè…9DÛ·ƒ!¯Lx›f7®¿7H狯°§K{Bg$À¢£áâ±’üL^Wl¡Œhûv0ä• oÆy"�_½CšlDg$ÀWÎN…ñ²¨#” yÀKuïñ7�×Õ Ñöí?[Óþå!L ~#foå!² åÍë!9ùë!H ~#foå!? n&å!ð åÍÑÑÑ!H ~#foë!@ s#r!Cóßéîê Òd#:#¾rv*Œ@›’ßÃKÓÿŒ»òÑöí`È+vÍM37�ë›iºúŠ4ÙˆÎH€¯œ� ÃЊÁëŠm߆¼2alŽ»¥ùéçõ;¤ÉFtF|åìT…6�þªÄN7+ÊR ¢íÛÁ�W&¼×s³4 Ý]_!M6¢3à+g§ÂxYÔýU‰�nV(”¥DÛ·ƒ!¯L8¿5�ë›éîúi²�‘_9;ÆÃæ™àuEˆ¶oC^™06Ûã©y\ß4HÓõÒd#:#¾rv*ŒB¼y x]¢íÛÁ�W&<5óÍþi½Eº»~…4ÙˆÎH€¯œ� ãžVr¯Œ”�DÛ·ƒ!¯LxjæÝzù†ôóú#Òd#:#¾rv*Œ{rȵb£áÑöí`È+–fÞ�ŽHíõ'¤ÉFtF|åìT�v§#6ÆDÛ·ƒ!¯LxjæãÍÍþ€twýi²�‘_9;Æ=9w»ñ_›ÕJò¿m߆¼2á͸ž›Ëq?#�¯¿ M6¢3à+g§ÂxYÔn‹8ÊFÃ3¢íÛÁ�W&ŒÍq·ßÞü@º»þŠ4ÙˆÎH€¯œ� ãžF»ÇÊN ¢íÛÁ�W&,Í|œçqýé|ñi²�‘_9;F ¯+ÂÆ¹¢]um߆¼2á©™w—¯‘Ú‹+¤ÉFtFîÉÁhxÆí¦lÈQA·’üŒ�1…B@´};òÊ„¥™ŸšùÅÒŒHÓÅ5Òd#:#¾rv*Œ@ÎÞ“C T�Å¢íÛÁ�W&ŒÍq7·;¤»‹ ¤ÉFtF|åìT…6eÃFP(K1ˆ¶oC^™ðf\ÏÍxÜî�ί�&Ñ ð•³Sa¼,êeÃFP(K1Ñöí`È+ûÓåãúfYÿ‰4]|DšlDg$ÀWÎN…‘åá¶:‚×!èß„hûv0ä• K3�ÇínlHÓÅ'¤ÉFtF|åìT�ʆ�< P–bm߆¼2al–fÞ�ëï Òtñi²�‘_9;F¡@á–2LÑ„hûv0ä• ÇáY–ݸþÞ ýãâ lÄéҞРØäL!(ßÃý@Èfqè…9DÛ·ƒ!¯Lx›f7®¿7H狯°§K{Bg$À¢£áâ±’üL^Wl¡Œh title 'string assebmle function for BDS C' page 60 ; maclib bds maclib cmac ; ; direct define STRLEN define STRCPY define STRCAT define STRPOS enddir ; page ; ; strlen ; ; return lenght of string ; prelude strlen ; strlen: call arghak ;get arg list lhld arg1 ;get point to string xchg ;put address in de lxi h,0 ;put a zero in hl (length) strlen1: ldax d ;get value of this character ora a ;check to see if zero rz ;if zero end of string return inx h ;add 1 to string lenght inx d ;add 1 to pointer to string reloc jmp,strlen1 ;check next character ; postlude strlen ; ; ; prelude strcpy ; strcpy: call arghak ;get arg list lhld arg1 ;get address of where to save string xchg ;put address in de lhld arg2 ;get address of string to copy strcpy1: mov a,m ;get value from source string stax d ;save character a object string ora a ;check to see if done rz ;if zero done return to caller inx h ;add 1 to source pointer inx d ;add 1 to object pointer reloc jmp,strcpy1 ;down till end of string ; postlude strcpy ; ; ; prelude strcat strcat: call arghak ;get parm list lhld arg1 ;get address of frist parm xchg ;put it in hl lhld arg2 ;get second parm strcat1: ldax d ;get byte to see if zero ora a ;set status flags reloc jz,strcat2 ;end of string 1 inx d ;add 1 to pointer reloc jmp,strcat1 ;loop till end of string 1 strcat2: mov a,m ;get char for source string stax d ;save at end of second string ora a ;check to see if zero rz ;return if end of string 2 inx h ;add 1 to source pointer inx d ;add 1 to object pointer reloc jmp,strcat2 ;loop till end of source string postlude strcat ; ; ; prelude strpos ; strpos: call arghak ;get parm list push b ;save c stack on machine stack lhld arg1 ;get string that we are searching in xchg ;put address in de lxi b,0 ;zero postion strpos1: lhld arg2 ;get address of search for string strpos2: ldax d ;get character to check ora a ;check to see if end of string 1 reloc jz,strpos4 ;end of string arg2 is not inside of arg1 inx b ;add 1 to postion inx d ;add 1 top pointer of arg1 cmp m ;check to see if a match on first char reloc jnz,strpos2 ;loop till fisrt character match push d ;save current postion on stack dcx d ;move pointer back one strpos3: inx h ;add 1 to arg1 inx d ;add 1 to arg2 mov a,m ;check to see if end of arg2 ora a ;see if zero reloc jz,strpos5 ;end of arg2 match found ldax d ;get arg1 cmp m ;check to see if match reloc jz,strpos3 ;loop to end of string or nomatch pop d ;remove search address from stack reloc jmp,strpos1 ;loop till end of arg1 strpos4: pop b ;restore c stack pointer lxi h,0 ;arg2 not found in arg1 ret strpos5: mov h,b ;arg2 found in arg1 mov l,c pop d ;remove junk from stack pop b ;restore b stack pointer ret ; ; postlude strpos end lude strpos end  end  ret ; ; postlude strpos end vÿΨPROBE102.Csßÿ ‹ÿšÿ�ÿŒÿ–ÿ‘ÿ�ÿoÿÐÿÕÿõÿòÿžÿ›ÿ !"#$%�ÿ“ÿŠÿÔÿûÿœÿÄÿÝÿ�ÿöÿ×ÿ&'()*+,-./012Öÿ™ÿ†ÿ—ÿ’ÿ‰ÿ£ÿÓÿ‡ÿÏÿ¤ÿ3456789:;<=>?@A¢ÿ¼ÿ˜ÿÅÿÑÿÂÿ¯ÿÎÿ²ÿÚÿ”ÿÃÿ¬ÿ«ÿËÿˆÿ ÿ­ÿÍÿBCDEFGHIJKL·ÿÇÿ½ÿ°ÿ÷ÿ±ÿÌÿ»ÿªÿ¶ÿMNOPQRSTUVWXÒÿ•ÿ³ÿôÿÜÿ¦ÿ¾ÿºÿYZ[\]^_`abcdefgh„ÿ‚ÿùÿ¨ÿúÿøÿÈÿÁÿÉÿéÿÊÿÞÿñÿÆÿ¹ÿ§ÿáÿ©ÿ…ÿóÿðÿîÿijklmnopqrÙÿÀÿãÿ¸ÿƒÿëÿêÿØÿïÿíÿèÿçÿåÿìÿæÿàÿÛÿµÿ¥ÿÿþÎÛ÷.çatñüöÍ÷gǰãYHe4.aúÌk%•ÑØ¿ÀÆüoÒU ¼þà] ÎÛ÷.†œ·ï] ÎÃþA鶬2c®J–°¿ö.çí{Ã7J·e•ý��ÌÃ~ýÅ%ì�œÇ k©DQ‰ÂH aZ£%%Mð.çat¿dÌMYšG¥OÐ-)iÚBÍ‘y®4ç-RÎ­É ¥!—æ1Ã4d%‹2-à] ÎÃZ2^¹ÿÃñÇç/Þ|~{‡?²�Êh¼œ½ïˆuæŒ¬ä Š$ÒŠ‰†Ò´7ð.çcø&ó\iÆñÇç§7ŸßÞÁ¾»þô} ÞÅà¼}ïbpö?þ¾4C*ñÇ$TJÆGnË$)£%ì/½‹ÁyûÞÅPi©N4gÈ…\³�ºƒý‘ó0‹DJŸ@.$ñ kR ]­˜�È3$ ÁT ÍÞÅ0Ž£óxóñíÚT–ð.†v™¼)äB¯¿:ê`ä<úã wÕÃôW`ª„挹0+œ0É…\³�zšÁ»Úe� ù´f!•ÑìO�‡)X$Rúr!‰WX³�Êh”¼æçXª“%ŒÈ, ÃP2¼‹¡]&¹�O‚×J*£;Ø9S°H¤ô äB¯ x­¤2%¯¹Ä9Jó#2 èÅ0” ïbˆÁyûÞÅà<ì®’Ò˜Wº%e4쯽‹ÁyûÞŰJJO³~l#Õ‰6zšu°ÿé�w1À6í2 ´Fw1À6í2 ´FJK‡ËýQ;:Á…`Éš$Žß¾?E’”NbIBéxlÓ.“€/%=e^Ž:د�Ç9~ÐßßÛoûãçû~ÛuqßoûO_]ö?ìà] °M»L¾¨ôSæõáᨃýÚyœãýýý·ý¶¿¸¿è·ý§‹Ë~ÛºxéØÁ»`›v™¼Èâ)óúðpÔÁ~í<ÎñƒþþþÛ~Û_Ü?÷ÛþÓóe¿í?=¿ô?ìà] °M»L¾5ú)óúðpÔÁ~í<ÎñƒþþþÛ~Û?ß÷ÛþÍw÷ý¶ÿt|Ùÿ°ƒw1ÄÛ”’ž2¯û#œ£¿¿ÿ¶ï€RÒSæõáòçè�Ÿïû(%=e^^ŽpŽþ«‹û¾‹¶)%=e^>áý§¯.û.†`›¢ÒO™×‡ýÎÑßßÛw@Qé§ÌëÃåÎÑ_Ü_ôPTú)óúðr„sôŸ..û.ئ¨ôSæõáÃÎѺxé»b€mDO™×‡ýÎÑßßÛw€Èâ)óúpy„sô÷Ï}ˆ,ž2¯/G8Gÿéù²ïb€mDO™×‡G8Gÿéù¥ïbˆ¶i�~ʼ>ì�pŽþþþÛ¾Z£Ÿ2¯—G8Gü|ßw@kôSæõáåçèß|wßw1À6­ÑO™×‡G8Gÿéø²ïbˆ¶QsLr!×,¤ÆÏ±ßÍç3ØqWî ‚©Zb‰$±T'K‘Y`Xû`›Ä0É©ßè ]]¸+dÃÚÔª(yÅš@KÆg÷o¾½ÿ¾Ÿu1Œ‚©ºƒý/ç! Ú¤µ!È¥y„"xlóÃb€m”yÄ8Ç��œþþûûÏoß|{ÿýv?ë`ß9�‘(g†1’Î�dCi(ó4,ˆá] °M’­Rd¥'ež†ñV™§AiIbÖÁþÈy.KÖež†1’Ä t HJŸÀ»b€m ¡4ͧ~£?»·x³ Æ:•CI´•¬©\à:#s«V©Üö[ež†ñ¬‹¶)„Ò4Ÿú�¾ÞaÉ»”¹U«T®奓Xlt¿UæiXo•y”–$f] 18 Š•d¬’VEU&RFƒw µbM˜›²4�ò4†q®„$<2VIÞ€–ŒTÂB%b Š$†¾{ÿQé“m £æá‘!—jN %cP$!ÔÉ’@KF* a ¡1tµXÀÌQ”©eyƒw1ÄÛ”’pŽI™§aAŒ¿Á~w¼Ÿáç?Ç/:ØwÎc•ä ”3Âs#0(’øÙ¿à] °MQiœcRæiXão°ß}ØÏðóŸã¡ƒ}çõ½¡¯îîO¡$ÚJÖT.p½ÙaÉ;�õ„ý饓Xla®åi¿�a´?JIÛRÒ ´$Qÿl[Jzʼ>”’Žf] °M!”¦ùÔoô†.>½?…’h+!XS¹Àõþe‡%ï`Àµ„ýÉ¥“Xla®åi¿�a´?ŠJo‹JJKõ϶E¥Ÿ2¯E¥�f] °M!”¦ùÔoô†ž?>ŸBI´•¬©\àzÿ²Ã’w0ØŸ\KàƒÒI,¶0×ò´ßÆ0Ú"‹­ÈbPZ’¨¶Y_žnt?ëb€m ¡4Í' ßèõIÎ8¾pW¸<Û¡†w1Œãè<”.*r¦¢¢"d^«–‘Ú–¥„w1À6JŽ�–ÔÁçqøp„vÉí æF 5Zš’Ñ.“H-±€à”ð.ØFi±ÑJw°ÁyŽ 8e´FKS2Úe©%PÞÅÛ(M86ÚTÔÁŽÎãð«#< EŒÖhiJF»L"µÄ¦"xl£4á+%©ƒýÚy~q„G¡ˆQ*IȼV-£]&‘ZbS¼‹¶QšpQévÙÁçqøÙ…"FQév‰ÌkÕ2Úe©%0Á»`¥ Ïœ2‹vt‡×Gœ2§Ì™×ªe´Ë$RK, 4¼‹!†ÆqtŸ$g _¸+\žíPûÆqt«$%$‘N™×ªe¤¶e)á] °�Ò„WfÅì×ÎãðÛ#¬ÌšA$R{ƒ=Œ†ä’[âŒ¬ä ¼‹¶QšpÇe–7ìè<—û#H.¹%d%o�…Z3¼‹¶QšpÇD⦃�Çáòò’ $R{]­ð.ØFi“䶃�Çáòå’ ’[2ºZ ,à] °�Ò„;¦¼Jìè<—Ž ™�W )gÁR»`¥ Ïœrûµó8\>áQ(bH.¹%Î�Ü’ð.ØFiÂ�…"î`ƒó8\þê�BCrÉ-q†ä–Œ€w1Ä0Ž£óH9sưÀñ…»ÂËÙnïb€m”&|¥$Iê`Gçq¸üÅÚ%·7˜�RIBæµjÚ†J.à] °�Ò„;nI$ÝÁ¾s‡ËŸ�DÒ²LÄ(͉jS 2(– ©ÚTBrKFÀ»bÇÑy¤œ9cXàøÂ]Õ˜>œív3L‰Pr’iVòš†²ƒ�Çáåò'LH9 –fŽv™Dj‰”3 4” ïb€m”&|äµÒªƒ�ÇáååJ+R©Tb´Ë$RK, œAæµjY»`¥ Åš†²ƒ�ÇáåÃN˜�r,%ÌYÉd¡Ö JCÉð.ØFiÂUU’2ìè</G�LÐÕj`3Ǫ*I}ñì~ É-!á] °�Ò„ß••\v°Áy^~u„yYÉ%–F†j>g�©’,¾�UQ”Š3†Ò´7JŸÀ»`¥ WfÍì×Îãðò‹#¬xeÄâ 2_¬xeÄCiڬ̚á] °�Ò„{µâökçqxùÙN˜`$H­miÚxl£4áŽË¯:ØÑy^^A2aÅ+#’¾Á_ Ò”1¼‹¶QšpÇ4è›vt‡—ßA2aÅ+#’¾ÁÜhÞ>^}‡•Y3¼‹¶Qšðû•YsœÇáÃþ’ +^±À�ô tµXHÌ�€æaeÖŒ6•%¼‹¶QšðI²˜w°Áy>\A°d±æŒ¹� I¼‚ÒÄ'"‘ð.ØFiÂ3KëËö�ó8|x9‚`ÉbÍs#0¯¨ŒJ2¼‹¶QšðÌ’Åú¥ƒ}ç<>A°d±æŒ¹˜WT F%ÞÅlST$§~£ar¿T…¤ŒÆ£*K—%¦Âã’ca*�ãã HJ‚ä�ËDý¬‹¶)*’S¿Ñ S ¼ùøö¬I,�r,%”Ü"éŒÇ% ÆÂTÇo>¿½Ã—Õª¥¡ä~ÖÅÛÉ©ßè�O”–gÀý’qüæóÛ;|Y­ PJ†’H¥4ÈJeZp>Ûè~ÖÅlS�À9.;Ø¿s’  �Áñ›Ïoïðeµ*�r,%¼‹a´?q�KÕ.¡$hÉøñ` áËjU å,XJxC °Í�cèËU�sL¾ Q×3Ô˜|A¢®q{‹×³€óøñ` !å,XJxls<(#qŽÆÐ—«_àCûç±J7JŸàxPF"å,XJÐR0£d)á] £ý‰óx\ªv %AKÆc_V«)gÁR»b€m 8Ç/:Ø¿s’  �Á›�oïðeµ*�r,%¼‹¶y“�Ä9&_�¨ëjL¾ Q׸½Åëð~ÑÁþÔy¼ÉF"å,XJxlsÜ8Ç›l$¾À~÷z¿ï`ÿê<Ž�/�r,%”Äëýþ.Í#Þ||{ïbíOœÇ…0CÊäB¯�¹`�Y’Îð.†ÑþÄyÐ’Ï�€fÎ�FÜà¶Xɟûb€m 8Çñ ŒD�Ë.Øæ�1„sL¾ Q×3Ô˜|A¢®q{‹×³¶q‡Ë#´¦Ì�”A.$ñ ¥IÞÅÛ$꺋¶ùñ` á“/HÔõ 5&_�¨kÜÞâõ¬à</GHB¨5cÉ‚1f…Ç$V�”Á»`›‚D]w1À6ÇFKÂ9&_�¨ëjL¾ Q׸½ÅëYÀy>¡]r{ƒ¹h�–h—I@pÊ xlS�¨ë.ØæØh¥qŽÉ$êz†“/HÔ5noñzÖp‡‡#N­Ñí2 ( ïb€m uÝÅÛm*Â9&_�¨ëjL¾ Q׸½ÅëY8�ïŽð(1Z£%Úe0Á»`›‚D]w1À6_)I8Çä u=C�É$ê··x=ë`çqøÅ…"F©$!óí2 ˜Šà] °MA¢®»`›‹J·Kœcò‰ºž¡Æä u�Û[¼žuœÇágGxŠE¥Û%2¯Ñ.“€©ÞÅÛ$꺋¶yæ”Yà“/HÔõ 5&_�¨kÜÞâõ¬œÇáõ§ Á)³@æ5ÚePÞÅÃ8ŽÎã“äŒa�ã w…˳jxÃ8ŽÎc•¤„$#Ò #óZµŒÔ¶,%¼‹¶)HÔulóʬç˜|A¢®g¨1ù‚D]ãö¯glã<¿=Âʬd@"µ7ØÃhH.‘•¼�w1À6‰ºîb€mî¸Ìòç˜|A¢®g¨1ù‚D]ãö¯gà<—û#H.¹%d%o�…Z3¼‹¶)HÔ ulsÇDâç˜|A¢®g¨1ù‚D]ãö¯gà<——G�L ‘Úèj5°€w1À6‰ºîb€mî˜$·8Çä u=C�É$ê··x=ëçq¸|9‚d‚ä–Œ€®V xlS�¨ë.ØæŽ)¯Î1ù‚D]ÏPcò‰ºÆí-^Ï:Ày.?A2!¯R΂¥„w1À6‰ºîb€mž9eœcò‰ºž¡Æä u�Û[¼žu°�ó8\>áQ(bH.¹%Î�Ü’ð.ئ Q×] °Í�…"Æ9&_�¨ëjL¾ Q׸½ÅëYÀy.u„G¡ˆ!¹ä–8CrKFÀ»b€mÔ“\È5 ©g°ÿæ<Ž/Ü^Îv;�¥:Y²€w1À6?ˆaGç‘ræŒa�ã w…—³ÝÞÅ0$꺋aüJI’„sL¾ Q×3Ô˜|A¢®q{‹×³p‡Ë_¡T’�y mC% ïb uÝÅ0ÞqK"iœcò‰ºž¡Æä u�Û[¼žup‡ËŸ¡4' ƒb¹��Ü’ ‘´„w1Ä0ª9&Lr!×,¤ÆÏ±ßÍç3üÃ?ÀþÔy¨9®.ܼ‹a„ýÉ$òiÍB*£q~Ž3Ì`ê<ŒÀñ…»Â‡³ÝÓñ…»ªgð.†ñ1Œãèòš†ç˜|A¢®g¨1ù‚D]ãö¯gàA°ÄÜÌ+ª£’ ïblóÃb€m ¡4ͧ~£¿5•Àññ>QZ+}‚”³`)¡ä)ì׺Þ?ì^�õÛ㶘u1À6…PšæS¿ÑßšJàÍÇ·wøDi­ô R΂¥„’§°aC×û‡Ý«³~û&9ëb€m ¡4ͧ~£¿5•À›�oïÀšÄ)gÁRBÉSØßlèzÿ°{uÖoßd#ë_̺`›B(Mó©ßèoM%püæóÛ;|Y­ PJÆÀ'JK$:…7t½ؽ:ë·Çƒ2rÖÅÛBišOýF›2CRa*Rš‘r,%”<…ýzC×û‡Ý«³~ûÆšu1À6…PšæS¿Ñ?NbII„©HiFÊY°”Pòöë ]ïv¯Îúí�chÖÅÛBišOýF-Mɸ£D•„0)ÍH9 –JžÂþtC×û‡Ý«³~{l´¤YlS¥i>õ}l´4%ã³.*‚0)͘“"‰¹h—IœÍN±¡ëýÃîÕY¿=6ZéYlS¥i>õ}l´4%ãmEEE¦"¥)gÁRBÉSØŸnèzÿ°{uÖo��6ͺ`›B(Mó©ß诔$d^«–a***‚0)ÍH9 –JžØÐõþa÷ê¬ß~¥$ͺ`›B(Mó©ßè‹J·Kd^«–a***‚0)ÍH9 –JžºÞ?ì^�õÛ‹J·ËYlS¥i>õýÌ)³@æµjJA˜Š”f¤œK %O� ]ïv¯Îúí3§ÌbÖÅÛBišOýF¿2+FVòÂT¤4#å,XJ(y ûç ]ïv¯Îúí+³âYlS¥i>õ}Ç%·„¬ä „©HiFÊY°”Pò6lèzÿ°{uÖoï¸ÌòfÖÅÛBišOýFß/’ $R{ƒ¬ä „©HiFÊY°”PòÀ†®÷»WgýöމÄͬ‹¶)„Ò4Ÿú�¾_2$$·d²’7¦"¥)gÁRBÉS`C×û‡Ý«³~{Ç$¹�u1À6…PšæS¿Ñ÷K†dÂÇ«ï�•¼�0)ÍH9 –JžÂþdC×û‡Ý«³~{Ç”WiÖÅÛBišOýFß/‚SFVòÂT¤4#å,XJ(y ûnC×û‡Ý«³~ûÌ)Ϻ`›B(Mó©ßèû%ãQ(bd%o LEJ3R΂¥„’§°?ÝÐõþa÷ê¬ßþX(âYC °�šc’ ¹f!õ ößœÇñ…»ÂËÙn#°T'Kð.Øæ1Œ…PšæS¿Ñ_)IȼV-CR¢JB˜Š”f¤œK %Olèzÿ°{uÖo¿R’$ͺÆB(Mó©ßè;nÉ�HZ–‰YÉS‘ÒŒ”³`)¡ä醮÷»WgýöŽ[IϺbÕ“\ȧ5 ©ŒÆù9>Ì`¿vjŽã w…g»¦ã wUÏà] ãba›¢"9õ½ÑÇîªÆôál7ïˆuæŒA‰6•¥ÄÜ”¥y<ÞbÐ2Q?ëba›¢"9õ-ÍŠaæ %KÆ*-ðþí=–i͘5Ôª(yÅš8cX`a*ÑϺFئ¨HNýFË…$^Aiâ‘Ȉ3àxÉí Ú$x^•å�Š–X˜J`•t•Ê~ÖÅ0Â6EErê7z๠ ¥O@•dÐ’WgÝϺFئJÓ|ê7úØhiJ†©¨¨’Uí’ÛS‘ÒŒD§°Í†®÷»Wgý6†Ñ¾Ã±ÑFÒ¬‹a„m ¡4ͧ~£¿«vȼV-Cé¢"HJTI´Kno LEJ3�ºÞ?ì^�õÛFûßU;%iÖÅ0Â6…PšæS¿ÑßU;d^«–a***‚¤D•D»äöÂT¤4#Ñ)6t½ؽ:ë·1Œö¾«vFÒ¬‹a„m ¡4ͧ~£�—I¤–X@9JCÉH9 ´Kno LEJ3�bC×û‡Ý«³~Ãhßá#¯i(g] #lS¥i>õ}¼L"µÄÊd^«–%”Va*Rš‘èö'ºÞ?ì^�õÛFûy­´šu1Œ°M!”¦ùÔoôß3!+yƒ,ÔšAi()gÁRB˜Š”f$:°¡ëýÃîÕY¿�a´ïðQ¬i(g] #lS¥i>õ}Ç„o`æXU%©/žÝ�!¹%#$„©HiF¢SØŸlèzÿ°{uÖocí;\U%)3ëba›B(Mó©ßèß••\bi$a¨æs¦"¥)gÁR"Ñ)ì�6t½ؽ:ë·1Œö~WVr9ëba›B(Mó©ßè+^±ø‚Ì+^±ÀPšö+³fS‘ÒŒD§°Í†®÷»Wgý6†Ñ¾Ã•Yó¬‹a„m ¡4ͧ~£ÿž F@2�ÔŠÑ–¦½�0)ÍHt 6t½ؽ:ë·1ŒöîÕŠg] #lS¥i>õ}Ç„¯ŒX`Hú_|�4HSVĦ"¥‰Na› ]ïv¯Îúm £}‡;.W¼šu1Œ°M!”¦ùÔoôV¼Â�ô æF@óŽðñê;¬Ìš!LEJ3�bC×û‡Ý«³~ÃhßáŽiÐ7³.†¶)„Ò4Ÿú�¾cŠW’¾Á7s# yGX™5C˜Š”f$:6t½ؽ:ë·1Œö~¿2kžu1Œ°M!”¦ùÔoôe$ÚT–,Y¬9cnäB¯ 4ñ‰@¢SºÞ?ì^�õÛFûŸ$‹ù¬‹a„m ¡4ͧ~£ß(#Ѧ²Ä%KkΘ�yE•`T’aßmèzÿ°{uÖocí;<³d±¾œu1Œ°M!”¦ùÔoôe$ÚT–x�`ÉbÍs#0¯¨ŒJ2ì» ]ïv¯Îúm £}‡g–,Ö/³.†ñ‡1Ä0ª9&¹�kRãçØïæóìŸ�ÇÕ…»‚\Hâ~ÿùíÚT–ÞÅ0þ †¶)*’S¿Ñ}uá®ðù3~ÿùíÚT–ø²ZH9 –’%æ¦,ÍãÙF÷³.†¶)„Ò4Ÿú�¾ã’[ŠWF, ùdÅš LEJ3�† ]ïv¯Îúm £}‡c£�¤YÃÛBišOýFäµj¦,•>�0)ÍHt û× ]ïv¯Îúm £}‡ïª�’4ëba›B(Mó©ßè;J‚Ж¦½�0)ÍHt û�ºÞ?ì^�õÛFûßU;#iÖÅ0Â6…PšæS¿Ñwd ´¥io LEJ3�ÂþÓ†®÷»Wgý6†Ñ¾ÃG^ÓPκFئJÓ|ê7úû�"´B‘jS Á'ÊhS‘ÒŒD§°_oèzÿ°{uÖocí;|äµÒjÖÅ0Â6…PšæS¿ÑWi§VÕ ­ÑÒ” ]­h—ÜÞ@˜Š”f$:°¡ëýÃîÕY¿�a´ïðQ¬i(g] #lS¥i>õ}·�Ä+(­H¥Rý)‘2­)3cÂT¤4#Ñ醮÷»Wgý6†Ñ¾ÃUU’2³.†¶)„Ò4Ÿú�~[�2:•P¹d´œ+Á¦"¥‰Naßmèzÿ°{uÖocí;ü®¬ärÖÅ0þ0Øæ‡1ü0†bpÞ¾w18û‡&¹�kRO3Ø_{ƒó°¿<6ÅB¨“%ajg¸üíë \¤ªÄÕîQÉö¯ÞÅà¼}ïb8a’ ¹f!õ4‹á18oß»œÇïLYšG¥O°NB¥¡d‰$™Û2 Î8)Í�Êr�aZ2ÚT–JŸ æD¤Õ)lð.ça¿ò.ç¡4r!×,¤†ýÉ9LÁ"‘Ò'� I¼Âš…TFC0UBsÆ\˜†l$ÚT–°?õ.ça™$ŒfУÁ° Æ£ù ö×ÞÅà<ì/ï—,ôh0,ˆ%’`dnMæŒ$17eiå)ì_¼‹ÁyØ_.ÕÉFdİ_—æFdİ¿ñ.çaÿýn!‰W¸_ ûî�,¤2ß éŒg^+©ŒÆ7°£w18ûm°·Íìo{ÛüÃÞ6G°ÿâ] ÎÃþãñ…»Â9ö[\]¸+œãöGd!•Ñøÿ€g^+©ŒÆ7°Á»œ‡ýÊ»œÇý’¡yG Gƒu* %K´fŘ ³-¥y„™†1Ìr!×,¤†ý³w18�v™äB>­YHe4pŽ¥:YB/†¡d˜9äB®YH Z&‚’X³�Êhèj5°€½‹Áy´Ë$ òIðZIe4ÎQšGèÅ0” 3‡\È5 ©Œ-AI^+©Œ†®V ØŸzƒóh—IÀ›B.$ñêð«#œ£0J �A|á®z�þêÂ]õ�$”>�ý'ïbpÞ¾w1ÄÛÈ…\³�粑Óó÷÷Ÿžßÿñûçí~ÖÁþÔy ÙH´©,A'L� I¼Âš…TFûb€md!”¦ùd ¹�Ä«m-û-&Lr!×,¤ÆÏŽ×3ü-ú« wÕãýñ…»êg˜u1Œö'Σ]r{ƒ¥:YˆÌÂf¹�kRûFûçñ™ $®.ÜÔFóÇî jŽ?±0ð.†ÑþÄy˜B.$ñêð«#,M™%äB¯ ÓŠá] °�šcúµ\È5 ©g°¿tÇî —gH:C0UB#áO, ¦ý ÞÅÛü@ £\ȧ5 ©ŒÎqÙÁþÅy¬YHe4¾Îq ïbåB> ^+©ŒÆ9:Ø¿8Ák%•Ñøçx€w1À6?Œ!؆Kɰp«JÆñ…»ÂËÙn#°T'Kð.Øæ1Œr!ŸÖ,¤28Ç$rÍBjü ö»ý|ÖÁþÔy¬’¼!ÁÜ”æFdЋa(ÞÅ0Ê…|¼VR�sLr!×,¤ÆÏއþûÝ~ÞÎC.Õœ rÍBju²$ÌM%à] £ý‘óI$�±Jòs#PšGxÃhä<ŒÈ, ÃP2¼‹¶ùa 1ü0†bpÞ¾w18û¹4r!×,¤žf°¿ö.çaylŠ…P'KÂÔÎpùÛ׸HU‰«3Ü)¢’ì_½‹ÁyûÞÅ —F.äš…ÔÓ,†ÄÛBišOýFoè~©$”ĵÄu>»ÎgÝoa ¹�Ä«-äB>­YHeôr!Ÿ¯•TFϺbøa ÿbÀñ…»Âåà] £mœ‡\šGÐ’ñûÏoïðeµ*�r,%K\]¸+|þ ïb€mäÒ<æb˜fì¿:�&$�!ÿ?�LXñ CÒ7øs# w„ÕÞÅ0Â6‰ºîba›O’Åç˜|A¢®g¨1ù‚D]ãö¯gçqøpyÁs# JŸß éŒg^+©ŒÆ7°£w18ûm°·Íìo{ÛüÃÞ6G°ÿâ] ÎÃþãñ…»Â9ö[\]¸+œãöGd!•Ñøÿ€g^+©ŒÆ7°Á»œ‡ýÊ»œÇý’¡yG Gƒu* %K´fŘ ³-¥y„™†1Ìr!×,¤†ý³w18�v™äB>­YHe4pŽ¥:YB/†¡d˜9äB®YH Z&‚’X³�Êhèj5°€½‹Áy´Ë$ òIðZIe4ÎQšGèÅ0” 3‡\È5 ©Œ-AI^+©Œ†®V ØŸzƒóh—IÀ›B.$ñêð«#œ£0J �A|á®z�þêÂ]õ�$”>�ý'ïbpÞ¾w1ÄÛÈ…\³�粑Óó÷÷Ÿžßÿñûçí~ÖÁþÔy ÙH´©,A'L� I¼Âš…TFûb€md!”¦ùd ¹�Ä«m-û-&Lr!×,¤ÆÏŽ×3ü-ú« wÕãýñ…»êg˜u1Œö'Σ]r{ƒ¥:YˆÌÂf¹�kRûFûçñ™ $®.ÜÔFóÇî jŽ?±0ð.†ÑþÄy˜B.$ñêð«#,M™%äB¯ ÓŠá] °�šcúµ\È5 ©g°¿tÇî —gH:C0UB#áO, ¦ý ÞÅÛü@ £\ȧ5 ©ŒÎqÙÁþÅy¬YHe4¾Îq ïbåB> ^+©ŒÆ9:Ø¿8Ák%•Ñøçx€w1À6?Œ!؆Kɰp«JÆñ…»ÂËÙn#°T'Kð.Øæ1Œr!ŸÖ,¤28Ç$rÍBjü ö»ý|ÖÁþÔy¬’¼; This is a submit file to aid in putting together PROBE.C using ; the BDS-C compiler. PROBE was written with an eye to portability ; and should compile with VERY few changes on any 8-bit CP/M based ; c-compiler. ; cc probe102.c -o -x ; with the BDS-C compiler ; -o provides some speed optimization at expense of size ; -x will abort the submit run at an error ; cc asctobin.c -o -x ; cc probsdpb.c -o -x ; cc probsern.c -o -x ; cc probsign.c -o -x ; ; Uncomment the line that uses your favorite linker. I like L24 best. ; ;clink probe102 asctobin probsdpb probsern probsign ;l2 probe102 asctobin probsdpb probsern probsign l24 probe102 asctobin probsdpb probsern probsign ; ; That's all folks!! ;  folks!! ; /M you are running, the operating system serial number, and display the I/O byte if appropriate. It then dispåååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå/******************************************************************************/ /* PROBE.C Version 1 Revision 02 2 January 1985 */ /******************************************************************************/ /* Updates and Responses to Entomolgical Cybernoids */ /******************************************************************************/ New and Improved! PROBE now shows the CP/M serial number too! Big deal. . . Got a bug report. To wit: Bugs in PROBE: 1. PROBE will not detect media changes. Changing from SSDD to DSDD will still bring SSDD data on the screen. Might have to explicitly reset the disk system before logging a previously logged drive. 2. On very large disks, PROBE goes into a loop, displaying the ALV data over and over again, until aborted by a ^C. This was noticed on an 8MB drive with 2048 4k groups. Bug fixes. 1. This was an artifact from the way I had written PROBE earlier, when it simply cycled through all the drives on-line one after the other. It now does a reset disk system and should be able to recognize media changes (if your bios does). 2. Unable to verify this. However, I did have a few variables declared int (range +/- 32,768) that I have now changed to unsigned (range 0-65,536). Hopefully that will take care of it. Have verified correct performance of PROBE on following machines with hard disks: Kaypro 10, two 5 meg partitions, CP/M 2.2 bios versions E, F, G. Zenith Z-100, 27 megabyte hard disk, 6 meg partition, CP/M-85, 1436 4k blocks. Balcones BNV-205 w/20 meg hard disk, one 4 meg, two 8 meg partitions with 1028 4k blocks and 2016 4k blocks respectively. I really appreciate the bug report. Would like suggestions on a non-bios specific way of checking the skewing of the disks. /******************************************************************************/ /* Who was that masked man anyway? */ /******************************************************************************/ Scapegoat for this drivel is: Paul Sittler - My Word!! RCP/M (409) 845-0510 (late nights) Veterinary Public Health RCP/M (409) 845-0509 (24 hours) Dept of Veterinary Public Health, Texas A&M University College Station, Texas 77840-4468  iversity College Station, Texas 77840-4468 y do */ /**************artitions, CP/M 2.2 bios versions E, F, G. Zenith Z-100, 27 megabyte hard disk, 6 meg partition, CP/M-85, 1436 4k blocks. Balcones BNV-205 w/20 meg hard disk, one 4 meg, two 8 meg partitions with 1028 4k blocks and 2016 4k blocks respectively. I really appreciate the bug report. Would like suggestions on a non-bios specific way of checking the skewing of the disks. /******************************************************************************/ /* Who"vÿü‘PROBSDPB.C…ßÿ šÿ‹ÿ�ÿ–ÿŒÿ›ÿžÿÕÿ�ÿÐÿòÿ‘ÿoÿõÿ !"#$%&'œÿ�ÿ“ÿ�ÿ—ÿ×ÿÖÿ™ÿöÿûÿ”ÿÄÿ†ÿ()*+,-./01234’ÿŠÿ£ÿÏÿÂÿÝÿÓÿÔÿÎÿ56789:;<=>?@ABCDE»ÿ‰ÿÅÿ ÿÚÿ‡ÿ¬ÿ˜ÿÑÿúÿÒÿˆÿ«ÿËÿ¼ÿ­ÿ…ÿFGHIJKLMNOPQRSTUVÍÿ¾ÿ½ÿ²ÿ¯ÿÃÿ³ÿ·ÿ´ÿ¤ÿ¢ÿøÿÇÿØÿÊÿWXYZ[\]^_`abcdefghiºÿÌÿÉÿùÿ¹ÿÜÿ¶ÿ°ÿ±ÿ„ÿ‚ÿÿÞÿÈÿ©ÿ2ÿ§ÿ¦ÿéÿÁÿìÿèÿðÿÙÿÆÿªÿ¨ÿŽÿÿÿôÿjklmnopqóÿíÿÀÿ¥ÿ=ÿrstuvwxyz{|ÿ÷ÿñÿåÿ¸ÿƒÿ:ÿÿîÿëÿêÿäÿãÿmÿ}~€�‚ƒ„iÿcÿ^ÿVÿGÿ@ÿ>ÿ<ÿ;ÿ9ÿ6ÿ-ÿ,ÿÿÿÿþÎÄ�œOÎ ~&+{©ò²nׯùä â776Ÿ¸8­ê¬Áî§W×('<ÒóÏp"+ˆ#þ“q>9?r>½/BVÌa]*+µgÕÚ§÷EÈŠ¹"¬³RX©¨=«Ö>ù$+{©ò²n|úØ'gâGÎ'g?+l¦ ìk.tY�Dü7ã|r&~ä|Bì³JsèbYŠ ¾[¾á î?YBK”"h>!³Š´Ì„€æ\O0Î'Ä>«4‡.v¥’ñç»å‹Îàþ“´D)‚æ2«HAËLhÎõã|Bì³Jsèb¿A2þ|·|1ÂÜò´D)‚æ2«HAËLhÎõã|Bì³Js¨¼<”Œ?ß½óbà ”�rÍõŒq”…ÍhÎõã|Bì³Js¨¼:”Œ?ß}þbà ”�rÍõŒqT¤qhÎõã|Bì³Jsds®¸Ø§ñ]g�Í9§ÀŠ …==%u!ûã|Bì³Js˜œñ19ƒ@¤$˜EI�ÄÀ,²Jó ‚e�}öŒó ±Ï*Í¡¸Ø§±sŠ‹}B˜ÏJ⨗¸ÀîMã|Bì³JsˆÑ;]ùœçVŒó ±Ÿ)N)€YVŒˆç΀Y¦ „ù¬$ÛB…Í46`Ÿ2f9ʉ‘„q>!ö"0•—Z)>"¾tJȹæzFŒ8ÊÂf´Rœ¤„q>!ö"0•WZ)>"¾tJȹæzFŒ8*ÒŠ8´Rœ¤„q>!ö"0ÈIî—aD|é lN\3N!'Éh†}âRØ€0Ÿ•ÄaœO>˜)N)Èœ�ÎàäÑÕêKËUf™.ð>l‹ÂžŠLØÝ{uQNŒ )c–KǸÎçbŸUš£”ÕÀ<8yz€ºœ5Pši袰™f”…ÍÈJ´ ­Î˜å(bÄg"�‚q>u�3ˆ¾œ 4Ó( › ÐEa3Í„ �âŽ`œO]ç ¢ß «·qoX]×Ãê ðjX½ìÞVŸ0Î'Ä>«4GYÌFÎàÁ“‡¨Ë‰Q¥™†. ›i&l@YØlÀLËõ=cž?8yz±{ÑÀ8ŸºÎD¿VŸãÞ°Ú½Áõ°z{‡WÃê�·±{gXíî}ã|Bì³JsÐñlà ÞúêáêrbÔ€Ž†™–Êñ™¤PN`Ai¦Q6`œO]ç ¢×Ea3Í„ �⎠ƒ«a>+‰Ã¶PB( › ÆùÔuÎ úݰZâÞ°Ú×ÃêmàÕ°úؽ3¬vo Zì�<ÄcÜ{óŒó©ëœAô»apoX-�ëaµ^ «·�Ý;Ãês@´Ø;yˆoqïÍ;0Î'ó Åi %g£3Ø;yx€úÒrÕ@ 9@Š;‚( › òb7B#>�$XE`–éÆùÔuÎ zÉ,×§„Lç:l‚mÁ*‚r€wã|0RœRP|6:ƒ½Û‡¨/-W ”à”1Ë'HqG»Šñ™$Á*³LóYIÆùÔuÎ z%8eÌò $Á*Í�递 ™å¤`X%$Œó©ëœAôŠ‹}:ön`…º~JpP`\�làpÝàbã|ê:gýý'Ë î?ÙA#>�ÀIß'%8eÌò ea³AžÁ8Ÿû¬ÒºXŽœÁý'ËÔåĨ�. ›-QïvË%–±opea³A:%8Œó©ëœAüçz·\.±Œ}ƒÊÂfƒS‚Æù„Øg•æÐÅnà î?Ù .'F tQØl‡z{,cßÀ8ŸºÎDÿ‘eVi†ûO–ÐAáþ“Ý4'0=P³§Ä*â0Χ®sÑk )ÂiA�★‹R0Ì´ÐZVÂ|V‡q>u�3ˆÞ¶( › ¶…œ2fù]6ÓLØpã|ê:g}½Û-—XÆËØcû÷P6¤S‚Ã8ŸºÎD_ï–Ë%–±Ç2öXƾÁea³Á)ÁaœOæAŠÓ@ Ù Ggpóìäõ¥åª�œ2fù„¬¢lÀ>eÌrHqG0Î'ó Åi Û¶£3øð½÷P_Z®¼Û‚“$¾O r’Œf`\gƒDmÛVk XE0Χ®sÑ—t*Bá¶«uaOE¦‹JÈá ¸ª0Χ®sÑ+Á)c–O(éT ÍÀ*B+¸d�”1Ëa[°Š`œO]ç ¢g\gµ"�B9�UB"Ìg%ñ3ç“OæAŠÓ@ Ç�ÁWO®P_Z®h¥8I Û‚U„žŠL`y5I‘é’2f9Œó©ëœAôŒë Í„ اŒY¾�h1—¤6h-«„„q>u�3ˆ>ל‰l^hÅÅ>�°¬"ìëbNX/cÑ"XçS×9ƒè%eÌr0®ƒ,46€é�$òBg„ZœÑÙ¬"çS×9ƒè {*2]@…¼š¤ÈtI³a>+‰KhN`Á8ŸºÎD/õŒš3`OÈŠ‹}’¸¬‚P˜ÈtI³r KçS×9ƒè[�1Ë%d¥9�U©gÆu�…f¦Ë‚äŒói¤8 ¤ /çíè ö>¸}ðó{¨/-W î+ÅIJØ»{¯.ʉdÆ5˪\+hN­å0Χ®sÑ·–C N³|‚͉k&l�¸¬ö><9îŒó©ëœAô{�ž¾–ÐJq’¬"H=#ÈŒk–U¹VМôŒói¤8 ¤ òJååè ö=Ý{ôàõ¥åªÁž�rÍõŒq”…Íh¥8I  rT¤qçS×9ƒè/+‘UÈt@I˜KRÐYEÙ€Ör°Š°÷èŒó©ëœAôZ)NR–L‹@ -·3°ŠP*+‘é¢8ƒq>̓§�2¹?p7'_ ¾´\5¸¯')a[hÈŒk–U¹VМ4æ’ZË!mË.5'çS×9ƒè³Š²­åÈ*NIA 9È3àªZ)NRBHçS×9ƒè•h[âZËA:«°÷èéŒói¤8 ¤ ‹ý€3¸ÿä‹Ô—–«÷•â$%l ™qͲ*× š“Æ\’B9áÁÞ‡'`ÆùÔuÎ ú�(‡r€d–ëS‚. ›i&l€­å3Í„ g0Χ®sÑ_UBB+ÅIJ %Ú–8†Ör�Î*ì=zzã|ò ±�ea³áPŠ;{gpU”fº(l¦™°ea³RÜDÀ³rb$aœO˜)N)0Ë¥¸£C%ä0:ƒ«ŠÀ,Ó¤¸#ج"(!ˆ€gåÄHÂ8ŸÌƒ§�”à‡$GgpUÂ|V‡m¡§ŒY>�ã‚$ÊÂf)´–Ã8Ÿ0RœRP‚JqG‡JÈatWA N³|‚æ¤a[°Š „ ž•# ã|Â!öY¥92ÅÙ”Óˆø®3¸Ù»=@]NŒÜìÝ^(jE %ä6åã|Bì³JsdŠÊárD|é Nžýr€ºœ5¸Ù»½PÔŠ@ r KNÑêŒYã|Bì³JsdŠJ–�ˆ/�ÁÉÕ£ÔåĨÁÍÞí…¢VR�Œr01#ìëbN0Î'Ä>«4G¦øa%ÙˆøÒ<=¹:@]NŒÜìÝ^(jE …ÊJv!)c–KǸÎçbŸUš#SüPæÕˆøÒœ!ö—•(õ®ñ ±ÿا.Ÿ3Y¯alÏb²s\ Y�Y<ºýðÁ[ÐP\ìÓk‰\s=#F\¢þÚ}ÔàOÀº}ê”õ©ûا±ÏçLÖëEùõ¢\7£Ob¯¸Ø'¬Àì<ωקIJJóºiFŸ:Ä^´¨û„Õ ¯áuãS×}ìS×!öŠ‹} ¯¿~=úÔuˆ}ÉI£O]÷‰OÝ'¸¬DA¨û„ÏVxýõküø#û„ÏVxýÑëfôɧN´¨û„Õ ¯?zÝøÔ!öœØœ‡Ñ'Ÿû|Îd½^„û¥YÅÅ>AYLvŽK!+0‹G·>x õ}\àQƒ?áþ¢\7£O>!ö—•(õ®ñ ±ÿاNq±OX�Ùyž¯O‰e•æuÓŒ>ùÔ‰µâbŸ°Záõ"¼n|êû�}ê:ÅÅ>a…åèSוœô0úÔ!öŸøäS'ZÔ¨û„Çx}ÿuƒ¿ÿ{Ÿ:ÄóZq±Oø¯½nûƧ±ÿا®ËçLÖëEyQ®›Ñ§®Ël`"Ìiô©Cì?ñ©S\ìVP\ì.ðúþëѧ®ä¤‡Ñ'ÄþŸ|êD‹µœä>q°B©¬¬oߺúùö£/ÞºÝ,4xŒÝrÙ ¾ë ‚exøÈ=ÄŸ`œOb_*+ëÛ·NÞºÚûàäÙfÙŒˆÉp’Ä „ 'Éhã|ò©Sy¥•âX¡VVõÉ[OöNžmû´Y6£3�TPÆ ¸Ø'\VÄ K¬pÿÆùÔÅsg°Ã 6 –�AÉ,'°Š òJ+ÅaœO�hQ«¼ÒJq¬VX6ˆ?8ÑBå•VŠc…åĹå°Y6県ó©Cì3˜s¿sÒâÔ‚ñ :XV‡r€q>ùÔ•ÊÊúä­'{œ<Û(.ö©ÿà $”1(.ö —qÂ+Ü?€q>uñÜì°Âƒƒ ˆeg0Î'ŸûlÎû„Jeeýwo]í}pòl³l°Åëû¯GÎà”²9çû„0Ÿ•Ä¡ƒ‚q>uñÜd6ìg`÷On>øÆùäb¯òR+Å�Jeeýwo]í=z°Y6#br§Ä „�k>CYØl€VŠ“”0Î'Ä>g+¨¼ÔJññg ‰!gÌB 9 ×|†²°Ù­')aœO>!ö­å¨VXŽxŒÝ›b»mÿà 8iV”�rÍõŒq”…Í´ÜÎ`œOT^JÆŸ‹X!gü¹x1"þî f4³|‚ÌBåå¡düù ç“Oˆ½ÌV¨MÎøvÛ`‹ÚäŒo·xü¯šñÜœ<º:@}i¹j°»÷ꢜARÆ,—Žq� 0Î'ľ”V09ãÛíˆø½3xpòôu91jP6 +Ñ2´:c–Ã8Ÿû²˜a“3¾ÝŽˆß;ƒO .'F ÊÂffZ0Î'ÄžŽgXÁäŒo·#â÷Îà­¯ .'F è˜Q`˜i9À8Ÿ{%gX¡69ãÛmƒ-j“3¾Ýâñc¼jFÄsg°wòðõ¥åª�r€wP6äÅÆù„Ø+>à µÉßnlQ›œñí�ãU3"ž;ƒ½“‡¨/-W ”à”1Ë'HqG;çb¯‹%V09ãÛíˆø½3¸ÿdy€ºœ5ÐEa³%êÝn¹Ä2ö Œó ±×Å+˜œñívDüÞܲ;@]NŒ袰Ùõ2öXƾ�q>!öÙ ±BmrÆ·Û[Ô&g|»ÅãÇxÕŒˆçÎàæÙÉêKËU%8eÌò YEÙ)îÆù„ØÛ¶Å µÉßnlQ›œñí�ãU3"ž;ƒß{ïõ¥åª'I|Ÿä$ÍÀ¸Î ã|òé}Ñ*jq³w{øàƒO;gÐZާîϸٻE)¬„Y1Wtã|Bì3ÅÙ”V09ãÛíˆøGgp³w{€ºœ5¸Ù»½PÔ#Š@ JÈlÊ Æù„ØgŠÊá+˜œñívDüΜ<ûåu91jp³w{¡¨�ä@—huÆ`œOˆ}¦ø¡d9V09ãÛíˆø�38¹zt€ºœ5¸Ù»½PÔŠ@ ’Q&fã|Bì3Å+ɰ‚ÉßnGÄïœÁÓ“«ÔåĨAe%ƒ¤ŒY.ã:`œOˆ}¦ø¡Ì+¬`rÆ·Ûñ;gpòèéêrbÔ ¸�”1Ë¥«¬d�”1ËaœOˆ}¦ø!Ë%V09ã#â¿8ƒ«G'¨Ë‰Qƒ÷Á¸Îé”�¤Pt±ƒq>ù„ØçŒc•—Z)>"~ã $1äVFÌB2Íl •—0Î'Ä>gÛvoFÄ¿u’r+#f!™æ ¶«ÆùÔÅsgp³w{!sÊD+2h¥6èJÈÆùÔÅsg�k®gĈK´–ƒU„›½[”ÂJçbŸ)®•âX!g|DüÆH½O¸Ù»½�9e¢E®ù ea³Z)NRÂ8ŸûÖrÔ+,G<Æ;#ÄvÛ zgÀI+°Šp³w‹RX ™S&Z‘A 9À8Ÿ:dŠJÆŸ‹X!gü¹x1"þî rÍõŒq ˜E¦ø¡düù çb¯e&³¥u¦ø!›rÚdŠ—"HÆ›ñÜpÊ9I ™â‡lÊ Z¢’qNaœOïSP¢õÉ'Ä^ËLfKj],7ºX–"HÆ›19N9'I�AKh‰RÍ'HÆE8…q>!öZfB0[ŠPëb·ÑÅ®A2ÞŒˆÉpÊ9I ºØAK”"h>A2.Â)ŒóÉ'Ä>ç"°¶^/Â"¼g9û„£ì`V”�rÍõŒq”…Íh¥8I !q´|sŒŠŽa½ñ©C|7›sÅÅ>mT^j¥x3úäbŸÏ™¬×‹pU”�rÍõŒq”…Íh Á óœ4—3šY>¡7ëfô ±Ï¹¬­×‹°`GËëã[oT^j¥x3ú„Ø·–£Xa9Bà1voFˆí¶ñ©Ë¹¬­×8ZÞ;^oT^JÆŸ‹Íè“Oˆ}>g²^/Â",Ø#ÍõŒqÄꓯ6žÒ1€=ÊÄL öDÐ|^¬›Ñ'Ä>ç"°¶^/‚�PÆ,—ȉãŠël@|YŸ<ºj°ÂÑòúÀÑõ|½‘9ÛÈœ5£Oˆ}ÎE`m½^„{PØlÀI%Z†÷tÆ,G|·~pò´Á ÀÑòÞ1€£kµÞ”²Ú”²jFŸûœ‹ÀÚz½ v¿(l¦™° › x¨å ~ðäaƒ€£å½cG×j½)‹Ù¦,fÍèbŸsX[¯aÁÞ:fj9 úú­¯6X8ZÞ;pt­Ö:žmèxÖŒ>!ö9�µõzlOÈ'âŽðP‹Ù|†ø²Þ;yØ`…£åõ1€£ëùz£äl£ä¬}Bìs.këõ",Øžà”1Ë'<ÔÇb6Ÿáb‡Ø×{·¬p´¼>pt=_oŸmŸ5£Oˆ}ÎE`m½^„»_6ÓLØ€‡ZX"¾¬ï?Y6X8ZÞ;pt­ìù‘|±ÞøÔÅ—ˆçºXnt±ÜèbYŠ oFŸûœ‹ÀÚz½ v¿(l¦™°µ°C|Yß²k°p´¼w àèZ-Øó#ùb½ñ©‹/Ïu±Ûèb·ÑÅ®A2ÞŒ>!ö9�µõzlOpʘån*Êœˆ;Bìë›g' V8Z^8ºž¯7Ù 7Ù ›Ñ'Ä>ç"°¶^/‚�L’Ñ W\gƒÄ‡m+‰!öõ‡ï½×`…£åõ1€£ëùzcÛvcÛ¶}ò ±ÏçLÖëEX„»ª—•-JȹæzFŒ8ÊÂf k‰B t°nFŸû|Îd½^„;ytu€'OðàÉüõÕÃì�<<ÀÞíÃܲ<Àý'»Ü<;9À‡ï½w°nFŸûœ‹ÀÚÚ'ëEX°£åõ1p´¼w àhyïÀÑòÞ1p´¼>ÆÑòú8ZÞ;p´¼w -¯�q´¼>^o|ê:™³ JYmP³ èx¶�’³ Ÿm ‹åºØm� rÛ¶Íè“Oï‹VQ‹›½ÛÃ|x‚Ø9ƒÖrg²^/ÂUE¸Ù»E®¹ž#޲°Ù-!tž“æ"`F3Ë'Ô" ¢ãæ`ÝŒ>!ö9�µõzìhy}¼`ëM�)®•â šÑ'ľµµÀ Ë�ñαÝ6>u9�µõGË{ÇëM¦ø¡dü¹xÑŒ>ù„Øçs&ëõ",‚=Ò\ψGü¡>ùúaà)Ø£LÌt±`Ïñ@Í'àź}Bìs.këõ",ØÍÞí…¢VRØrÀÕ”€úfï¶Á 8ZÞ;Fì�®Õ‚=?’/ÖŸºøn¦ø!›rÚdв)§M¦x)‚d¼}Bìs.këõ",ØÍÞ-Nºá­Î˜åˆïÖ'Ï~i°Ž–÷Žû£kµÞøÔÅ—™â‡r¸ÜdŠÊá²}Bìs.këõ",Øû„Fy.Â)¸f„x^Ÿ\=j°Ž–÷Žû£kµÞøÔÅ—™â‡’å›LñCÉòfô ±Ï¹¬­×‹°`O­d8¡ŒY.Ý×Ù€ønýôäªÁ 8ZÞ;Fì�®ÕzãS_fŠV’m2Å+ÉšÑ'Ä>ç"°¶^/‚=±§'”1Ë¥{j%à eÌrÔ'�ž6XGË{LjýѵZo|êâËLñC™W›LñC™WÍèbŸsX[¯aÁ®¸ÎéN„"Ø{B¸ØõÕ£“+àhyï±?ºV‹°ÞøÔÅ—™â‡,—›LñC–Ëfôé} J´>ù„Øç\ÖÖëEX„÷,‡âbŸp”lÀ*‚r@®¹ž#ŽŠ´"­')!$Ž–oŽQÑñ"¬7>uˆïfs®¸Ø§�Ê+­oFŸ|BìsƱ‚Ê+­¿q’rÆÁ,”�rÍg¨‡VŠ“”0Î'ŸûÖrÔ+,G<Æî�b»mÿà 8iV”�rÍõŒqTŠ£åvã|ê òêP2þ\¼À 9ãÏÅ‹ñwg0£™åD`*¯%ãÏ_À8Ÿ|Bìó9“õz®*‚r@®¹ž#ŽŠ´"-!tž“æ"`F3Ë'Ô" ¢ãæ`ÝŒ>!ö9�µõzìhy}¼`ë�Ê+­oFŸ|Bì[ËQ ¬°!ð»wFˆí¶ñ©Ë¹¬­×8ZÞ;^oT^JÆŸ‹Íè“Oˆ}Î8VPy¥•â#â7Î@CÎ8˜…r@®ù •âÐJq’Æù„Ø +Ô&g|»m°EmrÆ·[<~ŒW͈xî ¾zru€úÒrÕ€qd¡�é² h¥8Œó ±ÏÇv…wFÄur9ì>q°Š 3®YVåZAsÒò Æù„Ø+ÁËy‹j“3¾Ý6Ø¢69ãÛ-?Æ«fœÁÞ·~~ïõ¥åª�6�×,«r­`œOˆ½Ê+•—X¡69ãÛmƒ-j“3¾Ýâñc¼jFÀì=zº÷èÁêKËU•—ÐJq’Æù„Øgr+Ô&g|»m°EmrÆ·[<~ŒW͈xî nN¾8@}i¹j�U” È*NIA 9Hçb¯‹}¬P›œñí¶ÁµÉßnñø1^5#â¹3¸ÿä‹Ô—–«JÈ’Y®O º(l†}ʘq>ù„Øçs&ëõ",‚ÝWŠ“”ø‚2f9öHf\äLØ€øn}òõÃñݧt¼nFŸûœ‹ÀÚz½ öÄž‚YäÕ$E¦ Hʘå`\‰Ø×_=¹jûŽ–×ÇëÍqÁšÑ'Ä>ç"°¶^/‚í N³|B9o[â�×,«r­Ïë½nüü^ƒŽ–×Çë�¼œ·ÍèbŸsX[¯aÁö=€VŠ“”{�ž"þM½÷èAƒØ¯p´¼>^oT^©¼lFŸûœ‹ÀÚz½ vSQ6 «t8%%ä™qͲ*× @}sòEƒØ¯p´¼>^o2¹ßŒ>!ö9�µõzlOÈ2×A…Í46`Ÿ2f9b_ßòEƒØ¯p´¼>^ot±ßŒ>ù„Ø—…͆C)î+ìðø1êRV¸ÀÛ͈ø×Îàª"(Í4tQØL3aÊÂf¤¸#ˆã|êâ¹3Daˉ‘Dý¬��PĈÏD …r:€q>uñÜ´‚K†`ùLâN„S°ŠP6 +Ñ2ã|êâ¹3huÆ,G]ʪA9AÎKÆuÆD8ÅÛè `œO]Ó…¸#…RVg0Î'Ÿ{fÙ¡wt¨„°B­ä [ì”…͆C)îhô©‹çÎàª"0Ët%ä)î"àY91’ÆùÔÅsg Å,/&°Š „ Åa¦�Ål>C-Œó©‹çÎ@…Í46 ,l6ÈLÌH‚Uã|êâ¹3( › �⎠ž•#y\U%g0Χ.ž;N9'I�I°Šæ³’8l‹Sn繄q>uñÜ”…ÍRh-G9áæ‘{ˆËŠ8�Uã|êâ¹3Èì<0”t*‚„f¸#n7�—­Œó©‹çÎÀ³8%†¹$]„VœÎ9¡"Ng0Î'Ÿ|Bì•à‡$±‚â3l±ÿÆ\U„0Ÿ•Äa[(Á)c–O À¸ ã|êâ¹3 _çº�`aOÜRÆ,ŸðP‹Ù|†zïöaã|êâ¹3È‹¹„ tã|ò ±W‚JqG‡JÈ+ԊϰŮÁ·ßâ͈xî NDȤ³ Jpʘå(0>a.IÂ8Ÿºxî Þ¾‡rb$7`AÏì<0ØJÈsI ÆùÔÅsgÐZV”à”1Ë'ˆ€gåÄH‚~�ëBÂ8Ÿºxî XE`–éa>+‰Ã¶P‚SÆ,Ÿ`œO]!ö9�µõzaÁ®*‚ÒLC…Í46 ,l6Àrœr;Ï!ÅAH½QxVNŒäzãS_–…͆C)î¨}Bìs.këõ",ØUE`–éJÈRÜ„ÄÎp†3œá g8ÃÎpôfŽgåÄH®7>uñ%³ìPŠ;:TBÍèbŸsX[¯aÁ®*Âû°-”à”1Ë'P`\�DYØl …Ör ½™ã­À¸ ¹ÞøÔÅ—JðC Œ ’ÍèbŸsX[¯aÁ.+‘Uàôë\p’8ÃÎp†3œá g8ÃÎp†3œáèÍÏʉ‘\o|êâK%ø¡wt¨„šÑ'Ä>ç"°¶^/‚=!½/Â)4æ’Úy%ä€Lç:l‚mÏp†3œá GoæxVNŒäzãS_Î%JqG‡JÈ¡}BìsƱÂqÁFÄ?:I 9ã`JȺ(l¦™°û”1Ë¡•â$%ŒóÉ'Ä>g+èbDü£3�Ä�3f¡„ ‹Âfš °O³Z)NRÂ8Ÿ{fY�j%gØb×àÛoñöˆø®3`•�¬"0Ët�0Ÿ•Äa[çS{g ‹Âfš °O³åÄHžÁ8ŸºØ;ƒ„D¦‹l^hF å¦NÁ*‚q>u±wÌ2] Ìg%qØea³ABã|êbï ”ØJ„S”HœV µ¬DËÀÅiÅðvã|Bì[ËQ ¬°!ð̲b„ØnŸû�}êD‹ú³ZàoßkÐøÔ}ìS‡Ø;ƒœ‹ÀÐ .tP }âÞ¾‡rb$Á*â¤[FüÆùÔ!ö9�µõzaìH=Þ�î…Í46àAa³Íg%ñõ¦,l6JqGÍèS‡Øçs&ëõ",Xý”ŽËݽ·qýæ�ϼúéþÜì½õ€åîÞÛ¸~óÎç^ýtÿnöÞzoÝŒ>uˆ}>g²^/‚]Äs±ÇEì\ıp{\ÄÀEìqûu3úÔ}â“O�hQV áºAãS÷±Obï r.C+¸dÐA�ö‰O¸F91’`qÒ-#~ã|êûœ‹ÀÚz½ v´¼>>X°õFàñc¼�fD|×”…͆Ã0Ÿ!) fQŒó©‹ï:ƒrbtæ³’8f󂉼¤`œO]|×”^¡–•h jÞnçS÷‰O>u΀ö‰O('F9�‘‚–hmQØKyã|ê´Ì„`¶¡Î.^lt±_Š oF΀SÎIR`ÐÅ$>´D)‚æ$ã"œÂ8Ÿºœ‹ÀÚz}$¬7ºØ/E�Œ7£Oˆý'>ù„ØâÓ'>ýíoù4¾úõoÿý~úWŸþÇOÿêÓ¿úôß?ýô/ÿõ/ÿØýöéù‡/ÿë/<úò}ùßùòÿüõ—î‡/ÿÇ�_þ§›ÿö¿þá³ÿüéOÿøÿZX"¾¬ï?Y6X8ZÞ;pt­ìù‘|±ÞøÔÅ—ˆçºXnt±ÜèbYŠ oFŸûœ‹ÀÚz½ v¿(l¦™°µ°C|Yß²k°p´¼w àèZ-Øó#ùb½ñ©‹/Ïu±Ûèb·ÑÅ®A2ÞŒ>!ö9�µõ‘Uàôë\p’8ÃÎp†3œá g8ÃÎp†3œáèÍÏʉ‘\o|êâK%ø¡wt¨„šÑ'Ä>ç"°¶^/‚=!½/Â)4æ’Úy%ä€Lç:l‚mÏp†3œá GoæxVNŒäzãS_Î%JqG‡JÈ¡}BìsƱÂqÁFÄ?:I 9ã`JȺ(l¦™°û”1Ë¡•â$%ŒóÉ'Ä>g+èbDü£3�Ä�3f¡„ ‹Âfš °O³Z)NRÂ8Ÿ{fY�j%gØb×àÛoñöˆø®3`•�¬"0Ët�0Ÿ•Äa[çS{g ‹Âfš °O³åÄHžÁ8ŸºØ;ƒ„D¦‹l^hF å¦NÁ*‚q>u±wÌ2] Ìg%qØea³ABã|êbï ”ØJ„S”HœV µ¬DËÀÅiÅðvã|Bì[ËQ ¬°!ð̲b„ØnŸû�}êD‹ú³ZàoßkÐøÔ}ìS‡Ø;ƒœ‹ÀÐ .tP }âÞ¾‡rb$Á*â¤[FüÆùÔ!ö9�µõzaìH=Þ�î…Í46àAa³Íg%ñõ¦,l6JqGÍèS‡Øçs&ëõ",Xý”ŽËݽ·qýæ�ϼúéþÜì½õ€åîÞÛ¸~óÎç^ýtÿnöÞzoÝŒ>uˆ}>g²^/‚]Äs±ÇEì\ıp{\ÄÀEìqûu3úÔ}â“O�hQV áºAãS÷±Obï r.C+¸dÐA�ö‰O¸F91’`qÒ-#~ã|êûœ‹ÀÚz½ v´¼>>X°õFàñc¼�fD|×”…͆Ã0Ÿ!) fQŒó©‹ï:ƒrbtæ³’8f󂉼¤`œO]|×”^¡–•h jÞnçS÷‰O>u΀ö‰O('F9�‘‚–hmQØKyã|ê´Ì„`¶¡Î.^lt±_Š oF΀SÎIR`ÐÅvÿø,PROBSERN.Cgßÿ šÿ�ÿ‹ÿŒÿ‘ÿÐÿÕÿžÿ�ÿ–ÿoÿõÿòÿ›ÿ !"#’ÿŠÿ“ÿ—ÿœÿ�ÿ�ÿ$%&'()*+,-./012ƒÿ†ÿÓÿÑÿ˜ÿÔÿ™ÿÒÿ±ÿûÿ°ÿÏÿÎÿ¬ÿ3456789:;<=>?@AB×ÿÍÿ½ÿÖÿˆÿÄÿÌÿ²ÿ¼ÿ»ÿ­ÿ«ÿ‡ÿCDEFGHIJKLMNOPQRSTUúÿ¶ÿ³ÿÝÿÇÿÂÿ¯ÿ ÿñÿÚÿºÿ£ÿ‰ÿØÿÈÿöÿôÿáÿÊÿÉÿÃÿ¾ÿ·ÿ”ÿùÿËÿÆÿ©ÿVWXYZ[\]^_øÿ÷ÿðÿíÿÁÿ•ÿóÿåÿäÿÜÿÅÿµÿ¨ÿ`abcdef¦ÿ¥ÿ…ÿïÿîÿêÿèÿæÿãÿàÿŽÿ„ÿ‚ÿÿþÆÆ•ÉÉXÄOû'W«ÍÙôñÛ¯Ä*x�âwWô,¨à5¶[Äõ!~wºv<Æî˽7°&'cãÊ䔓±qer2ñu7TñC]Wˆ¿Z““±ˆß_øaÌaÖ ºcì¾Ü{ƒ~Œ®np>Å>ˆ4Ĉ·&'c¿_yp˜µ¢À¤ˆŸQ™À3\Ӏì¦gÄŠÊSL_Y““±qerê†ê¡"~¨ëêà8§ÿædl\™œŒÅþÉÕjs6½À‰SZ �© cÿäjµ9œ¾ßŸ£ã¢uÜ�ÂÏz‚"g;üîtíxŒÝ—{Ÿ§€59‹øé6:_¨ ‚�çÝs(i�à6:_7®Hµî$x ñP¾"øª1kr2û»JM�?ÚÐnãÄ)8A� nCZ_ÏZÁmœøº)8á „ ¨8©Åsp `MNÆÂéÕú´þÏ»çè|Ý�Ê+�ÓciƒžAZ'è|Ýô„â5!h8¥¨êâ)kr2×-atP- ìgìª ü�¯YÑAAùŠNZ'hψát�ƒpX4Õøbĵ59 i�ÆþÉÕjs8½ØœOÐׂ ï?¢"8ÜÙ\£!¥ ¡"ˆGç !‚Æóî9¤uAkr2'¾n Z÷Œ î#iT„ á”¢ªoˆ§Àý£Oðn¨ÔSL1Eü‡59‹xÇšœŒÅÊ )8] µx®�×�–pñÀœC×@×UOüâkkr2ñŽ59‹¸¾n Ì9qp t]õÄ �ïœP�HKèi´z¿€´„£ËÍÜŒoY““±ð TTyO�ë6(ºq�4c¨pƒ~,¤àZr~i G—›=H �áJaR ñ“59 i� (¸®#¥¨ CZÂÑåf�ëj€l·Û7¦ÀmA­j×4ct^« DÁ/¿µ&'c!-¡P*×@×UO¬à�–°ð\Ak½Ôq½ÔzÏÐuµ[êº:\êº:›«ºÚ!®­ÉÉX8] ëê Ž ^Ó² A×UO¬&pº@×Õ!‚‚ƒœxôc!èºê‰§À{§¿±&'cA7®šÀA×@×UO ¿ÀA¡.T®9ÆîðlùùÍÛË{ÄŸ­ÉÉXÄO'¾n zBç 8…ƒ–n\¡.T®9Æ‹£ånwùb¹½7EüÅšœŒE¼cMNÆ"®ß ¤%¸Nj×àèr³Ç7#4¾s¼ž@Z‚®«žXáÄ×M�r §~CLÖäd,âkr2ñ›÷]nöx²º¾ú–x{Œâz×?xqlïÛ-°Ý»pùñ‘59‹x0£0£0£â#kr2ñÕž8¸«ºê‰¡ëj,ãËù�€Ñ�€Ñ�Y““±ˆ¯öÄÁ5XÕUO ]WgÀ2æù�€Ñ�€Ññ‘59‹øêÏÄ‹Ð4TÐ�…€eüÛ|¾\ÎçÀhŒFˆ�¬ÉÉXÄW{âà¬êª'†®«C`ÿ9Ÿ/—ó9â#kr2ñŽ59‹xëº%(Wt]õÄPÂAÏ:_¨ hñ8ß|½xp>½ØœO Ä±=ƒ¸R˜”`MNÆâ Vµkšñ1v‡Ûí‡)ðGK盯ÎÁµVA×R÷QA<¤uiIäÄC×UO¬¬ÉÉXTNºv Ü^@Z£x¬6רœtí盯ÎÁ4x…»û?­.>\mV·ÿüþúöf…'WW›«»pº°&'cñŸ:ˆš×mP8 Mƒ�éi�ׄû 3ÒÄN‚žÁA�•P…P¹!hTTy#Þ²&'c±ðŒ®Vâ«ð'Áë)âkr2ñŽ59‹xëº û» L®(HK8ºÜìAZx W “RX°¯ -áèr³Ç�u5À ¶Û7&€59 E¢à0ø …â!-¡§YÐ:èüÒqp t]õÄ0¹¢ -A× Þ²&'c¡ëª'FÐâQQåy<�Ó- ÒR_ËñWkr2ñŽ59W&§œŒ�+““±ˆ¯ß¹Ï×7¤ÿmMNÆÆ•É)§ GÅ« âwÆÂ•¤‚FE•ç1üÒŽ.7{�Úœo)b]W])|Šø�±p¥0)… QQåy ¿€´E\]W=1¬É©Ö*Ì4(bíO¿5µVa¦©@yAç4zBf3bHë4æf‰³Ão·°&§®u ;O ×4j¼" >h!†59!ÞRÄÚï&ˆ? E¬ýNȉ‡c‚×Í^ú±t]õÄ Öä„xKkvŠø“±P…ºÆ1AZªàºÖ±ë„Ö䔓±qer2ñuç A‰cQh‰ ñµ59W&§œ׃0îãí)⿌U$|ÐB ñ8ºÜìAZx W “R°&'ÄõQñ ÷q`áùüsØAx>Ç»w¸w|Џ6GÅ+�Õ¤¬É q­ˆu]=t¥0)…û8*^a‰·§ˆÉX¹î#ê*Ü  )X“âzÆ}(b]W])LJ�"~g,´@<qp t]õÄp¥0)krB\+bíw¸�;Ïçǧˆß %ž Ï\Sœ`ðA 1‚E¬ýÖ䄸VÄÚŸá>ì <ŸŸæ„¸„1¿�ÃSÄ_Œ…úHëá/Ä^Ášœ׊XûCÜÇ�„çs¼{‡{ǘãÀÂǧˆkcqî•@…™‹Ð9-èƒ`XÉÖäô2Þ2wÈ)� 3¡sZÐ�¢Îë2…59儸8hYÜ}ªŸÊf vô j¬„*(âàèºê‰œ ñ�“à5o?ßLïNrz׊X×ÕCW “Rǧ9!®ZwŸê§¢ˆƒk ëª'FPx¼=¼Y>Þ~¾Y>ÞÞ ¥›ÉÝIN/ãZk¿›(bí'ŠXû³ãÓœ×-‹ƒ»OõSAü«g<.ËÇõòñö¬ P*×LŸê»“œ^Ƶ"Ö~7QÄÚN±ögǧ9ý/§ŸSN9å”SN9å”ÿ)®•â šÑ'ľµµÀ Ë�ñαÝ6>u9�µõGË{ÇëM¦ø¡dü¹xÑŒ>ù„Øçs&ëõ",‚=ÒÄN‚žÁA�•P…P¹!hTTy#Þ²&'c±ðŒ®Vâ«ð'Áë)âkr2ñŽ59‹xëº û» L®(HK8ºÜìAZx W “RX°¯ -áèr³Ç�u5À ¶Û7&€59 E¢à0ø …â!-¡§YÐ:èüÒqp t]õÄ0¹¢ -A× Þ²&'c¡ëª'FÐâQQåy<�Ó- ÒR_ËñWkr2ñŽ59W&§œŒ�+““±ˆ¯ß¹Ï×7¤ÿmMNÆÆ•É)§ GÅ« âwÆÂ•¤‚FE•ç1üÒŽ.7{�Úœo)vÿ¥ýPROBSIGN.CSßÿ ‹ÿšÿ‘ÿŒÿ–ÿžÿ�ÿ�ÿ�ÿŠÿÝÿ“ÿ !"#$%›ÿoÿ×ÿÖÿ£ÿõÿòÿ—ÿûÿÄÿœÿ†ÿÓÿ¯ÿÐÿ&'()*+,-./0™ÿ�ÿ²ÿ¼ÿ°ÿ˜ÿ’ÿËÿ½ÿÑÿ123456789:;<Ïÿ¶ÿ¬ÿÇÿ”ÿÕÿÊÿÆÿˆÿÎÿ»ÿ³ÿ­ÿúÿ=>?@ABCDEFØÿÒÿºÿ«ÿ‰ÿ‡ÿÍÿ¾ÿ·ÿ©ÿÞÿGHIJKLMNOÙÿÈÿÅÿ±ÿ…ÿ÷ÿóÿéÿåÿáÿÔÿÉÿµÿªÿ¨ÿPQR§ÿ•ÿŽÿ„ÿ‚ÿÿþËmþãÒÔË-òߕދ“¢DþÝíÒÔË-ò_·Î�Vï[B1”x¼¿>N�÷×wX�˜MHØœq¥‰[ä¿Ü.M½Üæ?.M­ô^œeSÿ·©‘w>�*b%óËîô®¢Š*úÊVi'x<_|ª¨¢Š>á/#x¼¿¾«$–}S#ï| UÄJ�wóËîô:%§„Ñ<´†ð�­ÒNàVØÎËÎb3/Œ.ÀXŽeßÔÈ;H±D´ì'PËpž­!-{¨Q Øj“ á°f;ÁH†L+ŸÌj9–=šyç©"Vr¹ì°‰¡W0Þ[ç­6Ägà’@- 2­|2£µ “e–•b·µ˾©‘w>�*b%njÛí<áô´»š`$ÃérwuÞ·ŒÓåî ÿ2ëÄxÐ)Aø#aͱì›yç©"V’iå“9ƒ–!…LËÔ2ø#±dœát¹»Â`RRX9‹í¼lþ˜`$ÿ.wW±ì›yç©"V2˜”ô 6ˆhÙc3/›3pI –™V>™Q�ZF¦Õ ¼±æÀÄ6–}S#ï| UÄJÖÉ 7 ÅÓ|z£Ê ™V7ðÆš[´l2¶ ÅÓüå�*'ì­ JÿÄS,û¦FÞù@ªˆ•�#“�iu¥â k¶p+dÚò@ÎŽ`!«YMPÞ Ëÿ Úr˾©‘w>�*b%+g‘iË9;‚…¬f5�™„ Ì:1”7à ¨edZÝL0’Ųojä�¤ŠX µŒL«(o†IÉ †´|à�œUX9 ##'ˆ3dVàXöM�¼ó�T+)>ÿj­ ûóå¹’XöM�¼ó�T+AÞÍ/»Ó;<…«‰X o†7 ‡–“GƃËÔ22­n°rö`HÁ­bÙ7%5òÎRE¬Ä@ÂaÍn…L¯VlY3´ZX�ŒÎ d�(ï,™µNšÆ3pI±ì›yç©"Vò`´(¯-gX�8==ï¶Þ¿{~žðùùy·�`$ƒ�„Ú-Ü ŽZ¶ða�ô˾©‘w>�*b%™;-ØÎË�tÒ¤Y�+‰eßÔÈ;H±䯳 Wš(±Å[lFüãlöí^¶ó²Aq¼¸/q}¼{{q÷x�"bˆÞ·¤ÊXöM�¼ó�T+Aþú•‰­cGÌa�ô€/lµxÙÎËÅñâ¾ÄõñîíÅÝÅ=ŠOG´.XUƲojä�¤ŠX ò×'ö·ÂW&¶ZŒ1‡uÒ¾°IÔNxÏ�Âçï6ø[ô¶JÓ˾©‘w>�*b%È_·.%Þ3®È�v2á=4 ß}¼x{<þy]I,û¦þ_S7uSÿ–ÿüÿž@Z‚®«žXáÄ×M�r §~CLÖäd,âkr2ñ›÷]nöx²º¾ú–¼¿>N�÷×wX�˜MHØœq¥‰[ä¿Ü.M½Üæ?.M­ô^œeSÿ·©‘w>�*b%óËîô®¢Š*úÊVi'x<_|ª¨¢Š>á/#x¼¿¾«$–}S#ï| UÄJ�wóËîô:%§„Ñ<´†ð�­ÒNàVØÎËÎb3/Œ.ÀXŽeßÔÈ;H±D´ì'PËpž­!-{¨Q Øj“ á°f;ÁH†L+ŸÌj9–=šyç©"Vr¹ì°‰¡W0Þ[ç­6Ägà’@- 2­|2£µ “e–•b·µ˾©‘w>�*b%njÛí<áô´»š`$ÃérwuÞ·ŒÓåî ÿ2ëÄxÐ)Aø#aͱì›yç©"V’iå“9ƒ–!…LËÔ2ø#±dœát¹»Â`RRX9‹í¼lþ˜`$ÿ.wW±ì›yç©"V2˜”ô 6ˆhÙc3/›3pI –™V>™Q�ZF¦Õ ¼±æÀÄ6–}S#ï| UÄJÖÉ 7 ÅÓ|z£Ê ™V7ðÆš[´l2¶ ÅÓüå�*'ì­ JÿÄS,û¦FÞù@ªˆ•�#“�iu¥â k¶p+dÚò@ÎŽ`!«YMPÞ Ëÿ Úr˾©‘w>�*b%+g‘iË9;‚…¬f5�™„ Ì:1”7à ¨edZÝL0’Ųojä�¤ŠX µŒL«(o†IÉ †´|à�œUX9 ##'ˆ3dVàXöM�¼ó�T+)>ÿj­ ûóå¹’XöM�¼ó�T+AÞÍ/»Ó;<…«‰X o†7 ‡–“GƃËÔ22­n°rö`HÁ­bÙ7 This is the release date of the disk. TOOLS H €g€ PROBE102COM Àk€CåROBE102COM {€-CPM113 DOC €¬€ PROBE102DOC €|ASCTOBINCQ €ƒBDOSDEF HQ €„€FUNCTIONASM €‡ PROBE102CQ €Š€1PROBE102SUB €—€PROBE102UPD €˜ PROBSDPBCQ €›)PROBSERNCQ €¦ PROBSIGNCQ €©€CCREF .DOC 3D 6A 2048 16 GREP .COM BE 4C 10240 80 GREP .DOC 29 21 2432 19 GREP .C 04 6B 8192 64 TOOLS .CQ 0C 63 9984 78 TOOLS .H B5 AF 3456 27 PROBE102.COM 5E 9D 17280 135 PROBE102.DOC 00 55 6912 54 ASCTOBIN.CQ 5A 3C 768 6 BDOSDEF .HQ 5B 67 2176 17 FUNCTION.ASM 9F 6A 3072 24 PROBE102.CQ DD D8 12672 99 PROBE102 Fog Library Disk FOG-CPM.113 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. DISK 2 of 2. Small 'C' compiler. Filename Description -07-00 .86 This is the release date of the disk. -CPM113 .DOC This is the description of the disk contents. CBIOSDEF.HQ 1420 3K [Small 'C' 23 of 32] RUNTIME .ASM C594 12K [Small 'C' 24 of 32] RUNTIME .TXT C954 2K [Small 'C' 25 of 32] STDLIB .ASM 1D70 24K [Small 'C' 26 of 32] STDLIB20.DOC 44E9 2K [Small 'C' 27 of 32] STDLIB20.TXT 24FB 3K [Small 'C' 28 of 32] C .DOC B40A 4K [Small 'C' 29 of 32] C-LANG2 .DOC C2F6 1K [Small 'C' 30 of 32] CCREF .COM 35CF 16K [Small 'C' 31 of 32] CCREF .DOC 3D6A 2K [Small 'C' 32 of 32] GREP .COM BE4C 10K [GREP 1 of 5] A Unix-like Generalized Regular Expression Parser from the October, 1984 Dr. Dobbs Journal. Pattern matcher implements most of the features of the Unix utility of the same name. 'C' source included. GREP .DOC 2921 3K [GREP 2 of 5] GREP .C 046B 8K  [GREP 3 of 5] TOOLS .CQ 0C63 10K [GREP 4 of 5] TOOLS .H B5AF 4K [GREP 5 of 5] PROBE102.COM 5E9D 17K ver. 1.02 [PROBE 1 of 11] A utility to display various information about your CP/M system, BIOS jump tables, disk parameter headers and space allocations vectors. PROBE102.DOC 0055 7K ver. 1.02 [PROBE 2 of 11] ASCTOBIN.CQ 5A3C 1K ver. 1.02 [PROBE 3 of 11] BDOSDEF .HQ 5B67 3K ver. 1.02 [PROBE 4 of 11] FUNCTION.ASM 9F6A 3K ver. 1.02 [PROBE 5 of 11] PROBE102.CQ DDD8 13K ver. 1.02 [PROBE 6 of 11] PROBE102.SUB 5819 1K ver. 1.02 [PROBE 7 of 11] PROBE102.UPD 469C 3K ver. 1.02 [PROBE 8 of 11] PROBSDPB.CQ FEE7 11K ver. 1.02 [PROBE 9 of 11] PROBSERN.CQ C88B 3K ver. 1.02 [PROBE 10 of 11] PROBSIGN.CQ A30A 2K ver. 1.02 [PROBE 11 of 11] K ver. 1.02 [PROBE 2 of 11] ASCTOBIN.CQ 5A3C 1K ver. 1.02 [PROBE 3 of 11] BDOSDEF .HQ 5B67 3K ver. 1.02 [PROBE 4 of 11& Fog Library Disk FOG-CPM.115 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. SORT programs. Filename Description -07-00 .86 This is the release date of the disk. -CPM115 .DOC This is the description of the disk contents. BSORT .COM 0D74 4K [BSORT 1 of 3] Combination sort for fixed length records. Squeezed ASseMbler source is included. BSORT .DOC 9862 4K [BSORT 2 of 3] BSORT .AQM 433D 28K [BSORT 3 of 3] EZFILE .BAS 6EC1 22K [EZFILE 1 of 2] MBasic program that creates, adds to, and changes sequential files. EZFILE .DOC 3742 3K [EZFILE 2 of 2] QQSORT .COM 1D1D 8K [QQSORT 1 of 3] Quick sort program. Pascal/Z source code is included. QQSORT .LIB 7996 3K [QQSORT 2 of 3] QQSORT .PAS 5B5C 4K [QQSORT 3 of 3] SHELL .COM 7304 7K [SHELL 1 of 3] Shell sort program. Pascal/Z source code is included. SHELL .LIB 6032 1K [SHELL 2 of 3] SHELL .PAS 6C7F 3K [SHELL 3 of 3] SORTC .BAS 1ED3 4K Variable length, variable column sort in Mbasic. SORTFILE.COM F7DD 3K [SORTFILE 1 of 2] Sorts an ASCII file in ascending order. SORTFILE.DOC D566 2K [SORTFILE 2 of 2] SORTKYBD.BAS 0268 3K Sorts keyboard input to screen listing. SORTV .COM C67E 2K [SORTV 1 of 3] Sort for variable length records terminated with CR/LF pair. MAC source code is included. SORTV .DOC 3170 2K ver. 1.2 [SORTV 2 of 3] SORTV-12.ASM 439E 13K ver. 1.2 [SORTV 3 of 3] SSORT .COM 7B95 14K [SSORT 1 of 8] A merge sort utility with up to 20 sorting keys. Allows you to use different collating sequences. Squeezed BDS 'C' source code included. SSORT .DOC 60E7 6K [SSORT 2 of 8] LEXLATE .CSM EBAF 3K [SSORT 3 of 8] SORTORDR.ASM 639E 11K [SSORT 4 of 8] SSORT .CQ 0FE4 15K [SSORT 5 of 8] SSORT .OVL C4E0 1K [SSORT 6 of 8] SSORT .SH FC44 1K  [SSORT 7 of 8] SSORT .SYM B053 1K [SSORT 8 of 8] Pascal/Z source code is included. QQSORT .LIB 7996 3K [QQSORT 2 of 3] QQSORT .PAS 5B5C 4K [QQSORT 3 of 3] SHELL .COM 7304 7K [SHELL 1 of 3] Shell sort program. Pascal/Z source code is included. SHELL .LIB 6032 1K [SHELL 2 of 3] SHELL .PAS 6C7F 3K [SHELL 3 of 3] SORTC .BAS 1ED3 4K Variable length, variable column sort in Mååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå'ååååå