IMD 1.18: 5/11/2012 20:00:15 pascal mt+ tv 2 of 3    åååååååååååååååååå   åååååååååååååååååå   åååååååååååååååååå   åååååååååååååååååå   å ÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿøÿÿÿÿÿÿÿÿAMD9511 CMD AMD9511XCMDAMDIO SRC APUSUB MAC ATWNB SRCdBCDREALSERLINDEXER PAS4IOCHK BLD\IOERR SRCZLIBMT COMzOPQRSTUVMTERRS TXT&LMNOVLMGR MACMefghiPINI SRC PPEXTS PASkTRAN9511SRC TRANCENDERLUTILMOD ERLUTILMOD SRC7WNC SRCXBDOS SRC[XREF COM€)*+,-./0XREF COMI12345Í¢`a*É@ •€V+%‚ͰÀ. 6€9„ +X!€v¼B9X¬– 6ø\,Û>osW4úæ0®h„aÝåb²X,Û áp³mȘ€Ê¼à‡z€ •ŠÉ`³l0 …ÂÍ»@w1…@€D ‡žœÂU aßÀåb²X,Û áp³o ]Ì@eR`æ@'§0�•KÀXt€B9X¬‘9fÒàˆfÒàðI›CÀu|›\Àâ6mL;ˆÙµDî#fÕ`»%›RÀEbËÂ2°ŒšDu´Nb3��¢sœ˜¬“I€F^•„dÒ#¬¼#+:Ú'1ÈFÑ9ˆÎLVH ²P`¸]n3ˆŒà#9ˆÎL� 0J²óTVV—š 6+%¢áqµ\¬VK…Âáp²\.H¸\.—K�@%ÀÀàp p@¸0\ .— K…€%Ã@áÀ q¸ˆ\H.&—€KŠ%Éä� rP¹,\˜.N–ÄÇ_€"*Š”g "©)G{@":*”vÈ #ª)G@"Iɬd` $œš¡ÆPÀªIɪ$tåCALC SRC?@CHN MAC CPMRD SRCCWT MAC_DBUGHELPTXTADEBUGGERERLX89:;<=DIS8080 COM€BCDEFGHIDIS8080 COMJKPPGLBLS PASjPPINIT PASBqrstuPPMOD1 PAS#vwxPPMOD2 PAS{|PPMOD3 PAS,nopPPTYPES PASlmPRETTY PASyzPUT SRCaXREF DOC6XREF SRCe"#$%&'(åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå±[Eòëtˆ@ Ë6—@àË6—‚ ÚÍ©`"±X­¢ùuºD På›K€ pe›K€Á–mY´<›RÀEb±[Eòëtˆ@@È~­€¬+^·a\@å€@VmN�@–m.�À–m.Y´<|fÐðmKŠÅmË­Ò!'çrîÉp´Oncù}ªé�@–m.Ù´<F#³jØ ÜVÍ àGv‹åÖé`šL,@ÑjžÜÈ,fÔ°!ðA›CÀtÐ ›RÀ‡ÁmÙ´<BY´0î+fÓD &"©GtÀ"bš”v` '"©FD*yɪd  'œš¢G{Àb’ u¤ ) ¢Gjb’"´tÔ )&¦Gy€b’rRANDOMIOERL !REALIO ERLRNB SRCbcRNC SRCRST MAC]^STRIP CMDSTRIP SRC}~TRAN9511ERL…‘”•”àDU(9J@GTR�Ô DtU(1J@RML��Q D%4(IZ@RNG��P E5%HQIU9ROUND�Ô D““YBpÖ B3k(„fÖPRf€ Ðnú¢@`#*¨€+Ù´<|fÐð(†Á�°êùš ÏÌÚ`+?3i¨¬üͧ@ –m.€@Qåf€HøØÍ¡à ÚÜ€µÜ�Í§à “ë6±µœ’Í ìÚÞodŸRfóâhÎÉ`³l0 …Âà#»äUˆ"(rÍ¥ÀÍ¥À – 6÷€±D På›K€ÀmfÔ°K_ 5ð2^•�n›$j€®0Ö»àWà ‘Óp: WÀ눤À#/ÊÂ2iÖ#—„ef¨¬VV—š¬VI¤À#/ÊÂ2!5Ö^•�b1xFVjŠÅeaYyªÅd¸Db2ðŒ¬ÕŠÊ²óTÅd¸Z-W+UÊb²\'Ömk>3oø:Í¡àãürùfÔ°’!€,Ú\áp¸O¬ÛÌ|fÐ@1ðu›CÀ/ÇøåòÍ©`"ãürùfÔ°’i0åu„X@ˬBBÀó¬ú2Æ ;!¹`áYÖ'àûJÿ€@èË0è0„>Œ±0ë €÷¥š8DXК@ðŒ¬Õ€VhñiY06r³i�BP9Y 4pŸFZ u¢À{”B 9Y´�âÒ°"låf€låf€­&ܬКJ+6›€³iÐ „ú2Ñ :‚*Æ€Q6r³@ ôe£ÀuT ›@À'Ñ–�i0Þå€VmMx´®«   9D •š¶Ø ê blåfÜ€„ r³k˜†ó„egXE„ ºÄ d,/:Ï£-:Ñ`½Ê!¬ÚšñiX !Öˆ îQ åfÚp‹Jšq°X^jˆ@+6ù€¼ZTÄC�€b2åã`°¼ëºÜ'6Vã`+6¬ˆq°•›WÀGZ L7¹Yµ¤›[D%•›s@D7@¼#+5D5\¼#+:Â#@d¼#+5Y· CW€‹Â2³¬"Â]b2�gÑ–ˆaÞprˆp´X‚€ 6�€0P6”0P6—€(š Ìâ1BaÑaV2r³n@(«9Y·<B+9Y·X›vAD%•›xD •›~@ÙµàÂ"ÈÀÊ!­­ÊÕcÀ‹©‘’°H€¤ˆ­³ˆ H(Q•Px€°ž¡yˆ jŠQ— h€˜„ƒRˆ *hQ•�h€†œ‡oˆhi‘`h€ ž©vˆ êJq‘�j¨¤ªœ‡8žÉå*€~OÌ?TRUNC WRTREA¤™“ˆ‰*ј@h€šž‰žˆ j‘šðh€ ˜‰Éˆª)1‘x€Ž¨“4ˆ Ši1•À8€ŽŠ“5ˆÉ)јð8€Š¢¥!ˆ ȪQ•€H€˜¦¥ˆèªQ™p€˜Š¥ÿˆ H(‘—ðX€¤¦…Šˆ Iyé8grˆkÐxFVu´OiSyé8g``Vqºf!@ Úàáa ‹ 3k¸« 9EXH¼#+:Ýn˜Œä*Â@Q^•š¬ÐâÒ À"Úåa@[„æ#9@�Ê! à"1xFVjа�ŒF^•�mÚTÞzNÝn˜Œäɘ†€3nX„Eˆ",DͺÀ¬DåÐÐ[„æ#9 ±”CO€KÂ2³­Öá9ˆÎBú2Ä€¬H&Ï¢ó{”Uˆ Â2³TB9Y …¢}Q‡ÚWHUˆ Â2³TUˆ Â2³¬•›h@$P•›L@"à•›f€™´Ð›i™´ÜB9D8Ø,/5Z.[•ª"Ñ@ �ÊÕf€-$*Ñ@1Ši X‹I¬ªŠ!ÆÀ±VŠ …€樇9Y¶L ›i'Ñx}¥P€Ä5À¼#+:ÄZ0B9Y 4ÐP7+6„�³ihP„a2FS °X *�" œÂi7™ 4ß°'(«F:Ü'1ɇU€Øw(U�¢låfØ� ôe£À,;&ˆ JI‘�ð€ ¦©ˆ ˆ‘�À€·ìˆ€ 4pˆ±€«9Y «9Y „`uб€eÊÍ „¢r³@V*rбP•›À‚¬`åfÓ°"fÔ0S4f€ Ú’fÕ0"‚€VmW3h( 6°€ƒ1ñ€2Y¶ÜÂ"Âpˆ° 6´ƒ0°6ã3l @+6Å‚ Å¥kÀD •›eA ÛF Ã@ ;êÍ´à ,ͤ  Û` Ã@ ÛrÃ@(Ê!¬Û~fÜÐS6²€Š°�`a fÙ`0f>€,„ç@ŒÛ<ÆÀ Ûl͵ `Ì|ͶÀ` lÍ `X‹!3mà ²•›|À™·T›r€Á˜ø›v€Àø›xÂGÆc1˜*È€Ñy¼ø/3ˆÜ¬Û¨ͽ@,ÛÚͼÀ`Ì|Í @€ |Í¡� "€f€•:fÐà@>fÑÐ@�@3n¸6‘‚1ð«!ÄYUŒ€¬Ú„”@Vm'fÒà@6€VmJ3n@Å¥`XÈÊÍ¡àb¬dåfÑ`1´åfÑÐ6m„Fåj³i8(‹T ±àŒE�Z V"ÕÅ«*Î ±�•›}ÁEXÈÊÍ¿À¢€Ê*È@QVFr³@ D2åfÐPfm”@Vmd («#9Y „E�€YÊ!¬ÚÐ ád`:d³iè„E’",”ͱ  Ì˜Í©Àb¬�å¿ßîVmx´¯H0«%9D/÷û•›n�ž-+ª !€Y(›jA€0C’€¢ åfÐÀifÝ``LfÐ0 ñnò¿ÀÂó9ô^oŠÜ¢8Ö*É´©¼ôœ3ŠÜåF#/ÊζˆeÊ!¶ áYªÍ-+V!€£,Hùà"¬DåbðŒ¬ëu¸Nb3�«9EX€¼#+:ËÂ2³­Öá9ˆÎL:¸:Ä€`¼ú2ÂÀ¬,&Ün™ˆ€6–¸DXÀ›MÀD8ÀÊÍ `håã +6†Œ±0ë €8€†¤™ˆª)1‘p(€œŠ“ňÉ)Ñ‘08€¦Œ….ˆŠè‘“8€®¤§ºˆ ê•@(€¦¨¥§ˆ h(‘Ÿ(€¦’�¡ˆJj‘‘`€„¦¥Mˆ ˆH1“�(€’¦…@ˆiÈq” (€††‘ªˆ jj‘žà(€¦˜‰mh誑”à:†œ¬¤™4ˆ ˆÈQ‘�€¦²¦’� ˆ IÈq—`€ŽŠ¨†‘Éꪊ ª“€…ÕÔ•‘PS Du$ÉEPÕä†0è�¸€°í°ž°ìè34f€ÌÍxFVuŸEæóà¼Î#r³lp6¦€³@mÑa mða m€VhñiQ !"Ä :>;À 4Í ` b(« „eg[D2#aàma`åfÓ C6žfßÀ D2åfÙ0Fm–”@Vm�fÛ @>fÜÀ@>fÛ€FmÒ3j€ 6í‚€Š›Ù·ˆ�€XÈÊÍ´€‚¬dåfÚ°A¸åfÛðFm”@VmÉ€@QVDr´\"·+TE�.•ªÍ¯àB-L*Ç€1<j`X‹S¬«* *Æ@Vm÷c +6ÿF+6¬Ð›z�€0›DÁÂ@Í-êŒ>Òª€â¬”åƒ@Vm½x´ª8„d mdÀJrˆr€•›Cu¤›PAÀ0C’€¢�åå+6ƒr€”U’€¢ûýÊÍ1Ðð€®¤™“ˆ‰*ј@h€šž‰žˆ j‘šðh€ ˜‰Éˆª)1‘x€Ž¨“4ˆ Ši1•À8€ŽŠ“5ˆÉ)јð8€Š¢¥!ˆ ȪQ•€H€˜¦¥ˆèªQ™p€˜Š¥ÿˆ H(‘—ðX€¤¦…Šˆ I…ÓUPT%ÀBàx9^@DSP�“QSPU�`dÔ„dª<PT”˜` a€ 0†0ÀÃ` a€ 0bÍ",ÍX¼#+5D @•š8DXU�¢ÊÍ-*Ü*À@QV/ÊÍQë`@ÚTÞzNÚ!—[„æ#92f à ÚJáam,€áYª! Â2³TU„'´©¼ôœ3¹Y Å¥h€ ‹0î(†À€„ef¨«4OiS÷¦b&!©@%áYª!€¬Úäñi] 1 j/ÊβðŒ¬Õ€@Vmux´®�†¾²‡!9D8èÊ!¬ÐUŽ€ Â2³TB9Y¶, âÒº@b¬t"Ǭt^•�b,t*Ç@QV:ˆËÂ2³­¢d ’d Brˆqà”B9Y¶�CvÀ‹Â2³¬E�€ ôe�€XøÊ!€¬Ûd:ÆÀ`¼ú/7´Oª0ûJç�бð”U�¬Ú’ñiSÐ1V>cÀV>/Êα>aÜÀ1}c   `V>/ÊÍQV:r³lØ Å¥Z@ÅXðÊ*Ç@áYÖëpœÄg&‰cÀ(«„eg[­Âsœ…XàÊ*Ç@áYÖëpœÄg!V:ˆËÂ2³TU�€b2ðŒ¬ëh†DYC|„b7(†Ð�ˆÄeáYª*È€ ÚTÞzNÝn˜Œä*Ç@QVDr³hØ aÐ6¦dÌr€Øu¤ :*“QSPU�f"ÀN#—„ef¨…Hr³h0…¢ePr³h«(²0«#8Ý1Ñ€ š‚°‚¬ƒ1fÑ  �åfÐ`èÀ(‡E9D •›n�6ØE¢€7,¼#+:ÄZUŸ¢Öá9Š´”B9Y·0UŸÀó¬ú/7´Oª0ûJ ´ŒF^•�b-*ЀQV~r³iø#Å¥K�…ZE¢€Z¼#+:ÄZ‡`A…ZÖ*ÏÀ‘ŒèÀ(‡D9D •›rEZ(Ê*Ð@Vm h€(«B:ÅYøö•7ž“†w+6�€t”U ¢ÊͨÀ¬øå€@· ͇yY1Ñà€œŠ¯1f×PW‹:8DYØåå„Ð�Ñ DU(9J@GTR�Ô DtU(1J@RAD�”РD$ÔÈIZ@RNG��P D„õQIU9ROUND�”“ Du$ÈIMPÆ@RSET0�”Œ 5%#(IIa%RRRVALI��”ÑU åÀS�‘ð$e�¡¥ó*Ž€Åc¬GfÙЕu°ë LFÁ �lR!4u� á°XÜ~ 3†‘‚wÜVã†Å¬*XÁd��#,Å /™Ux6+`@;6΀4¨Ø¬&#`†…à& ŠG€:Ù´^2Ê@„3k˜ ¤r7?3€s¸¬ §`L: :ʀіTa^°@GYŒP�€ ó8' Ã`V`FX’å Áàð{˜o †‚`p8æx-BA°+ ¹+ÂNJ¼$~ XVh|ÿ ÃmPŽ#Uá Ø…h€�ÏáƒjÙ�?‡M«�þ2¯`G€8ÀÀ�ÑÜ6+°­ð…’æ“ÇX„ÌðXŒ±Œüþ6­˜øtÒ¶`AB3k˜ ù‡r„gçðÁµnŸÃ¦•¸sÀàp8Ì‹0s ”C˜€¬ÚñiRÐAV`rгŒF^•�mÈ‹0 ³”C~À Â2³¬F#/ÊÍVhñiUPA 2/ÊαŒ¼#+:ÄY€C˜¬Ú*Ì,¬*ÊÀ7Ltl ")¨LG·”Â"ÌÀhfÞÀVfrˆ@+6¨¼ZV‡\ÁD9˜ÊÍ `®^•�b,Ô!±à‚,à!ÎQlrˆ@@+6ö�s@”C›€¢Ê͵`‚ú2Î@¬Ôå€@Vm g 0Þ}›Ú'Õ}¥CÁE›aEYØÊ*΀Qxr³ië< €óè¼>Ò£ ìÚ$*ÎÀQVtrˆsÀ•›H@YàL7ŸEáö•™Vm€€Vhág VtrгЕ›IÀž-+æ *΀,ô*Ï@VmpŸEáö• €Ñ–xaÑÐvmg`(«:9D9àÊͤ åg€0Þ}›Ýn›&3 Õ#2 ÑA12® TRc= ±9&3 TUc$€q9V3Î Õc" Ñ1MV3Ø ÑUc;ÑUååÇXŽÍ³  *èë ˆØ!¡x ‡^@b6h b‘ £¬o ‚ÆãäË8õÞ)C8i'q�Ån0XlZ°€ KUÊÅ< Éàgø  u‚]lÒù…mÀb0+ Ö8Z,—+C€Åa°Fa\ …’Í·@àHË—Ãçû í€ ÀA±X-Šå„8˜lŠØW˜Â³lèJû€:Ú®±2CGpج ¿À ó»„|e00$#Œ€µÌ âpmsb�» ™Ž²˜ôe”ÀT8‡S\¢0Ž'!Ý`¶m!bðb ùü0m[€'ðé¥nœÀòxë,FXˆF~ Và ü:i[€'0<�ÜÏ–#ŸŸÃÕ¸šVà Ì'ޱÄeˆÀgçðÁµnŸÃ¦•¸°ê842Ê 5y<ü2À`¶¨G�'à�¬6aV�0Ž$YµÌ¢ ™Vì ü eY07ðí•pÏ+vU² °ëÐånµ@c¬6æ²­�` µAÀqa°0=‡hÇYT$j°ëˆ8ò`c¬þ„ «˜>„˜,–(Cw@Ëá`d¼#+:Ý7ÌY¨F#/ÊÍQVfr³@‹Jþ@ èË90è`(«5³`«5„egX‹50î «69EY¸Öá9ˆÎB¬Üåf [„æ#9 ³pŒFåf`[„æ#9lÈ ŒFåÓ`QŒ¼#+5EY˜¢u¸Nb3�«59D •›}-*Ò !¨ÀŽQVnu¸Nb3�‡9D ­ÂsdÌH€µ Â"Ï€~pˆ´6¹‚ ³ð”B9YµøâÒµÀ¢­å€@· ÌFrgÀ(„u¸Nl; !ÏÀVmÓÀQŒZ2tSQ#)@YMeM563FÑ”#: ±I22¼ Q“#. Ù5=Y1pž €Ñ–xaÑÐvmg`(«:9D9àÊͤ åg€0Þ}›Ýn›&3 Õ#2 ÑA12® TRc= ±9&3 TUc$€q9V3Î Õc" Ñ1MV3Ø ÑUc;ÑUåå�èË€8XTȇI@GX”üPmV@$��'æpNw�XUh#‰À–h‹XU¨’åFð8s<� ÙôƒÜÀó8…]€O�' %›n€À‘– /‡Ïö¡€�a±[Ê!ÄÀ`HØ+a£¸lVa[ yÝ¢!Æ€`HØ+a£¸lVa\€ŽRä 01^w Ã`VÙÆX|e@Ž&µÌ#”@ÀÆmsa°8ë(€,YD”€ &Ž5u³ièë)?Ÿì*jÊ@“…‚R`Jj R+8%¬¹€·dýÐða Ùþ9|€ÁEð(®bˆ@@ÈfÒÀ–H…ìÿ¾@`£x g±KÂ2°„€A@m, d´D/gøåòb€A@m, dˆ@ˬBöŽ_ 6(fÒÀ–H Ò`e`‹,3m8 …ìÿ¾B8$ 3i`H«+:@f“‹+@ˬC–€  6–ˆA@ËåÂ"Ë ÛN!{?Ç/�Ž ‚€ ÚX!{?Ç/�ŽZ‚€ ÚX*ÊÀ‘"Á ,"Á ," ¬°|[   ¼®ˆ ¼Î>Œ°�ô^oŸïª ë„ìÐö2Á °  ͺÀ�WXÈfÞF ä. …ÜϘË:À  6ô‚Ààp8j2Áà ‘ð eƒ@"s@‹2\",È!.± ‚€ ÚX!/–mce€(«2:\",È!€'á– fÜð0�€:Á v]fÓðffÕ f€sÍá6m‹ ³lX(‹,°�Ý�*ËÁyœú/7ˆÄY`’‡Ãá÷0=›h�Ià`%›h�CN±ƒ³k¨84üÍ® â0k ±ƒˆA@ËäU™,W)½ÊÍ,H€@ €@ ap˜L&Ä °äü/;²D °äld¸DYô›T�„ �äü2Ïàr�€ a…n�ÆZB _"¬úépˆ´6ÑƒŽ´Ý…x�Ä ”U @"Ê*Ð —‹@€3m8ë@-ØWh‡x�Ü"-Í´`ã­·e^ qÖ[°¯;í¸DZ›hÁÇZnʼ@ã¬þ·a] vâpˆ´6ÑƒŽ´Ý•v�ÇYüˆ IÈqÙ@x€¤œ�Ûˆ JFQÕ°ˆ€¤¤™Rˆ JhQØ`Œ€¤¦Š¨avÈ Jhª†1ÛÐŒ€¤¦Š¨gwÈ k*i)ÑØ`h€®¤™üÈ ‰*È‘Üð8€°ž¡øh誑Ó`Z¤žªœ‰êjJFQÞ€Œ¤¤¬‚˜“ ªJK *‘Ñ@Z¨¤ªœ‡8ži æ1ÜÀx€Š¢¥+ˆèªQ˜€Œ€ŽŠ¨†‘ûˆêŠQÔ0ˆ€˜Š¥ûˆ ˆÈQÑ0ˆ€˜¦¥0 ˆ ªÉ‘Þ x€œŠ¥œˆ H(QÓðh€¤‚‰lˆ HŠÑÕðh€¤š™{åTION OF THE 9511 *) (*----------------------------------------------------------*) PROCEDURE @O95D; (* OUTPUT A-REG TO 9511 DATA PORT *) BEGIN INLINE("OUT / $88) (* CHANGE TO YOUR 9511 DATA PORT NUMBER *) END; PROCEDURE @O95C; (* OUTPUT A-REG Tå`y<Éj—J‚‘H¤2h²@`¢ø WšL,¬!.°(Í¥�"Prùe`H o‚€frðŒ¬Ã¶` 3I€E•€  ä¼#+@ˬ 3i`H„¾EYXÒ,”/gøåòÕ‚€ ÚXÑ‚€—H Ò`e`9uˆpHfÒÀ‘(9/ÊÂrsœ„a´°$U•€.Vf×�fm‚€—È«+:\",¬Í¯ ÌÚzé ÎVf×�fmËaÔ�g‹+3kÈ36È€°êH0„ºn¼@ì;´áhm£h»*í޳øÝ…v�ØwˆÂãj0P'çð…]‚U„ "ÂFÂPë€ Úfʲáåf€  äîþØV!‡GEU¸ "ÂOÄ÷ð­•mÂÖU´ Vô!ü:i[І(‡A€„ ;ž*³PˆÐ/ÊÍVhòáaŒ ¹áãr°O.ð�•G_À†U ;ˆÜ¢«|å�’ðŒ¬ÕfÜ �Uì°€’pÅaݰ‡(GA€Rfóâijáe^ �XØ@ýAåMODULE AMDIOROUTINE; (*----------------------------------------------------------*) (* THIS MODULE CONTAINS TWO "ASSEMBLY" LANGUAGE SUBROUTINES *) (* WHICH ARE CALLED FROM THE FPRTNS MODULE AND IF LOADED *) (* THE TRAN9511 MODULE. *) (* O 9511 CONTROL PORT *) BEGIN INLINE("OUT / $89) (* CHANGE TO YOUR 9511 CTRL PORT NUMBER *) END; PROCEDURE @I95D; (* INPUT A-REG FROM 9511 DATA PORT *) BEGIN INLINE("IN / $88) (* CHANGE TO YOUR 9511 DATA PORT (SAME AS @O95D) *) END; PROCEDURåÄ  dšDu²\",ÈÁh�Ï,Ìy?ØVd|fpð…l�™·< $ 0ïˆ3ø¹ÌÛžwÄüa]àfmÏ  ;â þ°¨;6ç�„€ L9?-ØT›OÁ˜t ›T�„9 #_ÁÀ!P6–ˆA ÈG43j°‡4€€çð�…JAÀ‚6’qÖg?ØTØ^€ÇYðü-aT p! u™€ª®ʪàäqð�›]AÀ¬*œ:Ï€ák ëj0$ u³lp%ÊÕb³@IõvÀ>.™2à p¸ \.—€K„À%Ã`âp q@¸¤\j.6—€K�À%È ä` r�¹L\¨.U—+K–%Ë@æ@ s0¹œ\Ð.}—?€K %Ð è0 uº”]Lz¨i æ1ÜÀx€Š¢¥+ˆèªQ˜€Œ€ŽŠ¨†‘ûˆêŠQÔ0ˆ€˜Š¥ûˆ ˆÈQÑ0ˆ€˜¦¥0 ˆ ªÉ‘Þ x€œŠ¥œˆ H(QÓðh€¤‚‰lˆ HŠÑÕðh€¤š™{å *) (* THESE ROUTINES ARE SPECIFIC TO PASCAL/MT+ AND PASS *) (* PARAMETERS BACK AND FORTH THROUGH REGISTERS *) (* *) (* THE USER SHOULD CHANGE THE PORT NUMBERS AS NECESSARY *) (* FOR THEIR PARTICULAR HARDWARE IMPLEMENTAE @I95C; (* INPUT A-REG FROM 9511 CONTROL PORT *) BEGIN INLINE("IN / $89) (* CHANGE TO YOUR 9511 CTRL PORT (SAME AS @O95C) *) END; MODEND. å   …Ô‘PQ‘Pe€E�8II2*a€ 0†LA8Ê!¢ÈÊÍ"°•š3@´åfÑÐm ‹€Vm'fÒ h! Â2³¬"8BÀóTB9Y Å¥Z€4è¼#+:Â, eÖ!.Q€ëpœÄ5P¼#+:Â, eÖ!!`yÖ}c k/Êΰˆð γè¼Þåc0Þåà+4f€è¼ÞÑ>¨Ãí+Ê!°`áYª!¶@áYÖ%áYªÍ6uŸFZ ‡yÀD8Ê!ÀVm¡‘@Vm1‹€VmšfÓ@m¤fÓpåã`°¼Õh¸EnV¨‹E4\"7+Uš´�«EÄZ(U¤€b-$|Z²ª(‡:ÅZ(2š¢åfÙ0&m¤pŸEáö•B×"ðŒ¬ëhÀåf€ ÐCA@ܬÚÍ¥ aB„È 9L&Á`€¨r<ˆ &s ¤Ü:f€ ÐC~Àœ¢­ëpœÄg&ù@B¬håã`+6Ä€¸O£-ɘ °ì˜ d< () X‹Q¬ªà*Å@Vm‘3oØ3@hácV(r³@V(r³@ÀëcË•š3@ Dåf€¬Tåb +6ÿ€XÀÊͧ` Dͨ` ¦h͵$ ͪ` D!¬Ú®fÐPmab ãdÌAÀ¶ÜÂ"Âpˆ° 6´ƒ0°6ã3l @+6Å‚ Å¥kÀD •›eA ÛF Ã@ ;êÍ´à ,ͤ  Û` Ã@ ÛrÃ@(RÀØB9Y¶ ͳ/•¬fذ0�3l°3@BaÓ Fmžc`m¶fÚÐ0f>fÛ`06fÐ0¬E�€¶ð �€YÊ;`LÛª͹@`Ì|Í»@` |ͼa#ã1˜Ìd@è¼Þ|™ÄnVmÔfÞ mífÞ`0f>fÐ @>fЀ@�@3@‹J�3hp 3hè H ·\ ›HÁ˜øU�€b,„*Æ@VmBJ +6“�³ip @+6¥· âÒ°‚ ád`倀V‹„Våjˆ±àEÂ#rµY´œEªXðF"Ç€­P+j€âÕ•g…XÈÊ;ࢬdåfßàQÀåd («#9Y …¢r³h(36„J +6‡ƒ ²”U‘€¬ÐÂ"È@¬Œå‚€Vmhpˆ²0�2c¡à]I2b ͧ nHpˆ²P6Æ‚ƒ2`6§в@”Bÿ¹Y´ âÒ½ ¬”å¿ßîVmºx´®¨0„d m©dÀJrˆr€•›Cu¤›u�€0š8DX(šh8xFVuˆ°�4 P6¼€0`«9D •š;À 4Í ` b(« „eg[D2#aàma`åfÓ C6ž¨Ãí*ì!€£,xï "ú2Ç€¬x&Ün™ˆ˜6Ÿ¸O£,¤Í¨À#¬¤&Ï£,HÍ¿À fÙ°fTb@0ÞåfÐð‹Jø³m*3m¸H  ë €÷X„`=¥Mç¤á�ÊÍ·  †hÍ» ̨͡€èË0í@ 6ð€2 6ø€ƒ2@6û€€2@6þ€…3`m 6„2ÀB9Yµ4âÒ¸"¬hå€VhfÛ`ƒª�ˆq°•›r@€ÊÍ®`"Ì^•�a2ë€�°¼ë>Œ´@ëD €÷(„@r³jh Å¥b€‡Z L7¹D €•›iÀ^-*h!ÆÀ`yª!¬ÛæñiS!6uˆ@Ë”C�€Àó¬VëpœØuXC�€¬Ú°!ÆÀVm_h€0ÞåfÖ�ml”VmÍÝðŒ¬ÕÕp"ðŒ¬ë�’ðŒ¬ÕfÜ€ ^/Êΰ‹uˆ@ÈX^ € К0P4fÑ` f€ Ú> Á@ ÚPÁ@ Ú\ hñiW€ ¹þ"ÁÀ¬å€Vh*ÁÀVhͦ€ Í-êŒ>Ò® ¬#`àHaÚ°"ÁÀ¬å„ÀVmQ`à+6¬3jØ3k…¢}Q‡ÚV¬Uƒ€b,ïÀ¬"À¬ãtÌB€´LÂ"Å*pˆ±`6Ž@ («9Z.[•ª"ÅÀ �ÊÕf€-D*ÅÀ1.jD+6“³iH„¢r³jÈÂ3iØ @+6Ý´ü âÒ½ B¬ åfÙÀ!Vr³m„Zr³mP6Ö�J +6Ú ±­Êͼà,Ûˆ Ä@¬@åá («9Y´$U„¬Û¦*ÂVmÚ‹€VmáfÞ@! DåfÞ°!V/ÊÍQrа€•›B@3Ðmrpˆ±�„E�·Ø�€¶U� Â2³TB9Y Å¥[ÀÅXм#+:ÄXè‡]@Ä P‹ ±ÐEöÿ ŠÄY›U•c +6û‚ ±�•›�#•›{Aø›v-Ë•›AAY´ BQ9Y´<›T�@ø›[@ø›VYµÈÍ»àŒÚö (mêfØ Pf>aÒÀQV2r³j («9Yµ,BE9Yµ|›X�D%•›ZAEYÊ!¬Ûñi_ QV2r³lÐ(«9Y¶„B-9Y¶ ›jÁD%•›l�EYú/7Ÿæq‹!0èˆ0«9Y· UŒ€¬Ûž !€¬Û¬ Í» ¢ˆÊͼ¢ÊÍ¿ lÚðf\ &"©FÀâ’ $eü ))¡Fb�b’jdd¬ )"+FlÀâ’ eT ,'¨F^A¢š¢”eÈ &! ÆT�¢Jšed !§!Æ[Á¢DdX ('ªF]�⺒œddª)*§!Î…ÐÓ•”•“%AðVÃ` a€ 0†0À1(; >€rp€°Ê£ÐH &ÈÚùx ;�b�Tù®ˆkqC¡¨¥$PŽqzÕÌ 8Ëꑲ86ɬTKÁãxkdÇ@À"‚z¤Äë €÷(„\r³mÀÅ¥J€˜w\ ›D‚@Í¥`@ÌÌ!€Y¨›C'Ñ–$b@0ÞåfÐð‹Jå� ³P”B9YµˆâÒ¯ÀLÚf Vjr³h6ñ€3k 310ì`„r³k°!›`À�™ˆ›aÀ€˜u‰À{¬B0Ò¦óÒpÎåfØÐ bfÚ@ S6″nè 6Õ30«5ÄY¨›C'Ñ–$aÔ`&m´f`mÌe€mÒe€mØ 2f# ÊÍ»À@†mçfÀ   Ö$ îQ åfÒ'‹J‚�°îx6†8O£,H!YØu‰À{”B+9Y Å¥LÙ´0Â}b@Qb@0Þå‹@Vmx´ªˆ„>Œ±`6†8O£,H:Ä€`½ÊÍ¡à•Ÿg`(„r³@Ö$ î±À{J›ÏIÃ;D2"ÎÀ¬ìå„€Vmx´¬ „&g`m pŸFX�‡T@ÅYØÊ! ¬Úºñi[à1Vvr³h6õ�3`ç�³m°H€ 6ß�ƒ3`gÔ ,'¨F{"jz²,à…”ÕÔ•”àDU(9J@GTR�Ô DtU(1J@RML��Q D%4(IZ@RNG��P E5%HQIU9ROUND�Ô%àXðg‹3l …¢}Z0«X¹€8DX›a-êÑ•ZÀuÌÂ"À ÛáhŸVïªÖ´eV°spˆ°6Â8Z'ջʵ€0똄E€¶ÂÑ>­ßU¬‡\À",Ͱ€‰õnú®` FUs€QVtˆ@ nÈ|ž°Y2ª€Å¥KÀ�'¤Y}¥KÀ•ã,VÃ¥àDÒ ‡€-˜UŒn{—ÏAò¹ä>Ox¡œÇò8ë ÎdÀî,9‹BË6«2AÁwˆ5…_@ž*òù\ž!Å€ :à:Å€ Û6Gcm›d¹�ä÷1òÈ{ ,Û�fÕð7ò•P€Þ¢fV“…daV.>Mã¬Z_[¼ª0ánò°@G„›jö0¯å(Ú½€L+ÄzJ¶¯`é*W<§ ç„Ù^?z«Ïaòùð>g>‡ÍëE› æ��‰ô>o°¨â|™À¬*ñ=‡ËàÖÀ,láhˆ±�¬EŒ­Vm¥fß0mã°« ç‚8\/–,iPàQj"Æ#ÈEŒ€·¤¢*ÅÀQV,rºÝ,ÚúÈ?Ù¶lzæ?“ÏdÄîÉ€€“ó¹wd¸Z'·1ü¾Õtˆ@@Ë6ô�°\.«’Á4˜X¢Õ=¹� * ͮ ¬Ûìà¬Úê Ͱ€rͽ l TU€, ñþ9|±B5ô9Z¬VhÉfØÐ(¾lÐ(d¼#+:Ý6ÀäÞ@[è Ahx51¨ÀÕ|·XcI€F^•åå6å€3`6è…1Ð� †œ¬¤™1 fØ`‹8DX€›c€EXx,/5D •›ž-+¾!XˆB9Y·X Í  €ÌL!£,X!£,TÍ¡€è˱ ˜orˆE`+6ž¼ZU,›C´H›E@¶Ä ›BA˜˜‡bÁX�L7¹D"Е›L-*êÍ¡€ Ú$͸àlÚ*͵ ‰€v,u‰À{•›D€´T›Pµ´‰€´`›a�˜¸›cÁ¸B9Y¶TÍaÙ` aÚ ´aØ@FâaÚ 6m¾fß0mÓd³mð6ò3n˜%›o€·¤›tÀ,Û|Í´ LÛ¦Éh°\",Xábà‹8DXÈŠët´X"¬\åbÀ+Öé°ï(½êͯ Œ«ê~w ì;ê¯zб€õh¡/•VâÀ0ŒœÉf×ÐFx´ªP ‡0è 6Æ�$¢Xú¤À"`~`½X¬Ûrñbµ^¢`ú§@"XÍ· /•C� ïàÃÊÔ€­ÙUhð·yU0»6îVïªTBæóà\Î{ —Þ(1üžåâÀÖ0W9� ¸ŒæÑœ„g6mVdˆ@ („r³@ðÐ<€€1,aÓ 5»ê¾¿ˆ �ðÐe‹È–-€,\!v, üÁh@,bàÕb½B UÊÍ©ào D|€dˆqhxVVäõ“ÊÞ�žÈ9ä^Æ“Ïböp¾z³€ušÅ•vÀ§�¹<ö/ž‚åu»Êáœg!ÌFqd‘Øw@ W°í0‡+Øw¨ n~z‘ÜÄ5<9�ìªj„dÒ#¬F#/ÊÍQX¬¬+/5X¬“I€F^•„dBk¬¼#+:Äb2ðŒ¬ÕŠÊ²óUŠÉpˆÄeáYª+•…eæ¨ ŠÉp´Z®V«”ÅdšL,Ñ¿ã—Ë6Ñа¥Â"À@4˜X¢!~?Ç/–m¢`@(«9EXÒi0ËÂ2°ŒšDu´Nb3��¢sœ˜¬“I€F^•„dÒ#¬¼#+:Ú'1ÈFÑ9ˆÎLVH ²P`¸]n3ˆŒà#9ˆÎL� 0J²óTVV—š 6+%¢áqµ\¬VK…Âáp²\.L¸\.—åå-+¾:Å€`}¥r�¶|‰€¶Ì‹€µÌ ›nA˜˜‡wÁ·‰€·,‹€¶¸ ›tA˜˜C‰€¢¬@å�VhÍ»@€ \ͽà� fÖ@FhñiQQ}a@€Ñ–a@0ÞãtÆZâjªdgl ()ªFy€â‚b$e\ "¨¤Æ}âr*Lf  #ª$ÆUb:*Lf  &"¤Æ@b*Š”fŒ '"©F`Á"’ $e¨ ))¡FuÁ"’jdfü )"+FA"’r<‹XU4ÖÑ ºÌ– J²€€Á$BiáÌ€3¿.8 ¼Þ°eW�mÜO+%›*Ú€ž\È“žÂåóÐ\®y “Øvâ…sÖ„w‹`C‹3ˆŒä#9³j°#%¢Á<-ß—âGaÙ�‹Ì€Ÿ„dáXF^ïËŽÉ=‹ØÀùè^ÎÏ"öpžx³€vIà>G<‡Éç ù\ö/²Y¶4 Í«àoä*»�=AÀ‚ë€Þ Vü ޱ�}êaP` hë€Þ ÖsYUì|ÿb°-+*ŸUìFF“‹FJ¼ô+žäsÖ Ç�ª~ʧà„q8FV—•ç�ù<ô+žÃåð+ „‚<^®d*–‚Åì` |ô/g ç‘{8Ox¶b³˜¬äÉW—ÊäñŒFÃ¥ €ãùD<ÿˆÄl:.*Æ,X*Æ@,\q G0ë  8!Æàv~ Ã`Öidƒ€‡à�Œ& aW@FH‡€…kfKÂÑbÀX‹:ܬÚúáb²¨p)õ›fÀƒïQpEŒb,dÕrˆ@ q,…Â,\ͽ ,ÚÂ!?µDX°B©+±p6ù€€c,v*Å€,h*ÅK�À%Á†qH¸¨\V.,—€K‹€%Åàã qˆ¸È\f.4—€K�€%Æà〠qȸè\v.<—€K�À# EJ3(T”£©J:DÕ£« 1J:nÔ£0À±5Y2:"‘T£¦ ±I ;�Q#±@IZ;“S#¥€±I9;”У±€±a=B:” T“ÕS‘#± MEIR:z U•S�çž”£©J:DÕ£« 1J:nÔ£0ÀAMDIO FPRTNS REALIO TRAN9511 AMDIO SRC FPREALS ERL< AMD9511 $$$ååååååååååååååååååååååååååååååååå   ååRNED.} FUNCTION SIN(ARG:REAL):REAL; {SINE FUNCTION} VAR STATUS:INTEGER; BEGIN @AMD($02,ARG,STATUS); SIN:=ARG; END; FUNCTION COS(ARG:REAL):REAL; {COSINE FUNCTION} VAR STATUS:INTEGER; BEGIN @AMD($03,ARG,STATUS); COS:=ARG; END; FUNCTI; ARCTAN:=ARG; END; MODEND.  LN:=ARG; END; FUNCTION ARCTAN(ARG:REAL):REAL; {INVERSE TANGENT FUNCTION} VAR STATUS:INTEGER; BEGIN @AMD($07,ARG,STATUS) ;---------------------------------------------------------------; ; ; ; 9511 SUBROUTINES FOR TRAN9511 ; ; ; ;---------------------------------------------------------------; PUBLIC @AMD EXTRN @I95D ;DATA PORT INPUT EXTRN @O95TURN STATUS IN A-REG MOV M,A ;STORE APU STATUS INX H MVI M,0 ;ZERO HIGH BYTE LHLD RETADR PCHL ;---------------------------------------------------------------; ; ; ; 9511 UTILITY ROUTINES ; ; NOTE THESE CALL @IN95 AND @OUT95 IåMODULE TRAN9511; EXTERNAL PROCEDURE @ERR(AN_ERROR:BOOLEAN; ERRNUM:INTEGER); EXTERNAL PROCEDURE @AMD(FUNC:INTEGER;VAR ARG:REAL;VAR STATUS:INTEGER); {THE PROCEDURE @AMD,INTERFACES TO THE AMD9511 ARITHMETIC PROCESSING UNIT (APU). THE FIRST ARGUMENT ON EXP(ARG:REAL):REAL; {E TO THE X FUNCTION} VAR STATUS:INTEGER; BEGIN @AMD($0A,ARG,STATUS); IF (STATUS & $1E) = $18 THEN BEGIN @ERR(TRUE,7); (* TRANCENDENTAL OUT OF RANGE *) END; EXP:=ARG; END; FUNCTION LN(ARG:REAL):REAL; {NATURAL LOGARIåD ;DATA PORT OUTPUT EXTRN @I95C ;CTRL PORT INPUT EXTRN @O95C ;CTRL PORT OUTPUT ; PROCEDURE @AMD(FUNC:INTEGER; VAR R:REAL; VAR STAT:INTEGER); @AMD: POP H ;RET ADR SHLD RETADR POP H ;ADDR OF APU STAT POP D ;ADDR OF REAL POP B ;FUNCTION N AMDIO ; ; ; ;---------------------------------------------------------------; PSHD: INX D INX D INX D MVI B,4 PSD10: LDAX D CALL APUWS DCX D DCR B JNZ PSD10 INX D RET APULOOP: PUSH PSW APUX2A: CALL @I95åIS THE FUNCTION CODE (AND IS STRAIGHT FROM THE AM9511 LITERATURE). THE SECOND IS THE ADDRESS OF ARG, A REAL VARIABLE, THE FUNTION ARGUMENT IS IN ARG, AND THE RESULT IS RETURNED IN ARG. THE THIRD ARGUMENT IS THE ADDRESS WHERE THE APU STATUS IS RETUTHM FUNCTION} VAR STATUS:INTEGER; BEGIN @AMD($09,ARG,STATUS); IF (STATUS & $1E) = $8 THEN BEGIN @ERR(TRUE,7); END; LN:=ARG; END; FUNCTION ARCTAN(ARG:REAL):REAL; {INVERSE TANGENT FUNCTION} VAR STATUS:INTEGER; BEGIN @AMD($07,ARG,STATUS)å ; ROUTINE FOR FLOATING POINT DERIVED FUNCTIONS ; ENTER WITH: ; BC = COMMAND ; M(DE) = FUNCTION( M(DE) ) ; M(HL) = APU STAT PUSH B CALL PSHD ;PUSH ARGUMENT POP B MOV A,C ;ISSUE COMMAND CALL APUCS CALL POPSTAT ;GET DATA AND REC ORA A JM APUX2A POP PSW RET APURS: CALL APULOOP CALL @I95D RET APUCS: CALL APULOOP CALL @O95C RET APUWS: CALL APULOOP CALL @O95D RET POPSTAT: PUSH D MVI B,4 PPS10: CALL APURS STAX D INX D DCR B JNZ PP   S10 POP D RDSTAT: CALL @I95C ORA A JM RDSTAT RET DSEG RETADR: DS 2 END  APUWS: CALL APULOOP CALL @O95D RET POPSTAT: PUSH D MVI B,4 PPS10: CALL APURS STAX D INX D DCR B JNZ PP (&"Ff"r*Lf )ª)Fd@*"zœe8&§«"ÆIÀ2 ššJ:tàžTURNS NAME FROM AN FILE *) (* FUNCTION KEYPRESSED : BOOLEAN; TRUE IF KEY PÐÂ"Ú@­¤"À¬ãtÇA€:*¢’ ¤Ä›C@"-¨ám`mm@(«k9D%•š2c¡ -eAINb!€¢ÊÍ« ÊÍ'Ñ–Øm€0ÞãtÆZÀ"‚š¤eØåå DÔI@Õ|Â"À‹ŠÍ£` Ë6ž3jPÜF6 °¤& �€�¦mC �XT€&Éz³@»ê–ë„—(„r³@V „@—(‡€9D À•›NÀ!p”C‡À¬ÐÂ"Ú@­¤"À¬ãtÇA€:*¢’ ¤Ä›C@"-¨ám`mm@(«k9D%•š2c¡ -eAINb!€¢ÊÍ« ÊÍ'Ñ–Øm€0ÞãtÆZÀ"‚š¤eØåå3m°33mà3nQ“ I‰ÓÐmwfÜ€f>fØ$åãà(‡!9Y¶<U�€bðú£7ŸFw(„r³m Å¥BÀD ”B9Y¶Ì›tø›CA˜Ð›D€@ЛFBŒ˜èxARCTAN˜ˆ3nh6�ƒ2p6ë@à(‡'9D9HÊͼ  ÚLÉÀ Ú| È€ ڈȀ Ú”dÆHÀb‚š¤d° (&"F~€"*ŠLe@ ,'¨FB@b*’”dì ¦¢N…�TTÕPåå   AMDIO FPRTNS ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååP OF RECURSION STACK *) @EFL : ^INTEGER; (* USED BY FULLHEAP *) @FRL : RECORD LINK : ^INTEGER; SIZE : INTEGER END; (* USED ALSO BY FULLHEAP *) INPUT, OUTPUT: FIB; (* DEFAULT CONSOLE FILES *) @TFN: STRING[2]; (* FSYSMEM) + 2; (* SO SYSMEM POINTS TO FREE AREA *) @SFP := GETSP - HW_STACK_SIZE; @TFN := '00'; WITH INPUT DO BEGIN IOSIZE := 1; BUFLEN := 1; OPTION := FCONIO; FTEXT := TRUE; FBUFFER[0] := ' '; FBUFADRååååOR TEMP. FILE NAMES *) @SYSIN, @SYSOU: INTEGER; (* I/O VECTORS *) @RNC, @WNC: EXTERNAL INTEGER; (* REALLY SUBROUTINES BUT JUST *) (* NEED THESE TO GET THEIR ADDRESSES *) (*$E-*) (* HIDE GETSP *) FUNCTION GETSP:INTEGER; VAR := WRD(ADDR(INPUT.FBUFFER)) END; WITH OUTPUT DO BEGIN IOSIZE := 1; BUFLEN := 1; OPTION := FCONIO; FTEXT := TRUE; FBUFFER[0] := ' '; FBUFADR := WRD(ADDR(OUTPUT.FBUFFER)) END; @SYSIN := ADDRMODULE CPMREADCONSOLE; (*$M @CPMRD*) (*$M **) TYPE IOBUF = RECORD MAXLEN : BYTE; RETLEN : BYTE; IOBUF : ARRAY [0..254] OF CHAR END; EXTERNAL FUNCTION @BDOS(FUNC,PARM:INTEGER):INTEGER; PROCEDURE @CPMRD(VAR BUF:IOBUF); VååMODULE INITIALIZE; CONST HW_STACK_SIZE = 128; (* NUMBER OF BYTES RESERVED FOR HARDWARE STACK *) (* CHANGE IS HEAVY RECURSION IS USED *) (*$I FIBDEF.LIB*) VAR SYSMEM : EXTERNAL INTEGER; (* TOP OF HEAP *) @SFP : EXTERNAL INTEGER; (* TO TEMPINT: INTEGER; (* FOR CAPTURING STACK POINTER *) BEGIN INLINE("LXI H / 0 / 0 / "DAD SP / "SHLD / TEMPINT); GETSP := TEMPINT END; (*$E+*) PROCEDURE @INI; BEGIN @FRL.LINK := NIL; @FRL.SIZE := 0; @EFL := NIL; SYSMEM := ADDR((@RNC); @SYSOU := ADDR(@WNC) END; MODEND. CONIO; FTEXT := TRUE; FBUFFER[0] := ' '; FBUFADR := WRD(ADDR(OUTPUT.FBUFFER)) END; @SYSIN := ADDRAR RESULT : INTEGER; BEGIN RESULT := @BDOS(10,ADDR(BUF)) END; MODEND.  : ARRAY [0..254] OF CHAR END; EXTERNAL FUNCTION @BDOS(FUNC,PARM:INTEGER):INTEGER; PROCEDURE @CPMRD(VAR BUF:IOBUF); V   ååMODULE HALTMODULE; (* AN EQUIVALENT MODULE TO THE @HLT IN PASLIB *) (* USEFUL FOR ROM-BASED APPLICATIONS IN WHICH PROGRAM TERMINATION IS *) (* USED *) PROCEDURE @HLT; BEGIN INLINE("JMP / 0 / 0) END; MODEND. åå (* IF CONSOLE/TERMINAL FILE *) BEGIN GET(@LFB^,@LFB^.BUFLEN); @RNC := @LFB^.FBUFFER[0] END ELSE BEGIN @RNC := @LFB^.FBUFFER[0]; (* @RNC := F^ *) GET(@LFB^,@LFB^.BUFLEN); (* GET(F) *) ååååå END END; MODEND.  BEGIN @RNC := @LFB^.FBUFFER[0]; (* @RNC := F^ *) GET(@LFB^,@LFB^.BUFLEN); (* GET(F) *) ååååMODULE RDNXCH; (*$M @RNC*) (*$M **) (*$I FIBDEF.LIB*) VAR @LFB: EXTERNAL ^FIB; EXTERNAL PROCEDURE GET(VAR F:FIB; SZ:INTEGER); FUNCTION @RNC:CHAR; BEGIN IF @LFB^.OPTION > FRANDOM THEN (* DON'T GIVE BUFFER, BUT READ DIRECTLY *) å   åå WORD; (* POINTER TO FBUFFER *) FSECINX: 0..128; (* INDEX INTO FSECTOR +1 FOR OVERFLOW *) FTEXT : BOOLEAN; (* TRUE IF THIS IS A TEXT FILE! *) NOSECTRS:BOOLEAN; (* TRUE IF NO MORE DISK DATA AVAILABLE *) FSECTOR: PACKED ARRAY [0..127] OF CHAR; (* 1åMODULE WRNXCH; (*$M @WNC*) (*$M **) (*$I FIBDEF.LIB*) VAR @LFB: EXTERNAL ^FIB; EXTERNAL PROCEDURE PUT(VAR F:FIB; SZ:INTEGER); PROCEDURE @WNC(CH:CHAR); BEGIN @LFB^.FBUFFER[0] := CH; (* F^ := CH *) PUT(@LFB^,@LFB^.BUFLEN) (* PUT(åå (* FIB LAYOUT *) TYPE OPTTYPE = (NOTOPEN,FWRITE,FRDWR,FRANDOM,FCONIO,FTRMIO,FLSTOUT); FIB=RECORD FNAME : STRING[16]; (* d:filename.ext *) FCB : PACKED ARRAY [0..34] OF CHAR; (* CP/M FILE CONTROL BLOCK *) BUFLEN : INTEGER; (* SI SECTOR BUFFER FOR CP/M *) FBUFFER: PACKED ARRAY [0..0 ] OF CHAR; END;  IS A TEXT FILE! *) NOSECTRS:BOOLEAN; (* TRUE IF NO MORE DISK DATA AVAILABLE *) FSECTOR: PACKED ARRAY [0..127] OF CHAR; (* 1åF) *) END; MODEND. ; SZ:INTEGER); PROCEDURE @WNC(CH:CHAR); BEGIN @LFB^.FBUFFER[0] := CH; (* F^ := CH *) PUT(@LFB^,@LFB^.BUFLEN) (* PUT(ååZE OF FBUFFER *) BUFIDX : INTEGER; (* CURRENT INDEX INTO FBUFFER *) OPTION : OPTTYPE; IOSIZE : INTEGER; (* SIZE OF NEXT TRANSFER *) FEOLN : BOOLEAN; (* TRUE IF TEXT FILE AT END-OF-LINE *) FEOF : BOOLEAN; (* TRUE IF AT END-OF-FILE *) FBUFADR:åååå   åE IS ACTUALLY EXECUTED AT 80H+SYSBASE ; THIS ALLOWS THIS ROUTINE TO RESIDE ANYWHERE AND ; BE MOVED TO 80H+SYSBASE JUST BEFORE EXECUTION THIS ROUTINE ALSO ; NOW USES THE DEFAULT FILE CONTROL BLOCK. ; INCLUDE BCONFIG.LIB IF TRS80 SYSBASE SET 420; NOTE: THIS CODE ACTUALLY IS MOVED TO 80H+SYSBASE ; PRIOR TO EXECUTION ; RTPCHN1: POP D ;GET ADDR OF I/O BUFFER PUSH D ;SAVE IT AGAIN MVI C,26 ;SETDMA CALL TO BDOS CALL BDOS ; POP H ;NOW BUMP IT BY 128 LXI D,128 ; DAD D ; å7]; RWFILE = (RESETT,REWRITTE); FYLE = FILE; SUM_TYPE = (SHORT,LONG); VAR FIN : TEXT; FOUT : TEXT; NAME : FILENAME; STR : STRING; I : INTEGER; CPMCMDBUF : ABSOLUTE[$80] PACKED ARRAY [0..CPMLINESZ] OF CHAR; CPMSTR : STRING[CPM } { Inputs: File,whether to reset or rewrite, and name of file. } { Outputs: File open for reading or writing. True if successful,} { false if not successful. } { Last Mod: å0H ELSE SYSBASE SET 0 ENDIF @CHN:: RTPCHAIN: POP H POP D ;GET FCB ADDRESS LXI B,33 LXI H,5CH+SYSBASE PUSH H PUSH D PUSH B CALL @MVL## ;MOVE FCB TO DEFAULT AREA IF TRS80 LXI SP,4300H ELSE LXI SP,100H ENDIF LPUSH H ;SAVE IT AGAIN LXI D,5CH+SYSBASE ;GET FCB ADDRESS MVI C,20 ;REQUEST A READ CALL BDOS ; CPI 1 ;END OF FILE? JNZ 80H+SYSBASE ;(RTPCHN1) RELOCATED POP H ;WHEN DONE FLUSH THE STACK JMP 100H+SYSBASE ;AND OFF TO THE NEWLY LOADED PROGRPROGRAM INDEXIT; {-------------------------------------------------------} {Purpose : Find procedure and function declarations and} { output them in alphabetical order to a file } {Inputs : File to be indexed. } {OLINESZ]; PROGFLG : BOOLEAN; SUMMARY : SUM_TYPE; EXTERNAL FUNCTION KEYPRESSED:BOOLEAN; EXTERNAL PROCEDURE @HLT; PROCEDURE ABORT; BEGIN WRITELN; WRITELN('Pascal/MT+ Program Index utility aborted from console'); @HLT END; FUNCTION } {---------------------------------------------------------------} BEGIN ASSIGN(F,NAME); IF RW = RESETT THEN RESET(F) ELSE REWRITE(F); IF IORESULT = 255 THEN DOFILE := FALSE ELSE DOFILE := TRUE; END; ;----------------------------------------------------------------; ; ; ; MODULE - @CHN ; ; LAST UPDATE: AUG 15, 1980 ; ; ; ;----------------------------------------------------------------; ; ; NOTE: THE BODY OF THIS ROUTINXI H,100H+SYSBASE PUSH H ;SAVE READ-IN LOCATION (ON THE NEW STACK) ; ; NOW MOVE THE REAL WORKHORSE ROUTINE TO 80H ; LXI D,RTPCHN1 LXI H,80H LXI B,RTNLEN PUSH H PUSH D PUSH B CALL @MVL## JMP 80H+SYSBASE ;AND GO FINISH IT OFF ; AM RTNLEN EQU $-RTPCHN1 END JNZ 80H+SYSBASE ;(RTPCHN1) RELOCATED POP H ;WHEN DONE FLUSH THE STACK JMP 100H+SYSBASE ;AND OFF TO THE NEWLY LOADED PROGRutputs : File of procedures and functions } {CREATED : Jan 31, 1981 NJL } {-------------------------------------------------------} CONST CPMLINESZ = 127; TYPE STRNG=STRING[20]; FILENAME = STRING[12 DOFILE(VAR F : TEXT;RW : RWFILE; NAME : FILENAME) : BOOLEAN; {---------------------------------------------------------------} { Purpose: Attempt to reset or rewrite the given file. Check } { IORESULT.  PROCEDURE GETNAME(VAR OUTSTR : FILENAME); {---------------------------------------------------------------} { Purpose: Read a name from the keyboard, return in STR. } { Inputs: CPMCMDBUF. } { Outputs   : STR contains name of file if it was given to start. } { Last Mod: 11/23/80 } {---------------------------------------------------------------} BEGIN OUTSTR := ''; WHILE (LENGTH(STR) <> 0) AND (STR[1] <----------------------------------------} { Purpose: Return true if the string KEYWORD } { the first string on the input line STR. If it is } { not first or is not present return false. } { Inputs: K PROCEDURE TRANSFER(VAR STR : STRING); {---------------------------------------------------------------} { Purpose: Transfer lines from FIN to FOUT until the next proc/ } { func or begin is encountered. } { Inputs: STR (FOUT,TSTRING); IF SUMMARY = LONG THEN REPEAT READLN(FIN,TSTRING); WRITE('.'); IF KEYPRESSED THEN ABORT; SHORTSTR := TSTRING; IF (PRESENT('BEGIN',SHORTSTR)) THEN DONE := TRUE ELSE BEGIN I WHILE NOT EOF(FIN) DO BEGIN IF PRESENT('PROCEDURE',STR) THEN TRANSFER(STR) ELSE IF PRESENT('FUNCTION',STR) THEN TRANSFER(STR); READLN(FIN,STR); WRITE('.'); IF KEYPRESSED THEN E); IF DOFILE(FOUT,REWRITTE,NAME) THEN BEGIN GETNAME(NAME); WRITELN('Summary form: ',NAME); IF NAME[1] IN ['L','l'] THEN SUMMARY := LONG ELSE SUMMARY := SHORT; READLN(FI> ' ') DO BEGIN OUTSTR := CONCAT(OUTSTR,STR[1]); DELETE(STR,1,1) END; IF LENGTH(STR) <> 0 THEN DELETE(STR,1,1); (* DELETE NEXT BLANK *) END; FUNCTION STRIPBLNKS(S : STRING):INTEGER; VAR I : INTEGER; BEGEYWORD,STR. } { Outputs: Function return value of true or false. n} { Last Mod: 11/23/80 } {---------------------------------------------------------------} contains the line with the PROC, FUNC or PROG def} { FIN provides the text. } { Outputs: STR contains the line containing a PROC, FUNC def or } { a begin. FOUT contains new text. } { LF (PRESENT('FUNCTION',SHORTSTR)) OR (PRESENT('PROCEDURE',SHORTSTR)) THEN BEGIN WRITELN(FOUT); WRITELN(FOUT); END; WRITELN(FOUT,TSTRING) END UNTIL ( EOF(FIN)) OR (DONE); IF S ABORT; END; END; BEGIN MOVE(CPMCMDBUF,STR,CPMLINESZ + 1); (* COPY COMMAND TAIL *) IF LENGTH(STR) <> 0 THEN DELETE(STR,1,1); (* STRIP CP/M'S LEADING BLANK *) WRITELN('Pascal/MT+ Program Index UtiliN,STR); WRITE('.'); TRANSFER(STR); DOINDEX; CLOSE(FOUT,I); WRITELN('Pascal/MT+ Program Index utility processing complete'); END ELSE WRITELN('Cannot create ',NAME) END ELSE WRIN STRIPBLNKS := 0; I := 1; WHILE (S[I] = ' ') AND (I <= LENGTH(S)) DO I := I + 1; IF I > LENGTH(S) THEN STRIPBLNKS := 0 ELSE STRIPBLNKS := I; END; FUNCTION PRESENT(KEYWORD,STR : STRING):BOOLEAN; {-----------------------VAR FIRSTCH : INTEGER; BEGIN FIRSTCH := STRIPBLNKS(STR); IF FIRSTCH <> 0 THEN BEGIN IF POS(KEYWORD,STR) = FIRSTCH THEN PRESENT := TRUE ELSE PRESENT := FALSE END ELSE PRESENT := FALSE; END; ast Mod: 11/23/80 } {---------------------------------------------------------------} VAR SHORTSTR : STRING[25]; DONE : BOOLEAN; TSTRING : STRING; BEGIN DONE := FALSE; TSTRING := STR; WRITELNUMMARY = SHORT THEN BEGIN READLN(FIN,TSTRING); WRITE('.') END; IF KEYPRESSED THEN ABORT; STR := TSTRING; WRITELN(FOUT); WRITELN(FOUT); END; PROCEDURE DOINDEX; VAR I : INTEGER; STR : STRING; BEGIN ty -- Release 5.2'); WRITELN('Copyright (c) 1981 by MT MicroSYSTEMS'); WRITELN; GETNAME(NAME); WRITELN('Reading text from: ',NAME); IF DOFILE(FIN,RESETT,NAME) THEN BEGIN GETNAME(NAME); WRITELN('Output directed to: ',NAMITELN('Cannot open ',NAME); END. øEEEAM N÷×çýÇEí{ïïsîbÜnÿÿú0N¥…>ÿþ2 ù¾Š¢·×[Ò‡ýÅŠG   åå…ÐT�ÕS�e€EÀ&Ã`Äš3@ff€ ÚÀ Ú,f€ Ú8 Ä ÚF<.Úäöm)bm fÓ“ín³@m:bm7fÔP‘ñ^Á}3j6§16¥€3jÈIúšœµX›X€€›WÀµ´$}mPLÚÔÍ®À @Í®` Û$OìFm~fØ  fØpm• ™‹· 6É3lð3lØ6Ô€Ÿê¥Q¡›i€¶Èˆ¶¼B9Y¶ôÍ·D$HÈ@@RSBŒë€D$ÔÈΰ @RDVŒ‘D$äxÊÀ@XOPœ…ÑVÓ‘S¥€A06Ã` ˜ƒ€3@‹3@f f€ Ú(Ä Ú: Ä€Êͤ`†m-b€V>-ÞU^g>‹Íâ1,bÀ(„r³@‹JÕ€ ±`”B9Y Å¥^€´Äе˜‰ 6¶1@«9D •š8DX°›]@�›b€ÌÚäͲÌH*Å€Qåf€�˜(›U€‚@%kà¦*Â@VmfÕÀ ffÖ° f×  fÐ�mUf×p faЀ6mƒ` mŒ ”¬‘»4fÓ'‹Jý3l�3lÐ6Ÿ8DXH›i€(U„€¬ÛhfÖm¾` mÅ •¯‚˜« 9Y´›rÀ�˜8›v€€8›x€(›B@´\ ›y€�˜‡BÙ·È$H\ÖŒÛö À ÚÀ ÚdÆ]b‚š¤eô (&"Fi@"*ŠLe@ '"¤Æ@¢*Š”f«€0P„r³jø!š Y öÈ„r³jH!›H€Y 6ª€ƒ0pò³jø@ +6´‚´âÒ±À,ÚäÁ@ Ú Í¯  Ìü€,Û Á@ÊÍ±à †mBx´­•VfÙp(fÚÀffÛ fÛ€£&bÍ¡  Û| Ç Ú4͸À#¢P\jfÜð8fÙ@m× ÕÄôË4fÞ8fÝÐmë ‘#s6ô3o 3oˆ6ÿ€�Š¥‰›´ Ž´›DÀBGåR¨šÍ¢,Ú8Ç Ú2ͤà!#ûýþùfÒ@m0c€m-fÓ°�þÿ~3iÀ 6¢€1À6 €ˆ@ +6§€‚µ0›WA˜¸›XÀ@¸›Z@BŒ˜èEXP˜‚3n6·€ƒt #ª)Fp€¢’ $eL ))¡F`¢’jdg¼ )"+Fj€¢’rŒ°�‡ 9»@ªÍ¥€ 8ͤ` Úh7.®&hͧ  8ͧ@ Ú�z4€6mEfÕfÔàm\ ‘„C6¬€3k(3k6¸ŸÊ¥R¡›[@µä‡µØB9Y¶Ͱ Û"à ÛͳÌÍ´ Í´àFLt ©¤§LA´4›k@˜(›E€¶Ô‚€ •›o€ ÐâÒ à,Û�Á@ Û¦²Aí¦mÙ` má Ù öÓ4f€ ÛÎfÙàh; Ìçååø 6Ì€„€,�{dB9Y¶�Í« ,Û` ÁÀ ;ÈͶà! $Ù€@VmÀ` mÌ3m  6ƒ3i@ 6éƒ0p60p6ò€„€,�{eš³hp 6�€0ð6‹€³i(Hÿ°´ˆ›K€@x›JÀY´ä…µ…µ (ÉŽ�€$Äéˆ 6Ì€3jp33m6€,ÛþÁ@ Ú²Aí¦m` m Ù öÓ6÷€3@mòfÑÀC6ü€3l¨6–€ƒ0P6›€€0P6ž€„€,�{e›s-*Üͨ`! $ÚfÕ  fßÀmfÕ faÛPmf` mo Y öË6“€³jX Å¥fYµÔ‚€´›aÀA˜‡m@Y¶@$dƒÛLÛ2Á@ ÚhÍ À ÚúÍ´ ÌͶ ͶÀ!FLt$¡§©ÌB€¶È›oA˜¨›nÀ·$Z�LÛšÅ@    Êͺ  †m$fÐ0m1fÝðf.€@Vmìbàmö3k„r³oà3h8)›iÀY·¤›C@�˜€›EÀ€€›G@‚Œ˜Î @PSTŒåÄÄHÌ @GTRŒˆ�D$HÈ@RSBŒŠD$ÔÈÏ @RDVŒÖ€Ä$äxÉ@XOPŒ•Õ$õTäIÀžåÖá9°ë „rˆAà+EÂ+rµDXà¢á¹Z¬Ú¾"Ì€¬p#c€Vdˆ³ ñjʲ`B¬`åc€+4x´¯˜‡± ‡±�¼U�b¬d~u£Žâ0›¬üëGÄa7YùÖŽ;ˆÂn³ó­w€Ñ–&€Q åh¸EnV¨‹4\"7+U›gÀDY˜U�€b,l*ÌÀ±f>-YV@C‹b¬l γèËq`¬U�€.Q,uб°d,/5D •š8]n˜ë €ö•z(¬U�iSyé8gd@VDrбà•š¨Ãí*bú€Â¬ ëe ÚTÞzNÄY`U”€, eÖ*Ë@—(«)H@Ë”U–¬Ûf *Ê@QV`r³h0„E—YpÊ!¬ÚHñiWàv/f(åå…ÔPÒÑQe €CàˆM-ISEEKWR€J˜` a€ 0†0ÀèREADRAN˜‚3@‹8DX0šC@(«H@Ë•šŽ—(„u¸Nb¬xåc (‡%9D9ÊÍ¡ ¬”ådX«EnQ åf€ˆdE�€ ‹# ²P”U�€­­ÊÕdÀ‹„Fåj³h€‹4 ²`ŒE“Y V"ÍÅ«*˜‚в`”U’€¬ÐâÒ¬À‚¬|ådÀ+6�€8DY U’¢ÊÍ-**Ã^rˆr •›B@YxÊ*Ê€±VP ŠÜ¢Ê͵ nˆdE•€ ‹- ²ð”U•€­­ÊÕf‹„Fåj³nh‹5 ³ŒE˜Y¨V"Í@Å«*— ³”U—€¬ÚÞñi^aVRrг•›@À",¸*Ë€Qåf߀AV\rˆ@ +6£8Z'Õ½Ê*Ë€QåfÕg Dú£´«x3  ±VT=¥Mç¤áœE–Y`Ê*ÊVm.x´¬ 0«(²À«)X@ˬU–€.QVRLd\" '"¤Æb¢:¢Lep &)¤ÆAÁ¢2JteÄ )£!Fib"º$fœ +©)ÆKÂ:’*šªb¢Lf´ $&*F}@*"zœgØ *)ª!$ªFw@ššBdd)¢ª!$ªF[Arzª¢‚ª¤gô&§«"ÆmÀ²b’J¤àžå    å *) (* *) (* LAST UPDATE: 09-MAR-81 by Mike Lehman *) (* *) (* NOTE: THIS PROGRAM WAS ORIGINALLY WRITTEN BY  *) (* THIS PROGRAM PRODUCES A CROSS-REFERENCE LISTING FOR ANY *) (* PASCAL PROGRAM. OCCURENCES ONLY ARE LISTED. NO DISTINCTION IS *) (* MADE BETWEEN DEFINITIONS AND REF^ITEM; WORD = RECORD KEY: ALFA; FIRST, LAST: ITEMPTR; FOL: INDEX END ; NUMREFS = 1..REFSPERITEM; REFTYPE = (COUNT, PTR); ITEM = RECORD REF : ARRAY[NUMREF RESERVED KEYWORD TABLE *) ERROR, (* ERROR FLAG *) LISTING: BOOLEAN; (* LISTING OPTION *) INFILE: TEXT; LST : TEXT; LSTFILENAME : STRING; INPUT_LINE : STRING; PROCEDURE INITIALIZEALF; BEGIN KEY[17] := 'GOTO '; KEY[18] := 'IF '; KEY[19] := 'IN '; KEY[20] := 'INPUT '; KEY[21] := 'INTEGER '; KEY[22] := 'MOD '; KEY[23] := 'NIL '; KEY[24] := 'NOT '; KEY[25] := 'OF '; åN. WIRTH AND *) (* ADAPTED FOR UCSD PASCAL (I.4 - THE PUBLIC DOMAIN VERSION) *) (* BY SHAWN FANNING (IN 1978) AND SUBSEQUENTLY ADAPTED FOR *) (* PASCAL/MT+ BY MIKE LEHMAN (IN 1981) AND IS A PUBLIC DOMAIN *) (* PROGRAM. IF YOU MAKE REVERENCES. *) (*====================================================================*) PROGRAM XREF; (*CROSS REFERENCE GENERATOR FOR PASCAL PROGRAMS. N.WIRTH, 7.5.74*) (*'QUADRATIC QUOTIENT' HASH METHOD*) CONST S] OF INTEGER; CASE REFTYPE OF COUNT: (REFNUM: NUMREFS); PTR: (NEXT: ITEMPTR) END ; BUFFER = PACKED ARRAY[0..131] OF CHAR; VAR TOP: INDEX; (*TOP OF CHAIN LINKING ALL EN; VAR I : INTEGER; PROCEDURE FIRSTHALF; BEGIN KEY[ 1] := 'AND '; KEY[ 2] := 'ARRAY '; KEY[ 3] := 'BEGIN '; KEY[ 4] := 'BOOLEAN '; KEY[ 5] := 'CASE '; KEY[ 6] := 'CHAR '; KEY[ 7] := 'CONST '; KEY[ 8] : KEY[26] := 'OR '; KEY[27] := 'OUTPUT '; KEY[28] := 'PACKED '; KEY[29] := 'PROCEDUR'; KEY[30] := 'PROGRAM '; KEY[31] := 'REAL '; KEY[32] := 'RECORD '; KEY[33] := 'REPEAT '; KEY[34] := 'SET '; KEY[35] :=(*====================================================================*) (* PROGRAM TITLE: PASCAL CROSS-REFERENCING PROGRAM *) (* *) (* PROGRAM FILE: XREF.SRC ISIONS, ETC. PLEASE LEAVE THE AUTHOR *) (* AND MODIFIERS NAME IN THE SOURCE FILE. THANK YOU. *) (* *) (* PROGRAM SUMMARY: *) (* P = 749; (*SIZE OF HASHTABLE*) NK = 45; (*NO. OF KEYWORDS*) ALFALEN = 8; REFSPERLINE = 15; REFSPERITEM = 5; TYPE ALFA = PACKED ARRAY[1..ALFALEN] OF CHAR; INDEX = 0..P; ITEMPTR = TRIES IN T*) I,LINECOUNT,BUFCURSOR: INTEGER; (*CURRENT LINE NUMBER*) FF,CH: CHAR; (*CURRENT CHAR SCANNED *) BUF,BUF1,BUF2: ^BUFFER; T: ARRAY [INDEX] OF WORD; (*HASH TABLE*) KEY: ARRAY [1..NK] OF ALFA; (*= 'DIV '; KEY[ 9] := 'DOWNTO '; KEY[10] := 'DO '; KEY[11] := 'ELSE '; KEY[12] := 'END '; KEY[13] := 'EXIT '; KEY[14] := 'FILE '; KEY[15] := 'FOR '; KEY[16] := 'FUNCTION'; END; PROCEDURE SECONDH 'STRING '; KEY[36] := 'TEXT '; KEY[37] := 'THEN '; KEY[38] := 'TO '; KEY[39] := 'TYPE '; KEY[40] := 'UNTIL '; KEY[41] := 'VAR '; KEY[42] := 'WHILE '; KEY[43] := 'WITH '; KEY[44] := 'WRITE ';      KEY[45] := 'WRITELN '; END; BEGIN (* INITIALIZE *) WRITELN; WRITELN('Pascal/MT+ Program Xref Utility -- Release 5.2'); WRITELN('This program is public domain'); WRITELN; FF:=CHR(12); NEW(BUF1); NEW(BUF2); BUF:=BUF1; SSIGN(INFILE, FILENAME ); RESET(INFILE) END; OPENERRNUM := IORESULT; OPENOK := ( OPENERRNUM <> 255 ); IF NOT OPENOK THEN WRITELN( '*** INPUT OPEN ERROR #', OPENERRNUM ); UNTIL OPENOK; WRITE('Output file nam LINECOUNT:=LINECOUNT+1; IF (LINECOUNT MOD 60) = 0 THEN PAGE(LST); END; PROCEDURE PUTALFA(S:ALFA); BEGIN MOVELEFT(S[1],BUF^[BUFCURSOR],8); BUFCURSOR:=BUFCURSOR+8; END; PROCEDURE PUTNUMBER(NUM: INTEGER); VAR I,IPOT:INTEGER; A: IF LENGTH(INPUT_LINE) = 0 THEN READLN(INFILE,INPUT_LINE); IF LENGTH(INPUT_LINE) = 0 THEN CH := ' ' ELSE BEGIN CH:=INPUT_LINE[1]; DELETE(INPUT_LINE,1,1) END; IF EOF(INFILE) THEN ERROR:=TRUE ELSE PUTNUMBER(LINECOUNT); END ELSE BEGIN BUFCURSOR:=0; WRITE('.') END; IF (LINECOUNT MOD 60) = 0 THEN BEGIN IF LISTING THEN PAGE(LST);  F := TRUE; IF T[H].LAST^.REFNUM = REFSPERITEM THEN BEGIN NEW(X); X^.REFNUM := 1; X^.REF[1] := LINECOUNT;  ERROR := FALSE; FOR I := 0 TO P DO T[I].KEY := ' '; FIRSTHALF; SECONDHALF; LINECOUNT:= 0; BUFCURSOR:= 0; TOP := P; CH := ' ' END; (* INITIALIZE *) PROCEDURE OPENFILES; VAR NUMBLOCKS: INTEGER; e? '); READLN(LSTFILENAME); ASSIGN(LST,LSTFILENAME); REWRITE(LST); WRITE( 'Do you want a listing ? ' ); READ( LISTOPTION ); LISTING := NOT(LISTOPTION = 'N'); IF LISTING THEN PUTNUMBER(0); READLN(INFILE,INPUT_LINE); WRIALFA; CH: CHAR; ZAP:BOOLEAN; BEGIN ZAP:=TRUE; IPOT:=10000; A[1]:=' '; FOR I:= 2 TO 6 DO BEGIN CH:=CHR(NUM DIV IPOT + ORD('0')); IF I <> 6 THEN IF ZAP THEN IF CH = '0' THEN C BEGIN BUF^[BUFCURSOR]:=CH; BUFCURSOR:=BUFCURSOR+1; IF LENGTH(INPUT_LINE) = 0 THEN BEGIN BUF^[BUFCURSOR]:=CHR(13); BUFCURSOR:=BUFCURSOR+1; LINECOUNT:= LINECOUNT +1;  WRITELN(OUTPUT,'< ',LINECOUNT:4,',',MEMAVAIL:5,' >'); END; END; END; END; (* GETNEXTCHAR *) PROCEDURE SEARCH( ID: ALFA ); (*MODULO P HASH SEARCH*) (*GLOBAL: T, TOP*) VAR I,J,H,D : INTEGER;  T[H].LAST^.NEXT:= X; T[H].LAST := X; END ELSE WITH T[H].LAST^ DO BEGIN REFNUM := REFNUM +  OPENOK: BOOLEAN; OPENERRNUM : INTEGER; LISTOPTION: CHAR; FILENAME: STRING; BEGIN (* OPEN *) REPEAT WRITELN; WRITE( 'Input file ? ' ); READLN( FILENAME ); IF LENGTH(FILENAME) >0 THEN BEGIN ATELN; END; (* OPEN *) PROCEDURE LPWRITELN; VAR I : INTEGER; BEGIN BUF^[BUFCURSOR]:=CHR(13); BUFCURSOR:=BUFCURSOR+1; FOR I := 0 TO BUFCURSOR-1 DO WRITE(LST,BUF^[I]); IF BUF = BUF1 THEN BUF:=BUF2 ELSE BUF:=BUF1; BUFCURSOR:=0; H:=' ' ELSE ZAP:=FALSE; A[I]:=CH; NUM:=NUM MOD IPOT; IPOT:=IPOT DIV 10; END; A[7]:=' '; MOVELEFT(A,BUF^[BUFCURSOR],7); BUFCURSOR:=BUFCURSOR+7; END; PROCEDURE GETNEXTCHAR; VAR I : INTEGER; BEGIN  IF LISTING THEN BEGIN IF LSTFILENAME <> 'CON:' THEN WRITE('.'); FOR I := 0 TO BUFCURSOR-1 DO WRITE(LST,BUF^[I]); IF BUF = BUF2 THEN BUF:=BUF1 ELSE BUF:=BUF2; BUFCURSOR:=0; X : ITEMPTR; F : BOOLEAN; BEGIN J:=0; FOR I:= 1 TO ALFALEN DO J:= J*10+ORD(ID[I]); H := ABS(J) MOD P; F := FALSE; D := 1; REPEAT IF T[H].KEY = ID THEN BEGIN (*FOUND*) 1; REF[REFNUM] := LINECOUNT END END ELSE IF T[H].KEY = ' ' THEN BEGIN (*NEW ENTRY*) F := TRUE;      NEW(X); X^.REFNUM := 1; X^.REF[1] := LINECOUNT; T[H].KEY := ID; T[H].FIRST := X; T[H].LAST := X; T[H].FOL  END ; END UNTIL F OR ERROR END (*SEARCH*) ; PROCEDURE PRINTWORD(W: WORD); VAR L: INTEGER; X: ITEMPTR; NEXTREF : INTEGER; THISREF: NUMREFS; BEGIN PUTALFA(W.KEY); X := W.FIRST; L := 0;  (*PRINTWORD*) ; PROCEDURE PRINTTABLE; VAR I,J,M: INDEX; BEGIN I := TOP; WHILE I <> P DO BEGIN (*FIND MINIMAL WORD*) M := I; J := T[I].FOL; WHILE J <> P DO BEGIN IF REPEAT IF I < ALFALEN THEN BEGIN I := I+1; IF ('a' <= CH) AND (CH <= 'z') THEN ID[I] := CHR( ORD(CH) - ORD('a') + ORD('A') ) ELSEF *) INITIALIZE; OPENFILES; WHILE (NOT(EOF(INFILE))) AND (NOT( ERROR)) DO BEGIN IF ((CH>='A') AND (CH<='Z')) THEN GETIDENTIFIER ELSE IF (CH = '''') THEN BEGIN REPEAT  GETNEXTCHAR; END; GETNEXTCHAR; END; END ELSE GETNEXTCHAR; END; (* WHILE *) PAGE(LST); LINECOUNT := 0; BUFCURSOR := 0:= TOP; TOP := H END ELSE BEGIN (*COLLISION*) H := H+D; D := D+2; IF H >= P THEN  REPEAT IF L = REFSPERLINE THEN BEGIN L := 0; LPWRITELN; PUTALFA(' '); END ; L := L+1; THISREF := (L-1) MOD REFSPERITEM + 1; NEXTREF := X T[J].KEY < T[M].KEY THEN M := J; J := T[J].FOL END ; PRINTWORD(T[M]); IF M <> I THEN BEGIN T[M].KEY:=T[I].KEY; T[M].FIRST:=T ID[I] := CH END; GETNEXTCHAR UNTIL ( NOT(((CH>='A') AND (CH<='Z')) OR ((CH>='a') AND (CH<='z')) OR ((CH>='0') AND (CH<='9')))) OR (ERROR); I := 1; J := NK; REPEAT K := (I+J) GETNEXTCHAR; UNTIL (CH = '''') OR (ERROR); GETNEXTCHAR; END ELSE IF CH = '(' THEN BEGIN GETNEXTCHAR; IF CH = '*' THEN ; PRINTTABLE; PAGE(LST); CLOSE(LST,I); IF I = 255 THEN WRITELN('Error closing output file') END. ND ELSE GETNEXTCHAR; END; (* WHILE *) PAGE(LST); LINECOUNT := 0; BUFCURSOR := 0 H := H - P; IF D = P THEN BEGIN WRITELN(OUTPUT,'TBLE OVFLW'); ERROR := TRUE ^.REF[ THISREF ]; IF THISREF = X^.REFNUM THEN X := NIL ELSE IF THISREF = REFSPERITEM THEN X := X^.NEXT; PUTNUMBER(NEXTREF); UNTIL X = NIL; LPWRITELN; END[I].FIRST; T[M].LAST:=T[I].LAST; END; I := T[I].FOL END END (*PRINTTABLE*) ; PROCEDURE GETIDENTIFIER; VAR J,K,I: INTEGER; ID: ALFA; BEGIN (* GETIDENTIFIER *) I := 0; ID := ' '; DIV 2; (*BINARY SEARCH*) IF KEY[K] <= ID THEN I := K+1; IF KEY[K] >= ID THEN J := K-1; UNTIL I > J; IF KEY[K] <> ID THEN SEARCH(ID); END; (* GETIDENTIFIER *) BEGIN (* CROSSRE BEGIN GETNEXTCHAR; WHILE (CH <> ')') AND (NOT(ERROR)) DO BEGIN WHILE (CH <> '*') AND (NOT(ERROR)) DO GETNEXTCHAR; å    åååÍ‚d!ê@å! +å!åÍeáÑåÍ%END á#å!åÍ‚d!ê@å! +å!åÍeáÑåÍOEXIT á#å!åÍ‚d!ê@å!+å!åÍeáÑåÍyFILE á#å!åÍ‚d!ê@å!+å!åÍeáÑåÍ£FOR á#å!åÍ‚d!ê@å!+å!åÍeáÑåÍÍFUNCTIONá#å!åÍ‚dÉ!ê@å!+å!åÍeáÑåÍøGOTO á#å!åÍ+å!åÍeáÑåÍPROGRAM á#å!åÍ‚d!ê@å!+å!åÍeáÑåÍDREAL á#å!åÍ‚d!ê@å! +å!åÍeáÑåÍnRECORD á#å!åÍ‚d!ê@å!!+å!åÍeáÑå͘REPEAT á#å!åÍ‚d!ê@å!"+å!åÍeáÑåÍÂSET á#å!åÍ‚d!ê@å!#+å!åÍeáÑåÍìSTRING á#å!åÍ‚d!ê@å!$+å!s public domainͯbÍ,cÍ}^!�FåÍ©bÍ}^! }2ß!âå!„åÍ`G!àå!„åÍ`G*â"ä!}2SB!å!íåÑá+åÕ"„DÑá#åÕͬ[" !åÍ%!TBåÍ©b!2Då!PåÍ _ÍŠ^!�FåÍ©bÍ}^É*äë*Øå! ëás*Ø#"Ø!å*Ø+åÑá+åÕ"àDÑá#åÕͬ[">E*àD#"àD*>E+">E|µÊ¿ !CåÍ©b*äë*àD^ÕͯbÍÊdÃ� *äå*âåÍ&bñÒ× *à"äÃÝ *â"ä!"Ø*Ú#"Ú*Úå!<åÍ^d!åÍ&bñÒ ëás*Ø#"Ø*Ú#"Ú:RB&Ò·!àCåÍ&CON:Íö[ñÒ>!�FåÍ©b!.åͯbÍÊd!å*Ø+åÑá+åÕ"üDÑá#åÕͬ["BE*üD#"üD*BE+"BE|µÊ‰!CåÍ©b*äë*üD^ÕͯbÍÊdÃZ*äå*àåÍ&bñÒ¡*â"äç*à"ä!"Ø*ÚåÍ%ÃÎ!"Ø!�FåÍ©b!.åͯbÍÊd*Úå!<åÍ^d!åÍ&bñÒA:RB&Òø!Cå!åÍ�N!�FåÍ©bÍ    < ͯbÍ,c*Úå!å!ÿÿå;^!,åͯbÍÊdÍfG!å!ÿÿå;^Í8 >ͯbÍ,cÍ}^ÉÍQ\!þDãå!åÍ‚dÍW\!" E!å!åÑá+åÕ" EÑá#åÕͬ["DE* E#" E*DE+"DE|µÊ©* Eå! åÍe!þDå* E+Ñ^ëÑ" EÃu* E|·ò·/g}/o#å!íåÍ^dá"E!}2E!"E!æå*Eå!åÍeáÑë!þDÍ^ñÒí!}2E!æå*Eå!å!íåÍ&bñÒ1!�FåÍ©bÍ! TBLE OVFLWͯbÍ,cÍ}^!}2SB:E&oå:SB&oÑ}³ÒÐÉÍQ\!Eãå!åÍ‚dÍW\!EåÍ"*E""E!" E* Eå!åÍ&bñÒ•!" EÍÍ� á#åÍ"* E#" E* E+å!åÍ^dá#}2&E*"Eå:&E&o+)Ñ^#Vë"$E:&E&oå*"E ^ÕÍ&bñÒå!""EÃ:&E&oå!åÍ&bñÒ*"E ^#:Þ&oë!a{•ozœgë!AëásÃ/!4Eå*.E+Ñå:Þ&oëásÍ(:Þ&oå!AåÍ=b:Þ&oå!ZåÍ…báÑ}£oå:Þ&oå!aåÍ=b:Þ&oå!zåÍ…báÑ}£oÑ}³oå:Þ&oå!0åÍ=b:Þ&oå!9åÍ…báÑ}£oÑ}³o}/oå:SB&oÑ}³Ò»!".E!-"2E*.Eë*2Eå!åÍTdá"0E!ê@å*0E+å!åÍeáÑë!4EÍd^ñÒø*0E#".E!ê@å*0E+åÍeáÑ^#Vë ^Õ!åÍ&bñÒš!Eå! åÍ`G*E å!ëás*Eå!+)Ñå*Úëás#r!æå*Eå!åÍeáÑ^#Vë å*Eëás#r!æå*Eå!åÍeáÑå*Eëás#rÃê!æå*Eå!åÍeáÑ^#Vë"FE*FE å*FE ^ë#ëás*FEå*FE ^ë+)Ñå*Úëás#rÃ1!æå*Eå!åÍeáÑåVë""E*$EåÍ%*"Eå!åÍ&bñÒkÍÉ*Ö",E*,Eå!íåÍnbñÒš*,E"(E!æå*,Eå!åÍeáÑ ^#Vë"*E**Eå!íåÍnbñÒ¼!æå**Eå!åÍeáÑå!æå*(Eå!åÍeáÑÑÍJ^ñÒœ**E"(E!æå**Eå!åÍeáÑ ^#Vë"*EÃW!æå*(Eå!åÍeáÑåÍ.*(Eå*,EåÍnbñÒz!æå*(Eå!åÍeáÑå!æå*,Eå!åå!åÍeáÑë!4EÍ[^ñÒ *0E+"2E*.Eå*2EåÍYbñÒ¼!ê@å*0E+å!åÍeáÑë!4EÍ'^ñÒW!4EåÍ+É*ùÍHEÍÍ!TBå!åÍðQá}/oå:SB&o}/oÑ}£Òc:Þ&oå!AåÍ=b:Þ&oå!ZåÍ…báÑ}£Ò¯Í4Ã`:Þ&oå!'åÍ&bñÒåÍ(:Þ&oå!'åÍ&b:SB&oÑ}³ÒÁÍ(Ã`:Þ&oå!(åÍ&bñÒ]Í(:Þ&oÍ  á#ÑÍ^ñÒÑ!}2E!Eå! åÍ`G*E å!ëás*Eå!+)Ñå*Úëás#r!æå*Eå!åÍeáÑå!þDå!åÍ‚d!æå*Eå!åÍeáÑ å*Eëás#r!æå*Eå!åÍeáÑå*Eëás#r!æå*Eå!åÍeáÑ å*Öëás#r*E"ÖÃ1*Eë*E"E*E##"E*Eå!íåÍ=bñÒý*Eý"E*EÍeáÑå!åÍ‚d!æå*(Eå!åÍeáÑ å!æå*,Eå!åÍeáÑ ^#Vëëás#r!æå*(Eå!åÍeáÑå!æå*,Eå!åÍeáÑ^#Vëëás#r!æå*,Eå!åÍeáÑ ^#Vë",EÃ%É!".E!4Eåͱ á#å!åÍ‚d*.Eå!åÍŽbñÒ/*.E#".E!aå:Þ&oåÍ…b:Þ&oå!zåÍ…báÑ}£Ò!4Eå*.E+Ñåå!*åÍ&bñÒZÍ(:Þ&oå!)åÍnb:SB&o}/oÑ}£ÒW:Þ&oå!*åÍnb:SB&o}/oÑ}£ÒQÍ(Ã-Í(ÃÍ(Ã`Í(Ãe!Cå!åÍ�N!"Ú!"ØÍ1!Cå!åÍ�N!Cå!å!ÜåÍ M*Üå!ÿåÍ&bñÒÓ!�FåÍ©bÍÊError closing output fileͯbÍ,cÍ}^ÍN\            !YG6#6#6#6!WG6#6!0e##"0e!€ÿ9"*e"$e"&e>2TG!00"UG!ÊE†6# x±Â„E!"F"þE"ÆF"ÁF>2F2ÅF>2 F2ÍF> 2ŒF!ŒF"F!OG"ÊF!MS"PG!ÃR"RGÉÃÃHÍQ\á"Já"JÍW\͵a*J^Õ!åÍ&bñÒÇH*JåÍ@H@:PASTMP00.$$$!åÍÏb!TGë!å*Jë! å!åÍ{d!TGë!å!TGë!^ë#ëás!TGë!^Õ!9åÍYbñÒ¸H!TGë!å!0ëás!TGë!å!TGë!^ë#ëás*Jå*Jå*JåÍþN*Jë! å!å!åͺd*Jå!ÿÿåÍ&bñÒ I*J@å!ëás*J}å!åͺd*M8å!ëás*Må!ÿÿåÍ&bñÒDK*M}/o|/g#"M*M@å!ëásÃRK*M@å!ëás*M<å!ëás*M;å!ëás*Më! å!ëás!¦[å*Mëás#r*M?å!€ëás*MAå!ëás*M8å!ëás*M9å*Mëás#r*M4å*Mëás#r*M=å*MÂëás#r*M^Õ!åÍ&b*MåÍtUrÃN*�Nå!ëás#r*…N8å!ëás͵aÉÍQ\á"‡Ná"‰Ná"‹NÍW\*‹N8^Õ!åÍYbñÒMNÃ~N*‹Nå*‰NåÍ S!¤[å!ëás#r*‡Nå!ëás#r*‹N8å!ëásÉÃÓNÍQ\á"ôNá"öNÍW\*ôNå!ÿÿåÍ&bñÒØN!å!�FåÍ©bͯbÍÊd!*åͯbÍÊd!åͯbÍÊdÃóN*öNåÍ©b! åͯbÍÊd*öNåÍ©bÍ}^ÉÃÃOÃVQ*éQå!åÍŽb*ëQå*×Q^ÕÍ…báÑ}£ÒQQ!ãQå*éQ+Ñå*×Që*ëQ^ÕÍûNáëás*éQ#"éQ*ëQ#"ëQÃQ*×Qå!Ãïÿå!åͺd*×Që!å:ÙQ&oë!@{•ozœgëás!ÛQå*×Që!å!åÍ{d!ãQå*×Që! å!åÍ{d*×Q8å!ëásÉÃÃóQÍQ\á"DRá"FRÍW¦[å*ôTëás#r*ôT<~Ò(T*ôT;å!ëásÃñTÍýV*ôT@~ÒñT*ôT<å*ôTÂë!^Õ!åÍ&báëás*ôTÂë!^Õ! åÍ&bá}2DU:DU&oå*ôT<^ëÑ}³Ò�T*ôT;å!ëás:DU&oå*ôT8^Õ!åÍ&báÑ}£ÒÁTÍýV*ôT<^Õ*ôT;^ëÑ}³ÒñT*ôTÂë!å! ëásÉ/o|/g#"JÃI*J@å!ëás*J<å!ëás*J;å!ëás*J8å!ëás!¦[å*Jëás#r*J6å!ëás#r*J9å*Jëás#r*J=å*JÂëás#r*J4å*Jëás#r*J?å!ëás*JåÍtUá}/Ò¿I!¤[å!ÿëás#rÃJ*JåÍqUñÒÍIÃJ*Jå*JåÍ S!¤[å!å*JåͲaáëás#r!¤[^#VÕ!ÿåÍnbñá}/oÑ}³ÒL!¤[å!ÿëás#rÃDL*MåÍqUñÒ+LÃ÷LÃDL!¤[å!å*MåͲaáëás#r!¤[^#VÕ!ÿåÍnbñÒÛL!¤[å!ëás#r*M<å!ëás*M;å!ëás*M4å*Mëás#r*Må!åÍnbñÒØL*M6å!ëás#r*M@~ÒÕL!¦[^#VÕ!¦[^#Vë4^#VÕÍàSÃØLÍýVÃ÷L*M<å!ëás*M;å!ëásÉOÍQ\á}2ÑQÍW\:ÑQ&oå!aåÍ=b:ÑQ&oå!zåÍ…báÑ}£ÒDO:ÑQ&oë!ß}£o|¢g}2ÑQ:ÑQ&o}2ÇQ:ÇQ&oãéÍQ\á"ÓQá"ÕQá"×QÍW\!¤[å!ëás#r*ÓQ^Õ!åÍnb*ÓQë!^Õ! åÍ&báÑ}£Ò¯O*ÓQå!å!åÍKRÃtO*×Qå*ÓQå!åÍÏb*×Q^Õ!åÍnbñÒÆQ!@}2ÙQ!ÛQåÍçO á#å!åÍ‚d!ãQåÍüO á#å!\*DRå!}/o|/g#åÍ&bñÒ)R!ÊE<^ë}2@RÃ8R*FR<^ë}2@R:@R&oãéÃÃNRÍQ\á"ºRá"¼Rá"¾RÍW\*¾Rå*¼Rë*ºRÑå*¾Rë*¼Rå*¾R^Õ*¼Rë*ºRë!{•ozœgÑ{•ozœgåÍ{d*¾Rë!å*¾R^Õ*ºRÑ{•ozœgëásÉÃÃÆRÍQ\á}2SÍW\!¦[^#VëÂë!å:S&oëás!¦[^#VÕ!¦[^#Vë4^#VÃÃLUÍQ\á"jUá"lUÍW\!¦[å*lUëás#rÍKYÉÃÃwUÃ!VÍQ\á"ÎVÍW\!}2ÊV*ÎVåÍ”UCON:Íâ[ñÒ³U*ÎV8å!ëás!}2ÊVÃV*ÎVåÍ¿ULST:Íâ[ñÒÞU*ÎV8å!ëás!}2ÊVÃV*ÎVåÍêUKBD:Íâ[*ÎVåÍùUTRM:Íâ[áÑ}³ÃÃiGÃÃGÃÒGÍQ\á"ïGá"ñGÍW\!0e^#VÕ!0eåÍ&bñÒ�G!0eå!0e^#Vë####ëás#r*ñGå!0e^#Vëëás#r!0eå!0e^#VÕ*ïGÑëás#rÉÍQ\á"óGá"õGÍW\É!*e^#VÕ!0e^#VëÑ{•ozœg"÷G*÷GãéÒJ!¤[å!ëás#rÉÃÃ"JÍQ\á"Má"MÍW\͵a*M8^Õ!åÍ&bñÒñJ*Må*Må!MåÍ M*Må!ÿåÍ&bñÒñJ!�FåÍ©bÍ}^!�FåÍ©bÍ›JUnable to automatically close: ͯbÍ,c*MåͯbÍ,c͸J in RESETͯbÍ,cÍ}^!�FåÍ©bÍ}^!�FåÍ©bÍåJProgram abortedͯbÍ,cÍ}^ÍN\*Më! å!ÃÃMÃ"NÍQ\á"�Ná"ƒNá"…NÍW\͵a!¦[å*…Nëás#r*…N8^Õ!åÍ&bñÒ‘M*…N9å*…N6^#Vëëás#rÍKY*…NÂå*…N4^#VÕ!åͺd*…N9å!�ëás#rÍKYÃÅM*…N8^Õ!åÍYbñÒÅM*…N9å*…N6^#Vëëás#rÍKYÃ!N*…N8^Õ!åÍnbñÒN!¤[å!å*…NåͲaáëás#r*�NåÍ–[áëás#åÍ‚d*×Që!^Õ!:åÍ&bñÒ:P!"ëQ*×Që!^ÕÍûNá}2ÙQÃ@P!"ëQ*ëQ"çQ!"éQ*×Që*ëQ^Õ!.åÍ´\!:åÍ´\Í•]ÍJ]á}/oå*ëQå*çQåÍŽbáÑ}£oå*ëQå*×Q^ÕÍ…báÑ}£ÒËP!ÛQå*éQ+Ñå*×Që*ëQ^ÕÍûNáëás*éQ#"éQ*ëQ#"ëQÃPP*×Që*ëQ^Õ!.åÍ&b*ëQå*×Q^ÕÍ…báÑ}£ÒQQ*ëQ#"ëQ!"éÕÍIUÉÃÃSÍQ\á"FSá"HSÍW\͵a!¤[å!å*HSåͲaáëás#r!¤[å!ëás#rÉÃÃPS!¦[^#Vë8^Õ!åÍYbñÒžS!¦[^#VÕ!¦[^#Vë4^#VÕÍàS!¦[^#VëÂë!^ë}2ÙSÃÏS!¦[^#VëÂë!^ë}2ÙS!¦[^#VÕ!¦[^#Vë4^#VÕÍàS:ÙS&oãéÃÃãSÍQ\á"òTá"ôTÍW\*ôT;å!ëás!ÒV*ÎV8å!ëás!}2ÊV:ÊV&oãéÍQ\á"ÔVÍW\!}2ÐV!ØVå! å!~åÍþ\Íu\*ÔV^Õ!åÍYb*ÔV^Õ!åÍŽbáÑ}³ÒkVÃÂV!å*ÔV^ÕÑá+"ÖV#åÕͬ["øV*ÖV#"ÖV*øV+"øV|µÊ»V*ÔVë*ÖV^Õ!ØVåÍ^\ÍJ]á}/Ò¸VÃÂVÃ…V!}2ÐV:ÐV&oãéÃÃW    !¦[^#Vë=å!;Yå!åÍ{d!¦[^#Vë8^Õ!åÍ&bñÒžW*;Yå!å!åͲaáëás*;Y^Õ! åÍ&bñÒhW!å! åͲaá"=YØW*;Y^Õ!åÍ&bñÒ˜W!å! åͲaá"=Y!å!åͲaá"=YÃ:YÃàW!¦[^#Vë8^Õ!åÍ&bñÒàW*;Yå!å!ÿåͲaáëás*;Y^Õ!åÍnbñÒ¸WÃ:Y!¦[^#VëA~ÒX!¦[^#Vë<å!ë#Vë=å!ƒ[å!åÍ{d!¦[^#Vë8^Õ!åÍYbñÒ.[!¦[^#Vë"�[!å*�[9^#VÕÑá+åÕ"‰[Ñá#åÕͬ["�[*‰[#"‰[*�[+"�[|µÊ+[*ƒ[^ë}2…[:…[&oå! åÍ&bñÒŒZÃ|[*�[8^Õ!åÍ&bñÒØZ!å:…[&oåͲaá"‡[:…[&oå! åÍ&bñÒÕZ!å! åͲaá"‡[Ã![!å:…[&oåͲaá"‡[*�[8^Õ!åÍ&bñÒ![ù]á"^á"ÿ]!àÿ9ùͪ\*ÿ]|·ÂÏ\"û]ë*^|·ÂÏ\}»ÚÏ\ÊC]ÍÓ\*û]#"û]ë*^{•zœÂ.]ÍÓ\*ù]éá"ù]!9DM! 9^#Vë"û]|·Â�]Å}æ_áF:û]æ_!ö\~ Ê�]!"9ùÕ*ù]éÃ…]á"ù]!9ë! 9 ¶w#¤]! 9ù*ù]éá"ù]!9ë! 9 /¦w#ÂÅ]! 9ù*ù]éá"ù]!9ë! 9 ¦w#Âç]! 9ù*ù]é*¦[;6> *ˆaé!‰`>2ˆ`å*¦[; ~áÚÝ_å!.`å*PGéÁá:ˆ`þÿÊC`ÍT`#:ˆ`<2ˆ`ë*¦[; ~ëÒ%`ÃÝ_yþ Êc`q:Ša<2ŠaÉ6 :ˆ`<2ˆ`:Ša<2ŠaþÿÈæÊ`#Ãc`å!‡`#5áÉd*c:c=w*céá6#s>2cÃc!(cå*PGéÁáÅéá"Ocá"Qcá"Scá#å+n&å*Scå*QcåÍUc*OcéÁááÑÕÅ|þÿÊmc}“o|šgúmcÍÛdÁÑáÅ{²ÈÕNåÅÍÑdáÑ#z³ÂtcÉá:zdõéë!¯2zdy°ÂœcÃÕcx/Gy/O>=­cëÃÓc)ÚÇcë)ëÒ¸c,å ÚÁcáÃ¥c33Ã¥cë)ëÒÎc, Ã¥cëÉë!ÿÿ>2zdɯ2zd±Âðc°ÊHdî€ÊHdx§úd²úþcëÍŒcÉ{/åásÃ:Y!å!¦[^#Vë9^#VÕÑá+åÕ"?YÑá#åÕͬ["AY*?Y#"?Y*AY+"AY|µÊ#Y!¦[^#Vë"CY*CY?^Õ!€åÍ&bñÒÉX*CY?å!ëás*CYA^ë}/ÒÉX!å*CYBåͲaá"=Y!¤[å!å*CYåͲaáëás#r!¤[^#VÕ!åÍ&bñÒÉX*CYAå!ëás*CYA~ÒâX*;Yå!ÿëásÃY*;Yå*CYBå*CY?^ëÑ^ëë:…[&oå! åÍ&bñÒ![!å! åͲaá"‡[*ƒ[#"ƒ[ÃYZÃ{[!å!¦[^#Vë9^#VÕÑá+åÕ"‰[Ñá#åÕͬ["‘[*‰[#"‰[*‘[+"‘[|µÊ{[*ƒ[^ÕÍHY*ƒ[#"ƒ[ÃT[ÉÃ![ÃÙ[*¤["¨[*¨[ãéá"Ø[ÑáåÕåÕÍYbñÚÍ[Ñá{•ozœg##å*Ø[ãÉáÑ!å*Ø[ãÉáã"L\Ã)\ÍÚ[Âð[!å*L\é!Ãë[ÍÚ[Âè[Ãð[Íë¾Â^# y°Â^!ãéyMD!ãå`iO>·ÉÍ^á}îoãéÍ^y°Ê>^¾ÚD^á!ãéá!ãéÍ^y°Ê>^ë¾ÚD^Ã>^Í^ÊD^Ã9^Í^ÊD^ÃR^á"{^Í cÁáq*{^é ÅÍÑd ÅÍÑdÉ*¦[;~Ú�^Í cÁÊ^6*¦[8~þÐÍ cÁ*¦[Â~þ ÀÍ cÁÉáÑÁAÑåÍQ_zæ€òà^Õ-Í9_Ñ{/_z/Wz·ú_Å'ÍßcÁÍ,_ëÅèÍßcÁÍ,_ëÅdÍßÃÑaÍQ\á"«aÍW\! å*«aåͲaá"­aÉÃøaÃâaÍQ\á"üaá"þaÍW\*þaM*üaëÍo&"b*b"òa*òaãé!å!€åͲaá"bÉoz/g#ÍŒc{/_z/Wɯ‘O>˜Gz§ú6dÂ#d³Ê6dëÍŒc{/_z/W}‘o|˜g#ɯ“o>šgÍŒc¯•o>œgÉ>2zdÿÿ!ÉáÁÑåÍßcáÕéáÁÑåÍßcãéÑÁáÕÍŒcëãéÑÁáÕÍŒcãéáÁÑãÇdáÁÑãëx±Ê–d~# x±ÂŒdëÉáÁÑãëädáÁÑãx±Ê¸d +ë +~+ x±Â®dëÉáÁÑã{²Èq#{²ÂÁdÉÁááÅÍÛdáÁåÅYÍðdÁÉ}´È-È åÍðdá-ÂädÉáÕå*RGéëyHåás*CY?å*CY?^ë#ëás*;Y#";YÃ+X!¦[^#Vë6å!ëás#r͵aÉÃÃNYÃðYÍQ\á}2[ÍW\!¦[^#Vë"‹[*‹[?^Õ!€åÍ&bñÒ¹Y!¤[å!å*‹[BåͲaáëás#r!¤[å!å*‹[åͲaáëás#r*‹[?å!ëás*‹[Bå*‹[?^ëÑå:[&oëás*‹[?å*‹[?^ë#ëásÉ!¤[å!ëás#r!¦[^Ú[Úð[Êð[Ãè[ÍÚ[Úè[Ãð[ÍÚ[Úð[Ãè[ÍÚ[Úè[Êè[Ãð[áÑãëN2K\G¹Ú9\Ay·ÊF\#¾ÀÂ=\:K\¹ÉÃáã"\\É*\\ãéá"¨\Ñ!àÿ9ùåÕ ÅÍ‚d*¨\éá"¨\! 9^#V!9Ö\á"¨\!9^#V!9Õå ÅÍ‚d!"9ù*¨\é 6#¬\Éá"ù]á"û]!àÿ9ùͪ\*û]|·ÂÏ\ÍÓ\*ù]é:û]æ_!9å:û]æ_!ö\~áG¶wÉ @€á"cÁÍ,_ëÅ ÍßcÁÍ,_ëÍ,_É!'_å!åͯbÍUcÉ32768å>0³_þ0ÊJ_áåÅÕ!ÿÿååÍÊdÃG_ÁáÉx·áÈÃ9_xþÿÈÕz·òt_þ€Âl_{·Âl_xÖGÂ_z/W{/_Å ÍßcÁz³Ât_x·úž_Êž_ ÅÕ!ÿÿååÍÊdÙ_ÁÂ_Ñɯ2Šaá"ˆaá}2‡`¯2ˆ`*¦[8~þÂ`!‡`åÍŽa:ˆ`·ÊÝ_:‰`þÂÝ_*¦[<6!ˆ`å!ÿåÍÏb*¦[8~þ ` Å!ÿÿååÍÊdá~#å·Ê#bþÊkbþÊVbþÊ‹bþÊ:bÂbÍ”bÁÑá}“Â3b|šÊ{b!å`iéÍ”bÁÑáz¬úOb}“|šò{bÃ3b¤ò{bÃ3bÍ”bÁÑáz¬úOb{•zœÚ{bÃ3bÍ”bÁÑá}“Â{b|šÊ3b!å`iéÍ”bÁáÑÃ@bÍ”bÁáÑÃ\bÁÑá&}æoã&}æoãåÕÅÉáã"¦[ÉáÿÿÕÕéáã"PGÉáã"RGÉ!MS"PG!ÃR"RGɯ2cá"cáÁÑÕë"cëYPz·Ê cÕ½ÊöbÚöb>2c} 2. XREF asks: Input file? 3. XREF asks: Output file name? or CON: or LST: 4. XREF asks: Do you want a listing? (N means No, anything else means YES) And that's it! åMODULE UTILITIES; (* USE AS FOLLOWS: FUNCTION RENAME(F,NEWNAME); MUST BE PRECEEDED BY ASSIGN PROCEDURE EXTRACT(F,NAME); RETURNS NAME FROM AN FILE FUNCTION KEYPRESSED : BOOLEAN; TRUE IF KEY PRESSED *) (*$I FIBDEF.LIB*) EXTERNAL FUNCTION DOS(23,ADDR(TEMPFILE.FIBB.FCB)); RENAME := RESULT END; PROCEDURE EXTRACT(VAR F:FIB; VAR OUTNAME : STRING); BEGIN OUTNAME := F.FNAME END; FUNCTION KEYPRESSED:BOOLEAN; BEGIN KEYPRESSED := (@BDOS(11,0) <> 0) END; MODEND. å‚­t#k VЈ¶€!ñjʺÀ ;€Éh¸DZð\­QV¼rˆuÀ ”B9Y¶ŒB9EXHÊÑpŠÜ­Q¼h¸DnV«6Ý€¶� «^ˆÄZðU´�b-¤|Z²© †²Y´Lu›€DÀûJ­ˆ@+4fÔ0Iði:MÆqÐ�š3@°rˆA+6¢³@hÉ€-”*Ù@"1Êç(«eŠÜ¢@ÊÍ-ˬC¬@ €4l („r³@ Dú³´«‡8¹E[(   Vå‚Vmvp´C.±°‚ Ûá>Œ¶ë`‰€÷¥›DÀY¸L´¯Ð†˜¹Y´Ð›xÀADSqÐÊr4›Œã¡6©³j8‡X¹D €•›yYµT›VY´|âÒ¥àBžåfÝ0m ŽFS ¬ào4›Ž‚‘”Âc4LŒÛäͼà,ÛðͱèË_²Y´Xu…Àyô^iTP&‰aØ�! r³h06¬ 'A°Òn2Ž™´| ›H€…ZàÊÍ« LЛI@…XXV"ÂÀ¬,å€Vh!n›%š8O£-¼Í6Ô ÊÍ· LÚ¸·\ ›v€‡[xL7¹XwCT¬Ú¨Ͱ@€²�ÈÞc2™§#(€@Í« ŒÚÀü¢Úåf×Fm¡‘ަãÐÒo7mƒfØ`FàØÀG+6È3n ,’n:LæS�€@ 3m#6Ò‚0ï(†Õ‚9Y¶¼›wÁd3A„äa1� §!�›pA·‡xD7(Ê͹ÀŒÛü !ÍæÃ)„Ü  ÛÀͼ`Œ;À !½ ŽVmífÑÐPYHÊa6€@`x€@V0œ„ ÈÂm2� §&mÅfÜ€fmËaÕPq Ñr³n¨36…‚D�¼Òn:NLÛÖ Í½ÀÌÛâ ê âî åfß°fm8 ˆc È@p7šMÇC)È@p0œŒ&Ó)ÐÊrfаvmfÑvUfÜ P¶ ×@ûQ`zªÉá +6³‚¢Q(”J%‰\"6ˆfÛ0 ôe¸G[€L7¸Ý#¬´&Ï£-Ô:Ý@"`½Æéá (‡G ÉxFVjˆB+4â („ r³@m7x´®8„‡aBD  •›R@",8:Ê@"`½Êø"E–Xwd$B²À 섈@€XaÝ�‘VV/ÊαXaÝ�‘€"Ë,;²ͨ à cÂlÀM˜ ´!6`&DŽڠ›nvBEXp Æéá Úm @ˆ(/ÊαVm @ˆ$ ÍQåf€•* €€,°:Ê@"`½Ê!¬Ú¼ñiRp¡}e Y m @ˆ4/ÊαXe 0Þå‚€Vm x´ªÈP«mA ÈX^uŸ•DÀ{”B09Y·¤,u•DÀ{”B99Y·Ü-ÂÑ>¨ÍíêÌ>Ò°Aƒ¬¨&Ü¢øÊͤàb¬tå‚@Vm p´Oª0ûJ»† ±ÐŒEŽ€…Xà Ê*Ç@B¶ˆeÊ:Ê€"`½Öá9³i@„ú2Ê€,;ºÉ€@Ñ–ãÀ'+6§€3iЄú/´­ `‡9D8hÊ!¬Û8!£,Fé!ÂTå„Qr³@*rˆB+4fÒàmÀA<r³jÅ¥Eƒ…[p" BÀóTB9YµHœE•€Xw¼8u•DÀ{”B9Y·l5âÒ½áÂ6åfÑðæmæ‘O)Œèi7ı¼ä ˆ´è9›OC™µ9’!€£,0Í¥èË*޲ ˜orˆD€+6ʇ² ˜orˆF+6�†² ˜orˆG +6–†8Z'Õ½¢}Y‡ÚVPÒµ€L‘Vþˆ·ð«9D8,/5Y Å¥BÀÄ!�ôe•Xtl C€]b­ü γèË*޲ ˜orˆD+4e@0Þå†@VmŽp´O«0ûJô² ˜o>Œ¶€ëh‰€÷¤B9D8,/5Z fßðFmaÞQ r³h`+6ž‚ÈG“¡”@ 6�³i+ðˆi8+•›JÁYµlW7œŒ‚€@ ´ô›PXw€CQ�\¬Ú” ͯ@ ²™Ðäi7Ä€@Í«€¬Ú¾ ü¢Ê åfÖ�Vm™”·#©Œèu9Dm{f×àVàØ@W+6ijmÀ(,ªn5›�çsp€@ 3lÐ+6΂°ï+4@ Ø bÁ-P%ɽ”“ÔPZÈ `Ám-àdˆpЋl ¶À#”ChÁ\¬ÛN !¬Ûr Í>Œ·  ト@ èËzŽ· ˜oqºYµC‚œnQ åfÚ vmM€Ñ–þfÓ  ô^i_Pv@€Ñ–fÓp ô^orް€˜o>‹ÍíêŒ>Ò¦Á ÚzñiS0�uˆpÐfÖÐw‹J™„@ èË0ïà8ë €óèËŽ·ð˜oqºGYPL7¹D%à•›M@Þ-*Ø!€£,$Í¥èË*°ë˜@„>Œ°�ë  €÷¥›tÜ",`Í»àâE�„ ‹@èËFYHU¶� ðd,/5Xv„-›PÀ-+ :Ê@"`½Ê!¬Úˆ:Ê@"`½Ê!€¬ÚôáhŸVaö•¤ e`(‡+¹D •›{Àw@(CEÁܬÚ6͸áA‚„Ün7�CIÌàl0žDCA¤æ :NVm9fÓÀvm?aÛ ±VVrˆr° ”B9Y¶|(B²À 6¡€¬Ãí*J*ÊÀ.QVrˆ@@+6ð0êˆX†Ò…9Y¶¤)›RÃ3 ¸Üo1âҹᣬ¨&Ü¢ÐÊÍ¡a�•Ì fÒ€ ôe•E[p"BÀó¬ú2È€BxåfÔð*rˆB(‡9Y·0CŠ€¢€Ê͹�ŒÚ\!£,Œ:ÈÀB`¼ú/7¹Y´ÜÂ}›Ú'Õ}¥bD8ð Êͨ¬D&Ü£¬ˆ&ܬÚáhŸTfóèË#0ê`hë# €óè¼>Ò¹�¢xåÒ`·+6•ˆA+6¤…³oÐ+6܆ƒãyÐ@p9NfSqÑ›iYµ0-›SÂÄ ôe†u$9‡DÇX˜ÆšfÕ mLfÕPVVd€!VHqºY¶Ð-Â"Ë€N^fÛ°±V^f !åeÀ'+EÂ+rµDY€ ¢á¹Z¬ÚÔ"ÛÀ‚¬À#f!VÞˆ¶ð!ñjÊ©b¬Ä�gÑ–df@!0ÞåˆVmf@!0Þå Vmò p´Oª0ûJ˜³ ˜orˆj@{•›SÙµˆ=š0ꀆ�ˆ9Y´”@B.9Y´ A›JÄYˆF"Ì@L;®ÉfÚ�÷ ôe™€™¶ÐÒº@bëm Ë”u·DÀ{¬BßTfóâˆÎëpœØu¼ ’!Ã@-¬*ÚÀŽQ åˆVh*ÚÀ�@2倷 ÌUµ�  eÊ!¿Ýn˜Œä*ÚÀ�H2å‚€· ÌUµ� ÀeÊ!n˜«kA Ë”B:Ü'1ÈUµ� ðeʾ "Ø åfßVm‘¼Æ 'M£¡6û‚³mà(«lAÈX^jˆ@`(…þÿr³k0†þ‚¹Y´›Q��‚Èd9Ng1Ѐ@Í¢€ÌÚ. !¦ÎQåm€@ˆ(/ÊÍQåf€­°€!`yªÍ¦ š åfÓ@fm‡3IèÊ:3j836¥ ¶À D —„ef¨„ rˆ_ï÷+6–ƒ ¶À D …€æ«¢ˆk¨3•›^A™· LgC©„ØÍ±ÌÛ Í» L:ª!¶@ÎVm¶fÞ ² ˜orˆH +6Ï޲ ˜orˆK@+6Ö¸Z'Õ}¥u‚YPL7„_/ðˬB0Ò¦óÒpÎ"Æ€L:.:Ê€"`½Ê!¬ÛH:Ê€"`½Ê!€¬ÛdáhŸTaö• e@0Þ댴©¼ôœ3ˆ± ‹„ˆ@ è˱°˜o>‹Ãí*|*Æ@NQV0r³m0«4C",dÍ¥èË*ޱ°˜iY€�V2b`!V&qºGYPL7¹D"@•›U-*ôÍ¥èË*ˆB+6¤€8DXp : †“™ÀØa<ˆ†ƒIÌ@t<œ ¬Û�͹aLÛœöAlÚ†ñiV ±VVrˆr° ”B9Y´€,B²À Ùˆ@@Xe`(‡+¹D •›ZÙµ âÒ³Áb¬¬åå`(„r³l0[Ù³nHVp«¦Uë˜]² d³kàC„EŽ™¶ UŽœ¬Ûš€@ pˆÜ¢@ÊÍ»€âEŽ€‡YPL7¹D$•›x‚YPL7¹D% •›|-êŒÞåe@0Þå—ÀVm p´O«3{”uL7¹D •›QÃ-*&!³!®Vm� fÐ0๠Ân7΂¹ÈÒt2ˆ Æóp´Îl7˜Œ&Æmº fÛÐÖmÀ €Ñ–aÔ�á<rˆok•›yƒD €•›A™¶œ5›NC�Bq¼è 3Φã#6“3h8s6…@èË 2GYPL7¹D"À•›^ƒ^-*¾ýáì¨&Ü¢XÊͪÁÏ•‰fÒ€ ôe•EYXÊͨÀˆdE•€Xw¼8u•DÀ{”B-9Yµ¬9âÒ·ÌÚPá>Œ² «+¹YµÂÑ=¥Mç¤ájˆiˆƒ•›MD´ðA›OÄ9xÊ:ÌÀB`½Ö!€ª3yñDgh†BÀóU›^µìA’Í©¢jpˆ³`6ªˆ ³`xFVuˆ³€„rгP•¢á¹Z¢,ÜÑpˆÜ­VmÒnAVnˆ³p«p Ä[€øµeQAVp γèË9³�˜or³k†¸ˆ9YµÔ@B 9Y¶`A›fÄYÀF"ÎL;¢ *Í€NQVpu¸Nb3“%›gÄ",¤áe@&mªe '(„€r³oØÅ¥QÄD$‹)0ëØˆ«)9D!   •š8DY`U–œ¢Êͧ/•{e '(„ uвÀí*o=' íÈ‹) ²�‹- ² °Lr³k«* €Vmaß¡+6ÿ3mˆt fÐQmeå@'(„ r³k †Êˆ¹Y¶dE›pD@‚€@Í´B,ÛJ"*Ê€Aƒü2å„Vm^Û1+6Ûˆ³k@x«)^ðÈ‹) ²�”B9Yµ=âÒ°",–m"pˆ³ „ú2ÎÀNxfÒÑ ×r³nØ‹6�‰H&C!ÈÊs9Ž„ Û„"͸¢"$å‡`7|MÊͼblÛÌ&*ÏNQˆrˆ@ +6䉊³À”C¢œ£­&ÄnVmè€'(†ö ¹Y·ÀM›eÙ¶\M›|ÄØvPCG¬Ú@(Í¥"ƒ¬¨&Ü¢`Ê;b/•YfÒ€ ôe•YµÂ"΀B¬ðåg@'+6­€0ì£6Ñ€€p`°ÂT\N  Ö�;x'zÄép¥€dˆ@ èËE³i@’ ˆ@@èË)°êب„>Œ²� ­Šˆ@€èË)°êب„ >Œ²� ­Šˆ@ÀèË)°êب„>Œ²ìÚPá>Œ² ë*‰€÷(„€r³iаë*‰€÷(„´r³mx“…¢}Y‡ÚVÔXBFZˆ ›N€'Ñx}¥p…˜w\CŠ€¢€Ê!ÀVm â („ r³hÀ³6—@èËO޵˜o>‹Ãí*È.!ÒÀnVmOià10Þ}›Ü¬Úná>‹ÍíêŒ>Ò¤â,åfÔ ôe§€ØwäY›MÀZx L7ŸEæö‰õFiVAq–rˆj賕›XE„ €•›]Å™´¤9›VÁ‚q¼è 8Œ§3)¸èͨbìÚô,ͯ¢͵ã Ûd0Ͷ£ ‘}a@m(pŸFYPu•DÀ{”BR9Y·ÀaâÒªƒ"E…€ule›Q€",,*ÂÀQåfÔQ—‹J¸ ˆ@ d³i@„ú2Ê€,Ú¤:Ã`¼ú/´¬XËÊ�±˜orˆ@@+6€ˆÒºBBè$å€@QÖ~ îQåfÓ�& gà!0ÞåÛ¡'+6¼ 3kØ“6„³op�@=ˆ·„I›U„7hIÊ!€£¬ü&Ü¢Ê͹¢B� ­ŠˆAèË)°êب„>Œ²� ­ŠˆA@èË)°êب„>Œ´P†—Š9Y´ÌQ›FCÄS‘ÈÞr §ƒ�”Æt4›Œâ±„äi0˜�†QÐòp2³i£6“ 3i°£­Š³k@¡[aK0)z/@¥è½— RÇ ^�KÐ)h…/@¥è½— Rô ZÁK”)z/@¥Þ¸—PRô ´P˜oqºYµ¨âÒ±â¬Ú°áe`Öí+**ÊÀ.QÖR îQVXr³k86—2D7ÀQÊ;‚ŒÛT* › ‚�ÈÞcÌ;€.:Ä@`¼ú2ÔbTå„Qr³nx°‡9D!•›v…™´¸›MÀ'Ñx}¥pÙ´ôâÒ·¢ã¬D&Ü£­@&ܬڈ(:Ô@b`½¢}Y‡ÚVô]›Mv,]’:Ë@"`¼ú/´¨XÀ†œ ¹Y´ð]›ÅÄäƒ)°à 7΂ ØÂi6LFÃ(€îi: çS €æy6˜�æÁÐÂb6Yµd]›WÙµ|]‡mÆ:� Ê!€¬ÚJ0 ˆ„"©�E&ÅBÁQ›^ÅÄ:� Ê!¿Ü¬Û .Í/ð•›U…ž-+¢´˜ U¯�¢@Êͬƒ.‰õfi]a‘prеð ­Ê!¬ÛÖ2áh†\¬Úr4€@ pˆÚ @›Až-*Ð4!Î.QV¾¹D €•›IÆœ-Ë”C†€¢@Êͺ¡l;*4!³Ã.Vm¢fØÁ Èà@b9L&³�¼Òn:ÄaÈÊa2D3)Ñ›qFY· e›rÆY,ÚPá>Œ²  6©°À˜o>‹Ãí+`4ô£bE°[F"Ø‚àålA[”B9YµPiÂÑ ºÄ8h3jЫ`9D+6ÃŽl¨ã¬BBÀóTB.9Y¶€qÂÑ>¨Ãí+¶6ɀі€Ñ–ÎfÒà"ßÀ,8åfÑ¡Æmâ ÇÌÚB8ͺcbåÒqÇ+6íJ+6±Œ3k0Ã6•€pX^jˆ@+6Ò Í³câåfÐBm fÙáö ê$åfÝá&m�aØAVxrˆt”U�œ¬Û&$:Ð@B`½Ê!¡bnVmfÞñ&hÍ¢Bl;(*ÏNQ„rг •›IÙ Bip›•›L„Ù´ÔMš3iØ›À ³À”C œ¢¬èåfÔÑ1Ö€ îQ Vr³jЛ6®‰³kð“6ɉ�Ñè�›a„Ù·ÈHC_ÄÜ¢Ê:ÐB`½Ê!€¬Ú&!³BnVmƒfÖ16€g€'(‡>9EYÐ ÊÍ®¢b`&å€@QV|rˆ@@+6Ö‰ˆn`›•›mÙ¶ÜM2™§#)ÌtÍ£"¬Ú8*Í£â¬ÚPá>Œ² ë*‰€÷(„œr³n sÅ¥|ÅD6DUÊͲ¢¬ÛÎ*$› †S9„Ø 1›Í¦Ó ¸È͵b¬Û\*Ͷ"¬:Œ,ͧ@è¼>Ò Ì:Œ,!Å@Q@åà+6š†ˆqP”B9Yµ5›K€´ÜÂ}‡ÚUY›O@-*†,:Ä``½Ê!¬ÛB$ñiT1fm4aÑÑfH„>Œµ6”IÀ+6㊼ZVXCs…\¬Û¤*Í®ÂÀòI¸ìa6L‚¼Úm0›ŒŒÛÐ*ͽb¬ÛÜ*ø0!Ô€nQåf€è¼>Ò¯ãHåfÝ!qjrˆJ+4f€ÔåÜáw+6¬ 3hÃ6�Œ3h0àŒ0í¸À†¶Œ9YµÄa›k†$BTŽH"“ â¡`¨ 7΂y¸@d2™Œ'SaÐ@d9NÆVmtf×q†mzd³i@„ú2×€ƒ­x&Ü¢XÊ͵bã­x&Ü¢hÊ͹ƒ‰õfi_¡�Ö¼ îQ¬åfÝ¡‡ ôe›€Xt¤dC`ƬÛ0ͤ!±X€Þr Dóq°ò 0› †ó¹”È 0™Ž†S�€Š €•›CÆœ-êÌ>Ò¶ÃBàålA[”B9Y·,iÂÑ ºÄ8h3nÀÓÅ¥YFÄ8hÊ!­#NVmm‚Vm�fÔavm/FSi¼ìe23hðÛ6È 3l˜Ð‡8¹E[Vå‚Vmûp´C.VmX€@ 8DnQ åfÖ1¦¥á (†‰�¹Y´\lB9Y´Àm›HFÙ¶pl< 7΂1¼ên2 &áˆäe0šÎóI¸è :LFÃ+6º�³i˜Û6› ²Yµ`Â"ÊÀ#¬0&Ï¢ðûJí�ˆkPÛ•›ñfØAÐü~?fÞ1ÆmæfÝa¶$fÒ€ åf֡׋JÒ³@»×q×+6½Ž³m�è ~?³l(ë6ijlXë’HàèËb@ èËg0é ó6¾J€èËb@ èËg0é ó6’Š�À°<¤ƒÔ�zÈÒAê0;P‡i õ¾¤ƒÔ�z’RAêH=I© õ$¦´�z±Ô�Ûž;I©°í$¤ƒÔ�z�ÒAáÖÎí+ž8:Ø€‚`½Æé€–h!XHB9D €•¢áˆ·ð�ÊÕfÜÁâ €@Ñ–\eÀ0>Ò¿ãÂÒ>åfÞÑömN NfQŠg4›„Cx€æt0œŽ‚�ÈÞg9M¬Ú@Í¢$ Ú(@ͱèË*޲ ˜orˆHà+6ñ¼ZV|€CJˆ¬Ú\@ͲÄ¢©ÌÊ !Læ“p€èoΆ‘Ð@p9Ìç# µ›SȵH�›UHYPL7¹D%@•›ZÈ-*R@ͳã¬Ð:2V#£€9R:D“£¤ !1R2Î!U£/CÑ5U22 #SÑ#1"q]%:2ð7ÐÒ#$ƒ‘ !   ^3ö#Õ#!bQA13:AÔ“#*ƒñ ]R3VATRc+‘9&2;Õc2ÂÑ1M&3.3ÑRc$áñ1&3È;”#*ƒÑ%:3r=U“#!qE2ìAÑ�£2ä]2t=S’c'q]I 34AÔ”ã,q]I22 'Ô#7ÃñMQJ3jA#*#ñIMR3F9ДՑã6D >2&9•Ô’UR#;õIMR2äA“ÕUU#&ã™I!2Þ9SÕ‘c;cù%=IMV2Œ?RU�€b,„|Z²­`« 9D!•šp¬U†!`yªÍ ÀˆdE…€uØC…€¢¬å`À+4d³l@„E‰€",Páb ‹3l؆Ï9EX°Öá9ˆÎB\åfß`€Àb2�£a¸àrA!È„R3„Få„Vh*ÄÀQåfÛ V&rˆ@ +6Þ€8Z'Õ˜}¥H@˜t¤ C�€¢VÑ ¹D8¸Ê*ÅÁ0Ê!¬ÐÂÑ …€ç[­Âsãà(„´C.Q.rб@°LååååS”U#5 íR3Ò‘’SÒ#)C =3š?�TÔÒQÓ§…Ñ’VSàtD%5E$xI!WRITEH”#MJ€Ø`À0è`Þ³@ ôe‰ ë €÷(„Âr³@Ö$ îQ èåf€‰õFiTðÖ$ î± |}Q›ÏŠ#9ôe‰X�L7¹D#�•šrˆ@€[D2åâà(« €Q@åfÖ0' D2�n· ÌU‰€¢Ê; •àãà(„´C.Q>rˆ@@+6Ü€ˆ@ («9D •›d€Z.[•ª"Å �ÊÕf×Db€‹ ² ¬E‘‹VU)ãà(« Ú!�°¼Õf€ :É�tD%5E$xèREADHEŽåIndexer inputs a Pascal source file and outputs one of two forms of index file. The first is the short form: only the procedure or function declarations are extracted from the source. The second is the long form: everything between the keyword 'procåå„rа�­Âsœ…X0Ê!¬Ú¶*Á€Qåf€‰õfi\ »€@,0!À±V ¹Y …Öá9ˆp¬U†!`yª!¬ÐU†¢ÊÍ-êŒ>Ò¢"¬0+a€a€‹ °�Dv Ÿƒí+ *Â@À2š¢ ÊÍ¿€•AfÝ  ôe…8Ö!.QVŠÝn˜„a`åà°¼Õh¸EnV¨‹ 4\"7+U𲫠ÄX`„€eu$•DTˆÌH@DIVŒö�DÕTÈÍx@MODŒÞ€Ä5H΀ @PLDŒâDU˜É˜ @NEIŒ„�DuD˜È @LSIŒ‘€DtT˜Éˆ@LEIŒþ�Dd”èÏð @MVLŒé€ÄÄd(ÉÐ @RNCŒ’Ätä8ÎðMOVEœ…QÓÓSÑ 4tù@Ôhé󀞑;€!O*@GO GOMOD èVP±4-åedure' or 'function' and the keyword 'begin' is extracted. Invoke indexer with the following command line: INDEXER [SHORT | LONG] åå   (* AS OF 10/21/79 *) (*$C3*) PROGRAM CALCULATE; CONST RCONST = -2.5; RCONST1= 65535.5; VAR R1,R2,TEMP:REAL; X : ARRAY [1..2] OF REAL; CH1,OP:CHAR; FUNCTION SUBREAL(R1,R2:REAL) : REAL; BEGIN SUBREAL := R1 - R2 END; ); '/': WRITELN(R1 / R2); 'M': WRITELN(-R1); '=': TF(R1 = R2); 'N': TF(R1 <> R2); '$': WRITELN(SQRT(R1):10:3,SQRT(R2):10:3); '<': TF(R1 < R2); '>': TF(R1 > R2); 'Z': TF(R1 <= R2); 'G': TF(R1 >= '); WRITELN('$:SQRT '); WRITELN('+, -, *, / ARITHMETIC OPERATORS'); WRITELN('M:NEGATE'); WRITE('= : EQUAL '); WRITELN('N : NOT EQUAL'); WRITE('<:LESS THAN '); WRITELN('>:GREATER THAN '); WRITEO STOP'); READ(CH1); UNTIL CH1 = CHR(27) END.  WRITELN('ENTER OPERATOR:'); MENU; WRITE('? '); READ(OP); WRITELN; CALC; WRITELN('TYPE Tåå PROCEDURE ADDREAL(VAR R1:REAL; R2:REAL); BEGIN R1 := R1 + R2 END; PROCEDURE TF(B:BOOLEAN); BEGIN IF B THEN WRITELN('TRUE') ELSE WRITELN('FALSE') END; PROCEDURE CALC; BEGIN CASE OP OF 'S': WRITELN(SIN(R1)); R2); '1': WRITELN(SQR(R1),' ',SQR(R2)); '2': WRITELN(R1 + 1); '3': WRITELN(1+R1); '4': WRITELN(TRUNC(R1)); '5': WRITELN(ROUND(R1)); '6': WRITELN(RCONST); '7': WRITELN(RCONST1); '8': BEGIN R1 := -2.234LN('Z:LESS THAN OR EQUAL TO'); WRITELN('G:GREATER THAN OR EQUAL TO'); WRITE('4:TRUNC '); WRITELN('5:ROUND'); END; BEGIN (* MAIN PROGRAM *) REPEAT WRITE('ENTER FIRST OPERAND? '); READ(R1); X[1] := R1; WRITELåå = ( or ) +/- = or $ = or : Display commands: D? where ? is as follows I - INTEGER C - CHAR L - BOOLEAN R - REAL B - BYTE W - WORD S - STRI 'C': WRITELN(COS(R1)); 'A': WRITELN(ARCTAN(R1)); 'L': WRITELN(LN(R1)); 'E': WRITELN(EXP(R1)); '+': BEGIN ADDREAL(X[1],X[2]); WRITELN(X[1]:10:3) END; '-': WRITELN(SUBREAL(X[1],X[2]):10:2); '*': WRITELN(R1 * R2; X[1] := 3.456; WRITELN(R1,' ',X[1]); END; END; END; (* CALCULATOR *) PROCEDURE MENU; BEGIN WRITE('S:SIN '); WRITE('C:COS '); WRITE('A:ARCTAN '); WRITE('L:LN '); WRITE('E:EXP '); WRITE('1:SQRN('R1=',R1); WRITELN; WRITE('ENTER SECOND OPERAND? '); READ(R2); X[2] := R2; WRITELN('R2=',R2); WRITELN; WRITELN('ENTER OPERATOR:'); MENU; WRITE('? '); READ(OP); WRITELN; CALC; WRITELN('TYPE TååNG X - EXTENDED V - var by name PN - display procnames VN - display all var names associated with this proc SB - Set breakpoint RB - Remove breakpoint E+ Entry/Exit display on E- Entry/Exit display off BE     Begin exec at start of user prog GO Continue exec from breakpont TR Exec one Pascal statement and return T Exec Pascal statements and return åÃmÃRÃZÃrÃÇÃKÙÃïÃEÃYÃwØÃ,ÙÃyÃ}Ã�ûà Ã_Ãä!}2è‚É!4€å!€åÍ]?á}2ð‚:ð‚&oãé;@á"ƒÍÄ@*ƒ"ƒ!ƒë!^ë}2ƒ!ƒë!å!ƒë!^ëëás!ƒë!å:ƒ&oëás*ƒ"ú‚*ú‚ãé;@á" ƒÍÄ@* ƒ&å!å͇Há}2ƒ* ƒ&å!åÍ‘Há}2ƒ! ƒåÍ 012"`ƒ*Rƒ#"Rƒ*`ƒ+"`ƒ|µÊ+!Ô‚å*Rƒ+ÑåÍ%áëásÃÉÍ.Í1:ä‚&ÒH!}2ä‚ÍüÍü!bƒåÍèFÍlExternal reference chain ÍîFÍeG!Ô‚å!åÍîF͈G͈--> ÍîFÍeG*Ò‚åÍ+ÍüÉÍ.Í1!"Vƒ!bƒåÍèFÍ· ÍîFÍeG*Ђå!åÍeFñÒ !Ô‚å*Vƒ+Ñ^Õ! åÍ­FñÒ !bƒåÍèF!Ô‚å*Vƒ+Ñ^ÕÍîFÍüHèF!>‚åÍîFÍeGÍü!}2è‚ÉÍ(á"Zƒ*Zƒå!ÿÿåÍeFñÒ3ÍIã*Zƒl&å!åÍeFñÒÍÍü*Ü‚åÍ+!bƒåÍèFÍa ÍîFÍeG*ZƒåÍ;!}2à‚*Ü‚#"܂ã!÷‡åÍèFÍšerror in comrel ÍîFÍeGÍ©CÉÍ:à‚&oå:è‚&oÑ}³ÒÍü*Ü‚åÍ+!bƒåÍèFÍä DB ÍîFÍeGÍ%Í!}2à‚!"â‚Ãe*Þ‚#"Þ‚Ãî *Þ‚^Õ!åÍ­F*Þ‚^Õ! åÍ­FáÑ}£oå*Þ‚^Õ!,åÍ­FáÑ}£Òn !€åÍ4C!€åÍBC*Þ‚^Õ͈CÍ/C!åÍG*Þ‚#"Þ‚Ã *Þ‚^ë}2æ‚*Þ‚#"Þ‚:æ‚&oå! åÍeF:æ‚&oå!,åÍeFáÑ}³oå*Þ‚^Õ!LåÍeFáÑ}£Ò¨ *Þ‚#"Þ‚*Þ‚^Õ!=åÍ­FñÒ !÷‡åÍèFÍ *L=nnn format required for page size åå3456789ABCDEFá#å!åÍ´H!bƒåÍèF! ƒå:ƒ&oÑ^ÕÍîFÍüH! ƒå:ƒ&oÑ^ÕÍîFÍüHÉ*Ê‚å!åÍeFñÒhÍá}2È‚!"Ê‚:È‚&oå!åÍ.Fá"ƒ:È‚&oå!åÍFá}2È‚*Ê‚+"Ê‚*ƒãé!"2ƒ!å!åÑá+åÕ"4ƒÑá#åÕÍ@"\ƒ*4ƒ#"4ƒ*\ƒ+"\ƒ|µÊä*2ƒå!åÍFÍáÑ"2ƒÃº*2ƒ"(ƒ*(ƒãé!"@ƒ!å!åÑá+*Vƒ#"VƒÃÌÃ"!bƒåÍèF!Ô‚å!åÍîF͈G*Ђå!åÍeFñÒE!bƒåÍèF!:åÍîFÍüHÃu*Ђå!åÍeFñÒu!bƒåÍèFÍh EQU ÍîFÍeG*Ò‚åÍ+ÍüÉÍ.ÉÍ.ÉÍ.!÷‡åÍèFÍ©C!÷‡åÍèFͧEnd of programÍîFÍeG!"Ü‚!}2΂ÉÍÍü*Ü‚åÍ+!bƒåÍèFÍç DW ÍîFÍeGÍ(Í+!bƒåÍèF!'åÍî*â‚#"â‚*â‚å!åÍeFñÒN!"â‚Íü*Ü‚åÍ+!bƒåÍèFÍE DB ÍîFÍeGÃ_!bƒåÍèF!,åÍîFÍüHÍ%Í*Ü‚#"Ü‚É*ùÍ7*!÷‡åÍèFÍ !Pascal/MT+ --Disassembler-- 5.5ÍîFÍeGÍ©C!÷‡åÍèFÍ©C!÷‡åÍèFÍÍCP/M-80 versionÍîFÍeGÍ©C!÷‡åÍèFÍ©C!5"ê‚!5"î‚!}2à‚!}2ä‚!�"Þ‚optionÍîFÍeGÍ©CÃö*Þ‚#"Þ‚!"î‚*Þ‚^Õ!0å!9åÍgAͳAñÒc *î‚å! åÍEI*Þ‚^Õ!Ñ}£o|¢gÑ"î‚*Þ‚#"Þ‚Ã !÷‡åÍèFÍ€ Page size set to: ÍîFÍeG*î‚å!å!ÿÿåÍêCÍ©C*î‚óÿ"î‚*î‚"ê‚!.å!€åÍÅ5!åÍeFñÒá !"€åÍ4C!€åÍBCÍÔ .ERLÍBCÍ/C!åÍG!÷‡åÍèFÍþ Object code file: ÍîåååÕ"BƒÑá#åÕÍ@"^ƒ*Bƒ#"Bƒ*^ƒ+"^ƒ|µÊ:*@ƒå!åÍFÍáÑ"@ƒÃ*@ƒ"6ƒ*6ƒãéÍ%Í%ÍáÑ"Dƒ*Dƒãé;@á"NƒÍÄ@*Nƒl&åÍ*Nƒ&åÍÉÍá"Pƒ*Pƒë*PƒåÍáÑ"ЂÍ(á"Ò‚ÉÍ!åÍFÍ!åÍFáÑåÍáÑ"Tƒ!Ô‚åÍÉ á#å!åÍ´H*Tƒå!åÍeFñÒè!"Tƒ!å*TƒåÑá+åÕ"RƒÑá#åÕÍ@FÍüH*Ü‚##"Ü‚ÉÍÍü*Ü‚åÍ+!bƒåÍèFÍ9 DW ÍîFÍeGÍ(Í+!bƒåÍèF!"åÍîFÍüH*Ü‚##"Ü‚É!€åÍkCON:Íf@ñÒƒ!÷‡åÍèF!.åÍîFÍüH!}2Æ‚:è‚&o}/ÒœÍüÍü!x�åÍèF!>‚å!„åÍÌDͶC!>‚ë!^Õ! åÍeFñÒû!x�åÍèF!>‚å!„åÍÌDͶC!>‚ë!^Õ!0å!9åÍgAͳAñÒÈ!bƒåÍ!€åÍ !åÍG*Þ‚^Õ! åÍeFñÒ+ *Þ‚#"Þ‚Ã *Þ‚^Õ!åÍ­F*Þ‚^Õ! åÍ­FáÑ}£oå*Þ‚^Õ!,åÍ­FáÑ}£Ò� !€åÍ4C!€åÍBC*Þ‚^Õ͈CÍ/C!åÍG*Þ‚#"Þ‚Ã+ !€åÍ› CON:!åÍG*Þ‚^Õ! åÍeF*Þ‚^Õ!,åÍeFáÑ}³Òn *Þ‚^Õ!,åÍeFñÒß *Þ‚#"Þ‚!€åÍç !åÍG*Þ‚^Õ! åÍeFñÒ FÍeG!"€åÍîFÍeGÍ©C!4€å!€å!"€å!Ì‚åÍØ**Ì‚å!ÿåÍeFñÒn !÷‡åÍèFÍX Unable to open .ERL file: ÍîFÍeG!"€åÍîFÍeGÍ©CÃö!.å!€åÍÅ5!åÍeFñÒ§ !"€åÍ4C!€åÍBCÍš .PRNÍBCÍ/C!åÍG!÷‡åÍèFÍÄ Listing file : ÍîFÍeG!"€åÍîFÍeGÍ©C!x�å!å!"€åÍB2!x�å!ÿÿå̓-Í@!ÿåÍeFñÒ: !   ÷‡åÍèFÍ$ Unable to open .PRN file: ÍîFÍeG!"€åÍîFÍeGÍ©CÃö!÷‡åÍèFÍW Output file : ÍîFÍeG!€åÍîFÍeGÍ©C!÷‡åÍèFÍ©CÍÿ!"ì‚Íü!}2è‚!}2È‚!"Ê‚!}2Æ‚!}2΂!"Ü‚Íá"Ì‚*Ì‚å!åÍeFñÒÄ ÍOÃrÍá"Ì‚*Ì‚ë*Ì‚åÍáÑ"Ì‚*Ì‚åÃaÍCÃrÍFÃrÍLÃrÍ"á"Ì‚*Ì‚!bƒåÍèFÍQFPascal/MT+ Release 5.5 Copyright (c) 1981 by MT MicroSYSTEMS Page #ÍîFÍeG!ì‚^#VÕ!å!ÿÿåÍêCÍ©C!bƒåÍèF͇Disassembly of: ÍîFÍeG!€åÍîFÍeGÍ©C!bƒåÍèFÍ©C!bƒåÍèFÍ©C!bƒåÍèFÍ©C!bƒåÍèFÍø5Stmt Nest Source Statement / Symbolic Object CodeÍîFÍeGÍ©"2„*4„#"4„ÔÃ_!÷‡åÍèFÍD)*** error *** progrel or datrel exptectedÍîFÍeGÍ©CÃ_ÍÌBÄàü!å*4„åÑá+åÕ"2„Ñá#åÕÍ@"2‡*2„#"2„*2‡+"2‡|µÊ“ÍIÃzÉÃFÉ;@á"6„!8„ãå!QåÍGÍÄ@!bƒåÍèFÍÁ ÍîFÍeG!8„åÍîFÍeG*6„å!ÚãéÉ;@!Š„ãå!QåÍGÍÄ@Í4CÍüLXI ÍBC!ˆC!,å͈C:Ü…&oå͈CÍ/C! ^#VÕÍ É;@á}2à…!â…ãå!QåÍGÍÄ@Í4C!â…åÍBCÍK ÍBC:à…&oå͈CÍ/C! ^#VÕÍ É;@!4†ãå!QåÍGÍÄ@!4†åÍ€ÍR@ñÒ Í“JMP !^#VÕÍ ÃÊÍ4C!Jå͈C!4†åÍBCͺ ÍBCÍ/C!^#VÕÍ É;@!††ãå!QåÍGÍÄ@!††åÍåÍR@ñÒÍøCALL !^#VÕÍÃ|!DåÍ Ã|!DåÍ#Ã|!DåÍ&Ã|!EåÍÃ|!EåÍÃ|!EåÍÃ|ÍFRAR! ^#VÕÍ Ã|ÍÌB­°ºÄÎØâì !+5?|É*.‡åÃHÃq!HåÍÃqÍ�SHLD !^#VÕÍ Ãq!HåÍÃq!HåÍÃq!HåÍÃq!HåÍÃqÍÙDAA! ^#VÕÍ ÃqÃq!HåÍ ÃqÍÿLHLD !!Cå!DåÍ)Ã!Cå!EåÍ)Ã!Cå!HåÍ)Ã!Cå!LåÍ)Ã!Cå!MåÍ)Ã!Cå!AåÍ)ÃÍÌBv„’ ®¼ÊØæô,:HÉ*.‡åÃg!Då!BåÍ)Ã�!Då!CåÍ)Ã�!Då!DåÍ)Ã�!Då!EåÍ)Ã�!Då!HåÍ)Ã�!Då!LåÍ)Ã�!Då!MåÍ)Ã�!Då!AåÍ)Ã�!Eå!BåÍåÃ7Í1Ã^Í.Í1Ã^Í.Ã^Í4Ã^Í7Ã^Í:Ã^Í=Ã^Í@Ã^ÍÌB  %+1^ÃrÍÌBö ä ê ð r:΂&Ò¨ !€å͇CON:Íf@!€åÍ–LST:Íf@áÑ}£Òö!÷‡åÍèFÍ©C!bƒå!å!Ì‚åÍ_0*Ì‚å!ÿåÍeFñÒö!÷‡åÍèFÍãError closing :ÍîFÍeG!€åÍîFÍeGÍ©CÍ»@ÃÃnÃC!bƒåÍèFÍ©C!ê‚å!ëás#r!ì‚å!ì‚^#Vë#ëás#rÃF!bƒåÍèFÍ©C!ê‚å!ê‚^#Vë#ëás#rÉ!bƒå!å!€åÍB2!bƒå!ÿÿåÍt+Í@!ÿåÍeFñÒ£!÷‡åÍèFÍ�Unable to REWRITE: ÍîFÍeG!€åÍîFÍeGÍ©CÍ»@É!",„!Ü‚å!Ü‚^#Vë#ëás#rÍ!åÍeFñÒÒÍ%ÍÃöÍÍáÑåÍ%áÑåÍ%áÑ".„*,„#",„Ã+!å*,„åÑኄåÍBC!,å͈CÍ/C!^#VÕÍ É;@á}2Ü„ÍÄ@Í4CÍ5STAX ÍBC:Ü„&oå͈CÍ/C! ^#VÕÍ É;@!Þ„ãå!QåÍGÍÄ@Í4CÍqINX ÍBC!Þ„åÍBCÍ/C! ^#VÕÍ É;@á}20…ÍÄ@Í4CÍ£INR ÍBC:0…&oå͈CÍ/C! ^#VÕÍ É;@á}22…ÍÄ@Í4CÍØDCR ÍBC:2…&oå͈CÍ/C! ^#VÕÍ É;@á}24…ÍÄ@Í4 Ã/Í4C!Cå͈C!††åÍBCÍ ÍBCÍ/C!^#VÕÍ É;@!؆ãå!QåÍGÍÄ@!؆åÍJÍR@ñÒjÍ]RET ! ^#VÕÍ ÈÍ4C!Rå͈C!؆åÍBCÍ/C! ^#VÕÍ É;@á}2*‡ÍÄ@Í4CÍ£RST ÍBC:*‡&oå͈CÍ/C! ^#VÕÍ É*.‡åÃ|ÍÌNOP! ^#VÕÍ Ã¥!BåÍÃ¥!BåÍÃ¥!BåÍÃ¥!BåÍÃ¥^#VÕÍ Ãq!HåÍ&Ãq!LåÍÃq!LåÍÃq!LåÍÃqÍ;CMA! ^#VÕÍ ÃqÍÌB„‡‘ª´¾ÈÒæéó  *4qÉ*.‡åÃEÃnÍ‚SPÍÃnÍ”STA !^#VÕÍ ÃnͧSPÍÃn!MåÍÃn!MåÍÃn!MåÍÃnÍÒSTC! ^#VÕÍ ÃnÃnÍèSPÍ ÃnÍúLDA !^#V)Ã�!Eå!CåÍ)Ã�!Eå!DåÍ)Ã�!Eå!EåÍ)Ã�!Eå!HåÍ)Ã�!Eå!LåÍ)Ã�!Eå!MåÍ)Ã�!Eå!AåÍ)Ã�ÍÌB‡•£±¿ÍÛé÷!/=KY�É*.‡åÃx!Hå!BåÍ)á!Hå!CåÍ)á!Hå!DåÍ)á!Hå!EåÍ)á!Hå!HåÍ)á!Hå!LåÍ)á!Hå!MåÍ)á!Hå!AGäÃ.רÃÛÃÃPÉþÃóÃ/ÃhÃ�ÃÖÃ!ÃfÃËÃ0ÉÃ…)þæÃ}ÃrÃoÀÑâùÃú Ã;"Ã|#ý$ÃÑ%Ãü&ÃP(! å!åÍÖE!åÍ­FñÒà!*„å!4‡åÍèFÍ›C:*„&oå!åÍeFñÒà!÷‡åÍèFÍ©C!÷‡åÍèFÍÔDisassembly aborted with ^CÍîFÍeGÍ©CÍ»@!ê‚^#VÕ!î‚^#VÕÍ|FñÒ+!bƒå!åÍØ1+åÕ"0„Ñá#åÕÍ@"0‡*0„#"0„*0‡+"0‡|µÊ*ÍIÃÉû!"4„!Ü‚å!Ü‚^#Vë##ëás#rÍ!åÍeFñÒ°Í%á"2„Í!åÍeFñÒ}*2„åÍ%ÍáÑåÍ+í!÷‡åÍèFͤ*** error *** no second byteÍîFÍeGÍ©CÃ_Í!åÍEIÍáÑåÃPÍ(Í+!bƒåÍèFÍ×' ÍîFÍeGÃ_Í(Í+!bƒåÍèFÍó" ÍîFÍeGÃ_Í(áCÍ MVI ÍBC:4…&oå͈C!,å͈CÍ/C!^#VÕÍ É;@!6…ãå!QåÍGÍÄ@Í4CÍPDAD ÍBC!6…åÍBCÍ/C! ^#VÕÍ É;@á}2ˆ…ÍÄ@Í4CÍ‚LDAX ÍBC:ˆ…&oå͈CÍ/C! ^#VÕÍ É;@!Š…ãå!QåÍGÍÄ@Í4C;DCX ÍBC!Š…åÍBCÍ/C! ^#VÕÍ É;@á}2Ü…á}2Þ…ÍÄ@Í4CÍõMOV ÍBC:Þ…&oåÍ!BåÍÃ¥!BåÍÃ¥ÍRLC! ^#VÕÍ Ã¥Ã¥!BåÍ Ã¥!BåÍ#Ã¥!BåÍ&Ã¥!CåÍÃ¥!CåÍÃ¥!CåÍÃ¥ÍoRRC! ^#VÕÍ Ã¥ÍÌBÅÙãí÷ ),6@JT^h¥É*.‡åÃSÃ|!DåÍÃ|!DåÍÃ|!DåÍÃ|!DåÍÃ|!DåÍÃ|!DåÍÃ|ÍóRAL! ^#VÕÍ Ã|ÕÍ ÃnÍ SPÍ&Ãn!AåÍÃn!AåÍÃn!AåÍÃnÍ8CMC! ^#VÕÍ ÃnÍÌBy|ˆ¡­·ÁËßâî'1nÉ*.‡åÃV!Bå!BåÍ)Ã!Bå!CåÍ)Ã!Bå!DåÍ)Ã!Bå!EåÍ)Ã!Bå!HåÍ)Ã!Bå!LåÍ)Ã!Bå!MåÍ)Ã!Bå!AåÍ)Ã!Cå!BåÍ)Ã!Cå!CåÍ)ÃåÍ)á!Lå!BåÍ)á!Lå!CåÍ)á!Lå!DåÍ)á!Lå!EåÍ)á!Lå!HåÍ)á!Lå!LåÍ)á!Lå!MåÍ)á!Lå!AåÍ)áÍÌB˜¦´ÂÐÞìú$2@N\j¡É*.‡åÃ�!Må!BåÍ)ø!Må!CåÍ)ø!Må!DåÍ)ø!Må!EåÍ)ø!Må!HåÍ)ø!Må!LåÍ)øÍ   HLT! ^#VÕÍ ø!Må!AåÍ)ø!Aå!BåÍ)ø!Aå!CåÍ)ø!Aå!DåÍ)ø!Aå!EåÍ)ø!Aå!HåÍ)ø!Aå!LåÍ)ø!Aå!MåÍ)ø!Aå!AåÍ)øÍÌB©·ÅÓáïý-;IWes�¸É*.‡åÃÐ ÍÇADD!BåÍ,Ãù ÍØADD!CåÍ,Ãù ÍéADD!DåÍ,Ãù ÍúADD!EåÍ,Í"SBB!AåÍ,Ã:"ÍÌB!!#!4!E!V!g!x!‰!š!«!¼!Í!Þ!ï!":"É*.‡åÃR#ÍI"ANA!BåÍ,Ã{#ÍZ"ANA!CåÍ,Ã{#Ík"ANA!DåÍ,Ã{#Í|"ANA!EåÍ,Ã{#Í�"ANA!HåÍ,Ã{#Íž"ANA!LåÍ,Ã{#ͯ"ANA!MåÍ,Ã{#ÍÀ"ANA!AåÍ,Ã{#ÍÑ"XRA!BåÍ,Ã{#Íâ"XRA!CåÍ,Ã{#Íó"XRA!DåÍ,Ã{#Í#Í%NZÍ2ÃÐ%Í% PUSH B! ^#VÕÍ ÃÐ%Í2%ADI !^#VÕÍ ÃÐ%!0åÍ8ÃÐ%ÍO%Z Í5ÃÐ%ÍY%Í5ÃÐ%Íe%Z Í/ÃÐ%ÃÐ%Ít%Z Í2ÃÐ%Í~%Í2ÃÐ%Í�%ACI !^#VÕÍ ÃÐ%!1åÍ8ÃÐ%ÍÌBÄ$Ð$ê$ö$% %&%?%I%U%_%k%n%z%„%�%Ð%É*.‡åÃÒ&ÍÞ%NCÍ5Ãû&Íñ% POP D! ^#VÕÍ Ãû&ÍÃO(Í(XRI !^#VÕÍ ÃO(!5åÍ8ÃO(ÍÌB'')'5'J'V'p'‰'“'Ÿ'´'À'Õ'á'((O(É*.‡åÃ[)Í](P Í5Ä)Ír( POP PSW! ^#VÕÍ Ä)Í…(P Í/Ä)Í‘(DI! ^#VÕÍ Ä)ͤ(P Í2Ä)͹( PUSH PSW! ^#VÕÍ Ä)ÍÒ(ORI !^#VÕÍ Ä)!6åÍ8Ä)Íï(M Í5Ä)Íý(SPHL! ÍB2*шå*ψå̓-*ˈåÍ@áëás#rÉ;@á"Óˆá"Õˆá"׈á"Ùˆá"ÛˆÍÄ@*Ûˆå*Ùˆå*׈åÍB2*Ûˆë! å*Óˆëás*Ûˆå*Ùˆå̓-*ÕˆåÍ@áëás#rÉÃÃw+;@á"åˆá"çˆÍÄ@ÍÙE*çˆ^Õ!åÍeFñÒ7,*çˆåͰ+@:PASTMP00.$$$!åÍG!¾ˆë!å*çˆë! å!åÍ­H!¾ˆë!å!¾ˆë!^ë#ëás!¾ˆë!^Õ!9å͘FñÒ(,îFÍeG*óˆåÍîFÍeGÍ. in RESETÍîFÍeGÍ©C!÷‡åÍèFÍ©C!÷‡åÍèFÍI.Program abortedÍîFÍeGÍ©CÍ»@*óˆë! å!å!åÍìH*óˆ8å!ëás*ñˆå!ÿÿåÍeFñÒ¨.*ñˆ}/o|/g#"ñˆ*óˆ@å!ëásö.*óˆ@å!ëás*óˆ<å!ëás*óˆ;å!ëás*óˆë! å!ëás!gŠå*óˆëás#r*óˆ?å!€ëás*Ãù Í ADD!HåÍ,Ãù Í ADD!LåÍ,Ãù Í- ADD!MåÍ,Ãù Í> ADD!AåÍ,Ãù ÍO ADC!BåÍ,Ãù Í` ADC!CåÍ,Ãù Íq ADC!DåÍ,Ãù Í‚ ADC!EåÍ,Ãù Í“ ADC!HåÍ,Ãù ͤ ADC!LåÍ,Ãù ͵ ADC!MåÍ,Ãù ÍÆ ADC!AåÍ,Ãù ÍÌBÀÑâó  & 7 H Y j { Œ � ® ¿ ù É*.‡åÃXRA!EåÍ,Ã{#Í#XRA!HåÍ,Ã{#Í&#XRA!LåÍ,Ã{#Í7#XRA!MåÍ,Ã{#ÍH#XRA!AåÍ,Ã{#ÍÌBB"S"d"u"†"—"¨"¹"Ê"Û"ì"ý"##0#A#{#É*.‡åÓ$ÍŠ#ORA!BåÍ,ü$Í›#ORA!CåÍ,ü$ͬ#ORA!DåÍ,ü$ͽ#ORA!EåÍ,ü$ÍÎ#ORA!HåÍ,ü$Íß#ORA!LåÍ,ü$Íð#ORA!MåÍ,ü$Í$OR&NCÍ/Ãû&Í&OUT !^#VÕÍ Ãû&Í)&NCÍ2Ãû&Í<& PUSH D! ^#VÕÍ Ãû&ÍU&SUI !^#VÕÍ Ãû&!2åÍ8Ãû&Ír&C Í5Ãû&Ãû&Í�&C Í/Ãû&Í“&IN !^#VÕÍ Ãû&ͦ&C Í2Ãû&Ãû&Í»&SBI !^#VÕÍ Ãû&!3åÍ8Ãû&ÍÌBØ%ä%þ% &#&/&I&b&l&x&{&‡& &¬&¯&È&û&É*.‡å^#VÕÍ Ä)Í)M Í/Ä)Í)EI! ^#VÕÍ Ä)Í/)M Í2Ä)Ä)ÍD)CPI !^#VÕÍ Ä)!7åÍ8Ä)ÍÌBW(c((‹(ž(ª(Æ(ß(é(õ( ))))5)8)Q)„)É;@á",‡ÍÄ@*,‡ë!}£o|¢g".‡*,‡å!åÍ.Fà *Í>Ã6*ÍAÃ6*ÍDÃ6*ÍGÃ6*ÍJÃ6*ÍMÃ6*ÍPÃ6*ÍSÃ6*ÍVÃ6*ÍYÃ6*Í\Ã6*Í_Ã6*ÍbÃ6*ÍeÃ6!¾ˆë!å!0ëás!¾ˆë!å!¾ˆë!^ë#ëás*çˆå*åˆå*çˆåÍB2*çˆë! å!å!åÍìH*åˆå!ÿÿåÍeFñÒ|,*çˆ@å!ëás*åˆ}/o|/g#"åˆÃŠ,*çˆ@å!ëás*çˆ<å!ëás*çˆ;å!ëás*çˆ8å!ëás!gŠå*çˆëás#r*çˆ6å!ëás#r*çˆ9å*åˆëás#r*çˆ=å*çˆÂëás#r*çˆ4å*åˆëóˆAå!ëás*óˆ8å!ëás*óˆ9å*ñˆëás#r*óˆ4å*ñˆëás#r*óˆ=å*óˆÂëás#r*óˆ^Õ!åÍeF*óˆåÍe9á}/oÑ}³Ò~/!eŠå!ÿëás#rè/*óˆåÍb9ñÒ�/Ã[0è/!eŠå!å*óˆåÍÖEáëás#r!eŠ^#VÕ!ÿåÍ­FñÒ?0!eŠå!ëás#r*óˆ<å!ëás*óˆ;å!ëás*óˆ4å*ñˆëás#r*ñˆå!åÍ­FñÒ<"Í!SUB!BåÍ,Ã:"Í!SUB!CåÍ,Ã:"Í*!SUB!DåÍ,Ã:"Í;!SUB!EåÍ,Ã:"ÍL!SUB!HåÍ,Ã:"Í]!SUB!LåÍ,Ã:"Ín!SUB!MåÍ,Ã:"Í!SUB!AåÍ,Ã:"Í�!SBB!BåÍ,Ã:"Í¡!SBB!CåÍ,Ã:"Ͳ!SBB!DåÍ,Ã:"ÍÃ!SBB!EåÍ,Ã:"ÍÔ!SBB!HåÍ,Ã:"Íå!SBB!LåÍ,Ã:"Íö!SBB!MåÍ,Ã:"A!AåÍ,ü$Í$CMP!BåÍ,ü$Í#$CMP!CåÍ,ü$Í4$CMP!DåÍ,ü$ÍE$CMP!EåÍ,ü$ÍV$CMP!HåÍ,ü$Íg$CMP!LåÍ,ü$Íx$CMP!MåÍ,ü$͉$CMP!AåÍ,ü$ÍÌBƒ#”#¥#¶#Ç#Ø#é#ú# $$-$>$O$`$q$‚$¼$É*.‡åç%ÍÊ$NZÍ5ÃÐ%ÍÝ$ POP B! ^#VÕÍ ÃÐ%Íð$NZÍ/ÃÐ%Íú$Í/ÃÐ%Ã&(Í 'POÍ5ÃO(Í' POP H! ^#VÕÍ ÃO(Í/'POÍ/ÃO(Í='XTHL! ^#VÕÍ ÃO(ÍP'POÍ2ÃO(Íc' PUSH H! ^#VÕÍ ÃO(Í|'ANI !^#VÕÍ ÃO(!4åÍ8ÃO(Í™'PEÍ5ÃO(ͧ'PCHL! ^#VÕÍ ÃO(ͺ'PEÍ/ÃO(ÍÈ'XCHG! ^#VÕÍ ÃO(ÍÛ'PEÍ2ÃO(Íö'**Z80** SBC HL,DE! ^#VÕÍ *ÍhÃ6*ÍkÃ6*ÍÌB­)³)¹)¿)Å)Ë)Ñ)×)Ý)ã)é)ï)õ)û)**6*É*}´ÊR*^#V#{²ÊN*¯ÂA*!È6#6#6#6!Áˆ6#6!ÆŒ##"ÆŒ!€ÿ9"ÀŒ"ºŒ>2¾ˆ!00"¿ˆ!4‡†6# x±Â�*!"m‡"h‡"0ˆ"+ˆ>2l‡2/ˆ>2t‡27ˆ> 2ö‡!ö‡"q‡!¹ˆ"4ˆ!œ7"ºˆ!€5"¼ˆÉÃÃÞ*Ã+;@á"ˈá"͈á"ψá"шÍÄ@*шå*ψå*͈åás#r*çˆ?å!ëás*çˆåÍe9á}/Ò/-!eŠå!ÿëás#rÃ-*çˆåÍb9ñÒ=-Ã-*çˆå*åˆåÍ_7!eŠå!å*çˆåÍÖEáëás#r!eŠ^#VÕ!ÿåÍ­FñÒ-!eŠå!ëás#rÉÃÆ-;@á"ñˆá"óˆÍÄ@ÍÙE*óˆ8^Õ!åÍeFñÒU.*óˆå*ñˆå!õˆåÍ_0*õˆå!ÿåÍeFñÒU.!÷‡åÍèFÍ©C!÷‡åÍèFÍÿ-Unable to automatically close: Í0*óˆ6å!ëás#r*óˆ@~Ò90!gŠ^#VÕ!gŠ^#Vë4^#VÕÍ)8Ã<0;:Ã[0*óˆ<å!ëás*óˆ;å!ëásÉÃÃe0Ãx1;@á"ùˆá"ûˆá"ýˆÍÄ@ÍÙE!gŠå*ýˆëás#r*ýˆ8^Õ!åÍeFñÒç0*ýˆ9å*ýˆ6^#Vëëás#rÍ&=*ýˆÂå*ýˆ4^#VÕ!åÍìH*ýˆ9å!�ëás#rÍ&=Ã1*ýˆ8^Õ!å͘FñÒ1*ýˆ   9å*ýˆ6^#Vëëás#rÍ&=Ãw1*ýˆ8^Õ!åÍ­FñÒZ1!eŠå!å*ýˆåÍÖEáëás#r*ùˆåÍ@áëás#rÃf1*ùˆå!ëás#r*ýˆ8å!ëásÍÙEÉ;@á"ÿˆá"‰á"‰ÍÄ@*‰8^Õ!å͘FñÒ£1ÃÔ1*‰å*‰åÍ_7!eŠå!ëás#r*ÿˆå!ëás#r*‰8å!ëásÉÃÃÛ1;@á"‰á"‰ÍÄ@*‰å!ÿÿåÍeFñÒ 2!å!÷‡å‰#"+‰*-‰#"-‰Ã”3*‰ë*-‰^Õ!.åÍeF*-‰å*‰^ÕÍÄFáÑ}£Ò•4*-‰#"-‰!"+‰*+‰å!åÍÍF*-‰å*‰^ÕÍÄFáÑ}£Ò•4!%‰å*+‰+Ñå*‰ë*-‰^ÕÍ?2áëás*+‰#"+‰*-‰#"-‰ÃE4*‰å!Ãïÿå!åÍìH*‰ë!å:‰&oë!@{•ozœgëás!‰å*‰ë!å!åÍ­H!%‰å*‰ë! å!åÍ­H*‰ 7*=‰å:•‰&oÑå!?‰ë!åÍÈ5á}2—‰:•‰&oë!}2•‰Ã›6:—‰&ÒQ7:•‰&oë!{•ozœg"9‰ÃW7!"9‰*9‰ãéÃÃb7;@á"¥‰á"§‰ÍÄ@ÍÙE!eŠå!å*§‰åÍÖEáëás#r!eŠå!ëás#rÉÃß7!gŠ^#Vë8^Õ!å͘FñÒí7!gŠ^#VÕ!gŠ^#Vë4^#VÕÍ)8!gŠ^#VëÂë!^ë}2«‰Ã8!gŠ^#VëÂë!^ëás!}2Š:Š&oãé;@á"ŠÍÄ@!}2 Š!Šå! å!~åÍgAÍà@*Š^Õ!å͘F*Š^Õ!åÍÍFáÑ}³Ò\:ó:!å*Š^ÕÑá+"Š#åÕÍ@"5Š*Š#"Š*5Š+"5Š|µÊ¬:*Šë*Š^Õ!ŠåÍÉ@ͳAá}/Ò©:ó:Ãv:!}2 Š: Š&oãéÃÃÁ:!gŠ^#Vë=å!7Šå!åÍ­H!gŠ^#Vë8^Õ!åÍeFñÒ_;*7Šå!å!åÍÖŠ#"7ŠÃì;!gŠ^#Vë6å!ëás#rÍÙEÉÃÃ)=ÃË=;@á}2AŠÍÄ@!gŠ^#Vë"MŠ*MŠ?^Õ!€åÍeFñÒ”=!eŠå!å*MŠBåÍÖEáëás#r!eŠå!å*MŠåÍÖEáëás#r*MŠ?å!ëás*MŠBå*MŠ?^ëÑå:AŠ&oëás*MŠ?å*MŠ?^ë#ëásÉ!eŠå!ëás#r!gŠ^#Vë=å!EŠå!åÍ­H!gŠ^#Vë8^Õ!}2UŠ:UŠ&oãéÃÃ@*eŠ"iŠ*iŠãéá"mŠÑáåÕåÕ͘FñÚ?@Ñá{•ozœg##å*mŠãÉáÑ!å*mŠãÉáã"pŠÃ™@ÍJ@Â`@!å*pŠé!Ã[@ÍJ@ÂX@Ã`@ÍJ@Ú`@Ê`@ÃX@ÍJ@ÚX@Ã`@ÍJ@Ú`@ÃX@ÍJ@ÚX@ÊX@Ã`@áÑãëN2oŠG¹Ú©@Ay·Ê¶@#¾À­@:oйÉÃáã"rŠÉ*rŠãéá"tŠÑ!àÿ9ùåÕ ÅÍ´H*tŠéá"tŠ! 9^#V!9ÃAá"tŠ!9^#V!ÍèFÍîFÍüH!*åÍîFÍüH!åÍîFÍüHÃ;2*‰åÍèF! åÍîFÍüH*‰åÍèFÍ©CÉÃÃE2Ú2;@á}2‰ÍÄ@:‰&oå!aåÍ|F:‰&oå!zåÍÄFáÑ}£Òˆ2:‰&oë!ß}£o|¢g}2‰:‰&o}2 ‰: ‰&oãé;@á"‰á"‰á"‰ÍÄ@!eŠå!ëás#r*‰^Õ!åÍ­F*‰ë!^Õ! åÍeFáÑ}£Òó2*‰å!å!åÍ5ø2*‰å*‰å!åÍ8å!ëásÉÃÃ5;@á"/‰á"1‰á"3‰ÍÄ@*3‰å*1‰ë*/‰Ñå*3‰ë*1‰å*3‰^Õ*1‰ë*/‰ë!{•ozœgÑ{•ozœgåÍ­H*3‰ë!å*3‰^Õ*/‰Ñ{•ozœgëásÉÃÃ5;@á}27‰ÍÄ@!gŠ^#VëÂë!å:7‰&oëás!gŠ^#VÕ!gŠ^#Vë4^#VÕÍ>9ÉÃÃQ6ÃË5;@á"�‰á"Ÿ‰ÍÄ@!}2™‰!å:”‰&oåÑá+"¡‰#åÕÍ@"£‰*¡‰#"¡ë}2«‰!gŠ^#VÕ!gŠ^#Vë4^#VÕÍ)8:«‰&oãéÃÃ,8;@á"¯‰á"±‰ÍÄ@*±‰;å!ëás!gŠå*±‰ëás#r*±‰<~Òq8*±‰;å!ëásÃ:9;:*±‰@~Ò:9*±‰<å*±‰Âë!^Õ!åÍeFáëás*±‰Âë!^Õ! åÍeFá}2Š:Š&oå*±‰<^ëÑ}³Òæ8*±‰;å!ëás:Š&oå*±‰8^Õ!åÍeFáEáëás*7Š^Õ! åÍeFñÒ);!å! åÍÖEá"9ŠÃY;*7Š^Õ!åÍeFñÒY;!å! åÍÖEá"9Š!å!åÍÖEá"9ŠÃ=á;!gŠ^#Vë8^Õ!åÍeFñÒ¡;*7Šå!å!ÿåÍÖEáëás*7Š^Õ!åÍ­FñÒy;Ã=!gŠ^#VëA~ÒÆ;!gŠ^#Vë<å!ëásÃ=!å!gŠ^#Vë9^#VÕÑá+åÕ";ŠÑá#åÕÍ@"=Š*;Š#";Š*=Š+"=Š|µÊ=!å͘FñÒ ?!gŠ^#Vë"OŠ!å*OŠ9^#VÕÑá+åÕ"KŠÑá#åÕÍ@"QŠ*KŠ#"KŠ*QŠ+"QŠ|µÊ?*EŠ^ë}2GŠ:GŠ&oå! åÍeFñÒg>ÃW?*OŠ8^Õ!åÍeFñÒ³>!å:GŠ&oåÍÖEá"IŠ:GŠ&oå! åÍeFñÒ°>!å! åÍÖEá"IŠÃü>!å:GŠ&oåÍÖEá"IŠ*OŠ8^Õ!åÍeFñÒü>:GŠ&oå! åÍeFñÒü>!å! åÍÖEá"IŠ*EŠ#9Õå ÅÍ´H!"9ù*tŠé 6#ÂAÉá"vŠá"xŠ!àÿ9ùÍA*xŠ|·Â8AÍÃV?!å!gŠ^#Vë9^#VÕÑá+åÕ"KŠÑá#åÕÍ@"SŠ*KŠ#"KŠ*SŠ+"SŠ|µÊV?*EŠ^ÕÍ#=*EŠ#"EŠÃ/?ÉÃü>ÃÃ`?;@á"_Šá"aŠÍÄ@!gŠå*aŠëás#r*aŠ"cŠ*cŠ6^#VÕ*cŠ4^#VÕÍeFñÒ°?;:*cŠ6å!ëás#r*cŠ<^ë}/Òþ?*cŠÂå*cŠ6^#VëÑ^ë}2UŠ*cŠ6å*cŠ6^#VÕ!Ñëás#rÃ@!ÿvŠ!9ë! 9 ¶w# B! 9ù*vŠéá"vŠ!9ë! 9 /¦w#Â.B! 9ù*vŠéá"vŠ!9ë! 9 ¦w#ÂPB! 9ù*vŠéë¾ÂuB# y°ÂcB!ãéyMD!ãå`iO>·ÉÍbBá}îoãéÍbBy°Ê�B¾Ú£Bá!ãéá!ãéÍbBy°Ê�Bë¾Ú£BÃ�BÍbBÊ£BØBÍbBÊ£BñBÑá"†Šë^#V#ë"„Šë^#V#"‚Šë"€Š*†Šå*„ŠåÍÍFñÚ C*†Šå*€Šë*„Š   å͘FñÚ C*†Šë*„Š{•_zœW*‚Š^#Vëé*€Š#)ë*‚Š^#Vëé!ˆŠãé!‰Š"ˆ‹¯2ˆŠ2«ŒÉá"Œ‹Ñ·ÊxC2Ž‹O:ˆŠ�Ú|C*ˆ‹åÕÅÍ´H:ˆŠG:Ž‹€2ˆŠ_!‰Š"ˆ‹*Œ‹é>ÿ‘O>2«ŒÃWCÑÁy2‹‹>2Š‹!Š‹åÕÃBCá"�‹ÍYGÁáq*�‹é ÅÍI ÅÍIÉ*gŠ;~ÚÉCÍYGÁöC6*gŠ8~þÐÍYGÁ*gŠÂ~þ ÀÍYGÁÉáÑÁAÑåÍ}Dzæ€ò DÕ-ÍeDÑŒ*™Œãé!å!€åÍÖEá"©ŒÉÁáÑÅ}·Ê+F-7?{_zWÃFáÕéÁáÑÅ}·Ê+F-7?zW{_Ã2Fá~#å·ÊbFþʪFþÊ•FþÊÊFþÊyFÃÁFÍÓFÁÑá}“ÂrF|šÊºF!å`iéÍÓFÁÑáz¬úŽF}“|šòºFÃrF¤òºFÃrFÍÓFÁÑáz¬úŽF{•zœÚºFÃrFÍÓFÁÑá}“ºF|šÊrF!å`iéÍÓFÁáÑÃFÍÓFÁáÑÛFÁÑá&}æoã&}æoãåÕÅÉáã"gŠÉáÿÿÕÕéáã"ºˆÉáã"¼ˆÍ IáÁåÅYÍ"IÁÉ}´È-È åÍ"Iá-ÂIÉáÕå*¼ˆéëyHÒ8Iëë)Â1Iy§Â.IëãéáÁÑåÃ)IMDÍ)IáÉÉÿÿ!ÉáÁÑåÍHáÕéáÁÑåÍHãéÑÁáÕÍ¿GëãéÑÁáÕÍ¿GãéáÁÑãùHáÁÑãëx±ÊÈH~# x±Â¾HëÉáÁÑãëÃÖHáÁÑãx±ÊêH +ë +~+ x±ÂàHëÉáÁÑã{²Èq#{²ÂóHÉÁááÅåån type 11 '[' expected 12 ']' expected 13 'END' expected 14 ';' expected (possibly on line above) 15 Integer expected 16 '=' expected 17 'BEGIN' expected 18 Error in declaration part 19 error in 20 '.' expected {/_z/Wz·úDDÅ'ÍHÁÍXDëÅèÍHÁÍXDëÅdÍHÁÍXDëÅ ÍHÁÍXDëÍXDÉ!SDå!åÍîF͈GÉ32768å>0³_þ0ÊvDáåÅÕ!ÿÿååÍüHÃsDÁáÉx·áÈÃeDxþÿÈÕz·ò Dþ€Â˜D{·Â˜DxÖGîDz/W{/_Å ÍHÁz³Â Dx·úÊDÊÊD ÅÕ!ÿÿååÍüHÃÅDÁîDÑɯ2”Œá"’Œá}2‘‹¯2’‹*gŠ8~þÂ;E!‘‹åͶE:’‹·Ê E:“‹þ EÉ!œ7"ºˆ!€5"¼ˆÉ¯2«Œá"¬ŒáÁÑÕë"®ŒëYPz·ÊLGÕ½Ê5GÚ5G>2«Œ}2°ŒÃ@G!aGå*ºˆéÁáÅéá"±Œá"³Œá"µŒá#å+n&å*µŒå*³Œå͈G*±ŒéÁááÑÕÅ|þÿÊ G}“o|šgú GÍ IÁÑáÅ{²ÈÕNåÅÍIáÑ#z³Â§GÉá:·Œõéë!¯2·Œy°ÂÏGÃHx/Gy/O>=ÂàGëÃH)ÚúGë)ëÒëG,å ÚôGáÃØG33ÃØGë)ëÒHååå21 '*' expected 50 Error in constant 51 ':=' expected 52 'THEN' expected 53 'UNTIL' expected 54 'DO' expected 55 'TO' or 'DOWNTO' expected in FOR statement 56 'IF' expected 57 'FILE' expected 58 Error in (bad expression*gŠ<6!’‹å!ÿåÍG*gŠ8~þÂ5E Å!ÿÿååÍüH*gŠ;6> *’Œé!“‹>2’‹å*gŠ; ~áÚ Eå!ZEå*ºˆéÁá:’‹þÿÊoEÍ€E#:’‹<2’‹ë*gŠ; ~ëÒQEà Eyþ Ê�Eq:”Œ<2”ŒÉ6 :’‹<2’‹:”Œ<2”ŒþÿÈæÊ«E#Ã�Eå!‘‹#5áÉÃùE;@á"•ŒÍÄ@! å*•ŒåÍÖEá"—ŒÉÃÃÜEÃF;@á"£Œá"¥ŒÍÄ@*¥ŒM*£ŒëÍo&"§Œ*§Œ"™, ÃØGëÉë!ÿÿ>2·ŒÉ¯2·Œ±Â#H°Ê{Hî€Ê{Hx§úCH²ú1HëÍ¿GÉ{/oz/g#Í¿G{/_z/Wɯ‘O>˜Gz§úiHÂVH³ÊiHëÍ¿G{/_z/W}‘o|˜g#ɯ“o>šgÍ¿G¯•o>œgÉ>2·Œÿÿ!ÉáÁÑåÍHáÕéáÁÑåÍHãéÑÁáÕÍ¿GëãéÑÁáÕÍ¿GãéáÁÑãùHáÁÑãëx±ÊÈH~# x±Â¾HëÉáÁÑãëÃÖHáÁÑãx±ÊêH +ë +~+ x±ÂàHëÉáÁÑã{²Èq#{²ÂóHÉÁááÅåå 1 Error in simple type 2 Identifier expected 3 'PROGRAM' expected 4 ')' expected 5 ':' expected 6 Illegal symbol (possibly missing ';' on line above) 7 Error in parameter list 8 'OF' expected 9 '(' expected 10 Error i) 59 Error in variable 99 MODEND expected 101 Identifier declared twice 102 Low bound exceeds high bound 103 Identifier is not of the appropriate class 104 Undeclared identifier 105 sign not allowed 106 Number expected 107 Incompatible    subrange types 108 File not allowed here 109 Type must not be real 110 type must be scalar or subrange 111 Incompatible with part 112 Index type must not be real 113 Index type must be a scalar or a subrange 114 Base typ Error in type of standard procedure parameter 126 Number of parameters does not agree with declaration 127 Illegal parameter substitution 128 Result type does not agree with declaration 129 Type conflict of operands 130 Expression is not of set of expression 145 Type conflict 146 Assignment of files not allowed 147 Label type incompatible with selecting expression 148 Subrange bounds must be scalar 149 Index type must be integer 150 Assignment to standard function is not allowed 151 n of standard proc/func not allowed 165 Multidefined label 166 Multideclared label 167 Undeclared label 168 Undefined label 169 Error in base set 170 Value parameter expected 171 Standard file was re-declared 172 Undeclared external file 1dure too long 256 Too many external references 257 Too many externals 258 Too many local files 259 Expression too complicated 398 Implementation restriction 399 Implementation restriction 400 Illegal character in text 401 Unexpected end of åe must not be real 115 Base type must be a scalar or a subrange 116 Error in type of standard procedure parameter 117 Unsatisified forward reference 118 Forward reference type identifier in variable declaration 119 Re-specified params not OK for type 131 Tests on equality allowed only 133 File comparison not allowed 134 Illegal type of operand(s) 135 Type of operand must be boolean 136 Set element type must be scalar or subrange 137 Set element types must be compatible 138 Type of va Assignment to formal function is not allowed 152 No such field in this record 153 Type error in read 154 Actual parameter must be a variable 155 Control variable cannot be formal or non-local 156 Multidefined case label 157 Too many cases in c74 Pascal function or procedure expected 183 External declaration not allowed at this nesting level 187 Attempt to open library unsuccessful 191 No private files 193 Not enough room for this operation 194 Comment must appear at top of program 2input 402 Error in writing code file, not enough room 403 Error in reading include file 404 Error in writing list file, not enough room 405 Call not allowed in separate procedure 406 Include file not legal 407 *** HEAP OVERFLOW *** 496 Invaliåa forward declared procedure 120 Function result type must be scalar, subrange or pointer 121 File value parameter not allowed 122 A forward declared function's result type can't be re-specified 123 Missing result type in function declaration 125 riable is not array 139 Index type is not compatible with the declaration 140 Type of variable is not record 141 Type of variable must be file or pointer 142 Illegal parameter solution 143 Illegal type of loop control variable 144 Illegal type ase statement 158 No such variant in this record 159 Real or string tagfields not allowed 160 Previous declaration was not forward 161 Again forward declared 162 Parameter size must be constant 163 Missing variant in declaration 164 Substitio01 Error in real number - digit expected 202 String constant must not exceed source line 203 Integer constant exceeds range 206 Illegal real number 250 Too many scopes of nested identifiers 251 Too many nested procedures or functions 253 Proced argument to INLINE pseudo procedure 497 Error in closing code file. 500 Non-ISO extension being used! 599 Implementation Restriction å   å!Ï"èPÃ#!?"èPÃ#ÍÀ6î÷ #*ÒCå*äPå!åÍ:áÑå*ÒCå*äPå!åÍ:áÑ^Õ*èPÑ}£o|¢gå*æPå*äPë!}£o|¢gå*äPë!}£o|¢gÑåÍü9áÑëásÉ!œAå!€åÍ»3á}2îP:îP&oãéÍ5á}2øPÍ"5!àB=^#VÕ:øP&oëás!àBå!åÍœ-ÉÍ5á"úPÍ"5*úP&å!åÍm<á}2 Q*úP&å!åÍw<á}2 Q!üPåÍ 0123åÍ=ÉÍ+É:A&Òƒ!)RåÍÎ:ÍT6Cannot to convert a 8086 object file to L80 compatibleÍÔ:ÍK;Í�7!)RåÍÎ:ÍwLib/MT+ abortedÍÔ:ÍK;Í�7Í5Í(*¸CåͲ=á"¸C*ÐCë*¸Cå!(Qå!åÍ =*ÊCë*¸C{•ozœg++"*Q!*Qå*ÐCë*¸Cå!åÍ =*(Qå*¸CåÍÙ<ñÒ4!)RåÍÎ:Í!bad backchain, currentloc, ÍÔ:ÍK;Í�7!)RåÍÎ:Í#Lib/MT+ abortedÍÔ:ÍK;Í�7Í5Í(:ÊP&Ò£*ÌPå!åÍb:ñÒ!)RåÍÎ:ÍsExternal+offset table overflowÍÔ:ÍK;Í�7Í5!ºPå*ÌP+))Ñå*¸CåͲ=áëás#r!}2ÊPÃÍ!ºPå*ÌP+))Ñ##å*¸CåͲ=áëás#r!}2ÊP*ÌP#"ÌPÉÍ(*¸CåͲ=á"ÌCÉÍ(*¶Cå!åÍK:ñÒú*¸CåͲ=á"ÊCÉÍ(*¸"\Q|µÊ *BQå*DQ+Ñ^ÕÍÃõ É!åÍó!åÍ !ÂCåÍa!å*ÎP+åÑá+åÕ"HQÑá#åÕÍ|4"^Q*HQ#"HQ*^Q+"^Q|µÊ­ !ÖCå*HQå! åͤ=áÑ^Õ!åͳ:ñÒª !åÍó!åÍ !ÖCå*HQå! åͤ=áÑåÍaÃN *ÌCå!åÍ“:Í¿ ERLÍÆ R86Ͱ4áÑ}³oå:A&o}/oÑ}³Ò !åÍó! åÍ !åÍä*ÌC&åÍ*ÌC+))Ñ##^#Vël&åÍÃw ÉÍdÍ ERLÍ'R86Ͱ4ñÒ1Íj!"8Q*8Qå*ÊCåͳ:ñÒÔ*8QåÍÃÂ!åͳ*ÐCë*8Q^ÕÍ*8Q#"8QÃÑ*8QåÍ!åÍK:ñÒŒ!åÍóÓ!åÍó*ÐCë*8Q^ÕÍ*8Q#"8Q*ÐCë*8Q^ÕÍ*8Q#"8QÃÑÍÀ6PppÑÃ7Íg!åÍó!åÍ *ÐCë!^Õ!åÍ“:*ÐCë!å456789ABCDEFá#å!åÍ=!üPå: Q&oÑ^Õ!)RåÍÎ:ÍÔ:Í[=!üPå: Q&oÑ^ÕÍÔ:Í[=ÉÍͲ=á"Q*QãéÍ5á"QÍ"5*Q&åÍ*Ql&åÍÉÍ-á"Q*Që*QåÍ-áÑ"¶CÍ"á"¸CÉÍ-!åÍü9Í-!åÍü9áÑåÍ-áÑ"Q!ºCåÍÉ á#å!åÍ=:A&o}/oå*Qå!åÍK:áÑ}£Òö!"Q!å*QåÑáchain=ÍÔ:ÍK;*¸CåͲ=Í%!)RåÍÎ:!/åÍÔ:Í[=*(QåͲ=Í%Í5*(Q"¸C*(Qå!åÍK:ñÒ‘É!)RåÍÎ:ÍiCommon not supportedÍÔ:ÍK;Í�7!)RåÍÎ:ÍŒLib/MT+ abortedÍÔ:ÍK;Í�7Í5Í(Í+É!".QÍ(Í+ͲERL͹R86Ͱ4ñÒä*ÐCå*¸CåͲ=á+Ñ^Õ!èåÍ“:ñÒä!"¶C*¶Cå!åÍK:ñÒ!ºCå!å*¸CåÍCåͲ=á"¸C*ÐCë*¸Cå!0Qå!åÍ =!ÊCå*ÐCë*¸Cå!åÍ =!å*¸CåÍ*0Qå*¸CåÍÙ<ñÒ¥ !)RåÍÎ:Íw !bad backchain, currentloc, chain=ÍÔ:ÍK;*¸CåͲ=Í%!)RåÍÎ:!/åÍÔ:Í[=*0QåͲ=Í%Í5*0Q"¸C*0Qå!åÍK:ñÒ ÉÍ(*¸CåͲ=á"ÎC*ÎCå*ÔCå!åͤ=Í»<ñÒ` !)RåÍÎ:Í This module is too bigl&åÍ!åÍó! åÍ !åÍä*ÎC&åÍ*ÎCl&åÍÉ!å*ÎP+åÑá+åÕ"JQÑá#åÕÍ|4"`Q*JQ#"JQ*`Q+"`Q|µÊZ !ÖCå*JQå! åͤ=áÑ"bQ*bQ^ÕÃF !åÍó!åÍ *bQ^Õ!åÍK:ñÒ° !åÍä÷ !åÍä*bQ ^#Vë&åÍ*bQ ^#Vël&åÍ*bQåÍaÃW !åÍó!åÍ *bQ^Õ!^Õ!åÍ“:áÑ}³oå*ÐCë!^Õ!ÃåÍK:áÑ}£oå:A&oÑ}£ÒA!åÍäÃH!åÍä!åÍ!åÍ*°Cå!åÍ“:ñÒo!åͳÃV!"ÎP*ÐCå*ÔCå!åͤ=!åÍK=*ÒCå*ÔCå!åÍK=!ÖCå!ä å!åÍK=!"ÎC!"ÌC!"ÊCÉ!}2´CÉÍ"Ͳ=á"NQ!NQå*ÐCë*ÊCå!åÍ =!å*ÊCåÍ*ÊC##"ÊCÉÍ"Ͳ=á"PQÛÃ|ÃÏÃÛÃÆÃJÃYÃwØÃTÃëÃïÃóÃà ÃJßÃÃXöÃÎÃÝÃûû Ãa ÃÃŽ à Ã0 Ã[ üÃÄÃöÃ(ÃnÍ5á"ÞPÍ"5*ÒCå*ÞPå!åÍ:áÑ^Õ*ÞPë!}£o|¢gå*ÞPë!}£o|¢gÑåÍ:!Ñ}£o|¢g"ÔP*ÔPãéÍ5á"äPá"æPÍ"5*äPë!}£o|¢gåÃ!ü"èPÃ#!ó"èPÃ#+åÕ"QÑá#åÕÍ|4"XQ*Q#"Q*XQ+"XQ|µÊ9!ºCå*Q+ÑåÍÅáëásÃ:A&ÒS!ºCå!+Ñå! ëásÉÍ5á" Qá}2"Qá"$QÍ"5*ÎPå!+åͪ:ñÒÅ!ÖCå*ÎPå! åͤ=áÑ"ZQ*ZQå*$Qå!åÍ=*ZQå:"Q&oëás*ZQ å* Qëás#r*ÎP#"ÎPÃê!)RåÍÎ:ÍáSymbol table fullÍÔ:ÍK;Í�7ÉÍ+ÉÍ+ÉÍ+!ÂCå!ºCå!²=Í.Ã!ºCå!å*¸CåͲ=Í.ÉÍ(Í+*¶Cå!åÍK:ñÒE!ºCå!å*¸CåͲ=Í.ÃW!ºCå!å*¸CåͲ=Í.É!)RåÍÎ:Í€External-offset not supportedÍÔ:ÍK;Í�7!)RåÍÎ:Í£Lib/MT+ abortedÍÔ:ÍK;Í�7Í5Í(Í+ÉͽERLÍÄR86ÍÄ4ñÒ/!)RåÍÎ:Í*External + offset not supported by LIB/MT+, max=ÍÔ:ÍK;!)Rå!å*ÔCå!åͤ=!åÍÀ!)RåÍÎ:!HåÍÔ:Í[=Í�7!)RåÍÎ:ÍT Lib/MT+ abortedÍÔ:ÍK;Í�7Í5ÉÍ(*¬Cå!åÍ“:ñÒ} Í-á"2QÃd Í^!"ÌP!}2ÊPÉÍ5á"BQÍ"5:A&Òª !"FQð !"FQ*BQå*FQ+Ñ^Õ! åÍK:ñÒÓ *FQ+"FQð *FQåÍó!å*FQåÑá+åÕ"DQÑá#åÕÍ|4"\Q*DQ#"DQ*\Q+åÍK:ñÒ !åÍäà !åÍä*bQ ^#Vë&åÍ*bQ ^#Vël&åÍ*bQåÍaÃW ÍÀ6‚ ‚ ä ä W ÃL É!å*ÌP+åÑá+åÕ"LQÑá#åÕÍ|4"dQ*LQ#"LQ*dQ+"dQ|µÊ!åÍó! åÍ !åÍä!ºPå*LQ+))Ñ^#Vë&åÍ!ºPå*LQ+))Ñ^#Vël&åÍ!åÍó! åÍ !åÍä!ºPå*LQ+))Ñ##^#Vë&åÍ!ºPå*LQ!PQå*ÐCë*ÊCå!åÍ =!å*ÊCåÍ*ÊC##"ÊCÉÍ"Ͳ=á"RQ*ÊC##"ÊC!)RåÍÎ:Ídcomrel detected, possible errorÍÔ:ÍK;Í�7É!å*ÊCåÍÍÅá}2VQ*ÐCë*ÊCå:VQ&oëás*ÊC#"ÊCÉ*ù͇!}2A!)RåÍÎ:Í»Lib/MT+ÍÔ:ÍK;Í�7!)RåÍÎ:ÍÚ Release 5.5ÍÔ:ÍK;Í�7!)RåÍÎ:Í (c) 1981, MT Micro   SYSTEMS, Inc.ÍÔ:ÍK;Í�7!€å!Aå!åÍ =!@å!ÿÿåÍ(7!AåÍ67!.åÍ|7ÍEBLDÍ67Í#7!²CåÍä *²Cå!ÿåÍK:ñÒÇ!)RåÍÎ:Í|Unable to find .ÍÔ:ÍK;͉BLDÍÔ:ÍK;͘ fileÍÔ:ÍK;Í�7!)RåÍÎ:Í»Lib/MT+ abortedÍÔ:ÍK;Í�7ð!)Rå!åÍ.áÿå!åÍÀ!)RåÍÎ:ÍH total bytes availablRåÍÎ:ÍLib/MT+ abortedÍÔ:ÍK;Í�7ð*@#"@!"ÎP*ÐCå*ÔCå!åͤ=!åÍK=*ÒCå*ÔCå!åÍK=!ÖCå!ä å!åÍK=!"ÎC!"ÌC!"ÌP!}2ÊP!€"¦C!}2¨C!}2´C!"ÊC!}2ªC!"¬C!)RåÍÎ:͸Reading:ÍÔ:ÍK;!È@åÍÔ:ÍK;ÍÏ...ÍÔ:ÍK;Í�7Í-á"²C*²Cå!åÍK:ñÒôÍyÃÑÍ-á"²C*²Cë*yOͶÁͶÉáãMÅyOÍçÁÍçÉáãMyOÕͶÑ É:¬C·ÂEåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5o&ãé:¬C·ÂoåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5G:¬C·Â–åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°o&ãé:¬C·ÂÁåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5G:¬C·ÂèåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·Âå5°o&ãé:¬C·ÂåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5G:¬C·ÂFåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂnåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·Â–åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·Â¾åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂæåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂåÅÍ2¦Q2iR> 2(R!(R"£Q!ëR"fR!ú+"ìR!x+"îRÉÃÃ1ËÚÍ5á"ùRá"ûRÍ"5!æV^#VÕ!æVåÍK:ñÒe!æVå!æV^#Vë####ëás#r*ûRå!æV^#Vëëás#r!æVå!æV^#VÕ*ùRÑëás#rÉÍ5á"ýRá"ÿRÍ"5É!àV^#VÕ!æV^#VëÑ{•ozœg"S*SãéÃÃ>ÃÃÃsÍ5á}2/SÍ"5:/S&oå!aåÍb::/S&oå!zåͪ:áÑ}£Ò:/S&oë!ß}£o|ISå!+Ñå!9Så*3Sl&å!åÍw<áÑ^ëëás!ISå!+Ñå!9Så*3S&å!åÍm<áÑ^ëëás!ISå!+Ñå!9Så*3S&å!åÍw<áÑ^ëëás*1Så!åÍK:ñÒ— !ISå!+Ñå!ISå!åÍ =!å*1Så!åͤ=Ñá+åÕ"3SÑá#åÕÍ|4"OS*3S#"3S*OS+"OS|µÊà !ISå*3S+Ñ^ÕÍx+ù ÉÃÃê Ã(!Í5á"USá"WSá"YSá"[SÍ"5eÍÔ:ÍK;Í�7Í.áÿå!åÍ€<á"ÔC!)RåÍÎ:Í@Largest module can be: ÍÔ:ÍK;!)Rå!å*ÔCå!åͤ=!åÍÀ!)RåÍÎ:ÍrH bytesÍÔ:ÍK;Í�7!ÐCå*ÔCå!åͤ=Í(!ÒCå*ÔCåÍ(!@åÍÎ:!È@å!PåͲ8Íœ7!È@å͸L80Ͱ4!È@åÍÆl80Ͱ4áÑ}³o}2A:A&Òð!@åÍÎ:!È@å!PåͲ8Íœ7!àBå!å!È@åÍç'!²CåÍ-áÑ"²C*²CåÃÀÍpÃÑÍsÃÑÍvÃÑÍ#á"²C*²CåÔÍ1ýÍ4ýÍ7ýÍ:ýÍ=ýÍ@ýÍCýÍFýÍIýÍLýÍOýÍRýÍUýÍXýÍ[ýÍmýÍÀ64:@FLRX^djpv|‚ˆŽ½ÃÑÍÀ6& Ñ:´C&ÒØ!œAå!€å!²CåÍk&!)RåÍÎ:ÍûEnd of ÍÔ:ÍKÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°o&ãé:¬C·Â;åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5G:¬C·ÂbåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂŠåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·Â²åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°o&ãé:¬C·ÂÝåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5G:¬C·ÂåÅÍÁyÁá2ªC>ÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·Â6åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°oå:¬C·Â^åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5G:¬C·Â…åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·Â­åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂÕåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂýåÅÍÁyÁá2ªC>2¬C:ªC¢g}2/S:/S&oå!9åÍ~:ñÒ&:/S&oùÿ}2/S:/S&oë!}£o|¢g"%S*%SãéÍ5á" Sá" Sá"Sá"SÍ"5!‰Tå*Sëás#r* Så!åÍ~:* Så!åͳ:áÑ}³Ò�Ãr!"#S!Së*#SåÍú+áëás!Së*#S^Õ!åÍK:*#Så!åÍ“:áÑ}£ÒÇ*#S+"#SÃÎ*#S#"#S*S;~Ò‡*S8^Õ!åÍ“:ñÒøÍú+á}2S!Së!*[Så*YSå*WSåÍç'*[Så*YSåÍ�#*USåÍn4áëás#rÉÍ5á"]Sá"_Sá"aSá"cSá"eSÍ"5*eSå*cSå*aSåÍç'*eSë! å*]Sëás*eSå*cSåÍ�#*_SåÍn4áëás#rÉÃÃ!Í5á"oSá"qSÍ"5Í¿9*qS^Õ!åÍK:ñÒC"*qSåͼ!@:PASTMP00.$$$!åÍô:!ðRë!å*qSë! å!åÍ =!ðRë!å!ðRë!^ë#ëás!ðRë!^àBå!åÍ€!Ín4!ÿåÍK:ñÒn!)RåÍÎ:Í5Unable to create: ÍÔ:ÍK;!È@åÍÔ:ÍK;Í�7!)RåÍÎ:ÍbLib/MT+ abortedÍÔ:ÍK;Í�7ð!"@!}2®C!"°C!@å!åͳ*á}/Ò#!@åÍÎ:!È@å!PåͲ8Íœ7!œAå!€å!È@åÍç'!œAå!€åÍ�#Ín4!ÿåÍK:ñÒ$!)RåÍÎ:ÍëUnable to open: ÍÔ:ÍK;!È@åÍÔ:ÍK;Í�7!);!È@åÍÔ:ÍK;Í reachedÍÔ:ÍK;Í�7Ã�!åÍó!åÍ *°Cå!åÍ“:ñÒJ!åͳÃ1!åÍ!åÍ!àBå!å!²CåÍk&!)RåÍÎ:͉Lib/MT+ 5.5 completed, ÍÔ:ÍK;*@åÍÔ:ÍÐ7ͧ processedÍÔ:ÍK;Í�7Í5áãM:°CþÂÓå:®C&oÅåÍÁá¯2°C2®C<2°C:®CGyæ°2®CÉáãMÅyOͶÁͶÉáãMÅyOͶÁÅ2¬C:ªC2ªCæ!¬C5°G:¬C·Â,åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂTåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·Â|åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·Â¤åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂÌåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂôåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C2ªCæ!¬C5°G:¬C·Â%åÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂMåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°G:¬C·ÂuåÅÍÁyÁá2ªC>2¬C:ªC2ªCæ!¬C5°ágãé*}´Ê¢^#V#{²Êž¯‘!õR6#6#6#6!óR6#6!æV##"æV!€ÿ9"àV"ÚV>2ðR!00"ñR!fQ†6# x±Âß!"ŸQ"šQ"bR"]R>2žQ2aR>å*#S++ëás!"!S!å!S^ÕÑá+åÕ"#SÑá#åÕÍ|4"MS*#S#"#S*MS+"MS|µÊc*!Så!åͤ=!Së*#S^ÕͽáÑ"!SÃ-!!Så* Så* SåÍ =ÉÍ5á"1Sá"3Sá"5Sá"7SÍ"5!‰Tå*7Sëás#r!9SåÍ­0123456789ABCDEFá#å!åÍ=*1Så!åÍ~:*1Så!åͳ:áÑ}³ÒØÃà !ISå!+Ñå!9Så*3Sl&å!åÍm<áÑ^ëëás!Õ!9åÍ~:ñÒ4"!ðRë!å!0ëás!ðRë!å!ðRë!^ë#ëás*qSå*oSå*qSåÍç'*qSë! å!å!åÍK=*oSå!ÿÿåÍK:ñÒˆ"*qS@å!ëás*oS}/o|/g#"oSÖ"*qS@å!ëás*qS<å!ëás*qS;å!ëás*qS8å!ëás!‰Tå*qSëás#r*qS6å!ëás#r*qS9å*oSëás#r*qS=å*qSÂëás#r   *qS4å*oSëás#r*qS?å!ëás*qSåÍÃ-á}/Ò;#!‡Tå!ÿëás#rË#*qSåÍÀ-ñÒI#Ë#*qSå*oSåͽ+!‡Tå!å*qSåͼ9áëás#r!‡T^#VÕ!ÿåÍ“:ñÒ‹#!‡Tå!ëás#rÉÃÃ’#Í5á"{Sá"}SÍ"5Í¿9*}S8^Õ!åÍK:ñÒa$*}Så*{Så!SåÍk&*Så!ÿåÍK:ñÒa$!)RåÍÎ:Í�7!)RåÍÎ:Í $Unable to automaticaSå!åÍ“:ñÒH&*}S6å!ëás#r*}S@~ÒE&!‰T^#VÕ!‰T^#Vë4^#VÕ͇,ÃH&Í/Ãg&*}S<å!ëás*}S;å!ëásÉÃÃq&Ä'Í5á"ƒSá"…Sá"‡SÍ"5Í¿9!‰Tå*‡Sëás#r*‡S8^Õ!åÍK:ñÒó&*‡S9å*‡S6^#Vëëás#rÍ„1*‡SÂå*‡S4^#VÕ!åÍK=*‡S9å!�ëás#rÍ„1Ã''*‡S8^Õ!K:ñÒ#)!"³S*ŸSë!^ÕÍä'á}2¡SÃ))!"³S*³S"¯S!"±S*ŸSë*³S^Õ!.åÍ{5!:åÍ{5Í\6Í6á}/oå*³Så*¯Såͳ:áÑ}£oå*³Så*ŸS^Õͪ:áÑ}£Ò´)!£Så*±S+Ñå*ŸSë*³S^ÕÍä'áëás*±S#"±S*³S#"³SÃ9)*ŸSë*³S^Õ!.åÍK:*³Så*ŸS^Õͪ:áÑ}£Ò:**³S#"³S!"±S*±Så!åͳ:*³Så*ŸS^Õ^#Vë8^Õ!åÍ~:ñÒK,!‰T^#VÕ!‰T^#Vë4^#VÕ͇,!‰T^#VëÂë!^ë}2ÍSÃ|,!‰T^#VëÂë!^ë}2ÍS!‰T^#VÕ!‰T^#Vë4^#VÕ͇,:ÍS&oãéÃÊ,Í5á"ÑSá"ÓSÍ"5*ÓS;å!ëás!‰Tå*ÓSëás#r*ÓS<~ÒÏ,*ÓS;å!ëásØ-Í/*ÓS@~Ò˜-*ÓS<å*ÓSÂë!^Õ!åÍK:áëáÒ/Ã/ÃÔ.!}2/T:/T&oãéÃÃ/!‰T^#Vë=å!YTå!åÍ =!‰T^#Vë8^Õ!åÍK:ñÒ½/*YTå!å!åͼ9áëás*YT^Õ! åÍK:ñÒ‡/!å! åͼ9á"[T÷/*YT^Õ!åÍK:ñÒ·/!å! åͼ9á"[T!å!åͼ9á"[TÃ}1Ãÿ/!‰T^#Vë8^Õ!åÍK:ñÒÿ/*YTå!å!ÿåͼ9áëás*YT^Õ!åÍ“:ñÒ×/Ã}1!^ëÑå:cT&oëás*oT?å*oT?^ë#ëásÉ!‡Tå!ëás#r!‰T^#Vë=å!gTå!åÍ =!‰T^#Vë8^Õ!åÍ~:ñÒg3!‰T^#Vë"qT!å*qT9^#VÕÑá+åÕ"mTÑá#åÕÍ|4"sT*mT#"mT*sT+"sT|µÊd3*gT^ë}2iT:iT&oå! åÍK:ñÒÅ2õ3*qT8^Õ!åÍK:ñÒ3!å:iT&oåͼ9á"kT:iT&oå! åÍK:ñÒ3!lly close: ÍÔ:ÍK;*}SåÍÔ:ÍK;Í($ in RESETÍÔ:ÍK;Í�7!)RåÍÎ:Í�7!)RåÍÎ:ÍU$Program abortedÍÔ:ÍK;Í�7Í5*}Së! å!å!åÍK=*}S8å!ëás*{Så!ÿÿåÍK:ñÒ´$*{S}/o|/g#"{S*}S@å!ëásÃÂ$*}S@å!ëás*}S<å!ëás*}S;å!ëás*}Së! å!ëás!‰Tå*}Sëás#r*}SåÍ~:ñÒ''*‡S9å*‡S6^#Vëëás#rÍ„1Ã'*‡S8^Õ!åÍ“:ñÒf'!‡Tå!å*‡Såͼ9áëás#r*ƒSåÍn4áëás#rÃr'*ƒSå!ëás#r*‡S8å!ëásÍ¿9ÉÍ5á"‰Sá"‹Sá"�SÍ"5*�S8^Õ!åÍ~:ñÒ¯'Ãà'*�Så*‹Såͽ+!‡Tå!ëás#r*‰Så!ëás#r*�S8å!ëásÉÃÃê'Ã?(Í5á}2™SÍ"5:™S&oå!aåͪ:áÑ}£Ò:*!«Så*±S+Ñå*ŸSë*³S^ÕÍä'áëás*±S#"±S*³S#"³SÃê)*ŸSå!Ãïÿå!åÍK=*ŸSë!å:¡S&oë!@{•ozœgëás!£Så*ŸSë!å!åÍ =!«Så*ŸSë! å!åÍ =*ŸS8å!ëásÉÃö*Í5á"¹Sá"»SÍ"5*¹Så!}/o|/g#åÍK:ñÒì*!fQ<^ë}2µSÃû**»S<^ë}2µS:µS&s*ÓSÂë!^Õ! åÍK:á}2#T:#T&oå*ÓS<^ëÑ}³ÒD-*ÓS;å!ëás:#T&oå*ÓS8^Õ!åÍK:áÑ}£Òh-Í/*ÓS<^Õ*ÓS;^ëÑ}³Ò˜-*ÓSÂë!å! ëásÉÃß-Í5á"%Tá"'TÍ"5!‰Tå*'Tëás#rÍ„1ÉÃÃÆ-Ãp.Í5á"-TÍ"5!}2)T*-TåÍã-CON:Ͱ4ñÒ.*-T8å!ëás!}2)TÉT^#VëA~Ò$0!‰T^#Vë<å!ëásÃ}1!å!‰T^#Vë9^#VÕÑá+åÕ"]TÑá#åÕÍ|4"_T*]T#"]T*_T+"_T|µÊf1!‰T^#Vë"aT*aT?^Õ!€åÍK:ñÒè0*aT?å!ëás*aTA^ë}/Òè0!å*aTBåͼ9á"[T!‡Tå!å*aTåͼ9áëás#r!‡T^#VÕ!åÍ“:ñÒè0*aTAå!ëás*aTA~Ò%1*YTå!ÿëás*aå! åͼ9á"kTÃZ3!å:iT&oåͼ9á"kT*qT8^Õ!åÍK:ñÒZ3:iT&oå! åÍK:ñÒZ3!å! åͼ9á"kT*gT#"gTÃ’2ô3!å!‰T^#Vë9^#VÕÑá+åÕ"mTÑá#åÕÍ|4"uT*mT#"mT*uT+"uT|µÊ´3*gT^ÕÍ�1*gT#"gTÃ�3ÉÃZ3Ãþ3Í5á"�Tá"ƒTÍ"5!‰Tå*ƒTëás#r*ƒT"…T*…T6^#VÕ*…T4^#VÕÍK:ñÒ4Í/*…?å!€ëás*}SAå!ëás*}S8å!ëás*}S9å*{Sëás#r*}S4å*{Sëás#r*}S=å*}SÂëás#r*}S^Õ!åÍK:*}SåÍÃ-á}/oÑ}³ÒŠ%!‡Tå!ÿëás#rô%*}SåÍÀ-ñÒ›%Ãg&ô%!‡Tå!å*}Såͼ9áëás#r!‡T^#VÕ!ÿåÍ“:ñÒK&!‡Tå!ëás#r*}S<å!ëás*}S;å!ëás*}S4å*{Sëás#r*{Íb::™S&oå!zåͪ:áÑ}£Ò-(:™S&oë!ß}£o|¢g}2™S:™S&o}2�S:�S&oãéÍ5á"›Sá"�Sá"ŸSÍ"5!‡Tå!ëás#r*›S^Õ!åÍ“:*›Së!^Õ! åÍK:áÑ}£Ò˜(*›Så!å!åÍ+Ã](*ŸSå*›Så!åÍô:*ŸS^Õ!åÍ“:ñÒ¯*!@}2¡S!£SåÍÐ( á#å!åÍ=!«SåÍå( á#å!åÍ=*ŸSë!^Õ!:åÍoãéÃà +Í5á"½Sá"¿Sá"ÁSÍ"5*ÁSå*¿Së*½SÑå*ÁSë*¿Så*ÁS^Õ*¿Së*½Së!{•ozœgÑ{•ozœgåÍ =*ÁSë!å*ÁS^Õ*½SÑ{•ozœgëásÉÃÃ{+Í5á}2ÅSÍ"5!‰T^#VëÂë!å:ÅS&oëás!‰T^#VÕ!‰T^#Vë4^#VÕÍœ-ÉÃÃÀ+Í5á"ÇSá"ÉSÍ"5Í¿9!‡Tå!å*ÉSåͼ9áëás#r!‡Tå!ëás#rÉÃÃý+!‰Th.*-TåÍ.LST:Ͱ4ñÒ-.*-T8å!ëás!}2)TÃh.*-TåÍ9.KBD:Ͱ4*-TåÍH.TRM:Ͱ4áÑ}³Òh.*-T8å!ëás!}2)T:)T&oãéÍ5á"3TÍ"5!}2/T!7Tå! å!~åÍÅ5Í>5*3T^Õ!åÍ~:*3T^Õ!åͳ:áÑ}³Òº.Ã/!å*3T^ÕÑá+"5T#åÕÍ|4"WT*5T#"5T*WT+"WT|µÊ /*3Të*5T^Õ!7TåÍ'5Í6á}/T<å!ëás*aT6å!ëás#rÍ¿9Ã}1ÃE1*YTå*aTBå*aT?^ëÑ^ëëás*aT?å*aT?^ë#ëás*YT#"YTÃJ0!‰T^#Vë6å!ëás#rÍ¿9ÉÃÇ1Ã)2Í5á}2cTÍ"5!‰T^#Vë"oT*oT?^Õ!€åÍK:ñÒò1!‡Tå!å*oTBåͼ9áëás#r!‡Tå!å*oTåͼ9áëás#r*oT?å!ëás*oTBå*oT?T6å!ëás#r*…T<^ë}/Ò\4*…TÂå*…T6^#VëÑ^ë}2wT*…T6å*…T6^#VÕ!Ñëás#rÃc4!ÿ}2wT:wT&oãéÃÃq4*‡T"‹T*‹Tãéá"�TÑáåÕåÕÍ~:ñÚ�4Ñá{•ozœg##å*�TãÉáÑ!å*�TãÉáã"’TÃ÷4ͨ4¾4!å*’Té!ù4ͨ4¶4þ4ͨ4Ú¾4ʾ4ö4ͨ4Ú¶4þ4ͨ4Ú¾4ö4ͨ4Ú¶4ʶ4þ4áÑãëN2‘T   G¹Ú5Ay·Ê5#¾À 5:‘T¹ÉÃáã"”TÉ*”Tãéá"–TÑ!àÿ9ùåÕ ÅÍ=*–Téá"–T! 9^#V!9Ã_5á"–T!9^#V!9Õå ÅÍ=!"9ù*–Té 6#Âs5Éá"˜Tá"šT!àÿ9ùÍq5*šT|·Â–5Íš5*˜Té:šTæ_!9å:šTæ_!½5~áG¶wÉ @€á"˜Tá" Tá"žT!àÿ9ùÍq5*žT|·Â–5"šTë* T|·Â–5}»Ú–5Ê 6Íš5*šT#"šTëÅèÍø;ÁÍ>8ëÅdÍø;ÁÍ>8ëÅ Íø;ÁÍ>8ëÍ>8É!98å!åÍÔ:Ín;É32768å>0³_þ0Ê\8áåÅÕ!ÿÿååÍ[=ÃY8ÁáÉx·áÈÃK8xþÿÈÕz·ò†8þ€Â~8{·Â~8xÖGÔ8z/W{/_Å Íø;Áz³Â†8x·ú°8ʰ8 ÅÕ!ÿÿååÍ[=ë8ÁÔ8Ñɯ2´Vá"²Vá}2±U¯2²U*‰T8~þÂ!9!±UåÍœ9:²U·Êï8:³UþÂï8*‰T<6!²Uå!ÿåÍô:*‰T8ë"ÎVëYPz·Ê2;Õ½Ê;Ú;>2ËV}2ÐVÃ&;!G;å*ìRéÁáÅéá"ÑVá"ÓVá"ÕVá#å+n&å*ÕVå*ÓVåÍn;*ÑVéÁááÑÕÅ|þÿʆ;}“o|šgú†;Íl=ÁÑáÅ{²ÈÕNåÅÍb=áÑ#z³Â�;Éá:×Võéë!¯2×Vy°Âµ;Ãî;x/Gy/O>=ÂÆ;ëÃì;)Úà;ë)ëÒÑ;,å ÚÚ;áþ;33þ;ë)ëÒç;, þ;ëÉë!ÿÿ>2×Vɯ2×V±Â <å; 5.5 ;----------------------------------------------------------------; ; ; ; MODULES - @DIV, @MOD AND ENTRY POINT @XDIVD ; ; LAST UPDATED: NOV 14, 1981 ; ; ; ;----------------------------------------------------------------;******************** ;*************************************************** ;SUBR :DHLDEBYBC ;PURP :DIVIDE HLDE BY BC ;ENTRY :HL=DIVIDEND HIGH WORD,DE=DIVIDEND LOW WORD ; :BC=DIVISOR ;EXIT :HL=QUOTIENT,DE=REMAINDER ; :IF BC=0 THEN ERROR=ZERODIVISOR * T{•zœÂõ5Íš5*˜Téá"˜T!9DM! 9^#Vë"šT|·ÂV6Å}æ_áF:šTæ_!½5~ ÊV6!"9ùÕ*˜TéÃL6á"˜T!9ë! 9 ¶w#Âk6! 9ù*˜Téá"˜T!9ë! 9 /¦w#ÂŒ6! 9ù*˜Téá"˜T!9ë! 9 ¦w#®6! 9ù*˜TéÑá"¨Të^#V#ë"¦Të^#V#"¤Të"¢T*¨Tå*¦Tåͳ:ñÚ7*¨Tå*¢Të*¦TåÍ~:ñÚ7*¨T~þÂ9 Å!ÿÿååÍ[=*‰T;6> *²Vé!³U>2²Uå*‰T; ~áÚï8å!@9å*ìRéÁá:²UþÿÊU9Íf9#:²U<2²Uë*‰T; ~ëÒ79Ãï8yþ Êu9q:´V<2´VÉ6 :²U<2²U:´V<2´VþÿÈæÊ‘9#Ãu9å!±U#5áÉÃß9Í5á"µVÍ"5! å*µVåͼ9á"·VÉÃÃÂ9Ãì9Í5á"ÃVá"ÅVÍ"5*ÅVM*ÃVëÍo&"ÇV*ÇV"¹V*¹Vãé!å!€åͼ9á"ÉVÉÁáÑŰÊa<î€Êa˜Gz§úO<Â<<³ÊO<ëÍ¥;{/_z/W}‘o|˜g#ɯ“o>šgÍ¥;¯•o>œgÉ>2×Vÿÿ!ÉáÁÑåÍø;áÕéáÁÑåÍø;ãéÑÁáÕÍ¥;ëãéÑÁáÕÍ¥;ãé!ãé!ãé}»À|ºÉáÑãÍ�<Ê“<Ø<áÑãÍ�<“<Ø<áÑãÍ÷<Ú˜<ʘ<Ó<áÑãÍ÷<Ò˜<ʘ<Ó<áÑãÍ÷<Ò“<Ê“<Ø<áÑãÍ÷<Ú“<Ê“<Ø<}»Ê =|šÀÚå PUBLIC @DIV ;SIGNED DIV PUBLIC @MOD ;SIGNED MOD PUBLIC @UDV ;UNSIGNED DIV PUBLIC @UMD ;UNSIGNED MOD PUBLIC @XDIVD ;USED BY WRITE INTEGER PUBLIC @GZF ;GET DIVIDE BY ZERO BOOLEAN FLAG ROUTINE EXTRN @HLT DSEG DIVZFLAG: DS 1 ;=; :NOTE THE QUOTIENT MUST BE BETWEEN 0,65535 ; : EXAMPLE: 70000/1 IS ILLEGAL BUT 70000/2 IS LEGAL ;USED :ALL ;CALLS :@DHLDEBYBC ;MACROS:NEGBC ;********************************************************** ; ; @DHLDEBYBC: XRA A STA DIVZFLAG ;INITIë*¦T{•_zœW*¤T^#Vëé*¢T#)ë*¤T^#Vëé!ªTãé!«T"ªU¯2ªT2ËVÉá"®UÑ·Êl72°UO:ªT�Úp7*ªUåÕÅÍ=:ªTG:°U€2ªT_!«T"ªU*®Ué>ÿ‘O>2ËVÃK7ÑÁy2­U>2¬U!¬UåÕÃ67 ÅÍb= ÅÍb=É*‰T;~Ú¯7Í?;ÁÜ76*‰T8~þÐÍ?;Á*‰TÂ~þ ÀÍ?;ÁÉáÑÁAÑåÍc8zæ€òò7Õ-ÍK8Ñ{/_z/Wz·ú*8Å'Íø;ÁÍ>8ë}·Ê:-7?{_zWÃ:áÕéÁáÑÅ}·Ê:-7?zW{_Ã:á~#å·ÊH:þÊ�:þÊ{:þʰ:þÊ_:ç:͹:ÁÑá}“ÂX:|šÊ :!å`ié͹:ÁÑáz¬út:}“|šò :ÃX:¤ò :ÃX:͹:ÁÑáz¬út:{•zœÚ :ÃX:͹:ÁÑá}“ :|šÊX:!å`ié͹:ÁáÑÃe:͹:ÁáÑÃ�:ÁÑá&}æoã&}æoãåÕÅÉáã"‰TÉáÿÿÕÕéáã"ìRÉáã"îRÉ!ú+"ìR!x+"îRɯ2ËVá"ÌVáÁÑÕ=öÉö7É|šÉáÁÑãÃ=áÁÑãëx±Ê'=~# x±Â=ëÉáÁÑãëÃ5=áÁÑãx±ÊI= +ë +~+ x±Â?=ëÉáÁÑã{²Èq#{²ÂR=ÉÁááÅÍl=áÁåÅYÍ�=ÁÉ}´È-È åÍ�=á-Âu=ÉáÕå*îRéëyHÒ—=ëë)Â�=y§Â�=ëãéáÁÑåÈ=MD͈=áÉáã}lgãéÉå 1 IF PREV DIVIDE WAS DIVIDE BY 0 CSEG @GZF: POP H LDA DIVZFLAG ;PUT INTO CARRY RAR ;AND PUSH IT (CARRY IS LOW ORDER BIT OF PSW) PUSH PSW ;PUT FLAG ON STACK PCHL ;AND EXIT DIVPOS: XCHG LXI H,0 ;*******************************ALLY NO ERRORS MOV A,C ORA B JNZ CONT0 ;JIF NOT ZERO ;ELSE ERROR EXIT JMP ZDIV1 ; CONT0: ;DIVISOR<>0 MOV A,B CMA MOV B,A MOV A,C CMA MOV C,A INX B ;TAKE NEGATIVE OF BC SO DAD B WILL ;SET HL=HL-BC MVI A,17 ;16 BITS    + 1 NEXTBIT: DCR A JNZ CONT1 ;JIF NOT DONE ;ELSE EXIT XCHG ;HL=QOUTIENT,DE=REMAINDER JMP DIVXIT ; ;NOT DONE ;SHIFT HL LEFT CY=BIT 15 CONT1: DAD H JC DIV2 ;JIF BIT 15=1 ; ;SHIFT DE LEFT AND INTO HL (HL BIT0=DE BIT 15) XCHG DAD H  DIV3 ;JIF BIT 15=0 INR L ;ELSE SET BIT0 OF HL=1 ; ;NOW HL=HL-ABS(BC) AND E=E+1 DIV3: DAD B INR E JMP NEXTBIT ;CONTINUE ON ; ; DIVXIT: XCHG RET ZDIV1: MVI C,9 LXI D,DIV0MSG CALL 5 CALL @HLT DIV0MSG: DB 13,10,'DIV 0',13,,A MOV A,D CMA MOV H,A INX H ;TAKE TWOS COMPLEMENT OF NUMERATOR CALL DIVPOS MOV A,E CMA MOV E,A MOV A,D CMA MOV D,A INX D ;TAKE TWOS COMP OF QUOTIENT RET ISMOD: LXI H,0FFFFH ;SIGN EXTEND CALL @D,A CALL DIVPOS XRA A SUB L MOV L,A MVI A,00H SBB H MOV H,A RET Y99: JMP ZDIV1 MVI A,1 STA DIVZFLAG LXI D,0FFFFH LXI H,0 RET @DIV: POP H POP B POP D PUSH åå XCHG ;DE SHIFTED CY=DE BIT 15 JNC DIV0 ;JIF BIT15=0 (HL BIT0=0 ALREADY) INR L ;ELSE SET IT TO 1 ; ;IF ABS(BC)>=HL THEN HL=HL-ABS(BC) AND E=E+1 ;?? DIV0: PUSH H ;SAVE HL DAD B JC DIV1 ;JIF ABS(BC) >= HL ; ELSE GOTO NEXTBIT POP H ;DIS10,'$' RET @XDIVD: XRA A STA DIVZFLAG ORA C JNZ Y10 ;CHECK FIRST BYTE, IF NOT ZERO BRANCH ORA B JZ Y99 ;IF NEXT BYTE 0 THEN DIVIDE BY 0 XRI 80H JZ Y99 ;MAKE SURE ITS NOT 32768 Y10: MOV A,B ANA A JM Y50 ;BR IF DENOHLDEBYBC ;GO DO THE DIVIDE RET ;AND EXIT Y50: XRA A SUB C MOV C,A MVI A,00H SBB B MOV B,A MOV A,D ANA A JM Y80 JNZ Y60 ORA E JZ Y80 Y60: XCHG CALL DIVPOS MOV A,E CMA H MVI L,0 ;SIGNAL NOT MOD CALL @XDIVD POP H PUSH D PCHL @MOD: POP H POP B POP D PUSH H MVI L,1 ;SIGNAL MOD CALL @XDIVD XTHL PCHL @UDV: ;UNSIGNED DIVIDE POP D ;RET ADR POP B ;DIVIDEND POP H ;DIVISOR PUSååCARD SUBSTRACTION JMP NEXTBIT ; ; WELL ABS(BC) < HL SO INR E AND SET HL=HL-ABS(BC) ; DIV1: INR E INX SP INX SP ;DROP THE SAVED HL FROM THE STACK JMP NEXTBIT ; ; ;ARRIVE HERE IF NEXTBIT=1 DIV2: XCHG DAD H XCHG ;SHIFT DE LEFT JNCMINATOR NEGATIVE, ILLEGAL Y20: ORA D JM Y40 ;BR IF NUMERATOR NEGATIVE Y30: XCHG CALL DIVPOS RET Y40: ;COME HERE WHEN NUMERATOR IS NEGATIVE MOV A,L CPI 1 ;IF WE ARE ENTERED VIA MOD BRANCH JZ ISMOD MOV A,E CMA MOV L MOV E,A MOV A,D CMA MOV D,A INX D Y70: MOV A,L SUB C MOV L,A MOV A,H SBB B MOV H,A INX H RET Y80: XRA A SUB E MOV L,A MVI A,00H SBB D MOV HH D CALL DIVPOS XCHG XTHL PCHL @UMD: ;UNSIGNED MOD POP D POP B POP H PUSH D CALL DIVPOS XTHL PCHL END åå   (* 5.5 *) MODULE IOERROR; (*$I 80rtp/fibdef.lib*) (*$M @IOERR*) (*$M **) VAR @LFB : EXTERNAL ^FIB; @TMP : ^FIB; (* FOR SAVING @LFB *) PROCEDURE @IOERR(CPMFUNC:INTEGER); BEGIN @TMP := @LFB; CASE CPMFUNC OF 15 : WRITELN('UnablååFUNC / "MOV C,L / "LHLD / PARM / "XCHG / "CALL / CPMENTRYPOINT / "MOV L,A / "MVI H / 0 / "SHLD / RESULT ); @BDOS := RESULT; IF FUNC < 15 THEN EXIT; IF FUNC = 26 THEN EXIT; IF (FUNC=15) OR (FUNC=16)ååe to open: ',@TMP^.FNAME); 16 : WRITELN('Unable to close: ',@TMP^.FNAME); 21 : WRITELN('Error writing to: ',@TMP^.FNAME); 22 : WRITELN('Unable to create: ',@TMP^.FNAME) END; (* CASE *) @LFB := @TMP END; MODEND. åå OR (FUNC=22) THEN BEGIN IF RESULT = 255 THEN @IOERR(FUNC) END ELSE IF (FUNC = 21) THEN IF RESULT <> 0 THEN @IOERR(FUNC); END; PROCEDURE @DFLT; VAR I : INTEGER; BEGIN I := @BDOS(26,WRD($80)); (åIOCHK.ERL IOERR.ERL XBDOS.ERL IOERR SRCZXBDOS SRC[IOCHK $$$åååååååååååååååååååååååååååååååååå(* 5.5 *) MODULE BDOSFUNC; (*$M @BDOS*) (*$M @DFLT*) (*$M **) EXTERNAL PROCEDURE @IOERR(CPMFUNCNUM:INTEGER); FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER; CONST CPMENTRYPOINT = 5; VAR RESULT : INTEGER; BEGIN INLINE( "LHLD / * DEFAULT DMA ADDRESS *) END; MODEND.  IF RESULT <> 0 THEN @IOERR(FUNC); END; PROCEDURE @DFLT; VAR I : INTEGER; BEGIN I := @BDOS(26,WRD($80)); (åå   åå;----------------------------------------------------------------; ; ; ; MODULE @RST ; ; READ STRING CONSOLE ; ; LAST UPDATED: MARCH 8, 1981 ; ; TO ADD TAB EXPANSION ; ; ; ;-----EG @RST: XRA A STA COLCTR POP H SHLD RETADR POP H ;GET MAX DEFINED LENGTH MOV A,L STA STRBUF XRA A STA STRBUF+1 LHLD @LFB LXI D,OPTION DAD D MOV A,M CPI FCONIO JNZ NONCONSOLE ;BR IF NOT A CONSOLE FILE FOR INPUT ;OV A,M CPI FCONIO ;IF @LFB^.OPTION <> FCONIO THEN BRANCH JNZ RSTXIT MVI C,0DH ;IF A CONSOLE FILE THEN ECHO CRLF PUSH B LXI H,-1 PUSH H PUSH H CALL @CHW LHLD @LFB LXI D,FEOLN DAD D MVI M,1 ;SET @LFB^.EOLN := TRUE RSTXIT: MVR POINTER LDA STRBUF+1 CPI 0FFH ;STRING OVERFLOW? JZ NOSTORE ;IF SO THEN DONT STORE IT CALL STORE$WITH$TAB$EXPANSION INX H ;BUMP POINTER LDA STRBUF+1 INR A STA STRBUF+1 NOSTORE: XCHG LHLD @LFB ;GET FIB POINTER LXI B,FEOLN ;Råå-----------------------------------------------------------; PUBLIC @RST EXTRN @STR EXTRN @CHW EXTRN @SYSIN EXTRN @LFB EXTRN @CPMRD ;CP/M READ STRING CALLER ;PROCEDURE @CPMRD(VAR BUF:RDBUF); ;RDBUF = BYTE,BYTE,ARRAY[1..255] OF  ; IF IT IS A CONSOLE FILE THEN USE CP/M READ CONSOLE BUFFER ; LXI H,STRBUF PUSH H CALL @CPMRD ;GO READ CONSOLE BUFFER FROM CP/M LDA STRBUF+1 ORA A JZ ENDOFINPUT ;NO CTRL/Z FOUND LDA STRBUF+2 CPI 1AH ;CTRL/Z ON INPUT (EOF)? JNZ ENI A,0DH ;SO READLN WILL WORK LHLD RETADR PCHL ; ; COME HERE IF NON-CONSOLE READ ; JUST CALL INDIRECT TO @SYSIN UNTIL A CR IS FOUND ; NONCONSOLE: LXI H,STRBUF+2 ;POINT TO INPUT BUFFER AREA MVI A,0 STA STRBUF+1 ;SET LENGTH PUSH H LHLDEAD CHARS UNTIL EOLN DAD B MOV A,M RAR XCHG JNC NEXTCH ;LOOP UNTIL EOLN JMP ENDOFINPUT ;AND WE ARE DONE STORE$WITH$TAB$EXPANSION: MOV A,C CPI 09H ;TAB CHARACTER? JZ TAB$EXPAND MOV M,C LDA COLCTR INR A STA COLCTR RET TAB$ååCHAR; OPTION EQU 56 ;(FREAD,FWRITE,...FLSTOUT) FCONIO EQU 4 ;USED BY THIS MODULE FEOLN EQU 59 ;BOOLEAN; FEOF EQU 60 ;BOOLEAN; DSEG STRBUF: DS 1 DS 1 DS 255 ;FOR USING CP/M INPUT RETADR: DS 2 COLCTR: DS 1 ;FOR TAB EXPANSION CSDOFINPUT LHLD @LFB ;GET POINTER TO FIB LXI D,FEOF DAD D ;POINT TO END OF FILE BOOLEAN MVI M,1 ENDOFINPUT: ;SHARED CODE LXI H,STRBUF+1 PUSH H LXI H,255 PUSH H CALL @STR ;STORE THE STRING LHLD @LFB LXI D,OPTION DAD D M @LFB ;GET FIB POINTER LXI B,FEOLN ;READ CHARS UNTIL EOLN DAD B MOV A,M POP H RAR JC ENDOFINPUT NEXTCH: PUSH H LXI H,RETURN PUSH H LHLD @SYSIN PCHL ;GO CALL THE INPUT ROUTIN RETURN: POP B ;GET CHAR POP H ;GET BUFFEEXPAND: MVI M,' ' ;STORE AT LEAST ONE BLANK LDA STRBUF+1 INR A STA STRBUF+1 LDA COLCTR INR A STA COLCTR CPI 0FFH ;STRING OVERFLOW? RZ ;IF SO THEN EXIT ANI 7 ;ON BOUNDARY? JZ DONE$TABBING ;RETURN IF YES INX H JMP TAB   $EXPAND DONE$TABBING: PUSH H LXI H,STRBUF INX H DCR M POP H RET END PI 0FFH ;STRING OVERFLOW? RZ ;IF SO THEN EXIT ANI 7 ;ON BOUNDARY? JZ DONE$TABBING ;RETURN IF YES INX H JMP TABåTHING WAS A CR CALL @GETCHR POP B JMP @CWT ITSEOLN: MVI M,0 ;TURN EOLN OFF LHLD @LFB LXI D,OPTION DAD D MOV A,M CPI FCONIO RNC ;IF CONSOLE THEN WE ARE DONE CALL @GETCHR ;GOBBLE BLANK AND PUT LF IN BUFFER POP B LHLåMODULE GETREC; (*$M GET*) (*$M **) (*$I 80rtp/fibdef.lib*) VAR @LFB: EXTERNAL ^FIB; EXTERNAL PROCEDURE @RNB; PROCEDURE GET(VAR F:FIB; SZ:INTEGER); VAR IS_EOLN : BOOLEAN; BEGIN F.FEOLN := FALSE; (* DEFAULT IS THAT WE RESET IT *)  END END; MODEND.  IF (IS_EOLN) AND (F.OPTION = FRDWR) THEN (* GOBBLE LF *) @RNB; IF F.FEOF OR F.FEOLN THEN F.FBUFFER[0] := ' '; å;----------------------------------------------------------------; ; ; ; MODULE @CWT ; ; LAST UPDATED: SEPT 6 1980 ; ; ; ;----------------------------------------------------------------; PUBLIC @CWT ;WAIT FOR CR EXD @LFB LXI D,FBUFFER DAD D MOV A,M CPI 0AH ;LF TO GOBBLE? RNZ ;RETURN IF DONE CALL @GETCHR ;GOBBLE LF AND PUT NEXT CHAR IN BUFFER POP B RET END å @LFB := ADDR(F); IF F.FEOF THEN BEGIN F.FEOLN := TRUE; EXIT END; @RNB; (* GO READ FROM THE FILE/CONSOLE *) IF F.FTEXT THEN (* TEXT FILE, EOLN/EOF MUST BE SET *) BEGIN F.FEOF := (F.FBUFFER[0] = CHR($1AååTRN @GETCHR EXTRN @LFB FEOLN EQU 59 ;BOOLEAN; FBUFFER EQU 194 ;ARRAY [0..0] OF BYTE OPTION EQU 56 ;(FREAD,FWRITE,...FLSTOUT) FCONIO EQU 4 ;USED BY THIS MODULE @CWT: LHLD @LFB LXI D,FEOLN DAD D MOV A,M RAR JC ITSEOLN ;BR IF LAST åå)) OR (F.FEOF); IS_EOLN := (F.FBUFFER[0] = CHR($0D)); IF (IS_EOLN) OR (F.FEOF) THEN F.FEOLN := TRUE; IF (IS_EOLN) AND (F.OPTION = FRDWR) THEN (* GOBBLE LF *) @RNB; IF F.FEOF OR F.FEOLN THEN F.FBUFFER[0] := ' '; å   åååå.OPTION = FCONIO THEN (* CON:, DO AN ECHOING READ *) BEGIN DSTPTR^ := CHR(@BDOS(1,WRD(0))); (* GO READ A CHAR WITH ECHO *) IF DSTPTR^ = $0D THEN (* ECHO CR WITH CRLF *) I := @BDOS(2,WRD($0A)) ELSE IF DSTPTR^ = $08 THENHEN BEGIN @LFB^.FEOF := TRUE; EXIT END; FOR N := 1 TO @LFB^.IOSIZE DO BEGIN WITH @LFB^ DO BEGIN IF FSECINX = 128 THEN (* TIME TO READ MORE *) BEGIN FSECINX := 0; IF NåååMODULE RNBMODULE; (*$M @RNB*) (*$M **) (*$I 80rtp/fibdef.lib*) VAR @LFB : EXTERNAL ^FIB; RESULTIO: EXTERNAL INTEGER; EXTERNAL FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER; EXTERNAL PROCEDURE @DFLT; (* PURPOSE: READ n BYTES FROM A (* ECHO BS WITH SP/BS *) BEGIN I := @BDOS(2,WRD(' ')); I := @BDOS(2,WRD($08)) END; EXIT END ELSE IF @LFB^.OPTION = FTRMIO THEN (* KBD: DO A NON-ECHO READ *) BEGIN REPEAT DSTPTR^ := CHR(@BDOS(6,WRD($FF))); OT NOSECTRS THEN BEGIN I := @BDOS(26,WRD(ADDR(FSECTOR))); RESULTIO := @BDOS(20,WRD(ADDR(FCB))); IF RESULTIO <> 0 THEN NOSECTRS := TRUE END END; IF NOSECTRSMODULE PUTREC; (*$M PUT*) (*$M **) (*$I 80rtp/fibdef.lib*) VAR @LFB: EXTERNAL ^FIB; EXTERNAL PROCEDURE @WNB; PROCEDURE PUT(VAR F:FIB; SZ:INTEGER); BEGIN @LFB := ADDR(F); @WNB (* GO WRITE BUFFER OUT *) END; MODEND. åå FILE POINTED TO BY @LFB *) (* n IS SPECIFIED BY @LFB^.IOSIZE *) (* LAST UPDATE: SEPTEMBER 17, 1980 *) PROCEDURE @RNB; VAR DSTPTR: ^BYTE; N,I : INTEGER; BEGIN MOVE(@LFB^.FBUFADR,DSTPTR,2); (* SET DEST POINTER *) IF @LFB^(* GO READ A CHAR WITH NO ECHO *) UNTIL DSTPTR^ <> 0; EXIT END ELSE (* check for rdr: *) IF @LFB^.OPTION = FAUXIO THEN (* RDR: *) BEGIN DSTPTR^ := CHR(@BDOS(3,WRD(0))); (* GO READ RDR *) END; IF @LFB^.NOSECTRS T THEN BEGIN DSTPTR^ := CHR($FF); FEOF := TRUE; BUFIDX := 0; @DFLT; EXIT END ELSE DSTPTR^ := FSECTOR[FSECINX]; FSECINX := FSECINX + 1 END; (* WITH *) DSTPTR := D   STPTR + 1 END; @LFB^.BUFIDX := 0; (* SO GNB WORKS *) @DFLT; (* TO PROTECT USER DATA FROM I/O CLOBBER *) END; MODEND. ååPROCEUDRE @DFLT; (*$E-*) PROCEDURE WRITEBYTE(CH:CHAR); VAR I : INTEGER; BEGIN WITH @LFB^ DO BEGIN IF FSECINX = 128 THEN (* TIME TO WRITE *) BEGIN RESULTIO := @BDOS(26,WRD(ADDR(FSECTOR))); RESULTIO := @BDOS(21,WRD(ADDR(Fr (option=fauxio)) then goto 1; IF OPTION = FLSTOUT THEN BEGIN I := @BDOS(5,WRD(CH)); (* WRITE IT TO THE PRINTER *) IF CH = CHR($0D) THEN (* WE MUST ECHO LF *) I := @BDOS(5,WRD($0A)) END  SRCADR := SRCADR + 1 END; @DFLT; END; MODEND. D; (* WE GET HERE ONLY IF NON-CONSOLE I/O *) FOR N := 1 TO @LFB^.IOSIZE DO BEGIN WRITEBYTE(SRCADR^); åååCB))); FSECINX := 0 END; FSECTOR[FSECINX] := CH; FSECINX := FSECINX + 1 END (* WITH *) END; (* WRITEBYTE *) (*$E+*) PROCEDURE @WNB; LABEL 1; VAR SRCADR : ^CHAR; CH : CHAR; N,I : INTEGER; BEGIN RESULTIO := 0; ( ELSE BEGIN if option = fconio then i := @bdos(2,wrd(ch)) else if option = ftrmio then i := @bdos(6,wrd(ch)) else (* must be fauxio *) i := @bdos(4,wrd(ch)); IF OPTION = FCONIO THEN IF CH=CHR($0D) THEN (* W; VERSION 0018 AUTOMATICALLY UPDATED BY MODIFIED WORDMASTER ;---------------------------------------------------------------; ; ; ; Overlay Management Module for Pascal/MT+ 5.5 ; ; ; ; Created: March 18, 1981 ; ; Updated: Novåå(* 5.5 version *) MODULE WRITEBYTES; (* last update: 10/21/81 *) (*$M @WNB*) (*$M **) (*$I 80rtp/fibdef.lib*) VAR @LFB : EXTERNAL ^FIB; RESULTIO: EXTERNAL INTEGER; EXTERNAL FUNCTION @BDOS(FUNC:INTEGER; PARM:WORD):INTEGER; EXTERNAL * DEFAULT *) MOVE(@LFB^.FBUFADR,SRCADR,2); IF @LFB^.OPTION > FRANDOM THEN (* CONSOLE/TERM I/O *) BEGIN WITH @LFB^ DO FOR N := 1 TO IOSIZE DO BEGIN CH := SRCADR^; if (ch = chr($0a) and not ((option=ftrmio) oE MUST ECHO CR/LF FOR CR *) I := @BDOS(2,WRD($0A)) END; 1: SRCADR := SRCADR + 1 END; EXIT END; (* WE GET HERE ONLY IF NON-CONSOLE I/O *) FOR N := 1 TO @LFB^.IOSIZE DO BEGIN WRITEBYTE(SRCADR^); ember 16, 1981 ; ; ; ; Note: to properly operate this version of the OVLMGR ; ; module requires a @INI routine of Release >= 5.25.1 ; ;---------------------------------------------------------------; ;++++++++++++++++++++++++++++++++++   +++++++++++++++++++++++++++++; ; equates for pertinant information ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; ovlbase equ 0105h ;base prefix for file name namelen equ 010Dh ;length of names (6 or 7 characters) TRUE EQU -1  ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; EXTRN @XXXX1 ;address of overlay area table ;set up by LINKMT >= 5.25.1 PUBLIC @OVL ;OVERLAY LOADER PUBLIC @OVS ;OVERLAY DISK SET - (FOR OTHER THAN DEFAULT DISK) ;###,M STA OVLGNUM INX H MVI B,8 LXI D,PROCNAME OVL1: MOV A,M INX H STAX D INX D DCR B JNZ OVL1 CALL PSH$USR$RET ;SAVE USER'S RETURN ADDRESSES CALL LOAD$OVLY ;GO LOAD IT (IF NECESSARY) CALL FIND$PROC ;GO SEARCH FOR AND FINDCK : OVLNUM,DRIVE ; ; OVLNUM : 1..50 ; ; DRIVE : '@'..'O' ; ; ; ; PASCAL DEFINITION: ; ; ; ; EXTERNAL PROCEDURE @OVS(OVNUM:INTEGER; DRNUM:CHAR); ; ; ; ;######################################################## MVI D,0 LHLD @XXXX1 ;GET ADDR OF OVERLAY AREA TABLE DAD D ;POINT TO TABLE ENTRY MOV E,M INX H MOV D,M XCHG ;HL NOW POINTS TO OVERLAY AREA SHLD OVLAREA ;SAVE IT FOR LATER RET ;==================================================HLD USR$SP RET ;===============================================================; ; SUBROUTINE: POP$USR$RET ; ; PURPOSE : POP RET ADDR, OVERLAY AREA ADDR AND NUMBER ; ; IF RELOAD IS SET TO TRUE THEN THIS ROUTINE ; ; WILL CALL LOAD$ FALSE EQU 0 ;FOR CONDITIONAL ASSEMBLY RELOAD EQU FALSE ;NON-RELOADING OVERLAY CALLING ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; ; MACRO DEFINITIONS ; ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; ############################################################; ; ; ; MAIN ROUTINE - @OVL ; ; PURPOSE - LOAD OVERLAY AND CALL PROCEDURE ; ;---------------------------------------------------------------; ; ON ENTRY TO @OVL, RETURN ADDRE PROCNAME ;DOES NOT RETURN IF PROC NOT FOUND LXI H,OUR$RET ;PUSH OUR RETURN ADDRESS ON THE STACK PUSH H LHLD PROCADR ;GET ADDRESS OF PROC WITHIN OVERLAY AREA PCHL ;AND OFF TO USER ROUTINE OUR$RET: CALL POP$USR$RET ;MAY RELOAD OLD#######; @OVS: POP H ;RET ADR POP B ;DRIVE NUMBER POP D ;OVERLAY NUMBER PUSH H MOV A,C SUI '@' ;MAKE 0..19 LXI H,DRIVE$TAB DAD D MOV M,A RET ;===============================================================; ; SUBROUTINE: CA=============; ; SUBROUTINE: PSH$USR$RET ; ; PURPOSE : SAVE CONTENTS OF HL, OVERLAY AREA ADDR ; ; AND OVERLAY GROUP NUMBER ON USR$RET STACK ; ;===============================================================; PUBLIC PSH$USR$RET PSH$USR$ROVLY TO RE-LOAD PREVIOUS ; ; OVERLAY IF NECESSARY ; ;===============================================================; PUBLIC POP$USR$RET POP$USR$RET: LHLD USR$SP MOV A,M STA OVLGNUM ;SAVE OVERLAY GROUP NUMBER INX H MOV E,M INX MOVE MACRO SRC,DST,LEN LOCAL L1 LXI H,SRC LXI D,DST LXI B,LEN L1: MOV A,M INX H STAX D INX D DCX B MOV A,B ORA C JNZ L1 ENDM ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++; ; PUBLIC AND EXTRN SYMBOLS SS POINTS TO OVERLAY CALL ; ; DATA BLOCK: ; ; ; ; +0 : OVERLAY GROUP NUMBER --- 1 BYTE ; ; +1 : OVERLAY PROCEDURE NAME-- 8 BYTES ; ; ; ;###############################################################; @OVL: POP H MOV A OVERLAY GROUP PCHL ;AND BACK TO THE USER (SIMPLE CASE) ;###############################################################; ; ; ; MAIN ROUTINE - @OVS ; ; PURPOSE - SET DRIVE NUMBER FOR A SPECIFIC OVERLAY ; ; INPUT - ON STALC$ADDR ; ; PURPOSE : CALC OVERLAY AREA ADDRESS BASED ON OVLGNUM ; ;===============================================================; CALC$ADDR: LDA OVLGNUM ;GET REQUESTED GROUP NUMBER DCR A RAR RAR RAR ;DIVIDE BY 8 ANI 1EH MOV E,AET: PUSH H CALL CALC$ADDR MOV B,H MOV C,L POP D LHLD USR$SP ;GET STACK POINTER DCX H MOV M,D ;STORE RET ADDR DCX H MOV M,E DCX H MOV M,B ;STORE OVERLAY AREA ADDR DCX H MOV M,C DCX H LDAX B ;GET OVERLAY NUMBER MOV M,A S H MOV D,M INX H ;DE NOW CONTAINS OVERLAY AREA ADDRESS XCHG SHLD OVLAREA XCHG MOV E,M INX H MOV D,M ;DE NOW CONTAINS CALLERS RETURN ADDRESS INX H SHLD USR$SP XCHG ;PUT REAL ADDR INTO HL ;---------------------------------------------   ------------------- IF RELOAD ; THEN RELOAD OLD OVERLAY IF NECESSARY PUSH H LDA OVLGNUM ORA A CNZ LOAD$OVLY ;ELSE GO LOAD IT IN AGAIN (IF NECESSARY) POP H ;GET RET ADDR BACK AGAIN ENDIF ;--------------------------------------------------- MOVE OVLBASE,MYFCB+1,8 LDA OVLGNUM DCR A MOV E,A MVI D,0 LXI H,DRIVE$TAB DAD D MOV A,M ;GET DRIVE NUMBER FROM TABLE STA MYFCB ;FOR NOW DEFAULT DRIVE ONLY MVI A,'0' STA MYFCB+9 LDA OVLGNUM RAR RAR RAR RAR CALL CV2HX ;SET DMA LHLD DMAPTR LXI D,128 DAD D SHLD DMAPTR LXI D,MYFCB MVI C,20 ;SEQUENTIAL READ CALL 5 ORA A JZ LO3 ;IF MORE TO DO THEN GO-ON RET ;ELSE ALL DONE, EXIT ; ; INTERNAL ROUTINE - CV2HX ; LOW ORDER 4-BITS OF A-REG COD,M ;POINT TO TABLE XCHG FP1: MOV A,M ORA A JZ NO$PROC LXI D,PROCNAME LDA NAMELEN MOV B,A PUSH H ;SAVE ADDR OF TABLE ENTRY FP2: LDAX D CMP M JNZ FP3 ;BR IF NO MATCH INX H INX D DCR B JNZ FP2 ;BR IF MORE TO COMPARN EXTENSION LDA MYFCB ADI '@' STA NFMSG1 LXI D,NFMSG CPI '@' JNZ WMSG LXI H,' ' SHLD NFMSG1 ;CHANGE "@:" TO " " WMSG: MVI C,9 ;PRINT STRING CALL 5 MVI C,0 ;INITIALIZE CALL 5 NFMSG: DB 13,10,'Unable to open overlay file:  ; ; DATA AREA FOR OVERLAY MANAGER ; ; ; ;***************************************************************; ; ; NOTE THIS TABLE MUST BE IN THE CSEG AREA BECAUSE IS MUST ; BE INITIALIZED VIA DB AND LINKMT WILL NOT SUPPORT INITIALIZED ------------- RET ;BACK TO MAIN @OVL ROUTINE ;===============================================================; ; SUBROUTINE: LOAD$OVLY ; ; PURPOSE : USING OVLADDR AND OVLBASE LOAD THE OVERLAY ; ;============================================ ;CONVERT HIGH NIBBLE STA MYFCB+10 LDA OVLGNUM CALL CV2HX ;CONVERT LOW NIBBLE STA MYFCB+11 LXI H,MYFCB+12 MVI B,23 ;NUMBER OF EXTRA BYTES LO2: MVI M,0 INX H DCR B JNZ LO2 LXI D,80H ;SET DEFAULT DMA ADDRESS MVI C,26 CALL 5 NTAIN BINARY NUMBER ; RETURN ASCII CHAR IN A-REG ; CV2HX: ANI 0FH ADI '0' CPI 03AH RC ;RETURN IF A VAILD DIGIT ADI 7 RET ;===============================================================; ; SUBROUTINE: FIND$PROC ; ; PURPOSE : E ; ; WE FOUND IT...... ; POP H ;GET BASE ADDR OF TABLE ENTRY LXI D,8 ;BYPASS NAME DAD D MOV E,M INX H MOV D,M XCHG SHLD PROCADR RET ;AND EXIT FP3: POP H LXI D,10 DAD D JMP FP1 ;=====================================' NFMSG1: DB '@: . ',13,10,'$' NO$PROC: ;***PROCEDURE NAME NOT FOUND*** MOVE MYFCB+1,NPMSG2+2,8 ;MOVE IN NAME MOVE MYFCB+9,NPMSG2+11,3 ;MOVE IN EXTENSION LDA MYFCB ADI '@' STA NPMSG2 CPI '@' JNZ NP1 LXI H,' ' SHLD NPM ; DATA IN THE DSEG ; DRIVE$TAB: ;DRIVE TABLES FOR 50 OVERLAYS REPT 50 DB 0 ENDM USR$SP: DW USR$RET ;USR$RET STACK POINTER ;THIS MUST ALSO BE IN CODE SEG DSEG DMAPTR: DS 2 ;DMA ADDRESS FOR INPUT XFER PROCNAME: DS 8 ;NAME ===================; LOAD$OVLY: CALL CALC$ADDR ;SETS OVLAREA AND HL-REG LDA OVLGNUM ;GET GROUP NUMBER BACK AGAIN CMP M ;IS REQUESTED OVERLAY IN THE AREA? RZ ;RETURN IF ALREADY LOADED ; ; IF NOT LOADED THEN CONSTRUCT NAME AND LOAD IT ;  LXI D,MYFCB MVI C,15 ;FILE OPEN CALL 5 ;GO OPEN THE FILE CPI 255 JZ NO$FILE ;BR IF FILE NOT FOUND ; ; OK, NOW LOAD IT UNTIL EOF ; LHLD OVLAREA ;GET OVERLAY AREA ADDRESS SHLD DMAPTR LO3: LHLD DMAPTR XCHG MVI C,26 CALL 5  GIVEN PROCEDURE NAME IN PROCNAME ; ; RETURN ADDRESS OF THIS PROCEDURE IN ; ; PROCADR ; ;===============================================================; FIND$PROC: LHLD OVLAREA ;GET ADDR OF OVERLAY AREA INX H MOV E,M INX H MOV ==========================; ; ERROR MESSAGE PRINTING ROUTINES ; ;===============================================================; NO$FILE: ;***OVERLAY FILE NOT FOUND*** MOVE MYFCB+1,NFMSG1+2,8 ;MOVE IN NAME MOVE MYFCB+9,NFMSG1+11,3 ;MOVE ISG2 NP1: MOVE PROCNAME,NPMSG1,8 LXI D,NPMSG JMP WMSG NPMSG: DB 13,10,'Procedure: "' NPMSG1: DB ' " not found in overlay: ' NPMSG2: DB '@: . ',13,10,'$' ;***************************************************************; ; OF PROCEDURE WHICH WE ARE CALLING OVLGNUM: DS 1 ;OVERLAY NUMBER PROCADR: DS 2 ;PROCEDURE ADDRESS MYFCB: DS 36 ;FCB FOR FILE OPENING ; ; USR$RET STACK CONTAINS RETURN ADDRESS AND ; SAVED OVERLAY AREA ADDRESS ; AND OVERLAY GROUP NUMBER ;(MAX NES   TING 25 DS 129 ;SAVED RETURN ADDRESSES USR$RET: OVLAREA: DS 2 ;LOC OF MOST RECENT OVL AREA END FILE OPENING ; ; USR$RET STACK CONTAINS RETURN ADDRESS AND ; SAVED OVERLAY AREA ADDRESS ; AND OVERLAY GROUP NUMBER ;(MAX NES (* SET IF CURSORS COLLIDED *) RECORDSEEN, EXTSEEN, COLONSEEN: BOOLEAN; CUR, NXT: CHARINFO; CURRSYM, NEXTSYM: SYMBOLINFO; CRPENDING : BOOLEAN; PPOPTION : OPTIONTABLE; KEYWORD : KEYWORDTABLE; ååKEYWORD : EXTERNAL KEYWORDTABLE; DBLCHARS: EXTERNAL DBLCHRSET; DBLCHR : EXTERNAL DBLCTABLE; SGLCHAR : EXTERNAL SGLCHARTABLE; STACK : EXTERNAL SYMBOLSTACK; TOP : EXTERNAL INTEGER; CURLINEååDBLCHARS: DBLCHRSET; DBLCHR : DBLCTABLE; SGLCHAR : SGLCHARTABLE; STACK : SYMBOLSTACK; TOP : INTEGER; CURLINEPOS, CURRMARGIN: INTEGER; å(* VERSION 0009 *) (* PRETTY PRINTER EXTERNAL GLOBALS *) VAR CURSOR, DSTCURSOR : EXTERNAL INTEGER; ENDFILE, BUFSZ, LASTLINE : EXTERNAL INTEGER; GBL_OOPS: EXTERNAL BOOLEAN; BUF : ABSOLUTE [$A000] ARRAY[0..0] OF CHAR; POS, CURRMARGIN: EXTERNAL INTEGER; HAR : EXTERNAL SGLCHARTABLE; STACK : EXTERNAL SYMBOLSTACK; TOP : EXTERNAL INTEGER; CURLINEå(* VERSION 0015 *) (* PRETTY PRINTER GLOBALS *) VAR ENDFILE, CBP, BUFSZ, LASTLINE: EXTERNAL INTEGER; (* FROM SOFTBUS GLOBALS *) CURSOR, DSTCURSOR: INTEGER; BUF : ABSOLUTE [$A000] ARRAY[0..0] OF CHAR; GBL_OOPS: BOOLEAN;åå RECORDSEEN, EXTSEEN, COLONSEEN : EXTERNAL BOOLEAN; CUR, NXT: EXTERNAL CHARINFO; CURRSYM, NEXTSYM: EXTERNAL SYMBOLINFO; CRPENDING : EXTERNAL BOOLEAN; PPOPTION : EXTERNAL OPTIONTABLE; åå    CONST CR = $0D; MAXSYMSIZE = 200; (* MAX SIZE OF A SYMBOL *) MAXSTKSIZE = 100; (* MAX # OF SYMBOLS CAUSING INDENTATION *) MAXKEYLEN = 10; (* MAX LENGTH OF A RESERVED WORD *) MAXLINSIZE = 72; (* MAX SIZE OF AN OUTPUT LINEEVARSY, OFSY, FORSY, WHILESY, WITHSY, DOSY, IFSY, THENSY, ELSESY, ENDSY, UNTILSY,  GOBBLESYMBOLS, INDENTBYTAB, INDENTTOCLP, CRAFTER); OPTIONSET = SET OF OPTION; KEYSYMSET = SET OF KEYSYMBOL; TABLEENTRY = RECORD OPT : OPTIONSET; ARRAY [1..MAXSYMSIZE] OF CHAR; SYMBOL = RECORD NAME : KEYSYMBOL; VALUE : STRING; LENGTH : INTEGER; SPACESBEFORE: INTEGER; CRSBEFORE :   PREVMARGIN : INTEGER END; SYMBOLSTACK = ARRAY [1..MAXSTKSIZE] OF STACKENTRY;å *) SLFAIL1 = 48; (* USE TWO BLANKS AS TAB BEFORE THIS COL *) SLFAIL2 = 60; (* USE ONE BLANK AS TAB BETWEEN SF1 AND HERE *) INDENT1 = 2; INDENT2 = 1; SPACE = ' '; TYPE KEYSYMBOL = (PROGSY, EXTSY,  BECOMES, OPENCOMMENT, CLOSECOMMENT, SEMICOLON, COLON, EQUALS, OPENPAREN, CLOSEPAREN, PERIOD, END_OF_FILE,  DINDENTSYMBOLS : KEYSYMSET; GOBBLETERMINATORS: KEYSYMSET END; OPTIONTABLE = ARRAY [KEYSYMBOL] OF TABLEENTRY; KEY = PACKED ARRAY [1..MAXKEYLEN] OF CHAR; KEYWORDTABLE = ARRAY [PROGSYINTEGER END; SYMBOLINFO = {^}SYMBOL; CHARNAME = (LETTER, DIGIT, BLANK, QUOTE, END_OF_LINE, FILEMARK, OTHERCHAR); CHARINFO = RECORD NAME : CHARNAME; åMODULE PPMOD3; (* CREATED 3/26/81 NJL *) (*$I PPTYPES *) (*$I PPEXTS *) EXTERNAL PROCEDURE GETSYMBOL(VAR NEXTSYM,CURRSYM : SYMBOLINFO); FUNCTION COLLIDE:BOOLEAN; BEGIN GBL_OOPS := DSTCURSOR + 80 >= CURSOR; COLLIDE := GBL_OOPS; END;  FUNCSY, PROCSY, LABELSY, CONSTSY, TYPESY, VARSY, BEGINSY, REPEATSY, RECORDSY, CASESY, CAS ANOTHERSY, OTHERSY); OPTION = (CRSUPPRESS, CRBEFORE, BLANKLINEBEFORE, DINDENTONKEYS, DINDENT, SPACEBEFORE, SPACEAFTER, ..UNTILSY] OF KEY; SPECIALCHAR = PACKED ARRAY [1..2] OF CHAR; DBLCHRSET = SET OF BECOMES..OPENCOMMENT; DBLCTABLE = ARRAY [BECOMES..OPENCOMMENT] OF SPECIALCHAR; SGLCHARTABLE = ARRAY [OPENCOMMENT..PERIOD] OF CHAR; STRING =  VALUE : CHAR END; STACKENTRY = RECORD INDENTSYMBOL : KEYSYMBOL; PREVMARGIN : INTEGER END; SYMBOLSTACK = ARRAY [1..MAXSTKSIZE] OF STACKENTRY;åPROCEDURE PUTCH(CH:CHAR); BEGIN IF NOT COLLIDE THEN BEGIN BUF[DSTCURSOR] := CH; DSTCURSOR := DSTCURSOR + 1 END END; PROCEDURE PUTLN; BEGIN PUTCH(CHR(13)); PUTCH(CHR(10)); LASTLINE := LASTLINE + 1 END; FUNCTIO   N STACKEMPTY : BOOLEAN; BEGIN IF TOP = 0 THEN STACKEMPTY := TRUE ELSE STACKEMPTY := FALSE END; FUNCTION STACKFULL : BOOLEAN; BEGIN IF TOP = MAXSTKSIZE THEN STACKFULL := TRUE ELSE STACKFULL := FALSE END; (* STACKFULL * BEGIN TOP := TOP + 1; STACK[TOP].INDENTSYMBOL := INDENTSYMBOL; STACK[TOP].PREVMARGIN := PREVMARGIN END; (* PUSHSTACK *) PROCEDURE WRITECRS( NUMBEROFCRS : INTEGER; VAR CURLINEPOS : INTEGER); VAR I : INTEGER; BEGIN IF NUMBEROFCRS LINEPOS = 0 THEN WRITECRS(ONCE,CURLINEPOS) ELSE WRITECRS(TWICE, CURLINEPOS); CURRSYM{^}.SPACESBEFORE := 0 END ELSE IF CURRSYM{^}.CRSBEFORE = 1 THEN IF CURLINEPOS > 0 THEN WRITECRS(ONCE, CURLINEPOHIFTON *) PROCEDURE LSHIFT; VAR INDENTSYMBOL : KEYSYMBOL; PREVMARGIN : INTEGER; BEGIN IF NOT STACKEMPTY THEN BEGIN POPSTACK(INDENTSYMBOL,PREVMARGIN); CURRMARGIN := PREVMARGIN END END; (*LSHIFT*) PROCEDURE INSERTSS *) PROCEDURE PRINTSYMBOL(VAR CURRSYM : SYMBOLINFO; VAR CURLINEPOS : INTEGER); VAR I : INTEGER; BEGIN WITH CURRSYM{^} DO BEGIN FOR I := 1 TO LENGTH DO PUTCH(VALUE[I]); CURLINEPOS := CURLINEPOS + LENGTH END (CRS(ONCE,CURLINEPOS); IF CURRMARGIN + LENGTH <= MAXLINSIZE THEN NEWLINEPOS := CURRMARGIN ELSE IF LENGTH < MAXLINSIZE THEN NEWLINEPOS := MAXLINSIZE - LENGTH ELSE NEWL) PROCEDURE POPSTACK( VAR INDENTSYMBOL : KEYSYMBOL; VAR PREVMARGIN : INTEGER); BEGIN IF NOT STACKEMPTY THEN BEGIN INDENTSYMBOL := STACK[TOP].INDENTSYMBOL; PREVMARGIN := STACK[TOP].PREVMA> 0 THEN BEGIN FOR I := 1 TO NUMBEROFCRS DO PUTLN; CURLINEPOS := 0 END END; (* WRITECRS *) PROCEDURE INSERTCR( VAR CURRSYM : SYMBOLINFO); CONST ONCE = 1; BEGIN IF CURRSYM{^}.CRSBEFORE = 0 THEN BEGIN S) END; (* INSERTBLANKLINE *) PROCEDURE LSHIFTON(DINDENTSYMBOLS : KEYSYMSET); VAR INDENTSYMBOL : KEYSYMBOL; PREVMARGIN : INTEGER; BEGIN IF NOT STACKEMPTY THEN BEGIN REPEAT POPSTACK(INDENTSYMBOL,PREVMARGIN); IF PACE(VAR SYMBOL : SYMBOLINFO); BEGIN IF CURLINEPOS < MAXLINSIZE THEN BEGIN PUTCH(SPACE); CURLINEPOS := CURLINEPOS + 1; WITH SYMBOL{^} DO IF (CRSBEFORE = 0) AND (SPACESBEFORE > 0) THEN SPACESBEFORE := SPACES* WITH *) END; (* PRINTSYMBOL *) PROCEDURE PPSYMBOL(VAR CURRSYM : SYMBOLINFO); CONST ONCE = 1; VAR NEWLINEPOS : INTEGER; BEGIN WITH CURRSYM{^} DO BEGIN WRITECRS( CRSBEFORE, CURLINEPOS); IF (CURLINEPOS + SPACESBEFOREINEPOS := 0 END; MOVELINEPOS(NEWLINEPOS, CURLINEPOS); PRINTSYMBOL(CURRSYM,CURLINEPOS) END; (* WITH *) END; (*PPSYMBOL*) PROCEDURE GOBBLE(TERMINATORS : KEYSYMSET; VAR CURRSYM,NEXTSYM : SYMBOLINFO); BEGIN RSHIFTTOCLP(CURRSRGIN; TOP := TOP - 1; END ELSE BEGIN INDENTSYMBOL := OTHERSY; PREVMARGIN := 0 END END; (* POPSTACK *) PROCEDURE PUSHSTACK( INDENTSYMBOL : KEYSYMBOL; PREVMARGIN : INTEGER);  WRITECRS(ONCE, CURLINEPOS); CURRSYM{^}.SPACESBEFORE := 0 END END; (* INSERTCR*) PROCEDURE INSERTBLANKLINE(VAR CURRSYM : SYMBOLINFO); CONST ONCE = 1; TWICE = 2; BEGIN IF CURRSYM{^}.CRSBEFORE = 0 THEN BEGIN IF CURINDENTSYMBOL IN DINDENTSYMBOLS THEN CURRMARGIN := PREVMARGIN UNTIL NOT (INDENTSYMBOL IN DINDENTSYMBOLS) OR (STACKEMPTY); IF NOT (INDENTSYMBOL IN DINDENTSYMBOLS) THEN PUSHSTACK(INDENTSYMBOL, PREVMARGIN) END END; (* LSBEFORE -1 END END; (* INSERTSPACE *) PROCEDURE MOVELINEPOS( NEWLINEPOS : INTEGER; VAR CURLINEPOS : INTEGER); VAR I : INTEGER; BEGIN FOR I := CURLINEPOS + 1 TO NEWLINEPOS DO PUTCH(SPACE); CURLINEPOS := NEWLINEPOS END; (* MOVELINEPO > CURRMARGIN) OR ( NAME IN [OPENCOMMENT, CLOSECOMMENT]) THEN NEWLINEPOS := CURLINEPOS + SPACESBEFORE ELSE NEWLINEPOS := CURRMARGIN; IF NEWLINEPOS + LENGTH > MAXLINSIZE THEN BEGIN WRITEYM{^}.NAME); WHILE NOT (NEXTSYM{^}.NAME IN (TERMINATORS + [ENDOFFILE])) DO BEGIN GETSYMBOL(NEXTSYM,CURRSYM); PPSYMBOL(CURRSYM); END; LSHIFT END; (* GOBBLE *) PROCEDURE RSHIFT(CURRSYM : KEYSYMBOL); BEGIN IF NOT STACKF   ULL THEN PUSHSTACK(CURRSYM, CURRMARGIN); IF CURRMARGIN < SLFAIL1 THEN CURRMARGIN := CURRMARGIN + INDENT1 ELSE IF CURRMARGIN < SLFAIL2 THEN CURRMARGIN := CURRMARGIN + INDENT2 END; (*RSHIFT*) PROCEDURE RSHIFTTOCLP(å := 'TYPE ' ; KEYWORD[VARSY ] := 'VAR ' ; KEYWORD[BEGINSY ] := 'BEGIN ' ; KEYWORD[REPEATSY] := 'REPEAT ' ; KEYWORD[RECORDSY] := 'RECORD ' ; KEYWORD[CASESY ] := 'CASE ' ; KEYWORD[CASEVARSY]:= 'CASE ' ; ='; DBLCHR[OPENCOMMENT] := '(*'; SGLCHAR[OPENCOMMENT] := '{'; SGLCHAR[CLOSECOMMENT] := '}'; SGLCHAR[SEMICOLON ] := ';'; SGLCHAR[COLON ] := ':'; SGLCHAR[EQUALS ] := '='; SGLCHAR[OPENPAREN ] := '('; SGLCHAR[CLOSEPAREN] := ' WITH PPOPTION[ EXTSY ] DO BEGIN OPT := [BLANKLINEBEFORE, SPACEAFTER]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION[FUNCSY] DO BEGIN OPT := [BLANKLINEBEFORE,DINDENTONKEYS,SPACEAFTER]; GIN OPT := [ CRBEFORE, DINDENTONKEYS, SPACEAFTER, INDENTTOCLP ]; DINDENTSYMBOLS := [ LABELSY ] ; GOBBLETERMINATORS := [] END; WITH PPOPTION [ TYPESY ] DO BEGIN OPT := [ CRBEFORE, DINDENTONKEYS, SPACEAFTER, INDCURRSYM : KEYSYMBOL); BEGIN IF NOT STACKFULL THEN PUSHSTACK(CURRSYM,CURRMARGIN); CURRMARGIN := CURLINEPOS END; MODEND. (* VERSION 0026 *) (* 5.5 STARTS WITH VERSION 26 *) MODULE PPINIT; (*$I PPTYPES*) (*$I PPEXTS*) EXTERNAL PROCEDURE GETCHAR; EXTERNAL PROCEDURE GETSYMBOL(VAR NEXTSYM,CURRSYM : SYMBOLINFO); PROCEDURE INITIALIZE; PROCEDURE IDINIT; BEGIKEYWORD[OFSY ] := 'OF ' ; KEYWORD[FORSY ] := 'FOR ' ; KEYWORD[WHILESY ] := 'WHILE ' ; KEYWORD[WITHSY ] := 'WITH ' ; KEYWORD[DOSY ] := 'DO ' ; KEYWORD[IFSY ] := 'IF ' ; KEYWORD[THENSY ] := ')'; SGLCHAR[PERIOD ] := '.'; RECORDSEEN := FALSE; COLONSEEN := FALSE; FILLCHAR(CUR,SIZEOF(CHARINFO),CHR(0)); NXT := CUR; GETCHAR; {----------------- NEW(CURRSYM); NEW(NEXTSYM); ------------------} GETSYMBOL(N DINDENTSYMBOLS := [LABELSY,CONSTSY,TYPESY]; GOBBLETERMINATORS := [] END; WITH PPOPTION[PROCSY] DO BEGIN OPT := [BLANKLINEBEFORE, DINDENTONKEYS, SPACEAFTER]; DINDENTSYMBOLS := [ LABELSY, CONSTSY, TYPESY, VARSY ]; ENTTOCLP ]; DINDENTSYMBOLS := [ LABELSY, CONSTSY ] ; GOBBLETERMINATORS := [] END; WITH PPOPTION [ VARSY ] DO BEGIN OPT := [CRBEFORE, DINDENTONKEYS, SPACEAFTER, INDENTTOCLP ]; DINDENTSYMBOLS := [LABELSY, CONSTSåN KEYWORD[PROGSY ] := 'PROGRAM ' ; KEYWORD[EXTSY ] := 'EXTERNAL ' ; KEYWORD[FUNCSY ] := 'FUNCTION ' ; KEYWORD[PROCSY ] := 'PROCEDURE ' ; KEYWORD[LABELSY ] := 'LABEL ' ; KEYWORD[CONSTSY ] := 'CONST ' ; KEYWORD[TYPESY ]THEN ' ; KEYWORD[ELSESY ] := 'ELSE ' ; KEYWORD[ENDSY ] := 'END ' ; KEYWORD[UNTILSY ] := 'UNTIL ' ; TOP := 0; CURLINEPOS := 0; CURRMARGIN := 0; DBLCHARS := [BECOMES,OPENCOMMENT]; DBLCHR[BECOMES ] := ':EXTSYM,CURRSYM); END; (* IDINIT *) PROCEDURE PPOPTINIT; PROCEDURE PP1; BEGIN WITH PPOPTION[PROGSY] DO BEGIN OPT := [BLANKLINEBEFORE, SPACEAFTER]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := []; END;  GOBBLETERMINATORS := [] END; WITH PPOPTION [ LABELSY ] DO BEGIN OPT := [CRBEFORE, SPACEAFTER, INDENTTOCLP ]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ CONSTSY ] DO BEY, TYPESY ]; GOBBLETERMINATORS := []; END; WITH PPOPTION [ BEGINSY ] DO BEGIN OPT := [DINDENTONKEYS, INDENTBYTAB, CRAFTER]; DINDENTSYMBOLS := [LABELSY, CONSTSY, TYPESY, VARSY ] ; GOBBLETERMINATORS := [] E   ND; WITH PPOPTION[ REPEATSY ] DO BEGIN OPT := [INDENTBYTAB, CRAFTER ]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ RECORDSY ] DO BEGIN OPT := [INDENTBYTAB, CRAFTER]; S, SPACEBEFORE ] ; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [ OFSY ] END; WITH PPOPTION [ FORSY ] DO BEGIN OPT := [SPACEAFTER, INDENTBYTAB, GOBBLESYMBOLS, CRAFTER]; DINDENTSYMBOLS := []; GOBBLETERMINABOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ IFSY ] DO BEGIN OPT := [SPACEAFTER, INDENTBYTAB, GOBBLESYMBOLS]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [THENSY] END; END; (* PP1 *) TSYMBOLS := [IFSY,THENSY,ELSESY,FORSY, WHILESY, WITHSY, CASEVARSY,COLON, EQUALS]; END; WITH PPOPTION [ UNTILSY ] DO BEGIN OPT := [ CRBEFORE, DINDENTONKEYS, DINDENT, SPACEAFTER, GOBBLESYMBOLS, NDENTSYMBOLS := []; GOBBLETERMINATORS := []; END; WITH PPOPTION [ SEMICOLON ] DO BEGIN OPT := [CRSUPPRESS, DINDENTONKEYS, CRAFTER]; DINDENTSYMBOLS := [IFSY, THENSY, ELSESY, FORSY, WHILESY, W; GOBBLETERMINATORS := [CLOSEPAREN] END; WITH PPOPTION [ CLOSEPAREN ] DO BEGIN OPT := []; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ PERIOD ] DO BEGIN OPT := [ DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ CASESY ] DO BEGIN OPT := [SPACEAFTER, INDENTBYTAB, GOBBLESYMBOLS, CRAFTER]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [OFSY] END; TORS := [DOSY] END; WITH PPOPTION [ WHILESY ] DO BEGIN OPT := [SPACEAFTER, INDENTBYTAB, GOBBLESYMBOLS, CRAFTER ] ; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [DOSY]; END; WITH PPOPTION [ WITHSY ] DO  PROCEDURE PP2; BEGIN WITH PPOPTION [ THENSY] DO BEGIN OPT := [SPACEBEFORE, CRAFTER ]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ ELSESY ] DO BEGIN OPT := [CRBEF CRAFTER]; DINDENTSYMBOLS := [ IFSY, THENSY, ELSESY, FORSY, WHILESY, WITHSY, COLON, EQUALS ] ; GOBBLETERMINATORS := [ ENDSY, UNTILSY, ELSESY, SEMICOLON ] END; WITH PPOPTION [ BECOMES ] DO BEGINITHSY, COLON, EQUALS ] ; GOBBLETERMINATORS := [] END; WITH PPOPTION [ COLON ] DO BEGIN OPT := [SPACEAFTER, INDENTTOCLP ] ; DINDENTSYMBOLS := []; GOBBLETERMINATORS := []; END; WITH PPOPTION [ EQUACRSUPPRESS]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ END_OF_FILE ] DO BEGIN OPT := []; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ ANOTHER WITH PPOPTION [ CASEVARSY ] DO BEGIN OPT := [SPACEAFTER, INDENTBYTAB, GOBBLESYMBOLS, CRAFTER ]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [OFSY] END; WITH PPOPTION [ OFSY ] DO BEGIN OPT := [CRSUPPRES BEGIN OPT := [SPACEAFTER, INDENTBYTAB, GOBBLESYMBOLS, CRAFTER ]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [ DOSY ]; END; WITH PPOPTION [ DOSY ] DO BEGIN OPT := [CRSUPPRESS, SPACEBEFORE ]; DINDENTSYMORE, DINDENTONKEYS, {DINDENT,} INDENTBYTAB, CRAFTER ]; DINDENTSYMBOLS := [IFSY,ELSESY]; GOBBLETERMINATORS := [] END; WITH PPOPTION [ ENDSY ] DO BEGIN OPT := [CRBEFORE, DINDENTONKEYS, DINDENT, CRAFTER ]; DINDEN OPT := [ SPACEBEFORE, SPACEAFTER, GOBBLESYMBOLS ] ; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [ ENDSY, UNTILSY, ELSESY, SEMICOLON ] END; WITH PPOPTION [ CLOSECOMMENT ] DO BEGIN OPT := [CRSUPPRESS]; DILS ] DO BEGIN OPT := [SPACEBEFORE, SPACEAFTER, INDENTTOCLP ] ; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ OPENPAREN ] DO BEGIN OPT := [GOBBLESYMBOLS ] ; DINDENTSYMBOLS := []SY ] DO BEGIN OPT := [SPACEAFTER]; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; WITH PPOPTION [ OTHERSY ] DO BEGIN OPT := []; DINDENTSYMBOLS := []; GOBBLETERMINATORS := [] END; E   ND; (* PP2 *) BEGIN (* PPOPTINIT *) PP1; PP2; END; (* PPOPTINIT *) BEGIN (* INITIALIZE *) IDINIT; PPOPTINIT; END; (* INITIALIZE *) MODEND. ååN CH := BUF[CURSOR] ELSE CH := ' '; WITH NXT DO BEGIN IF CURSOR > ENDFILE THEN NAME := FILEMARK ELSE IF CH = CHR(CR) THEN BEGIN CURSOR := CURSOR + 2; WRITE('.'); NAME := LETTER ELSE IF ((CH >= '0') AND (CH <= '9')) THEN NAME := DIGIT ELSE IF CH = '''' THEN NAME := QUOTE ELSE IF CH = SPACE THEN NAME := BLANK ELSE NAME := OTHERCHAR;  END; (*$P*) PROCEDURE SKIPSPACES(VAR SPACESBEFORE,CRSBEFORE : INTEGER); BEGIN SPACESBEFORE := 0; CRSBEFORE := 0; WHILE (NXT.NAME = BLANK) OR (NXT.NAME = ENDOFLINE) DO BEGIN GETCHAR; CASE CUR.NAME Oååå EOLCURSOR := CURSOR; NAME := END_OF_LINE; (* CURSOR NOW POINTS TO CHAR AFTER LF *) WHILE BUF[CURSOR] = ' ' DO CURSOR := CURSOR + 1; MOVE(BUF[CURSOR],CH2,2); {IF ( IF (NAME=FILEMARK) OR (NAME=END_OF_LINE) THEN VALUE := SPACE ELSE VALUE := CH; {no longer convert to uppercase as of 5.5 } IF NAME <> FILEMARK THEN CURSOR := CURSOR + 1 END EF BLANK : SPACESBEFORE := SPACESBEFORE + 1; ENDOFLINE : BEGIN CRSBEFORE := CRSBEFORE + 1; SPACESBEFORE := 0 END END END END; (*$P*) PROCEDURE GETCOMMENT(Våå(* VERSION 0032 *) (* 5.5 STARTS WITH VERSION 32 *) MODULE PPMOD1; (*$I PPTYPES*) (*$I PPEXTS*) PROCEDURE GETCHAR; VAR CH : CHAR; EOLCURSOR : INTEGER; CH2 : ARRAY [1..2] OF CHAR; BEGIN CUR := NXT; IF CURSOR <= BUFSZ THECH2= '(*') OR (BUF[CURSOR]='{') THEN CURSOR := EOLCURSOR;} CURSOR := CURSOR - 1 END ELSE IF ((CH >='@') AND (CH <='Z')) OR ((CH >='a') AND (CH <='z')) OR ( CH = '_') THEN ND; (*$P*) PROCEDURE STORENXT(VAR LENGTH:INTEGER; VAR VALUE : STRING); BEGIN GETCHAR; IF LENGTH < MAXSYMSIZE THEN BEGIN LENGTH := LENGTH + 1; VALUE[LENGTH] := CUR.VALUE END AR NAME : KEYSYMBOL; VAR VALUE : STRING; VAR LENGTH : INTEGER; BRACE : BOOLEAN); BEGIN BRACE := NEXTSYM.VALUE[1] = '{'; NAME := OPENCOMMENT; IF NOT BRACE THEN WHILE NOT   (((CUR.VALUE = '*') AND (NXT.VALUE=')')) OR (NXT.NAME = ENDOFLINE) OR (NXT.NAME = FILEMARK)) DO STORENXT(LENGTH,VALUE) ELSE WHILE NOT((NXT.VALUE='}') OR (NXT.NAME = ENDOFLINE) OR (NXT.NAME = N FOR I := 1 TO LENGTH DO KEYVALUE[I] := CHR(VALUE[I] & $DF); FOR I := LENGTH+1 TO MAXKEYLENGTH DO KEYVALUE[I] := SPACE; THISKEY := PROGSY; HIT := FALSE; WHILE NOT(HIT OR (PRED(THISKEY) = UNTILSYOF RECORDSY : RECORDSEEN := TRUE; EXTSY : IF COLONSEEN THEN NAME := ANOTHERSY ELSE EXTSEEN := TRUE; PROCSY, FUNCSY : IF EXTSEEN THEN NAME := ANOTHERSY; CASESY : IF RECORDSEEN THEN åå CURRSYM : SYMBOLINFO); EXTERNAL PROCEDURE INSERTBLANKLINE( VAR CURRSYM : SYMBOLINFO); EXTERNAL PROCEDURE LSHIFTON(DINDENTSYMBOLS : KEYSYMSET); EXTERNAL PROCEDURE LSHIFT; EXTERNAL PROCEDURE INSERTSPACE(VAR SYMBOL : SYMBOLINFO); EXTERNAL PROCEDURE PPSYFILEMARK)) DO STORENXT(LENGTH,VALUE); IF (CUR.VALUE = '*') AND (NXT.VALUE = ')') THEN BEGIN STORENXT(LENGTH,VALUE); NAME := CLOSECOMMENT END ELSE IF (NXT.VALUE = '}') THEN NAME := CLOSECOMMENT END; ()) DO IF KEYVALUE = KEYWORD[THISKEY] THEN HIT := TRUE ELSE THISKEY := SUCC(THISKEY); IF HIT THEN IDTYPE := THISKEY END END; (*$P*) PROCEDURE GETIDENTIFIER(VAR NAME : KEYSYMBOL; NAME := CASEVARSY; ENDSY : RECORDSEEN := FALSE END END; MODEND. ; PROCSY, FUNCSY : IF EXTSEEN THEN NAME := ANOTHERSY; CASESY : IF RECORDSEEN THEN ååMBOL(CURRSYM : SYMBOLINFO); EXTERNAL PROCEDURE GOBBLE (TERMINATORS : KEYSYMSET; VAR CURRSYM, NEXTSYM : SYMBOLINFO); EXTERNAL PROCEDURE INITIALIZE; EXTERNAL PROCEDURE RSHIFT(CURRSYYM : KEYSYMBOL); EXTERNAL PROCEDURE RSHIFTTOC*$P*) FUNCTION IDTYPE(VALUE:STRING; LENGTH:INTEGER):KEYSYMBOL; VAR I : INTEGER; KEYVALUE : KEY; HIT : BOOLEAN; THISKEY : KEYSYMBOL; BEGIN IDTYPE := OTHERSY; IF LENGTH <= MAXKEYLEN THEN BEGI VAR VALUE : STRING; VAR LENGTH : INTEGER); BEGIN WHILE (NXT.NAME = LETTER) OR (NXT.NAME = DIGIT) DO STORENXT(LENGTH,VALUE); NAME := IDTYPE(VALUE,LENGTH); CASE NAME åå(* VERSION 0044 *) (* 5.5 STARTS WITH VERSION 44 *) MODULE PRETTYPRINT; (*$I PPTYPES*) (*$I PPGLBLS*) (*$E-*) VAR CH : CHAR; (*$E+*) EXTERNAL PROCEDURE GETSYMBOL(VAR NEXTSYM, CURRSYM : SYMBOLINFO); EXTERNAL PROCEDURE INSERTCR ( VARLP(CURRSYM : KEYSYMBOL); EXTERNAL PROCEDURE PUTLN; PROCEDURE PRETTY; (* FOR NOW *) VAR I : INTEGER; BEGIN (* MAIN PROGRAM *) FOR I := 1 TO 24 DO WRITELN; (* POOR MAN'S CLEAR SCREEN *) WRITELN('Pascal/MT+ 5.5'); WRITELN('Prog   ram reformatting utility'); WRITELN('Available memory for expansion = ',BUFSZ-ENDFILE+1,' bytes'); IF BUFSZ-ENDFILE+1 < 512 THEN BEGIN REPEAT WRITELN('You do not have much expansion space, Type E now if you'); WRITELN('sz+4; DSTCURSOR := 2; (* WHERE TO WRITE TO *) LASTLINE := 0; INITIALIZE; CRPENDING := FALSE; WHILE NEXTSYM{^}.NAME <> ENDOFFILE DO BEGIN IF GBL_OOPS THEN BEGIN WRITELN; WRITELN('I warne END; IF BLANKLINEBEFORE IN OPT THEN BEGIN INSERTBLANKLINE(CURRSYM); CRPENDING := FALSE END; IF DINDENTONKEYS IN OPT THEN LSHIFTON(DINDENTSYMBOLS);  THEN CRPENDING := TRUE END END; IF CRPENDING THEN PUTLN; PUTLN; ENDFILE := DSTCURSOR-1; (* THE END! *) IF BUF[ENDFILE-1] <> CHR(13) (* linefeed *) THEN BEGIN BUF[ENDFILE] := CHR(13); (* VERSION 0023 *) (* 5.5 STARTS WITH VERSION 23 *) MODULE PPMOD2; (*$I PPTYPES*) (*$I PPEXTS*) VAR LAST_CHAR : CHAR; EXTERNAL PROCEDURE STORENXT(VAR LEN : INTEGER; VAR VALUE : STRING); EXTERNAL PROCEDURE GETIDENTIFIER( VAR NAMBER(VAR NAME : KEYSYMBOL; VAR VALUE : STRING; VAR LENGTH : INTEGER); BEGIN WHILE NXT.NAME = DIGIT DO STORENXT(LENGTH,VALUE); NAME := OTHERSY END; (*$P*) PROCEDURE GETCHLITEhave not saved (updated) your file recently and you wish'); WRITELN('to do so before you possibly lose it! E)xit or C)ontinue:'); READLN(CH) UNTIL CH IN ['E','e','C','c']; IF CH IN ['E','e'] THEN EXIT END; Wd you, the new and old data has collided'); WRITELN('and the source text in the buffer has been lost'); WRITELN('Type to return to the supervisor'); READLN; EXIT END; GETSYMBOL(NEXTSYM,CURIF DINDENT IN OPT THEN LSHIFT; IF SPACEBEFORE IN OPT THEN INSERTSPACE(CURRSYM); PPSYMBOL(CURRSYM); IF SPACEAFTER IN OPT THEN INSERTSPACE(NEXTSYM); IF INDENTBYTAB IN OP BUF[ENDFILE+1] := CHR(10); ENDFILE := ENDFILE + 1 END; CBP := ENDFILE + 1; (* NO MORE COPY BUFFER *) LASTLINE := LASTLINE - 1; (* FUDGE IT APPROPRIATELY *) END; MODEND. ME : KEYSYMBOL; VAR VALUE : STRING; VAR LENGTH : INTEGER); EXTERNAL PROCEDURE GETCOMMENT( VAR NAME : KEYSYMBOL; VAR VALUE : STRING; RAL(VAR NAME : KEYSYMBOL; VAR VALUE : STRING; VAR LENGTH : INTEGER); BEGIN WHILE NXT.NAME = QUOTE DO BEGIN STORENXT(LENGTH,VALUE); WHILE NOT (NXT.NAME IN RITE('Formatting'); GBL_OOPS := FALSE; DSTCURSOR := 2+(BUFSZ-ENDFILE); MOVERIGHT(BUF[2],BUF[DSTCURSOR],ENDFILE-1); (* SHIFT ENTIRE BUFFER UP TO HIGH AREA OF BUFFER *) CURSOR := DSTCURSOR; (* WHERE TO READ FROM *) ENDFILE := bufRSYM); WITH PPOPTION[CURRSYM{^}.NAME] DO BEGIN IF (CRPENDING AND NOT(CRSUPPRESS IN OPT)) OR (CRBEFORE IN OPT) THEN BEGIN INSERTCR(CURRSYM); CRPENDING := FALSE T THEN RSHIFT(CURRSYM{^}.NAME); IF INDENTTOCLP IN OPT THEN RSHIFTTOCLP(CURRSYM{^}.NAME); IF GOBBLESYMBOLS IN OPT THEN GOBBLE(GOBBLETERMINATORS,CURRSYM,NEXTSYM); IF CRAFTER IN OPTå VAR LENGTH : INTEGER; BRACE : BOOLEAN); EXTERNAL PROCEDURE SKIPSPACES(VAR SPACESBEFORE,CRSBEFORE : INTEGER); PROCEDURE GETNU[QUOTE,ENDOFLINE,FILEMARK]) DO STORENXT(LENGTH,VALUE); IF NXT.NAME = QUOTE THEN STORENXT(LENGTH,VALUE) END; NAME := OTHERSY END; (*$P*) FUNCTION CHARTYPE:KEYSYMBOL; VAR NEXT_TWO_CHARS : SPECIALCHAR; HIT : BO   OLEAN; THISCHAR : KEYSYMBOL; BEGIN LAST_CHAR := CUR.VALUE; NEXTTWOCHARS[1] := CUR.VALUE; NEXTTWOCHARS[2] := NXT.VALUE; THISCHAR := BECOMES; HIT := FALSE; WHILE NOT(HIT OR (THISCHAR = CLOSECOMMENT)) DO IF NEXTTW VAR VALUE : STRING; VAR LENGTH : INTEGER); BEGIN STORENXT(LENGTH,VALUE); NAME := CHARTYPE; IF NAME IN DBLCHARS THEN STORENXT(LENGTH,VALUE); CASE NAME OF COLON : COLONTSPECIALCHAR(NAME,VALUE,LENGTH); IF NAME = OPENCOMMENT THEN GETCOMMENT(NAME,VALUE,LENGTH,NEXTSYM.VALUE[1]='{') END; FILEMARK: NAME := ENDOFFILE END END; (* GETNEXTSYMBOL *) (*åOUNT : INTEGER; INLINE : STRING; DONE : BOOLEAN; NEWSIZE : INTEGER; PROCEDURE KRUNCH(I:INTEGER); VAR J : INTEGER; BEGIN REPEAT NAMELIST^[I] := NAMELIST^[I+1]; I := I + 1; UNTIL ORD(NAMELIST^[I].NAME[1]) = 0 END; BEGIN NE DO BEGIN WRITE(NAMELIST^[I].NAME,'?'); READLN(INLINE); IF (length(inline) <> 0) and (INLINE[1] IN ['N','n']) THEN KRUNCH(I) ELSE I := I + 1; DONE := (NAMELIST^[I].NAME[1]=CHR(0)) OR (INLINE[1] = OCHARS = DBLCHR[THISCHAR] THEN HIT := TRUE ELSE THISCHAR := SUCC(THISCHAR); IF NOT HIT THEN BEGIN THISCHAR := OPENCOMMENT; WHILE NOT(HIT OR (PRED(THISCHAR) = PERIOD)) DO IF CUR.VALUE = SGLCHAR[THISCHAR]SEEN := TRUE; SEMICOLON : BEGIN COLONSEEN := FALSE; EXTSEEN := FALSE END END END; (*$P*) PROCEDURE GETNEXTSYMBOL(VAR NAME : KEYSYMBOL; VAR VALUE: STRING; VAR LENGTH:INTEGER); $P*) PROCEDURE GETSYMBOL(VAR NEXTSYM,CURRSYM:SYMBOLINFO); VAR DUMMY : SYMBOLINFO; BEGIN DUMMY := CURRSYM; CURRSYM := NEXTSYM; NEXTSYM := DUMMY; WITH NEXTSYM{^} DO BEGIN SKIPSPACES(SPACESBEFORE,CRSBEFORE); LEPROGRAM STRIPIT; (* PROGRAM TO STRIP ENTRY POINT NAMES FROM AN OVERLAY *) TYPE ALPHA = PACKED ARRAY [1..8] OF CHAR; NAMEREC = RECORD NAME : ALPHA; ADDR : INTEGER END; NAMEARR = ARRAY [0..0] OF NA WRITE('File name? '); READLN(TITLE); ASSIGN(INFILE,TITLE); RESET(INFILE); COUNT := 0; WHILE IORESULT <> 1 DO BEGIN COUNT := COUNT + 1; BUF[COUNT-1] := INFILE^; SEEKREAD(INFILE,COUNT); END; WRITELN(Count,' '.') END; (* Now write it out *) I := 0; REPEAT WRITELN(NAMELIST^[I].NAME); I := I + 1 UNTIL (NAMELIST^[I].NAME[1] = CHR(0)); WRITELN(i,' symbols remain'); NEWSIZE := (ORD(ADDR(NAMELIST^[I].NAME))-ORD(ADDR(BUF)));  THEN HIT := TRUE ELSE THISCHAR := SUCC(THISCHAR); END; IF HIT THEN CHARTYPE := THISCHAR ELSE CHARTYPE := OTHERSY END; (*$P*) PROCEDURE GETSPECIALCHAR(VAR NAME : KEYSYMBOL;  BEGIN CASE NXT.NAME OF LETTER : GETIDENTIFIER(NAME,VALUE,LENGTH); DIGIT : GETNUMBER(NAME,VALUE,LENGTH); QUOTE : GETCHLITERAL(NAME,VALUE,LENGTH); OTHERCHAR:BEGIN GENGTH := 0; IF CURRSYM{^}.NAME = OPENCOMMENT THEN GETCOMMENT(NAME,VALUE,LENGTH,NEXTSYM.VALUE[1]='{') ELSE GETNEXTSYMBOL(NAME,VALUE,LENGTH) END END; (* GETSYMBOL *) MODEND. MEREC; SECTOR = ARRAY [0..127] OF BYTE; VAR NAMELIST : ^NAMEARR; I : INTEGER; BASE : INTEGER; TITLE : STRING; INFILE : FILE OF SECTOR; OUTFILE : FILE OF SECTOR; BUF : ARRAY [0..192] OF SECTOR; (* OVERLAY LOADING AREA *) Csectors'); WRITE('Base addr? '); READHEX(INPUT,BASE,2); MOVE(BUF[0,1],I,2); WRITE('Table starts at Offset = '); WRITEHEX(OUTPUT,I-BASE,2); WRITELN; NAMELIST := ORD(ADDR(BUF)) + (I-BASE); DONE := FALSE; I := 0; WHILE NOT DO IF (NEWSIZE MOD 128) <> 0 THEN NEWSIZE := NEWSIZE + 128; WRITELN('New size is ',NEWSIZE DIV 128,' sectors'); COUNT := NEWSIZE DIV 128; WRITE('Writeit? '); READLN(INLINE); IF INLINE <> 'YESDOIT' THEN EXIT; ASSIGN(OUTFIL   E,TITLE); REWRITE(OUTFILE); FOR I := 0 TO COUNT-1 DO BEGIN OUTFILE^ := BUF[I]; SEEKWRITE(OUTFILE,I) END; CLOSE(OUTFILE,I) END. åååååååååååååSTRIP,RANDOMIO,PASLIB/S/D:4000 „ÃiÑ.é!ÍgÉ> Ó>ÓÛÚ©Ã�ÛæÉ!ƒp+q*‚DMÍ¡:͆ ͆:_2„:`!„¾Úô!Þ:„¾Òí*„&ß N͆!„4ÂÌ!Þ6JÈåååå   åååååååååååååååååå   åååååååååååååååååå   åååååååååååååååååå    åååååååååååååååååå    åååååååååååååååååå!   åååååååååååååååååå!   åååååååååååååååååå"   åååååååååååååååååå"   åååååååååååååååååå#   åååååååååååååååååå#   åååååååååååååååååå$   åååååååååååååååååå$   åååååååååååååååååå%   åååååååååååååååååå%   åååååååååååååååååå&   åååååååååååååååååå&   åååååååååååååååååå'   åååååååååååååååååå'   åååååååååååååååååå