1ƒSD68K DQCSD REL&ž°SD SQ <9YŠENDJOB S u™CRLF S xDCOUT S |™¶SORT S €)žMD5DC S �/lOPTSCN S —cåOPTSET S ­ œáMAKEFCB S ¸~CAPS S ÍH¯LOSD SUBÓØXÿÿvÿtîSD68K.DOCoßÿ  šÿ–ÿ‹ÿžÿõÿ�ÿŒÿ“ÿòÿ‘ÿ �ÿ›ÿ!oÿ"$#™ÿ%'&(�ÿ’ÿ)+*,œÿ-Âÿ/._ÿ01—ÿŠÿ¬ÿ32»ÿÑÿ4†ÿØÿ576˜ÿ89:Òÿ;ÿ<>=@?ABDCE�ÿúÿF ÿˆÿHGJIK ÿ¾ÿ¼ÿMÙÿLN¹ÿOrÿíÿPºÿ¶ÿÿQRUSWXVTÉÿYÿ«ÿÿ²ÿSÿÇÿÅÿ‰ÿ\Z³ÿ[Öÿÿ×ÿ‡ÿ]”ÿÐÿÍÿåÿ°ÿ­ÿ¯ÿÁÿÓÿ_ûÿ`^cabdÿÿ4ÿÿQÿ´ÿÕÿÿ½ÿ…ÿëÿùÿÜÿe¤ÿ¢ÿÿ ÿhÀÿjgfiklnmªÿÌÿÿÿXÿBÿËÿÛÿÿþ¦ÿÿ§ÿÎÿ©ÿ±ÿãÿ;ÿ,ÿµÿDÿuÿçÿéÿ·ÿüÿêÿ#1_lEØËíQª›ÏHLüÄûxßSnÓ|Fbòk�ïƒùä“O>ùŒD[…_‹D§�ÅoýÚË(–u!ÚXV\%J…ͬæ3mÕ4G¬šÄpVóÉ'Ÿ?má¸Á¯ˆ¥n¥¾)ý[áVê .ÌÜÔrKü·Ûœ“^Öß–`(7µ‹:L´Ûx5·ÛœÔ½Õ=R½SpëW£óLŒ÷kIª£ÂíjæZ·sÀ¢ŽôÀœ‡ÛpûÆ+Œƒ7¢D©fö…º.¯„â¡"nH[¸ySÛký¡˜[ Q«²¨ÃnòŘ[©oJÿV¸ÁáÔ‚èÆ{n«+Œƒ7óm°Qù¸©Ò�máëã}šskòÏ¢Nr™<â<£òí×äöâ9¸ëö N1 v…˜C—´»×§™‚­ "}¡”â!m-ê”ú¦ôOܾ¶,Üâ ó€b•ã¡ë°Û|·D¹°xfÿòS¥ ŠwŠE�äöâÁ¯ˆ¥š¥ªÜ·m/‹‡´eÉíųo’ÜPùuçÙ-QnLŒ§–Ûsu+‹:ö ]:z(PPñà×»0-¯‚­ öK±.Á¶ i˼)zèr`_[Æäy\{(^Ôyn«CÚ2*Z©oJÿ¤Sp£^T¼äó;ÞTzñ®ñÔŽI/jÀÝ`Ù ~½ ÓòR,êüÀ†´ï"íz¿~½•(¾óÉGØlƒ_o%J…“> à·¨³ýžO>#§ Þà×Zz¤z¤—n·¼–â]©ÞòZŠÜå†*[Î'Ÿ�vmᆴ…› '€‰ñ¨úÛEûÚ²_Uî–(7|•û�‡[y» \ãE��æ¥æßùä3z¤z¤—nÏ4×ñö5[aì¼{¤úzé¶ùŒ€â]©¾™æ�–¾[¢Ü0í&ÚmìCÚw!,!ÞýÆŽÁ›ÏHô#Õ¤]ûÂGª7&}Hû©é¥Ûï|òEn‰rC•Ž3ÍIß_•Ž»Ïn‰rCŸ}ê[«„Ô�ö]Kó‰~®N>îÑ7üzoü´wß-QnèK~{TŸ Ò®ó‰nT()�5†7åH»Ž¿«×½üú£×ö€‚ôüÛt>#Ñ¥vÛ�9µ½¿F¤±§þÔšüú§Ž•Œ Þ콬ÑúF>#Ñ6ýõ·Ñõ’ßÕug“ÐÑ?Û}†´¯iì¹:Ÿ‘hû&åG¡Jl(H¯0v ÞHÌwÓÁ¯w>ùŒDñWa»%Ê }_;X>ùŒ(‹¨™©þð¦RÕ2&½¬Ÿo·ù©–uQí¼ Ǥ—õ·×è펞4òIóHõÞ,Ÿ·]N)hDY$n¦9¼©Tõ1éeýíÝg�T_ã©?ÕkÂüùPÅ|FÒ`¨há�I/ëçÛSª7S°ÅÕŸêûÚÁòÉg¤5x¦¹ÞîèÉ©žÏHk±fšÓþÙn¨í|FZ+˜iîk›pgùä“�uÓŸ”Õûî3ð_… ~;Iòë`ùä“Ï~�XÙ4W¥ã~­{¤zß ³!­=`>#éÌŸU“^t?°1ÑnãÕíw>ùŒ€à×T¼UŒØ4×âû}ŸzÁý�O># ø5ôŽo#†5ÍUé¸_ë©ÞwÃlHk˜ÏH:óçCǤÝlL´Ûxu;Ÿ‘t  â5Ð;ª·Ò–=R=Ÿ‘ôðç“Ï~-/·U…E¾¬ß¯þÅ‹3ja ¿[Á3ÍUé¸_ë©ÞwÃlHk˜ÏH:óçCǤÝlL´Ûxu;Ÿ‘t  =¤}�T_ø‰¯Q ª°?Ÿ‘ôÚ«Žè:þ/ëFüýÀ†íÒ—ÏHzãUÀßxoi!,!PjÕ‡7Ÿ‘ôGªe�8£Öð»…Ü ØSªç3’”ZGõ1éeýmgñ÷Ëg$½·;z²Gª÷I°+Äœ½óÉ'ŸüZ¼8£Öð»…¼U…E¾¬ß¯þµ>1Œi®ÿÄ÷û>õ‚{>ùäó’^ÖßÞsuò±ïkË'ŸPœT_ø‰÷ÝPÛ3Í)-üÄûJ׫<Ÿ|F@qR}á'Þ÷ÛLs­[ø‰÷•®W%x>#Ê]�v½.ª}Wç3¢ü©?ÕóÉg'Õ~â}?°Í4§îÂO¼¯t½*ÁóQN½H¯‹jß,ŸåOý©žO>iˆá­+r@©Ìþšõw>ùŒ€â]©¾™æ�–¾[¢Ü0í&ÚmìCÚw!,!ÞýÆŽÁ›ÏHô#Õ¤]ûÂGª7&}Hû©é¥Ûï|òEn‰rC•Ž3ÍIß_•Ž»Ïn‰rCŸ}ê[«„Ô�ö]Kó‰~®N>`žlÌ0ŒBy By #ü  "< pNBpNBH€3À†#ï~ /€�"<ž$<žBƒ(<ÂüÿÂN¹”J�gdü?ª"<žpNB` "<žpNB ÿgF€ëX€ r @"y J9£f( fÈØQÉÿüèRI#É Ry NùzJy g*"<Œ3ù �N¹ð | 2y aNùÈ"<æp NBNùÈ9 ÿg@HçÀ | –p üQÈÿø"<ÂpNB"<ÂpNB nD"< –pNBLß9žgH�SApNB"< pNB9 H€3Àˆ9 H€3ÀŠJ9žg 29†pNB3ü 9¡Ò9Ÿ g RH�“y By By By By ( Bÿ69ˆÔCFCÄCHÂæšÕy BC( ÄyŠgCSB`ö×y p $H&H×ü·fQÈÿú JSIÐü`¨Ry 49 Õy &| J6Ø6Ø6Ø6ØRK˜ÓŸ›˜Ó ›˜Ó¡› 9¡g 29 HÁN¹\&@ü 9Ÿg:&ü W‹(|Ÿg¼RR‹g¼SR‹g¼AR‹ü ü ü ü$"9�#Á J"<HçÀa*Lß49 RB3 ´y f By a‚ÐüSI fþžJy gaj9žf29†RASA?p.,9 –NB"9 9 ÿg "9 –#Æ –æ™ <nAÿN¹\0AÀ@p "<ÿNB" < N¹\ù Hù I <T29 HÁN¹\ <^29 N¹\"<6a89 ÿg*9 – g"<ÂpNBJfl"<ÂpNB n\Nu9 ÿfp NBNu"A $ga`ôNuHçÀ y‚À#È‚±ü gLßNu#ü –‚"<ÂpNBJg"<ôp NB`* | –p üQÈÿø`ÀHçÀ"<2aÿxLßNuB@NB/r N¹âr N¹â"NuHçÀpNBLßNuHçÿþ"A$Q<) Fo@ÌéÜŠ*Fšé* &JÖé,iN–o*J,K6)SCÖÄQËÿøÖé·ÆmÜÔéµÅmÎLßÿNuHç 0µ‹fµ‹fµ‹Lß NuHç`@"@ZItHÁ‚ü HAÒ|0HAQÊÿît 0fü QÊÿòZ@LßNu// @ g° gð -gz $gr *g gB Aml Znf"g S€N¹’ @J�f®"<¾`X"g N¹’ @J�f”"<Ñ`>"g N¹’ @J�fÿz"<í`" "N¹Z @J�g`ÿ^SˆÐ¹"<¦p NBB—"  _NuHç@À @ Am" Zn"AJfB�`´gT‰`ðR‰ Rˆ`Ö LßNuHçà$A"A @pBYQÈÿü"A"¼ #| #| B (:f(N¹ˆ@�Tˆ  nRHRIr ü?QÉÿú`�R‰pN¹ˆ 0m ÁQÈÿî` *g ?gê .g  nV`Xü?QÈÿú`æ"JÒü pN¹ˆ 0mÁQÈÿî  n$`& ?gê *f ü?QÈÿú`à g  gB�`" SH LßNu am zn_Nu????????????DIRLIST LIS No files $ Error writing output file. $xxxxxxxx.xxxnnnnn ars $ $ Drive x, user nn, containsnnnnnk in nnnnn files withnnnnnk free. $ – HFKS Illegal option [x] $ Bad file spec. $ Illegal input re-direct $ Illegal output re-diredt $endjob¢Ècrlf¢Ìcout¢âsort¢ðcmpa12¢Hmd5dc¢\optscn¢”optset¢Zmakefcb¢’caps¢ˆvÿšSD.SS öÿ ßÿšÿòÿõÿ‹ÿ�ÿ›ÿ“ÿ�ÿÕÿžÿ™ÿ�ÿŒÿ‘ÿÓÿ’ÿ –ÿÑÿœÿ!�ÿ"#Ïÿ‰ÿÎÿŠÿ$&%'Üÿ)(+*Åÿ,.-˜ÿ/0Íÿ×ÿÖÿÌÿ‡ÿ21ÔÿØÿ43ˆÿŽÿoÿ56”ÿ7Ûÿ8†ÿÒÿ9:…ÿÈÿ;<—ÿËÿ=¬ÿ>?•ÿA@ÂÿB»ÿûÿCüÿÇÿDFE°ÿÊÿ¼ÿ¹ÿGÆÿIH±ÿÉÿJ¾ÿ´ÿK«ÿ¶ÿÀÿ­ÿMLúÿNÐÿ³ÿ¢ÿO¯ÿ¤ÿQPªÿRºÿ²ÿ÷ÿøÿÿþµÿóÿ½ÿùÿÁÿ%íF¤¸!nÝŠ»›qév�Ý5ß/åýRÞ/H±û±7�n×Ù]3V¬o]¯ìýRÞ/i«{Í÷KAÚê½2S¡á4V$öýû¥ mõôu’b»ó~)ï—‚´Õ9zp#×x…»ðš‘¾NRlwÞ/åýR�¶:Û“8b3òtzš_!åÐËRCŽÜÛ ·{¬$º•‘¾[­Þ/åýRÞ/z&â:d‹Áû¥+Ö‰8¡v?6c’n×Ù]3Î=RºÝ v�ITj8ÒŒ¾_ Ò/–ä¨Áû¥zlƪ˜Ñˆ°Ø.ÎJ ·;¼_Êû¥)nˆw¤™ZìZ�Xñ[{9d‹FÔY�Xq�¼“ãH3µØµï—ò~)ÀÐJëö~)H[Ý‘fj±+n»-¦©«“å�-b»p¤™Š³Ã[4¢ŽÍ÷Ky¿¤­¾—C¶hD�¸í¶hD�Ø.örÈ*”5»ŽÍ÷Ky¿¤ÝxKÏ¸í¶˜D-­j†#͵ªSÁIo±:·hšÜ÷KAÚjNŠ¢©Ž±p¤÷ýR�¶šƒ³ÚÒ¯•$³É}¿”÷KAÚ�·RÄm·gn±~¸1‰ZZÕ ¥©Ž±p¤™z¿”÷KAÚ�·V·Ýœ¹ÅúáÆ$jiU3iŠÜ´÷Ky¿¤­.ö±Aìå�-¢u‚UÍð×fž›±{([j¯ÇdT1ß/i7²ª‰²Ð"Ô±:c»¸n÷ b’«žÝi„Ýsß/åýR�vcŠâVЏ¥gÜZÑû¥ íÆ7Ä­z®èýR�vcŠB?…žqkEï—‚4�T[‹ÅºÛ�ÅYi¡*³p‰¸Ù‚¾_Êû¥ mõ�Gš©Å®¸í¶ØÉY’DÅP'瘈³c•Ž4‹^ÏJëï—‚´ÏÊ*âìÐ#¥Û Þ/å}P]Û¾ÁÄÔ»ýû º¶}ÃÕ›{T×¶o¸vrÞÕµíÔîç}P]Û¾ábK͵ïƒêÚö l¦<¯÷Aumû†½u‰÷ËûW‡ 'Èï€Wí�T�E·“tñ~s°áù”hDX8³ù~yôØýy¿A©�Ü´÷ËûjpµŽãÛ%PâjV{œê›ÅµqÞÇÕ:i—8@‰«YíáH³¸v"Îû`;3ÚÀŸê›ÉãÛrúûå}°�mà•]^Î%”�¸AÃWË&âXlg^{{9Ç÷qz]Àkß/ïƒíÌÀëçË9¾�Óë^ ”ÐÙ‰+éÝĉITjðïÃîÂßÛ™aŽòJúT©ï—÷Ávf´!§®âJ¿T�½¶3£ é8uWÎñ}Ô9 màõWÈåßÛ™Ñ~/çø&gþ>ØÎŒ6ðîòrjßÇÕ:m˜w@ ±ƒˆ%9ÑíÖ$Ý®ó>ØÎŒ6ð;9îòr¦C‰�œ%9á.ÿ>ØÎŒzðúÎÉ�wy”Pvâì˜æjÒÎûЫ:örÔ%€êª"®ÍX3ö>Ž:´aæïÃÛ0LL½Û%ˆ ë}wn'bʨ~÷ó>ØÎŒzðëéY—îòk¹%tv¢¶vLõ~y¿¼_ tv‘®NÜ�þô†‰Ó5ß/ïƒíÌhï./gþ>ØÎ |¾JÎñ}œ^ðÚ÷á{…îˆû“¿_Þ/:;!ìþÄ éOo˜8]óýò¾î»?°�màÝååÌßÛ™�ÏW�s|§×¼ö}Ý÷'àb ¡¼¾srŽ@‰k¥]©áv�VÕyÞ†1Õîçýò>ª˜„6ðwrŽ@‰k³%9Ëéqv˜8]ó}ôÝÀ§,çø>꜄6ðÊ.¿–Ë9¾¶3Ÿçræ@ k–™ˆkeíõ:ÖU¢2{lgFæ(ë”XZ¢Âî�‰ó>ØÎŒ6ß–ÓeÍßÇQ‡z(תî}xaÐq´@‰¡*ŽŠÚZ8ÒL½Ô¿JjÌ©#%Ž©JScáÉy^tGØýJ¨T²q¡4Õ1Ž4{_wÄýÑÀvfÔƒSGîšäÔœ»ö>¦ï3—º#î�%ÚÞK¸ÝÑf!*³÷Ëûº#îÏÝlgF=´œ:r%§æÜ5”XȕɊܴ÷QçŸËš¿¶3£ 5—Ç·åô÷QçŸËãÛ%ÎûÐË莰ûó~y¿¨ÝOœê›½_ÞŸj÷3x¿¼�£Žo—8@‰k¥]©ávcËÑŒIº]gwÍ÷ámb;Ò€KKX\ͪx¿¼¶3£ ¼Rþø&gþ>ØÎŒáøv‰#•òÇ·µtïC¯êP» „Úý„¨ÌÔûå}°�màOõÍdßÛ™áøv‰#kþ>ôªŽ¥ßÞ‡^¶ÀÄÔ»ýûåýR v8ÒL…Û‰˜ï—÷Åv¤ Àvf´�gb;ÒäÌQbéDœ`¦TÕÙû`;³aðË9¾�Óë^û>ô²&¦Þíß/ï—÷KÁÒ‰8qªoö~y¿«ã¶8Õ7‹eq¬¿_€Õæq[ð±]˜8�˜z¿¼¿ôãÛà}°�õØÉq——3[õàõ�“3Þ†±ôãÛ”;vr–ä„#ÍB-v½_ÞÛ™1ÚPÇ[5—·8u÷}°�màwr|âdßÛ™�¿ËåßßËvùlgFxý¼æ5¯y•œ:r×"J\ÍjŸ8gý}Lß+æ(÷²]þ>ØÎŒ6ð;9îòræïƒíÌÀëçwrŽ@‰iÍŽ…ÝuˆÐ…#ÍÞÇéu¯}lgFø�wy9ó÷ÁvfàõóÛË9%XMµ6Ž4{§×¼ö}\l!Ôƒ¿“s|^w æb½%¬÷Ýc/&ˆÐ…#ÍÞÛ™Ñ~'Ç'NÎü}°�xý¼Ê9¾�Óë^ ”Pvb²gGJ‘>�ªz¾¶3c´�SWq×doÕüýòþÒ�oãlgF=ÜååÌ߇·a,ýø–%ˆ‹i®&íÄì$³¸Vneâ}Øý¡C˜ùûP‰ŸË™¿¶3¯?šœãû8½.àµ@ eÍ®“¨Ô÷—~|Ë`;3ÚÀ+»¼œùû`;3ðú¹“s|§×¼(¡³“¨ÔXj¯ÌŽõ8Õ7{lgF=”]~íNÎ%tv·}¥«*õ}Øý¡C˜ãû`;3ÌQúÆÞÛ™Qe—_K'çø>ìþÐ!Ìñ}°�æ(íž½�£õp—Þ†±ôã›(1ÍÕ¤b‡0›qvtSvÞÛ™áJúT©ræïƒíÌÀë�&çø>N¯ x-P¢Û-eÍ®Ó\MÚyéÇ7íàýò>ØÎ üí¥[(áH3‹õhDØû`;3ê‘êZÕÉ™£ÄµÒ®Ôp»Ç^ÙB½�:'õp®U�œùû¸ØB¨?Ê™¿oÃXúñm „Ø1‰ZZÕŒ½²…zuÎaêÁçræïÃîÂÌ߇J®Öá®�ˆó~yéâþ pµ§ÈMJ8ÒL…"7íý¥‹û3ÀvfÔ#×rêÈ•S‹N‘›v›S䦭u».qÞG“€×GçäÔ¾¶3ƒoLÎ; „oûJ VUj(rÓÞG�óNNíûû`Þ½�*&æ�œÚ÷a÷‡6Líûè»ÓþNN-ÒV/qm‘Y?qv¤ÞòšÇÔû¨sbj¥S䦽�«uÌ»÷ÁvfÔ#Ï9uäÊ©E »?&N°ªRßGvÏäÔ¾¿tq?ŽxÆÒÅý˜%ˆ 3¶ »?&Nì̺k{H½�:'Ÿß^λ÷¡? >—Sû>|¯Xº¸Ç÷—.îÇ|€:'æ�tŠÜ4”¨sÆÎ¬»¶‡ÞÛ™ ƒÏG9G ÄµÙR»…#ÍBTfê}°�m¨£¬Ú÷Ávf´¡Ž²Þ½�:'màót²Þ½¿tqò.¶0êÁ©#wMrêwí}xaXº¸?Z q!v°z®•ïcú^1G¹tqr”h{/áv�<�keíõ:ÖÕû`;3ÚPµ²Ž@‰nêìn±l"Žõ8;Üå߇Jü0ø\Ö(±…E3¥ÂÄéšï£Î >O'ë”`;³8;„ÝŸp—¾W,]ÜŸñýòþÒÅýÑPçŸKwíD”ð [‘fqíDœàˆÊLÅÜâ«çZÉ}lg§ÈM“S‹gEnÞvöQäæšSäæû¨sbjåÙG‘›ïƒíÌ*mà—î'ëÝû`;3ÚPµ²Ž@‰nêìn±l"Žõ8;ÜåßÛ™�SGîšäÔ;îÚû`;3pêÈ]“œzÇ]{lgN¹k’Sï¸kïƒíÌÀ©#wMrêwí}Ô9‡Áç²Þ½¶3£œ:r×$§ÞqßÛ™QN½ãJwùµü}ø«uêÁ¯’œzÇ]{lgF=8uä®IN½ã¾¶3£œzÇ•îòkÚ÷á¯Ö©¿Jrêwí}°�õàÔ‘»&9õŽû>ØÎŒzpêWºË¯Ý½µN=øU’Sï¸kïãb ¡ü(S]«º÷ámK÷ç(A\(rÓBìCU›ïƒíÌhC½“sJøÄ9ëïƒíÌà¹iræ(¡ÈM ""×®^óXt»Ôû°ûCfþ>ôª6SžPbINˆ„yëADøÄ9ëïƒíÌhÃe½{lgF=x}í(9õŽ»†uÎð­ŠÔ÷ËûK÷çn€‹-„zð£t®UJb‡kU§b¨Šcó}xÆÒÅýY” .ÄתNÅPÇæûå}°�mà×#íÆuÉ©wÜ5”Pvm1÷*R£Š®U�z*ñô�¿“õî}°�màÝå×rYÓ¡„#]�°ûCãZYûûðGêÁ¯’œšŽ»†×J»R£[�·¶hšáZÕ½oÃXºk:-PBìÅd�£¢k`è}°�õà×Ó».9õŽûþÒ]Ói¨sÓ>—õî}ø£õàWINMÇ]{Þ†±t×tw@ ±OÔPšê Gš…‘³Òúû`;3êÁ¯§X—œzÇ}é®éî¨sÓ>—õî}ø£õàWINMÇ}Þ†±t×té€+«ë'¼™ˆÚ¯•$³ù>ØÎŒzðë«]—œzÇ}é®éÒ Pç¦ |.ëÝû`;3êÁ¯ÇºäÔ;îÚû`;3êÁ¯ÇºäÔ;îÚûåýò~yéâþ¬€į́¯¯%§Þq×P¢ÎŽˆÚ·*RßÛ™Q^_›Nrêw %꜡Ç:#¢žÝßۙц¥ûÄ­iåÌßG“Ð^•[åV¹UNÎ%®fµ‡kU§Þۙц™Ë¥ûÄ­iß/ïƒíÌhCÕÊ:%º©³»Å²‰8Ö£ê*ïƒíÌh¿tŸ89s”X:'i¢2{lgÆhCoÕ\ÞâÔUÜ÷¡Wu¨¹“”X:'Î=RºÝ vGš½¶3c´�SWq×doÕü}°�„kDÈ©E‰zÂļµÝ­F„¥ç}Ô9‡ÁçrjßÛ™aj¥p�ˆ÷q±niDÈ©}^–.îÏ @ Ý��vb {¿¼�«u׈JÔ–’߇WWoîþýòþÒÅýYa€:'ø<�¬#PÂ'l‰³CØý G𽕸að¹¬9P¢ž01c»p¤™JÏû`;3ÚPs9Ç÷á…aéâþ%Ä>¡içýò>Ž:®”¨'LÌØ.ö>¼ céâþh ”Ð4%cn±~B˜Í¸zsïÃ«Ž«7w”ØÂ¢UuâêÑÜûåý¥‹û£ñlgF=ÜååÌ߇†Å±(A\ˆ}bš«I;ïƒíÌp%}ªT9ó÷QçŸË™¿¿8– ? >—3lg†™Ë[œºŠ‹ªf“¨Ô÷Ávfàõµ&çø>ØÎŒ6ìäøÄÉy{”P5³ØÉñ‰ Gº:1´û|§×¼(¡³®›…ZêeïƒíÌhƒ²ËË™%\7 e×Ù]½¶3£;9îòrŽïãb ¡¼¾srŽïÃÛ0Ç´@‰�œ%9qvè‘ÒíïƒíÌhÃNŽOœœ9Jœ•®›…Zêe‘Õ–X UC�œcâ}°�m˜·—;9>q(qvìäøÄÉû„²ËÓ÷Ç´ôÝi'g”¸¶È¬Ÿ8;Rßۙў¹nrŽï£ŠIÀë¯ri«Ë™¿½ªƒÍ”ç”pÝ,ÔR/{¿¼¶3§®â®É9¾�:'¡üúj×åßÛ™Q�9J6{"Pbv’Yðï—÷Ávfàõµ£œãû`;3ÚÀë;'gþ>N¯ x-PBg'e=D¼õ÷Ávf´aŽræïƒíÌh¯ìòrŽïC¯ê`3åy%®-2ë'ÎŽc÷ç}°�õPvùµ;ÉÕJT1ƒíÌ¢Uuâ í˜DGŽzlgF=”]~-�d‰êb-¿¼¶3£ ìþІ™¿½ªƒÍ”ç”8ûÔŽ4 EnÚûå}°�mà™»Ä‘s|lgGÚ%ŽœùûЫ:ØLy^@‰³OmÁÇváH3õ~ylgFx“É™£ÄÒ‰8ab¡ ¦tïC¯êPs'(±t"Nœz¤t»AìŽ4{lgF=vrÜååßÇÅB=x}çä߇·a,Ž­”Ð#¥Û b'gIŽ ±céÛ7cïƒį́ÇNŽOœœùû¸ØB¨¯ŸW9ó÷ám‹c·JøÄ9ëAT[Žæû`;3ÚÀïä¸ËË™¿¶3¯Ÿ§,çø>N¯ xíû8êP�9%†:9›¦Òô¼/ j.Ö;PBìÅÞ_»ýlgFø�wy9ó÷ÁvfàõóQÎñ}œ^ðZ ÄÕ¶²p¤Ùû¸ØB¨'çø>¼î@ÍÅzJXï»ÇÕ¶"BŽ4{ql…Áûå}ô£Þ/ï—÷ÕÜÉ íÆK'â熜j�g‡)Ýn»‡#ÍÞÛ™Q��wy9Ç÷q±…P^ß99Ç÷á…AÍ�œ (!ö‰k µ›ÅNÎ’œ÷ÁvfÃà5–s|§×¼ö}ô£Þ/﫹“s �vc‰¡NŽQqvÔp¤Ùû`;3Ú0sYs Ä²‰8Öãì`J÷¾šû\ùlgF=85ç®É9¢„ÎN\+k[õà×õ×å߇·a¨¹“s” .LÌØ.ÔéDèÞ‡Wj.;9@‰%9q­¬=ˆˆ9Rÿ>|¯PsŸ+¿¼¯æNÎýý¨÷Ëûj.;9¤ÝXb¨“cq­¬=ˆˆ9Rg‡#ÍÞÛ™1ÚPÇ[5—·8u÷}°�mØÉñn‘u|lgF=æ(9u䮽¶3£ u”;9Þ-ï—÷q±¥Ò~'Ç'n-×® ëø>¼ CÍE ”01c»ð‰sÖßWs¹€íÌmàÔUÜ5YÇ[5ý¨÷Ëûj.ÚÒn,1Ôɱð‰sÖßÛ™Ñ~'Ç'Nîäx·¼¶3£ üNŽ»¼œùû`;³aðúyÊrŽ@‰¡NŽ…²áÄÄ!µ½�Óë^û>Ž:ÔcŽïÃÛ0Ô\½g urì}5ë}¶3£ ¼õ>ääÌQÂzß=†:9Dè‘fïƒí̆Ák,çø>N¯ xíûð½ÂÄÔ»ýûå}5—»Òn,q5«=„ …Oœ³þ>ØÎŒ6ð;9>q²ŽïƒíÌÀßårŽï«¹¤€íÌh¯Ÿ×¼æ5¯’SGîÚû˜¾WÌQª¹¤{¾W¨¹Ü¿_Þ/ï_½¹ûØÎŒÑ†:Þª¹¼Å©«¸ïƒíÌhuuºœùûðªCÍ�œ÷ÁvfŒ6pê*㭚¿�~Ôûåýò>謧¾ï.?�õåzzÒ4ʺå(Ç÷AçE=F9ÊQŽr”£å(G9ÊQŽr”£åø>輨Ç(G9Êñý�wù輨Ç(×oHz5˜þé ¦?źå(G9¾:/ê1ÊQŽr”£å(G9ÊQŽr”£å(Ç÷AçE=F9ÊQŽï—÷™ØŽ´輨ÇÕesrýv;i¦ÖåÕesr]]Žï[ïCn:/êquÙœ\�аÞw�¡NºØÉY’Ž4£ëòê²9¹®¿þ~yé>qÐyцõû´ÕDïÓViЍ]EÚêúë(áH³•ÙûK÷Î`à –î·¦ñûåý««Ó ó¢W—ÍÉuýu9¾ob²輨Çz¤ÝxC'™Å:J˜˜Dè"Å ÁL©ª³÷Ù쉀΋z¬ßËH”õXŸ%ª‹輨Ǻ2®-N%B­¿Ïœº9�õXiJ "bý}æ.q ó¢ë"MCáH3Cä¬\Ÿ¹nÐyQ�u‘¦¡ÔpÝŒ®Ë«Ëæäºþúûåýò¾_ªÎ ó¢ #PÂWe±T�E�³›Rïïäx· @çEvr|â€;9KrÂ'ÎY�eq¬¿%}ªÔè¼èF Ä•ônâÄ4W“vb•ú¾ol:/:„(áÛ¾RƒU•ŠÜ´÷íž @çE‡0%ìþ˜8ÁªJ}¿¼¯”?¾ @çENõÍ€êÔ~b»èví>Õû ó¢CÈ�"aÞzlݮݧzt^ty: „"7-¶‹n×îS½:/Úp±¥æZ ÄµÙR»EU—‰I„î}Ðyцñ}ÐyQ�ñ}ÐyQ�ñýò~)ØË![¨8Õ7{¿¼¿—s|€Î‹z¬ë¹.G „ž­êÔû ó¢ë+Z—9PB‘›ö>輨ÇzŠu9%”¦:ÆÂ‘fê}ÐyQ�QŽ@‰c�QÙâ}çZÕ @m8Á^Îñm-G ת.–Nĉ½²Åû©®UÝÔ†8תnM ”Pä¦ÅÒ‰8±—C¶x_¹VuPN�êZÕ­i�JScáH³ØË![¼_Þ/ïƒz¥Þ?¾]â @§¢CÈ�§úfqíDœ÷i—8Щèr „#ÍâÚ‰8ï»k'â€ÚpGÚ%ÎûniD @§¢CÈ�"aÞzlŽ4S±X�F„½/\#b:B” óÖc»p¤™Š+éÝÄiš±E4"ì}§ÈM€NE‡�%¹i±]\Iï&N8Òìý³�"7 SÑ!ä@‰³Om¡ÈM‹í¢¶Ž4Sï+»üt*Úp§J(»Îîá笿¿“ã7�Š6Üi�;9KrÂ'ÎYÿø¶œ>�Š6ä@‰S}³X6Çúû§úfЩhC~7¦­”¨×Ij GšÅ©¾YprmxÍcJ&N×ä¾_Þ/˜ïk4(G9Êñý�wù輨Ç(×oHz5˜þé ¦?źå(G9¾:/ê1ÊQŽr”£å(G9ÊQŽr”£å(Ç÷AçE=F9ÊQŽï—÷™ØŽ´輨ÇÕesrý**** ENDJOB -- End Current Job (Process) ** ** Function: ** Terminate the current process by performing a system reset ** Inputs: -none- ** Outputs: N/A ** Registes affected: N/A ** Routines called: -none- ** Special error conditions: -none- * .globl endjob .text endjob: clr d0 trap #2 .end **** CRLF Output ** ** Function: ** Print and on CON: ** Inputs: -none- ** Outputs: -none- ** Registers affected: -none- ** Routines called: COUT ** Special error conditions: -none- * .globl crlf .globl cout .text crlf: move.l d1,-(a7) * save d1 moveq #$0d,d1 jsr cout * moveq #$0a,d1 jsr cout * move.l (a7)+,d1 * restore d1 rts .end **** COUT -- Console Output ** ** Function: ** Output character in D1.B to CON: ** Inputs: D1.B == character to output ** Outputs: -none- (character is output) ** Registers affected: -none- ** Routines called: -none- ** Special error conditions: -none- * .globl cout .text cout: movem.l d0-d1,-(a7) * save d0 and d1 moveq #2,d0 trap #2 * output character movem.l (a7)+,d0-d1 rts .end **** SORT -- Sort Array of Strings ** ** Function: ** SORT sorts the set of fixed length records according to ** the control information in the Sort Specification Block (SSB) ** pointed to by D1. ** Inputs: D1.L points to SSB ** Outputs: -none- (records sorted) ** Registers affected: -none- ** Routines called: compare routine (SSB) ** Special Error Conditions: -none- ** ** SSB Format: ** ** Long: starting address of first record ** Word: number of records to sort ** Word: Size of each record ** Long: Address of compare routine ** Long: -reserved- * .globl sort .globl cmpa12 .text sort: movem.l d0-d7/a0-a6,-(a7) * save registers move.l d1,a1 * ptr to ssb move.l (a1),a2 * start of records move 4(a1),d6 * number of records cmpi #1,d6 ble sortx * if .le. 1 record mulu 6(a1),d6 * lba+1; inner loop limit add.l a2,d6 move.l d6,a5 sub 6(a1),a5 * (lba+1)-recsize move.l a5,d5 * outer loop limit * begin inner loop sort1: move.l a2,a3 add 6(a1),a3 * compare sort2: move.l 8(a1),a6 * compare routine jsr (a6) ble sort4 * no need to swap * swap entries move.l a2,a5 * item 1 move.l a3,a6 * item 2 move 6(a1),d3 * length in bytes subq #1,d3 sort3: move.b (a5),d4 * swap bytes move.b (a6),(a5)+ move.b d4,(a6)+ dbra d3,sort3 * loop for all of entry * end of inner loop sort4: add 6(a1),a3 cmpa.l d6,a3 blt sort2 * end of outer loop add 6(a1),a2 cmpa.l d5,a2 blt sort1 * sortx: movem.l (a7)+,d0-d7/a0-a6 rts * *** cmpa12 -- compare 12 bytes ascending (on word boundary) * cmpa12: movem.l d2/a2-a3,-(a7) * save registers cmpm.l (a3)+,(a2)+ bne cmpx * not equal cmpm.l (a3)+,(a2)+ bne cmpx * not equal cmpm.l (a3)+,(a2)+ cmpx: movem.l (a7)+,d2/a2-a3 rts * .end **** MD5DC -- convert binary value to decimal string ** ** Function: ** Store the contents of D1.W as 5 decimal characters in memory ** location (5 bytes) pointed to by D0.L ** Inputs: D0.L == pointer to 5-byte buffer ** D1.W == value to convert ** Outputs: D0.L == pointer to byte following buffer ** Registers affected: D0.L ** Routines called: -none- ** Special error conditions: -none- * .globl md5dc .text md5dc: movem.l d1-d2/a1,-(a7) * save registers move.l d0,a1 addq #5,a1 moveq #4,d2 md5dc1: ext.l d1 * clear upper divu #10,d1 * get last digit swap d1 add #$30,d1 * convert to ascii move.b d1,-(a1) * and store swap d1 dbra d2,md5dc1 * loop for 5 digits * moveq #3,d2 * get rid of leading zeros md5dc2: move.b (a1),d1 cmpi.b #$30,d1 bne md5dc3 * if not ZERO move.b #$20,(a1)+ * change to blank dbra d2,md5dc2 * md5dc3: addq #5,d0 movem.l (a7)+,d1-d2/a1 rts * .end **** OPTSCN -- options scanner ** ** Function: ** Scan command line for options and set flags in option table ** Inputs: D0.l == pointer to command line (assumed capitalized) ** D1.l == pointer to options table ** D2.l == pointer to input FCB (0 indicates none) ** D3.l == pointer to output FCB (0 indicates none) ** Outputs: D0.l == pointer to end of parsed command line (+1) ** Registers affected: D0.l, ( options table ) ** Routines called: OPTSET, MAKEFCB ** Special error conditions: D1.l=0 implies error in options. ** Error msg printed to CON: if: ** o bad delimiter on line ** o bad file name ** o input re-direct not allowed ** o output re-direct not allowed * ** last mod: 14feb85 jmk /make ptr into longword/ * * .globl optscn .globl optset .globl makefcb .text optscn: move.l a0,-(a7) move.l d1,-(a7) move.l d0,a0 * ptr to line * optsc1: move.b (a0)+,d0 cmpi.b #0,d0 beq optscx * end of line cmpi.b #' ',d0 beq optsc1 * ignore blanks cmpi.b #'-',d0 beq optsco * option flag cmpi.b #'$',d0 beq optsco * alternate option flag cmpi.b #'*',d0 * test for wildcard beq optsc2 * treat as A-Z (filespec) cmpi.b #'<',d0 beq optinr * input re-direct cmpi.b #'>',d0 beq optotr * output re-direct cmpi.b #'A',d0 blt opterm * bad character cmpi.b #'Z',d0 bgt opterm * bad character * ** it's a file name * optsc2: move.l d2,d1 * file FCB beq optfne * hey, not legal move.l a0,d0 subq.l #1,d0 * pointer to beginning of name jsr makefcb * make file name into FCB move.l d0,a0 tst.l d1 bne optsc1 * no problem optfne: move.l #bdfnm,d1 bra opter1 * * optinr: move.l d3,d1 * ptr to input fcb beq optie * hey, not legal move.l a0,d0 jsr makefcb move.l d0,a0 tst.l d1 bne optsc1 * no problem optie: move.l #bdinf,d1 bra opter1 * * optotr: move.l d4,d1 * prt to output fcb beq optoe * hey, not legal move.l a0,d0 jsr makefcb move.l d0,a0 tst.l d1 bne optsc1 * no problem optoe: move.l #bdotf,d1 bra opter1 * * optsco: move.l a0,d0 * option pointer move.l (a7),d1 * table pointer jsr optset move.l d0,a0 tst.l d1 beq opterr * if bad option bra optsc1 * * opterm: subq.l #1,a0 * point to bad character opterr: * A0.L points to bad option move.b (a0),optbd move.l #optdm,d1 opter1: moveq #9,d0 trap #2 * print error msg clr.l (a7) * return error * optscx: move.l (a7)+,d1 move.l a0,d0 * pointer to end of line move.l (a7)+,a0 rts * * .data cr: .equ 13 lf: .equ 10 * optdm: .dc.b ' Illegal option [x]',cr,lf,'$' optbd: .equ optdm+19 * bdfnm: .dc.b ' Bad file spec.',cr,lf,'$' bdinf: .dc.b ' Illegal input re-direct',cr,lf,'$' bdotf: .dc.b ' Illegal output re-diredt',cr,lf,'$' * * .end **** OPTSET -- option set ** ** Function: ** Set options in option table according to options in command ** line. Terminate at first delimiter (i.e. not A-Z) ** Inputs: D0.l == pointer to first option ** D1.l == pointer to table ** Outputs: D0.l == pointer to delimiter ** Registers affected: D0.l, (table) ** Routines called: -none- ** Special error conditions: D1.l=0 indicates error, then D0.l points ** to invalid option. ** ** Option table format: The options table consists of a series of ** byte pairs as "option letter, occurance value". ** i.e. ** .dc.b 'A',0 ** .dc.b 'B',0 ** etc, ** .dc.b 0,0 * terminator ** ** If an option is encountered, the least-significant bit of the ** occurance value is *TOGGLED*. ** * .globl optset .text optset: movem.l d1/a0-a1,-(a7) move.l d0,a0 * optst1: move.b (a0),d2 * get option cmpi.b #'A',d2 blt optstx * delimiter cmpi.b #'Z',d2 bgt optstx * delimiter move.l d1,a1 * table pointer optst2: tst.b (a1) bne optst3 * if not end of table clr.l d1 * bad option bra optstx * optst3: cmp.b (a1),d2 beq optst4 * bingo! addq.l #2,a1 bra optst2 * keep looking optst4: addq.l #1,a1 eori.b #1,(a1) * toggle value * addq.l #1,a0 * go to next character in line bra optst1 * optstx: move.l a0,d0 * pointer to err or delimiter movem.l (a7)+,d2/a0-a1 rts * .end **** makefcb -- make file control block ** ** Function: ** Convert text string into FCB. ** Inputs: D0.l == pointer to text string ** D1.l == pointer to FCB ** Outputs: D0.l == points to delimiter after file name ** Registers affected: D0.l, D1.l (if error), (FCB buffer) ** Routines called: CAPS ** Special error conditions: D1.l=0 implies error, then D0.l ** points to bad character. * ** last mod: 14feb85 jmk /fix eol check/ * * .globl makefcb .globl caps .text makefcb: movem.l a0-a2,-(a7) move.l d1,a2 move.l d1,a1 move.l d0,a0 moveq #7,d0 mkf1: clr (a1)+ * clear FCB dbra d0,mkf1 move.l d1,a1 move.l #' ',(a1) move.l #' ',4(a1) move.l #' ',8(a1) clr.b (a1) * cmpi.b #':',1(a0) bne mkf3 * if not disk drive # move.b (a0),d1 * get drive letter jsr caps subi.b #$40,d1 * convert to drive # (1-16) move.b d1,(a1) addq.l #2,a0 cmpi.b #' ',(a0) bgt mkf3 * more to file name addq #1,a0 * ptr to after delimiter addq #1,a1 * ptr to name in FCB move #10,d1 * special case of 'd:' with mkf2: move.b #'?',(a1)+ * no file name, must fill FCB dbra d1,mkf2 * with '?' wild cards bra mkx * mkf3: addq.l #1,a1 * start of file name moveq #7,d0 mkf4: move.b (a0)+,d1 * get char. of name jsr caps cmpi.b #'0',d1 blt mkf5 * if delimiter mkf4x: move.b d1,(a1)+ dbra d0,mkf4 * pick up to 8 chars. move.b (a0)+,d1 bra mkf6 * better be . or delimiter * mkf5: cmpi.b #'*',d1 beq mkf7 * wild card cmpi.b #'?',d1 beq mkf4x * treat ? as part of name mkf6: cmpi.b #'.',d1 beq mkf8 * end of fname cmpi.b #' ',d1 bgt mkerr * to many chars in fname bra mkx * finished * mkf7: * found '*' wild card move.b #'?',(a1)+ * file name with ? chars dbra d0,mkf7 move.b (a0)+,d1 bra mkf6 * better be . or delimiter * mkf8: move.l a2,a1 * now for file type add #9,a1 * point to extension in fcb moveq #2,d0 mkf9: move.b (a0)+,d1 * get char jsr caps cmpi.b #'0',d1 blt mkf10 * if delimiter of some type mkf9x: move.b d1,(a1)+ dbra d0,mkf9 * loop for up to 3 chars mkf9y: move.b (a0)+,d1 cmpi.b #' ',d1 bgt mkerr * extension too long bra mkx * mkf10: cmpi.b #'?',d1 beq mkf9x * treat ? as part of type cmpi.b #'*',d1 bne mkf12 * if not wild card mkf11: move.b #'?',(a1)+ * fill with '?' dbra d0,mkf11 bra mkf9y * better end here * mkf12: cmpi.b #0,d1 beq mkx * if end of cmd line cmpi.b #' ',d1 beq mkx * the end * mkerr: clr.l d1 * indicate error bra mkx1 * mkx: move.l a2,d1 * normal exit mkx1: subq #1,a0 move.l a0,d0 movem.l (a7)+,a0-a2 rts * .end **** CAPS -- Capitalize Character ** ** Function: ** Capitalize the ASCII character in D1.b if it is a ** lower-case alphabetic (a-z); otherwise return unchanged. ** Only the lower 7 bits are considered. The most ** significant bit is cleared. ** Inputs: D1.b == character to capitalize ** Outputs: D1.b == capitalized character ** Registers affected: D1.b ** Routines called: -none- ** Special error conditions: -none- * .globl caps .text caps: andi.b #$7f,d1 * mask off sign bit cmpi.b #'a',d1 blt capsx * not a-z cmpi.b #'z',d1 bgt capsx * not a-z andi.b #$5f,d1 * a-z ==> A-Z * capsx: rts .end lo68 -r -s sd.68k sd.o endjob.o crlf.o cout.o sort.o md5dc.o optscn.o optset.o makefcb.o caps.o