¶qASSEMBLYNOT CLEAND18COMƒ£CLEAND18CRC+!'CLEAND18FOR/‹wCLEAND18MZC1qƒqCLEANDIRHZS¢/¥READTHISNOWÑ Ý‰SPEED NOTÝàVWARNING !!!î þGÿ ÿ Notes on reassembling CLEAND18: This version was developed and assembled with SLR System's SLR180 Plus--in my opinion, the finest assembler package ever made available for Z80-based computer systems. I assembled the source with ZAS 2.4, and got 52 (!) assembly errors--mostly flagging the 'ext' defined symbols at the beginning of the file as, first 'M'ultiply-defined, then as 'U'ndefined, and giving 'V'alue errors for half the relative jumps in the program. (Yes, I tried 'extrn' too--no luck). I know David McCord likes to keep Z-system tools in such a form that they are able to be assembled by ZAS. I really did try, but, when ZAS bombed out so badly on this source (much of it unchanged from Version 1.4, the version he modified explicitly so it WOULD assemble with ZAS), I gave up. If and when ZAS ever grows up into a usable product, I will be glad to support it. Until then, I can't recommend the SLR family of assembler products strongly enough-- and I can't recommend ZAS at all. The problem is probably mostly my lack of knowledge of the idiosyncrasies of ZAS. If you do get this version to assemble with ZAS, I would appreciate a message telling me what I did wrong, so I can come closer to ZAS compatibility in the future. Leave me a note on ZNode Central or on Seattle's 'downspout', ZNode #12, at 206-325-1325. Note that this version allocates a smaller-than-usual amount of space for the stack--50 bytes. This should be more than sufficient for most systems, since the most that is on the stack at any BIOS entry is 10 bytes (on the call to SECTRN; all other BIOS calls have 8 or less bytes on the stack). Unless your BIOS read or write routines take more than 40 bytes of stack space, you should have no problem. If you, do, just change the amount of space for the stack to a larger value and reassemble. Note that this will reduce the amount of space available for directory entries. HOWEVER, note also that this version was assembled with a custom version of SYSLIB that has the COUT routine do its output via a BDOS call rather than a BIOS call. This allows for printer echo of all program output, and also makes the amount of stack space available on console output calls irrelevant, since BDOS/ZRDOS switches to a local stack. If you reassemble CLEANDIR and link it with the standard SYSLIB, COUT will use direct BIOS console output calls, and you will need to make sure you have enough stack space for those also. Steve Dirickson 14 June 1987 à Z3ENVþ* ÍG *KB í°*' 2ù"! "b!r¯ w#üÍ8 >ÿ2t¯Í) Íy CLEANDIR, Version 1.8:]þ/ÊEÍ6:^Í6:mÍ6:nÍ6\ÍM Í2# OÍy Disk yÆAÍ� Í ^#VíSl ~#foí°*##Í#Í#"f"h*í[! ·íR}æàODÅ Õá6åí°áÍ#û"\Íy --> Reading, *)"j!€"då¯ÍSá~þå(@å V##~æ#^²³ 5Íy Zero Length File: áåÍå!z4áå#~þ-( þ (á $*v#"v"në*\·íRáÚ´Å í[bí°íSbÁ�*h+"h|µÂ":z·(&õÍy ñÍê Íy files of zero-length *våT]Í#Í#"`å))ë·íR)))))}2{GÑ*f·íRx·(+"^á|µÊÍÍy Sorting (:r·(Íy Descending Íy AscendingÍy Order), *n"*! "å! "å*Í#"}´ ÁÑà ë*n·íR"!""-ÁÅ x± ú"ëÁáåÅ""ëëÁÅÕåæÅO~æGy�Á # x± ëFõ:r·(ñ8<ñ07áÑÁÅÅFwx#Á x± ò*|/W}/_*0#"*ë*{•ozœg"Ÿáá*#""ë*}“|šÚE*ÑÕí[Ã{ÍÍy Checking, !"n*nÍ+"|í[|! –æ 0#öÍy Duplicate directory entry --> Íâ>ÿ2u*n#"ní[v·íR §!"nÍ+"|~þ 0@ #~æþ 8\þ`0Xþ*(Tþ,(Pþ:8þ@8H#â~þ 0^###~þ�0t*n#í[vå·íRá µÃJÍy User # > 31 --> Íâ>ÿ2uÈÍy Illegal file name --> ØÍy Extent # > 31, --> ºÍy Recd count > 80h --> œ!:"· ËíC "n"pÍ+"|"~Ý*|ÝíK Å*|"~&Ýn:"·(Ýf|µ(RÝåýáý^:"·(ýVz³(åíRáÌýý#:"·(ý#Ûå*p#"pë*v·íRë(Í+"~åýáíK áµáÁÝ#:"·(Ý#*n"p �#í[vå·íRáÂ[:sW:u²Â™Íy Writing, *)"j!"x*! "d*`"h>2 *h|µ(+"h: = !€"d<ÍSã! 5(*ÍD:{·(O!€åë*dí°á"d>ÍSÍD*^"h³:# O! ()úë%ÍÍy Done:u·( :t· /Í) ÇÍy Not enough memory to read directory.Ç*|å~Íê Íy :ÑÍH Íy ÉåÍy Two files use allocation block áå:"·(Í× }Í( Íâ*~Íå>ÿ2uáÉ!€6åå#ëáí°ÉõíKdÍ íKjÍ íKxÍýñ· Í · 1Í · Lí[x*+·íR0 *j#"jíSx*d€"dÉÍy READ ERROR - No Change MadeéÍy WRITE ERROR - Directory Left in UNKNOWN Conditioné*!   íKvÅåN##~qáwÁ x± ðÉ·|g}oÉ)))))í[! ÉþC 2sÉþDÀ2rÉÍy Syntax: CLEANDIR dir: o Options: C - Check only - don't rewrite directory D - sort in Descending Order (users and files) Note: Only disk ref is used in dir: forméí[lÍ$ :· gDMÃÃÃÃÃÃÃÃ� åÕõÍ8 ñwÑáÉÕ*K "~#fo´ÑÉ"K ÉåÕÅõÕÍ�G�O> Í� ÂÉ Ã„ ñÁÑÉõ|Í( }Í( ñÉÅÕõÃï ÅÕõdÍ  Í Æ0Í� ñÑÁÉ�Ú Ã €_y·Â ²Ê > Í� {ÉyÆ0Í� {ÉõõÍ7 ñÍ7 ñÉæþ ÚC Æ7Ã� Æ0Ã� ÕÅõ Íe >.Í� Íe y·Äw ñÁÑÉæþ Äs Âe É Ã� > Í� Âw ÉõÅÕå_ÍáÑÁñÉ Filename.Typ Size Recs CRC Comment ASSEMBLY.NOT 4K 20 22F2 CLEAND18.COM 4K 20 4F91 CLEAND18.FOR 4K 2 0A35 CLEAND18.MZC 16K 113 AAC7 CRC after uncrunching = 864D CLEANDIR.HZS 8K 47 E870 CRC after uncrunching = D494 READTHIS.NOW 4K 12 3914 SPEED .NOT 4K 17 2996 WARNING .!!! 4K 12 6956 Version 1.8 of the ZCPR3 directory sort/cleanup utility corrects an error that caused the program to crash the system if it tried to clean up the directory of a disk that had nothing except erased or zero-length entries in the directory. vþCLEAND18.MAC# ‚J#yœäa6Ž„0ŠA' % h*1#MÆ3¡¤Þn†”Íç#¡Ì@t4DCIÈË“Dó0€Ã.4œÍbI¸èoŸÇ¦&�Ï69K¦TjA¸Ï‚aÒc!”ä.‡å†3\¤Í&•K#a°Þw¤ˆ r)|‚DsTÒ2!Ôàl4˜Ì'Il¾c39ML´‘¤Êsº€Ê§:È€F cañ äry\¸* v$Ú ¦s ²Úh0£õ™MÉ-3M˜hY—R™Uí¦øéÓ<81…=ÄæÐo¾ÜMÂNüá99Ò æã)’UC6�M’ ÖÏkŠRñ”-�€çÈÚm¥V³æ3¡ªCˆ†]µþR0íª2µ™âJFô­�JÆ9+Øð�kÆæá)ÇF± TU5V _ôè' Bu-9zG…ðyp€ucÝ‘‰5Æñµ€Oç1¨BÁBP±Ì.F!t9»d¡èƒã 8j—íýß÷±Š�_$nÆÑ¼vbœ–¥YQÝ€�†‰hfAÆ×¡�L”&ä؈UR|á…¹APVý) ÆPÖ Áà)"Çåf™“‘™S @€lQÜ‘ –cô킚ØV5yè¶ÙMæ„ÂjM%*LMSQ‰-Pa¼k—Ûq]L†¸~WVAÌuÆ…‘~OÜ�o–¤¤Øf¤è±„b–Úê²ÞAˆu¯ì¤n€àɽ-¢ëQ¥´—æ– y¤Æ(‘>¦–T½=¨ß6ìqjÁA\é1!¬v°eCE§ -[†Ø� žØáËb¢áÊ“Ih‹Ý1¾„1@R ÓaÂ]œ‘æfp¢ ®Ä!OâhRÈ0¦>…aRÀ‘–íCáTå‘ÉHH‚Ä.2‘h3Dá[/ÌCE #5a‡dÁ"¼+ö(cb ­9DÅÔÊPALYÄÁ$BNFçg@ØöVìfVXgÁ‹|²öh q$NA Ow €P„àÍäCáDÈHâx L 8Ôcs�xwý¤OÞAEÑOžà7ì°2áyˆÊDaLÄ]u̦Ä ³Zêí•z»B·å¿SvNÈ&@¤Ñ%(1ŒÖ4¦}ÓP †!,–b:GätP"0—A”L1ž+„pÊpB"23¡šlÖRD‘"Àè—`v„�¢Ä7Åb;PÜÓÈ8njSL2ÇùH™Ká«pª4„�×xsøÍ”jBÓb ‚Т˜h(sj¡¥«’fRCPp!M÷>×)-à ô=¡‚x¢ á?%$ê�1$I{‹„šbÌ™©™Q4bŽÐ¡@é ö¤mY5‘Šá”õ–áÝË´†F)hA}³Ô6@`,bc‚™ÈÕáå>£�:¨5*$)÷1ñØ$”.j#�bTz»U&©Ui;r ¡ˆ6J¼‚ ²Í©ÊXË'›²hvQ²UvƒVg­*¥”¸*9K5D+ ¥¬µž´‚ÊÛ$Ýq<õ͉WZ]Ï• S‹r;4&IçÙ!)3‚ÐZ+ô�5¤=ÛkS¨ýQ(4 ¾–мæB£5(,½ÜãÑt,-¸L1Úsœ„Y T,à¢rÓu‰RÈ6̦n^€Ÿk+EjÆ·Î@ÂÖšär¾ì‰†&yópRɃr•š£†PX"•œ„ö’“fozÌ)æ‘s‚uÎÆ ¬áŒVjcÎ y7ÇÈ„]ˆÀHb�‘Ê` [Z§íFÁªÚbÍéÁlƒy@Q0òøXÔWýòyØŒ˜5à¨Yn±©<íð"4 ˆ¯ ÷%2Èì’È,jÉJ¨0À€˜½àvXê![ç´à4§”Y´gЦPÊAn7ÀPxÔPÊVÈxOÊÄS2Έ_OF{`Óï9$F³¹-p΂}£®a"ñ+§Mr]œ�ÃÈwËæÍCy8¢ÒƒKJ{I­.M!±lËeü2. ƒmp(�4"„Фkx;wÇZLIn°0˜Å[P`ÍB Êàƒg¨ ò¡#ù+øÙ­_¬h|uÅgaÀVœQ:Jۘ‚*¥XF;˜6_ü£ölÖ2ò_cPÉB--Þ›œ•„$P ô‚Fù ¿ËòǾÌ!¾×†÷\ØÂsš¿6¸)VVË]˜;»„‚æ]òb»UÙƒð¸Å9@ðI€HaÆ8Ìí ÉͶº„<ü�4òcâ¸ÈL å?ÍéÌê1@ w꘠܀OAoꤠ7Gf³AT“„ ©Ñ:Hç©ß( ë/JË” AÈõXVëAO†X %ì°œ�8í°`ÃÙ·ïjÝ $?.éÒ;_m"oÈ*„à†÷ÀWqîn�)—J�Ì;oI9H‚ºp¤î§ C6Ʊ0"/Ôjqñ�÷Ç„_/ç:»v MâÓTj� ç‰Þ�+þ é…¦Ao�0_Í‚è+ïp\ ÁgÅeŒˆ&è6v >WÌø>ßá€�aÝ«\¢w÷Ñ€ŠÂ\ }€ƒóô0AÇ‚‹×¥®P1Ò°N é¼ä"adðPEéà kÑ2'îkR°zw‰€•FyÓ ÷¶n'2~$�°22ˆux€á„¢'äl$ ~‡êgì�8÷qx]x�F wx!IØ#�§õ�ÐO�4vXÃx8R9ÐRM}€NyaD[ã¡PP~°RLô‰~ˆItÓ{C+»Ló‡7ˆYTß8c„`B†é2“²HQ_’¶J(:]sœu´ä†Y{POM0I†`Sè�F�Ee€BÐU;(/�V%MÆ?ND)ÒÑ(R/M5êj2½(´·K‘ÞäÕ*“q{×F�Pµ 9tJHw„nø[WHa@aMc[”ÖæI*‡Ä\x5»6u½xF%51v…7þ#î9�N†@P(tog³{WÂe2Hð,IgÎN¡=Ñ~„wwLND܇ØfàUÐB2ÆÝVwwpA ;7ÃC2ÃðH|Y C�I� 7Ã~�Ö>Mõå:c„`DŒäÓîR† `÷F_à;(¶…TƆa-@Ñ1Fˆ’‹�„š—K_£5h±ÔGíÆÍVµi‘e¡­‹&"4\p²A 'Š& ƒ²0T†¦ôˆ±Mi5G83©:Ù¤Ë.§aä�øÂ]"©—¯²Âa±-po. ;e1ª5;hf’’e‰iÏ�Á"Ù¾œ I�ác+Ñ:0hA(��¤k+©é;$L…Šv‘ÁJ¤¬B²Il›¨j¢°Q´B½©PF+pkRPpÂÊ< nQ ±zä™’&6p \áÁ†$â»¶"Zg`+É› ª\ªr":¡áðhP"‘ä°ê²S¢ÐQÁ¦+t±15"J‘ä²Ë>5‹3 i³aebm:æÓ#¢gsýAí¦¡CðkA1prºùuñe¯;”d•‹‰¼‰ï±Šå)øÜ™5¡«%›}e_dBž)µ²+¶Ñ°ióU1¢a%ò'³Â»rÊÑ ;)‹K—ËM´+�oÊ–�›­,»Â 0ع«²›±Lg8¼–Y!‘h KæË¸Ófzg¨dx¡#qˆWñÙ£á諜\Q9,‘'f"äC‹—ÃÀs1�ÛÀSªRõfCf†š‘÷ŸøA%&YàrÔ€@C: 4‡êŸðA1sÛ€jK$a¿r»x–F$ËV¼TÖ«¶¼•ÇÃ�uô<ªØCɾ€A¦,Š·G+ ´Q*›Z_Vº1ÊÇ „qHQJ�Do Ë{#w7˜ÔS"\q”¶‘ä�á¯á÷Vµš=PK TÑ –s!"”°Z¶ÿ0U>ÐRÇæõJ‘JÊ�WFò�%ŒÆiäoV¬Ò´Soƒ]¦ªRªÑêMfÆOºvrú3Pfz«%)Ӥ qã‡sí3[A›™0lYê°ÑeÉûÞ¥ª¬§;5Âk¡ÓÉ ‘pêDLÉÇúľAL\‰¶¾ü²¹Šƒ†~œ’ƒIs‘Ãâ½K!L¯UËë·TWœR°0§Öèuç¦%æ5Tgl˜ MðI ¯r18"âÏd‘Ò–›\E:®EE¬ä¥q:¶po¶‘þ+²P±%‘¬1Ëå!2·:” fPc%° Õ7*QK ÇÊaá07 (š›é\¡vácÌâ–&éѱœpD™êÍ=tØàÓjqlZ:¤‘ç66wßaŨ­>c–DÒ„w‘—1Vtä~Â&rÃ&Äeó”sáχo?,û \~£Æ¤Ã�ø£�j]¤äûòÎr ¢)ÑׯÈþ(صe4‘CËjðF! �×x9LÆ¢¬È¬Ê -d7ƒ�(ÔrS‚„Q É5jQ£y—±À+í@‘ �—Ê­–:ºâPÌí/Ê=)ÓýOټᑠ7‚¼“+´ÙQ·#õr3Y�µámâ5¬#´ÝØ]¶·ŠÏ�,Ö�KÏÈ‘"F?ò½lf!¢»!Ð'Eí+ÚxxÝb‚/Ô²"ÝBOÝÑÈ fÅ·X¢Ïˆ Ý�Û¶j·¢#^,nañMƒÿÐ�ãÙ��†ÝÚÏÐL‡£“5©�Æ [zu!Ð�2c�fvÓ†¶W2�ýtM¡ !XÐTl*ÅÓ¥9™­ÑSÊ÷noÛXnþ,”ÕoøûžTä»n0¤µ<Â. ¡'ÁC¤¤Ž°F^76Èç„kªí®ú^/òøÛáë×äD<¯=dy£”¡M>n ª¦þ9Z6%?(BðMNAY¿£Æ×§ÎÝš¥Ð;–Á5¤Ë¶Ê§„¡P,áZ^—Ú9£¹àåGegÕG!W 3¤b%tÖ¤ÆV˜vÿpnä�d@qMp‚ݱàÝ«¡S)âFWU·OuÞºàÍ)ýF!׬ìâpXI@Ç©?~‰ã¢qXÓé°ëÍË1ÎDÙ‰>ž#ÕãíBÔíYvÞlR·oË|‘Ö°;¬1ÒµÒ>ÈKk,ê A³ çE{¤ó($ɺÏ©;�ÐGò(âžÜåÆA=TeIS�n.^2²J/óZ#r�ÌÔb!¡äA:cnfŒ;gYÁ‰F›¼¡èÛÏ ¡ùÎÎþ["9Àv£6é*²@g@a Wò_rt!1@ò Òv}rØ Ú>.Ž6éæžß"MßA¶Š*Ýlú�Zoµ�ÒÖîâÛ72,\µ�,k}ØÕØ ‚ØêPÚ°aôýœ8c­õ t×ò%ró݈‡Ñ�xÙ�ñ²%"áÎF-`Ì iy�qí*„²FröÓ�Œ½Çµ,IJAH\ëNh÷Ý¿»¤£™Á«|„™kï"rB@i<æ�(”«JS£ò?(Âÿ,2¨¿�—#¡©­�À²ï�üÛ^Ñi�\!Ʋ¡>*�l7¤v^½ÕÄ¢»Äi˜%¡çÄÒ›'Tø:´1Íã�0tqC¼–ô+ëû÷@h¾Ý7!G>€ygd!%þÈB{Õ×r»)1e)ËÛD\‹�.fÉ»y™ûgK?ñ-ÄZù²Bn!¡›eúû0ž«’³V�û!Q-ýqÝ‘D»-›þ‰B#\žj1|+¿×l,~6ÿÑãvqÁ©Fdž£»jÿÝK»¦¤Ó&D ¹vü0@d+Ÿá3q5óZÌÓµ„'¢˜!øšÿKe¾ÒŸª;ÀÌ´.êU:àø¢ØfZf‘®SÁ5+4׿,"^Áa(o�ªD¾¾ â¦JdÜ‘¶(�ùK9¾Á¡(²�È4í¿/ê*ïïÃaŠ*Z�ú‹LúaèÌ:¥&Õ9³Ñ‡ã;›þ‰(Á"{d°1e‰™Ák¿(™²‹žÃræ#ÜiÕ[ Ðb»Ä¹ÛÉ. Sô\gâ®;„IA˜æéúÑL†â‘¼“üˆ¢Ù­*¥db,Ê»‹ÊZcÊEç>G`ñé¥a±¨äb¢ÝQ¢™Ã?9ÅH´ä›Ñÿq5›jÖnŸ­¦8NÑhõY®âP;ä‘»nàoþ-®þíÞŒéª Ï¹×ôÔSéjë£ÖÞZìÇ;á×Ë1-ã¸Ã?µ›Z'cvßÌzÖn™¹»:`¯d™Î袓TÌq±ÿŽ«^3þ@lSJB�ìŽds#51Æq+»»Á½¢~g•Öáƒ%®Ìz4ðl*q5èˆæÿ9ÙÊœTâ ›ži›ÝX�|dæV¬Ç²5�»nN£Þ†åW2ÔÝx„è~ŽÄQ"µvfÀlX)ù*²Ò"SRÃì�gç‡×”ì—V]pSxMb‚÷)0&šÕC@k*›“‘ÀtР 2Æ…×õ{�%䤌uÔ'q÷ÔVÂ7�9 ?XùàRM0S¤þÒs#5=��ÖÏ¢�˜ýUßaU1ð6qIÇ]zRÂ2aS{�ÞÝ�U3G‰€ñQÇS'7îÀ-kÐT¨J…IRñòÓ4Ý_�œàæÚ’ûªŸÚÇ[''÷â (�º'ìÈçk÷è~Ïâ®;o¬¢~ÌV%nåP ٬DžàSw#õ9¦1Zê9oðSqäñí^Ù¬Ç÷æ\—¶3òx}`I¨á’ðF@˜…‘jMÐ22‘©ÖVëÐSŽu4­Ž9c°={ãX­ŽvJÞíœ(\qàSå3VwwÙƒLøça€WÀ>×1T~y†×§n€ÃòMÐO„§|?4ÓøJGc°á˜„H”ÞLòˆhm}DOZ¬¥ØòQLö µ¶•å£5´ŒäàaB÷%x¤�¾'X·ßæzó”îR¶3>*ŠPI¢BTngÁH­qäëÕéŠÍ çbeýå^:<ˆÉ¥ƒì&¸[n©ôÝ;@O„¬ys#Å•æ Óº(%Ó=ÖÖƒ#�9áÓ0ThåSs N9ñ8Æ¥ «X=šX>zç'ˆ„ 2tS 4Õîv 3Õéw`õƒZ!s°x»ŽóêV6Ãõ…+Ó¶¢"šSç$EÊJŒØ©’®¤Ï„ÙµM�¦½A7Ì^L°Û†V¢z>�7i"ç¯-`ÚC²ù.Ô¥gkY"`Ö3y¼áòÒ¸S+üÎV2òÝgßÃóWòÔƒ’OÊ*U~üŒWœ©¨ 7Ä8Ú øÖ�W9¤ Gf�?XóXø�³ñ0—ò×q2(÷8ê÷qŒÈ†Œ~�yóŒÍÓ>Ú—\ˆƒTÐ=ä§�·|ÖŸND D‰;!S CœÓþL*8I£ !UO]šõ§\:#9¨‚r²l.LexcŠ@TõÓ8DädcòÝh �“èŒÅ¶„8ã�\ó€O€0F~Îè¥>{Vv3‘ Š'“ê{y¼á¿È¬‡‰Ûbü¨¶áñ?-yŸn�kü¸+÷v×oÌHcŒ{ŽvJ×áÔ眩,‚Èí¢�Äã– `ø,HY?÷=¢y~n š¸°WÜš‚†´šªÔƒçajHψ"Ó«>ÐV|{ˆ ¾V_¶˜Ø9Ô&áu$ÎxIv~5óºTwwók�,‚È(/=^σ|C‡‘ùüÁ^5¶Ìw£F±Îb¶ÛåÈbgš;Î[c3Ö“¶é4¢yoª˜(>ånå^:ëý|å\ʺ©GW‡gá㑼ÓN÷>g�håR•+˜0I©Þ˜åfTíð4¢z¬¦Û •幕éxǾ߃œ÷R·ˆïØm[EBY–öL(Mb‚÷ s£«q°õxCÁnztÒùeH3'+»F d‘{ËÇù5ˆ2�D… ²y7_`Íu2{‘,üs�ÝŽåejsp;�$QH¬�¾Ï„ÉéÇž*ŠPI¢w�PEƒ5–�%µP ºÔa Ioö�‡ìq3:ˆW>Y�!^Ú÷“ØêÉc®èXò"ú”*]ãή·áú=j‰‰c-V«ðdžwûƃZ;Åí(±êÜ0 7ÃêÆ}¸Š'Í£ÝK}M3Q±ÿŽ7("ߦȀÄ>~�3Ô ^§ŠÜu|¶aï'`í©ö›Vqx©ÊûÇ&!5\q”Ç\µ žk×ázoó,„#-x‘òÃPK>½�¹œQ� im ?N¸�^Áî;Œ>.]:¥M ©¨ kF¬¸`òÓ7�Iá�IÅðâÔv+»oè�vÀ2˜&~œzàIÅßHççê·E�½^å±RDÊá�%Á†–è€*\–÷‰fm^Û‹8Þ  º‚±>qc.1ÙÎq‘©¦%YÉ8Œ`×5jÇ¢ÊZW¬ÁmµíÞÔ3‚n±Çš(ÿ—2ĽMÜqGêf´Zû-±*›|Û¨ÃóÆô æ¢þ¡ü»Å‘@N„W‘ˆ÷ßaÄák&g�oaÁLÒ 0{Ð|ꚥ“‡ëèÜE3§ÜR—m€Å‘»«èx×ÑYmû[ËŸ¾‡ô¥–φ%ï&ƒí e3–çKÝ»«è�˜»¬y‘ôT~®�ççòdváÈS OõCrÛŽ @024¾²cÆÓ‘Á!”j𥓇RH§†(ôžÀSä6Žy>9J(ÿ”€1�‚q�AÃ=g¥•Y~�‰‚{º{×Õ‰Ÿå–Úô�R¶ã¸ÃsÊãŸBó¾ËÌti…'Ž€œQo P×®ìÃ6½ Z5�™Ü…‘‡5ZÙÎ`ìÕ/VpUüèá–>\upÛõ‘8…ãõÍžŠ½B4|¨oü†>ÀSx�z�îÆ»¤„«½¡ °H¡ÇΑhÅ!©%Œo¬-qÏ…‘þŒenº÷öÊ„Z��'Tµ!PáŸCâÆúÂ×78yy…‘Lwè÷öÊðVq»1ÙæãAÆúÂ×®„ã'm%ðp£:,Æ\L1ªè'T D3G¢ñ‚Ñ�œîiò`"OÆÜ¿� MàMŸ ;ÒV01lIê0,ªè'”&ö¿Áòªè':“àNXÀPoM;ÿ¦=Ç™>�½^“àJÕî[Ù XL­·Fò £¯bºÈ¬üµºª–îiÙ [ª©Vr¶}x@i…kņd•Ài†à3PIŠ—M¼%¹êY�‚"˜˜%k°(M�º®~€5O^z¢æºý¹äóŸóÑ×ërJ—þ¥f|ìowqMÖdîÜng&�۱◿�Uû�x°0¢v¼0M÷(�»ú /�û·Åó:0!˰#¢yJR—m{ã6›2€iù¥ý±ÊÅö€_˲BÕmA±9’™Ð9_—wÆùá)Ðð,]=‘Öö…)vØÚ™Ð3©�M�x[`iÎÜøªçèWÑòªçèHqwƒ5Nr�¬_3¦gÎÄ<=ø!‘+Ú€("½ß¢v¼}x$Ä�ÖG×è‰,‚+÷ž•Û•§‘ªæ¾Ïö43SÆùá¤ØUö¸(©O†Nö…)vÔ}FM�°¥ƒæ|[eƒyØ YD;kídOY$"¸ MàMa×+¥p1·èÝÊÅürp#¢yJR—mG×èHݶ"º[Íӯ׀mnQØb ªå8ê×PGs69c'wÖÔÓPk¼ñ§ ƒS7m�¡±ß’«%Ç cëjë7-šÌp(¤)êTò«±’ûÔÓ[|J'¯€J¢qôã¢ÒÉ´ä–�%Ξ¶+úùÎˈ ¾V˜¾,ãÜI9NgÁLO‚¨<‹eÿZt)kˆ ½zÝz®~€3N@jd‘ÒjHýó XÄñ8Æä–6ÆO¾¶Øã¬VLšýŽTÃŽ ¢jí«"³5$&C\—ý~¶(ñÊÅô¤åè&%xeŒ 'Ù5²o6_ Gæ��-Öªîk2𮹴õÙѹ½Íñ?-’@iƒ nž¶"(�Åü¬«°#‚ aÕ=F 1·ê7¢Ï (%ð|º'”¥)vÔ}~Š˜Û`i3âé5[ÍÁ@‰’AkÌÝpñ¨åªéöë�I‘\n–®rÛ¯Ìø¬C¼Ç‚‘måáœ�W™ºú®~„‡7%ØNBÀQ6ji´¶éÈ–>¶®·„+n;Œ>.aHÄï²Ã¾ý5·Èåî�´Ä›çàx6j-«X5£vú®‚yK¬1Ò»^µËîSuî)®±ò÷¸~^:(†=†6ÂÿËpDË•ÚNC­ˆwäíz•In²íªi("ä¥~¶lUì2œ¹àœz{÷AÕNЇ¨=bùR—m”&ðƒ5“ Jõ¦Dÿ»e³Sÿ‘Œ;·9|�Ño¬;·¤(¬Â#oì QCªŽ‰‚±j.ÕO ¹Ú%’™Rû,I¬à,Ë–ð¯ÔødïK×焌*F‰JIæL*O�V3××rt—¸2(.� Û °¥ƒçžUâ¦ï\¦ÂÀ2.BüÍím²n!0O`¾}ÄÉ#¾ñ±oãXNTdf‚›%ž�j-«Ìs\$µŒò.¨jØVÔ¾i>ö¬f¼Ê©ïv¬ÉÆZ4Ä£œ1òìºÇCLÿŽ×kÆ8<µ{Æò|k_Á€�Á5ìŒ2«±çªŽ‰2œ¹Zž½L�Må�;–>ao¨üZ¹ê+2ÔŒAXè~Ì~ŽÀåU)vÕIÑÝkNFÉpësŸÑçÄÚfìQ4G`F4V^ 1äZÀ:-D52$íî¥>MS¦R«äTÌÖ5{Yçµß,qÊÅõ“,»db² k¼<9Á:”>ÅÁ5Yá-qMó-B‘‘{A50CO†iÞ1Sa0 a¯p³<ÒËe¢×emW—Pµ 9xª‚ÇÂx¯èôÕÍÛ³6µg¤>VV­ ’Nr.°FN`çLŽ ;59(‚‚ùáA?–�Û§2 ÛâUR—m.°Fس)<-O^yÉ´äMK¢W±Šn‘±/h�è@73Q»•X›4ˆýFƒ54ñ:(³&…»6xÀ1™´¥Ã# m2•$q½œl¯õ`'K,Ç[/I€Sl$Ðuç¦z�)jA^nÒs+§ýø‚{e‘e`Xwáv»!AfAaYå ?'ts�8íW©xûvKýSÁ1Ä“5‹$-_=flˆ ßàX9­Äã—�§z€öƒˆ T{t}ó5²Ï1«ÓCÆ(,Ó &¿ yÈñìÝLÞÅE¾PB„#~7€EwQòæø<ßUÓ5¤ 9üVeÍ;ž;A*ûòŽüm×úõ`'wÑÁï ;¿³k{#nÅ*'ÑŽ¤Š\M®šÃšGad2!Û Þê­žK>*�Û‚à;–�-Aޝ£�íŸÝšE4ÖО¦/(ÿŸ\8pC¤aˆÍyñ]œl§¸¨Þ3P" "[d¸nžÖdExÔ Œ5ñ¸�ÙË8p{Cy’cZ›Qéà'.Íu„>ÇUF‘Ã^A÷še‰@džFóeðq5?7YZH O7°Ù¥ƒËè ?O×Ü)K*,Sj½¬-qkjª•J±JN¸'›ß°,1ThìµÏÐLC�Ýa¾‡uˆ“í,ÿ¢›YŒ¤ñ«Ÿœ»è|õ‹wdžKYÙàM�>÷>ŠÄ˜ó€,y¶¶%ÄèC0Lo¬Ç¤PNE—Ì:´F#J/'…§°0Ï;ª‹B‰¸üªJî�´bŠV“Í@X5yÒ¬�ê"q>Ö„ý�ÓvÅÌÁ-ífDW‰‚Õ`2|O†ä\Ñ-Ú+ä/&•yŒM‰¸üZ´@Þ8݆‰9I9ASË.>Ú—6"u!«¦ž‘¶ÿéÌ Ô"ž,¾^“ö¯"`"R@Oí Ãa€§*þÑ«f(Äá�a%ò,ž�t1aV|²:äôž§,göŸd=WêÀ?d” À¡ÛuÏj9YF"‹±fASTÇ.¡¾ÈSÀ ÐúW«A—ÃH+Ž<£;¥q:‰™|üA"±ð öÝ @Qƒ¶AÙĉY•bÂAgK¸¢aÞâ™ã!SÑQ×+qC´«»Á¶R%ñ11A I�lLB†1Ò¯·9ýW²6:4ñíòí&äû&Ÿq:§bêyL¹Xý�°¨C”b¥4Ä£R† è=m8unÉÁÁĉNËS²MÕŒ˜%kòpRÇî?¡­È|µ®“Ö˜+ö§èÇöÅž¯Ñù5G8*'yÚé” +lòï¿ÌªbØÄ›¯Ë�G( ËW”3\¼^N�èñG€å: B)h`th‚…‰fº÷(B[0ùá8´Yz�Ö WäÛ¤ÿy)§tH�Õl­Êò'»h™xqe%lµË“š;Ïl£¦µhîÉ”—ì\‡}?Âv`M`e}êH­„Rµ‘šÃšÁÎq?WçqåÉk©?Xä©{@T?Uà$o”’ÝÙÆÊï§ÎË•QÙI‰tÓé‡(‰)xàK?"Íño�Õ–Tˆê¸}qZ5‘šÃšdÿ…¥"qX%‘i1AÙ­0J,©Œ;KàlR÷ šš:À:±è›íI+=ürb*u×±è"á'¶AÙ7¹¢g»_ZdC'ù¹{Êί´à ­}Ê¢adVá�òíl$*�}Y|ëhá¡j²mg»S¡F†„Ð'Sœ;±X"¤’ž)º2ÊABþ£À;C®/‘›K¿‘‹J*µ)·«A²AFgéÎýr7!@sïŸmt¼—!þ3²B›Z"r�¾$ IÛdŸ»*` þ}rÓq¼n<kÀ959ñK93Š9Ka<}¡Ô�äS¢‹Bp2!ýc Å jôt¡Q2†jqç5¼:S¯$Adù6rõ�oë°m´¢žaMb7x:Ÿ!¾$x•Ñ ÃˆÝ+Œ²«s!ù’花™’ÇêÍ®7ÒP89,~ïžêÔ¹ûéÞöe¦lz“)µ¢G!:(Ðrvm°°ß�.Óo901è@3è@4è@5éœ�.j9!ð("‘lκ:¤’'ªAO±Ð’H§ 'p)hAôgáäGÈF,ŠàaÁf~û¯ô's¥*‘Îj²7Ú‰ÁKÉ}ÿ?AGE:Ë=%zd¢RZ· 0f‘I¾O´ Â(ôðr_žñäµL;(öq©þ¾O'%óË l�!†Õ´tN*ã¶ñJÆÂ¤Ñ¦€@IÛð"ò¬×¡EàOKÙUu$£¾ n58 .CÄy1È:“´HõÁ먤ÜT#q��V è>;Œ>.N@ N}½¼$ûŽþÅkÉVDÇœ1¥\>¹�]Æ™¼&HÊLÇfý—(¡CRK`ÝCEáÓŽ7¤šL¤ð @ ¹^ .CÌð‚ SEãlÒ @moú{òÖ¶§§GÇI¸JŒ�­:>¶õñ8âä�:¿GÝ¥ÈâEæÚpnB¥Ó¿vÈÏ©D”¸]0%ÄèO`EíŠH R^aSZ�¨éi'ýháòœC�OZ3Wº…@CV2vÔ'ózx,ZÐ,‚Î÷ã—§‚Åg—f.®±òó XOU¹Ìpg¼jhUË×úÑLiŠl± .oÚ•‹„Ò¤è™i~Ö¦|ë·[ë„Ì—J‰™kæÿ�‘£BYi­:9Ãjªôû½ì¸Iü+n;Y°Fl)S•Q# ¥Á)⋾e¹•éÁÌ¥cWH!)�±ˆXô{—ú¬^Ü¥Ñ"Éð=“^e)lˆ cÐDoö=†8°¸1fz¨¾øžÁ¬·÷HñÓ]¯qT)Álq�Þø¾îΚqõMx’\Çc'×M”t8S 2˜÷öÊï§Î0y›@x¥–ï§ÎçºO8T õ–ï§ÎóWU`:Ynú|á\©sü+.SÊ6æaö†‰™ïYnú|áõ° “˜Xo6qlûªžõíÀ?c•–ï§ÎwÑ¥–ï§ÎàOàl\V8S¤²‘±M©íÕ–T�qZ5‘šÃš5äÐj (°(±1š�e(Ð3ñ»24àB¤õa:@‡”T†¦Âíh®¤qïRûÈý”Õã5�è`A*v0s‹Áèäë/8÷yhÂäâo²œÚÀÞÒs+¯u-” 2à�…9ð-faL¤’žÎ¹êñPGRÔD�V3Gÿ2Ùv2dÝí*L[61b^lvÐBRÙ@4Ðx"ÑÙe$v‘@j½5òA:”;Biµ<hmH–?OU£�ús Kˆå+�øuë·èC—ß©äÝXÌS�÷”¯y{@Tzñú}ñ;»¯žž0N¯)µTMçPS’føDû۬İeÕë`±òP¶hE`1Hp L|';4¥1à icº¸ï‰û¢†D\�±ÜË/‡I[½HôñF½kðYUµ0 ŸYjÖ�K¿‘C¡�ºÁ–^döïòµÑ-\„NÓ°n·ÉˆLZ>è]ËtvöÔñk@@3h)è›Ü³¥F¹/ñÁð”¡.uK‘Þ4¢–ƽRº.®Òp ÔmNŽXeÝ•LßÜpa™,éüzû%¤ÁûÈ•&{ „_Æv÷éñÎ�'Hü’¨ö‰-b]ÜA3\éNÛò¨ôá®›XöE´äé@q>ÖdDbä9|�å5LuÝ€;ĉYF/̾ðÔ”·l¡O¾à’™ïÌ™ã]×ø¬¤W»dÁúáHìŠ=eÝ€;}§§R·uÒ6"%²wèHj]×øÎü¡G.ȧc&G“¡¶5àL¦šJúW(´‚xfZf‘£qˆû]×ø°A—sMøìV±¼�;ò¾q �¢¾G¦`fZfí�¥Ý‡#츷9ýF*®‚vOTÿ§•SÇa†}á\?CÍè·¹"á.aêëWMbÕù¶S¦ksþ"¤­å˰zq1n›2½tÙ.§r²{ ?3.1 -û2«Y/-xð‰‚xc¯õl¬NBÕâØ^û l]5©ÏŸwEÝ÷æ¬NBÕâò¯K¿³¿Ø ”_¼„˜yf<þ1µ³'ì]GŸ”d”$E«| wuM£soivgÁÚ 'ah’}NÑOP`r�L[sHsÙ6 ⾇(¿$“”ckUƸHB�5(!¼!0r+ÃÇHÇÎTãä‚ÃÜ¡@òxh,=g N•÷!ÕI!i3¢}n)HsÒ@U[wÑ+âŸt÷ú+°b×(b•³,"@Pg-“'"Ô%ñ"`=ÔœBDŸB`.J³0a-Bã "ô¨9!`e JóBw¦-1JO¢ëå<+mPAl™3›U PåVžoÂkZSB2E=E PõlH]¤3³:çv˜(2š‰¯¢5gˆ Q04%ˆ…BÙ"ù�lcmŸt`DÁmèP )–™†¾ › K�!�¨†t'š¹.£'ðgA°qQuê"‚ž‹G­)sÏ)‘Ô43PX!|Ñ51¾áÁš)W{}º  &i!bÚ-CBC5ƒK '‘{Léä—ÔCR™'Ø¡9±‹´·Z#LSKzxƒÑé´º"…·  Q “È8Nçà •‡„6‡¡pI!KQ®(¥è)™o¹³™˜Óz&~6I4)X,PC°1 l̦?èP6�à-€w4¥Þ"õ~?¶�cBCÉlÑ•z‰¤lpc2ÿ`h'Ö®8³EÂé`v!•„4$àrD6ü{(Œ&Šx”Ø×ÏTñè’S‚–`UuÓ&®hP¬”#UÂQ[†O‡“C¤'1g8É—nP.Wµ/[P4�69�(yKF6”¦´#¡1áQ|mE.8¢*-Y j6â\ £â$|ˆ”#6°Z¸x#Ù/ss,Œ*·HànPjO "„“Hql"óBY€gTú}Ò±a_^³ç[ àH–`%�aÃZ$AM3X@AB:Þg¢q¹vO‰Ù°@5û[�È#J.1ÍEt]$¬0Cà1/\p/€64 M}1«Mra'ˆ"ûk@¦ŒYh%ex|SÌ@Yý A3J1˜�_»‰IÀ @IAšm3÷-Ñ·)ß0B&ÓÑp–¬vn4!Z‘ ©+¨¦ñB1÷•uê’3ƒc'á�ŠA˳¤h¤k[sP £”“B¼$\àBš’%¹ÑÚ·Ë=4+¯2ÿá¡8›w ’R,ÛÀ1•Ä»‘1]¾as¾†¬…Ç1žéP1r´ñlYñO‚ŵÁںĬ¾ø�å²1{澋±º´eð3¸ 61vܪa%©Ë/¢~}©RiUhr†€+Ç3’~Â�»XA�5h5ÖÔ<’@�A²¢pt½t#'æ (•D‘{8&|.C€F…"ƒ!»Š# $ƒ›,ÑÚÄå¡#AÃðuö6={­*¶çIIflOs£'£LCG1¨÷ž(£›Æ dúh3EL`@H0Kµ‚!,ÀBaª”=1r~w‡à}�@gI5Ôg` "æ@"¸Š ‚²°ú�Â~•þwæ"« ²|TöÀ»«º×ËÆç¿§|5F·œ/¬02,+€\Áü­¦´–:L§š÷�¤ÿr ‹Iw–\ç“ôæ’+&¯î%ÜÀa`Ë£s>"ùJu| S^{ËÁã_¡å5r91ȨÌÖ|LØá“‚{FIØY5ªCêÎ&`hÈ ÉS¾(¥!•AÆA¥q¨KA¬Ê$ZÊlð‘Sñ‘=1t±$PZ��R8O˜ìU@å\zÅP,Ñå‚ ożU€z�o¨ZÄ<Уà Óáч$ù”£ ±-_© V!£ֿ=B!â}4•J€ES'Q Èrm§Û>bD2«:#š’PL4-GýIýLF"~)õ[%ᫎ!5ÙS)ü.(*%­þ°oÕ{Ä'�åñ)“ÜÇ•lÞµW¡9WQ¶ƒÂ«†Ä_ðBXvjèÿeñ咨݊1ÐFƒîA:+ÞN�™ý3‘ñ‘l@âŒ)ÈÖºEҧ• Lí�€ÐL^«fÕÄ—åõw~%0I†ƒ“€A~@RN ^5.¡jñHHA‰6å§Tˆš\×Äuçˆ@é+>yŽò~ Y%ÿr~þ€g.‚9©•2~zI‘5Î]Þ¾`WŽl“�i ÂÆÞ!&S\¼E[–ã�ѵaÊé8<é–*P {´?—�CšŠ:£`ã,ge0“…�h4v=Å¢5Bã1î2(ÌÉîókï#kíž:ñSïÑÏììapxÛ�ÞnÒ©RªCd�ð/ vª³5Ú+© ¯9™1ˆa3™2àE: œ0ð1k‚3È;Wñ°RðG Aˆe Df ƒ ? ò!òO&4¿7«)fóÐHX†’PPÈ@Bf0I=o“BóçVPÀPʱPÓKôȆ÷Vóãµy�]ÐLÀ PN“ E@ Q _7f/q:fcö?l$8ŸCQ'uJ±9Ÿy 5 eÐA@T÷ `º@Hÿcº?nù:~E'ÁÈOFùR¹±�13B÷[šõðPPÀVeïš`Ió�_{V?”È@V ?RWVAòPIoŽ÷.(/IéàIàG÷ÛØô/%øôå /‘S}  ÖðOv`§A'ÕfHÿ�öuoOõS¯‘ËWùpGsP‚§étŠa7$¥0²äd]b²úòŸ+òÐ8ÒÓxß:A:1,€-Õ¼¡Ø„ _ífO"=騢D­Õ-Wñw›é�{då³;8;�50ÒŽ™zP&³v°(0F¼E4 0{€=â7fh®íÒáfÅU·Ú;«¿²ƒ;SÔiÂÛ@10øI˲Y618#”,*@\Cq¶ì³%׊¯ ôÑ?ä(wèH�æóË3Á5ïôŒ„„ǺÐIAy€Yá �ñ†äIf you are using ZCPR3 with an unmodified CP/M BDOS, read the WARNING.!!! file BEFORE you use this program. Well, here we go again. At least this time the errors were left over from previously-written sections of the code. Version 1.7 (which still signed on as 1.6--another slip) clobbered the system if it tried to clean an empty disk. This version will properly handle empty disks. It doesn't tell you anything special if it finds the disk empty--I wasn't willing to give up the space just to print a message. It simply skips over the 'Sorting' and 'Checking' sections and goes directly to the directory write. This does provide a handy way to clean out the directory area of an empty disk without having to reformat the entire disk, if you need such a capability. This library contains the following files: READTHIS.NOW You are. SPEED.NOT Notes on the speed of the new version. CLEANDIR.HZS Crunched history of the CLEANDIR utility. CLEAND18.MZC Crunched source to the current version. CLEAND18.COM Assembled version. Z3INStalled with an external environment descriptor at 0fe00h. ASSEMBLY.NOT Notes on reassembling CLEANDIR. WARNING.!!! A warning to users of the CP/M BDOS with ZCPR3. CLEAND18.FOR A 'FOR' file you can extract and use when you upload this library to the next guy. CLEAND18.CRC CRCs on the files before inclusion in the library, including the CRCs of the uncrunched versions of the crunched files. A note on the speed of the new version of CLEANDIR: Basically, this version takes about twice to three times as long as versions before 1.6. Sorry about that, but it is because all versions before 1.6 did not really check all allocation map entries. Specifically, they would only find a duplicated allocation block if it met one of the following: 1) Duplicated one of the blocks allocated to the first (after sorting) entry in the directory, 2) Duplicated the FIRST block allocated to any other directory entry, or 3) Duplicated a block allocated in the SAME directory entry. You can verify this yourself. Save a junk file that has at least two extents. Use DUU, DU3, PATCH, etc. to look at the first extent of the file. Note one of the allocation group #s in the right half of the display. Then find the entry for the next extent of the file, and change one of the allocation group #s, not the first one in the map, to be the same as the # you found in the first extent. Write the modified extent back to the disk, and exit. Run CLEANDIR Version 1.5 or earlier in the 'C'heck mode. It will not tell you about any duplicate allocations. Now run Version 1.8. It WILL find the duplicated allocation group. Some specifics: on my 9.216 MHz SB180, Version 1.8 takes 49 seconds to do allocation checking on a directory with 1000 groups allocated (a little less than 4 Megabytes). Since the procedure is completely compute-bound, you can calculate how long it will take to check your disk by scaling this figure for your processor speed and the number of groups allocated in your directory (remember, the maximum number of entries the disk can have, called 'DRM', no longer means anything. Only active directory entries are seen by CLEANDIR). So don't panic when it seems to take forever compared to the previous versions. It is doing a lot of comparisons (anybody know offhand the value of 999! ?). As a worst-case example, a 2 MHz Z80 checking the directory of a filled 8 Meg disk would take almost 7 minutes! Steve Dirickson 14 June 1987 If you are using ZCPR3 with CP/M's unmodified BDOS, D O N O T U S E T H I S P R O G R A M A S I S !!!! The assembled version of CLEANDIR included in this library uses DOS function 37 to reset the disk and force the DOS to reinitialize the allocation map, as long as it detects no errors in the cleaned-up directory. This is necessary for ZRDOS Version 1.5 and later (either by having the program do it, or by running DISKRST as the first thing you do after CLEANDIR finishes) , and it causes no harm (although you may detect a VERY slight additional delay after it writes the disk before you get the system prompt back) with earlier versions of ZRDOS. Not true of the CP/M BDOS! The unmodified CP/M 2.x BDOS has a bug in it that causes it to improperly reinitialize its allocation information when function 37 is used, and results in already-allocated blocks being assigned to new files. Or, in simple terms, IT EATS YOUR FILES!. If you are using an unmodified CP/M BDOS, change the definition of the 'ZRD15' variable to FALSE and reassemble the file. For you purists using pre-1.5 ZRDOS, this will delete a little extraneous code (not enough for another directory entry) and give you the previously-mentioned small (like milliseconds) speedup. Sorry for the inconvenience, but I think most Z-system users have some version of ZRDOS, so I have provided the version that will best fit the largest number of users.