IMD 1.18: 22/01/1996 8:11:10 micro cornucopia kaypro user group disk 46   åååååååååå  46-DISK DOCCLKDEMO COMS CLKDEMO PAS)CLOCK84 BOX.GRAFIX BOX GRAFIX M4P'!"#$%GRFDEMO COMQ&'()*+,-./0GRFDEMO PAS'12345INLINE COML6789:;<=>?INLINE DOC@ABINLINE PAS,CDEFGHKAYPRO84BOX IJSCREEN COM€KLMNOPQRSTUVWXYZSCREEN COM[SCREEN DOC\]^_SCREEN PAS€`abcdefghijklmnoåå KAYPRO DISK K-46 PASCAL RUNOFF - TURBO UTILITIES Here we go with a set of utilities designed to ease your life as a Turbo Pascal programmer. These are some real gems from our Turbo Pascal Runoff, so enjoy! Source is included for all programs. Some of the files on this disk have been squeezed. So before you do anything else, any file with a 'Q' as the second letter of the extension should be unsqueezed as in the following example: SCREEN PASpqrSETCLOCKCOMGstuvwxyz{TRUN DOC;|}~€�‚ƒTRUN28 COMK„…†‡ˆ‰Š‹Œ�TRUN28 PAS&Ž��‘’TRUN2C COMK“”•–—˜™š›œTRUN2C PAS&�žŸ ¡TRUN3 COML¢£¤¥¦§¨©ª«TRUN3 PAS¬­®¯VIDDEMO COME°±²³´µ¶·¸VIDDEMO PAS ¹ºVIDEO84 BOX»¼½¾åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå USQ CLOCK84.BQX d: The unsqueezed file will be redirected to drive d:. If d: is not specified, USQ will write to the current drive. Since the unsqueezed files take up so much room you'll want to unsqueeze them to another disk, especially if all you have are single sided drives. ______________________________________________________________________________ 84TOOLBOX - This group of files demonstrates how to control the video and real time clock capabilitiesåå   of the 84 series Kaypros. Take a look at CLKDEMO, CLOCK84, GRAFIX, GRFDEMO, KAYPRO84, SETCLOCK, VIDDEMO, and VIDEO84. INLINE - Turbo's facility for use of inline machine code can really speed up your programs. Unfortunately, inline code is a pain to write. INLINE solves this problem by creating an inline statement using the PRN file generated by either the Z80MR or ASM assembler. SCREEN - Generating a menu or any nicely formatted screen output is a trying experience. You try this and try tëñðHåÍ\Ë<ËÑëÍÞëËzÈ5Í+È)ýÉÍ+ÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úHºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ͬèͬdͬ ͬ} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~Í„Ö08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>ÃwÝáͦWáͧ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯Ã28!?"9!É í°!á¸í°áí°>2گà Ã:ÃDÃ]ÃSÃXÃNÃ]ÃDÿ í[Ûþ (ú!eÍ}Í„þA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍyÍVþ. ÍV!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(Í„w#ßÉ>?> w#üÉþaØþ{ÐÖ É|Í’}õÍ›ñæÆ�'Î@'Ãè¯7Ë|À|·}È>ÿÉ"ÍíCß"í6#ûëÑùü "Ïë"ÕÍ�Í©éå*Ï·íB"Ïí[Í·íRëáÚ5í°É*Ïí°"ÏÙÉ^#V#ÙÍaÙ}.�•õ; ÙÍOÙÍJ ÅÕåÙ,ÍÖ ÙáÑÁ; ÝåÝ!U >ÍýÝá,ÙÍk-ÙÍÖ ñÅÕåo&0%ÍÑÙ,Í` ÙáÑÁÍÖ }þgÚ; É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍkÙ·Ëxõ˸; }þˆ0GÅÕå,Í™åË<Ë}áõÍÑ,-(-ÙñáÑÁõÍJ ÝåÝ!Ù >ÍÝáñ0 õÙÍaÙÍ` ñ…o8 ñÈÙÍOþ á>Ãum.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍOÙ¯Ëx(<˸õͨ 8Ù; ñËÿõÙÏŽé!~JÙͨ 0Í÷OÝ!—>ÙÝÍ<Ùͨ 8 = ìÙ ÝÙÙÍ7ËøÍÖ ÅÕåÍ<Í` ÙÍOÍÖ ÙáÑÁ; ÝåÍ÷ÝáÙÍ7ÍÖ ñ0 õÙÍW-ÍJ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!Ó>ÅÕåhat until it looks right. With SCREEN's editor you can fiddle with a menu until it's just what you want, then hit ESC and a procedure to print the menu is created. TRUN - Each COM file generated by Turbo Pascal has an 8K run time library attached. If you have a lot of small programs this 8K overhead for each one can add up to a bunch of wasted disk space. TRUN solves this problem by allowing execution of chain files (no run time library). xñW^‘8/ÃwÍÖ Ð>ÃuÍJ õÍuÍ` íÙ}·Ù>(è; àÙËxÙÂQ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍC ,= ù(Ùñæ€ Í[ 0%ÍD ·, 7 Í� ?õ(8ÙÍu Ëx ÍO - öÍ; ñ8˸·ÙáÑÁÙÉÙËxÙÂÝ ÍX ÍÝ Ø,-Èxî€GÉÙ}·ÙÊ; }·ÈÙ…ÙÍ ÅÕåÝ9Í; Ù.Ù>Ý#ÝnË0Í[ ÍD = ñÙ-Ù åÝnûËx ÍP ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ì; É}·ÈÙ•Ù?Í åååÝ9Ù.Ù>Í� 8Íu ?Ë= ÝuÝ+Ù-Ù(>ÍO 0ßÍu ·áÍO 8Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍŠ¶wÝéÝáÑ}“8÷�Ãu·íR·íB0 É>‘î·íRëê@ðøÉÕë·íRëáë·íR!È+Éͨ õÍz ð·íR!À+Éͨ õÍz ðÍ<!Ð+Éͨ õÍz ðÍ<!ÈØ+Éͨ ôÍz ïÍ<!ÈØ#Éͨ ôÍz ïÍ<!Ø+Éͨ õÍz ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍJëÍJëDM¯go>íjíB0 7?ËË= ðõÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.ÃÉÍ«Copyright (C) 1984 BORLAND Inc‚AKayproDelete2/920/92P= ERT###&&&~·7È#õå~Íáñ=ÈóÍ% ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€Ü�Ô©æîÅÕåÝåýåÍ£}Ùå!å!"8áãõÅÕ~#·(åÍáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨ÍZ!¢ÍÐ*ºÔBáÑÁñÉõÅÕå!´éõÅÕå!®àõ:¼·(ÅÕå=2¼!ÈÍZáÑÁñÉõ:¼· ÷ÅÕå<2¼!ÂåõÅÕå!¼ÛõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÑ:ŸO:�ƒÍ!ðÍÐ* ÍBáÑÁñÉÍ� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂu  (ÍC Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%ÍP Ë%ÍP ëãÑãíZëáãíJDMáË%ÍP = ÈñÁýáÉýåá_~6þ5Øúi+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|ÍC ÍC „gãíZëáãíJDMá0ÍD ,7È}Æo˸ÉÍ ¾ #øyîO!@9ùi&ÝéÍ  ë¶¾ â#÷ÚÍ ¶w#ùëùÝéÍ /¦w#øï*â###w* N#Fë·íB ÈÕåÍŸÑár+sÉ>‘à ÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍU·íR!À#ÉÍUëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æÊóx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>à ÁÑíSâÅåÍRÑ·íRÚ*â s#r$ s#rÉ"äíSæëá"â! N#Fë·íB(^x± *â 6#ûí[âÍ<(H*â! íKäq#p##ëíKæÅÕÍí[â!Í· *â! 4 #4Ñ!€ëÁ x± Õ*â$ éÝ*â>ðÃw"òëáã"ô{æü_!í"ëÝ*íÝnÝf}´(HíR0ÝnÝfåÝ"ëÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝp ÌáñJ= ÍB== ͯ}8= ͵}/Í­ !*â###å~Æ-_~áþ(4òQ6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍÌÍ[þ ( þ (þ (þ ÍÖè!]Í[þ (þ (þ (þ(w#(ÍÖãÍÂÌÖ6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7à ëÍ Í[ÃÖÍÖÉ>¯OÅÍkÁͼÈÅåÍÁÑÁÍÎØÌMës #rëÉÍkͼÈÅåÍpÙáÁÍÎØÙÌX ÙáåÍÌÍ[þ ÍÖôÍ[þ (þ( #w(ÍÖêÍÂÌÖáqÉ*â#~þÊáÍ[þ (þÈÍÖñÍ ÍÖþ ÀÃÖ*â##~þÈ6ÉÅÕåÍœáÑÁÉOÍ$*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í¡È>ðà *æ:è¾È4^qÉ}Ã’ÁÑÅÝ*ÛË|(RÍ�Press any key to ExitÍb!¸ ÍBÍc!å!wÕåÍ` *wÕ&·íRÂX!Í Sunday !iÕͲÃ!"·íRÂz!Í Monday !iÕͲÃ!"·íRœ!Í Tuesday !iÕͲÃ!"·íR¾!Í Wednesday !iÕͲÃ!"·íRÂà!Í Thursday !iÕͲÃ!"·íRÂ"Í Friday !iÕͲÃ!"·íRÂ!"Í Saturday !iÕͲ!#å! Í!iÕÍ ÍR!ÍqÍb!å!xÕåÍ` *xÕ&·íRÂn"Í January !_ÕͲÃá#·íRÂ�"Í February !_ÕͲÃá#·íR²"Í March !_ÕͲÃá#·íRÂÔ"Í April !_ÕͲÃá#·íRÂö"Í May !_ÕͲÃá#·íRÂ#Í ¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍŠ¦!"9ù!(#Ýé>¯2æýá*ÛͲ¯á"âýå|·>"Ê :æ·( ͆ *â6#wÉÍ÷*â6#6 ë!\$í°É!¶Ååí[Ûþ (úÍ„–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍîÍ$*â#~þ ͶÍ$*â:æ·> >w###6ÀÃÖþ þ #6++pÉ>¯2æíSäÍ-Í$Ͷ:Ù·À*â6###ww#w$w#wÖÿ:æ· åÍôá##N#F*ä·íBÈ>�à å¯w#w#í[äs#ráÃó>¯2æÍSÍ$ͶÍ$*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍß*â ë:æ·( ÕÍÑñÅÍÁ<Àxà *â6#ûÉ"â#~+þ 2ËN(>Í’ÝåÑ*ës#rÑ*ôs#rÉÝåá"Í*ò ÝåÁ Ú5íKÏíB!Úð>ÿÃuëáã~#fo{æü_ë"ò*íåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKòýqýpýuýtÝsÝrÝåáÝNÝFÍÄ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ííSíÕÝáÝuÝtíKòÝqÝpë ·íRÀÕýá*Í·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Í6#ûÉÍ *öÉÍ *øÉ!"ö"øÝ*íÝNÝFy°(*ö "ö*ø·íB0íCøÝnÝfåÝáØ*Ïûÿ í[Í·íRØë*ö"ö*ø·íRÐíSøÉí[Ís#rÉ^#VíSÍÉ>¯O"æ¯w2Ùx2è!ê"âá"äá ÍöÍ@*äé>¯2ê"æ!ê"âá"äá"è!\Ͳ¯*è:ê· ÍîÍ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±ÍMëëË|( ÍMÝ6-Ý#ÕÍ�áͦí[ÛÝåá·íRë“8 (G> Í’ùCÈ~Í’#÷ÁÑÙáÑÁÙÅÝ*ÛÕÍôÇÁÑÅͦËC!h Ç!lÀTRUEFALSEͦ!9^#Í(ÑùÕÉá~#·(G~Í’#ùé> Í’> Ã’ "âËF!ÈÍ[¸(þÀ#ÉåÍRë·íRá0Íô*â4À#4É>™Ã åÍR·íR *â4 #4(áÍóÒ>òÜ>¯2çÍ$ë*âËV(/Ë–:ç·(#~+· x· y·ú2ÅÕ!͵ÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍŒí âX<òN=<ÍŒ*â###æw ÅÕåÍŸáÑÁ Õ*Ñ4 #4x±ÂüëÉ>™>ðà õ:ç·(ëñÉ"âÍŸÈè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍRÑ·íR8A*â N#F#s#rÍ$ 0}æ)ëíjëS\Í June !_ÕͲÃá#·íRÂ:#Í July !_ÕͲÃá#·íRÂ\#Í August !_ÕͲÃá# ·íRÂ~#Í September !_ÕͲÃá# ·íR #Í October !_ÕͲÃá# ·íRÂÂ#Í November !_ÕͲÃá# ·íRÂá#Í December !_ÕͲ!å!wÕåÍ` !"å! Í!_ÕÍ ÍR!Íq! Íò*wÕ&å!ÍöÍb!$å!Í*xÕ&ÍRå!Íö!/Íò*wÕ&å!ÍöÍ�/85Íb!å!vÕåÍ` !å!ÑÍ5z³Ê-%Õ}2{Õ!å!uÕåÍ` !å!ÑÍ5z³Ê"%Õ}2zÕ!å!tÕåÍ` !å!ÑÍ5z³Ê%Õ}2yÕ!å!sÕåÍ` !#å!Í*vÕ&ÍRå!Íö!:Íò*uÕ&å!Íö!:Íò*tÕ&å!Íö!.Íò*sÕ:Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍŸ*â-¯w#wÕÿw#ÍóÍŸÀ"â~æÈ·ÍÀ ëÍ<À@ýá*ÛͲ¯áýåÍÀåÍ÷áåë!\ í°á åëÍÑ<Ê®!\$í°É>à >¯2æÍÀ*ß|µ>! ë*â \$í°\Í<(Ï!ý€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍÂÈ> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍ<áÉÝáÝå"âËF( #~þÀ#6Ãe>Îå!ÊÍ[áÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍwþ (=þ(&þ("þ(þ :á·(ßÃNþ 8Øyº(Ô~#ÍèÌúx+Í% (½ï6Éå*â#~þáÉÍÂÈÍ[þÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íõþ 8Íèþ(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%ÃÆ}Í„oÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍ%^C User break1:Ù·ÈÝáõÍ% I/OÝáÍ% Run-timeÍ% error Í’Í%, PC=Ýåáí[Õ·íR"×Í�Í% Program aborted*ßé1!€Õ¸ÿÍ�!O*@ÕͲÃ!)ýáá}2\Õá}2]Õýå!"å!Áíi*\Õ&å! ÍÑÙáÍÑÍÉ Í§"VÕ*\Õ&å! å*VÕÑÍÄÑë·íR"TÕ!å*VÕÑÍÄå*TÕÑ}2\Õ! å*]Õ&Áíi!$å*\Õ&ÁíiÉýáá"QÕá}2SÕýå!"å!Áíi! å*SÕ&Áíi!$Míhë*QÕs*QÕn&å!ÍÑÙáÍÑÍÉ Í§"KÕ*QÕn&å!å*KÕÑÍÄÑë·íR"IÕ! å*KÕÑÍÄå*IÕÑë*QÕsÉÍcÍR!Íò!CÍò!4ÍòÍb!å! ÍÍ  &å!ÍöÍb*yÕ&#ÑÃ¥$*zÕ&#ÑÃ…$*{Õ&#ÑÃe$Í ËEÊO$ÍR!Íò!BÍò!4ÍòÍbÉÍc!å!ÍÍRÍ�Set Clock ProcedureÍb!å!ÍÍRÍ�Please answer the following:Íb!å!ÍÍRÍ�"Month : 1 = JanuaryÍb!.å!ÍÍR!:ÍòÍb!-å!ÍÍRÍ� 12 = DecemberÍb!å!Í!@ÕÍ+ÍíÍb*@Õ&åÍQ!å! ÍkÍËEÊ&!å*@Õ&åÍç!å! ÍÍRÍ�Day of Month : 1 . . 31Í�Íb!&å! Í!@ÕÍ+ÍíÍb*@Õ&åÍQ!å!ÍkÍËEʉ&!å*@Õ&åÍç!å! ÍÍRÍ�!Day of Week : 1 = SundayÍb!.åes that can be used with the clock procedures in CLOCK84.BOX } Var I,J,K, NMonth,NDay, Hour,Minute, Second,Hundreth : byte; ADay,AMonth : string[9]; Selection : char; {$I clock84.box} Procedure ReadtheClock; Begin ClrScr; Write(Chr(27),chr(67),chr(52)); GotoXY(29,10); Write('Press any key to Exit'); Delay(3000);  ',NDay:2); GotoXY(36,16); Write(NMonth:2,'/',NDay:2,'/85'); Repeat ReadClock(4,Hour); For I := 1 to 5 do Begin ReadClock(3,Minute); For J := 1 to 4 do Begin ReadClock(2,Second); For K := 1 to 6 do Begin ReadClock(1,Hundreth); GotoXY(35,20); ! ÍÍR!:ÍòÍb!.å!ÍÍRÍ� 7 = SaturdayÍb!%å! Í!@ÕÍ+ÍíÍb*@Õ&åÍQ!å!ÍkÍËEÊ2'!å*@Õ&åÍç!å!ÍÍRÍ�Hour : 0 . . 23Í�Íb!å!Í!@ÕÍ+ÍíÍb*@Õ&åÍQ!å!ÍkÍËEʦ'!å*@Õ&åÍç!å!ÍÍRÍ�Please enter the next minuteÍb!å!ÍÍRÍ�and when the second handÍb!å!ÍÍRÍ� reaches 12Íb!å!ÍÍRÍ�!Next Minute : 0 . . 59Íb!%å!Í!@ÕÍ+ÍíÍb*@Õ&åÍQ!å!;ÍkÍËEʘ(! å!Áíi!$å!Áíi! å!Áíi!$å!Áíi!å*@Õ&åÍçÍc ClrScr; ReadClock(5,NDay); Case NDay of 1 : ADay := ' Sunday'; 2 : ADay := ' Monday'; 3 : ADay := ' Tuesday'; 4 : ADay := 'Wednesday'; 5 : ADay := ' Thursday'; 6 : ADay := ' Friday'; 7 : ADay := ' Saturday'; End; GotoXY(35,10); Write(ADay); ReadClock(7,NMonth); Case NMonth of 1 : AMonth := ' January'; 2 : AMonth : { * * * * * * * * * * * * * * * * * * * * * * * * * * * * Clock Demonstration * * * * Jack E. Heiss * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This program is a demonstration of some of the programming techniqu Write(Hour:2,':',Minute:2,':',Second:2,'.',Hundreth:2); End; End; End; until KeyPressed; Write(Chr(27),chr(66),chr(52)); End; Procedure SettheClock; Var Time : byte ; Begin ClrScr; GotoXY(26,2); Write('Set Clock Procedure'); GotoXY(26,4); Write('Please answer the following:'); GotoXY(23,6); Write('Month : ÍRÍ� Clock SetÍ�ÍbÍRÍ�ÍbÉÍc!å! ÍÍRÍ�Do you wish toÍb!å! ÍÍRÍ� 1. Read the ClockÍb!å! ÍÍRÍ� 2. Set the ClockÍb!å! ÍÍRÍ� 3. Return to CP/MÍb!å!ÍÍRÍ� Please Select : Íb!¾Í8!^ÕÍÛÍb*^Õ&åÍQ!1Ía!2Ía!3ÍaÍËEÊä)*^Õ&1·íRÂ**ÍÚ Ã7*2·íRÂ7*ÍN%*^Õ&å!3ÑÍNËEÊ!)ÍcÃÅ Please Select : Íb!¾Í8!^ÕÍÛÍb*^Õ&åÍQ!1Í= ' February'; 3 : AMonth := ' March'; 4 : AMonth := ' April'; 5 : AMonth := ' May'; 6 : AMonth := ' June'; 7 : AMonth := ' July'; 8 : AMonth := ' August'; 9 : AMonth := 'September'; 10 : AMonth := ' October'; 11 : AMonth := ' November'; 12 : AMonth := ' December'; End; ReadClock(6,NDay); Gotoxy(34,12); Write(AMonth,'   1 = January'); GotoXY(46,7); Write(':'); GotoXY(45,8); Write('12 = December'); Repeat GotoXY(31,6); Read(Time); until Time in [1..12]; SetClock(7,Time); GotoXY(23,10); Writeln('Day of Month : 1 . . 31'); Repeat GotoXY(38,10); Read(Time); until Time in [1..31]; SetClock(6,Time); GotoXY(23,12); Write('Day o Writeln; End; {MAIN PROGRAM} Begin Repeat ClrScr; GotoXY(30,10); Write('Do you wish to'); GotoXY(30,11); Write(' 1. Read the Clock'); GotoXY(30,12); Write(' 2. Set the Clock'); GotoXY(30,13); Write(' 3. Return to CP/M'); GotoXY(30,15); Write(' Please Select : '); Repeat Read(Kbd,Selection); until Selection in ['1','2','3']; Case Selection of '1' : ReadtheClock; '2' : Se * * Procedure for Setting * * the Clock * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Procedure SetClock(parameter1,parameter2) - A call to SetClock will set the Kaypro's internal clock. The time attribute is sent as parameter1. Parameter1 must be of type compatible with byte af Week : 1 = Sunday'); GotoXY(46,13); Write(':'); GotoXY(46,14); Write('7 = Saturday'); Repeat GotoXY(37,12); Read(Time); until Time in [1..7]; SetClock(5,Time); GotoXY(23,16); Writeln('Hour : 0 . . 23'); Repeat GotoXY(30,16); Read(Time); until Time in [0..23]; SetClock(4,Time); GotoXY(23,18); Write( { * * * * * * * * * * * * * * * * * * * * * * * * * * * * Procedures * * for the * * Real Time Clock * * in * * TurboPASCAL * * for the * * ttheClock; End; until Selection = '3'; ClrScr; End.nd in the set [1..7] in accordance with the following table: 7 = Month 6 = Day of Month 5 = Day of Week 4 = Hour 3 = Minute 2 = Second 1 = Hundreth The current time is passed as parameter2. Parameter2 must be of type byte and in the proper set of values for the given attribute. No variables need b'Please enter the next minute'); GotoXY(23,19); Write('and when the second hand'); GotoXY(23,20); Write('reaches 12'); GotoXY(23,22); Write('Next Minute : 0 . . 59'); Repeat GotoXY(37,22); Read(Time) until Time in [0..59]; Port[32] := 1; Port[36] := 0; Port[32] := 2; Port[36] := 0; SetClock(3,Time); ClrScr; Writeln('Clock Set');  KAYPRO Universal Board * * * * Jack E. Heiss * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Procedures available in this Include file: SetClock(parameter1,parameter2); ReadClock(parameter,variable); * * * * * * * * * * * * * * * * * * * * * * * * * * *   e declared in the calling program. Acceptable values for parameter are as follows: Parameter 1 Parameter 2 7 (Month) 1..12 where 1 = January : 12 = December 6 (Day of Month) 1..31 5 (Day of Week) 1..7 where 1 =  accordance with the following table: Time Attribute Value Ranges (parameter) (variable) 7 = Month 1 = January : : 12 = December 6 = Day of Month 1..31 5 = Day of Week 1 = Sunday : : * * * * * * * * * * Procedure ReadClock(parameter,variable) - A call to ReadClock(parameter,variable) will return the byte value of the clocks content. The value is returned as the variable named in the passed parameter. The variable must be declared in the calling program as a byte. The parameter tells the procedure which component of time to read. The parameter in the procedure call must be byte compatible and in accord with the following attribute table { * * * * * * * * * * * * * * * * * * * * * * * * * * * * Simple Screen Graphics * * Procedures * * in * * TurboPASCAL * * for the * * KAYPRO Universal Board * * Sunday : 7 = Saturday 4 (Hour) 0..23 3 (Minute) 0..59 2 (Second) 0..59 1 (Hundreth) 0..99 } Procedure SetClock(Attribute,TimeValue :byte); Var DecHex,UnitHex : integer; Begin Port[34] := 15; DecHex := Trunc(TimeValue / 10); UnitH 7 = Saturday 4 = Hour 0..23 3 = Minute 0..59 2 = Seconds 0..59 1 = Hundreths 0..99 } Procedure ReadClock(Attribute : byte; var Clockvalue : byte); Var DecHex,UnitHex : integer; Begin Port[34] := 15; Port[32] := Attribute; ClockValue := Port[36]; : Month = 7 Day of Month = 6 Day of Week = 5 Hour = 4 Minute = 3 Second = 2 Hundreth = 1 ReadClock(parameter,variable) is the most primitve but fastest of the calls and is the procedure of choice for timing activities. Clock output in the passed variable name is an byte in * * Jack E. Heiss * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Procedures available in this Include file: DrawLine( Xparameter1,Yparameter1, Xparameter2,Yparameter2); EraseLine( Xparameter1,Yparameter1, Xparameter2,Yparameter2); DrawPoint( Xparameter,Yparameter); ex := TimeValue - 10 * DecHex; TimeValue := 16 * DecHex + UnitHex; Port[32] := Attribute; Port[36] := TimeValue; End; { * * * * * * * * * * * * * * * * * * * * * * * * * * * * Procedure for Reading * * the Clock * * * * * * * * * * * * * * * * * * *  DecHex := Trunc(ClockValue / 16); UnitHex := ClockValue - 16 * DecHex; ClockValue := 10 * DecHex + UnitHex End; {End of Clock84.box}    ErasePoint(Xparameter,Yparameter); The passed parameters passed to these procedures are of type real. The acceptable ranges for the parameters are: X parameters 0..159.99 Y parameters 0...99.99 The origin of the screen coordinates are in the lower left hand corner. 99.99 | | | | Y-axis | | | |  h1 := xb1 + 32; h2 := xb2 + 32; v1 := 131 - yb1; v2 := 131 - yb2; Write(chr(27),chr(68),chr(v1),chr(h1),chr(v2),chr(h2)); End; {Procedure DrawPoint - turns on the pixel at coordinates x,y.} Procedure DrawPoint(x,y : real); Var v,h, xb,yb : byte; Begin xb := trunc(x); yb := trunc(y); h := xb + 32; v := 131 - yb; Write(chr(27),chr(42),chr(v),chr(h)); End; {Procedure ErasePoint - erases the pixel at coord ErasePoint(Xparameter,Yparameter); The passed parameters passed to these procedures are of type real. The acceptable ranges for the parameters are: X parameters 0..159.99 Y parameters 0...99.99 The origin of the screen coordinates are in the lower left hand corner. 99.99 | | | | Y-axis | | | |  | 0.00 |_______________________________________ 0.00 159.99 X-axis } {Procedure Drawline - draws a line from coordinates x1,y1 to coordinates x2,y2.} Procedure DrawLine(x1,y1,x2,y2 : real); Var v1,h1,v2,h2, xb1,yb1,xb2,yb2 : byte; Begin xb1 := trunc(x1); yb1 := trunc(y1); xb2 := trunc(x { * * * * * * * * * * * * * * * * * * * * * * * * * * * * Simple Screen Graphics * * Procedures * * in * * TurboPASCAL * * for the * * KAYPRO Universal Board * * inates x,y.} Procedure ErasePoint(x,y : real); Var v,h, xb,yb : byte; Begin xb := trunc(x); yb := trunc(y); h := xb + 32; v := 131 - yb; Write(chr(27),chr(32),chr(v),chr(h)); End; {End of Grafix84.box} | 0.00 |_______________________________________ 0.00 159.99 X-axis } var color: integer; PROCEDURE BEIDE; BEGIN PORT[131]:=253; END; PROCEDURE HIRES; BEGIN PORT[131]:=255; END; PROCEDURE TEXTMODE; BEGIN PORT[131]:=252; END; PROCEDURE CLSH; BEGIN INLINE 2); yb2 := trunc(y2); h1 := xb1 + 32; h2 := xb2 + 32; v1 := 131 - yb1; v2 := 131 - yb2; Write(chr(27),chr(76),chr(v1),chr(h1),chr(v2),chr(h2)); End; {Procedure EraseLine - erases a line or any pixel on the line from coordinates x1,y1 to coordinates x2,y2.} Procedure EraseLine(x1,y1,x2,y2 : real); Var v1,h1,v2,h2, xb1,yb1,xb2,yb2 : byte; Begin xb1 := trunc(x1); yb1 := trunc(y1); xb2 := trunc(x2); yb2 := trunc(y2);  * * Jack E. Heiss * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Procedures available in this Include file: DrawLine( Xparameter1,Yparameter1, Xparameter2,Yparameter2); EraseLine( Xparameter1,Yparameter1, Xparameter2,Yparameter2); DrawPoint( Xparameter,Yparameter);   ($3E/$75/$D3/$83/$0E/$00/$79/$D3/$80/$AF/$D3/$81/$06/$F0/$D3/$82/$10/ $FC/$0C/$79/$FE/$50/$20/$EE); END; PROCEDURE DRAW(x1,y1,x2,y2:integer); var y_1,y_2 : integer; BEGIN y_1:=239-y1; y_2:=239-y2; INLINE ( $2A/x2/$ED/$5B/x1/$CD/*+$00BF/$22/*+$010A/$ED/$43/*+$010A/$7C/$B5/$2A/y_2/$ED/ $5B/y_1/$CD/*+$00AC/$22/*+$00F9/$ED/$43/*+$00F9/$B4/$B5/$CA/*+$0103/$AF/$32/ *+$00F6/$2A/*+$00E7/$ED/$5B/*+$00E5/$ED/$52/$30/$0A/$2A/*+$00DE/$3E/$01/$32/ *+$00E3/$18/$03/$2A/*+$00D2/$22/*+$00D7/$CB/ color:=1; a:=trunc(x*4); b:=trunc(y*2.4); plot(a,b); end; {Procedure ErasePoint - erases the pixel at coordinates x,y.} Procedure ErasePoint(x,y : real); var a,b : integer; Begin color:=0; a:=trunc(x*4); b:=trunc(y*2.4); plot(a,b); end; {End of Grafix84.box}1,b1,a2,b2 : integer; Begin color:=1; a1:=trunc(x1*4);b1:=trunc(y1*2.4);a2:=trunc(x2*4);b2:=trunc(y2*2.4); draw(a1,b1,a2,b2); End; {Procedure EraseLine - erases a line or any pixel on the line from coordinates x1,y1 to coordinates x2,y2.} Procedure EraseLine(x1,y1,x2,y2 : real); var a1,b1,a2,b2 : integer; Begin color:=0; a1:=trunc(x1*4);b1:=trunc(y1*2.4);a2:=trunc(x2*4);b2:=trunc(y2*2.4); draw(a1,b1,a2,b2); End; PROCEDURE PLOT(X,Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍŠ¶wÝéÝáÑ}“8÷�Ãu·íR·íB0 É>‘î·íRëê@ðøÉÕë·íRëáë·íR!È+Éͨ õÍz ð·íR!À+Éͨ õÍz ðÍ<!Ð+Éͨ õÍz ðÍ<!ÈØ+Éͨ ôÍz ïÍ<!ÈØ#Éͨ ôÍz ïÍ<!Ø+Éͨ õÍz ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍJëÍJëDM¯go>íjíB0 7?ËË= ð$3C/$CB/$1D/$22/*+$00D2/$CD/*+$0087 /$ED/$4B/*+$00C9/$03/$0B/$78/$B1/$CA/*+$00CF/$C5/$2A/*+$00C0/$3A/*+$00BF/$B7 /$28/$30/$ED/$5B/*+$00AC/$19/$22/*+$00B2/$B7/$ED/$5B/*+$00A5/$ED/$52/$38/$0E /$22/*+$00A6/$2A/x1/$ED/$5B/*+$0099/$19/$22/x1/$3A/y_1/$ED/$5B/*+$0090/$83 /$32/y_1/$CD/*+$0045/$C1/$18/$C0/$ED/$5B/*+$007E/$19/$22/*+$0082/$B7/$ED/$5B/ *+$0073/$ED/$52/$38/$0E/$22/*+$0076/$3A/y_1/$ED/$5B/*+$006B/$83/$32/y_1/$2A/x1/ $ED/$5B/*+$005E/$19/$22/x1/$CD/*+$0015/$C1/$18/$90/$B7/$01/$01/$00/$ED/$52 /$F0/$1ÃÉÍ«Copyright (C) 1984 BORLAND Inc‚AKayproDelete2/920/92P= ERT###&&&~·7È#õå~Íáñ=ÈóÍ% ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€Ü�Ô©æîÅÕåÝåýåÍ£}Ùå!å!"8áãõÅÕ~#·(åÍáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨ÍZ!¢ÍÐ*ºÔBáÑÁñÉõÅÕå!´éõÅÕå!®àõ:¼·(ÅÕå=2¼!ÈÍZáÑÁñÉõ:¼· ÷ÅÕå<2¼!ÂåõÅÕå!¼ÛõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÑ:ŸO:�ƒÍ!ðÍÐ* ÍBáÑÁñÉY:INTEGER); var y_: integer; BEGIN y_:=239-y; INLINE ( $3A/Y_/$D3/$81/$2A/X/$7D/$E6/$07/$4F/$06/$00/$CB/$3C /$CB/$1D/$CB/$3C/$CB/$1D/$CB/$3D/$7D/$D3/$80/$21/*+$0024/$09 /$3A/COLOR/$47/$DB/$82/$04/$10/$07/$2F/$B6/$2F/$D3/$82/$18/$19 /$10/$03/$B6/$18/$F7/$10/$03/$AE/$18/$F2/$96/$20/$0C/$AF/$32/COLOR /$80/$40/$20/$10/$08/$04/$02/$01/$00) END; {Procedure DrawPoint - turns on the pixel at coordinates x,y.} Procedure DrawPoint(x,y : real); var a,b : integer; Begin ëñðHåÍ\Ë<ËÑëÍÞëËzÈ5Í+È)ýÉÍ+ÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úHºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ͬèͬdͬ ͬ} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~Í„Ö08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>ÃwÝáͦWáͧ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯Ã28!?"9!É í°!á¸í°áí°>2گà Ã:ÃDÃ]ÃSÃXÃNÃ]ÃDÿ í[Ûþ (ú!eÍ}Í„þA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍyÍVþ. ÍV!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(Í„w#ßÉ>?> w#üÉþaØþ{ÐÖ É|Í’}õÍ›ñæÆ�'Î@'Ãè¯7Ë|À|·}È>ÿÉ"ÍíCß"í6#ûëÑùü "Ïë"ÕÍ�Í©éå*Ï·íB"Ïí[Í·íRëáÚ5í°É*Ïí°"ÏÙÉ^#V#  xñW^‘8/ÃwÍÖ Ð>ÃuÍJ õÍuÍ` íÙ}·Ù>(è; àÙËxÙÂQ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍC ,= ù(Ùñæ€ Í[ 0%ÍD ·, 7 Í� ?õ(8ÙÍu Ëx ÍO - öÍ; ñ8˸·ÙáÑÁÙÉÙËxÙÂÝ ÍX ÍÝ Ø,-Èxî€GÉÙ}·ÙÊ; }·ÈÙ…ÙÍ ÅÕåÝ9Í; Ù.Ù>Ý#ÝnË0Í[ ÍD = ñÙ-Ù åÝnûËx ÍP ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ì; É}·ÈÙ•Ù?Í åååÝ9Ù.Ù>Í� 8Íu ?Ë= ÝuÝ+Ù-Ù(>ÍO 0ßÍu ·áÍO 8Í ¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍŠ¦!"9ù!(#Ýé>¯2æýá*ÛͲ¯á"âýå|·>"Ê :æ·( ͆ *â6#wÉÍ÷*â6#6 ë!\$í°É!¶Ååí[Ûþ (úÍ„–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍîÍ$*â#~þ ͶÍ$*â:æ·> >w###6ÀÃÖþ þ #6++pÉ>¯2æíSäÍ-Í$Ͷ:Ù·À*â6###ww#w$w#wÖÿ:æ· åÍôá##N#F*ä·íBÈ>�à å¯w#w#í[äs#ráÃó>¯2æÍSÍ$ͶÍ$*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍß*â ë:æ·( ÕÍÑñÅÍÁ<Àxà *â6#ûÉ"â#~+þ 2ËN(>Í’õÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.ÍMëëË|( ÍMÝ6-Ý#ÕÍ�áͦí[ÛÝåá·íRë“8 (G> Í’ùCÈ~Í’#÷ÁÑÙáÑÁÙÅÝ*ÛÕÍôÇÁÑÅͦËC!h Ç!lÀTRUEFALSEͦ!9^#Í(ÑùÕÉá~#·(G~Í’#ùé> Í’> Ã’ "âËF!ÈÍ[¸(þÀ#ÉåÍRë·íRá0Íô*â4À#4É>™Ã åÍR·íR *â4 #4(áÍóÒ>òÜ>¯2çÍ$ë*âËV(/Ë–:ç·(#~+· x· y·ú2ÅÕ!͵ÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍŒí âX<òN=<ÍŒ*â###æw ÅÕåÍŸáÑÁ Õ*Ñ4 #4x±ÂüëÉ>™>ðà õ:ç·(ëñÉ"âÍŸÈè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍRÑ·íR8A*â N#F#s#rÍ$ 0}æ)ëíjëS\Í� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂu:Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍŸ*â-¯w#wÕÿw#ÍóÍŸÀ"â~æÈ·ÍÀ ëÍ<À@ýá*ÛͲ¯áýåÍÀåÍ÷áåë!\ í°á åëÍÑ<Ê®!\$í°É>à >¯2æÍÀ*ß|µ>! ë*â \$í°\Í<(Ï!ý€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍÂÈ> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍ<áÉÝáÝå"âËF( #~þÀ#6Ãe>Îå!ÊÍ[áÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍwþ (=þ(&þ("þ(þ :á·(ßÃNþ 8Øyº(Ô~#ÍèÌúx+Í% (½ï6Éå*â#~þáÉÍÂÈÍ[þÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íõþ 8Íèþ(ÍC Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%ÍP Ë%ÍP ëãÑãíZëáãíJDMáË%ÍP = ÈñÁýáÉýåá_~6þ5Øúi+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|ÍC ÍC „gãíZëáãíJDMá0ÍD ,7È}Æo˸ÉÍ ¾ #øyîO!@9ùi&ÝéÍ  ë¶¾ â#÷ÚÍ ¶w#ùëùÝéÍ /¦w#øï*â###w* N#Fë·íB ÈÕåÍŸÑár+sÉ>‘à ÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍU·íR!À#ÉÍUëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æÊóx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>à ÁÑíSâÅåÍRÑ·íRÚ*â s#r$ s#rÉ"äíSæëá"â! N#Fë·íB(^x± *â 6#ûí[âÍ<(H*â! íKäq#p##ëíKæÅÕÍí[â!Í· *â! 4 #4Ñ!€ëÁ x± Õ*â$ éÝ*â>ðÃw"òëáã"ô{æü_!í"ëÝ*íÝnÝf}´(HíR0ÝnÝfåÝ"ëÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝpÙÍaÙ}.�•õ; ÙÍOÙÍJ ÅÕåÙ,ÍÖ ÙáÑÁ; ÝåÝ!U >ÍýÝá,ÙÍk-ÙÍÖ ñÅÕåo&0%ÍÑÙ,Í` ÙáÑÁÍÖ }þgÚ; É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍkÙ·Ëxõ˸; }þˆ0GÅÕå,Í™åË<Ë}áõÍÑ,-(-ÙñáÑÁõÍJ ÝåÝ!Ù >ÍÝáñ0 õÙÍaÙÍ` ñ…o8 ñÈÙÍOþ á>Ãum.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍOÙ¯Ëx(<˸õͨ 8Ù; ñËÿõÙÏŽé!~JÙͨ 0Í÷OÝ!—>ÙÝÍ<Ùͨ 8 = ìÙ ÝÙÙÍ7ËøÍÖ ÅÕåÍ<Í` ÙÍOÍÖ ÙáÑÁ; ÝåÍ÷ÝáÙÍ7ÍÖ ñ0 õÙÍW-ÍJ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!Ó>ÅÕå ÌáñJ= ÍB== ͯ}8= ͵}/Í­ !*â###å~Æ-_~áþ(4òQ6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍÌÍ[þ ( þ (þ (þ ÍÖè!]Í[þ (þ (þ (þ(w#(ÍÖãÍÂÌÖ6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7à ëÍ Í[ÃÖÍÖÉ>¯OÅÍkÁͼÈÅåÍÁÑÁÍÎØÌMës #rëÉÍkͼÈÅåÍpÙáÁÍÎØÙÌX ÙáåÍÌÍ[þ ÍÖôÍ[þ (þ( #w(ÍÖêÍÂÌÖáqÉ*â#~þÊáÍ[þ (þÈÍÖñÍ ÍÖþ ÀÃÖ*â##~þÈ6ÉÅÕåÍœáÑÁÉOÍ$*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í¡È>ðà *æ:è¾È4^qÉ}Ã’ÁÑÅÝ*ÛË|(  ÝåÑ*ës#rÑ*ôs#rÉÝåá"Í*ò ÝåÁ Ú5íKÏíB!Úð>ÿÃuëáã~#fo{æü_ë"ò*íåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKòýqýpýuýtÝsÝrÝåáÝNÝFÍÄ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ííSíÕÝáÝuÝtíKòÝqÝpë ·íRÀÕýá*Í·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Í6#ûÉÍ *öÉÍ *øÉ!"ö"øÝ*íÝNÝFy°(*ö "ö*ø·íB0íCøÝnÝfåÝáØ*Ïûÿ í[Í·íRØë*ö"ö*ø·íRÐíSøÉí[Ís#rÉ^#VíSÍÉ>¯O"æ¯w2Ùx2è!ê"âá"äá ÍöÍ@*äé>¯2ê"æ!ê"âá"äá"è!\Ͳ¯*è:ê· ÍîÍ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±Ên'!^ÕÍüÅÕå!ÍÑÙáÑÁͳ Ù!dÕÍ¡!jÕÍüÅÕå!XÕÍüÅÕå!pÕÍüÅÕå!^ÕÍüÅÕåͽ !jÕÍüÅÕå!XÕÍüÅÕå!vÕÍüÅÕå!dÕÍüÅÕåÍè*WÕ&å! ÑÍNå!^ÕÍüÅÕå!ÍÑÙáÑÁÍjÑ}£oËEÊ(!^ÕÍüÅÕå!ÍÑÙáÑÁͼ Ù!dÕÍ¡!jÕÍüÅÕå!XÕÍüÅÕå!pÕÍüÅÕå!^ÕÍüÅÕåͽ !jÕÍüÅÕå!XÕÍüÅÕå!vÕÍüÅÕå!dÕÍüÅÕåÍè*WÕ&å!ÑÍNå!pÕÍüÅÕå!ÍÑÙáÑÁÍjÑ}£oËEÊž(!pÕÍüÅÕå!ÍÑÙáÑÁͼ Ù!vÕÍ¡!jÕÍüÅÕå!XÕÍüÅÕå!pÕÍüÅÕå!^ÕÍüÅÕåͽ !jÕÍüÅÕå!XÕÍüÅÕå!vÕÍüÅÕå!dÕÍüÅÕåÍè*WÕ&å! ÑÍNå!pÕÍüÅÕå!ŸÍÑÙáÑÁÍjÑ}£oËEÊ6)!pÕÍüÅÕå!ÍÑÙáÑÁͳ Ù!vÕÍ¡!jÕÍüÅÕå!XÕÍüÅÕå!pÕÍü aboutÍb!å! ÍÍRÍ�/the screen. The Vector Keys must be configuredÍb!å! ÍÍRÍ�-as they came with CP/M. The P key toggles theÍb!å!ÍÍRÍ�)pen up and down. to end. Have Fun!Íb!å!ÍÍRÍ�Any Key to StartÍb!¾Í8!WÕÍÛÍbÉÍcÍR!Íò!CÍò!å!ÍöÍbÍ~"Íc!ÍÑÙ!vÕÍ¡!ÍÑÙ!dÕÍ¡!vÕÍüÅÕå!dÕÍüÅÕåÍ’!!¾Í8!WÕÍÛÍb*WÕ&å!PÑÍNå*WÕ&å!pÑÍNÑ}³oËEʺ$*ç&ËEʳ$!}2ç!vÕÍüÙ!jÕÍ¡!dÕÍüÙ!XÕÍ¡ú$!}2ç*ç&ËEÊ®&!vÕÍüÙ!pÕÍ¡!dÕÍüÙ!^ÕÍ¡*WÕ&å! ÑÍNå!^ÕÍüÅÕå!cÍÑÙáÑÁÍ { * * * * * * * * * * * * * * * * * * * * * * * * * * * * Graphics Demonstration * * * * " RUBER LINE " * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This program demonstrates some of the programming techniques that c(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%ÃÆ}Í„oÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍ%^C User break1:Ù·ÈÝáõÍ% I/OÝáÍ% Run-timeÍ% error Í’Í%, PC=Ýåáí[Õ·íR"×Í�Í% Program aborted*ßé1!€Õ¸ÿÍ�!j)ãÔͲÃþ#ýááÑÁÙ!?ÕÍ¡áÑÁÙ!EÕÍ¡áÑÁÙ!KÕÍ¡áÑÁÙ!QÕÍ¡ýå!QÕÍüͧ}26Õ!KÕÍüͧ}25Õ!EÕÍüͧ}24Õ!?ÕÍüͧ}23Õ*6Õ&å! Ñ}29Õ*4Õ&å! Ñ}27Õ!ƒå*5Õ&Ñë·íR}2:Õ!ƒå*3Õ&Ñë·íR}28ÕÍR!Íò!LÍò*:Õ&Íò*9Õ&Íò*8Õ&Íò*7Õ&ÍòÍbÉýááÑÁÙ!ÕÍ¡áÑÁÙ!!ÕÍ¡áÑÁÙ!'ÕÍ¡áÑÁÙ!-ÕÍ¡ýå!-ÕÍüͧ}2Õ!'ÕÍüͧ}ÅÕå!^ÕÍüÅÕåͽ !jÕÍüÅÕå!XÕÍüÅÕå!vÕÍüÅÕå!dÕÍüÅÕåÍè*WÕ&å!ÑÍNËEÊR$ÍcÍR!Íò!BÍò!å!ÍöÍbÃÅÕÍüÅÕå!XÕÍüÅÕå!pÕÍüjÑ}£oËEÊR%!^ÕÍüÅÕå!ÍÑÙáÑÁͳ Ù!dÕÍ¡!pÕÍüÅÕå!^ÕÍüÅÕåÍ"!pÕÍüÅÕå!dÕÍüÅÕåÍ’!*WÕ&å! ÑÍNå!^ÕÍüÅÕå!ÍÑÙáÑÁÍjÑ}£oËEÊÆ%!^ÕÍüÅÕå!ÍÑÙáÑÁͼ Ù!dÕÍ¡!pÕÍüÅÕå!^ÕÍüÅÕåÍ"!pÕÍüÅÕå!dÕÍüÅÕåÍ’!*WÕ&å!ÑÍNå!pÕÍüÅÕå!ÍÑÙáÑÁÍjÑ}£oËEÊ:&!pÕÍüÅÕå!ÍÑÙáÑÁͼ Ù!vÕÍ¡!pÕÍüÅÕå!^ÕÍüÅÕåÍ"!vÕÍüÅÕå!^ÕÍüÅÕåÍ’!*WÕ&å! ÑÍNå!pÕÍüÅÕå!ŸÍÑÙáÑÁÍjÑ}£oËEÊ®&!pÕÍüÅÕå!ÍÑÙáÑÁͳ Ù!vÕÍ¡!pÕÍüÅÕå!^ÕÍüÅÕåÍ"!vÕÍüÅÕå!^ÕÍüÅÕåÍ’!*ç&}îoËEÊ6)!vÕÍüÙ!pÕÍ¡!dÕÍüÙ!^ÕÍ¡*WÕ&å! ÑÍNå!^ÕÍüÅÕå!cÍÑÙáÑÁÍjÑ}£oËEan be uses with GRAFIX84.BOX, its also kinda fun. The vector are meant to be used in their 'stock' config- uration, that is: Up = ^K Left = ^H Down = ^J Right = ^L You might use Config to make the following changes to the Numeric Pad: _________ _________ _________ _________ | | | | | | | | | | | | ^K |2Õ!!ÕÍüͧ}2Õ!ÕÍüͧ}2Õ*Õ&å! Ñ}2Õ*Õ&å! Ñ}2Õ!ƒå*Õ&Ñë·íR}2Õ!ƒå*Õ&Ñë·íR}2ÕÍR!Íò!DÍò*Õ&Íò*Õ&Íò*Õ&Íò*Õ&ÍòÍbÉýááÑÁÙ!ÕÍ¡áÑÁÙ! ÕÍ¡ýå! ÕÍüͧ}2üÔ!ÕÍüͧ}2ûÔ*üÔ&å! Ñ}2ýÔ!ƒå*ûÔ&Ñë·íR}2þÔÍR!Íò!*Íò*þÔ&Íò*ýÔ&ÍòÍbÉýááÑÁÙ!ïÔÍ¡áÑÁÙ!õÔÍ¡ýå!õÔÍüͧ}2èÔ!ïÔÍüͧ}2çÔ*èÔ&å! Ñ}2éÔ!ƒå*çÔ&Ñë·íR}2êÔÍR!Íò! Íò*êÔ&Íò*éÔ&ÍòÍbÉÍc!å!ÍÍRÍ�R U B B E R L I N EÍb!"å! ÍÍRÍ� InstructionsÍb!å! ÍÍRÍ�,Use the Vector Keys to move the Cursor   | | | | | | | |---------|---------|---------|---------| | | | | | | ^H | P | ^L | | | | | | | |---------|---------|---------|---------| | | | | | | | ^J | | | | | | | | |_________|__ ErasePoint(Xold,Yold); DrawPoint(Xnew,Yold); End; If (ConChar = ^L) and (Xold <> 159) then Begin Xnew := Xold + 1; ErasePoint(Xold,Yold); DrawPoint(Xnew,Yold); End; End; If not PenUp then Begin Xold := Xnew; Yold := Ynew; If (ConChar = ^K) and (Yold <> 99) then Begin Ynew := Yold + 1; EraseLine(Xnow,Ynow,Xold,Y Write('Any Key to Start'); Read(Kbd,ConChar); End; Begin ClrScr; Write(chr(27),'C',4); Intro; ClrScr; Xnew := 0; YNew := 0; DrawPoint(Xnew,Ynew); Repeat Read(Kbd,ConChar); If (Conchar = 'P') or (ConChar = 'p') then If PenUp then Begin PenUp := false; Xnow := Xnew; Ynow := Ynew; End else PenUp := true; If PenUp then Begin XoÃÉÍ«Copyright (C) 1984 BORLAND Inc‚AKayproDelete2/920/92P= ERT###&&&~·7È#õå~Íáñ=ÈóÍ% ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€Ü�Ô©æîÅÕåÝåýåÍ£}Ùå!å!"8áãõÅÕ~#·(åÍáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨ÍZ!¢ÍÐ*ºÔBáÑÁñÉõÅÕå!´éõÅÕå!®àõ:¼·(ÅÕå=2¼!ÈÍZáÑÁñÉõ:¼· ÷ÅÕå<2¼!ÂåõÅÕå!¼ÛõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÑ:ŸO:�ƒÍ!ðÍÐ* ÍBáÑÁñÉ_______|_________| | | | | | | | | | | | | | | | | | |___________________|_________|_________| } Const PenUp : boolean = true; Var Xnew,Xold,Xnow, Ynew,Yold,Ynow : real; ConChar : chold); DrawLine(Xnow,Ynow,Xnew,Ynew); End; If (ConChar = ^J) and (Yold <> 0) then Begin Ynew := Yold - 1; EraseLine(Xnow,Ynow,Xold,Yold); DrawLine(Xnow,Ynow,Xnew,Ynew); End; If (ConChar = ^H) and (Xold <> 0) then Begin Xnew := Xold - 1; EraseLine(Xnow,Ynow,Xold,Yold); DrawLine(Xnow,Ynow,Xnew,Ynew); End; If (ConChar = ^L) and (Xold := Xnew; Yold := Ynew; If (ConChar = ^K) and (Yold <> 99) then Begin Ynew := Yold + 1; ErasePoint(Xold,Yold); DrawPoint(Xold,Ynew); End; If (ConChar = ^J) and (Yold <> 0) then Begin Ynew := Yold - 1; ErasePoint(Xold,Yold); DrawPoint(Xold,Ynew); End; If (ConChar = ^H) and (Xold <> 0) then Begin Xnew := Xold - 1; !ð ë!›45(É!.+/ –0ü†õyþ0(ñíÉ d!kÃZ!{ÃZ͈æ͈o&Éô  áÁå:á·(yþ ÕÅÍ |µ(Íþ ÍþÊÅÁÑ*é"ÛÕx2áy·( >Ã28!?"9!É í°!á¸í°áí°>2گà Ã:ÃDÃ]ÃSÃXÃNÃ]ÃDÿ í[Ûþ (ú!eÍ}Í„þA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍyÍVþ. ÍV!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(Í„w#ßÉ>?> w#üÉþaØþ{ÐÖ É|Í’}õÍ›ñæÆ�'Î@'Ãè¯7Ë|À|·}È>ÿÉ"ÍíCß"í6#ûëÑùü "Ïë"ÕÍ�Í©éå*Ï·íB"Ïí[Í·íRëáÚ5í°É*Ïí°"ÏÙÉ^#V#ar; {$I grafix.box} Procedure Intro; Begin ClrScr; GotoXY(30,8); Write('R U B B E R L I N E'); GotoXY(34,10); Write('Instructions'); GotoXY(20,11); Write('Use the Vector Keys to move the Cursor about'); GotoXY(20,12); Write('the screen. The Vector Keys must be configured'); GotoXY(20,13); Write('as they came with CP/M. The P key toggles the'); GotoXY(20,14); Write('pen up and down. to end. Have Fun!'); GotoXY(31,16); ld <> 159) then Begin Xnew := Xold + 1; EraseLine(Xnow,Ynow,Xold,Yold); DrawLine(Xnow,Ynow,Xnew,Ynew); End; End; until ConChar = chr(27); ClrScr; Write(chr(27),'B',4); End. {End of GrfDemo.pas}  Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍŠ¶wÝéÝáÑ}“8÷�Ãu·íR·íB0 É>‘î·íRëê@ðøÉÕë·íRëáë·íR!È+Éͨ õÍz ð·íR!À+Éͨ õÍz ðÍ<!Ð+Éͨ õÍz ðÍ<!ÈØ+Éͨ ôÍz ïÍ<!ÈØ#Éͨ ôÍz ïÍ<!Ø+Éͨ õÍz ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍJëÍJëDM¯go>íjíB0 7?ËË= ðõÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.Í� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂu:Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍŸ*â-¯w#wÕÿw#ÍóÍŸÀ"â~æÈ·ÍÀ ëÍ<À@ýá*ÛͲ¯áýåÍÀåÍ÷áåë!\ í°á åëÍÑ<Ê®!\$í°É>à >¯2æÍÀ*ß|µ>! ë*â \$í°\Í<(Ï!ý€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍÂÈ> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍ<áÉÝáÝå"âËF( #~þÀ#6Ãe>Îå!ÊÍ[áÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍwþ (=þ(&þ("þ(þ :á·(ßÃNþ 8Øyº(Ô~#ÍèÌúx+Í% (½ï6Éå*â#~þáÉÍÂÈÍ[þÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íõþ 8ÍèþëñðHåÍ\Ë<ËÑëÍÞëËzÈ5Í+È)ýÉÍ+ÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úHºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ͬèͬdͬ ͬ} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~Í„Ö08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>ÃwÝáͦWáͧ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯ xæÆ0ýwý#xæGÅÕåË%ÍP Ë%ÍP ëãÑãíZëáãíJDMáË%ÍP = ÈñÁýáÉýåá_~6þ5Øúi+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|ÍC ÍC „gãíZëáãíJDMá0ÍD ,7È}Æo˸ÉÍ ¾ #øyîO!@9ùi&ÝéÍ  ë¶¾ â#÷ÚÍ ¶w#ùëùÝéÍ /¦w#øïÙÍaÙ}.�•õ; ÙÍOÙÍJ ÅÕåÙ,ÍÖ ÙáÑÁ; ÝåÝ!U >ÍýÝá,ÙÍk-ÙÍÖ ñÅÕåo&0%ÍÑÙ,Í` ÙáÑÁÍÖ }þgÚ; É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍkÙ·Ëxõ˸; }þˆ0GÅÕå,Í™åË<Ë}áõÍÑ,-(-ÙñáÑÁõÍJ ÝåÝ!Ù >ÍÝáñ0 õÙÍaÙÍ` ñ…o8 ñÈÙÍOþ á>Ãum.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍOÙ¯Ëx(<˸õͨ 8Ù; ñËÿõÙÏŽé!~JÙͨ 0Í÷OÝ!—>ÙÝÍ<Ùͨ 8 = ìÙ ÝÙÙÍ7ËøÍÖ ÅÕåÍ<Í` ÙÍOÍÖ ÙáÑÁ; ÝåÍ÷ÝáÙÍ7ÍÖ ñ0 õÙÍW-ÍJ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!Ó>ÅÕå ÌáñJ= ÍB== ͯ}8= ͵}/Í­ !*â###å~Æ-_~áþ(4òQ6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍÌÍ[þ ( þ (þ (þ ÍÖè!]Í[þ (þ (þ (þ(w#(ÍÖãÍÂÌÖ6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7à ëÍ Í[ÃÖÍÖÉ>¯OÅÍkÁͼÈÅåÍÁÑÁÍÎØÌMës #rëÉÍkͼÈÅåÍpÙáÁÍÎØÙÌX ÙáåÍÌÍ[þ ÍÖôÍ[þ (þ( #w(ÍÖêÍÂÌÖáqÉ*â#~þÊáÍ[þ (þÈÍÖñÍ ÍÖþ ÀÃÖ*â##~þÈ6ÉÅÕåÍœáÑÁÉOÍ$*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í¡È>ðà *æ:è¾È4^qÉ}Ã’ÁÑÅÝ*ÛË|(xñW^‘8/ÃwÍÖ Ð>ÃuÍJ õÍuÍ` íÙ}·Ù>(è; àÙËxÙÂQ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍC ,= ù(Ùñæ€ Í[ 0%ÍD ·, 7 Í� ?õ(8ÙÍu Ëx ÍO - öÍ; ñ8˸·ÙáÑÁÙÉÙËxÙÂÝ ÍX ÍÝ Ø,-Èxî€GÉÙ}·ÙÊ; }·ÈÙ…ÙÍ ÅÕåÝ9Í; Ù.Ù>Ý#ÝnË0Í[ ÍD = ñÙ-Ù åÝnûËx ÍP ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ì; É}·ÈÙ•Ù?Í åååÝ9Ù.Ù>Í� 8Íu ?Ë= ÝuÝ+Ù-Ù(>ÍO 0ßÍu ·áÍO 8Í ¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍŠ¦!"9ù!(#Ýé>¯2æýá*ÛͲ¯á"âýå|·>"Ê :æ·( ͆ *â6#wÉÍ÷*â6#6 ë!\$í°É!¶Ååí[Ûþ (úÍ„–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍîÍ$*â#~þ ͶÍ$*â:æ·> >w###6ÀÃÖþ þ #6++pÉ>¯2æíSäÍ-Í$Ͷ:Ù·À*â6###ww#w$w#wÖÿ:æ· åÍôá##N#F*ä·íBÈ>�à å¯w#w#í[äs#ráÃó>¯2æÍSÍ$ͶÍ$*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍß*â ë:æ·( ÕÍÑñÅÍÁ<Àxà *â6#ûÉ"â#~+þ 2ËN(>Í’  ÍMëëË|( ÍMÝ6-Ý#ÕÍ�áͦí[ÛÝåá·íRë“8 (G> Í’ùCÈ~Í’#÷ÁÑÙáÑÁÙÅÝ*ÛÕÍôÇÁÑÅͦËC!h Ç!lÀTRUEFALSEͦ!9^#Í(ÑùÕÉá~#·(G~Í’#ùé> Í’> Ã’ "âËF!ÈÍ[¸(þÀ#ÉåÍRë·íRá0Íô*â4À#4É>™Ã åÍR·íR *â4 #4(áÍóÒ>òÜ>¯2çÍ$ë*âËV(/Ë–:ç·(#~+· x· y·ú2ÅÕ!͵ÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍŒí âX<òN=<ÍŒ*â###æw ÅÕåÍŸáÑÁ Õ*Ñ4 #4x±ÂüëÉ>™>ðà õ:ç·(ëñÉ"âÍŸÈè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍRÑ·íR8A*â N#F#s#rÍ$ 0}æ)ëíjëS\å!Ñn&å! ÑÍaËEÊæ#!~Óå*ÔÑn&åÍQ!0å!9Ík!Aå!FÍkÍËEʾ#*Ôå!ÑÍNËEÊa#!$e.å~!¤ÑͲ*ÔÍUå*Ôå!ÑÍ›Ñ}£oËEÊ“#!¤ÑÍ Í/$Í~!¤ÑͲ!¤ÑÍ !~Óå*ÔÑn&e.åÍ~!¤ÑͲ*Ô#"ÔÃ#*Ôå!ÑÍ›ËEÊæ#!¤ÑÍ !/e.åÍ~!¤ÑͲ!~ÓÍ Ímå*Ôå!Ñë·íRÑÍ›ËEʹ$!~ÓÍ !å!Í5Íç!ÍENDÍ\ËEÊ*$ÃÔ$*Ôå!Ñë·íRå!ÑÍ5z³Êh$Õ"þÓ!¤ÑÍ ! e.åÍ~!¤ÑͲ*þÓ#ÑÃ>$!¤ÑÍ !{e.åÍ~!¤ÑͲ!¤ÑÍ !~ÓÍ *Ôå!dÍ5Í~!¤ÑͲ!¤ÑÍ !}e.åÍ~!¤ÑͲ!ÔÍ[!¤ÑÍ !ÍqÍ�Íbò"Éýáá"¢ÑýåÍ *¢ÑͲ*¢ÑÍ Ímå!]Ñn&å!Ñ(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%ÃÆ}Í„oÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍ%^C User break1:Ù·ÈÝáõÍ% I/OÝáÍ% Run-timeÍ% error Í’Í%, PC=Ýåáí[Õ·íR"×Í�Í% Program aborted*ßé1!€Õ¸ÿÍ�!�&žÑͲÃ]%ýá !nÓͲá"{Óýå*{Óå!nÓÍ Í<Íb*{ÓÍÏÍ5å!ÑÍaËEÊ0 !}2}Ó*{ÓÍîÍbÃ7 !}2}Ó*}Ó&Éýá !OÓͲá}2\ÓýåÍ !>ÓͲ!OÓÍ *\Ó&e.åÍ !OÓͲ!OÓå!>ÓÍ Ímå!ÑÑn&å*\Ó&ÑÍaËEÊË !>ÓÍ !OÓå!>ÓÍ Ímå!ÑÑn&e.åÍ !>ÓͲÃt !>ÓÍ  !]ÓͲýá!]ÓÍ ýåÉ!²Ôå!oÕÍ Íç}îoËEÊÕ!!}2ý...................................................................... INLINE.PAS Jim Kircher (206) 746-1836 INLINE.COM 17915 NE 19th PL Bellevue, Wa 98008 ...................................................................... USEAGE: EDIT FNAME.AZM { the subprogram is written } Z80MR FNAME { the .PRN file is created } PIP FNAME.PRN = FNAME.PRN[T8] { tabs are expanded to spaces } *â###w* N#Fë·íB ÈÕåÍŸÑár+sÉ>‘à ÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍU·íR!À#ÉÍUëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æÊóx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>à ÁÑíSâÅåÍRÑ·íRÚ*â s#r$ s#rÉ"äíSæëá"â! N#Fë·íB(^x± *â 6#ûí[âÍ<(H*â! íKäq#p##ëíKæÅÕÍí[â!Í· *â! 4 #4Ñ!€ëÁ x± Õ*â$ éÝ*â>ðÃw"òëáã"ô{æü_!í"ëÝ*íÝnÝf}´(HíR0ÝnÝfåÝ"ëÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝpÍaËEÊ2%*¢ÑÍ *¢ÑÍ Ímå!]Ñn&e.åÍ *¢ÑͲÃé$!.å*¢ÑÍ Í=  *¢ÑͲ! å*¢ÑÍ Í=  *¢ÑͲÉ!oÕåÍÕ$!oÕÍ ÍÍoËEʨ%!oÕÍ Í.INLÍ !bÕͲ!oÕÍ Í.PRNÍ !oÕͲÍä ͘"ÍRÍ�ÍbÍRÍ� --writing to file !bÕÍ !ÍqÍ�--Í�Íb!ÔÍ[Í�Inline Í�Íb!ÔÍ[!(ÍòÍbͲ"!ÔÍ[Í�$00);Í�Íb!ÔÍÏÍbÍRÍ�Íb!ÔÍ�}îoËEÊ{&!ÔÍ8!~Ó~Í.Í_Íb!~ÓÍ ÍR!ÍqÍ�ÍbÃ@&!²ÔÍîÍb!ÔÍîÍbÃÅÍòÍbͲ"!ÔÍ[Í�$00);Í�Íb!ÔÍÏÍbÍRÍ�Íb!ÔÍ�}îoËEʰs!ÔÍ8!~Ó~Í.Í_Íb!~ÓÍ ÍR!ÍqÍ�ÍbÃ@&!²ÔÍîÓ!oÕÍ ÍÍoËEÊ4!!oÕÍ ÍR!ÍqÍ� not found,ÍbÍRÍ�$ Enter file name or to end.Í�Íb!-ÓÍ+ Í.Í_Íb!-ÓÍ ÍÍ\ËEÊ‹!ÍÅ!.å!-ÓÍ Í=  !-ÓͲ!-ÓÍ Í.INLÍ !bÕͲ!-ÓÍ Í.PRNÍ !oÕͲÃÜ!!}2ýÓ*ýÓ&ËEÊä Éýá~!/ÒͲýå!/Òå!Ñn&å! ÑÍNå!/ÒÍ Ímå!ÑÍ›Ñ}£oËEÊ3"!/Òå!å!ͽÃó!!/Òå!/ÒÍ ÍmÑn&å! ÑÍNå!/ÒÍ Ímå!ÑÍ›Ñ}£oËEÊ"!/Òå!/ÒÍ Ímå!ͽÃ3"!/ÒÍ ~!®ÒͲýá!®ÒÍ ýåÉ!Ôå!bÕÍ Í<Íb!ÔÍÎÍbÉ!²ÔÍ�}îoËEÊÔ$Í~!¤ÑͲ!"Ô!²ÔÍ8!~Ó~Í.Í_Íb!~ÓÍ Ímå!ÑÍ›ËEÊÑ$!~Ó INLINE FNAME { the .INL file is created } ~~ DOCUMENTATION ~~ TURBO Pascal has a lot of great features. External procedures, inline machine code and absolute addressing allow programs that run almost as fast as assembled code. I favor using Pascal source for everything but the tight loops and very low level byte/bit manipulations. Here, very small relocatable subprograms can be assemblÝåÑ*ës#rÑ*ôs#rÉÝåá"Í*ò ÝåÁ Ú5íKÏíB!Úð>ÿÃuëáã~#fo{æü_ë"ò*íåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKòýqýpýuýtÝsÝrÝåáÝNÝFÍÄ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ííSíÕÝáÝuÝtíKòÝqÝpë ·íRÀÕýá*Í·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Í6#ûÉÍ *öÉÍ *øÉ!"ö"øÝ*íÝNÝFy°(*ö "ö*ø·íB0íCøÝnÝfåÝáØ*Ïûÿ í[Í·íRØë*ö"ö*ø·íRÐíSøÉí[Ís#rÉ^#VíSÍÉ>¯O"æ¯w2Ùx2è!ê"âá"äá ÍöÍ@*äé>¯2ê"æ!ê"âá"äá"è!\Ͳ¯*è:ê· ÍîÍ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±  ed and included as Inline procedures. Entering this code from the keyboard is tedious and error prone. INLINE.COM will create this code from a .PRN file. To use, enter A> INLINE filename (file type .PRN assumed). The program retreives the filename from the command tail and appends a type of .PRN to it. The .PRN file is then opened, text is processed and written to a file created with name filename.INL. The program is designed to wonFileName : Filename; InlFileName : Filename; SourceFile : TEXT; DestFile : TEXT; I,J : INTEGER; OK : BOOLEAN; linebuffer : Workstring; FUNCTION Open(VAR fp:TEXT; name: filename): BOOLEAN; BEGIN ASSIGN(fp,Name); {$I-} { so program does not terminate on bad filename} RESET (fp); {$I+} { I/O checking active again } IF IOresult <> 0 THEN BEGIN Open := FALSE; CLOSE(fp); END ELSE Open bject module must be produced. Macros must be expanded. Conditional code must not be listed for false conditionals. The switches for the preceding are all set properly (on) by default by Z80MR, no pseudo-ops are needed. If DEFM, DEFB etc is used, the LIST A (normally off by default) pseudo-op must be placed in the Z80MR source code file before assembly so all bytes are listed in the .PRN file. END ]=' ') and (LENGTH(S) >0) DO delete (S,LENGTH(S),1); Trim := S; END {Trim}; PROCEDURE OpenDest; BEGIN ASSIGN(destFile,InlFileName); REWRITE(destFile); END {open dest}; PROCEDURE ProcessFile; LABEL 10; VAR destBuff : workstring; CONST code1 = 7; {Z80MR .PRN files, 1st byte of Z80 code in column 7} mnemon = 25; { " " " , column where mnemonic starts} BEGIN WHILE NOT EOF(SourceFile) DO BEGIN DestBuff := ''; I := code1; READLN(SourceFilerk on .PRN files generated by Z80MR as furnished by Micro Cornucopia for the Big Board. No research was done on other assembler's .PRN files, the Pascal source may have to be modified to fit. To have readable .INL files, all tabs in the .PRN file must first be expanded to spaces with PIP. A> PIP fname.prn = fname.prn[T8] (converts tabs to 8 spaces) The generated file starts with the INLINE statement and left parenthesis and ends := TRUE; END {open}; FUNCTION CopyTo(ch : char; Str1 : filename) : filename ; VAR S : filename; BEGIN S := ''; Str1 := Str1 + ch ; {so while loop will exit} { the next line copies Str1 to S char by char until '.'} WHILE Str1[LENGTH(S)+1] <> ch DO S:=S +Str1[LENGTH(S)+1]; CopyTo := S; END; PROCEDURE OpenMain; VAR Str1 : filename; BEGIN REPEAT IF NOT Open(SourceFile,PrnFileName) THEN BEGIN OK := FALSE; IF PrnFileName <> '' THEN WRITE( {--------------------------------------------------------------------} { --INLINE.PAS-- PROCESS .PRN FILE, WRITE INLINE CODE } { ..................... TO DESTINATION (.INL) FILE } { : last rev 08 05 85 : FILE NAME RETREIVED FROM COMMAND LINE } { :...................: Jim Kircher Bellevue, WA } {--------------------------------------------------------------------} TYPE Workstring = STRING[126]; Filename = STRING[12]; VAR Pr,Linebuffer); { get 1 line of text } IF (Length (Linebuffer) > 0) THEN BEGIN IF linebuffer[2] <> ' ' THEN { if address bytes, } BEGIN { then code follows. } WHILE lineBuffer[I] IN ['0'..'9','A'..'F'] DO { get all hex bytes } BEGIN IF I = code1 THEN destBuff := '$'; { $ delimit 1st byte } IF (Odd(I)) and (I > code1) THEN destBuff := destBuff with the ');' as required by Turbo. All text that is not actual executable code is surrounded by braces. Dollar signs and slashes are included where Turbo requires (delimiting each byte of code). The program stops processing the .PRN file when it encounters the END pseudo-op code. This eliminates the Symbol table, etc from the inline file. Besides being relocatable, several conventions must be followed in the Z80MR source code. An oPrnFileName,' not found,'); WRITELN(' Enter file name or to end.'); READLN(Str1); IF Str1 = '' THEN HALT; Str1 := CopyTo('.',Str1); { strip file type, if entered } InlFileName := Str1 + '.INL'; PrnFileName := Str1 + '.PRN'; END ELSE OK := TRUE; UNTIL OK; END {open main}; FUNCTION Trim( S : workstring): workstring; {trim spaces fore and aft} BEGIN WHILE (S[1] = ' ') and (LENGTH(S) >0) DO delete(S,1,1); WHILE (S[LENGTH(S)  + '/$'; destbuff := destbuff + lineBuffer[I]; I := SUCC(I); END; IF I >code1 THEN DestBuff := DestBuff + '/'; {delimit last byte of code} END; IF LENGTH(linebuffer) > I-1 THEN { still some text left ? } BEGIN IF trim(COPY(linebuffer,mnemon,5)) = 'END' THEN GOTO 10; For J := I-1 TO 14 DO DestBuff := DestBuff +' '; {Add spaces to line up columns} destBuff := DestBuff + CHR(1name from command line } IF PrnFileName <> '' THEN BEGIN InlFileName := PrnFileName + '.INL'; {dest file always has type of .INL } PrnFileName := PrnFileName + '.PRN'; {main file always has type of .PRN } END; OpenMain; OpenDest; WRITELN; WRITELN(' --writing to file ',InlFileName,'--'); WRITELN(destFile,'Inline '); {write reserved word 'Inline' to file} WRITE(destFile,'('); { " the left parentheses " " } ProcessFile;  Clock84.box Grafix84.box Demonstrations: VidDemo.pas ClkDemo.pas GrfDemo.pas SetClock.com The titles of the files are somewhat self explanatory with the three areas of interest being the video attributes, the real time clock and the screen graphics. 23); { beginning comment brace } destBuff :=DestBuff + COPY(lineBuffer,I,100); {copy rest as comments} destBuff := DestBuff + CHR(125); { ending brace } END; WRITELN(DestFile,DestBuff); { processed line to file} END; { IF Length... } END; 10:END; {ProcessFile} PROCEDURE CommandLine(VAR S : filename); { get 1st argument from commnand line. $5D is hex address of 1st character} { in command line. The end of the 1st ar * * * * * * * * * * * * * * * * * * * * * * * * * * * * * KAYPRO-84 * * Toolbox * * * * Jack E. Heiss * * * * * * * * * * * * * * * * * * * * * * * * * * * * * KAYPRO-8 { " the code & comments " " } WRITELN(destFile,'$00);'); { last byte must not be delimited } RESET(destFile); { now read the file } WRITELN; { and write to the console } WHILE NOT EOF(destFile) DO BEGIN READLN(destFile,Linebuffer); WRITELN(Linebuffer); END; CLOSE(SourceFile); CLOSE(DestFile); END. gument was marked with 0 by CP/M. } BEGIN S := ''; { next line copies memory from hex 5D into string S until 0 encountered } WHILE MEM[LENGTH(S)+$5D] <> 0 DO S:=S+CHR(MEM[LENGTH(S)+$5D]); S := CopyTo('.',S); { dont include any file type} S := CopyTo(' ',S); { dont include spaces } END; {CommandLine} { ----------- Main Program Body ---------- } BEGIN CommandLine(PrnFileName); {get file 4 Toolbox is a set of pre-wriiten procedures in TurboPASCAL for accessing some of the advanced features of the Kaypro Universal Board Computers, also known as the -84 computers. The Toolbox contains three files of procedures plus three demonstration programs. Another file, SETCLOCK.COM is included for convenience. Each procedure file contains its own documentation. Files on the disk are: Procedure Files: Video84.box   ÃÉÍ«Copyright (C) 1984 BORLAND Inc‚AKayproDelete2/920/92P= ERT###&&&~·7È#õå~Íáñ=ÈóÍ% ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€Ü�Ô©æîÅÕåÝåýåÍ£}Ùå!å!"8áãõÅÕ~#·(åÍáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨ÍZ!¢ÍÐ*ºÔBáÑÁñÉõÅÕå!´éõÅÕå!®àõ:¼·(ÅÕå=2¼!ÈÍZáÑÁñÉõ:¼· ÷ÅÕå<2¼!ÂåõÅÕå!¼ÛõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÑ:ŸO:�ƒÍ!ðÍÐ* ÍBáÑÁñÉÍ� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂuëñðHåÍ\Ë<ËÑëÍÞëËzÈ5Í+È)ýÉÍ+ÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úHºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ͬèͬdͬ ͬ} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~Í„Ö08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>ÃwÝáͦWáͧ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯ xæÆ0ýwý#xæGÅÕåË%ÍP Ë%ÍP ëãÑãíZëáãíJDMáË%ÍP = ÈñÁýáÉýåá_~6þ5Øúi+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|ÍC ÍC „gãíZëáãíJDMá0ÍD ,7È}Æo˸ÉÍ ¾ #øyîO!@9ùi&ÝéÍ  ë¶¾ â#÷ÚÍ ¶w#ùëùÝéÍ /¦w#øï!ð ë!›45(É!.+/ –0ü†õyþ0(ñíÉ d!kÃZ!{ÃZ͈æ͈o&Éô  áÁå:á·(yþ ÕÅÍ |µ(Íþ ÍþÊÅÁÑ*é"ÛÕx2áy·( >Ã28!?"9!É í°!á¸í°áí°>2گà Ã:ÃDÃ]ÃSÃXÃNÃ]ÃDÿ í[Ûþ (ú!eÍ}Í„þA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍyÍVþ. ÍV!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(Í„w#ßÉ>?> w#üÉþaØþ{ÐÖ É|Í’}õÍ›ñæÆ�'Î@'Ãè¯7Ë|À|·}È>ÿÉ"ÍíCß"í6#ûëÑùü "Ïë"ÕÍ�Í©éå*Ï·íB"Ïí[Í·íRëáÚ5í°É*Ïí°"ÏÙÉ^#V#ÙÍaÙ}.�•õ; ÙÍOÙÍJ ÅÕåÙ,ÍÖ ÙáÑÁ; ÝåÝ!U >ÍýÝá,ÙÍk-ÙÍÖ ñÅÕåo&0%ÍÑÙ,Í` ÙáÑÁÍÖ }þgÚ; É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍkÙ·Ëxõ˸; }þˆ0GÅÕå,Í™åË<Ë}áõÍÑ,-(-ÙñáÑÁõÍJ ÝåÝ!Ù >ÍÝáñ0 õÙÍaÙÍ` ñ…o8 ñÈÙÍOþ á>Ãum.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍOÙ¯Ëx(<˸õͨ 8Ù; ñËÿõÙÏŽé!~JÙͨ 0Í÷OÝ!—>ÙÝÍ<Ùͨ 8 = ìÙ ÝÙÙÍ7ËøÍÖ ÅÕåÍ<Í` ÙÍOÍÖ ÙáÑÁ; ÝåÍ÷ÝáÙÍ7ÍÖ ñ0 õÙÍW-ÍJ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!Ó>ÅÕåxñW^‘8/ÃwÍÖ Ð>ÃuÍJ õÍuÍ` íÙ}·Ù>(è; àÙËxÙÂQ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍC ,= ù(Ùñæ€ Í[ 0%ÍD ·, 7 Í� ?õ(8ÙÍu Ëx ÍO - öÍ; ñ8˸·ÙáÑÁÙÉÙËxÙÂÝ ÍX ÍÝ Ø,-Èxî€GÉÙ}·ÙÊ; }·ÈÙ…ÙÍ ÅÕåÝ9Í; Ù.Ù>Ý#ÝnË0Í[ ÍD = ñÙ-Ù åÝnûËx ÍP ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ì; É}·ÈÙ•Ù?Í åååÝ9Ù.Ù>Í� 8Íu ?Ë= ÝuÝ+Ù-Ù(>ÍO 0ßÍu ·áÍO 8Í ¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍŠ¦!"9ù!(#Ýé>¯2æýá*ÛͲ¯á"âýå|·>"Ê :æ·( ͆ *â6#wÉÍ÷*â6#6 ë!\$í°É!¶Ååí[Ûþ (úÍ„–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍîÍ$*â#~þ ͶÍ$*â:æ·> >w###6ÀÃÖþ þ #6++pÉ>¯2æíSäÍ-Í$Ͷ:Ù·À*â6###ww#w$w#wÖÿ:æ· åÍôá##N#F*ä·íBÈ>�à å¯w#w#í[äs#ráÃó>¯2æÍSÍ$ͶÍ$*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍß*â ë:æ·( ÕÍÑñÅÍÁ<Àxà *â6#ûÉ"â#~+þ 2ËN(>Í’Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍŠ¶wÝéÝáÑ}“8÷�Ãu·íR·íB0 É>‘î·íRëê@ðøÉÕë·íRëáë·íR!È+Éͨ õÍz ð·íR!À+Éͨ õÍz ðÍ<!Ð+Éͨ õÍz ðÍ<!ÈØ+Éͨ ôÍz ïÍ<!ÈØ#Éͨ ôÍz ïÍ<!Ø+Éͨ õÍz ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍJëÍJëDM¯go>íjíB0 7?ËË= ðõÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.  :Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍŸ*â-¯w#wÕÿw#ÍóÍŸÀ"â~æÈ·ÍÀ ëÍ<À@ýá*ÛͲ¯áýåÍÀåÍ÷áåë!\ í°á åëÍÑ<Ê®!\$í°É>à >¯2æÍÀ*ß|µ>! ë*â \$í°\Í<(Ï!ý€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍÂÈ> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍ<áÉÝáÝå"âËF( #~þÀ#6Ãe>Îå!ÊÍ[áÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍwþ (=þ(&þ("þ(þ :á·(ßÃNþ 8Øyº(Ô~#ÍèÌúx+Í% (½ï6Éå*â#~þáÉÍÂÈÍ[þÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íõþ 8Íèþ(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%ÃÆ}Í„oÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍ%^C User break1:Ù·ÈÝáõÍ% I/OÝáÍ% Run-timeÍ% error Í’Í%, PC=Ýåáí[Õ·íR"×Í�Í% Program aborted*ßé1!€Õ¸ÿÍ�!òB´ͲáBÍc!!å!ÍÍRÍ�SCREEN GENERATORÍb!%å!ÍÍRÍ�ver 2.0Íb!å!ÍÍRÍ�P--------------------------------------------------------------------------------Íb!å! ÍÍRÍ�%Produces a Pascal procedure in sourceÍb!'å! ÍÍRÍ�byÍb!!å!ÍÍRÍ�Thomas R. MierauÍb*â###w* N#Fë·íB ÈÕåÍŸÑár+sÉ>‘à ÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍU·íR!À#ÉÍUëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æÊóx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>à ÁÑíSâÅåÍRÑ·íRÚ*â s#r$ s#rÉ"äíSæëá"â! N#Fë·íB(^x± *â 6#ûí[âÍ<(H*â! íKäq#p##ëíKæÅÕÍí[â!Í· *â! 4 #4Ñ!€ëÁ x± Õ*â$ éÝ*â>ðÃw"òëáã"ô{æü_!í"ëÝ*íÝnÝf}´(HíR0ÝnÝfåÝ"ëÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝpÍ !SµÍ²!ÌÔå!SµÍ Í=!ÌÔ˜ÍÍ5å!ÑÍN}2`µ!ÌÔÍ-Íb*`µ&}îoËEÊW&!ÌÔå!SµÍ Í=!ÌÔ˜ÍÍb!å!ÍÍRÍ�Creating a new datafileÍb!4Í"aµ!å!ÑÍ5z³Ê?&Õ"¶!å!PÑÍ5z³Ê&Õ"¶!¾å*¶+å))))å))ÑÑÑå!¾å*¶+å))))å))ÑÑÑÍ ! e.åÍPÍÑ*¶#Ñð%*aµå*¶+å))))å))ÑÑÑå!¾å*¶+å))))å))ÑÑÑÍ PÍÑ*¶#ÑÜ%!ÌÔÍ[!4ÍÍÒÍb!ÌÔÍ-Íb!ÌÔå!SµÍ Í=!ÌÔ˜ÍÍb!å!ÍÍRÍ� Reading the Datafile Íb!4Í"aµ!ÌÔÍ8!4ÍͳÍb!å!ÑÍ5z³Ê 'Õ"¶!¾å*¶+å))))å))ÑÑÑå*aµå*¶+å))))å))ÑÑÑÍ PÍ ÌáñJ= ÍB== ͯ}8= ͵}/Í­ !*â###å~Æ-_~áþ(4òQ6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍÌÍ[þ ( þ (þ (þ ÍÖè!]Í[þ (þ (þ (þ(w#(ÍÖãÍÂÌÖ6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7à ëÍ Í[ÃÖÍÖÉ>¯OÅÍkÁͼÈÅåÍÁÑÁÍÎØÌMës #rëÉÍkͼÈÅåÍpÙáÁÍÎØÙÌX ÙáåÍÌÍ[þ ÍÖôÍ[þ (þ( #w(ÍÖêÍÂÌÖáqÉ*â#~þÊáÍ[þ (þÈÍÖñÍ ÍÖþ ÀÃÖ*â##~þÈ6ÉÅÕåÍœáÑÁÉOÍ$*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í¡È>ðà *æ:è¾È4^qÉ}Ã’ÁÑÅÝ*ÛË|(!å!ÍÍRÍ� Contributed to the public domainÍb!@å!ÍÍRÍ�Type any key...Íb!Oå!Í!¾Í8!˜µÍÛÍbÉ!å!ÑÍ5z³Êö!Õ"!¶!ƒ¶å*!¶+å))))å))ÑÑÑåÍPÍÑ!S¶å*!¶+)Ñå!ëás#r!#¶å*!¶+)Ñå!ëás#r!¾å*!¶+å))))å))ÑÑÑåÍPÍÑ*!¶#ÑÃ|!ÉÍc! å!ÍÍRÍ�SCREEN GENERATORÍb!å!ÍÍRÍ�File Selection ScreenÍb!å!ÍÍRÍ�P--------------------------------------------------------------------------------Íb!å! ÍÍRÍ�File name: ________Íb!å!ÍÍRÍ�*Procedure name: __________ÝåÑ*ës#rÑ*ôs#rÉÝåá"Í*ò ÝåÁ Ú5íKÏíB!Úð>ÿÃuëáã~#fo{æü_ë"ò*íåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKòýqýpýuýtÝsÝrÝåáÝNÝFÍÄ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ííSíÕÝáÝuÝtíKòÝqÝpë ·íRÀÕýá*Í·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Í6#ûÉÍ *öÉÍ *øÉ!"ö"øÝ*íÝNÝFy°(*ö "ö*ø·íB0íCøÝnÝfåÝáØ*Ïûÿ í[Í·íRØë*ö"ö*ø·íRÐíSøÉí[Ís#rÉ^#VíSÍÉ>¯O"æ¯w2Ùx2è!ê"âá"äá ÍöÍ@*äé>¯2ê"æ!ê"âá"äá"è!\Ͳ¯*è:ê· ÍîÍ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±Ñ*¶#ÑÃÄ&!ÌÔÍ-ÍbÉ!å!ÑÍ5z³Ê˜'Õ"¶!¾å*¶+å))))å))ÑÑÑÍ P!™µÍ²!å!PÑÍ5z³Ê�'Õ"¶!³Åå*¶+)))å)ÑÑå*¶+Ñå!™µå*¶Ñn&ëás*¶#ÑÃU'*¶#Ñà 'É!å!ÑÍ5z³ÊJ(Õ"¶!¾å*¶+å))))å))ÑÑÑåÍPÍÑ!å!PÑÍ5z³ÊA(Õ"¶!¾å*¶+å))))å))ÑÑÑå!¾å*¶+å))))å))ÑÑÑÍ !³Åå*¶+)))å)ÑÑå*¶+Ñn&e.åÍPÍÑ*¶#ÑÃØ'*¶#Ñä'!¾å!+å))))å))ÑÑÑå!¾å!+å))))å))ÑÑÑÍ !å!OÍ5PÍÑÉ!å!ÍÍRÍ�Wait! ÍbÍ™'!å!ÑÍ5z³Êó(Õ"¶!å*¶Í!¾å*¶+å))))å))ÑÑÑÍ ÍR!ÍqÍb*¶#Ñò(ÉÍc!å!ÍÍMëëË|( ÍMÝ6-Ý#ÕÍ�áͦí[ÛÝåá·íRë“8 (G> Í’ùCÈ~Í’#÷ÁÑÙáÑÁÙÅÝ*ÛÕÍôÇÁÑÅͦËC!h Ç!lÀTRUEFALSEͦ!9^#Í(ÑùÕÉá~#·(G~Í’#ùé> Í’> Ã’ "âËF!ÈÍ[¸(þÀ#ÉåÍRë·íRá0Íô*â4À#4É>™Ã åÍR·íR *â4 #4(áÍóÒ>òÜ>¯2çÍ$ë*âËV(/Ë–:ç·(#~+· x· y·ú2ÅÕ!͵ÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍŒí âX<òN=<ÍŒ*â###æw ÅÕåÍŸáÑÁ Õ*Ñ4 #4x±ÂüëÉ>™>ðà õ:ç·(ëñÉ"âÍŸÈè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍRÑ·íR8A*â N#F#s#rÍ$ 0}æ)ëíjëS\_______________ÍbÍSCREEN!�µÍ²ÍScreen!gµÍ²!%å! Í!¶Í+Í.Íb!¶Í ÍÍ\ËEÊn#!�µÍ !¶Í²!å!ÑÍ5z³Ê§#Õ"eµ!¶å*eµÑå!¶å*eµÑn&Í(ëás*eµ#ÑÃy#!%å! Í!¶Í ÍR!ÍqÍ� Íb!¶Í !�µÍ²!%å!Í!êµÍ+Í.Íb!êµÍ ÍÍ\ËEÊ"$!gµÍ !êµÍ²!%å!Í!êµÍ ÍR!ÍqÍ� Íb!êµÍ !gµÍ²!%å!ÍÍRÍ�Is the above correct? (Y/N) Íb!¾Í8!˜µÍÛÍb*˜µ&Í(}2˜µ*˜µ&å!YÑÍNå*˜µ&å!NÑÍNÑ}³oËEÊi$*˜µ&å!YÑÍNËEÊ6#É!}2`µ!¶Í Í.DAT  ÍRÍ�SCREEN GENERATORÍb!å!ÍÍRÍ�Command SummaryÍb!å!ÍÍRÍ�P--------------------------------------------------------------------------------Íb!å!ÍÍRÍ�J^E or ^K = Cursor up ^A = Cursor to left end of lineÍb!å!ÍÍRÍ�K^X or ^J = Cursor down ^F = Cursor to right end of lineÍb!å! ÍÍRÍ�B^S or ^H = Cursor left ^R = Cursor to top leftÍb!å! ÍÍRÍ�F^D or ^L = Cursor right ^C = Cursor to Ñå*¶+Ñn&ëás*!¶å*¶Í!³Åå*!¶+)))å)ÑÑå*¶+Ñn&ÍRÍòÍb*!¶#ÑÃÉ2!³Åå!P+)))å)ÑÑå*¶+Ñå! ëás!På*¶Í!³Åå!P+)))å)ÑÑå*¶+Ñn&ÍRÍòÍb*¶å*¶Í*¶å!ÑÍNËEÊŒ4*¶å!NÑÍ5z³Ê54Õ"!¶!³Åå*!¶+)))å)ÑÑå*¶+Ñå!³Åå*!¶å!Ñ+)))å)ÑÑå*¶+Ñn&ëás*!¶å*¶Í!³Åå*!¶+)))å)ÑÑå*¶+Ñn&ÍRÍòÍb*!¶#Ñø3!³Åå!O+)))å)ÑÑå*¶+Ñå! ëás!Oå*¶Í!³Åå!P+)))å)ÑÑå*¶+Ñn&ÍRÍòÍb*¶å*¶ÍÉ!}2:µ*¶å!ÑͯËEÊ5*¶å!PÑÍ5z³Ê5Õ"¶!³Åå*¶+)))å)ÑÑå*¶+Ñå! ëás*¶å*¶Í!³Åå*¶+)))å)ÑÑå*¶+Ñn&ÍRÍÉ!}2:µ!O"¶!"¶*¶å*¶ÍÉ!}2:µ!å!ÑÍ5z³Ê®/Õ"¶!å!PÑÍ5z³Ê¥/Õ"¶!³Åå*¶+)))å)ÑÑå*¶+Ñå! ëás*¶å*¶Í!³Åå*¶+)))å)ÑÑå*¶+Ñn&ÍRÍòÍb*¶#ÑÃF/*¶#ÑÃ2/!"¶!å!OÑÍ5z³Ê0Õ"¶!³Åå*¶+)))å)ÑÑå*¶+Ñå! ëás*¶å*¶Í!³Åå*¶+)))å)ÑÑå*¶+Ñn&ÍRÍòÍb*¶#Ñÿ/!"¶!"¶*¶å*¶ÍÉ!}2:µ*¶å!ÑͯËEÊD1*¶å!QÑͯËEÊD1!På*¶å!ÑÑÍEz³Êí0Õ"!¶!³Åå*!¶+)))å)ÑÑå*¶+Ñå!³Åå*!¶å!Ñë·íR+)))å)ÑÑå*¶+Ñn&ëás*!¶å*¶Í!³Åå*!¶+)))å)ÑÑå*¶+Ñn&ÍRÍòÍb*!¶+ÑÃm0!³Åå*¶+)))å)ÑÑå*Ñå!+Ñn&ÍRÍòÍb*¶#Ñÿ8*¶å!ÑÍNËEʘ9!å!OÑÍ5z³Ê˜9Õ"¶!³Åå*¶+)))å)ÑÑå!+Ñå! ëás*¶å!Í!³Åå*¶+)))å)ÑÑå!+Ñn&ÍRÍòÍb*¶#ÑÃ99!"¶*¶å*¶ÍÉÃj:*è´å!ÑÍÞ"ê´*ê´å!ÑͯËEÊÐ9!"ê´*î´"¶*¶"æ´*¶å*¶Í!å*ê´ÑÍ5z³Ê :Õ"ð´ÍM2*æ´"¶*ð´#ÑÃñ9!"¶*¶å*¶ÍÉ*è´å!ÿÿÑÍÄ"è´*è´å!ÑÍÞ"ê´!"¶*¶å*¶Í!å*ê´ÑÍ5z³Êi:Õ"ð´Í50*ð´#ÑÃT:É!}2:µ!"è´!"ê´!"ð´*ð´å!Ñ"ð´!³Åå*ð´+)))å)ÑÑå*¶+Ñn&}2å´*å´&å! ÑÍaå*ð´å!QÑÍNÑ}³oËEʃ:*ð´å!Ñë·íR"î´!Q"ð´*ð´å!Ñë·íR"ð´!³Åå*ð´+)))åbottom rightÍb!å!ÍÍRÍ�D^Q = Delete to end of line ^Z = Delete entire screenÍb!å!ÍÍRÍ�;^Y = Delete line ^N = Insert lineÍb!å!ÍÍRÍ�; inserts space at cursor ^B = Center textÍb!å!ÍÍRÍ�1 deletes character to the left of the cursorÍb!å!ÍÍRÍ�5 Code program & quit ^@ = Help Íb!0å!ÍÍRÍ�Type any key to continue...Íb!¾Í8!BµÍÛÍbÍcÍŠ(ÉÃÇ·íRÂ$=ÍŽ.Ãa>·íRÂ4=Í©9Ãa>·íRÂD=Í/Ãa>·íRÂT=Í.Ãa>·íRÂd=Íÿ,Ãa>·íRÂt=ͦ.Ãa>·íR„=ͤ-Ãa> ·íR”=Í50Ãa> ·íR¤=Í6-Ãa> ·íR´=Íÿ,Ãa> ·íRÂÄ=Í.Ãa> ·íRÂÔ=Íj-Ãa>·íRÂä=Í�5Ãa>·íRÂô=Í�4Ãa>·íRÂ>Íä.Ãa>·íRÂ>ͤ-Ãa>·íRÂ$>Í6-Ãa>·íRÂ4>Íø7Ãa>·íRÂD>Í /Ãa>·íRÂT>Íð,Ãa>·íRÂa>ÍM2*:µ&}îoËEÊr>Í�;!}2:µ*;µ&ËEÊä<ÍcÉ!"¶!å!ÑÍ5z³Ê‘@Õ"¶!"¶!"¶!"¶!}2—µ!}2–µ!¾å*¶+å))))å))ÑÑÑÍ P!™µÍ²!™µå*¶Ñn&}2˜µ*˜µ&å! ÑÍaËic domain SCREEN.COM This program is for anyone who uses Pascal to write menus, data input screens, and other text screens. With SCREEN.COM's text editor, the programmer creates a finished screen, types , and waits for SCREEN.COM to write the source code. The code is then stored in a text file that can be block read, or nds. (5.) Type any key; and after a short delay; you will be in the editing mode. If you opened an existing data file, the screen for that data file will be displayed. If not, the screen will be blank. (6.) Create your screen by typing in your text as it is to appear in your final program. Use the commands listed on the help menu. To recall this menu, type ^@. FroEÊ@?!}2–µ!}2—µ*¶"¶!S¶å*¶+)Ñå*¶ëás#r!#¶å*¶+)Ñå*¶ëás#r*¶å!Ñ"¶*¶å!PÑÍ›ËEÊc?!}2—µ*—µ&ËEÊÁ>!}2—µ*–µ&ËEʈ@!P"¶!™µå*¶Ñn&}2˜µ*˜µ&å! ÑÍaËEÊ@!}2—µ*¶"¶!å*¶å*¶Ñë·íRÑ" ¶!ƒ¶å*¶+å))))å))ÑÑÑå!¾å*¶+å))))å))ÑÑÑÍ *¶å* ¶Í5PÍÑ*¶å!Ñë·íR"¶*¶å*¶ÑÍNËEÊr@!}2—µ!" ¶!ƒ¶å*¶+å))))å))ÑÑÑå!¾å*¶+å))))å))ÑÑÑÍ *¶å* ¶Í5PÍÑ*—µ&ËEÊ„?*¶å!Ñ"¶*¶#ÑØ>*¶å!Ñë·íR"¶ÉÍc!¶Í Í.LIBÍ !´Í²!!´å!´Í Í<Íb!!´ÍÎÍb!!´Í[Í� Procedure !êµÍ !Íq!;ÍòÍ�Í included into any Pascal program you choose. SCREEN.COM was compiled with Turbo Pascal (tm) and is intended to produce source code for the Turbo editor. To create a screen with SCREEN.COM, follow these instructions: (1.) Type SCREEN and . (2.) Enter your choice for file and procedure names. If you don't enter a choice, SCREEN.COM will select these names for you. The default *** SCREEN.COM *** ------------------------ Produces a Pascal procedure in source by Thomas R. Mierau 454 Carver N.W. Massillon, OH 44646 (216) 832 - 8037 Contributed to the publm the help menu, any key will return you to the editing mode. (7.) When you are finished editing, type . (8.) Your screen will be saved to the files discussed in step (2.). Using your Turbo editor, you can then use the "block read" feature or the {$I} directive to include your code in the main program. (9.) If your screen contb!!´Í[Í�BeginÍ�Íb!!´Í[Í� Clrscr;Í�Íb!å*¶ÑÍ5z³ÊàAÕ"!¶!!´Í[Í� GotoXY(!#¶å*!¶+)Ñ^#Vëå!Íö!,Íò!S¶å*!¶+)Ñ^#Vëå!ÍöÍ�);Í�Íb!!´Í[Í� Write('!ƒ¶å*!¶+å))))å))ÑÑÑÍ !ÍqÍ�');Í�Íb*!¶#ÑÃÍ¡@ÍþAÍcÃÅÑÑÍ PÍÑ* file names will be SCREEN.LIB for the text file, and SCREEN.DAT for SCREEN.COM's data file. The default procedure name will be "Procedure Screen;". (3.) Answer (Y/N) to the query followed by . If the files named here already exists on the disk, they will be reopened. If not, new files will be created. (4.) The next screen is a "Help Menu" of editing comma  ains variables, you will have to edit the above .LIB file with the Turbo editor and enter the variable statements manually. 2  Write('Type any key...'); Gotoxy(79,24); Read(Kbd,Key); End; Procedure ClearLines; Begin For I := 1 to 24 do Begin Statement[I] := ''; VP[I] := 0; HP[I] := 0; Line[I] := ''; End; End; Procedure FileScreen; Var XFilename: String[8]; XProcedureName: String[25]; I: Integer; Begin Clrscr; GotoXY(32,1); Write('SCREEN GENERATOR'); GotoXY(30,3); Write('File Selection Screen'); GotoXY(1,4); WrieenData; ScreenData: XScreenData; Flag: Boolean; Ltr: Array[1..80,1..24] of Char; Line: Array[1..24] of String[80]; Statement: Array[1..24] of String[80]; VP: Array[1..24] of Integer; HP: Array[1..24] of Integer; I,Q,R,X,Y,XX,YY, Pointer,First, Last,Len: Integer; Filename: String[8]; ProcedureName: String[25]; TestLine: String[80]; Key: Char; Kr OK: Boolean; LocalFilename: String[12]; Begin OK := true; LocalFilename := concat(Filename,'.DAT'); {$I-} Assign(Disk1,LocalFilename); Reset(Disk1); OK := (IOResult =0); {$I+} Close(Disk1); If Not OK then Begin Assign(Disk1,LocalFilename); Rewrite(Disk1); Gotoxy(1,24); Write('Creating a new datafile'); With ScreenData do Begin For Y := 1 to 24 do Begin For X := 1 to 80 do Begte('--------------------------------------------------------------------------------'); GotoXY(25,12); Write('File name: ________'); GotoXY(20,16); Write('Procedure name: _________________________'); XFilename := 'SCREEN'; XProcedureName := 'Screen'; Repeat Gotoxy(37,12); Read(Filename); If Filename = '' then Filename := XFilename; For I := 1 to 8 do Filename[I] := upcase(Filename[I]); Gotoxy(37,12); Write(Filename,' Flag, Found: Boolean; Procedure FirstScreen; Begin Clrscr; GotoXY(33,1); Write('SCREEN GENERATOR'); GotoXY(37,3); Write('ver 2.0'); GotoXY(1,4); Write('--------------------------------------------------------------------------------'); GotoXY(22,10); Write('Produces a Pascal procedure in source'); GotoXY(39,12); Write('by'); GotoXY(33,14); Write('Thomas R. Mierau'); GotoXY(25,20); Write('Contributed to the public domain'); GotoXY(64,24);in Line[Y] := (Line[Y] + ' '); End; XLine[Y] := Line[Y]; End; Write(Disk1,ScreenData); Close(Disk1); End; End; Assign(Disk1,LocalFilename); Reset(Disk1); Gotoxy(1,24); Write('Reading the Datafile '); With ScreenData do Begin Read(Disk1,ScreenData); For Y := 1 to 24 do Begin Line[Y] := XLine[Y]; End; Close(Disk1); End; End; Procedure FillArray;Program SCREEN; { Submitted to the TURBO PASCAL RUNOFF sponsored by MICRO CORNUCOPIA from Thomas R. Mierau 454 Carver N.W. Massillon, OH 44646 (216) 832 - 8037 This program is a screen generator for TURBO PASCAL [(tm) BORLAND INTERNATIONAL]. It produces the source code for a procedure for a screen of text. } Type XScreenData = Record XLine: Array[1..24] of String[80]; End; Var Disk1: File of XScr '); XFilename := Filename; Gotoxy(37,16); Read(ProcedureName); If ProcedureName = '' then ProcedureName := XProcedureName; Gotoxy(37,16); Write(ProcedureName,' '); XProcedureName := ProcedureName; Repeat Gotoxy(37,20); Write('Is the above correct? (Y/N) '); Read(Kbd,Key); Key := upcase(Key); Until (Key = 'Y') OR (Key = 'N'); Until Key = 'Y'; End; Procedure ReadDataFile; Va   Begin For Y := 1 to 24 do Begin TestLine := Line[Y]; For X := 1 to 80 do Begin Ltr[X,Y] := Testline[X]; End; End; End; Procedure FillLines; Begin For YY := 1 to 24 do Begin Line[YY] := ''; For XX := 1 to 80 do Begin Line[YY] := Line[YY] + Ltr[XX,YY]; End; End; Line[24] := copy(Line[24],1,79); End; Procedure DisplayData; Begin Gotoxy(1,1); Write('Wait! '); FillLines; For YY := 1 X :=1; If Y > 24 then Y := 1; Gotoxy(X,Y); End; Procedure CursorLeft; Begin Flag2 := true; X := (X-1); If X < 1 then Begin X := 80; Y := (Y-1); If Y < 1 then Begin X := 1; Y := 1; End; End; Gotoxy(X,Y); End; Procedure CursorRight; Begin Flag2 := true; If Y =  ^B = Center text'); GotoXY(1,20); Write(' deletes character to the left of the cursor'); GotoXY(1,22); Write(' Code program & quit ^@ = Help '); GotoXY(48,24); Write('Type any key to continue...'); Read(Kbd,Key); Clrscr; DisplayData; End; Procedure EditScr; Var Num: Integer; Flag1, Flag2: Boolean; Procedure Help; Begin Flag2 := true; HelpScreen; Gotoxy(X,Y); End; egin Flag2 := true; For Y := 1 to 23 do Begin For X := 1 to 80 do Begin Ltr[X,Y] := (' '); Gotoxy(X,Y); Write(Ltr[X,Y]); End; End; Y := 24; For X := 1 to 79 do Begin Ltr[X,Y] := ' '; Gotoxy(X,Y); Write(Ltr[X,Y]); End; X :=1; Y:= 1; Gotoxy(X,Y); End; Procedure  to 24 do Begin Gotoxy(1,YY); Write(Line[YY]); End; End; Procedure HelpScreen; Var Key: Char; Begin Clrscr; GotoXY(30,1); Write('SCREEN GENERATOR'); GotoXY(30,3); Write('Command Summary'); GotoXY(1,4); Write('--------------------------------------------------------------------------------'); GotoXY(1,6); Write('^E or ^K = Cursor up ^A = Cursor to left end of line'); GotoXY(1,8); Write('^X or ^J = Cursor down 24 then Begin X := (X+1); If X > 79 then Begin X := 1; Y := 1; End; End; If Y < 24 then Begin X := (X+1); If X > 80 then Begin X := 1; Y := (Y+1); End; End; Gotoxy(X,Y); End; Procedure LeftEnd; Begin Flag2 := true; X := 1; Gotoxy(X Procedure Quit; Begin Flag1 := true; Flag2 := true; End; Procedure CursorUp; Begin Flag2 := true; Y := (Y-1); If Y < 1 then Y := 1; Gotoxy(X,Y); End; Procedure CursorDown; Begin Flag2 := true; Y := (Y+1); If Y > 24 then Y := 24; Gotoxy(X,Y); End; Procedure CarriageReturn; Begin Flag2 := true; Y := (Y+1); InsertCharacter; Begin Flag2 := true; If Y < 24 then Begin If X < 81 then Begin For I := 80 downto (X+1) do Begin Ltr[I,Y] := Ltr[(I-1),Y]; Gotoxy(I,Y); Write(Ltr[I,Y]); End; Ltr[X,Y] := (' '); Gotoxy(X,Y); Write(Ltr[X,Y]); Gotoxy(X,Y); End; End;  ^F = Cursor to right end of line'); GotoXY(1,10); Write('^S or ^H = Cursor left ^R = Cursor to top left'); GotoXY(1,12); Write('^D or ^L = Cursor right ^C = Cursor to bottom right'); GotoXY(1,14); Write('^Q = Delete to end of line ^Z = Delete entire screen'); GotoXY(1,16); Write('^Y = Delete line ^N = Insert line'); GotoXY(1,18); Write(' inserts space at cursor ,Y); End; Procedure RightEnd; Begin Flag2 := true; If Y < 24 then X := 80; If Y = 24 then X := 79; Gotoxy(X,Y); End; Procedure BeginningOfField; Begin Flag2 := true; X :=1; Y :=1; Gotoxy(X,Y); End; Procedure EndOfField; Begin Flag2 := true; X := 79; Y := 24; Gotoxy(X,Y); End; Procedure EraseField; B   If Y = 24 then Begin If X < 80 then Begin For I := 79 downto (X+1) do Begin Ltr[I,Y] := Ltr[(I-1),Y]; Gotoxy(I,Y); Write(Ltr[I,Y]); End; Ltr[X,Y] := (' '); Gotoxy(X,Y); Write(Ltr[X,Y]); Gotoxy(X,Y); End; End; End; Procedure DeleteCharacter; Begin  Gotoxy(Q,R); Write(Ltr[Q,R]); End; End; For Q := 1 to 80 do Begin Ltr[Q,Y] := (' '); Gotoxy(Q,Y); Write(Ltr[Q,Y]); End; End; If Y = 24 then Begin For Q := 1 to 80 do Begin Ltr[Q,Y] := (' '); Gotoxy(Q,Y); Write(Ltr[Q,Y]); End; X := 1; Gotoxy(X,Y); End; ine; Begin Flag2 := true; If Y < 24 then Begin For Q := X to 80 do Begin Ltr[Q,Y] := (' '); Gotoxy(Q,Y); Write(Ltr[Q,Y]); End; Gotoxy(X,Y); End; If Y = 24 then Begin For Q := X to 79 do Begin Ltr[Q,Y] := (' '); Gotoxy(Q,Y); Write(Ltr[Q,Y]); End;  2); If NewMar <1 then NewMar := 1; X := LftMar; Old := Y; Gotoxy(X,Y); For Ptr := 1 to NewMar do Begin DeleteCharacter; Y := Old; End; X := 1; Gotoxy(X,Y); End; Procedure ShiftRight; Begin Diff := (Diff * (-1)); NewMar := (Diff div 2); X := 1; Gotoxy(X,Y); For Ptr  Flag2 := true; X := (X-1); If X <1 then Begin X := 80; Y := (Y-1); If Y <1 then Begin Y := 1; X := 1; End; Gotoxy(X,Y); End; If Y < 24 then Begin For I := X to 79 do Begin Ltr[I,Y] := Ltr[(I+1),Y]; Gotoxy(I,Y); Write(Ltr[I,Y]); End; LtrX := 1; Gotoxy(X,Y); End; Procedure DeleteLine; Begin Flag2 := true; If Y < 24 then Begin For R := Y to 23 do Begin For Q := 1 to 80 do Begin Ltr[Q,R] := Ltr[Q,(R+1)]; Gotoxy(Q,R); Write(Ltr[Q,R]); End; End; For Q := 1 to 79 do Begin Ltr[Q,24] := (' '); Gotoxy(Q,2 Gotoxy(X,Y); End; End; Procedure InsertLine; Begin Flag2 := true; If Y < 24 then Begin R := 24; For Q := 1 to 79 do Begin Ltr[Q,R] := Ltr[Q,(R-1)]; Gotoxy(Q,R); Write(Ltr[Q,R]); End; For R := 23 downto (Y+1) do Begin For Q := 1 to 80 do Begin Ltr[Q,R] := Ltr[Q,(R-1)]; := 1 to NewMar do Begin InsertCharacter; End; End; Begin Flag2 := true; Diff := 0; NewMar := 0; Ptr := 0; {Find left margin} Repeat Ptr := (Ptr + 1); KKey := (Ltr[Ptr,Y]); Until (KKey <> ' ') or (Ptr = 81); LftMar := (Ptr - 1); Ptr := 81; {Find right margin} Repeat Ptr := (Ptr-1); KKey := (Ltr[P[80,Y] := (' '); Gotoxy(80,Y); Write(Ltr[80,Y]); Gotoxy(X,Y); End; If Y = 24 then Begin For I := X to 78 do Begin Ltr[I,Y] := Ltr[(I+1),Y]; Gotoxy(I,Y); Write(Ltr[I,Y]); End; Ltr[79,Y] := (' '); Gotoxy(79,Y); Write(Ltr[80,Y]); Gotoxy(X,Y); End; End; Procedure DeleteToEndOfL4); Write(Ltr[Q,24]); End; End; If Y = 24 then Begin For Q := 1 to 79 do Begin Ltr[Q,24] := (' '); Gotoxy(Q,24); Write(Ltr[Q,24]); End; End; X := 1; Gotoxy(X,Y); End; Procedure CenterText; Var Ptr, LftMar, RgtMar, NewMar, Diff, Old: Integer; KKey: Char; Procedure Shiftleft; Begin NewMar := (Diff div  tr,Y]); Until (KKey <> ' ') or (Ptr = 0); RgtMar := (80 - Ptr); Diff := (LftMar - RgtMar); If DIff <> 0 then Begin If Diff > 0 then ShiftLeft; If Diff < 0 then ShiftRight; End; NewMar := 0; End; Procedure PrintText; Begin If Y < 24 then Begin Gotoxy(X,Y); If X < 81 then Begin Ltr[X,Y] := Key; Write(Lt := true; Last := X; Len := (1+(Last - First)); Statement[Pointer] := copy(Line[Y],First,Len); End; X := (X - 1); If X = First then Begin KFlag := true; Len := 1; Statement[Pointer] := copy(Line[Y],First,Len); End; Until KFlag; Pointer := (Pointer + 1); End; End; Pointer := (Pointer - 1); End; Procedure PrintliinningOfField; 19: CursorLeft; 24: CursorDown; 25: DeleteLine; 26: EraseField; 27: Quit; 127: DeleteCharacter; End; If not Flag2 then PrintText; Flag2 := true; Until Flag1; Clrscr; End; Procedure ParseLines; Begin Pointer := 1; For Y := 1 to 24 do Begin X := 1; First := 0; Last := 0; Kflag := false; Found := false; Repeat TestLine := Line[Y]; .. '); FillLines; ParseLines; PrintLines; WriteDataFile; ClrScr; End.r[X,Y]); End; X := (X+1); If X > 80 then X := 80; Gotoxy(X,Y); End; If Y = 24 then Begin Gotoxy(X,Y); If X < 80 then Begin Ltr[X,Y] := Key; Write(Ltr[X,Y]); End; X := (X+1); If X > 80 then X := 80; Gotoxy(X,Y); End; End; Begin Y := 1; X := 1; Flag1 := false; Gotoxy(X,Ynes; Var Disk: Text; LocalFilename: String[12]; Begin Clrscr; LocalFilename := concat(Filename,'.LIB'); Assign(Disk,LocalFilename); Rewrite(Disk); Writeln(Disk,'Procedure ',ProcedureName,';'); Writeln(Disk,'Begin'); Writeln(Disk,' Clrscr;'); For I := 1 to Pointer do Begin Writeln(Disk,' GotoXY(',HP[I],',',VP[I],');'); Writeln(Disk,' Write(''',Statement[I],''');'); End; Writeln(Disk,'End;'); Close(Disk); End; Procedure Writ Key := TestLine[X]; If Key <> (' ') then Begin Found := true; Kflag := true; First := X; VP[Pointer] := Y; HP[Pointer] := X; End; X := (X + 1); If X > 80 then KFlag := true; Until KFlag; KFlag := false; If Found then Begin X := 80; Repeat Key := TestLine[X]; If Key <> (' ') then Begin KFlag); Repeat Flag2 := false; Read(Kbd,Key); Num := ord(Key); Case Num of 0: Help; 1: LeftEnd; 2: CenterText; 3: EndOfField; 4: CursorRight; 5: CursorUp; 6: RightEnd; 8: CursorLeft; 9: InsertCharacter; 10: CursorDown; 11: CursorUp; 12: CursorRight; 13: CarriageReturn; 14: InsertLine; 17: DeleteToEndOfLine; 18: BegeDataFile; Var LocalFilename: String[12]; Begin LocalFileName := concat(Filename,'.DAT'); Assign(Disk1,LocalFilename); Rewrite(Disk1); With ScreenData do Begin For Y := 1 to 24 do Begin; XLine[Y] := Line[Y]; End; Write(Disk1,ScreenData); Close(Disk1); End; End; Begin Clrscr; ClearLines; FirstScreen; FileScreen; ReadDataFile; FillArray; HelpScreen; Editscr; Gotoxy(31,12); Write('Please stand by.  ÃÉÍ«Copyright (C) 1984 BORLAND Inc‚A Kaypro 4-84nd IVctedP=  ERC0B0~·7È#õå~Íáñ=ÈóÍ% ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€Ü�Ô©æîÅÕåÝåýåÍ£}Ùå!å!"8áãõÅÕ~#·(åÍáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨ÍZ!¢ÍÐ*ºÔBáÑÁñÉõÅÕå!´éõÅÕå!®àõ:¼·(ÅÕå=2¼!ÈÍZáÑÁñÉõ:¼· ÷ÅÕå<2¼!ÂåõÅÕå!¼ÛõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÑ:ŸO:�ƒÍ!ðÍÐ* ÍBáÑÁñÉÍ� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂuëñðHåÍ\Ë<ËÑëÍÞëËzÈ5Í+È)ýÉÍ+ÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úHºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ͬèͬdͬ ͬ} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~Í„Ö08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>ÃwÝáͦWáͧ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯ xæÆ0ýwý#xæGÅÕåË%ÍP Ë%ÍP ëãÑãíZëáãíJDMáË%ÍP = ÈñÁýáÉýåá_~6þ5Øúi+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|ÍC ÍC „gãíZëáãíJDMá0ÍD ,7È}Æo˸ÉÍ ¾ #øyîO!@9ùi&ÝéÍ  ë¶¾ â#÷ÚÍ ¶w#ùëùÝéÍ /¦w#øï!ð ë!›45(É!.+/ –0ü†õyþ0(ñíÉ d!kÃZ!{ÃZ͈æ͈o&Éô  áÁå:á·(yþ ÕÅÍ |µ(Íþ ÍþÊÅÁÑ*é"ÛÕx2áy·( >Ã28!?"9!É í°!á¸í°áí°>2گà Ã:ÃDÃ]ÃSÃXÃNÃ]ÃDÿ í[Ûþ (ú!eÍ}Í„þA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍyÍVþ. ÍV!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(Í„w#ßÉ>?> w#üÉþaØþ{ÐÖ É|Í’}õÍ›ñæÆ�'Î@'Ãè¯7Ë|À|·}È>ÿÉ"ÍíCß"í6#ûëÑùü "Ïë"ÕÍ�Í©éå*Ï·íB"Ïí[Í·íRëáÚ5í°É*Ïí°"ÏÙÉ^#V#ÙÍaÙ}.�•õ; ÙÍOÙÍJ ÅÕåÙ,ÍÖ ÙáÑÁ; ÝåÝ!U >ÍýÝá,ÙÍk-ÙÍÖ ñÅÕåo&0%ÍÑÙ,Í` ÙáÑÁÍÖ }þgÚ; É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍkÙ·Ëxõ˸; }þˆ0GÅÕå,Í™åË<Ë}áõÍÑ,-(-ÙñáÑÁõÍJ ÝåÝ!Ù >ÍÝáñ0 õÙÍaÙÍ` ñ…o8 ñÈÙÍOþ á>Ãum.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍOÙ¯Ëx(<˸õͨ 8Ù; ñËÿõÙÏŽé!~JÙͨ 0Í÷OÝ!—>ÙÝÍ<Ùͨ 8 = ìÙ ÝÙÙÍ7ËøÍÖ ÅÕåÍ<Í` ÙÍOÍÖ ÙáÑÁ; ÝåÍ÷ÝáÙÍ7ÍÖ ñ0 õÙÍW-ÍJ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!Ó>ÅÕåxñW^‘8/ÃwÍÖ Ð>ÃuÍJ õÍuÍ` íÙ}·Ù>(è; àÙËxÙÂQ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍC ,= ù(Ùñæ€ Í[ 0%ÍD ·, 7 Í� ?õ(8ÙÍu Ëx ÍO - öÍ; ñ8˸·ÙáÑÁÙÉÙËxÙÂÝ ÍX ÍÝ Ø,-Èxî€GÉÙ}·ÙÊ; }·ÈÙ…ÙÍ ÅÕåÝ9Í; Ù.Ù>Ý#ÝnË0Í[ ÍD = ñÙ-Ù åÝnûËx ÍP ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ì; É}·ÈÙ•Ù?Í åååÝ9Ù.Ù>Í� 8Íu ?Ë= ÝuÝ+Ù-Ù(>ÍO 0ßÍu ·áÍO 8Í ¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍŠ¦!"9ù!(#Ýé>¯2æýá*ÛͲ¯á"âýå|·>"Ê :æ·( ͆ *â6#wÉÍ÷*â6#6 ë!\$í°É!¶Ååí[Ûþ (úÍ„–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍîÍ$*â#~þ ͶÍ$*â:æ·> >w###6ÀÃÖþ þ #6++pÉ>¯2æíSäÍ-Í$Ͷ:Ù·À*â6###ww#w$w#wÖÿ:æ· åÍôá##N#F*ä·íBÈ>�à å¯w#w#í[äs#ráÃó>¯2æÍSÍ$ͶÍ$*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍß*â ë:æ·( ÕÍÑñÅÍÁ<Àxà *â6#ûÉ"â#~+þ 2ËN(>Í’Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍŠ¶wÝéÝáÑ}“8÷�Ãu·íR·íB0 É>‘î·íRëê@ðøÉÕë·íRëáë·íR!È+Éͨ õÍz ð·íR!À+Éͨ õÍz ðÍ<!Ð+Éͨ õÍz ðÍ<!ÈØ+Éͨ ôÍz ïÍ<!ÈØ#Éͨ ôÍz ïÍ<!Ø+Éͨ õÍz ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍJëÍJëDM¯go>íjíB0 7?ËË= ðõÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.  :Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍŸ*â-¯w#wÕÿw#ÍóÍŸÀ"â~æÈ·ÍÀ ëÍ<À@ýá*ÛͲ¯áýåÍÀåÍ÷áåë!\ í°á åëÍÑ<Ê®!\$í°É>à >¯2æÍÀ*ß|µ>! ë*â \$í°\Í<(Ï!ý€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍÂÈ> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍ<áÉÝáÝå"âËF( #~þÀ#6Ãe>Îå!ÊÍ[áÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍwþ (=þ(&þ("þ(þ :á·(ßÃNþ 8Øyº(Ô~#ÍèÌúx+Í% (½ï6Éå*â#~þáÉÍÂÈÍ[þÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íõþ 8Íèþ(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%ÃÆ}Í„oÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍ%^C User break1:Ù·ÈÝáõÍ% I/OÝáÍ% Run-timeÍ% error Í’Í%, PC=Ýåáí[Õ·íR"×Í�Í% Program aborted*ßé1!Àä¸ÿÍ�!9$­äͲÃ3$ýáá}2ºäá}2»äýå!"å!Áíi*ºä&å! ÍÑÙáÍÑÍÉ Í§"´ä*ºä&å! å*´äÑÍÄÑë·íR"²ä!å*´äÑÍÄå*²äÑ}2ºä! å*»ä&Áíi!$å*ºä&ÁíiÉÍc!å!ÍÍRÍ�Set Clock ProcedureÍb!å!ÍÍRÍ�Please answer the following:Íb!å!ÍÍRÍ�"Month : 1 = JanuaryÍb!.å!ÍÍR!:*â###w* N#Fë·íB ÈÕåÍŸÑár+sÉ>‘à ÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍU·íR!À#ÉÍUëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æÊóx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>à ÁÑíSâÅåÍRÑ·íRÚ*â s#r$ s#rÉ"äíSæëá"â! N#Fë·íB(^x± *â 6#ûí[âÍ<(H*â! íKäq#p##ëíKæÅÕÍí[â!Í· *â! 4 #4Ñ!€ëÁ x± Õ*â$ éÝ*â>ðÃw"òëáã"ô{æü_!í"ëÝ*íÝnÝf}´(HíR0ÝnÝfåÝ"ëÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝp (c) August, 1985 by Mike Dingacci, MD This material is hereby placed in the public domain. The author accepts no responsibility for the accuracy of the software, nor for any problems which may result from its use. - RMD - Comments or questions to: P.O. Box 1124 Fallon, Nevada 89406 -------------------------------------------------------------- TRUN.DOC --- ÌáñJ= ÍB== ͯ}8= ͵}/Í­ !*â###å~Æ-_~áþ(4òQ6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍÌÍ[þ ( þ (þ (þ ÍÖè!]Í[þ (þ (þ (þ(w#(ÍÖãÍÂÌÖ6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7à ëÍ Í[ÃÖÍÖÉ>¯OÅÍkÁͼÈÅåÍÁÑÁÍÎØÌMës #rëÉÍkͼÈÅåÍpÙáÁÍÎØÙÌX ÙáåÍÌÍ[þ ÍÖôÍ[þ (þ( #w(ÍÖêÍÂÌÖáqÉ*â#~þÊáÍ[þ (þÈÍÖñÍ ÍÖþ ÀÃÖ*â##~þÈ6ÉÅÕåÍœáÑÁÉOÍ$*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í¡È>ðà *æ:è¾È4^qÉ}Ã’ÁÑÅÝ*ÛË|(ÍòÍb!-å!ÍÍRÍ� 12 = DecemberÍb!å!Í!­äÍ+ÍíÍb*­ä&åÍQ!å! ÍkÍËEÊ'!!å*­ä&åÍç!å! ÍÍRÍ�Day of Month : 1 . . 31Í�Íb!&å! Í!­äÍ+ÍíÍb*­ä&åÍQ!å!ÍkÍËEÊ›!!å*­ä&åÍç!å! ÍÍRÍ�!Day of Week : 1 = SundayÍb!.å! ÍÍR!:ÍòÍb!.å!ÍÍRÍ� 7 = SaturdayÍb!%å! Í!­äÍ+ÍíÍb*­ä&åÍQ!å!ÍkÍËEÊD"!å*­ä&åÍç!å!ÍÍRÍ�Hour : 0 . . 23Í�Íb!å!Í!­äÍ+ÍíÍb*­ä&åÍQ!å!ÍkÍËEʸ"!å*­ä&åÍç!å!ÍÝåÑ*ës#rÑ*ôs#rÉÝåá"Í*ò ÝåÁ Ú5íKÏíB!Úð>ÿÃuëáã~#fo{æü_ë"ò*íåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKòýqýpýuýtÝsÝrÝåáÝNÝFÍÄ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ííSíÕÝáÝuÝtíKòÝqÝpë ·íRÀÕýá*Í·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Í6#ûÉÍ *öÉÍ *øÉ!"ö"øÝ*íÝNÝFy°(*ö "ö*ø·íB0íCøÝnÝfåÝáØ*Ïûÿ í[Í·íRØë*ö"ö*ø·íRÐíSøÉí[Ís#rÉ^#VíSÍÉ>¯O"æ¯w2Ùx2è!ê"âá"äá ÍöÍ@*äé>¯2ê"æ!ê"âá"äá"è!\Ͳ¯*è:ê· ÍîÍ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±----- Turbo Pascal requires that every program must have included within it the run-time pascal library. This is usually not a problem unless there are many Turbo programs on a disk. In this case, there is a large overhead of storage space for all those duplicate pascal libraries in every program. One method of solving this problem has been the inclusion of a "menu" program in packages of programs distributed on the same disk. An initializing program is used to "chain" to a CHN-typÍMëëË|( ÍMÝ6-Ý#ÕÍ�áͦí[ÛÝåá·íRë“8 (G> Í’ùCÈ~Í’#÷ÁÑÙáÑÁÙÅÝ*ÛÕÍôÇÁÑÅͦËC!h Ç!lÀTRUEFALSEͦ!9^#Í(ÑùÕÉá~#·(G~Í’#ùé> Í’> Ã’ "âËF!ÈÍ[¸(þÀ#ÉåÍRë·íRá0Íô*â4À#4É>™Ã åÍR·íR *â4 #4(áÍóÒ>òÜ>¯2çÍ$ë*âËV(/Ë–:ç·(#~+· x· y·ú2ÅÕ!͵ÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍŒí âX<òN=<ÍŒ*â###æw ÅÕåÍŸáÑÁ Õ*Ñ4 #4x±ÂüëÉ>™>ðà õ:ç·(ëñÉ"âÍŸÈè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍRÑ·íR8A*â N#F#s#rÍ$ 0}æ)ëíjëS\ÍRÍ�Please enter the next minuteÍb!å!ÍÍRÍ�and when the second handÍb!å!ÍÍRÍ� reaches 12Íb!å!ÍÍRÍ�!Next Minute : 0 . . 59Íb!%å!Í!­äÍ+ÍíÍb*­ä&åÍQ!å!;ÍkÍËEʪ#! å!Áíi!$å!Áíi! å!Áíi!$å!Áíi!å*­ä&åÍçÍcÍRÍ� Clock SetÍ�ÍbÍRÍ�ÍbÉÍ` ÃÅÍíÍb*­ä&åÍQ!å!;ÍkÍËEʪ#! å!Áíi!$å!Áíi! å!Áíi!$å!  e menu program. The pascal library is placed in memory when the initializing program is run and the menu program contains a menu or list of the various CHN-type programs on the disk. The user chooses the appropriate program to run and the menu program chains to that program. At the end of the run, the chosen program chains back to the menu again. In this way, the user can chain back and forth from the menu to the various programs on the disk, using the same pascal library already containedhose who have already written programs using Turbo Pascal v3.0, however, parameters may be more easily passed by using the standard functions ParamStr and ParamCount. The second version, TRUN3, therefore, uses those standard Turbo v3.0 functions for parsing the command line. Program Variables: ----------------- Cmdline: Contains the entire un-parsed command line. Used for passing command line paramters when chaining to CHN programs. This should  p. 1 The advantages of a program of this type are obvious. You can now compile all your programs to CHN files instead of COM files, thus saving 8k+ of space for each program on the disk. In situations where files are transferred over phone lines using modems, the advantages are even more notable. On a remote data base, one copy of TRUN could be available and all other compiled Turbo programs on the data base would be in the form of CHN files. Thimdfile before chain can occur. Cmdln: Integer varaible containing the location of the command line copy at the bottom of CCP in program TRUN2C (see comments in TRUN2C). p. 2 Ltr: Integer variable containing the number of characters (letters) in the command line. a: String variable containing a carriage return + line feed. Used for pretty fo in memory. This works well, but is limited to a finite group of programs on the distributed disk. TRUN is a program which acts as a run-time loader for any CHN-type program. TRUN loads the pascal library into memory and then chains to a specified CHN-type program. The program to be run is specified on the command line by using the syntax: TRUN filename. If no extension is specified, the loader will supply CHN as the default file extension. Example: TRUN FRAP would cha be the first variable declared in both the TRUN loader and the CHN program which is receiving command line parameters. Cmdbuffer: Contains the entire command line in versions of TRUN which use the Absolute variable declaration for the command buffer location at $80. Cmd: Contains the name of the program being chained to. An equivalent of ParamStr(1). In all versios would save 8k+ of data to be either uploaded or downloaded with each compiled Turbo pro- gram. On services like CompuServe, this could save you a fortune, especially if you only have a 300-baud modem. In order to work under ALL CP/M and MS-DOS versions of Turbo Pascal, TWO versions of TRUN are needed. The first version, TRUN28, contains routines for parsing the command line with earlier CP/M and MS-DOS Turbo versions 1.0 and 2.0. It should also work just as well with version 3.0. For trmatting of text in the source file, while saving a few bytes of space. Z: Integer variable increments to count the command line parameters as they are built. I: Integer variable increments as a counter in "For" and "While" loops. For CP/M Programmers -------------------- Most CP/M programs which parse the command line have an intrinsic limitation of 32 characters for the in to program FRAP.CHN. To use an extension other than CHN for chained programs, an extension may be specified on the command line. Example: TRUN FRAP.C30 would chain to program FRAP.C30. If no program is specified on the command line, the program will display an instructional message and then ask for the name of the program to be run. The same syntax for default extension holds for program names entered via this prompt. If a blank line is entered, the program ends. ns of TRUN, a file extension of ".CHN" is added to this variable if no extension is specified in the original file name taken from the command line. This may be changed to any file extension preferred. For instance, you may want to use ".C3N" as the extension for CHN-type files to be used with Turbo v3.0 and TRUN3. Cmdfile: Cmd variable is assigned to the file variable C  length of the command line. This is because, in CP/M, the TPA starts at address 0100 hex and the command buffer starts at 0080 hex. Whenever a program is loaded and run, it over-writes any part of the command tail which extends beyond 0100 hex. Since the command buffer starts at 0080 hex and it cannot extend beyond 0100 hex, its length cannot be over 20 hex or 32 characters. In Turbo Pascal's version 3.0 for CP/M, this limitation also applies when using the functions Paramcount and ParamStr for !ð ë!›45(É!.+/ –0ü†õyþ0(ñíÉ d!kÃZ!{ÃZ͈æ͈o&Éô  áÁå:á·(yþ ÕÅÍ |µ(Íþ ÍþÊÅÁÑ*é"ÛÕx2áy·( >Ã28!?"9!É í°!á¸í°áí°>2گà Ã:ÃDÃ]ÃSÃXÃNÃ]ÃDÿ í[Ûþ (ú!eÍ}Í„þA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍyÍVþ. ÍV!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(Í„w#ßÉ>?> w#üÉþaØþ{ÐÖ É|Í’}õÍ›ñæÆ�'Î@'Ãè¯7Ë|À|·}È>ÿÉ"ÍíCß"í6#ûëÑùü "Ïë"ÕÍ�Í©éå*Ï·íB"Ïí[Í·íRëáÚ5í°É*Ïí°"ÏÙÉ^#V#xñW^‘8/ÃwÍÖ Ð>ÃuÍJ õÍuÍ` íÙ}·Ù>(è; àÙËxÙÂQ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍC ,= ù(Ùñæ€ Í[ 0%ÍD ·, 7 Í� ?õ(8ÙÍu Ëx ÍO - öÍ; ñ8˸·ÙáÑÁÙÉÙËxÙÂÝ ÍX ÍÝ Ø,-Èxî€GÉÙ}·ÙÊ; }·ÈÙ…ÙÍ ÅÕåÝ9Í; Ù.Ù>Ý#ÝnË0Í[ ÍD = ñÙ-Ù åÝnûËx ÍP ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ì; É}·ÈÙ•Ù?Í åååÝ9Ù.Ù>Í� 8Íu ?Ë= ÝuÝ+Ù-Ù(>ÍO 0ßÍu ·áÍO 8 parsing the command line. Fortunately, whenever a program is loaded into the TPA, CP/M places a copy of the entire command line in high memory near the start of the CCP. For those who wish to parse command lines longer than 32 characters, this copy provides a convenient substitute for the command buffer. For CP/M users who may need this longer command line, a third version of TRUN, named TRUN2C, is provided which parses the copy in high memory instead of the command buffer. It should work witÕ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍŠ¶wÝéÝáÑ}“8÷�Ãu·íR·íB0 É>‘î·íRëê@ðøÉÕë·íRëáë·íR!È+Éͨ õÍz ð·íR!À+Éͨ õÍz ðÍ<!Ð+Éͨ õÍz ðÍ<!ÈØ+Éͨ ôÍz ïÍ<!ÈØ#Éͨ ôÍz ïÍ<!Ø+Éͨ õÍz ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍJëÍJëDM¯go>íjíB0 7?ËË= ðÃÉÍ«Copyright (C) 1984 BORLAND Inc‚AKayproDelete2/920/92P= ERT###&&&~·7È#õå~Íáñ=ÈóÍ% ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€Ü�Ô©æîÅÕåÝåýåÍ£}Ùå!å!"8áãõÅÕ~#·(åÍáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨ÍZ!¢ÍÐ*ºÔBáÑÁñÉõÅÕå!´éõÅÕå!®àõ:¼·(ÅÕå=2¼!ÈÍZáÑÁñÉõ:¼· ÷ÅÕå<2¼!ÂåõÅÕå!¼ÛõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÑ:ŸO:�ƒÍ!ðÍÐ* ÍBáÑÁñÉÍ� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂuh all three CP/M versions of Turbo Pascal, operating with most standard varieties of CP/M. It was tested during development using Kaypro's CP/M versions 2.2F and 2.2G. p. 3 sing Kaypro's CP/M versions 2.2F and 2.2G. p. 3 ëñðHåÍ\Ë<ËÑëÍÞëËzÈ5Í+È)ýÉÍ+ÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úHºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ͬèͬdͬ ͬ} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~Í„Ö08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>ÃwÝáͦWáͧ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯ÍýÝá,ÙÍk-ÙÍÖ ñÅÕåo&0%ÍÑÙ,Í` ÙáÑÁÍÖ }þgÚ; É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍkÙ·Ëxõ˸; }þˆ0GÅÕå,Í™åË<Ë}áõÍÑ,-(-ÙñáÑÁõÍJ ÝåÝ!Ù >ÍÝáñ0 õÙÍaÙÍ` ñ…o8 ñÈÙÍOþ á>Ãum.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍOÙ¯Ëx(<˸õͨ 8Ù; ñËÿõÙÏŽé!~JÙͨ 0Í÷OÝ!—>ÙÝÍ<Ùͨ 8 = ìÙ ÝÙÙÍ7ËøÍÖ ÅÕåÍ<Í` ÙÍOÍÖ ÙáÑÁ; ÝåÍ÷ÝáÙÍ7ÍÖ ñ0 õÙÍW-ÍJ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!Ó>ÅÕå ÌáñJ= ÍB== ͯ}8= ͵}/Í­ !*â###å~Æ-_~áþ(4òQ6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍÌÍ[þ ( þ (þ (þ ÍÖè!]Í[þ (þ (þ (þ(w#(ÍÖãÍÂÌÖ6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7à ëÍ Í[ÃÖÍÖÉ>¯OÅÍkÁͼÈÅåÍÁÑÁÍÎØÌMës #rëÉÍkͼÈÅåÍpÙáÁÍÎØÙÌX ÙáåÍÌÍ[þ ÍÖôÍ[þ (þ( #w(ÍÖêÍÂÌÖáqÉ*â#~þÊáÍ[þ (þÈÍÖñÍ ÍÖþ ÀÃÖ*â##~þÈ6ÉÅÕåÍœáÑÁÉOÍ$*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í¡È>ðà *æ:è¾È4^qÉ}Ã’ÁÑÅÝ*ÛË|(Í ¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍŠ¦!"9ù!(#Ýé>¯2æýá*ÛͲ¯á"âýå|·>"Ê :æ·( ͆ *â6#wÉÍ÷*â6#6 ë!\$í°É!¶Ååí[Ûþ (úÍ„–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍîÍ$*â#~þ ͶÍ$*â:æ·> >w###6ÀÃÖþ þ #6++pÉ>¯2æíSäÍ-Í$Ͷ:Ù·À*â6###ww#w$w#wÖÿ:æ· åÍôá##N#F*ä·íBÈ>�à å¯w#w#í[äs#ráÃó>¯2æÍSÍ$ͶÍ$*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍß*â ë:æ·( ÕÍÑñÅÍÁ<Àxà *â6#ûÉ"â#~+þ 2ËN(>Í’ÝåÑ*ës#rÑ*ôs#rÉÝåá"Í*ò ÝåÁ Ú5íKÏíB!Úð>ÿÃuëáã~#fo{æü_ë"ò*íåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKòýqýpýuýtÝsÝrÝåáÝNÝFÍÄ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ííSíÕÝáÝuÝtíKòÝqÝpë ·íRÀÕýá*Í·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Í6#ûÉÍ *öÉÍ *øÉ!"ö"øÝ*íÝNÝFy°(*ö "ö*ø·íB0íCøÝnÝfåÝáØ*Ïûÿ í[Í·íRØë*ö"ö*ø·íRÐíSøÉí[Ís#rÉ^#VíSÍÉ>¯O"æ¯w2Ùx2è!ê"âá"äá ÍöÍ@*äé>¯2ê"æ!ê"âá"äá"è!\Ͳ¯*è:ê· ÍîÍ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±õÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.ÍMëëË|( ÍMÝ6-Ý#ÕÍ�áͦí[ÛÝåá·íRë“8 (G> Í’ùCÈ~Í’#÷ÁÑÙáÑÁÙÅÝ*ÛÕÍôÇÁÑÅͦËC!h Ç!lÀTRUEFALSEͦ!9^#Í(ÑùÕÉá~#·(G~Í’#ùé> Í’> Ã’ "âËF!ÈÍ[¸(þÀ#ÉåÍRë·íRá0Íô*â4À#4É>™Ã åÍR·íR *â4 #4(áÍóÒ>òÜ>¯2çÍ$ë*âËV(/Ë–:ç·(#~+· x· y·ú2ÅÕ!͵ÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍŒí âX<òN=<ÍŒ*â###æw ÅÕåÍŸáÑÁ Õ*Ñ4 #4x±ÂüëÉ>™>ðà õ:ç·(ëñÉ"âÍŸÈè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍRÑ·íR8A*â N#F#s#rÍ$ 0}æ)ëíjëS\:Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍŸ*â-¯w#wÕÿw#ÍóÍŸÀ"â~æÈ·ÍÀ ëÍ<À@ýá*ÛͲ¯áýåÍÀåÍ÷áåë!\ í°á åëÍÑ<Ê®!\$í°É>à >¯2æÍÀ*ß|µ>! ë*â \$í°\Í<(Ï!ý€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍÂÈ> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍ<áÉÝáÝå"âËF( #~þÀ#6Ãe>Îå!ÊÍ[áÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍwþ (=þ(&þ("þ(þ :á·(ßÃNþ 8Øyº(Ô~#ÍèÌúx+Í% (½ï6Éå*â#~þáÉÍÂÈÍ[þÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íõþ 8Íèþ(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%ÃÆ}Í„oÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍ%^C User break1:Ù·ÈÝáõÍ% I/OÝáÍ% Run-timeÍ% error Í’Í%, PC=Ýåáí[Õ·íR"×Í�Í% Program aborted*ßé1!€Õ¸ÿÍ�!&?ÔͲÃÏ#Íc!å!ÑÍ5z³Ê Õ"zÔÍRÍ�Íb*zÔ#ÑÃõÍRÍ�? TRUN v. 2.8 - Compiled with Turbo Pascal v. 2.0 !CÔÍ !Íq!CÔÍ !ÍqÍ�? This is a run-time loader, compiled with the DEFAULT START!CÔÍ !ÍqÍ�? ADDRESS (the end of the pascal library plus 1). For proper(ÍC Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%ÍP Ë%ÍP ëãÑãíZëáãíJDMáË%ÍP = ÈñÁýáÉýåá_~6þ5Øúi+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|ÍC ÍC „gãíZëáãíJDMá0ÍD ,7È}Æo˸ÉÍ ¾ #øyîO!@9ùi&ÝéÍ  ë¶¾ â#÷ÚÍ ¶w#ùëùÝéÍ /¦w#øï*â###w* N#Fë·íB ÈÕåÍŸÑár+sÉ>‘à ÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍU·íR!À#ÉÍUëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æÊóx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>à ÁÑíSâÅåÍRÑ·íRÚ*â s#r$ s#rÉ"äíSæëá"â! N#Fë·íB(^x± *â 6#ûí[âÍ<(H*â! íKäq#p##ëíKæÅÕÍí[â!Í· *â! 4 #4Ñ!€ëÁ x± Õ*â$ éÝ*â>ðÃw"òëáã"ô{æü_!í"ëÝ*íÝnÝf}´(HíR0ÝnÝfåÝ"ëÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝp  !CÔÍ !ÍqÍ�? handling of variables, CHN programs run with this loader must!CÔÍ !ÍqÍ�? be compiled with this same start address. To run a CHN file!CÔÍ !ÍqÍ�? with a DIFFERENT start address, a new version of this loader!CÔÍ !ÍqÍ�? may be compiled with a start address IDENTICAL to that of the!CÔÍ !ÍqÍ�? program to be run. !CÔÍ !Íq!CÔÍ !ÍqÍbÍRÍ�?To avoid this message, use the syntax: TRUN filename !CÔÍ !Íq!CÔÍ !accept no responsibility for the accuracy of the software, nor for any problems which may result from its use. - RMD - Comments or questions to: P.O. Box 1124 Fallon, Nevada 89406 } Type Cmdstr = String[127]; { Max = 32 char in CP/M-80 because the TPA } { starts at $100, overwriting everything } o run a CHN file' ,a, ' with a DIFFERENT start address, a new version of this loader' ,a, ' may be compiled with a start address IDENTICAL to that of the' ,a, ' program to be run. ' ,a,a); { Above message for CP/M-80. Use the following for CP/M-86 and MS-DOS versions of TRUN: ' This is a run-time loader compiled with DEFAULT MEMORY SIZE.' ,a, ' For proper handling of variables with MS-DOS and CP/M-86, the' ,aÍqÍ�?Filename is the name (without extension) of CHN program to run.!CÔÍ !Íq!CÔÍ !ÍqÍ�Name of program to run: Íb!|ÔÍ+Í.Í_Íb!å!|ÔÍ ÍmÑÍ5z³ÊÎ#Õ"zÔ!|Ôå*zÔÑå!|Ôå*zÔÑn&Í(ëás*zÔ#Ñà#É! å! e.åÍl Í!CÔͲÍ!|ÔͲ!"zÔ!"vÔ!€Í !üÔͲ!üÔÍ Ím"xÔ*zÔå*xÔÑͯËEʨ$*zÔå!Ñ"zÔ*vÔå!ÑÍNËEÊ€$!üÔå*zÔÑn&å! ÑÍaËEÊ€$!|ÔÍ !üÔå*zÔÑn&e.åÍ!|ÔͲ!üÔå*zÔÑn&å! ÑÍNËEÊ¥$*vÔå!Ñ"vÔÃ$!|ÔÍ ÍÍ\ËEʽ$Íç!.e.å!|ÔÍ Í|å!ÑÍNËEÊó$!|ÔÍ Í.CHNÍ!|ÔͲ!|ÔÍ Í.CH { beyond 32 characters in the command buffer. } { Theoretical max = 127, if your DOS allows. } Var Cmdline,Cmd : Cmdstr; { Declared 1st for easy passage to .CHN file } Cmdbuffer : Cmdstr Absolute $80; {--> for CP/M-80 } {*** Cmdbuffer : Cmdstr Absolute Dseg:$80; --> for CP/M-86 ***} {*** Cmdbuffer : Cmdstr Absolute Cseg:$80; --> for MS-DOS ***} I,Ltr,Z : Integer; Cmdfil : File; a : String[Program TRUN; { TRUN runs a program specified on the command line. This version works with earlier versions of CP/M-80 Turbo Pascal. Change the variable "Cmdbuffer" as shown in order to convert this version of TRUN for use with MS-DOS or CP/M-86 Turbo (v. 1 & 2). (c) August, 1985 by: Mike Dingacci, MD Program is hereby placed in the public domain. It may be used by anyone for any purpose. The author will , ' loader and the CHN programs to be run must all have the same' ,a, ' respective CODE SEGMENT, DATA SEGMENT, and FREE MEMORY sizes.' ,a, ' In order to run CHN programs with DIFFERENT memory values,' ,a, ' compile a new version of this loader whose memory values are' ,a, ' IDENTICAL to those of the files to be run. ' ,a,a,} Write( 'To avoid this message, use the syntax: TRUN filename ' ,a,a, 'Filename is the name (withoNÍoËEÊ&ÍRÍ�TRUN v. 2.8 (08/25/85): Íb!|ÔÍ ÍR!ÍqÍ�ÍbÍRÍ�Íb!FÔå!|ÔÍ Í=!FÔÍ´Í5å!ÑÍaËEÊ&ÍRÍ�- - - - - - - - - - - > !Íò!|ÔÍ !ÍqÍ� NOT found. !CÔÍ !Íq!CÔÍ !ÍqÍ�Ã28!?"9!É í°!á¸í°áí°>2گà Ã:ÃDÃ]ÃSÃXÃNÃ]ÃDÿ í[Ûþ (ú!eÍ}Í„þA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍyÍVþ. ÍV!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(Í„w#ßÉ>?> w#üÉþaØþ{ÐÖ É|Í’}õÍ›ñæÆ�'Î@'Ãè¯7Ë|À|·}È>ÿÉ"ÍíCß"í6#ûëÑùü "Ïë"ÕÍ�Í©éå*Ï·íB"Ïí[Í·íRëáÚ5í°É*Ïí°"ÏÙÉ^#V#lt <> 0 Then Write( '- - - - - - - - - - - > ', Chr(7), Cmd, ' NOT found. ' ,a,a, 'Check disk and try again! '); End; END. {TRUN} ÓÿÙ&Ü?ÎåÏ#ø £#Î#($¨$D$€$]$€$—$¥$¸$½$Ø$ó$%&j%&Í�xñW^‘8/ÃwÍÖ Ð>ÃuÍJ õÍuÍ` íÙ}·Ù>(è; àÙËxÙÂQ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍC ,= ù(Ùñæ€ Í[ 0%ÍD ·, 7 Í� ?õ(8ÙÍu Ëx ÍO - öÍ; ñ8˸·ÙáÑÁÙÉÙËxÙÂÝ ÍX ÍÝ Ø,-Èxî€GÉÙ}·ÙÊ; }·ÈÙ…ÙÍ ÅÕåÝ9Í; Ù.Ù>Ý#ÝnË0Í[ ÍD = ñÙ-Ù åÝnûËx ÍP ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ì; É}·ÈÙ•Ù?Í åååÝ9Ù.Ù>Í� 8Íu ?Ë= ÝuÝ+Ù-Ù(>ÍO 0ßÍu ·áÍO 8haracters } While I < Ltr Do Begin { Routine builds ParamStr(1) } I := I+1; { (could build 2, 3, etc.) } If Z = 1 Then If Cmdline[I] <> ' ' Then Cmd := Cmd + Cmdline[I]; If Cmdline[I] = ' ' Then Z := Z + 1; End; If Cmd = '' Then Instruct; { Instructions if no parameters. } If Pos('.',Cmd) = 0 Then Cmd := Cmd+'.CHN'; { If no extent then = '.CHN' } If Cmd <> '.CHN' Then Begin Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍŠ¶wÝéÝáÑ}“8÷�Ãu·íR·íB0 É>‘î·íRëê@ðøÉÕë·íRëáë·íR!È+Éͨ õÍz ð·íR!À+Éͨ õÍz ðÍ<!Ð+Éͨ õÍz ðÍ<!ÈØ+Éͨ ôÍz ïÍ<!ÈØ#Éͨ ôÍz ïÍ<!Ø+Éͨ õÍz ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍJëÍJëDM¯go>íjíB0 7?ËË= ðÃÉÍ«Copyright (C) 1984 BORLAND Inc‚AKayproDelete2/920/92P= ERT###&&&~·7È#õå~Íáñ=ÈóÍ% ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€Ü�Ô©æîÅÕåÝåýåÍ£}Ùå!å!"8áãõÅÕ~#·(åÍáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨ÍZ!¢ÍÐ*ºÔBáÑÁñÉõÅÕå!´éõÅÕå!®àõ:¼·(ÅÕå=2¼!ÈÍZáÑÁñÉõ:¼· ÷ÅÕå<2¼!ÂåõÅÕå!¼ÛõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÑ:ŸO:�ƒÍ!ðÍÐ* ÍBáÑÁñÉÍ� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂu { Chain to CHN program named -- } { (unless it is a blank line). } Write('TRUN v. 2.8 (08/25/85): '); { Same v. as Turbo used to compile} Writeln(Cmd); Writeln; Assign(Cmdfil,Cmd); {$I-} Chain(Cmdfil) {$I+}; { 'file not found' error-trapping } { starts on chain to cmdfil and } { error message follows: } If IoresuëñðHåÍ\Ë<ËÑëÍÞëËzÈ5Í+È)ýÉÍ+ÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úHºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ͬèͬdͬ ͬ} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~Í„Ö08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>ÃwÝáͦWáͧ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯ÍýÝá,ÙÍk-ÙÍÖ ñÅÕåo&0%ÍÑÙ,Í` ÙáÑÁÍÖ }þgÚ; É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍkÙ·Ëxõ˸; }þˆ0GÅÕå,Í™åË<Ë}áõÍÑ,-(-ÙñáÑÁõÍJ ÝåÝ!Ù >ÍÝáñ0 õÙÍaÙÍ` ñ…o8 ñÈÙÍOþ á>Ãum.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍOÙ¯Ëx(<˸õͨ 8Ù; ñËÿõÙÏŽé!~JÙͨ 0Í÷OÝ!—>ÙÝÍ<Ùͨ 8 = ìÙ ÝÙÙÍ7ËøÍÖ ÅÕåÍ<Í` ÙÍOÍÖ ÙáÑÁ; ÝåÍ÷ÝáÙÍ7ÍÖ ñ0 õÙÍW-ÍJ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!Ó>ÅÕå ÌáñJ= ÍB== ͯ}8= ͵}/Í­ !*â###å~Æ-_~áþ(4òQ6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍÌÍ[þ ( þ (þ (þ ÍÖè!]Í[þ (þ (þ (þ(w#(ÍÖãÍÂÌÖ6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7à ëÍ Í[ÃÖÍÖÉ>¯OÅÍkÁͼÈÅåÍÁÑÁÍÎØÌMës #rëÉÍkͼÈÅåÍpÙáÁÍÎØÙÌX ÙáåÍÌÍ[þ ÍÖôÍ[þ (þ( #w(ÍÖêÍÂÌÖáqÉ*â#~þÊáÍ[þ (þÈÍÖñÍ ÍÖþ ÀÃÖ*â##~þÈ6ÉÅÕåÍœáÑÁÉOÍ$*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í¡È>ðà *æ:è¾È4^qÉ}Ã’ÁÑÅÝ*ÛË|(Í ¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍŠ¦!"9ù!(#Ýé>¯2æýá*ÛͲ¯á"âýå|·>"Ê :æ·( ͆ *â6#wÉÍ÷*â6#6 ë!\$í°É!¶Ååí[Ûþ (úÍ„–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍîÍ$*â#~þ ͶÍ$*â:æ·> >w###6ÀÃÖþ þ #6++pÉ>¯2æíSäÍ-Í$Ͷ:Ù·À*â6###ww#w$w#wÖÿ:æ· åÍôá##N#F*ä·íBÈ>�à å¯w#w#í[äs#ráÃó>¯2æÍSÍ$ͶÍ$*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍß*â ë:æ·( ÕÍÑñÅÍÁ<Àxà *â6#ûÉ"â#~+þ 2ËN(>Í’ÝåÑ*ës#rÑ*ôs#rÉÝåá"Í*ò ÝåÁ Ú5íKÏíB!Úð>ÿÃuëáã~#fo{æü_ë"ò*íåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKòýqýpýuýtÝsÝrÝåáÝNÝFÍÄ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ííSíÕÝáÝuÝtíKòÝqÝpë ·íRÀÕýá*Í·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Í6#ûÉÍ *öÉÍ *øÉ!"ö"øÝ*íÝNÝFy°(*ö "ö*ø·íB0íCøÝnÝfåÝáØ*Ïûÿ í[Í·íRØë*ö"ö*ø·íRÐíSøÉí[Ís#rÉ^#VíSÍÉ>¯O"æ¯w2Ùx2è!ê"âá"äá ÍöÍ@*äé>¯2ê"æ!ê"âá"äá"è!\Ͳ¯*è:ê· ÍîÍ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±õÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.ÍMëëË|( ÍMÝ6-Ý#ÕÍ�áͦí[ÛÝåá·íRë“8 (G> Í’ùCÈ~Í’#÷ÁÑÙáÑÁÙÅÝ*ÛÕÍôÇÁÑÅͦËC!h Ç!lÀTRUEFALSEͦ!9^#Í(ÑùÕÉá~#·(G~Í’#ùé> Í’> Ã’ "âËF!ÈÍ[¸(þÀ#ÉåÍRë·íRá0Íô*â4À#4É>™Ã åÍR·íR *â4 #4(áÍóÒ>òÜ>¯2çÍ$ë*âËV(/Ë–:ç·(#~+· x· y·ú2ÅÕ!͵ÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍŒí âX<òN=<ÍŒ*â###æw ÅÕåÍŸáÑÁ Õ*Ñ4 #4x±ÂüëÉ>™>ðà õ:ç·(ëñÉ"âÍŸÈè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍRÑ·íR8A*â N#F#s#rÍ$ 0}æ)ëíjëS\:Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍŸ*â-¯w#wÕÿw#ÍóÍŸÀ"â~æÈ·ÍÀ ëÍ<À@ýá*ÛͲ¯áýåÍÀåÍ÷áåë!\ í°á åëÍÑ<Ê®!\$í°É>à >¯2æÍÀ*ß|µ>! ë*â \$í°\Í<(Ï!ý€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍÂÈ> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍ<áÉÝáÝå"âËF( #~þÀ#6Ãe>Îå!ÊÍ[áÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍwþ (=þ(&þ("þ(þ :á·(ßÃNþ 8Øyº(Ô~#ÍèÌúx+Í% (½ï6Éå*â#~þáÉÍÂÈÍ[þÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íõþ 8Íèþ(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%ÃÆ}Í„oÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍ%^C User break1:Ù·ÈÝáõÍ% I/OÝáÍ% Run-timeÍ% error Í’Í%, PC=Ýåáí[Õ·íR"×Í�Í% Program aborted*ßé1!€Õ¸ÿÍ�!<&9ÔͲÖ$Í!üÔͲÍ!|ÔͲ!"zÔ!"vÔ*tÔn&"xÔ*zÔå*xÔÑͯËEÊà *zÔå!Ñ"zÔ!üÔÍ *tÔå*zÔÑn&e.åÍ!üÔͲ*vÔå!ÑÍNËEÊ› !üÔå*zÔÑn&å! ÑÍaËEÊ› !|ÔÍ !üÔå*zÔÑn&e.åÍ!|ÔͲ!üÔå*zÔÑn&å! ÑÍNËEÊÀ *vÔå!Ñ"vÔà ÉÍc!å!ÍÍRÍ�? TRUN v. 2.c - Compiled with CP/M (ÍC Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%ÍP Ë%ÍP ëãÑãíZëáãíJDMáË%ÍP = ÈñÁýáÉýåá_~6þ5Øúi+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|ÍC ÍC „gãíZëáãíJDMá0ÍD ,7È}Æo˸ÉÍ ¾ #øyîO!@9ùi&ÝéÍ  ë¶¾ â#÷ÚÍ ¶w#ùëùÝéÍ /¦w#øï*â###w* N#Fë·íB ÈÕåÍŸÑár+sÉ>‘à ÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍU·íR!À#ÉÍUëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æÊóx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>à ÁÑíSâÅåÍRÑ·íRÚ*â s#r$ s#rÉ"äíSæëá"â! N#Fë·íB(^x± *â 6#ûí[âÍ<(H*â! íKäq#p##ëíKæÅÕÍí[â!Í· *â! 4 #4Ñ!€ëÁ x± Õ*â$ éÝ*â>ðÃw"òëáã"ô{æü_!í"ëÝ*íÝnÝf}´(HíR0ÝnÝfåÝ"ëÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝp  Turbo Pascal v. 2.0 !AÔÍ !Íq!AÔÍ !Íq!AÔÍ !ÍqÍ�? This is a run-time loader, compiled with the DEFAULT START!AÔÍ !ÍqÍ�? ADDRESS (the end of the pascal library plus 1). For proper!AÔÍ !ÍqÍ�? handling of variables, CHN programs run with this loader must!AÔÍ !ÍqÍ�? be compiled with this same start address. To run a CHN file!AÔÍ !ÍqÍ�? with a DIFFERENT start address, a new version of this loader!AÔÍ !ÍqÍ�? may be compiled with a start address IDENTICAL to thacters). (2) Can use the initial command in the line (ParamStr(0)). (c) August, 1985 by Mike Dingacci, MD Program is hereby placed in the public domain. It may be used by anyone for any purpose. The author will accept no responsibility for the accuracy of the software, nor for any problems which may result from its use. - RMD - Comments or  End; End; {Parse} Procedure Instruct; { v. number = same as v. of Turbo used to compile } Begin ClrScr; Gotoxy(1,4); Write( ' TRUN v. 2.c - Compiled with CP/M Turbo Pascal v. 2.0 ' ,a,a,a, { ^-->use command line at ccp instead of $80 } ' This is a run-time loader, compiled with the DEFAULT START' ,a, ' ADDRESS (the end of the pascal library plus 1). For proper' ,a, ' handling of variables, CHN progat of the!AÔÍ !ÍqÍ�? program to be run. !AÔÍ !Íq!AÔÍ !ÍqÍ�?To avoid this message, use the syntax: TRUN filename !AÔÍ !Íq!AÔÍ !ÍqÍ�?Filename is the name (without extension) of CHN program to run.!AÔÍ !Íq!AÔÍ !ÍqÍ�Name of program to run: Íb!|ÔÍ+Í.Í_Íb!å!|ÔÍ ÍmÑÍ5z³Ê•$Õ"zÔ!|Ôå*zÔÑå!|Ôå*zÔÑn&Í(ëás*zÔ#ÑÃg$É! å! e.åÍl Í!AÔͲ!n&å!ÑÍÄå!Ñë·íRå!Ñ"tÔÍç!|ÔÍ ÍÍ\ËEÊç$ÍÄ !.e.å!|ÔÍ Í|å!ÑÍNË questions to: P.O. Box 1124 Fallon, Nevada 89406 } Type Cmdstr = String[127]; { 127 = max theoretical cmdline length } Var Cmdline,Cmd : Cmdstr; { Declared 1st for easy passage to .CHN file } I,Ltr,Z,Cmdln : Integer; Cmdfil : File; a : String[2]; Procedure Parse; Begin Cmdline := ''; Cmd := ''; { zero variables for below } I := 0; Z := 0; Ltr := Mem[Program TRUN2c; { TRUN runs a program specified on the command line. This version works with all versions of CP/M-80 Turbo Pascal and is designed to eliminate the 32-character limit imposed by using the command line buffer at $80. This limit exists whether the line is parsed by a program subroutine in earlier Turbo versions or by ParamStr and ParamCount functions in Turbo Pascal v. 3.00. Advantages: (1) Can parse longer command lines (up to 128 charrams run with this loader must' ,a, ' be compiled with this same start address. To run a CHN file' ,a, ' with a DIFFERENT start address, a new version of this loader' ,a, ' may be compiled with a start address IDENTICAL to that of the' ,a, ' program to be run. ' ,a,a, 'To avoid this message, use the syntax: TRUN filename ' ,a,a, 'Filename is the name (without extension) of CHN program to run.' ,a,a, 'NamEÊ%!|ÔÍ Í.CHNÍ!|ÔͲ!|ÔÍ Í.CHNÍoËEÊ9&ÍRÍ�TRUN v. 2.c (08/25/85): Íb!|ÔÍ ÍR!ÍqÍ�ÍbÍRÍ�Íb!DÔå!|ÔÍ Í=!DÔÍ´Í5å!ÑÍNËEÊ9&ÍRÍ�- - - - - - - - - - - > !Íò!|ÔÍ !ÍqÍ� NOT found. !AÔÍ !Íq!AÔÍ !ÍqÍ� ' ' Then Cmd := Cmd + Cmdline[I]; If Cmdline[I] = ' ' Then Z := Z + 1; !  e of program to run: '); Readln(Cmd); For I := 1 to Length(Cmd) Do Cmd [I] := Upcase(Cmd[I]); { Capitalize } End; {Instruct} BEGIN {TRUN} a := chr(13) + chr(10); { put CR/LF into variable a } Cmdln := mem[2] * 256 - $1600 + 7; { find start of command line (This algorithm will work even when pro- ) (bottom of CCP+7), where it (grams such as XtraKey and UniForm are ) was conveniently stored for (protected in high memory. Locatio(ñíÉ d!kÃ6!{Ã6Í`æÍ`o&Éô  áÁå:Ý·(ÕÅÍ |µ(Íâþ ÍâþÊÕ ÁÑ*é"Òx2Ýy·( >Ã28!ü"9!¦ í°!¾¸ í°¯og2Ð"Ô"Ö>~2Ñ2àÉÃÃ!Ã:Ã0Ã5Ã+Ã:Ã!Á‚CÄÅÁÅÕåÝåýåõo&åͦñýáÝááÑÁÉÅÕåÝåýåÍ£}ëÿ í[Òþ (ú!eÍ|ͧþA8þQ0Gþ: xÖ@¯!\w# (̓ þ?(þ*( þ.( ÍxÍ_þ. Í_!h6#ûÉ (þ?( þ*( ̓( w#éÉ>?> w#üÉͧþ 8 åÅ!™í±ÁáÉ¿É .,;:=?*[]<>{}þaØþ{ÐÖ É|͵}õ;ñæÆ�'Î@'Ãʯ7Ë|À|·}È>ÿÉ2ØÅͰÁ*·íBÚ© ëÑùü "Ưog"Î2Ü>Ã2Ù!ß - - - - - - - - - - > ', Chr(7), Cmd, ' NOT found. ' ,a,a, 'Check disk and try again! '); End; END. {TRUN} ~“8 (‘8õ~‘wPT] ñÃ* Í Ð>Ã( Í‚ õÍ­͘ íÙ}·Ù>Ê( Íö ßÙËxÙ‰ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍ{ ,= ù(Ùñæ€ Í“ 0%Í| ·, 7 ÍÇ ?õ(8ÙÍ­ Ëx ͇ - öÍs ñ8˸·ÙáÑÁÙÉÙËxÙ Í� Í Ø,-Èxî€GÉÙ}·ÙÊs }·ÈÙ…ÙÍN ÅÕåÝ9Ís Ù.Ù>Ý#ÝnË0Í“ Í| = ñÙ-Ù åÝnûËx ͈ ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ìs É}·ÈÙ•Ù?ÍN n from ) us, in its entirety, by (06h and 07h won't work if this is true. ) cp/m! } Parse; { procedure builds Parameters and } { returns strings Cmdline and Cmd.} If Cmd = '' Then Instruct; { Instructions if no parameters. } If Pos('.',Cmd) = 0 Then Cmd := Cmd+'.CHN'; { If no extent then = .CHN } If Cmd <> '.CHN' Then Begin { Chain to CHN program name "Úë"Ìéå*Æ·íB"Æí[Ä·íRëáÚví°É*Æí°"ÆÙÉ^#V#Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍ»¶wÝéÝáÑ}“8÷�Ã( ·íR·íB0 É>‘Ã( ·íRëêrðøÉÕë·íRëáë·íR!È+ÉÍà õͱ ð·íR!À+ÉÍà õͱ ðÍs!Ð+ÉÍà õͱ ðÍs!ÈØ+ÉÍà ôͱ ïÍs!ÈØ#ÉÍà ôͱ ïÍs!Ø+ÉÍà õͱ ðT]KBë!z·>Ãã Í«Copyright (C) 1985 BORLAND IncƒBKaypro with hiliteedP=  E RC1B1~·7È#õå~Íéáñ= ô·ÉÍ ÉoåͦÉþ€ÜlÔ…æîå!ïå!é"áãõÅÕ~#·(åÍéáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨Í6!¢ÍÐ*ºÔáÑÁñÉõÅÕå!´éõÅÕå!®àõ:à·(ÅÕå¯2à!ÈÍ6áÑÁñÉõ:àþÿ(öÅÕå>ÿ2à!ÂãõÅÕå!¼ÚõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÝÑ:ŸO:�ƒÍÝ!ðÍÐ* ÍáÑÁñÉ!ð ë!›45(É! +/ –0ü†õyþ0åååÝ9Ù.Ù>ÍÇ 8Í­ ?Ë= ÝuÝ+Ù-Ù(>͇ 0ßÍ­ ·á͇ 8ÍÇ ?áÑÁËx ͈ š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨òê xÉËx(Íô È?É}Ù½ÙÀ·ÈÃÇ }Ö�Ús <þ(ÐÙÅÕåÍs 7Í| = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃ| ÙÅÕåÙÍ­ÙÍþ ÙÍ‚ ë}·ÈËx>Â( Í­}Æ€Ë/Æ€oÖõÙÅÕåÍö Í -ÅÕåÍ‚ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍ�-Í‚ ÙÍ�,Ù}þlØÅ˸Íà Á8 Íö Í5 ͘ Ëx(Í Ù-ÙÍà õ8Í‚ Ù-ÙÍà 8Ù,Í‚ }þl8;Ùª*ªª!ªÍ˜ ÝåÝ! >Í5ÝáÍ­͘ ͘ ÅÕåÙÍ­--Ù-Í ÙáÑÁÙÍd -- } { (unless it is a blank line). } Write('TRUN v. 2.c (08/25/85): '); { Same v. as Turbo used to compile} Writeln(Cmd); Writeln; Assign(Cmdfil,Cmd); {$I-} Chain(Cmdfil) {$I+}; { 'file not found' error-trapping } { starts on chain to cmdfil and } { error message follows: } If Ioresult = 1 Then Write( '- S>)ë)ë0 = öÉ|µÊ |ªõÍ�ëÍ�ëDM¯go>íjíB0 7?ËË= ðëñðHåÍ“Ë<ËÑëÍëËzÈ5ÍbÈ)ýÉÍbÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÊí[ÈÅÕxAJSËËËËáëáíJDM!éb"Èë!6íJ"ÊDMÉ'ÍãèÍãdÍã Íã} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~ͧÖ08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>Ã* ÝáÍÉWáÍÞ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯Ê( ËxÂ( ÙÍ™Ù}.�•õÍö Ù͇ÙÍ‚ ÅÕåÙ,Í ÙáÑÁÍö ÝåÝ!� >Í5Ýá,ÙÍ£-ÙÍ ñÅÕåo&0%Í Ù,͘ ÙáÑÁÍ }þgÚs É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍ£Ù·Ëxõ˸Íö }þˆ0GÅÕå,ÍÑåË<Ë}áõÍ ,-(-ÙñáÑÁõÍ‚ ÝåÝ!>ÍJÝáñ0 õÙÍ™Ù͘ ñ…o8 ñÈÙ͇Ãö á>Ã( m.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙ͇Ù¯Ëx(<˸õÍà 8ÙÍö ñËÿõÙÏŽé!~JÙÍà 0Í/OÝ!Ï>ÙÝÍtÙÍà 8 = ìÙ ÝÙÙÍoËøÍ ÅÕåÍt͘ Ù͇Í ÙáÑÁÍö ÝåÍ/ÝáÙÍoÍ ñ0 õÙÍ�-Í‚ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€:ê¾È4^qÉ*â##~·È6Í»È>ð2ÐÉ}ÃÇÁÑÅÝ*ÒË|(Í„ëëË|( Í„Ý6-Ý#ÕÍÇáÍÉí[ÒÝåá·íRMë‘8( Gå> ÅÍÇÁ÷áAÈ~ÅåÍÇáÁ#óÁÑÙáÑÁÙÅÝ*ÒÕÍ(¾ÁÑÅÍÉËC!¢ ¿!¦¸TRUEFALSEÍÉ!9N#ÍZÑùÕÉá~#·( G~ÅåÍÇáÁ#õé> ÍÇ> ÃÇ   "âË~(ÕÍlÑ»(þ( þ!0 (Ë®è!É!É>¯2èíSæÍ{:зÀÍ1:зÀ*â6Ð##ww#w$w#wÖÿ:è· å¯Í á##N#F*æ·íBÈ>�2ÐÉå¯w#w#í[æs#rá>à "â~æÀÈͯ*â-¯w#wÔÿw##>Í ͯÂã"äã"â~æÀÀ>2ÐÉ:зÀåÍ[ë·íRá0¯Í *â4À#4É>™2ÐÉ:зÀåÍ[·íR> *â4 #4(>áÍ Í@ ë¶¾ â#÷ÚÍ@¶w#ùëùÝéÍ@/¦w#øïÍ@¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍ»¦!"9ù!(#Ýé>¯2èýá*ÒÍã¯á"âýå|· >"2ÐÉ:è·( Í· *âwÉÍó*â6 ë!\$í°É!çÅåí[Òþ (úͧ–( áÁã·É#ëÁÁþ:À~ÉCONÁTRMÁKBD‚LSTCAUXÄUSRÅ>¯2èÍj:зÀ*âË®~æÀÍ1:зÀ*â:è·€€(@q##pÉÍ[*â ë:è·( ÕÍÑñÅÍÁ<Àx2ÐÉ*â6#ûÉ"â~æÀËv( >ÍÇÍ Ë~È*âå ëÍá< >ÿ2Ð6Éã"äãå!Â"âáÉã"äã"âË~À>2ÐÉã"äã"âËvÀ>2ÐÉ>¯ã"äãå!Â"âË®õÍéñ·(ÍâáÉ!Ñ~þ8>~O6~*Ò"ÔÝnÝf}´(HíR0ÝnÝfåÝ"øÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝpÝåÑ*øs#rÑ*òs#rÉÝåá"Ä*ð ÝåÁ ÚvíKÆíB!Ú1>ÿÃ( ëáã~#fo{æü_ë"ð*ÞåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKðýqýpýuýtÝsÝrÝåáÝNÝFÍ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ÞíSÞÕÝáÝuÝtíKðÝqÝpë ·íRÀÕýá*Ä·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Ä6#ûÉÍL*ôÉÍL*öÉ!"ô"öÝ*ÞÝNÝFy°(*ô "ô*ö·íB0íCöÝnÝfåÝáØ*Æûÿ í[Ä·íRØë*ô"ô*ö·íRÐíSöÉí[Äs#rÉ^#Vë"Ä"Þ6#ûÉ>¯O"è¯w2Ðx2ê*â"í!G"âá"äá Í'Íz*í"â*äé>¯2ì"è*â"jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ! >ÅÕåõÍ­͘ ñÍJÙáÑÁØ õÙÍoõÙÅÕåÍoÍ ÙáÑÁÙ͘ ñ= éÙ͇à ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ“!€> Ëx Ë#ËËË-= ðo˸ÉËxÙ͇(Ëø-Í ·Ë}(ËxËø>�½8(Í{ ,óÍ{ `iÈÄ!É>’Ã( |µÊs Ë|Í�>�)=Ë|(úDMboÀ˸ÉÍÉë8þ8ÍÉÙËxÙ(’0¯þ 8> ÕÍ�ÑËx(>-ÍæË{(aËy(ÍäÍÚ ò�z·(>.Íæ (Íä ÷ú²ÍÚ÷Ë{È>EÍæ>+Ë|(|íDg>-Íæ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯Ã~Èá>ò2ÐÉ2éë*âËf(/˦:éËG(##~++· :éËO x· y·úDÅÕ!Í»ÑÁ Q*â:éËG(Ëî##~Æ.Õ_ÑÖ.Í›í âg<ò]=<Í›*â##æw ÅÕåͯáÑÁ Õ+Ñ4 #4x±ÂëÉ>™>ð2ÐÉõ:éËG(ëñÉ"âͯÈæ"*âËæËnÈË®*âåÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍ[Ñ·íR8@*â N#F#s#rÍ- 0}æ)ëíjëS\*â##w+ N#Fë·íB ÈÕåͯÑár+sÉ>‘2ÐÉÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍ^·íR!À#ÉÍ^ëÉ*â^#V#ÕN#F#^#VáÉ>¯2èͱ:зÀÍ1:зÀ*â6Àå ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉ"â~æÀÈÂ>">!DM!ð"æÝáÑáÝåÅÍþÁ:зÀ*ðíBÈ:éþ!>™(>ð2ÐÉ>">!"æÝáÁÑáÝå2éÍâwþ(6þ(2þ(-þ()þ(6þ (8þ 0þ Ù:Ý·(ÓÝ*äà yº(È~#ÍÊÀúþ+Í (±ï(« 6Íâ6 #6 #"ÖÉ*â:з y~Ëo pæ .##~·ò˜åÍ»á(å.6á¯w4Æ._~þ =*â##55= *Ôí[Ö·íR8ÿÍë*Ô~#"Ô= Í£}== ͯ}͵}*âËî#w+É#~+É>Éå*â~æþ('Ílþ!0þ(Ë®ñ]ÅÕÍlÑÁþ!8Ë®ï¯áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>2Ð7ÉåÍlË®áwÉ>¯OÅÍñÁÍ%ÈÅåÍøÑÁÍ7ØÌ„ës #rëÉÍñÍ%ÈÅåͤÙáÁÍ7ØÙÌ� ÙÃÒåëÅÕÍlÑÁþ ( þ(Ë® êáqÉÍlþ(Ë®þ ( þ ïÍlþ Ë®É*âO:зÀ~æ ##å~Æ._qá4ð(þ(áÅå=ʦ==Ê©=ʬò*èí!G"âá"äá"ê!\Íã¯*ê:ì· ÍOÍs!Ð~6·go(Ýåá\íRë*ès#r£Æí_2ËÉëÝáÁáx±( s x±(T]í°ÝéDMÝáÑáx±(ôíR0í ë ëí¸ÝéU(ÍžÝáO/o&ÿ9ùq#ë (í°Ýé!€>F¸0#( ~þ (þ #ï]( ~þ (þ (#ï}“(  Õi&TÉÑÁÕ-a%ã}ͧoÉ*é!Ð~6o&ÉÍ|µÈ:Ýõ¯2ÝÍ!ñ2Ý}þÀÝá:зÈÝá_Ýá_ÕÍ{ѯ2Ý*Î|µÝåáíKÌíB "η ÕÕåÍÙÑz· Í^C User break+= Í I/OÍ Run-timeÍ error {͵Í, PC=*ÎͰÍNot enough memoryÍ Program aborted :Ø·Êm'ÃáÑÑé1!€ÕÿÍe!±&;ÔÖ>ÍÕÃÉ$Å˸}ÙÖ€oŸgMÍö|þÙ <ýwíDÍA}þ�0Í´ý5Ëø>„•.(Í{ Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%͈ Ë%͈ ëãÑãíZëáãíJDMáË%͈ = ÈñÁýáÉýåá_~6þ5Øú�+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|Í{ Í{ „gãíZëáãíJDMá0Í| ,7È}Æo˸ÉÍ@¾ #øyîO!@9ùi&Ýé"â~æÀʱ*æ¯w#wx±(9ÅÕÍ*â ë:éOÍÑÁ· Õ*â-4 #4Ñ!€ë*æ4 #4 Ã*â-N#FÚÿq#püÿV+^ë·íBÐëq#pÉÁÑíSâÅåÍ[Ñ·íRÚ'*â s#r$ s#rÉÍMÀ ëÍ<À?ýá*ÒÍã¯áýåÍMÀåÍóáåë!\ í°á åëÍÑ<( !\$í°É>2ÐÉ>¯2èÍMÀ:Ø·>!(ë*â \$í°\Í<(Ï!4°í°:è· í[1ðÕÍ\ÍÑ!€ë·(é7"â~æÈ> 2ÐÉ"æíSèëá"âNs#Frë·íB(Zë#\:Ü í°¯üå\ÍÑ<(?*æ"}íKèÅÕÍ\!ÍÑÁ· !*}#"}!€ë x± Û\Í*â éÝ*â>ðÃ* ÍÉþÐ2ÜÉ"ðëáã"ò{æü_!Þ"øÝ*Þ#  Í?!å!ÍÜ͜ͻ? TRUN v. 3.0 - Compiled with Turbo Pascal v. 3.0 !EÔÍ;!Í«!EÔÍ;!ͫͻ? This is a run-time loader, compiled with the DEFAULT START!EÔÍ;!ͫͻ? ADDRESS (the end of the pascal library plus 1). For proper!EÔÍ;!ͫͻ? handling of variables, CHN programs run with this loader must!EÔÍ;!ͫͻ? be compiled with this same start address. To run a CHN file!EÔÍ;!ͫͻ? with a DIFFERENT start address, a new version of this loader!EÔÍ;!ͫͻ? may  will accept no responsibility for the accuracy of the software, nor for any problems which may result from its use. - RMD - Comments or questions to: P.O. Box 1124 Fallon, Nevada 89406 } Var Cmdline,Cmd : String[127]; Cmdfil : File; a : String[2]; I : Integer; Procedure Instruct; { v. numberhave the same' ,a, ' respective CODE SEGMENT, DATA SEGMENT, and FREE MEMORY sizes.' ,a, ' In order to run CHN programs with DIFFERENT memory values,' ,a, ' compile a new version of this loader whose memory values are' ,a, ' IDENTICAL to those of the files to be run. ' ,a,a,} Write( 'To avoid this message, use the syntax: TRUN filename ' ,a,a, 'Filename is the name (without extension) of CHN program to run.' ,a,a, 'Name obe compiled with a start address IDENTICAL to that of the!EÔÍ;!ͫͻ? program to be run. !EÔÍ;!Í«!EÔÍ;!Í«Í ÍœÍ»?To avoid this message, use the syntax: TRUN filename !EÔÍ;!Í«!EÔÍ;!ͫͻ?Filename is the name (without extension) of CHN program to run.!EÔÍ;!Í«!EÔÍ;!ͫͻName of program to run: Í !xÔÍÌÍ�Í !å!xÔÍ;ͤÑÍgz³ÊÈ$Õ"CÔ!xÔå*CÔÑå!xÔå*CÔÑn&Íåëás*CÔ#ÑÚ$ÉÍN!xÔÍãÍN!øÔÍã! å! e.åÍ£ Í>!EÔÍã!åÍœ = same as v. of Turbo used to compile } Begin ClrScr; Gotoxy(1,4); Write( ' TRUN v. 3.0 - Compiled with Turbo Pascal v. 3.0 ' ,a,a, ' This is a run-time loader, compiled with the DEFAULT START' ,a, ' ADDRESS (the end of the pascal library plus 1). For proper' ,a, ' handling of variables, CHN programs run with this loader must' ,a, ' be compiled with this same start address. To run a CHN file' ,a, ' with a DIFFERENT start addr Program TRUN; { TRUN runs a program specified on the command line. This version will work ONLY with Turbo Pascal v. 3.00A. It should work with either CP/M or MS-DOS. For earlier versions of Turbo, TRUN v. 2.8 uses a different algorithm to parse the command line. (c) July, 1985 by Mike Dingacci, MD Program is hereby placed in the public domain. It may be used by anyone for any purpose. The authorf program to run: '); Readln(Cmd); For I := 1 to Length(Cmd) Do Cmd [I] := Upcase(Cmd[I]); { Capitalize } End; {Instruct} BEGIN Cmd := ''; Cmdline := ''; a := chr(13) + chr(10); { initialize variables } For I := 1 to ParamCount do Cmdline := Cmdline+' '+Paramstr(I); If ParamCount>0 Then Cmd := ParamStr(1) Else Instruct; { instructions if no parameters } If Pos('.',Cmd) = 0 Then Cmd := Cmd+'.CHN'; { adds ÑÍgz³Ê8%Õ"CÔ!øÔÍ;! e.åÍ>*CÔÍ~Í>!øÔÍã*CÔ#ÑÃ%Íœå!ÑÍÍËEÊY%!Í~!xÔÍãÃ\%Í!!.e.å!xÔÍ;ͳå!ÑÍ€ËEÊ’%!xÔÍ;ÍN.CHNÍ>!xÔÍã!xÔÍ;ÍN.CHNÍ¡ËEÊ®&͜ͻTRUN v. 3.0 (08/18/85): Í !xÔÍ;Íœ!Í«ÍÎÍ ÍœÍÎÍ !HÔå!xÔÍ;Íq!HÔÍìÍòå!ÑÍ€ËEÊ®&͜ͻ- - - - - - - - - - - > !Í#!xÔÍ;!ͫͻ NOT found. !EÔÍ;!Í«!EÔÍ;!ͫͻ '.CHN' Then Begin { routine chains to .CHN program } { named in ParamStr(1) } Write('TRUN v. 3.0 (08/18/85): '); { same v. as TURBO used to compile} Writeln(Cmd); Writeln; Assign(Cmdfil,Cmd); {$I-} Chain(Cmdfil) {$I+}; { 'file not found' error-trapping } { starts on chain to cmdfil and } ëñðHåÍ\Ë<ËÑëÍÞëËzÈ5Í+È)ýÉÍ+ÈË<ËúÉëz· {þ0G·É¯goÉë|ª|úHºÀ}»ÉÉË|È|/g}/o#É}æo&ÉíKÓí[ÑÅÕxAJSËËËËáëáíJDM!éb"Ñë!6íJ"ÓDMÉ'ͬèͬdͬ ͬ} ¯<íR0û= ÈÆ0ÝwÝ#ÉÝ~Ö$O! Ý#Ý~Í„Ö08)þ 8 !Öþ 8þ0T])Ø)Ø T]Ø)Ø_ØËy·È|‡ÉÝááå}&#9N�8wë!DíB9ùëåí°ëá+Oí¸ë#ùÝé>ÃwÝáͦWáͧ _áå}“8(º8J`9{‚T]=o`9yí¸ë ¯Ã28!?"9!É í°!á¸í°áí°>2گà Ã:ÃDÃ]ÃSÃXÃNÃ]ÃDÿ í[Ûþ (ú!eÍ}Í„þA8þQ0Gþ: xÖ@¯!\w# ( þ  ÍyÍVþ. ÍV!h6#ûÉ (þ*(þ.(þ!8þ}(þ*(Í„w#ßÉ>?> w#üÉþaØþ{ÐÖ É|Í’}õÍ›ñæÆ�'Î@'Ãè¯7Ë|À|·}È>ÿÉ"ÍíCß"í6#ûëÑùü "Ïë"ÕÍ�Í©éå*Ï·íB"Ïí[Í·íRëáÚ5í°É*Ïí°"ÏÙÉ^#V#ÙÍaÙ}.�•õ; ÙÍOÙÍJ ÅÕåÙ,ÍÖ ÙáÑÁ; ÝåÝ!U >ÍýÝá,ÙÍk-ÙÍÖ ñÅÕåo&0%ÍÑÙ,Í` ÙáÑÁÍÖ }þgÚ; É}Š�؉}颋.:}Žã8Žc~I’$I~ÍÌÌÌL«ªªª*ÙÍkÙ·Ëxõ˸; }þˆ0GÅÕå,Í™åË<Ë}áõÍÑ,-(-ÙñáÑÁõÍJ ÝåÝ!Ù >ÍÝáñ0 õÙÍaÙÍ` ñ…o8 ñÈÙÍOþ á>Ãum.`1pF,þåt6|‰„!wS<ÿÃ.zÒ}[•|%¸FXc~üïýu€Ò÷r1}·ÈÝåÙÍOÙ¯Ëx(<˸õͨ 8Ù; ñËÿõÙÏŽé!~JÙͨ 0Í÷OÝ!—>ÙÝÍ<Ùͨ 8 = ìÙ ÝÙÙÍ7ËøÍÖ ÅÕåÍ<Í` ÙÍOÍÖ ÙáÑÁ; ÝåÍ÷ÝáÙÍ7ÍÖ ñ0 õÙÍW-ÍJ ñÝáËOÈËøÉçÏÌTöô¢0 jÁ‘ €µžŠoD€‚,:Í€jÁ‘ �€!¢ÚI}袋.º}Žã8Žc~I’$I’~ÍÌÌÌL«ªªªªÝ!Ó>ÅÕå { error message follows: } If Ioresult = 1 Then Write( '- - - - - - - - - - - > ', Chr(7), Cmd, ' NOT found. ' ,a,a, 'Check disk and try again! '); End; END. {TRUN} xñW^‘8/ÃwÍÖ Ð>ÃuÍJ õÍuÍ` íÙ}·Ù>(è; àÙËxÙÂQ Ù}·ÙÈÙÅÕåÙ}· Ù˸TÅËø¯ÙËø}Ù•(0íD=ÙÍC ,= ù(Ùñæ€ Í[ 0%ÍD ·, 7 Í� ?õ(8ÙÍu Ëx ÍO - öÍ; ñ8˸·ÙáÑÁÙÉÙËxÙÂÝ ÍX ÍÝ Ø,-Èxî€GÉÙ}·ÙÊ; }·ÈÙ…ÙÍ ÅÕåÝ9Í; Ù.Ù>Ý#ÝnË0Í[ ÍD = ñÙ-Ù åÝnûËx ÍP ,-(-ñññ·ñÙÁáÙÝá˸°G,-Ì; É}·ÈÙ•Ù?Í åååÝ9Ù.Ù>Í� 8Íu ?Ë= ÝuÝ+Ù-Ù(>ÍO 0ßÍu ·áÍO 8Õ^#V#N#FáÉÝáëO/o&ÿ9ùëí°ÝéÑO/o&ÿ9ùëí°éÝáë!àÿ9ùëÅ(¯üí°Á> �‘(G¯üÝéÝá!àÿ9ù ¯w#üÝéÝáEÍŠ¶wÝéÝáÑ}“8÷�Ãu·íR·íB0 É>‘î·íRëê@ðøÉÕë·íRëáë·íR!È+Éͨ õÍz ð·íR!À+Éͨ õÍz ðÍ<!Ð+Éͨ õÍz ðÍ<!ÈØ+Éͨ ôÍz ïÍ<!ÈØ#Éͨ ôÍz ïÍ<!Ø+Éͨ õÍz ðT]KBë!z·> S>)ë)ë0 = öÉ|ªõÍJëÍJëDM¯go>íjíB0 7?ËË= ðõÍuÍ` ñÍÙáÑÁÃ` õÙÍ7õÙÅÕåÍ7ÍÖ ÙáÑÁÙÍ` ñ= éÙÍOÃÖ ÝÝnÝfÝ^ÝVÝNÝFÉ!�DLT\ÉI¢Ú!‚!É53ó!�úÉr1÷!€ÒÉÅÕåÙáÑÁÉÍ\!€> Ëx Ë#ËËË-= ðo˸ÉËxÙÍO(Ëø-ÍÖ ·Ë}(ËxËø>�½8(ÍC ,óÍC `iÈÃM!É>’Ãu|µÊ; Ë|ÍJ>�Ë| )=Ë|(úDMboÀ˸Éͦë8þ8ͦÙËxÙ(’0¯þ 8> ÕÍMÑËx(>-ͲË{(aËy(Ͱͦ ò\z·(>.Ͳ (Ͱ ÷ú~ͦ÷Ë{È>EͲ>+Ë|(|íDg>-Ͳ|/Ö 0ûÆ:ÝpÝ# ý~ý#· ý+>0ÝwÝ#Éýå,-  ý60ý#ø¯ÃJÅ˸}ÙÖ€oŸgMÍÄ|þÙ <ýwíDÍ }þ�0Í€ý5Ëø>„•.ÃÉÍ«Copyright (C) 1984 BORLAND Inc‚AKayproDelete2/920/92P= ERT###&&&~·7È#õå~Íáñ=ÈóÍ% ÉÅÕåÝåýåõo&åͦñýáÝááÑÁÉoåͦÉþ€Ü�Ô©æîÅÕåÝåýåÍ£}Ùå!å!"8áãõÅÕ~#·(åÍáôÑÁñãÉ}´È:$‡‡‡ããããÅÒÁ= ô+èÍÐØ*ÎßõÅÕå!¨ÍZ!¢ÍÐ*ºÔBáÑÁñÉõÅÕå!´éõÅÕå!®àõ:¼·(ÅÕå=2¼!ÈÍZáÑÁñÉõ:¼· ÷ÅÕå<2¼!ÂåõÅÕå!¼ÛõÅÕååð!‹í°Ñ:žO:œ‚ÕÍÑ:ŸO:�ƒÍ!ðÍÐ* ÍBáÑÁñÉÍ� ?áÑÁËx ÍP š, —7•8Æ€8Æ€8oÝãÙåÅxËøÙ¨æ€õËøÝåÝ!ÉáØ¯oGOW_gÉ·ËËËËËÉ·ËËËËËÉ|Ù„Ùg{Ù‹Ù_zÙŠÙWyÙ‰ÙOxÙˆÙGÉ|Ù”Ùg{Ù›Ù_zÙšÙWyÙ™ÙOxÙ˜ÙGÉxÙ¸ÙÀyÙ¹ÙÀzÙºÙÀ{Ù»ÙÀ|Ù¼ÙÉÙxÙ¨ò² xÉËx(ͼ È?É}Ù½ÙÀ·ÈÃ� }Ö�Ú; <þ(ÐÙÅÕåÍ; 7ÍD = ùÙ|Ù¤Ùg{Ù£Ù_zÙ¢ÙWyÙ¡ÙOxÙ ÙGÃD ÙÅÕåÙÍuÙÍÆ ÙÍJ ë}·ÈËx>ÂuÍu}Æ€Ë/Æ€oÖõÙÅÕå; ÍÖ -ÅÕåÍJ }áÑÁÙáÑÁã¼ã0ãñÙÉÙÍW-ÍJ ÙÍW,Ù}þlØÅ˸ͨ Á8 ; Íý Í` Ëx(ÍÖ Ù-Ùͨ õ8ÍJ Ù-Ùͨ 8Ù,ÍJ }þl8;Ùª*ªª!ªÍ` ÝåÝ!Ð >ÍýÝáÍuÍ` Í` ÅÕåÙÍu--Ù-ÍÖ ÙáÑÁÙÍJ ,,ñ,-ÈØxî€GÉgª?+2×n¶*ï8t Ð Ðzˆˆˆˆ~«ªªªª,->ÊuËxÂu%  (ÍC Ë= øý~õ> xæÆ0ýwý#xæGÅÕåË%ÍP Ë%ÍP ëãÑãíZëáãíJDMáË%ÍP = ÈñÁýáÉýåá_~6þ5Øúi+~¨¥Ôh¶¿ÉìÅëx-ÐÍÎÂSÞùx9?ë+¨­ÅøÉ{Η@}·ÈËøÅÕ|ÍC ÍC „gãíZëáãíJDMá0ÍD ,7È}Æo˸ÉÍ ¾ #øyîO!@9ùi&ÝéÍ  ë¶¾ â#÷ÚÍ ¶w#ùëùÝéÍ /¦w#øï*â###w* N#Fë·íB ÈÕåÍŸÑár+sÉ>‘à ÕÙáÙ!T]>)ëíjëÙ)Ù0 0= ïÉÍU·íR!À#ÉÍUëÉ*â^#V#ÕN#F#^#VáÉ>">!2çDMÝáÑáÝå"â~æÊóx±(LÅÕÍ*â ë:çOÍÑÁ·(o:çþ" C}=(þ ?ÅÕ*â-N#Fp+qÛÿq#pÑÁ!€ë °*â F+N+++V+^ë·íBÐëq#pÉ>™>ð>à ÁÑíSâÅåÍRÑ·íRÚ*â s#r$ s#rÉ"äíSæëá"â! N#Fë·íB(^x± *â 6#ûí[âÍ<(H*â! íKäq#p##ëíKæÅÕÍí[â!Í· *â! 4 #4Ñ!€ëÁ x± Õ*â$ éÝ*â>ðÃw"òëáã"ô{æü_!í"ëÝ*íÝnÝf}´(HíR0ÝnÝfåÝ"ëÝáã Ý^ÝVÝåMDÝnÝfÝåÝÝuÝtÝqÝp ÌáñJ= ÍB== ͯ}8= ͵}/Í­ !*â###å~Æ-_~áþ(4òQ6*âËÖ>™2Ù>*â##wáÑÁÉ:Ù·>Àå*â##~áÉå*â#~þÿ(EÍÌÍ[þ ( þ (þ (þ ÍÖè!]Í[þ (þ (þ (þ(w#(ÍÖãÍÂÌÖ6áÉÝ!]Ý~·Èþ-ÀÝ#É8Ý~·È>7à ëÍ Í[ÃÖÍÖÉ>¯OÅÍkÁͼÈÅåÍÁÑÁÍÎØÌMës #rëÉÍkͼÈÅåÍpÙáÁÍÎØÙÌX ÙáåÍÌÍ[þ ÍÖôÍ[þ (þ( #w(ÍÖêÍÂÌÖáqÉ*â#~þÊáÍ[þ (þÈÍÖñÍ ÍÖþ ÀÃÖ*â##~þÈ6ÉÅÕåÍœáÑÁÉOÍ$*â#~þ(08áÅå·Ê¦=ʦ==Ê©=ʬò+ËÞ###å~Æ-_qá4ð6Í¡È>ðà *æ:è¾È4^qÉ}Ã’ÁÑÅÝ*ÛË|(Íò!CÍò!7ÍòÍbÉÍR!ÍòÍbÉÍR!ÍòÍbÉÍR! ÍòÍbÉÍR! ÍòÍbÉÍR! ÍòÍbÉÍR!ÍòÍbÉÍR!ÍòÍbÉÍcÍçÍRÍ�This line is in reverseÍ�ÍbÍ ÍRÍ�Íb!ÐÍBÍ ÍRÍ�This line is blinkingÍ�ÍbÍ2 ÍRÍ�Íb! ÍBÍK ÍRÍ�This line is underlinedÍ�ÍbÍd ÍRÍ�Íb!¸ ÍBÍRÍ�This cursor is now ONÍ�Íb!ÐÍBÍRÍ�ÍbÍRÍ�The cursor is now OFFÍ�ÍbÍ– !ÐÍBÍRÍ�ÍbÍRÍ�It is now back ONÍ�ÍbÍ} !¸ ÍBÍ!ÍRÍ�ÍbÍRÍ�DingÍ�Íb!ôÍBÍ!ÍRÍ�DingÍ�Íb!ôÍBÍ!ÍRÍ�DingÍ�Íb!ÐÍBÍcÍ ¦w#ùãýáÝá!9ë! E9ýéÝá!!9~·(¯+FÍŠ¦!"9ù!(#Ýé>¯2æýá*ÛͲ¯á"âýå|·>"Ê :æ·( ͆ *â6#wÉÍ÷*â6#6 ë!\$í°É!¶Ååí[Ûþ (úÍ„–( áÁã·É#ëÁÁþ:À~ÉCONTRMKBDLSTAUXUSR>¯2æÍîÍ$*â#~þ ͶÍ$*â:æ·> >w###6ÀÃÖþ þ #6++pÉ>¯2æíSäÍ-Í$Ͷ:Ù·À*â6###ww#w$w#wÖÿ:æ· åÍôá##N#F*ä·íBÈ>�à å¯w#w#í[äs#ráÃó>¯2æÍSÍ$ͶÍ$*â6å ë#Íá-¯Nw#FwÖÿq#p#6€#w#w#wÉÍß*â ë:æ·( ÕÍÑñÅÍÁ<Àxà *â6#ûÉ"â#~+þ 2ËN(>Í’ÝåÑ*ës#rÑ*ôs#rÉÝåá"Í*ò ÝåÁ Ú5íKÏíB!Úð>ÿÃuëáã~#fo{æü_ë"ò*íåÝá·íR0RÝnÝfå·íR0ÝáðáÕýáíKòýqýpýuýtÝsÝrÝåáÝNÝFÍÄ( Ý^ÝVÕÝáÝåáÝNÝFÝ^ÝV*ííSíÕÝáÝuÝtíKòÝqÝpë ·íRÀÕýá*Í·íR(ý~Ýwý~Ýwýnýf ÝuÝt¯ÉÝåá"Í6#ûÉÍ *öÉÍ *øÉ!"ö"øÝ*íÝNÝFy°(*ö "ö*ø·íB0íCøÝnÝfåÝáØ*Ïûÿ í[Í·íRØë*ö"ö*ø·íRÐíSøÉí[Ís#rÉ^#VíSÍÉ>¯O"æ¯w2Ùx2è!ê"âá"äá ÍöÍ@*äé>¯2ê"æ!ê"âá"äá"è!\Ͳ¯*è:ê· ÍîÍ!Ù~6·go(Ýåá\íRë*æs#r¯ÿí_2ÔÉëÝáÁáx±( s x±ÍMëëË|( ÍMÝ6-Ý#ÕÍ�áͦí[ÛÝåá·íRë“8 (G> Í’ùCÈ~Í’#÷ÁÑÙáÑÁÙÅÝ*ÛÕÍôÇÁÑÅͦËC!h Ç!lÀTRUEFALSEͦ!9^#Í(ÑùÕÉá~#·(G~Í’#ùé> Í’> Ã’ "âËF!ÈÍ[¸(þÀ#ÉåÍRë·íRá0Íô*â4À#4É>™Ã åÍR·íR *â4 #4(áÍóÒ>òÜ>¯2çÍ$ë*âËV(/Ë–:ç·(#~+· x· y·ú2ÅÕ!͵ÑÁ( =(þ X:ç·(R*â:ç·(ËÞ###~Æ-Õ_ÑÖ-ÍŒí âX<òN=<ÍŒ*â###æw ÅÕåÍŸáÑÁ Õ*Ñ4 #4x±ÂüëÉ>™>ðà õ:ç·(ëñÉ"âÍŸÈè"*âËÖË^ÈËž*âËVÈË–åÅ0ëÍÁá ëÍ·ÉÁÑíSâÅåÍRÑ·íR8A*â N#F#s#rÍ$ 0}æ)ëíjëS\ÃÅ�It is now back ONÍ�ÍbÍ} !¸ ÍBÍ!ÍRÍ�ÍbÍRÍ�DingÍ�Íb!ôÍBÍ!ÍRÍ�DingÍ�Íb!ôÍBÍ!ÍRÍ�DingÍ�Íb!ÐÍBÍc:Ù· *âË^ îËFÈ*âå ëÍá< >ÿ2Ù6É"â~æÈÍŸ*â-¯w#wÕÿw#ÍóÍŸÀ"â~æÈ·ÍÀ ëÍ<À@ýá*ÛͲ¯áýåÍÀåÍ÷áåë!\ í°á åëÍÑ<Ê®!\$í°É>à >¯2æÍÀ*ß|µ>! ë*â \$í°\Í<(Ï!ý€í°:æ· í[1Ã�ÿÕÍ\ÍÑ!€ë·(éf"âÍÂÈ> 2ÙÉ:Ù·ÈñÉÝáÝåå!ÊÍ<áÉÝáÝå"âËF( #~þÀ#6Ãe>Îå!ÊÍ[áÉ"âËNÀ>ë!Ú~þ€8>O6*Û"ÝÍwþ (=þ(&þ("þ(þ :á·(ßÃNþ 8Øyº(Ô~#ÍèÌúx+Í% (½ï6Éå*â#~þáÉÍÂÈÍ[þÈÅÕå*â#~· *Ý~þ(h#"Ýb= Íõþ 8Íèþ(T]í°ÝéDMÝáÑá·íR0ð ë ëí¸ÝéÑÁÕ-a%ÃÆ}Í„oÉ*é!Ù~6o&ÉÍ |µÈÍ£}þÀÝáÍ%^C User break1:Ù·ÈÝáõÍ% I/OÝáÍ% Run-timeÍ% error Í’Í%, PC=Ýåáí[Õ·íR"×Í�Í% Program aborted*ßé1!€Õ¸ÿÍ�!#0ÕͲÃn!ÍR!Íò!BÍò!0ÍòÍbÉÍR!Íò!CÍò!0ÍòÍbÉÍR!Íò!BÍò!2ÍòÍbÉÍR!Íò!CÍò!2ÍòÍbÉÍR!Íò!BÍò!3ÍòÍbÉÍR!Íò!CÍò!3ÍòÍbÉÍR!Íò!BÍò!4ÍòÍbÉÍR!Íò!CÍò!4ÍòÍbÉÍR!Íò!BÍò!6ÍòÍbÉÍR!Íò!CÍò!6ÍòÍbÉÍR!Íò!BÍò!7ÍòÍbÉÍR!&   { * * * * * * * * * * * * * * * * * * * * * * * * * * * * Video and Graphics * * Demonstration * * * * Jack E. Heiss * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This is a Jack E. Heiss * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * } {Procedures available in this Include file: ReverseOn; ReverseOff; BlinkOn; BlinkOff; UnderLineOn; UnderLineOff; CursorOn; CursorOff; RememberCursor; RecallCursor; StatusLineOn; 0); ClrScr; End. Turns Cursor on/off.} Procedure CursorOn; Begin Write(chr(27),chr(66),chr(52)); End; Procedure CursorOff; Begin Write(chr(27),chr(67),chr(52)); End; {Procedures RememberCursor/RecallCursor - These procedures are for remebering a cursor position on the screen and then recalling that position.} Procedure RememberCursor; Begin Write(chr(27),chr(66),chr(54)); End; Procedure RecallCursor; Begin Write(chr(27),chr(67),chr(54)); End; demonstration of some of the programming techniques that can be used with VIDEO84.BOX and GRAFIX84.BOX.} {$I video84.box} Begin ClrScr; ReverseOn; Writeln('This line is in reverse'); ReverseOff; Writeln; Delay(2000); BlinkOn; Writeln('This line is blinking'); BlinkOff; Writeln; Delay(4000); UnderlineOn; Writeln('This line is underlined'); UnderlineOff;  StatusLineOff; CursorLeft; CursorRight; CursorDown; CursorUp; ClrEOS; Home; RingBell; } {Procedures ReverseOn/ReverseOff - Turns on/off the reverse video feature.} Procedure ReverseOn; Begin Write(chr(27),chr(66),chr(48)); End; Procedure ReverseOff; Begin Write(chr(27),chr(67),chr(48)); End; {Procedures BlinkOn/BlinkOff { * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Video Procedures * * in * * Turbo PASCAL * * for the * * KAYPRO Universal Board * * * *  {Procedures StatusLineOn/StatusLineOff - Turns on/off the status line (line 24) preservation features.} Procedure StatusLineOn; Begin Write(chr(27),chr(66),chr(55)); End; Procedure StatusLineOff; Begin Write(chr(27),chr(67),chr(55)); End; {Procedure RingBell - rings the console bell.} Procedure RingBell; Begin Write(chr(7)); End; {Procedures CursorLeft,CursorRight,CursorDown,CursorUp - move the cursor in the specified direction.} Proce Writeln; Delay(3000); Writeln('This cursor is now ON'); Delay(2000); Writeln; WriteLn('The cursor is now OFF'); CursorOff; Delay(2000); Writeln; Writeln('It is now back ON'); CursorOn; Delay(3000); RingBell; Writeln; Writeln('Ding'); Delay(500); RingBell; Writeln('Ding'); Delay(500); RingBell; Writeln('Ding'); Delay(200 - Turns on/off the video blinking features.} Procedure BlinkOn; Begin Write(chr(27),chr(66),chr(50)); End; Procedure BlinkOff; Begin Write(chr(27),chr(67),chr(50)); End; {Procedures UnderlineOn/UnderlineOff - Turns on/off the video underlining features.} Procedure UnderlineOn; Begin Write(chr(27),chr(66),chr(51)); End; Procedure UnderlineOff; Begin Write(chr(27),chr(67),chr(51)); End; {Procedures CursorOn/CursorOff - '  dure CursorLeft; Begin Write(chr(8)); End; Procedure CursorRight; Begin Write(chr(12)); End; Procedure CursorDown; Begin Write(chr(10)); End; Procedure CursorUp; Begin Write(chr(11)); End; {Procedure ClrEOS - clears from the cursor to the end of the screen.} Procedure ClrEOS; Begin Write(chr(23)); End; {Procedure Home - moves the cursor to the beginning of the screen but does not erase the screen.} Procedure åååHome; Begin Write(chr(30)); End; {End of Video84.pas}ååååå