IMD 1.16: 1/06/2007 9:53:15 FOGCPM.161 ååååååååååååååå--FOGCPM161DRAW COM*DRAWDEMOCOM* HI-RES DOC€HI-RES DOCZ !"#$%&'()*-03-00 87 ¤HI-RES MAC€+,-./0123456789:HI-RES MAC7;<=>?@A-CPM161 DOC¥¦§¨GRPH-MODDRW€BCDEFGHIJKLMNOPQGRPH-MODDRW4RSTUVWXFONT PIXYPIXGEN BAS€Z[\]^_`abcdefghiPIXGEN BASjPIXGEN DOC0klmnopPIXRN DATqSCRPRINTCOMrSCRPRINTDOCstuKEYTEST COMvKEYTEST MACwxyzMAKE COM{|}~€�‚ƒ„…†‡ˆ‰ŠMAKE DOC&‹Œ�Ž�MAKE CQ ?�‘’“”•–—MAKEFILE ˜CEN-INP COM™CEN-INP MQCOš›œ�žŸ ¡¢£åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååThis is the disk name. SANSB16 FON@ªè €ÄOSANSB18 FON l™gldSANSC14 FON5yë ±Ô5SANSC16 FON¦{ë ³DSANSC18 FON6~ë ¶USANSI14 FON Oì ¹„CSANSI16 FONRì ¼�TSANSI18 FON ±p ¿OiSANSC20 FONn�ë Ã�gSANSC24 FONÌ„ë Ç„�SANSB24 FONk" Ìô§SANSI20 FONXì ÒÜ‚ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÃÈ4.2Installed printer - Epson MX-80 with graftraøÿ€A2L€ 1@Â@!=í°Í@!ÍÕ Í¡!?wÍê .2 Draw Program V2.0 - Copyright (c) 1986 by Digital Arts This program may be copied and shared but not sold or included with any other items for sale without the written permission of Digital Arts.ŸÕå*ÃB倧íR¯ÍWÍê Character(s) in use - Ñ! §íR¯ÍWÍê Character(s) still available®áÑÍê  Clear screen and begin a new drawing Draw (Resume current drawing) Help Load ASCII character set from disk

Print Read a file Quit and exit to CP/M Write a file Press "C", "D", "H", "L", "P", "R", "Q" or "W" ÍCDHLPRQWÍ̓ � ÚžÀ ] 5 G ÃéÍÍ Íê Ready to load character set from disk.ŸÅÕå!GCÍíáÑÁÉÍê  Draw Routine Subcommands - Press any key to exit. If you run out of characters, try the ^R command. ------------------------------------------------ | 7 | 8 | 9 | | Up and left | Up | Up and right| |----------------------------------------------| | 4 | 5 | 6 | | Left | Center cursor | Right | |----------------------------------------------| | 1 | 2 | 3 | |Down and left | Down |Down and right| |----------------------------------------------| | 0 | . | | | Reset bit | Set bit | | ------------------------------------------------ ^D = Draw (set bits) ^E = Erase (reset bits) ^K = Put next keypress in drawing ^M = Move cursor ^R = Redraw and recover unused characters ^P = Print Exits to main menu Ãl Í@!?wÍê .°ÍBÍ;@Íl õxþÌ;@ñþÈͬ êÕÍÐ ( #|µ(+>ï¹0ïë§íRë0!ÑÉXþÈþÈþ ÈCþ.õÅÌ;@ÁñÈþ0õÅÌ;@ÁñÈþ ʬ þÊÀ þÊB þ8È#þ9È þ6È þ3È+þ2È+þ1È þ4È þ7È #þ5À!?wÉÍ)@Íê ®:ͨ ÃÅÕåÍê Ÿ!GK´Í(áÑÁÉÅÕåÍê Ÿ!GKµÍÙ87ÖŸ °±($Íê This is not a drawing file®Íd ÉáÑÁ!?wÉáÑÁÉõÅÍl _Í;@ ÁñÉõÅÕå!ˆÍ. ï!¨Í. !Å:‡æWÍ;@8 ÆÿË ó{Ë# û{Í, _:‡{õÔî ñÜâ yÁ#í[…§åíRá ÀO!¸Í. >ÿ¹ «!˜Í. áÑÁñÉÅO:„§y :‡æG¯ËûÁÉ x±ÈÕ]Tí°ëÑÉå +§íRá8å§íRá0 +ë +ëí¸Éí°ÉÅÕåÿÿͧáÑÁ(ïÉþaØþ{Ðæ_Éõ>ͨ ñÉõ>ͨ >=ͨ > „ͨ > …ͨ ñÉÅÕåõ_ÍñáÑÁÉÃÅÕåõæ_ÍñáÑÁÉõ>ͨ ñÉ7õÔ ñÐõ~æͨ Ë~#(õñÉãÍÕ ãÉãÍÖ ãÉõõÔ ÍÕ ñÜ ñÉãÍö ãÉË~#(ûÉ*� >wÅÕëÕÍÑÅÕå ͧáÑÁo&6 ëÑÁ§ÉÍl æ_þNÈþY ô7ÉÍÕ Í‡ Í: õÍ YeóNïñÉãÍÕ ãÃK õÍê Press to continue®Íl þ ùÍê ŠñÉ’ þ 0õö€Íî ñÉõÅÕå_ÍáÑÁñÉÅÕåÍ�¯))))Æ0Íî ðáÑÁÉÅOÍ( %9yÍî ÁÉãÍ1 ãÉ45ÈÅF#~Íî #ùÁɧíRЯ•oœ•gÉå§íRáÐëÉå§íRáØëÉÅOe¯)¹8‘,÷ÁÉ>!Ë#Ëíj§íB0 = ï}´Éz¨ËõË x§ò• ¯‘O˜‘Gz§ò¨ ¯•o>œg>›_š“WÍà ñõÜA ñЯ“_>šW>™O˜‘GÉ> Õë!Ë#ËãíjãíjõæíBÞ0 ñ= åÁ}´ÉÅ!)0ùÁÉxªõz§ëüA ëx§i`üA MDÍñð¯•o>œg>›_š“WÉ>!)ËË0 0= òÉÅÕå€åx±_Íé ëáå§íRá8x±GË90çáÑÁÉÅåõÍ�ñÍv8¯))))Æ0ͨ ðáÁÉÕ_ÍÇ(y§(þ  {Ñͨ úÕÑxþõ>0ܨ ñÉÅÕèÕëÍi {Ñë))))ë³_ÕYP åÍi áKBz³Ñ ßëÑÁÉ|æð ))))õ>�OÉÕ\ÍâÑÉÍ.ØÌ(÷ÅÕåÕëÍÑÍáÑÁ§ÀÕ€Ñ à ÜÉõÍê File not found®Íd ñÉÕ\Í1ÑÉÍ.ØÄ‰8÷Í@8òÉÅÕåͧáÑÁ<>ÊèÅÕåÕëÍÑÍáÑÁ§>ÂèÕ€Ñ x± ÜÅÕåͧáÑÁ<>ÊèÉÍê This file already exists! ŠÍ\ Do you want to overwrite it? (Y/N) õÍê Šñ?ØÅÕåͧáÑÁ§Éõ͇ Íê Error ñõÖþÍ reading froíwriting tïÍê disk®Íd ñ7ÉÕ\Í.ÑÉÍê Enter the file name: å!’ >Í õÍê Šñ á7ÉÕÅ"² íS´ bk6#í°² ˜ÍÁÑá͇§ÉÕ\͇ÑÉÅÕåͧáÑÁ<þÉÕ\Í ÑÉÅÕ#ÍÑÁ!!~#foÉÕ\Í»ÑÉÅÕ$ÍÑÁ!!~#foÉãåÕ^#ë)Ñã"àáãå!#Õ_^#VëÑãÉåãÕ_^#VëÑãÉãÕÅõOF#~#^#V#¹(õñÁÑãÉñÁëÑãÉãÕÅN#ëÅÕÍl þ@8æ_ÑÁkbA¾(#úèõ> ͨ ñͨ y�ë ÁÑãÉ"dáÕ^#å*Ñëãëå!É͘Ü·8ûÖ@ÅÕåõÍ_Õ ÍÑÍ\ñͧáÑÁÃÍê Which drive (A-P) Í·Øõͨ ñÉÍl Í~ þAØþQ?ØõåÍÎáã|áÉÅÕÖAõÍNñ_¯Íè|µþÑÁÉÅÕOÛGåÍNÑ!ÿÍN!ÑÁÉÅÕåÕ`ÍNÑõx2"Í#ñáÑÁ7À§ÉÅå:QýOæ<2yæÍèáÑÁÉ:þÈÈ>�OÉÍgØÍBØÅÕåÍÞÍê ain or lternate character set¿ÍMA§( ͯÔ¯áÑÁÉísÅB1GC>Ó>ÿÓ¯Ó>ÿÓ>Ó>þÓÍïAÍšBí{ÅBÉísÅB1GCÛöÓí{ÅBÉóísÅB1GCÅÕåÙÅÕåÙÅåÙáÑ>•>œÚ¾@}æG¯7ýOË<ËË<ËË<ËÙyþð?Ú¾@íDÆïo> ÍÞAEOÍhAÙzÙþ ## ~Ù¡&͆AÚ¾@xÍAÙzÙþõ̃Bñ(å ÙyÙOÍMAwáÍË@áÑÁÙáÑÁí{ÅBûÉÅÕå{Ö€zÞ8&>ÿ£_>¢Wë))))ëzæ OzæWÛõö€±Ó í°ñÓáÑÁÉÅÕåoz£<  >ÿ£_>¢Wë)Ë=|‡‡‡‡gëe.Ë<ËÙåÙëãÀÑÛõö@Ó~怳w ~æ�²wñÓáÑÁÉÙzÙþ( þ( þ( ~Éy¶Éy/¦Éy®ÉÅÕXÀÍËAåÙåÙÑ> ͼAÑGKÑÁÉÅÙzÙþ(^#V#z£< Í¥A8++s#r#§ÁÉå*ÃB>•>œ 8]T#"ÃBáÉÅ!)0ùÁÉ>!)ë)ë0 0= óÉÅOe¯)¹8‘,÷ÁÉÅÕåÍáÑÁÉ6# x± øÉóísÅB1GCõÅÕåÙåÙÍïA!€"ÃB!GKÙ!ÙPÅ^#V#å ¯¶ #úÿÿá+r+s##á{Ö€zÞõ܃Bñ8Í¥A܃B+r+s##ÍË@yÍA ÁÙ#Ùº yþ ­ÙáÙáÑÁñí{ÅBûÉÅÕååë))))GCÑ í°áÑÁÉ!€"ÃB¯2ÂBÅÕå!GKå6ÿ#6ÿ# ÍýAëáôYí°áÑÁÉååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÃÈ4.2Installed printer - Epson MX-80 with graftraøÿ€A2L€ 1@¥@!;í°Í@!ÍÓ ÍŸ!?wÍè .2 Draw Demo V2.0 - Copyright (c) 1986 by Digital Arts This program may be copied and shared but not sold or included with any other items for sale without the written permission of Digital Arts.ŸÕå*¦B倧íR¯ÍUÍè Character(s) in use - Ñ! §íR¯ÍUÍè Character(s) still available®áÑÍè  Clear screen and begin a new drawing Draw (Resume current drawing) Help Load ASCII character set from disk

Print Read a file Quit and exit to CP/M Write a file Press "C", "D", "H", "L", "P", "R", "Q" or "W" ÍCDHLPRQWÍË� ‹ Øœ¾ [ 3 E ÃéÍË Íè Ready to load character set from disk.ŸÅÕå!*CÍëáÑÁÉÍè  Draw Routine Subcommands - Press any key to exit. If you run out of characters, try the ^R command. ------------------------------------------------ | 7 | 8 | 9 | | Up and left | Up | Up and right| |----------------------------------------------| | 4 | 5 | 6 | | Left | Center cursor | Right | |----------------------------------------------| | 1 | 2 | 3 | |Down and left | Down |Down and right| |----------------------------------------------| | 0 | . | | | Reset bit | Set bit | | ------------------------------------------------ ^D = Draw (set bits) ^E = Erase (reset bits) ^K = Put next keypress in drawing ^M = Move cursor ^R = Redraw and recover unused characters ^P = Print Exits to main menu Ãj Í@!?wÍè .°ÍéAÍ@Íj õxþÌ@ñþÈͪ êÕÍÎ ( #|µ(+>ï¹0ïë§íRë0!ÑÉXþÈþÈþ ÈCþ.õÅÌ@ÁñÈþ0õÅÌ@ÁñÈþ ʪ þʾ þÊéA þ8È#þ9È þ6È þ3È+þ2È+þ1È þ4È þ7È #þ5À!?wÉÍ@Íè ®:ͦ ÃÅÕåÍè Ÿ!*K´Í&áÑÁÉÅÕåÍè Ÿ!*KµÍ×87ÖŸ °±($Íè This is not a drawing file®Íb ÉáÑÁ!?wÉáÑÁÉõÅÍj _Í@ ÁñÉõÅÕå!ˆÍ, ï!¨Í, !Å:‡æWÍ@8 ÆÿË ó{Ë# û{Í* _:‡{õÔì ñÜà yÁ#í[…§åíRá ÀO!¸Í, >ÿ¹ «!˜Í, áÑÁñÉÅO:„§y :‡æG¯ËûÁÉ x±ÈÕ]Tí°ëÑÉå +§íRá8å§íRá0 +ë +ëí¸Éí°ÉÅÕåÿÿͧáÑÁ(ïÉþaØþ{Ðæ_Éõ>ͦ ñÉõ>ͦ >=ͦ > „ͦ > …ͦ ñÉÅÕåõ_ÍñáÑÁÉÃÅÕåõæ_ÍñáÑÁÉõ>ͦ ñÉ7õÔ ñÐõ~æͦ Ë~#(õñÉãÍÓ ãÉãÍÔ ãÉõõÔ ÍÓ ñÜ ñÉãÍô ãÉË~#(ûÉ*Ž >wÅÕëÕÍÑÅÕå ͧáÑÁo&6 ëÑÁ§ÉÍj æ_þNÈþY ô7ÉÍÓ Í… Í8 õÍ YeóNïñÉãÍÓ ãÃI õÍè Press to continue®Íj þ ùÍè ŠñÉ� þ 0õö€Íì ñÉõÅÕå_ÍáÑÁñÉÅÕåÍ›¯))))Æ0Íì ðáÑÁÉÅOÍ& %9yÍì ÁÉãÍ/ ãÉ45ÈÅF#~Íì #ùÁɧíRЯ•oœ•gÉå§íRáÐëÉå§íRáØëÉÅOe¯)¹8‘,÷ÁÉ>!Ë#Ëíj§íB0 = ï}´Éz¨ËõË x§ò“ ¯‘O˜‘Gz§ò¦ ¯•o>œg>›_š“WÍÁ ñõÜ? ñЯ“_>šW>™O˜‘GÉ> Õë!Ë#ËãíjãíjõæíBÞ0 ñ= åÁ}´ÉÅ!)0ùÁÉxªõz§ëü? ëx§i`ü? MDÍñð¯•o>œg>›_š“WÉ>!)ËË0 0= òÉÅÕå€åx±_Íç ëáå§íRá8x±GË90çáÑÁÉÅåõÍ›ñÍt8¯))))Æ0ͦ ðáÁÉÕ_ÍÅ(y§(þ  {Ñͦ úÕÑxþõ>0ܦ ñÉÅÕèÕëÍg {Ñë))))ë³_ÕYP åÍg áKBz³Ñ ßëÑÁÉ|æð ))))õ>�OÉÕ\ÍàÑÉÍ,ØÌ(÷ÅÕåÕëÍÑÍáÑÁ§ÀÕ€Ñ à ÜÉõÍè File not found®Íb ñÉÕ\Í/ÑÉÍ,ØÄ‡8÷Í>8òÉÅÕåͧáÑÁ<>ÊæÅÕåÕëÍÑÍáÑÁ§>ÂæÕ€Ñ x± ÜÅÕåͧáÑÁ<>ÊæÉÍè This file already exists! ŠÍZ Do you want to overwrite it? (Y/N) õÍè Šñ?ØÅÕåͧáÑÁ§ÉõÍ… Íè Error ñõÖþÍ reading froíwriting tïÍè disk®Íb ñ7ÉÕ\Í,ÑÉÍè Enter the file name: å!� >Í õÍè Šñ á7ÉÕÅ"° íS² bk6#í°° ˜ÍÁÑáÍ…§ÉÕ\Í…ÑÉÅÕåͧáÑÁ<þÉÕ\ÍžÑÉÅÕ#ÍÑÁ!!~#foÉÕ\͹ÑÉÅÕ$ÍÑÁ!!~#foÉãåÕ^#ë)Ñã"Þáãå!#Õ_^#VëÑãÉåãÕ_^#VëÑãÉãÕÅõOF#~#^#V#¹(õñÁÑãÉñÁëÑãÉãÕÅN#ëÅÕÍj þ@8æ_ÑÁkbA¾(#úèõ> ͦ ñͦ y�ë ÁÑãÉ"báÕ^#å*Ñëãëå!ÉÍ–ܵ8ûÖ@ÅÕåõÍ_Õ ÍÑÍ\ñͧáÑÁÃÍè Which drive (A-P) ÍµØõͦ ñÉÍj Í| þAØþQ?ØõåÍÌáã|áÉÅÕÖAõÍLñ_¯Íæ|µþÑÁÉÅÕOÛGåÍLÑ!ýÍL!ÑÁÉÅÕåÕ`ÍLÑõx2 Í!ñáÑÁ7À§ÉÅå:QýOæ<2yæÍæáÑÁÉ:þÈÈ>�OÉÍeØÍ@ØÅÕåÍÜÍè ain or lternate character set¿ÍMA§( Í­Ô­áÑÁÉís¨B1*CÍÒAÍ}Bí{¨BÉís¨B1*Cí{¨BÉóís¨B1*CÅÕåÙÅÕåÙÅåÙáÑ>•>œÚ¡@}æG¯7ýOË<ËË<ËË<ËÙyþð?Ú¡@íDÆïo> ÍÁAEOÍKAÙzÙþ ## ~Ù¡&ÍiAÚ¡@xÍã@ÙzÙþõÌfBñ(å ÙyÙOÍ0AwáÍ®@áÑÁÙáÑÁí{¨BûÉÅÕå{Ö€zÞ8&>ÿ£_>¢Wë))))ëzæ OzæWÛõö€±Ó í°ñÓáÑÁÉÅÕåoz£<  >ÿ£_>¢Wë)Ë=|‡‡‡‡gëe.Ë<ËÙåÙëãÀÑÛõö@Ó~怳w ~æ�²wñÓáÑÁÉÙzÙþ( þ( þ( ~Éy¶Éy/¦Éy®ÉÅÕXÀÍ®AåÙåÙÑ> ÍŸAÑ*KÑÁÉÅÙzÙþ(^#V#z£< ͈A8++s#r#§ÁÉå*¦B>•>œ 8]T#"¦BáÉÅ!)0ùÁÉ>!)ë)ë0 0= óÉÅOe¯)¹8‘,÷ÁÉÅÕåÍáÑÁÉ6# x± øÉóís¨B1*CõÅÕåÙåÙÍÒA!€"¦B!*KÙ!ÙPÅ^#V#å ¯¶ #úÿÿá+r+s##á{Ö€zÞõÜfBñ8͈AÜfB+r+s##Í®@yÍã@ ÁÙ#Ùº yþ ­ÙáÙáÑÁñí{¨BûÉÅÕååë))))*CÑ í°áÑÁÉ!€"¦B¯2¥BÅÕå!*Kå6ÿ#6ÿ# ÍàAëáôYí°áÑÁÉååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååHI-RES.DOC Copyright (c) 1986 by Digital Arts Nov. 6, 1986 Digital Arts Don Rowe (home) P. O. Box 50105 4052 Oregon St. #2 San Diego, CA 92105 San Diego, CA 92104 (619) 299-4536 Thió ió parô oæ á packagå oæ five copyrighted files: HI-RES.DOC (The file you are reading now) DRAWDEMO.COÍ (Á higè resolutioî drawinç prograí whicè workó �           witè á standarä Executive) DRAW.COÍ (Á drawinç prograí whicè requireó á speciaì � hardwarå upgrade) GRPH-MOD.DR× (Schematiã foò thå hardwarå modificationó �           requireä bù DRAW.COÍ whicè ió readablå bù DRAW.COÍ buô �           noô bù DRAWDEMO.COM) HI-RES.MAà (Z8° sourcå codå foò thå graphicó driveò �           routines) Yoõ maù makå copieó foò youò owî uså anä sharå theí witè � otheró buô nonå oæ theså fileó maù bå solä oò includeä witè anù � otheò itemó foò salå withouô thå writteî permissioî oæ Digitaì � Arts® Iæ yoõ likå theså programs¬ á contributioî maù bå senô tï � thå abovå address® Contributionó oæ $25.0° oò morå wilì bå � acknowledgeä anä yoõ wilì receivå thå latesô update® É wilì dï � mù besô tï responä tï reasonablå questionó oò commentó iæ yoõ � encloså aî SASE. *** Introduction *** Onå thinç á standarä Executivå lackó ió truå graphicó � capabilities® Therå ió á limiteä graphicó characteò seô whicè ió � usablå foò relativelù largå objectó anä thå programmablå � characteò seô allowó controì oæ individuaì pixels¬ buô onlù 25¶ � characteró arå available® Eveî iæ yoõ reprogrammeä alì thå � characters¬ yoõ coulä onlù filì abouô ³ lineó oæ thå displaù witè � higè resolutioî graphics® Yoõ coulä creatå youò owî blocë � graphiã characteò seô bù dividinç aî 8*1° pixeì characteò celì � intï ´ equaì blocks¬ eacè ´ pixeló widå anä µ pixeló high® Yoõ � coulä geô betteò resolutioî aô thå expenså oæ equaì blocë sizå bù � dividinç thå characteò celì intï ¸ blocks¬ 4 oæ thå blockó beinç � ´ pixeló widå bù ² pixeló higè anä thå otheò ´ blockó beinç ´ � pixeló widå bù ³ pixeló high® Dividinç thå characteò celì intï ¸ � blockó requireó 25¶ distincô characteró tï allo÷ foò alì possiblå � combinationó oæ blocë patternó withiî á characteò cell® Iæ yoõ � geô sneaky¬ yoõ caî cuô thå numbeò oæ characteró programmeä iî � halæ bù usinç reverså video® ± blocë oî anä · blockó ofæ ió thå � samå aó ± blocë ofæ anä · blockó oî iî reverså video. Resolutioî caî bå increaseä greatlù witè á hardwarå � modification® Witè twï inexpensivå TTÌ chipó anä twï ne÷ memorù � chips¬ yoõ caî increaså thå numbeò oæ characteró availablå tï � 1024® Yoõ caî filì oveò halæ thå screeî witè higè resolutioî �Šgraphicó anä yoõ geô tï chooså whicè halæ tï fill® Yoõ caî havå � á talì skinnù block¬ á shorô faô onå oò uså á rectanglå iî thå � centeò oæ thå screeî foò á 510 bù 20° pixeì graphicó display® Iæ � youò graphicó displaù leaveó nearlù halæ oæ thå characteò celló � blank¬ yoõ caî uså thå fulì 64° bù 24° pixeì capabilitieó oæ thå � Executive® Aó lonç aó yoõ don'ô reprograí thå maiî characteò � set¬ yoõ caî miø texô anä graphicó aô will® Iî á loweò resolutioî blocë graphicó mode¬ yoõ caî dividå � eacè characteò celì intï 1° blockó ´ pixeló widå anä ² pixeló � high® Thió giveó yoõ 102´ combinationó oæ blockó withiî eacè � characteò cell® Iæ yoõ uså thå reverså videï attribute¬ yoõ neeä � onlù prograí 51² distincô characters¬ leavinç yoõ anotheò 51² � characteró foò speciaì uses. *** DRAWDEMO.COM *** Thió prograí wilì worë witè á standarä Executive® Iô allowó � higè resolutioî drawing¬ erasing¬ movinç thå cursor¬ settinç oò � resettinç individuaì pixels¬ savinç anä loadinç drawingó froí � disk¬ anä printinç youò masterpiecå wheî iô ió complete® Iô � workó bù programminç custoí characteró aó needed® Iô wilì uså � alì 12¸ characteró oæ thå alternatå characteò seô anä thå 3² � speciaì graphicó characteró oæ thå maiî characteò set® Oncå alì � 16° availablå characteró arå useä up¬ youò drawinç ió finisheä � whetheò yoõ likå iô oò not® Iæ youò drawinç ió small¬ therå wilì � bå nï problem® Yoõ could¬ foò instance¬ creatå á 12¸ bù 10° � pixeì drawinç iî thå centeò oæ thå screen® Thió woulä bå 1¶ � characteò celló widå bù 1° characteò celló tall¬ usinç alì � availablå characters® Iæ yoõ leavå somå characteò celló blank¬ � theså arå availablå tï expanä thå heighô oò widtè oæ youò � drawing® Thå maiî menõ alwayó showó thå numbeò oæ characteró � remaining® Á littlå experimentatioî shoulä clarifù thå � capabilities. Oncå yoõ loaä DRAWDEMO¬ yoõ wilì bå askeä whetheò yoõ wanô � tï loaä thå characteò seô froí drivå Á oò drivå B® Thió loadó � thå regulaò ASCIÉ characteró oæ thå maiî characteò set¬ allowinç � theí tï bå includeä iî yoõ drawinç oò printed® Oncå thå � characteò seô ió loadeä yoõ wilì seå thå maiî menõ whicè showó � ho÷ manù characteró remaiî anä giveó yoõ á numbeò oæ options® � Yoõ maù savå oò loaä á drawinç froí disk¬ eraså thå currenô � drawinç anä begiî á ne÷ one¬ continuå á drawinç iî progress¬ oò � prinô thå drawing® Thå "Help¢ optioî displayó thå keyó anä � subcommandó availablå whilå drawing® Yoõ maù exiô thå drawinç aô � anù timå bù pressinç ® Thió returnó yoõ tï thå maiî menõ � allowinç yoõ tï prinô oò savå youò drawinç oî disk® Tï returî tï � youò drawinç iî progresó froí thå maiî menu¬ uså thå "Draw¢ � option. Afteò drawinç foò awhile¬ yoõ wilì finallù geô tï á poinô � wherå alì availablå characteró arå useä up® Thå cursoò wilì � simplù refuså tï move® Sometimes¬ thå ^Ò (Redraw© commanä wilì � bå ablå tï pickuð á littlå extrá space® Á quicë returî tï thå �Šmaiî menõ wilì sho÷ yoõ ho÷ manù characteró remain® Wheî thå � screeî ió redrawn¬ anù characteró thaô havå sincå becomå � completelù blanë arå recovereä anä makå availablå again® Thió � alsï happenó wheî yoõ returî tï thå maiî menõ anä theî � continuå drawing® Eveî thougè yoõ ruî ouô oæ ne÷ characters¬ yoõ � caî continuå tï changå existinç sectionó oæ thå drawing® � Changinç thå drawinç simplù reprogramó thå characteró alreadù � therå insteaä oæ creatinç ne÷ ones® Iæ yoõ eraså portionó oæ � youò drawinç witè thå "Erase¢ commanä oò puô spaceó intï thå � drawinç witè thå ^Ë (Keypress© commanä anä theî uså thå "Redraw¢ � command¬ yoõ caî gaiî á fe÷ morå characteró tï allo÷ yoõ tï � continuå á littlå longer® Remembeò thaô eveî movinç thå cursoò � maù requirå programminç ne÷ temporarù characteró whicè maù onlù � be recovered with ^R.� * Customizing DRAWDEMO or DRAW * Severaì installatioî optionó arå available® Theså arå thå � samå foò botè DRAWDEMÏ anä DRAW® Address Size in bytes Description 103H 1 Cursoò typå tï restorå oî exit® �                               Thió ió thå lasô bytå oæ thå �                               commandº ESà perioä IF MESG .PRINTX * MESG is on * ELSE .PRINTX * MESG is off * ENDIF ENDM ;The low X and Y coordinates must be the lower left of a character cell ;The high X and Y coordinates must be the upper right of a character cell LOCOL EQU 0 ;Offset to add to X coordinate for current window HICOL EQU 640-1 ;Max X coordinate for current window LOROW EQU 0 ;Offset to add to Y coordinate for current window HIROW EQU 240-1 ;Max Y coordinate for current window ;Validity check on above equates TEMP ASET LOCOL - 8*(LOCOL/8) TEMP ASET TEMP + (HICOL+1) - 8*((HICOL+1)/8) TEMP ASET TEMP + (HIROW+1) - 10*((HIROW+1)/10) TEMP ASET TEMP + LOROW - 10*(LOROW/10) IF TEMP NE 0 .PRINTX ! Error in LOCOL, HICOL, LOROW or HIROW equates ! ENDIF ROW_BYTS EQU (HICOL-LOCOL+1)/8 ;Number of bytes in a row COL_BYTS EQU (HIROW-LOROW+1)/10 ;Number of bytes in a column ;Character mask allows wrap-around to use lower 32 graphics characters ;Set to 0 to disable wraparound IF DEMO CHARMASK EQU 256-1 ;Wrap around to 0 after 255 ELSE CHARMASK EQU 1024-1 ;Wrap around to 0 after 1023 ENDIF ;These equates determine the lowest and highest usable graphics characters LOCHAR EQU 128 ;1st character (of 1024) available IF DEMO HICHAR EQU 256+(32 AND CHARMASK)-1 ;Highest character to use ELSE HICHAR EQU 1024+(32 AND CHARMASK)-1 ;Highest character to use ENDIF ;Command equates passed in register B CMDSET EQU 0 ;Command to set bit CMDRST EQU 1 ;Command to reset bit CMDTOG EQU 2 ;Command to toggle bit CMDGET EQU 3 ;Command to return bit status in A CMDASC EQU 4 ;Put ASCII character in DE at cursor position ;------------- ;Fixed Equates ;------------- VIDMEM EQU 0C000H ;Video character memory VIDATRB EQU 0D000H ;Video attribute memory CHRBNK1 EQU 10000000B ;Bank select code for 1st 4 character sets CHRBNK2 EQU 10100000B ;Bank select code for 2nd 4 character sets VIDBANK EQU 01000000B ;Bank select for video memory PBANK EQU 0 ;Bank select port PGRDAT EQU 1CH+2 ;Graphics data port PGRCTR EQU PGRDAT+1 ;Control port BGRPH EQU 1 ;Control bit for graphics hardware ;Low = graphics enabled. ;----------------------------- ;Program begins executing here ;----------------------------- COD_BEG: INIT: LD (MSTACK),SP ;Save current stack LD SP,STACK ;New stack ;Setup graphics mode in hardware IF NOT DEMO ;No hardware mod if demo version LD A,4 ;Select data register OUT (PGRCTR),A LD A,0FFH ;Make all bits high OUT (PGRDAT),A XOR A OUT (PGRCTR),A ;Select direction register LD A,0FFH OUT (PGRDAT),A ;Make all bits outputs LD A,4 OUT (PGRCTR),A ;Select data register again LD A,NOT BGRPH OUT (PGRDAT),A ;Make only this bit low ENDIF CALL CLEAR ;Clear screen CALL RESET ;Reset all graphics characters LD SP,(MSTACK) RET ;------------------------- ;Disable graphics hardware ;------------------------- DE_INIT: LD (MSTACK),SP ;Save current stack LD SP,STACK ;New stack ;Turn off graphics mode in hardware IF NOT DEMO ;No hardware mod if demo version IN A,(PGRDAT) OR BGRPH OUT (PGRDAT),A ;Make it high now ENDIF ;Copy ASCII character images back to bank 8 IF ASCII AND LOCHAR LT 128 IN A,(PBANK) PUSH AF OR CHRBNK1 ;Enable bank 8 OUT (PBANK),A LD BC,16*(128-LOCHAR) ;Number of bytes to move LD DE,16*LOCHAR ;Target address LD HL,MCHARDAT+(16*LOCHAR) ;ASCII character data LDIR POP AF OUT (PBANK),A ;Original bank selection restored ENDIF LD SP,(MSTACK) RET  .COMMENT ~ Manipulate bit: C = Y coordinate, HL = X coordinate Register B holds code for action to take CMDSET = Set bit CMDRST = Reset bit CMDTOG = Toggle bit CMDGET = Return status of bit in A CMDASC = Display ASCII character in DE at cursor position No registers are altered except AF Interrupts are disabled on entry and enabled on exit Returns Carry if unable to display because of range errors or because available characters are exhausted ~ DSPBIT: DI ;Make everything go faster LD (MSTACK),SP ;Save current stack LD SP,STACK ;New stack PUSH BC PUSH DE PUSH HL EXX PUSH BC PUSH DE PUSH HL EXX ;Engage main registers again ;Switch to alternate registers for now, need bit column in HL' PUSH BC ;Copy command in B to D' PUSH HL ;Bit column to HL' EXX POP HL POP DE IF LOCOL NE 0 ;Add offset if any LD BC,LOCOL ;Column offset ADD HL,BC JP C,DSPX ;Wrap around not allowed ENDIF ;Make sure column is within range LD A,LOW HICOL   SUB L LD A,HIGH HICOL SBC A,H JP C,DSPX ;Can't do it if column past max ;Convert column in HL to character column (0-79) in HL' and bit mask in C' LD A,L AND 111B ;Get bit within column ;Convert value in A (0-7) to bit pattern (10000000-00000001) LD B,A ;Counter XOR A ;Clear A to start INC B ;In case it was 0 SCF ;Bit to shift NXTB: RRA ;Shift bit DJNZ NXTB LD C,A ;Bit pattern now in C' ;Get character column in HL' now REPT 3 SRL H RR L ENDM ;HL = HL/8 ;Column (0-79) now in HL', bit within column in C' ;If this is a new column, clear saved column image data IF NOT FULSCRN ;Only keep image for current column if false LD A,(MNXTCOL) ;Current column in use CP L LD A,L LD (MNXTCOL),A ;Update current column CALL NZ,CLRCOL ENDIF EXX ;Bank to main registers LD A,C ;Need row in A ;Get row now IF LOROW NE 0 ADD A,LOROW JP C,DSPX ;Wraparound not allowed ENDIF ;Check row for valid range CP HIROW+1 CCF JP C,DSPX ;Can't do it if row too big ;Convert row to offset from top of screen NEG ADD A,240-1 ;Convert row to offset from top LD L,A ;Row to L LD A,10 CALL DIVLA ;L r A = L/A LD B,L ;Need row in B LD C,A ;Remainder in C ;Character row is in B, vertical offset from top row is in C ;Character column in HL', bit to manipulate in C' ;Command is in D' ;Find character image with current column data CALL CHARADR ;Get address of character image in HL ;If fetching bit image, do it now and get out quick EXX LD A,D ;Command EXX CP CMDGET JR NZ,NOTGET ;Not fetching, proceed as usual ;Fetching, HL holds base address, C holds offset, E holds bit mask ;Load masked bit into A and set flags LD B,0 INC HL INC HL ;Point to 1st byte of image ADD HL,BC ;Byte to fetch LD A,(HL) EXX AND C ;Bit mask JR DSPX ;Done NOTGET: CALL SETCHAR ;Set code in DE and (HL), assign if needed ;HL => character bit image, B holds row for display ;Carry set if no character available for display JP C,DSPX ;No character available if C LD A,B ;Row for display in A CALL DSPCHAR ;Load character in DE into video memory ;If just displaying ASCII, all done EXX LD A,D EXX CP CMDASC PUSH AF CALL Z,LOADASCI ;Copy ASCII image if C POP AF JR Z,DSPX ;All done ;Character stored, update bit image in memory ;Move pointer to proper byte within character PUSH HL ;Save base pointer LD B,0 ;BC = offset to top of character image ADD HL,BC ;HL => to byte for this pixel EXX LD A,C ;Character bit mask EXX ;Process bit command in D', bit pattern in C LD C,A ;Bit to process CALL CMDSUB LD (HL),A ;Bit pattern updated POP HL ;Base pointer restored ;Write character to memory CALL DSPBITS ;Load bit pattern into character memory DSPX: POP HL POP DE POP BC EXX POP HL POP DE POP BC LD SP,(MSTACK) EI RET ;---------------------------------------------------- ;Load character bit pattern into character memory ;DE holds character, HL = base address of bit patterns ;If character is < LOCHAR, do nothing ;----------------------------------------------------- DSPBITS: PUSH BC PUSH DE PUSH HL LD A,E SUB LOW LOCHAR LD A,D SBC A,HIGH LOCHAR JR C,DSPBTX ;Wrap around to 0 if needed IF CHARMASK LD A,LOW CHARMASK AND E LD E,A LD A,HIGH CHARMASK AND D LD D,A ENDIF EX DE,HL ;Base pointer to DE, character code to HL REPT 4 ;Multiply by 16 ADD HL,HL ENDM EX DE,HL ;Target address to DE, source in HL ;Extract bit 13 from character address LD A,D AND 00100000B LD C,A LD A,D AND 00011111B ;Mask off bit 13 LD D,A ;HL holds target address ;Source address in DE, switch in bank and move character pattern IN A,(PBANK) PUSH AF OR CHRBNK1 OR C ;Select correct chip OUT (PBANK),A LD BC,10 ;Number of bytes to move LDIR POP AF OUT (PBANK),A DSPBTX: POP HL POP DE POP BC RET ;----------------------------------------------------- ;Display character in DE in video memory ;If character is undefined (FFFF) just display a blank ;A holds row, HL' holds column ;----------------------------------------------------- DSPCHAR: PUSH BC PUSH DE PUSH HL LD L,A ;Row to L ;If DE = FFFF, then display a blank LD A,D AND E INC A ;A will be 0 if DE was FFFF JR NZ,DSPCHR1 LD DE,20H ;ASCII blank DSPCHR1: ;Wrap around to 0 if needed IF CHARMASK LD A,LOW CHARMASK AND E LD E,A LD A,HIGH CHARMASK AND D LD D,A ENDIF EX DE,HL ;Move character code into HL ADD HL,HL ;Bit 7 of L to bit 0 of H SRL L ;7 LS bits in L, 3 MS bits in H LD A,H REPT 4 ;Multply by 16 ADD A,A ENDM LD H,A ;Attributes set in H EX DE,HL ;Bit pattern in DE, row in L ;Get row address for video memory LD H,L LD L,0 SRL H RR L ;HL = HL * 128 ;Get column address EXX PUSH HL ;Column on stack EXX EX DE,HL ;Row address to DE EX (SP),HL ;Column address to HL ADD HL,DE ;Complete offset in HL LD DE,VIDMEM ADD HL,DE ;Actual absolute address now in HL POP DE ;Restore character bits ;Merge in character with current attributes IN A,(PBANK) PUSH AF OR VIDBANK OUT (PBANK),A ;Switch in video memory bank LD A,(HL) AND 80H OR E LD (HL),A ;LSB of character written LD BC,VIDATRB-VIDMEM ADD HL,BC ;Advance HL LD A,(HL) AND NOT 70H OR D LD (HL),A ;Complete character stored POP AF OUT (PBANK),A ;Turn off video bank POP HL POP DE POP BC RET ;----------------------------------------------------------------- ;Process command in D, SET, RESET, TOGGLE, etc. ;D holds command, A holds bit to process, (HL) holds current image ;----------------------------------------------------------------- CMDSUB: ;Try set first EXX LD A,D ;Command to process EXX CP CMDSET JR Z,DOSET ;Try reset next CP CMDRST JR Z,DORST ;Try toggle or cursor CP CMDTOG ;Toggle JR Z,DOTOG ;None of the above LD A,(HL) ;Don't change anything RET DOSET: LD A,C OR (HL) RET DORST: LD A,C CPL AND (HL) RET DOTOG: LD A,C XOR (HL) RET ;--------------------------------------------------------- ;Get pointer to character bit pattern in MCOLDAT in HL ;1st 2 bytes of bit pattern is character to display ;On entry, row must be in B, col. in HL' ;--------------------------------------------------------- CHARADR: PUSH BC PUSH DE ;Adjust for window offset if needed IF HIROW NE 240-1 LD A,B SUB 0+((240-1)-HIROW)/10 ;Offset from top of screen LD E,A ELSE LD E,B ENDIF LD D,0 ;Row within window in DE IF FULSCRN LD BC,12*ROW_BYTS ;Number of bytes in row CALL MLTBCDE ;DEHL = BC * DE PUSH HL ;Save current partial pointer EXX PUSH HL ;Get column EXX ;Adjust for window column offset if needed IF LOCOL EQ 0 POP DE ;Column to DE ELSE POP HL LD DE,LOCOL/8 ;Offset within window AND A SBC HL,DE EX DE,HL ;Corrected column to DE ENDIF LD A,10+2 ;Length of each column entry CALL MLTADE ;AHL = A * DE POP DE ;Previous partial product ADD HL,DE ;Complete pointer now in HL ELSE LD A,10+2 ;Number of bytes/character image CALL MLTADE ;AHL = A * DE ENDIF LD DE,MCOLDAT ;Base address ADD HL,DE ;HL => this character image POP DE POP BC RET ;---------------------------------------------------------------- ;Return character code in DE and (HL), HL must point to bit image ;If displaying ASCII, use that code ;Use current code if assigned ;Assign new code if none, Carry set if all characters used up ;On return, HL points to first byte of bit image ;---------------------------------------------------------------- SETCHAR: PUSH BC ;If CMDASC, then display ASCII character in DE EXX LD A,D ;Command EXX CP CMDASC JR Z,SETCH1 LD E,(HL) INC HL LD D,(HL) ;Current character in DE INC HL ;Advance to bit pattern ;See if this character is already assigned LD A,D AND E ;Both will be FF if no character assigned INC A ;0 if not yet assigned JR NZ,SETCHX ;Already there if NZ ;Assign a character to this character cell and put into video memory CALL GET_NEXT ;Get next character in DE ;DE holds next available character, if none, DE=" " and carry is set JR C,SETCHX ;Can't display if C ;Store character in column image data area DEC HL DEC HL ;Back to beginning SETCH1: LD (HL),E ;Character code stored INC HL LD (HL),D INC HL ;Back to image data AND A ;Clear carry SETCHX: POP BC RET ;--------------------------------------------------- ;Load DE with next available character from (MNXTCHR ;If no more characters are available, DE = " " ;and the carry flag is set ;--------------------------------------------------- GET_NEXT: PUSH HL LD HL,(MNXTCHR) ;Next character code ;Make sure another character is available LD A,LOW HICHAR SUB L LD A,HIGH HICHAR SBC A,H LD DE,20H ;In case nothing available JR C,GETNX1 ;Can't display if C ;OK so far, increment next character LD E,L LD D,H ;Character to DE INC HL LD (MNXTCHR),HL GETNX1: POP HL RET ;------------------------------- ;Multiply A * DE, product in AHL ;------------------------------- MLTADE: PUSH BC LD B,8 ;Counter LD HL,0 ;Initialize product MLTLP: ADD HL,HL ;Shift product RLA ;Rotate multiplier JR NC,MLT1 ADD HL,DE MLT1: DJNZ MLTLP POP BC RET ;--------------------------------- ;Multiply BC * DE, product in DEHL ;--------------------------------- MLTBCDE: LD A,16 ;Counter LD HL,0 ;Initialize product MLTBCLP: ADD HL,HL ;Rotate product EX DE,HL ADD HL,HL ;Rotate multiplier EX DE,HL JR NC,MLTBC1 ADD HL,BC JR NC,MLTBC1 INC DE MLTBC1: DEC A JR NZ,MLTBCLP ;Go for the count RET ;-------------------------------------------- ;Divide L by A, quotient in L, remainder in A ;-------------------------------------------- DIVLA: PUSH BC LD C,A ;Divisor to C LD B,8 ;Number of bits to divide LD H,L ;Need dividend here XOR A ;Initialize remainder DIVLP: ADD HL,HL ;Rotate 1st bit of dividend RLA ;Shift divisor into A CP C JR C,DIVNXT ;Can't do it if Carry SUB C ;Do it for real this time INC L ;Set bit in quotient DIVNXT: DJNZ DIVLP POP BC RET ;--------------------------------- ;Clear screen and character memory ;--------------------------------- CLEAR: PUSH BC PUSH DE PUSH HL LD C,6 LD E,"Z"-40H CALL 5 ;Clear screen POP HL POP DE POP BC RET HIRSFILL: LD (HL),0 INC HL DEC BC LD A,B OR C JR NZ,HIRSFILL RET .COMMENT ~ Clear screen and compress graphic codes, recovering any that have been abandoned. Any characters that are FFFF or have all bits set to 0s will be ignored. All valid characters will have new codes assigned and will be redisplayed. ~ COMPRES: IF FULSCRN ;Only possible with full screen images DI LD (MSTACK),SP ;Save current stack LD SP,STACK ;New stack PUSH AF PUSH BC PUSH DE PUSH HL EXX PUSH HL EXX CALL CLEAR ;Clear screen LD HL,LOCHAR ;Next available character LD (MNXTCHR),HL ;Store it here LD HL,MCOLDAT ;Character images LD C,0+((240-1)-HIROW)/10 ;1st absolute character row ;Do one complete row CMPROW: EXX LD HL,LOCOL/8 ;Absolute character column EXX LD B,ROW_BYTS ;Number of bytes in a row CMPLP: PUSH BC ;This isn't needed for now ;Check current character to see if it is defined LD E,(HL) INC HL LD D,(HL) ;Current character in DE INC HL ;Point to character image ;Make sure all bits are not 0 PUSH HL ;Save pointer LD B,10 ;Number of bytes to check XOR A BIT0CHK: OR (HL) JR NZ,KEEPCHR ;This is a keeper if NZ INC HL ;Next byte DJNZ BIT0CHK ;Check all bytes ;All bits are 0, zap this character LD DE,0FFFFH ;Delete this character POP HL DEC HL LD (HL),D DEC HL LD (HL),E ;Clear in MCOLDAT too INC HL INC HL JR CMPDSP ;Just advance to display ;Assign it a code if not null or ASCII and load into memory KEEPCHR: POP HL ;Restore pointer ;Check to see if this is an ASCII character LD A,E SUB LOW LOCHAR LD A,D SBC A,HIGH LOCHAR IF ASCII PUSH AF CALL C,LOADASCI POP AF ENDIF JR C,CMPDSP ;Don't assign new code to ASCII CALL GET_NEXT ;Get next character in DE CALL C,LOADASCI ;Blank bit image if no more characters DEC HL LD (HL),D DEC HL LD (HL),E ;New code assigned INC HL INC HL ;Advance to bit image data CALL DSPBITS ;Load into character memory CMPDSP: LD A,C ;Need row in A CALL DSPCHAR ;Load into video memory CMPNEXT: LD BC,10 ;Offset to next character ADD HL,BC ;Advance pointer POP BC ;Recover row and column counter ;Advance to next column EXX INC HL ;Advance to next column EXX DJNZ CMPLP ;Do next character of current row ;One row done, advance to next one INC C  LD A,C CP 0+(240-LOROW)/10 ;Max character row JR NZ,CMPROW ;Do another row if any left ;All done, restore registers and exit EXX POP HL EXX POP HL POP DE POP BC POP AF LD SP,(MSTACK) EI ENDIF ;End of IF FULSCRN RET ;---------------------------- ;DE holds character code ;HL points to MCOLDAT image ;Copy ASCII character pattern ;---------------------------- LOADASCI: IF ASCII ;This is an ASCII character, copy image to (HL) PUSH BC PUSH DE PUSH HL PUSH HL ;Save target address EX DE,HL ;Character code to HL REPT 4 ADD HL,HL ;Multiply by 16 ENDM LD DE,MCHARDAT ;Base address of character data ADD HL,DE ;HL points to source POP DE ;Target for move LD BC,10 ;Number of bytes to move LDIR POP HL POP DE POP BC ENDIF ;End of IF ASCII RET ;-------------------------------------------------- ;Reset all graphics characters, start in 1st column ;-------------------------------------------------- RESET: LD HL,LOCHAR ;1st character to use LD (MNXTCHR),HL ;Next character to use XOR A ;Start all over in column 0 LD (MNXTCOL),A ;Current column in use ;Fall through to clear column data routine ;------------------------- ;Clear current column data ;------------------------- CLRCOL: PUSH BC PUSH DE PUSH HL LD HL,MCOLDAT ;Beginning of column storage PUSH HL ;Save beginning address LD (HL),0FFH INC HL LD (HL),0FFH ;FFFF means no character currently entered INC HL LD BC,10 ;Number of bytes of character data CALL HIRSFILL ;Fill HL with 0 for count in BC EX DE,HL ;Current pointer to DE POP HL ;Beginning of table IF FULSCRN LD BC,12*ROW_BYTS*COL_BYTS-12 ELSE LD BC,12*COL_BYTS-12 ;Remaining bytes in table ENDIF LDIR POP HL POP DE POP BC RET COD_END: ;Define end of program code for block moves MNXTCOL: DS 1 ;Current column in use MNXTCHR: DS 2 ;Next available character ;Stack space MSTACK: DS 2 ;Storage for previous stack  DS 80H STACK: ;Storage for character data (ASCII characters) MCHARDAT: DATASIZE ASET MCHARDAT-COD_END ;Size of data area IF ASCII DATASIZE ASET DATASIZE + 16*128 ;Storage for ASCII characters ENDIF ;Storage for current column under construction ;For each character cell in the column there is: ;2 byte character code, FFFF if no entry so far ;10 bytes character data, all 0s if blank ; 1st byte is top row, bit 7 is left side of character MCOLDAT EQU COD_END+DATASIZE IF FULSCRN DATASIZE ASET DATASIZE + (2+10)*ROW_BYTS*COL_BYTS ELSE DATASIZE ASET DATASIZE + COL_BYTS*(2+10) ENDIF PRTSIZE MACRO VAL .PRINTX ~ HI-RES.MAC is VAL (hex) bytes ~ ENDM TEMP ASET DATASIZE+(COD_END-COD_BEG+1) .RADIX 16 PRTSIZE %TEMP .RADIX 10 ;End of HI-RES.MAC ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿG8D@@LD<rXd@@@a4LDL4pXdDdX@@h@@XdDDDic8@@@8s<@8xÿÿMDlTTTDDo8DDD8d4LDL4ÿÿ7| @4(H|L@@@@@@|S8D@8D808DLTdD888DD8DD8ÿÿa4LDL4nXdDDDd4LDL4ÿÿ7| @4(H|L@@@@@@|S8D@8D81085|@xD87| @ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€??000�ÿÿ‚ÿÿƒÿÿ„ÿÿ…ÿÿ†ÿÿ‡ðøÿÿÿÿÿÿÿÿÿÿˆ‰?àÀ€Šÿÿ‹ÿÿŒÿÿ�ÿÿŽÿÿ�ÿÿ�øøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ108ÿÿ‘0000000000ÿÿÿÿÿÿÿÿÿÿÿÿ’“€Ààp8”ÿÿ•ÿÿ–ÿÿ—ÿÿ˜8pàÀ€ÿÿÿÿÿÿÿÿÿÿ+|5|@xD8™28D8@@|08DLTdD8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿš›ÿœÿ�ÿžð000000000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ7| @4(H|S8D@8D83|D87| @4(H|ÿÿÿÿÿÿÿÿÿÿÿÿŸ ÿ¡ÿ¢ÿ£ÿ¤ÿ¥øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ28D8@@|ÿÿ¦0000000000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§¨10898DD<pÿÿÿÿ©ª€@€4(H|.7| @KDHP`PHDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ7| @4(H|L@@@@@@|S8D@8D81085|@xD87| @ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«¬ÿ­ÿ®ÿ¯ð000000000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°±²ÿ³ÿ´€ÿÿµ @ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶·ÿÿ¸ÿÿ¹þÿº€ÿ»ÿþ¼ÿ€½ÿÿ¾ÿÿ¿üü ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3|D8ÿÿÀ0000000000ÿÿÁÂÿÃÿÄÿÅÿÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑÿÒÿÓ8|ü|8Ô10888DD8DD8ÿÿÿÿÕ @Ö€@€ÿÿÿÿPxDDx@@@inXdDDDÿÿ108ÿÿUDDDDDD8C8D@@@D81083|D8ÿÿ108×S8D@8D8L@@@@@@|C8D@@@D8ÿÿÿÿÿÿ+|5|@xD8Ø 1086 @xDD8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÚÿÛÿÜÿÝð000000000ÿÿÞÿÿßàÿÿáÿÿâÿÿãÿÿäàð åÿÿæÿÿç0`À€èÿÿéÿÿêÿÿëÿÿ쀀€€€€ÿÿÿÿíîïÿðÿñÿò€€€€€€€€€€ó ô€@€ÿÿÿÿõöÿ÷ÿøÿùÿúÿûÿüÿýÿþÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿø ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ4(H|ÿÿ0000000000ÿÿ 8|108 ÿÿÿÿÿÿ7| @4(H|L@@@@@@|S8D@8D808DLTdD888DD8DD8ÿÿÿÿ  €€€€€€€€€€1084(H| 8|1087| @ÿÿ€€€€€€€€€€ @ ÿÿÿÿÿÿPxDDx@@@inXdDDDÿÿ28D8@@|ÿÿUDDDDDD8DxDDDDDx1085|@xD8ÿÿ28D8@@|A(DD|DD08DLTdD8ÿÿÿÿÿÿÿÿO8DDDDD8E|@@x@@| 1085|@xD8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€ÿÿÿÿð000000000ÿÿ|8ÿÿÿÿÿÿà øÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !ÿ€€€€€€€€€"ÿ#ÿ$ü|8%&ÿ'ÿ(€)€€€€€€€€€€*ÿÿÿÿÿÿ+,ÿ-ÿ.ÿ/ÿ0ÿ1ÿ2ÿ3ÿ4ÿ5ÿ6ÿ7øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8 9ÿ:ÿ;øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<€€€€€€€€€€ÿÿÿÿ5|@xD8ÿÿ=0000000000ÿÿ>28D8@@|?@AB ÿCÿDÀ@@@@@@@ÿÿÿÿÿÿÿÿÿÿÿÿEF€€€€€€€€€€1083|D8G8|H1086 @xDD8ÿÿI€€€€€€€€€€Jÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ3|D8KBxDDxDDx08DLTdD8ÿÿÿÿÿÿÿÿÿÿÿÿL 1084(H|MÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿN€€€€€€€€€€OPÿQÿRÿSð000000000ÿÿTUÿVÿWøXÿÿÿÿY@@@@@@@@@@ÿÿÿÿÿÿZ[ÿ\ÿÿ]ÿ^ÿ€€€€€€€€€_ÿ`ÿaü|8bcÿdÿe€f€€€€€€€€€€ghiÿjÿkÿlÿmÿnÿoÿpÿqÿrÿsÿtÿuÿvÿwøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿx yÿzü{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|€€€€€€€€€€ÿÿÿÿ6 @xDD8ÿÿ}0000000000ÿÿÿÿ3|D8~ÿÿ€€ � €‚@€ÿÿÿÿƒ„ÿ…ÿ†á!!!!!!!‡ˆ€€€€€€€€€€10828D8@@|‰Š1085|@xD8ÿÿ‹€€€€€€€€€€Œ�ÿÿPxDDx@@@inXdDDDÿÿ28D8@@|3|D8ÿÿ6 @xDD828D8@@|6 @xDD84(H|ÿÿ4(H|ŽYDD(08DLTdD8ÿÿÿÿÿÿÿÿÿÿÿÿ� 1083|D8�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*T88TG8D@@LD<rXd@@@a4LDL4pXdDdX@@h@@XdDDDic8@@@8s<@8xÿÿ‘ÿ€€€€€€€€€’ÿ€€€€€€€€€“ÿ”ÿ•ÿ–ÿ—ÿ000000000˜ÿ™à ÿÿš›ÿœÿ�ÿÿÿÿÿÿÿÿÿžÿÿÿÿŸ!  ÿ¡ÿ€€€€€€€€€¢ÿ£ÿ¤ð¥¦ÿ§ÿ¨À©€€€€€€€€€€ª«ÿÿ¬­ÿ®ÿ¯ÿ°ÿ±ÿ²ÿ³ÿ´ÿµÿ¶ÿ·ÿ¸ÿ¹øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿº »ÿ¼ü½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS8D@8D8e8D|@<le8D|@<c8@@@8t8¾ÿÿÿÿÿÿ¿€€€€€€€€€€À€€€€€€€€€€ÿÿÿÿ7| @ÿÿÁ0000000000ÿÿ 4(H|ÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÅ€@ Æà€€€Ç @€ÈÉ€€€€€€€€€€108108ÿÿÊ1084(H|ÿÿË€€€€€€€€€€ÌÍÿÿÿÿPxDDx@@@inXdDDDÿÿ7| @ÿÿUDDDDDD8DxDDDDDx10828D8@@|ÿÿ5|@xD8ÎA(DD|DD108ÿÿÿÿÿÿÿÿÿÿÿÿÏ 10828D8@@|ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑ?ÒÿÓÿÔÿÕÿÖÿ×ÿØÿÙüÚÿÛ€€€€€€€ÿ€€Ü€€€€€€€ÿ€€ÝÿÞÿÿßÿÿàÿÿáð000000ÿ00âÿã?äÿåÿæÿçÿÿèÿÀ@@éðÿÿÿÿÿÿÿÿÿÿêÿëÿìÿ퀀€€€€€€€€ÿÿÿÿîïÿðÿÿñÿÿòÀÿó€€€€€€€ÿ€€ô>þ>õÿÿÿÿö÷ÿøÿùÿúÿûÿüÿýÿþÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€ €€€€€€€€€€ÿÿÿÿ88DD8DD8ÿÿ 0000000000 ÿÿ5|@xD8  @@@@ÿÿÀ@@@@@ÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€10808DLTdD81083|D8ÿÿ€€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6 @xDD8BxDDxDDx108ÿÿÿÿÿÿÿÿÿÿÿÿ 108108ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€ÿÿ ÿÿ!ÿÿ"ÿÿ#ð00000ÿ000$à %ÿ&ÿ'ÿ(ø)ÿÿÿÿ*@@@@@@@@@@ÿÿÿÿÿÿ+,ÿ-ÿÿ.ÿÁ/ÿ€€€€€€€€€0ÿ1ÿ2ð34ÿ5ÿ6À7€€€€€€€€€€89:;ÿ<ÿ=ÿ>ÿ?ÿ@ÿAÿBÿCÿDÿEÿFÿGÿHøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿI JÿKüLÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMÿÿÿÿÿÿN€€€€€€€€€€ÿÿÿÿÿÿ98DD<pÿÿO0000000000P ÿÿ6 @xDD8QÿÿRSÀ TàU@@@€ÿÿÿÿVWÿXÿYà ZAAAAAAAAAA[€€€€€€€€€€98DD<pÿÿÿÿ\10828D8@@|ÿÿ]€€€€€€€€€€^_`ÿÿPxDDx@@@inXdDDDÿÿ28D8@@|ÿÿ6 @xDD828D8@@|6 @xDD84(H|ÿÿ7| @aYDD(108ÿÿÿÿÿÿÿÿÿÿÿÿb 10808DLTdD8cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿdÿÿÿÿÿÿe€€€€€€€€€€ÿÿfgÿhÿiÿjð000000000k?lÿmÿnÿoÿpÿqÿÿÿÿÿÿÿÿÿrÿÿÿÿs tuÿ€€€€€€€€€vÿwÿxÿyÿzÿ{ÿ|ÿ}ÿ€€€€€€€€€~ÿÿ€ÿÿÿ�‚ÿƒÿ„ÿ…ÿ†ÿ‡ÿˆÿ‰ÿŠÿ‹ÿŒÿ�øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽ �ÿ�à‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’ÿÿÿÿÿÿ“€€€€€€€€€€ÿÿÿÿ10808DLTdD8ÿÿ”0000000000ÿÿÿÿ7| @•G8D@@LD<rXd@@@o8DDD8uDDDL4nXdDDDd4LDL4ÿÿ–—€@ ˜à€€€™ @€š›€€€€€€€€€€88DD8DD8ÿÿÿÿœ108108ÿÿ�€€€€€€€€€€žŸÿÿÿÿPxDDx@@@inXdDDDÿÿ88DD8DD8ÿÿUDDDDDD8C8D@@@D81083|D8ÿÿ88DD8DD8 G8D@@LD<NDDdTLDDDxDDDDDxÿÿÿÿÿÿÿÿÿÿ¡ 98DD<pÿÿ¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£ÿÿÿÿÿÿ¤€€€€€€€€€€ÿÿ¥¦ÿ§ÿ¨ÿ©ÿ000000000ªÿ«ÿ¬ÿ­þ®ÿÿ¯ÿÿ°ÿÿ±ÿÿ²ÿÿ³ÿÿ´ÿÿµÿÿ¶ÿÿ·ÿÿÿ¸ÿÿÿ¹ÿÿÿºÿ€€€€€€€€€»ÿ¼À@@@@@@@½ÿ¾ÿ¿ÿÿÀÿÿÁÀÿ€€€€€€€€€ÃÄÿÿÿÿÅÆÿÇÿÈÿÉÿÊÿËÿÌÿÍÿÎÿÏÿÐÿÑøÒÿÿÓÿÿÔÿÿÕÿÿÖÿÿ×ÿÿØÿÿÙÿÿÚ üüÛÿÜ€ÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÿÿÿÿÿ߀€€€€€€€€€ÿÿÿÿÿÿÿÿÿÿà000000??áÿÿâÿÿãÿÿäÿÿåÿÿæÿÿçÿÿèÿÿéÿÿêÿÿëÿÿìÿÿíÿÿîÿÿïÿÿðÿÿñÿÿòÿÿóÿÿôÿÿõøøÿÿÿÿÿÿö@@÷ÿøþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúûÿüÿýÿþ€€Àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@@Àÿ>>ÿÿ ÿ!ÿ"ÿ#ÿ$ÿ%ÿ&ÿ'ÿ(ÿ)ÿ*ÿ+ÿ,ÿ-ÿ.ÿ/ÿ0ÿ1ÿ2ÿ3ÿ4ÿ5ÿ6ÿ7ÿ8ÿ9ÿ:øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ª U ª U ª U ª U ª U ª ð ð ð ð ð ð ð ð ð ð ð ÿ � � � � � � � � � ÿ  < ~ ÿ ~ <   ÷ ã à � � � � Ã Ç ï ÿ ÿ Ì Ì Ì Ì Ì Ì Ì ÿ ÿ åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå10 '------------------------------------------------------------------------ 20 '| PIXGEN.BAS, Version 1.0, 10 April 1984 | 30 '| | 40 '| With this program, you can design literal or graphic characters on | 50 '| the CRT. The program calculates the byte values for each column of | 60 '| dots for output to the Epson printer. You can store, retrieve, | 70 '| edit, and test-print your creations. You can also print a full | 80 '| listing of your font file. The program creates two files on disk | 90 '| B: "FONT.PIX", which is a random access file containing the ascii | 100 '| printable codes, and "PIXRN.DAT", which stores the last record number| 110 '| of the random access file. The variables are listed beg.line 60000. | 120 '| | 130 '| By Jim Shoemaker,1743-B So Hayes St Arl VA 22202 (703) 892-8567 | 140 '------------------------------------------------------------------------ 200 ' main program 202 ' 204 CLEAR 205 GOSUB 60000 'initialize variables 206 ON ERROR GOTO 235 208 PRINT CURSOFF$ 'turn off cursor temporarily 210 PRINT CL$ 'clear screen 212 RC$=FNS$(2,50) 'row/column coordinates 215 PRINT RC$ "Designing new char " 220 GOSUB 1000 'draw grid 230 GOSUB 1100 'display menu 232 PRINT CURSON$ 'turn cursor back on 235 R=2:C=2 'set row/col coordinates 240 RC$=FNS$(R,C):PRINT RC$; 'position cursor 260 Q$=INKEY$ 'accept keyboard input 261 IF Q$="" THEN 260 'null input 262 Q = ASC(Q$) 270 GOTO 350  'test if statements 315 END 316 ' 345 '-------------------------------- menu selections----------------------- 350 IF Q = 46 THEN GOSUB 1500:GOTO 260 'turn dot cell on/off 355 IF Q = 83 OR Q = 115 THEN GOTO 1900 'save 360 IF Q = 84 OR T = 116 THEN GOTO 1700 'test print char 365 IF Q = 76 OR Q = 108 THEN GOTO 9000 'list char codes 370 IF Q = 99 OR Q = 67 THEN CL=1:GOTO 600 'clear char 375 IF Q = 80 OR Q = 112 THEN GOTO 10200 'print char chart 380 IF Q = 81 OR Q = 113 THEN GOTO 1600 'quit 385 IF Q = 73 OR Q = 105 THEN GOTO 600 'invert char 390 IF Q = 69 OR Q = 101 THEN GOTO 1800 'edit char from disk 391 IF Q = 55 THEN GOTO 235 'home cursor 392 IF Q = 57 THEN R=2:C=CM+2:GOTO 240 'cursor top right corner 393 IF Q = 49 THEN R=RM+2:C=2:GOTO 240 'cursor bottom left corner 394 IF Q = 51 THEN R=RM+2:C=CM+2:GOTO 240  'cursor bottom right corner 395 IF Q = 52 THEN R=R:C=2:GOTO 240 'cursor to left margin 396 IF Q = 54 THEN R=R:C=CM+2:GOTO 240 'cursor to right margin 397 IF Q = 56 THEN R=2:C=C:GOTO 240 'cursor to top margin 398 IF Q = 50 THEN R=RM+2:C=C:GOTO 240 'cursor to bottom margin 399 GOSUB 1300:GOTO 260 'arrow key pressed 400 '--------------------------------- file field statements----------------- 402 ' 410 FIELD#2,3 AS FB0$,3 AS FB1$,3 AS FB2$,3 AS FB3$,3 AS FB4$,3 AS FB5$,3 AS FB6$,3 AS FB7$,3 AS FB8$,3 AS FB9$,3 AS FB10$ 420 RETURN 600 '--------------------------------- invert or clear char ----------------- 601 ' 605 'If menu selection is "c" then ONOFF = 0 ELSE W 610 OUT 0,65 620 FOR C = 0 TO CM 630 FOR R = 0 TO RM 640 P = (CH+O)+((2+R)*W)+(2+C) 650 CB = PEEK(P) 'look at cell attribute 655 IF CL = 1 THEN ONOFF = 0 ELSE ONOFF = W 660 IF CB < W THEN CB = CB + ONOFF ELSE CB = CB - W 670 POKE P,CB 680 NEXT R 690 NEXT C 692 OUT 0,1 693 EOPTION=0 694 GOTO 235 999 ' 1000 '-------------------------------- draw grid ---------------------------- 1003 ' 1010 U = CH+(2*W)+2 'starting cell of grid 1020 O = 4096 'diff from attribute bank 1025 OUT 0,65 'enable video bank 1030 FOR C = 0 TO CM 1040 FOR R = 0 TO RM 1045 P=U+(R*W)+C 1050 POKE P,D:POKE P+O,H 'draw grid 1060 NEXT R 1070 NEXT C 1080 OUT 0,1 'restore bank 1090 RETURN 1099 ' 1100 '-------------------------------- display menu ------------------------ 1102 ' 1105 RC$=FNS$(11,2) 1110 PRINT RC$ "WELCOME TO PIXGEN" 1115 PRINT 1120 PRINT " Use cursors to move around grid." 1122 PRINT " Use number pad to skip to corners (odd) and sides (even)" 1125 PRINT 1130 PRINT ' (.) = DOT on/off 's' = Save char on disk" 1140 PRINT " 't' = Test char on printer 'e' = Edit char from disk" 1150 PRINT " 'l' = List char codes 'p' = Print char code chart" 1160 PRINT " 'i' = Invert char 'c' = Clear char 1170 PRINT " 'q' = Quit" 1180 RETURN 1299 ' 1300 '-------------------------------- cursor position --------------------- 1311 ' 1340 IF Q = 12 THEN C = C + 1: R = R 'cursor right 1350 IF Q = 10 THEN R = R + 1: C = C 'cursor down 1360 IF Q = 11 THEN R = R - 1: C = C 'cursor up 1365 IF Q = 8 THEN C = C - 1: R = R 'cursor left 1370 IF C = CM+3 THEN C = 2: R = R 'margin checks 1380 IF C = 1 THEN C = CM+2: R = R 1390 IF R = RM+3 THEN R = 2: C = C 1400 IF R = 1 THEN R = RM+2: C = C 1410 RC$ = FNS$(R,C):PRINT RC$;:RETURN 'reset cursor 1499 ' 1500 '-------------------------------- turn dots on/off -------------------- 1502 ' 1505 OUT 0,65 'enable video 1508 P = CH + O + (R*W) + C 1510 CB = PEEK(P) 'look at cell attribute 1520 IF CB < W THEN CB=CB+W ELSE CB=CB-W 'if bright, make dim 1530 POKE P, CB 1535 OUT 0,1 'restore video state 1540 RETURN 1599 ' 1600 '-------------------------------- quit routine ------------------------ 1610 ' 1615 RC$=FNS$(22,0) 1620 PRINT RC$:PRINT "Quit? (y/n)"; 1630 Q$ = INKEY$: IF Q$ = "" THEN 1630 1640 IF ASC(Q$) = 89 OR ASC(Q$) = 121 THEN 1680 ELSE 1650 1645 RC$=FNS$(22,0) 1650 PRINT RC$:PRINT SPC(11):GOTO 235 1680 PRINT CL$ 1682 RC$=FNS$(10,10) 1685 PRINT RC$ "To restart, type 'RUN'," 1690 GOTO 315 'end 1699 ' 1700 '-------------------------------- test print char --------------------- 1702 ' 1703 PPF=1 1704 RC$=FNS$(22,0) 1705 PRINT RC$ 1706 PRINT "Be sure printer is on line. When ready, press any key."; 1707 Q$=INPUT$(1) 1709 PRINT RC$:PRINT SPC(65) 1710 RC$=FNS$(2,50) 1711 PRINT RC$ 1712 PRINT RC$ "Testing char nr. "+F$; 1715 C=2:R=2:GOSUB 2120 1720 LPRINT ESC$+"L"+CHR$(CM+1)+CHR$(0); 'prepare printer buffer 1730 FOR C=0 TO CM 1740 LPRINT CHR$(B(C)); 'output byte to printer 1750 NEXT C 1775 PPF=0 1777 LPRINT ESC$+"@"; 'reset printer codes 1780 GOTO 235 'return to menu 1799 ' 1800 '-------------------------------- load pixel -------------------------- 1801 ' 1811 CLOSE 1815 OPEN "I",#3,"B:PIXRN.DAT":INPUT#3,RN:CLOSE#3 1818 RC$=FNS$(22,0) 1820 PRINT RC$ "Ascii code you wish to edit? (000 - "; 1822 IF RN<10 THEN PRINT USING "00#";RN;:GOTO 1829 1824 IF RN>9 AND RN<99 THEN PRINT USING "0##";RN;:GOTO 1829 1826 IF RN>99 THEN PRINT USING "###";RN; 1829 PRINT ")"; 1830 INPUT;F$ 1832 RC$ = FNS$(22,0) 1835 PRINT RC$ + SP$ 1840 IF LEN(F$) <> 3 THEN PRINT BEEP$;:GOTO 235 'try again 1845 RC$ = FNS$(2,50) 1850 PRINT RC$ + "Editing char nr. ";F$ 1860 OPEN "R",#2,"B:FONT.PIX",N 'open random access file 1862 GOSUB 400 'field statements 1864 COUNT=VAL(F$) 1865 GET#2,COUNT+1 'bring in a record 1866 ' 1872 B(0) = CVI(FB0$) 'convert variables 1873 B(1) = CVI(FB1$) 1874 B(2) = CVI(FB2$) 1875 B(3) = CVI(FB3$) 1876 B(4) = CVI(FB4$) 1877 B(5) = CVI(FB5$) 1878 B(6) = CVI(FB6$) 1879 B(7) = CVI(FB7$) 1880 B(8) = CVI(FB8$) 1881 B(9) = CVI(FB9$) 1882 B(10)=CVI(FB10$) 1883 ' 1884 OUT 0,65 'enable video 1885 FOR R = 0 TO RM 'calculate whether each 1886 FOR C = 0 TO CM 'bit is on or off 1887 IF B(C)/(2^(RM-R))=>1 THEN D(C,R)=W ELSE D(C,R)=0 1888 IF (2^(RM-R)) > B(C) THEN B(C)=B(C) ELSE B(C)=B(C)-(2^(RM-R)) 1889 P=U+(R*W)+C:POKE P,D:POKE P+O,D(C,R) 1890 NEXT C 1892 NEXT R 1893 OUT 0,1 'restore bank 1894 CLOSE 1897 GOTO 235 'back to menu 1899 ' 1900 '-------------------------------- save ------------------------------- 1915 ' 1918 LET GARBAGE = FRE("A") 1920 RC$=FNS$(22,0) 1930 PRINT RC$ "Ascii code for byte? (3 digits less than 256)"; 1935 INPUT;F$ 1940 RC$=FNS$(22,0) 1950 PRINT RC$ + SP$ 1956 IF LEN(F$) <> 3 THEN PRINT BEEP$;:GOTO 235 'try again 1959 RC$=FNS$(2,50):PRINT RC$ " Saving char nr.";F$; 2000 ' 2010 'Begin saving byte values on disk 2015 ' 2120 COUNT = 14 'screen pos for msg 2122 OUT 0,65 'enable video 2125 FOR C = 0 TO CM 2130 FOR R = 0 TO RM 2140 P = (U + O) + (R*W) + C 2150 CB = PEEK(P) 2160 IF CB > W THEN D(R,C) = 2 ^ (RM-R) ELSE D(R,C) = 0 2165 CL(R,C)=P-O:AL(R,C)=P 2167 AB(R,C)=CB:IF PPF=1 THEN 2170 2170 NEXT R 2175 B(C)=D(0,C)+D(1,C)+D(2,C)+D(3,C)+D(4,C)+D(5,C)+D(6,C)+D(7,C) 2176 COUNT=COUNT+3 2178 PRINT FNS$(C+2,COUNT);USING "####";B(C) 2180 NEXT C 2190 OUT 0,1 'restore bank 2192 COL = 0 2195 IF PPF=1 THEN RETURN 2204 ' 2205 ' store codes into random access file 2206 ' 2210 OPEN "R",#2,"B:FONT.PIX",N 2215 OPEN "I",#3,"B:PIXRN.DAT" 2218 INPUT#3,RN:CLOSE#3 'get stored record total 2220 GOSUB 400 'field statements 2221 ' 2260 LSET FB0$=MKI$(B(0)) 2270 LSET FB1$=MKI$(B(1)) 2280 LSET FB2$=MKI$(B(2)) 2290 LSET FB3$=MKI$(B(3)) 2300 LSET FB4$=MKI$(B(4)) 2310 LSET FB5$=MKI$(B(5)) 2320 LSET FB6$=MKI$(B(6)) 2330 LSET FB7$=MKI$(B(7)) 2340 LSET FB8$=MKI$(B(8)) 2350 LSET FB9$=MKI$(B(9)) 2360 LSET FB10$=MKI$(B(10)) 2361 ' 2369 COUNT=(VAL(F$))+1 2370 PUT#2,COUNT 'write code record to file 2375 CLOSE#3 2378 IF VAL(F$)>RN THEN RN=VAL(F$) 2380 OPEN "O",#3,"B:PIXRN.DAT":PRINT#3,RN 'store new record total 2390 CLOSE 2395 PRINT ESC$+LOCK$; 'lock keyboard for a bit 2396 FOR X=1 TO 100:COUNT=COUNT+X^2:NEXT X 'time filler 2397 PRINT ESC$+UNLOCK$; 'unlock keyboard again 2398 PRINT BEEP$; 2400 GOTO 235 'back to original menu 8999 ' 9000 ' ------------------------------ view pixel file --------------------- 9001 ' 9005 PRINT CL$ 9010 OPEN "R",#2,"B:FONT.PIX",N 9020 GOSUB 400 'field statements 9050 OPEN "I",#3,"B:PIXRN.DAT" 9060 INPUT#3,RN 9065 COUNT=0 'page counter 9070 FOR X = 1 TO RN+1 9080 GET#2,X 9085 COUNT=COUNT+1:IF COUNT=22 THEN COUNT=0 ELSE 9110 9090 PRINT:PRINT "Press any key to see next page...":Q$=INPUT$(1) 9110 GOSUB 10000 'prog/field var conversions 9190 PRINT USING "####";X-1; 9192 PRINT " -- "; 9195 PRINT USING "####";B0; 9197 PRINT USING "####";B1; 9199 PRINT USING "####";B2; 9200 PRINT USING "####";B3; 9210 PRINT USING "####";B4; 9212 PRINT USING "####";B5; 9214 PRINT USING "####";B6; 9216 PRINT USING "####";B7; 9217 PRINT USING "####";B8; 9218 PRINT USING "####";B9; 9219 PRINT USING "####";B10 9220 NEXT X 9225 PRINT:PRINT "Press any key to return to grid screen..."; 9230 CLOSE 9240 Q$=INKEY$:IF Q$="" THEN 9240 9250 GOTO 210 'back to menu 9999 ' 10000 '---------------------------- conversions --------------------------- 10001 ' 10110 B0 = CVI(FB0$) 10120 B1 = CVI(FB1$) 10130 B2 = CVI(FB2$) 10140 B3 = CVI(FB3$) 10150 B4 = CVI(FB4$) 10160 B5 = CVI(FB5$) 10170 B6 = CVI(FB6$) 10180 B7 = CVI(FB7$) 10181 B8 = CVI(FB8$) 10182 B9 = CVI(FB9$) 10183 B10=CVI(FB10$) 10190 RETURN 10199 ' 10200 '---------------------------- print code chart ---------------------- 10201 ' 10205 RC$=FNS$(22,0) 10210 PRINT RC$ "Press any key when printer is on-line... "; 10220 Q$=INPUT$(1) 10222 PRINT RC$:PRINT SPC(50); 10225 COUNT=0 10230 OPEN "R",#2,"B:FONT.PIX",N 10235 OPEN "I",#3,"B:PIXRN.DAT":INPUT#3,RN:CLOSE#3 10240 ' 10245 COUNT=COUNT+1 10247 IF COUNT>RN THEN 10490 'end of file reached 10250 GOSUB 400 'field statements 10260 GET#2,COUNT 10270 GOSUB 10000 'conversions 10280 LPRINT ESC$+"L"+CHR$(CM+1)+CHR$(0); 'prepare printer buffer 10290 LPRINT CHR$(B0);CHR$(B1);CHR$(B2);CHR$(B3);CHR$(B4);CHR$(B5); 10300 LPRINT CHR$(B6);CHR$(B7);CHR$(B8);CHR$(B9);CHR$(B10); 10400 LPRINT " ASCII="; 10402 LPRINT USING "####";COUNT-1; 10404 LPRINT " PRINTER CODES = "; 10410 LPRINT USING "####";B0; 10420 LPRINT USING "####";B1; 10430 LPRINT USING "####";B3; 10440 LPRINT USING "####";B4; 10450 LPRINT USING "####";B5; 10460 LPRINT USING "####";B6; 10470 LPRINT USING "####";B7; 10472 LPRINT USING "####";B8; 10474 LPRINT USING "####";B9; 10476 LPRINT USING "####";B10 10480 GOTO 10240 'loop 10490 LPRINT ESC$+"@" 'reset printer 10500 CLOSE 10510 GOTO 235 'return to menu 10520 ' 60000 '--------------------------------- variables ------------------------- 60005 ' 60008 W = 128 'page width 60010 L = 22 'page length 60020 CH = 49152! 'top of character memory 60030 AH = 53258! 'top of attribute memory 60035 S = 32 'screen offset 60037 ESC$ = CHR$(27) 'escape 60038 CL$ = CHR$(26) 'clear screen 60040 DEF FNS$(R,C)=ESC$+"="+CHR$(S+R)+CHR$(S+C) 'locate cursor 60050 H = 0 'half intensity mode 60060 DIM CL(8,11) 'character location 60070 DIM AB(8,11)  'attribute bit 60080 DIM AL(8,11) 'attribute location 60082 DIM B(11) 'bytes 60084 DIM D(11,11) 'dots 60090 PPF=0 'print routine flag 60095 BEEP$ = CHR$(7) 'beeper sound 60100 'CB 'character bit 60110 'AB 'attribute bit 60115 'RC$ 'cursor row/column address 60120 ONOFF = W 'bit on/off value 60130 CURSON$ = ESC$ + "." + "3" 'turn cursor on 60140 CURSOFF$ = ESC$ + "." + "0" 'turn cursor off 60150 RM = 7 'max rows dots -1 60160 CM = 10 'max cols dots -1 60170 COUNT = 0 'general counter 60180 'Q$  'general input variable 60190 D = 13 'dot graphic 60200 CL = 0 'clear routine flag 60210 'Q 'ascii code variable 60212 N = (CM+1) * 3 'record length 60214 F$ = "???" 'record i.d. 60216 SP$ = SPACE$(70) 'blank spaces 60218 WIDTH 128 'display width 60220 LOCK$ = CHR$(35) 'lock keyboard 60230 UNLOCK$ = CHR$(34) 'unlock keyboard 60240 RETURN 'back to main program 60300 '------------------------ end of file --------------------------------  'back to main program 60300 '------------------------ end of file --åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå.PO0 Jim Shoemaker 1743-B So Hayes St Arlington, VA 22202 (703) 892-8567 20 April 1984 HOW TO USE PIXGEN.BAS (Version 1.0) PURPOSE: This program makes it easy for you to design literal and block graphic characters pixel by pixel on the screen using a matrix of dots which you can interactively edit, save, retrieve, and print. The program automatically calculates the byte string values needed for output to the Epson MX printer and stores them in a random access file for retrieval. The data generated by this program can be used in the data statements in other programs exploiting graphic characters, symbols, pictures, and logos. REQUIREMENTS: This program will run only on the Osborne Executive double density computer in conjunction with the Epson MX-80 printer with Graftrax. However, the MBASIC code is well-commented and can easily be modified for other machines and printers. All pointers, memory locations, and other factors are stored in variables all located in one subroutine of the program. A word of caution: In order for this program to work correctly, you must have a copy of a file by the name of PIXRN.DAT on the same diskette as PIXGEN.BAS. This file is a pointer file which contains the last record filled in the FONT.PIX random access file generated by the program. If you do not have it, you can generate it by running the following one line MBASIC program before you start: 10 OPEN "O",#3,"B:PIXRN.DAT":PRINT#3,0:CLOSE. GETTING STARTED: Put your MBASIC program diskette in drive A. Put the PIXGEN.BAS diskette in drive B, then hit . When the CP/M prompt appears (>), type MBASIC B:PIXGEN. Now you're off and running! FEATURES: 1) DESIGN CHARACTER: You are presented with an 11 x 8 matrix of dots which represent the pattern of dots to be sent to the printer. To move around the grid, use the arrows. If you wish to go quickly from corner to corner, use the corner keys of the number pad. Similarly, if you want to go quickly from one side of the grid to the other, use the side keys (even numbers) of the number pad. When you come to a dot which you wish to "turn on", press the period (.). The period acts as a toggle and will turn a dot cell on or off. You have the option of clearing (erasing) the grid and starting over by pressing "c". You also have the option of reversing all the dot cells, creating a negative or inverse image of your character. Use "i" to do this. 2) TEST PRINT CHARACTER: Once you are tentatively satisfied with your character design, you can test it immediately on the printer by pressing "t" for test. Be sure the printer is on-line. Before printing takes place, the byte string values of the character will be calculated and displayed on the CRT and you will be prompted to hit a key to activate printing. 3) SAVE CHARACTER TO FILE: If you are pleased with the way the design came out on the printer, you can save the byte string values of the character to a file on diskette B by pressing "s" for save. The computer will again calculate the values, display them, and write them to a random access file called B:FONT.PIX. In order for this feature to work, there must already be a file on diskette B called PIXRN.DAT which contains the last record number of the font file. You will be prompted for the Ascii value under which you wish to store the character attributes. You must respond with a 3-digit number between 000 and 256. The Ascii value will equate to the record number of the byte sequence. If you want to save your character as the 50th record, give it an Ascii value of "050". If you fail at this point to enter an appropriate response, the program will return you to the design screen. 4) LIST FONT FILE: If you would like to scan the font file on the screen page by page, press "l" for list. Here, you can see which records have been completed. Intervening unfilled records will have zeros or garbage. 5) EDIT FONT CHARACTERS: To retrieve and edit a particular character design which you previously saved to disk, press "e" for edit. You will be prompted for the Ascii value (or record number) of the character to be retrieved. You can make whatever changes you wish and save it to the same record or a different record. 6) PRINT FONT CHART: After you have designed and save a whole series of characters or graphic symbols, you can print the results in the form of a chart on the MX-80 printer. To do this, press "p" for print. The chart will reproduce the graphic characters and list the corresponding record/Ascii numbers and byte string values. Caution: If a particular record in the middle of your file is blank, the program will take it as an end-of-file and will cease printing prematurely. If this happens, reset the printer. To avoid this, save your designs to the font file in sequence so as not to leave blank records. Or, if you skip around, preview the file before printing it and if there are blank records, fill them with zeros by editing and saving blank characters. 7) QUIT: Terminate the program and return to the MBASIC prompt by hitting "q" for quit. To return to the program, type RUN. To exit from any running portion of the program, you can press control-C as an immediate escape. MODIFYING THE PROGRAM: If would like to use a grid of a different size, change the values for the variables RM (row maximum) and CM (column maximum), which are given in subroutine 60000. Similarly, you can change the dots to rectangles or whatever by altering the value for variable D. Users of the Osborne I will have to make more extensive changes because of the particular ways in which the Executive handles video output. -----------------------------------------------------------------------------  10 Í1Ox¹ÁÉåÍ1!•6–/<áÉÍ12‚õåoŸg))Bƒ DMáñÉå!BƒÍS Í’_}áÉ!Î7Ò7Fwx# Âí`Í‚$É:$æþÊa>þ!J5†FO:Ÿ6·Êa *Ì6|µÊaý:&6‡�‡ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååɀɀSR ÍSCRPRINT 1.0 - E.Meyer 1/85 :_þFÊt*|þàÒ¡Í++ Address Error ++ (Delete an existing RSX and try again) <÷ÍÍSCRPRINT RSX no longer in RAM.ÃÍThe SCRPRINT RSX has been installed. To print screen, type ctl-underline (^_).ÃO_ÍÉ㯆#ãÈÍùÃÃÃSCRPRT10ë"ëy2þÊNþÊ\þ Êsþ2Êjþ<Ê@à þO >ÿ2à Í þÊ«þŸÀë{þÿÊNþýÊNà þÊNà z³ÊŠÍ *#~·È_~ÃQÍ :�·È!�_~þÊ¢þŸÀ6!�;ë>AÓ!ÀP~#æþ ÚÉÅå_Í áÁ¶Åå Í  Í áÁ Êê0ô>ÓÍ *ë:OÀ„! $„BA!$H  @  SCRPRINT.DOC ------------ Documentation for SCRPRINT.COM v1.0 - E. Meyer 1/85 [Note: for the Osborne Executive computer only.] SCRPRINT allows you to get a printout of whatever is currently on your Osborne Executive CRT screen at any time, without disturbing the screen or any software you may currently be running. To install it: A>SCRPRINT [or SCRPRINT ON] To remove it: A>SCRPRINT OFF To print the screen: type control-underline (^_) When "installed", SCRPRINT remains part of your CP/M Plus operating system - technically, an RSX (Resident System Extension). It does nothing until you type ^_, at which point it will print the screen. When it's done, it will beep once, and you will be right back where you were before, ready for input to whatever program (if any) you were running. Do not install it more than once: multiple copies of the RSX waste your RAM space, and may interfere with one another. RESTRICTIONS ON USE There are several restrictions on the use of SCRPRINT. First, since it has to access video RAM, switching bank 7 in must not disturb the RSX itself: it must lie safely above address E000h. If there are already RSXs installed, and the installation of SCRPRINT would place it below E000h, you will get the error message "++ Address Error ++", and SCRPRINT will not install. Second, remember that sometimes CP/M does input by line, rather than by character (for example, from the A> prompt). In this case your ^_ character will not be recognized until you hit RETURN; then the screen will print. Third, an RSX can only intercept BDOS calls. Consequently, SCRPRINT can only be called from within software that gets its keyboard input through BDOS calls. Unfortunately, much CP/M software uses direct BIOS calls for this purpose. In order to get SCRPRINT to work from inside such programs, you will have to patch them to use a BDOS call (typically BDOS 6) instead. In practice this is not difficult. ch programs, you will have to patch them to use a BDOS call (typically BDOS 6) instead. In practice ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÍ.0=#8Executive keyboard Test Program=$9Copyright (c) 1986 by Don Rowe=%9Press to exitŸóÛöÓõ>Íè>=Íè>(Íè>%Íèñ>õÛOñõ۹—/ÍÐ>Íè>Íõñ§–>Û/æþÂ|ûÍ.4ŸÃÅõ>0ÎÍè> ÍèñÂÓÁÉÅÕå_ÍáÑÁÉÅG> ÍèÂ÷ÁÉã~æÍè~æ€#ÊãÉ>õÛOñõ۹—/ÍÐ>Íè>Íõñ§–>Û/æþÂ|ûÍ.4ŸÃÅõ>0ÎÍè> ÍèñÂÓÁÉÅÕå_ÍáÑÁÉÅG> ÍèÂ÷åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå;Keyboard test program 5/16/86 ;This program reads the keyboard of the Executive and displays a matrix ;of 1s and 0s ;Don Rowe ;P. O. Box 50105 ;San Diego, CA 92105 ;(619) 299-4536 BDOS EQU 5 PKEY EQU 14H ;Keyboard port BYTESC EQU 1BH ;Center text - requires that ROW be SET to current cursor row ;On exit, ROW is incremented CENTER MACRO TEXT LENGTH ASET 80+2 ;Quotes add 2 more to length ;Get length of TEXT IRPC X, LENGTH ASET LENGTH-1 ENDM ;Set cursor position DB BYTESC,"=",ROW+32,LENGTH/2+32 ROW ASET ROW+1 DB TEXT ENDM CRLF MACRO DB 1FH ;New line ENDM MSGEND MACRO DB 1FH+80H ;New line, end of message ENDM SETCRSR MACRO @ROW,@COL PUSH PSW MVI A,BYTESC CALL WRTCON MVI A,"=" CALL WRTCON MVI A,@ROW+32 CALL WRTCON MVI A,@COL+32 CALL WRTCON POP PSW ENDM ;****************************** ;Program execution begins here. ;****************************** ;Set cursor row ROW ASET 3 CALL STRSP DB 1AH ;Clear screen DB BYTESC,".0" ;Make cursor invisible CENTER "Executive keyboard Test Program" CRLF CENTER "Copyright (c) 1986 by Don Rowe" CRLF CENTER "Press to exit" CRLF MSGEND DI ;Don't want these interfering ;Turn off disk drives IN 2 ;Disk drive control port ORI 2+4 ;Both drives off OUT 2 LOOP1: SETCRSR 8,5 ;Put cursor in row 8, column 5 MVI B,8 ;Number of rows in matrix MVI A,1 ;1st row to test LOOP2: PUSH PSW GETKEY: ;Read port twice, make sure same value read both times IN PKEY ;Get keyboard port MOV C,A POP PSW PUSH PSW ;Recover bit to test IN PKEY CMP C JNZ GETKEY CMA ;Complement bits CALL DSPKEY MVI A,1FH ;Drop down one line CALL WRTCON MVI A,5 ;Number of spaces to display CALL SPACES POP PSW ANA A ;Clear carry RAL ;Next key row DCR B JNZ LOOP2 ;Check for SHIFT CTRL ESC to exit MVI A,1 IN PKEY CMA ANI 10101B CPI 10101B JNZ LOOP1 ;Do this forever EI CALL STRSP CRLF CRLF BYTESC,".4" MSGEND JMP 0 ;Display bit pattern in A as 0s and 1s with intervening spaces DSPKEY: PUSH B MVI B,8 ;Number of bits to do DSPKLP: RAR ;Shift 1 bit into Carry PUSH PSW MVI A,"0" ;Will be 0 or 1 ACI 0 ;If bit was 1, display a "1" CALL WRTCON MVI A," " CALL WRTCON ;Intervening space POP PSW ;Bit pattern restored DCR B JNZ DSPKLP POP B RET ; ********************** ; Display character in A ; ********************** ; WRTCON: PUSH B PUSH D PUSH H MVI C,6 ;Write to console MOV E,A ;Get character to send CALL BDOS POP H POP D POP B RET ;Display number of spaces in A SPACES: PUSH B MOV B,A ;Number of spaces to do SPAC1: MVI A," " CALL WRTCON DCR B JNZ SPAC1 POP B RET ; ******************************************************** ; Output string pointed to by top of stack until bit 7 set ; Needs WRTCON ; ******************************************************** STRSP: XTHL STROT1: MOV A,M ;1st character to output ANI NOT 80H ;Bit 7 must be off CALL WRTCON ;Send to console MOV A,M ANI 80H ;Check for bit 7 set INX H ;Point to next character JZ STROT1 XTHL RET STACK EQU $+80H ;Keep it out of the way END ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÉ$þÿÍ�8!9^#VÕ!9^#VÕÍòÑÑ!MåÍ­2Ñ*ØC|µÊX!gå!ZåÍvÑÑ"àC|µÂX!iå!l>åÍÑÑ!åÍÇ&Ñ*ÖC|µÂ†!åÍe3Ñ"ÖC*ÔC^#VÕ*ÖCÑs#r!å*ÖC##Ñs#r*ÖC^#V!9s#r*ÖC|µÊø!"ÚC*ÖC^#VÕͪÑ*ÚC|µÂé*ÜC|µÊÔ*ÖC^#VÕ!…å!l>åÍÑÑÑÃé*ÖC^#VÕ!™å!l>åÍÑÑÑ*ÖC##^#Vë"ÖCÓ*ØC|µÊD*ÚC|µÊD!Àå!¶å*àCåÍÑÑÑ*àCåÍß!Ñ!Øå!Íå!€åÍXÑÑÑ!å!/å;5ÑÑÃL!ååÍ­2ÑÉexecmake.subexecmake.subwcan't create execute file. '%s' is up to date don't know how to make '%s' erase %s execmake.subSUBMIT %s execmake.subexecmake.subüÿÍ�8!"ÖC!"ÔC!"ØCë!9s#r!"ÞC!ë! 9s#rÃ5! 9å~#fo#ëás#r! 9^#V!9~#foÍ_=Ê3! 9^#Vë)ë!9~#fo^#Vë^!-Í%=Ê! 9^#Vë)ë!9~#fo^#Vë#^ÕÍ`8ÑÃÿ! 9å~#fo#ëás#r!9~#foÍ_=Êá! 9^#Vë)ë!9~#fo^#VÕÍœÑÂÓ!åÍÇ&Ñ!ë!9s#rÃäÍZÃ!"ØCÃ!"ÞCÃÍZÃÍŒ=F�LðNçùÃ0! 9^#Vë)ë!9~#fo^#VÕÍñÑÃ&!9~#¶ÊP!QåÍœÑÂP!åÍÇ&ÑÉmakefileÍ�8!vå!l>åÍÑÑ!åÍÇ&ÑÉusage: make [-n] [-l] [-f makefile] [filename ...] öÿÍ�8*ÔCë!9s#r!9~#¶Êù!9^#VÕ!9^#Vë^#VÕÍ)7ÑÑÊù!9^#V! ^#V!9s#rû!9~#¶ÂT!"ÜC!9å!9^#VÕÍxÑáÍ#9!9Í9Í{9ÂL!9^#VÕ!Øå!l>åÍÑÑÑ!åÍÇ&ÑÃT!9Í9É!9^#Vë##~#¶Ês!9^#V!Í9É!9åÍ 9áÍ#9!9^#V!^#V!9s#r!9~#¶Êè!9å! 9Í9Í59!9^#Vë^#VÕͪÑÍ59ÍL!9ùáÍ#9!9^#V!^#V!9s#rØ!"ÜC!9^#V!Í9Í59! 9Í9ÍC9Í< !9^#V!~#¶ÂÉ!9^#V! ^#V! 9s#r! 9~#¶Ê�! 9^#Vë^#VÕ!éåÍùÑÑ*ØC|µÊv! 9^#Vë^#VÕ!íå*àCåÍÑÑÑ! 9^#Vë##^#V! 9s#rÃ5!9^#V!åÍ»áÍ#9!å!9^#Vë##Ñs#r!9^#V! ~#¶ÊÉ!"ÚC!9^#V!Í9Écan't make '%s' %s %s üÿÍ�8!åÍe3Ñë! 9s#r!9^#VÕ! 9^#VëÑs#r!å! 9^#Vë##Ñs#r! 9^#Vë^#VÕÍÑ*ÖC|µÂS! 9^#Vë"ÖCÛ*ÖCë!9s#r!9^#Vë##~#¶Ê…!9^#Vë##^#V!9s#rÃ^! 9^#VÕ! 9^#Vë##Ñs#rÉÈþÍ�8!tå!F9^#VÕÍvÑÑë!>9s#rz³ÂÚ!D9^#VÕ!vå!l>åÍÑÑÑ!É!>9^#VÕ!‚å!¸9åÍ7ÑÑÑÊp!å!¶9åÍÙ7Ñë!¶9+Ñs!´9~·ÊÚ!´9^! Í4=Ê~ !´9åÍÑ!29å!Šå!¸9åÍÑÑÑÑÍ4=Ê_!´9å!Žå!l>åÍÑÑÑÃÚ!åÍe3Ñë!09s#r*ÔC|µÂ…!09^#Vë"ÔCÃÐ*ÔCë!.9s#r!.9^#V! ~#¶Ê¹!.9^#V! ^#V!.9s#rÃ�!09^#VÕ!09^#V! Ñs#r!29åÍÙ7Ñ#åÍe3Ñå!29^#VëÑs#r!29å!29^#Vë^#VÕÍa7ÑÑ!å!29^#Vë##Ñs#r!09^#V!å!29^#Vë^#VÕÍxÑáÍ#9*ÞC|µÊƒ !9å!29^#V!Í9Í59Í‹ÑÑÑå!29^#Vë^#VÕ!Ÿå!l>åÍë!9ù!¿å!l>åÍÑÑ!å!29^#V!Ñs#r!å!29^#V! Ñs#r!å!29^#V! Ñs#r!ë!:9s#r!:9^#V!´9^!¿?#^!Íý<Êù !:9å~#fo#ëás#rÃÇ !:9^#V!´9^!¿?#^!Íý<Â< !:9^#V!´9~·Ê< !:9å~#fo#ëás#rÃù !ë!<9s#r!<9~#¶Â{ !:9^#V!´9^!¿?#^!Íý<ʃ !:9å~#fo#ëás#rÃQ !:9^#V!´9~·Â¢ !ë!<9s#rÃG !ë!89s#r!:9^#V!´9^!¿?#^!Íý< !:9^#V!´9~·Ê !:9å~#fo#ëás#rë+ë!´9^Õ!:9å~#fo#ëás#rë+ë!49Ñsí !å!:9^#V!49Ñs!Ìå!49åÍ)7ÑÑÂz !>9^#VÕ!‚å!¸9åÍ7ÑÑÑ!å!¶9åÍÙ7Ñë!¶9+Ñs!´9åÍÑ!ë!:9s#rÃQ !29åÍÙ7Ñ#åÍe3Ñë!,9s#r!09^#V!~#¶Â¼ !,9^#VÕ!29^#V!Ñs#rà !09^#V!^#V!*9s#r!*9^#V!~#¶Êú !*9^#V!^#V!*9s#rÃÑ !,9^#VÕ!,9^#V!Ñs#r!29åÍÙ7Ñ#åÍe3Ñå!.9^#VëÑs#r!29å!.9^#Vë^#VÕÍa7ÑÑ*ÞC|µÊe !,9^#Vë^#VÕ!Îå!l>åÍÑÑÑ!å!.9^#V!Ñs#rÃG Ãm!09~#¶Â¨ !Óå!l>åÍÑÑ!´9å!îå!l>åÍÑÑÑ!ë!:9s#rÃÅ !:9å~#fo#ëás#r!:9^#V!´9^!¿?#^!Íý<Êè ö !:9^#V!´9åÍÙ7ÑÊm!åÍe3Ñë!(9s#r!09^#V! ~#¶ÂL !(9^#VÕ!29^#V! Ñs#r*ÞC|µÊI !õå!l>åÍÑÑÞ !09^#V! ^#V!&9s#r!&9^#Vë##~#¶Êˆ !&9^#Vë##^#V!&9s#rÃa !(9^#VÕ!(9^#Vë##Ñs#r!´9åÍÙ7Ñë!:9~#fo̓=#åÍe3Ñå!*9^#VëÑs#r!ë!89s#r!:9^#V!´9~·Ê!:9å~#fo#ëás#rë+ë!´9^Õ!:9å~#fo#ëás#rë+å!,9^#Vë^#VáÑsÃÑ !å!*9^#Vë^#V!:9~#foÑs*ÞC|µÊ[!(9^#Vë^#VÕ!å!l>åÍÑÑÑ!å!*9^#Vë##Ñs#rÃÚ!Ércouldn't open '%s' %s can't scan '%s' file = '%s', last modified %s depends on: \ %s howto line w/o definition '%s' how to make: %s Í�8à ! 9å~#fo#ëás#r! 9^#Vë~·ÊK! 9^#Vë^ÕÍv8Ñå!9^#VëÑsÃÉÍ�8! 9Í9!9Í9Í<Êp! 9Í9Ãw!9Í9ÉÜÿÍ�8!9å!29^#VÕÍÒ5ÑÑ!å!å!9åÍò7ÑÑÑ!9å!få;5ÑÑ!$9åÍÙÑÉüÿÍ�8!9å!iå;5ÑÑ!9åÍÙÑÉüÿÍ�8!9DM!9^#Vë###^Õ`i#DM+Ñs!9^#Vë##^Õ`i#DM+Ñs!9^#Vë^Õ`i#DM+Ñs!9^#Vë#^`is!9Í9ÉÍ�8!9N#F! 9^#Vë##^Õ`i#DM+Ñs! 9^#Vë###^Õ`i#DM+Ñs! 9^#Vë#^Õ`i#DM+Ñs! 9^#Vë^`isÉÍ�8!9N#F!F@å!9åÍ5ÑÑ*F@ëÍN<)Î=^#VÕÝáÃÐÝåá#åÝá+^Õ`i#DM+ÑsÝåá~·ÊÛþ!N"J@*F@"N@Ãÿ*J@#"J@*P@ë*N@ë̓="N@*J@Íý<Ê!mÃ!n"P@å*N@ÑëÍ`=Ê&Ãê*P@¯þ"Þ=!"L@ÃS*L@#"L@+)Ü=^#V*N@ë̓="N@*L@)Ü=^#VÕ*N@ÑëÍ`=ÊmÃ9*L@#"L@*L@ ëÍ9<0å`i#DM+Ñs*L@ ëÍN<0å`i#DM+Ñs!/å`i#DM+Ñs*N@ ëÍ9<0å`i#DM+Ñs*N@ ëÍN<0å`i#DM+Ñs!/å`i#DM+Ñs*J@ ëÍ9<0å`i#DM+Ñs*J@ ëÍN<0å`i#DM+Ñs! å`i#DM+Ñs:H@o&ë;<Íý<0å`i#DM+Ñs:H@o&Íý<0å`i#DM+Ñs!:å`i#DM+Ñs:I@o&ë;<Íý<0å`i#DM+Ñs:I@o&Íý<0å`i#DM+Ñs!ë`is`iîÿÉSat Sun Mon Tue Wed Thu Fri Í®8!9^#Vë"R@!}2T@! 9å! 9^#VÕ!åÍQÑÑÑÉÍ®8!9~#¶Â5*R@~·Ê+*R@#"R@+^!ÿÍý<É!}2T@ÃM:T@·ÂM*R@+"R@^!ÿÍý<É!ÿÿÉ~ÿÍ®8!Œ9N#F!"_@!Š9^#Vë"W@`i#DM+^ë"]@|µÊ*]@%Í%=ÊÎ!}2c@}2d@}2e@!"U@`i^!*Í%=ʼ`i#DM!}2c@`i^!¿?#^!Íý<Ê !"U@*U@ ͦ<å`i^áÐÿ"U@`i#DM^!¿?#^!Íý<ÂØ`i^!lÍ%=Ê#!}2d@`i#DM`i#DM+^ëØ!%"]@Ãë!}2d@ÃJ!}2d@! "]@! "a@Â!}2d@!"]@!"a@Â!}2d@!"]@!"a@Í@Â!Y@å*a@å*]@ >å*]@ô=åÍ�ë!9ùÊ:c@·Â :d@·ÊÞ!Ž9å~#fo##ëás#rë++^#VÕ!Y@Í9áÍ#9Ã!Y@Í9Í5<å!�9å~#fo##ëás#rë++^#VëÑs#r*_@#"_@ÃË!}2d@`i^!^Í%=Â0`i^!~Í%=Ê<`i#DM!}2d@!9"f@`i#DM+^ë"]@]Í4=Êj*]@å*f@#"f@+ÑsÃC!å*f@Ñsá!}2d@! ë!9s! ë!9s! ë!9s!ë!9sÍ@Â:c@·ÂÈ!Ž9å~#fo##ëás#rë++^#Vë"f@!}2e@*U@+"U@#|µÊW!å*W@ÍŒ8Ñ"]@ÿÿÍ%=ÂW:d@·Ê*]@å!9åͺ7ÑÑÍ4=Ã%*]@å!9åͺ7ÑÑÍ%=|µÊ8!å*W@ÍŒ8ÑÃW:c@·ÂM*]@å*f@#"f@+Ñs!}2e@ÃÏ:e@·Ê:c@·Âu!å*f@Ñs*_@#"_@ÃË:e@·Â…!"U@!ë!9s!}2d@çÍŒ= %0DCOoXY[ cxdJh9ovsvx`ËÃ*]@¿?#^!Íý<ÊëÍ@ÂÃ!å*W@ÍŒ8Ñë*]@Í4=Ê!å*W@ÍŒ8ÑÃÃo*_@|µÂ<!å*W@ÍŒ8ÑÿÿÍ%=Ê1!ÿÿÉ!å*W@ÍŒ8Ñ*_@ÉÍ®8!å*W@ÍŒ8Ñ¿?#^!Íý<ÊeÃF!å*W@ÍŒ8ÑÿÿÍ%=Ê}!ÿÿÉ!ÉÍ®8*U@ëÍE=ʘ!É!l@å!"p@"j@Í&<áÍ#9!å*W@ÍŒ8Ñ"h@-Í%=ÊÓ!"p@*j@#"j@Ãô*h@+Í%=Êé*j@#"j@Ãô!å*W@ÍŒ8ÑÃþ*j@#"j@*j@ë*U@Í_=ÊÃ!å*W@ÍŒ8Ñ"h@å! 9^#VÕͺ7ÑÑDM|µÂp! 9^#V!Í%=Êb!l@Í9Í{9Âb*h@xÍ%=Â÷*h@XÍ%=Â÷!å*W@ÍŒ8ÑÃÃ!l@å!9^#VëÍ&<ÍN9áåÍ9Íq;áÍ#9!l@å`ië! 9~#fo̓=ë! 9~#fo^ëÍ&<ÍN9áåÍ9ÍÃ9áÍ#9Ã÷*p@|µÊã!9^#VÕ!l@Í9Ík9áÍ#9Ãõ!9^#VÕ!l@Í9áÍ#9*j@ÉÍ®8! 9å! 9^#VÕ!þ åͯÑÑÑÉÍ®8!9^#Vë"r@! 9å! 9^#VÕ!@åͯÑÑÑÉÍ®8*r@å! 9^#VÕÍ!ÑÑÉÍ®8!9^#Vë"t@! 9å! 9^#VÕ!ŽåͯÑÑÑDM!å*t@Ñs`iÉÍ®8!9^#VÕ*t@#"t@+Ñs!ÿÍý<É8ÿÍ®8!Ð9N#F!"z@!Ô9^#Vë"x@!Ò9å~#fo#ëás#rë+^ë"v@|µÊ¾*v@%Í%=Ê�!ë!9s!"|@! "~@!'"€@!Ò9å~#fo#ëás#rë+^ë"v@-Í%=ÊP!"|@!Ò9å~#fo#ëás#rë+^ë"v@*v@0Í%=Êz!0"~@!Ò9å~#fo#ëás#rë+^ë"v@*v@*Í%=ʲ*x@##"x@++^#Vë"‚@!Ò9å~#fo#ëás#rë+^ë"v@Ãÿ!"‚@ÃÓ!Ò9å~#fo#ëás#rë+^ë"v@*v@¿?#^!Íý<Êÿ*‚@ ͦ<ë*v@Ðÿ"‚@û*v@.Í%=Ê¥!Ò9å~#fo#ëás#rë+^ë"v@*Í%=ÊX*x@##"x@++^#Vë"€@!Ò9å~#fo#ëás#rë+^ë"v@Ã¥!"€@Ãy!Ò9å~#fo#ëás#rë+^ë"v@*v@¿?#^!Íý<Ê¥*€@ ͦ<ë*v@Ðÿ"€@Ãa!"„@*v@lÍ%=ÊØ!Ò9å~#fo#ëás#rë+^ë"v@!"„@Ãü*v@hÍ%=Êü!Ò9å~#fo#ëás#rë+^ë"v@*v@ÃŒ!"†@Ã#! "†@Ã#!"†@Ã#!öÿ"†@*„@å!9å*†@å*x@åÍÂë!9ùë"ˆ@*„@ë*x@"x@ë*x@##"x@++^#Vë"ˆ@åÍÙ7Ñ"„@ù*x@##"x@++^#Vë"v@*v@å!9"ˆ@ÑsëÍŒ=ckdosOu x|!9ë*ˆ@̓="„@*„@ë*€@Í`=ÊÌ*€@"„@*|@|µÊ ÃÞ*z@#"z@*‚@+"‚@#ë*„@Í`=Ê *~@å`iÍŒ8ÑÿÿÍ%=Ê!ÿÿÉÃ×!"†@Ã*†@#"†@*ˆ@~·ÊQ*†@ë*€@Í_=ÊQ*ˆ@#"ˆ@+^Õ`iÍŒ8ÑÿÿÍ%=ÊN!ÿÿÉÃ*†@ë*z@"z@*|@|µÂšÃn*z@#"z@*‚@+"‚@#ë*„@Í`=Êš! å`iÍŒ8ÑÿÿÍ%=Ê—!ÿÿÉÃgû*v@å`iÍŒ8ÑÿÿÍ%=Ê´!ÿÿÉ*z@#"z@ÃÍ*z@ÉÅ!"%>"'>! 9~2#>G+V+^+ë6"!>ë+N+V+^!%>w#Âêy·ò/$>~·õò:#>G!%>>žw#ÂÃõ!(>>õ^ë)|‘Ú/g,Â'ës+ñ=Â"Z!f~*!>+"!>w!%>¯¾Â#ÂQ*!>ñòd+6-ÁÉ0123456789abcdefÍ®8ÍÐ#DM|µÂŠ!ÉÅ! 9^#VÕ! 9^#VÕÍ¢ÑÑÑÉÍ®8! 9^#VÕÍß!Ñ!)>DMÃÄ`iDMx±ÂÓ!úÿ"âC!É! 9^#VÕÅÍ)7ÑÑÊçü! ^#VÕ! 9^#VÕÍ�'ÑÑ"Š@ÿÿÍ%=Ê !É*Š@å!9^#V!Ñs!å!9^#V!Ñs! 9^#VëÉÍ®8!9^#Vë"Œ@! 9å~#fo+ëás#r!Í`=Ê’! 9^#VÕÍÅÑDMÿÿÍ4=Ê’`iå*Œ@#"Œ@+Ñs`i Í%=Â’ÃH!å*Œ@Ñs`iÿÿÍ%=ʼ*Œ@ë!9~#foÍ%=ʼ!É!9^#VëÉÍ®8!9N#FÅÍ$ Ñ"Ž@ÿÿÍ4=Ê !ë*Ž@Íý<"Ž@à !å`iÑånÍ =ëás!ÿÿÉÃÒÍŒ= ó *Ž@ÉÍ®8!9N#F! ^#VÕ`i^#Váͳ=Êå ! ^!Íý<ÊY !ÿÿÉ!ûÿå`iÑånÍý<ëás`i~#¶Â} ÅÍ$Ñ! ^#VÕ! ^#VÕ! ^ÕÍ8+ÑÑÑ"�@ëÍE=ÊÍ *�@|µÂ¶ !ù !å`iÑånÍ =ëás!ÿÿÉ! ^#V`is#r*�@ë! s#r`iå~#fo#ëás#rë+^!ÿÍý<ÉÍ®8!a>å! 9^#VÕÍ!ÑÑÉÍ®8!9N#F`i Í%=ÊL!! 9^#VÕ! åÍ[!ÑÑÿÿÍ%=ÊL!!ÿÿÉ! 9^#VÕÅÍ[!ÑÑÉÍ®8! 9N#F! ^#VÕ`i^#Váͳ=Ê‘!!9^#V!ÿÍý<åÅÍY"ÑÑÉ!9^#VÕ`iå~#fo#ëás#rë+Ñs!ÿÍý<ÉÍ®8!V>DM`iÏ>ëÍÁ=ÊÞ!`i DMõÿåÍß!Ñþ!ÉÍ®8!9N#F!"’@`i~·ÊL"! ^!Íý<Ê"!ÿÿåÅÍY"ÑÑ"’@! ^ÕÍ )Ñë*’@Í ="’@! ^!Íý<ÊL"! ^#VÕÍ 5Ñ!ë! s*’@ÉÍ®8!9N#F!³!"Q?! ^!Íý<Ê€"!ÿÿÉ! ^!Íý<Êñ"! ^#VÕ`i^#Vá̓="”@*”@å! ^#VÕ! ^ÕÍ-.ÑÑÑë*”@Í4=Êñ"!å`iÑån&Í =ëás!ë`is#r! s#r!ÿÿÉ! 9^#V!ÿÿÍ%=Ê*#!ûÿå`iÑån&Íý<ëás!ë`is#r! s#r!É`i~#¶Â;#ÅÍ$Ñ! ^#V!Í%=Êt#!å! 9å! ^ÕÍ-.ÑÑÑÍ4=ÂÈ"! 9^#VëÉ! ^#V`is#r! ^#VÕ! ^#Váë! s#r!å`iÑån&Í =ëás! 9^#VÕ`iå~#fo#ëás#rë+Ñs!ÿÍý<ÉÍ®8!V>DM`i~·Êÿ#`i DMÏ>ëͳ=Êü#!ÉÃÛ#!ë`is#r! s#r! s#r`iÉÍ®8!9N#F! ^ÕÍ82ÑÊO$!ë! s#r`ië! s#rÉ!åÍe3Ñ"–@|µÊ5$!ë! s#r!å`iÑånÍ =ëás*–@ë! s#rÉ!F@¢s# y°Â‘$*ùø"äC*×>"æC;$Ù>ÍÍí$Í®8!å!à@å!�åÍ8ÑÑÑ!å:€o&Íý<à@Ñs!¢&"¤@!à@DM!"`A*`AëÍ_=ÊŒ&`i^! Í%=Â&%`i^! Í%=Ê.%`i#DMà %`i~·ÊŒ&`i^!>Í%=ÊL%!"dAÃ`%`i^!<Í%=Ê=&!"dA`i#DM^! Í%=Â%`i^! Í%=Ê‚%Ã`%`i"bA`i#DM~·Ê¿%`i^! Í%=­%`i^! Í%=ʼ%!å`i#DM+Ñsÿ%Ç%*dAåÍ )Ñ*dA|µÊâ%!¶å*bAåÍo'ÑÑ"dAÃò%!å*bAåÍ�'ÑÑ"dA*dAÿÿÍ%=Ê:&!£&å!€åÍa7ÑÑ*bAå!€åÍ}7ÑÑ!Å&å!€åÍ}7ÑÑ!€å! å;5ÑÑ! åÍÇ&ÑÉ&`iå*`A#"`A+)¤@Ñs#r`i#DM~·Ê‰&`i^! Í%=Âw&`i^! Í%=ʆ&!å`i#DM+ÑsÉ&ÃQ&Ãý$!¤@å*`AåÍÑÑ!åÍÇ&ÑÉCan't open file for redirection: $Í®8*Q?ÍŒ8!DM`i ëÍ_=Êò&`i#DM+åÍ )ÑÃØ&!9~#¶Ê'!å;5ÑÍý<Ê'!'åÍ­2ÑÍ­$ÉA:$$$.SUBÍ®8!ýÿ"âC!ÿÿÉÍ®8!Écon:CON:lst:LST:prn:PRN:pun:PUN:rdr:RDR:Í®8! 9^#VÕ!å! 9^#VÕÍ�'ÑÑÑÉÍ®8!ù>"fA!"jAö'*fA"fA*jA#"jA*jA ëÍ_=ÊÙ'*fA^#V!#'Í%=Âã'Ã¥'!øÿ"âC!ÿÿÉ!k?DMÃó'`iDM`i~#¶Ê(!9^#VÕ`i^#VÕÍ)7ÑÑÊ(Ãë'! ^#Vë"hA! 9^#V!Íý<#"lA*lAÍý<ÊU(*hA^Õ*fAÑs{³ÂU(!öÿ"âC!ÿÿÉ*lAÍý<Ê|(*hA#^Õ*fA#Ñs{³Â|(!öÿ"âC!ÿÿÉ! ^#VÕ*fAÑs#r*hA##^Õ*fA##Ñs*hA###^Õ*fA###Ñs!3'å*fAÑs#rÅ*fAå!9^#VÕ!9^#VÕ!9^#VÕ*hA^#VëÍŒ8ë! 9ù!Í_=Ê )!#'å*fAÑs#r!ÿÿÉ*jAÉÍ®8!9^#V!Í_=Â3)!9^#V! Í`=Ê=)!ýÿ"âC!ÿÿÉ!9^#Vë)))ù>DM! ^#VÕ! ^#VëÍŒ8Ñë!9s#r!ë! s! s! s`is!#'ë! s#r!9^#VëÉÍ®8!nADMê)`i'DM`i¦BëÍÁ=ÊÄ)`i%~·ÊÎ)â)!ùÿ"âC!ÿÿÉÅ! 9^#VÕÍÒ5ÑÑ"¦BÿÿÍ%=Êò)!úÿ"âC!ÿÿÉ*¦BÿÍ%=Ê*Íõ6"¦B*¦BåÍ7Ñ! 9^#V!Íý<Ê&*Å!å;5ÑÑÅ!å;5ÑÑÿÍ%=Êl*! 9^#V!Íý<Ê\*Å!å;5ÑÑÿÍ%=Êi*!ÿÿ"âCÍ7!ÿÿÉÃ�*! 9^#V!Íý<Í%=Ê�*!ûÿ"âCÍ7!ÿÿÉ!ë!! s#r!# s!$ s*¦Bë!& s`iå!9^#V!Ñs#r! 9^#V!Íý<#ë!% s!+å!9^#V!Ñs#r! 9^#V!Íý<Êû*ÅÍÜ0ÑÍ7!ÉÍ®8!9N#FÍ’1!& ^ÕÍ7ÑÅ!å;5ÑÑÍ7!ë!% s!ÉÍ®8!9^#Vë)))ù>DM! 9^#VÕ! 9^#VÕ! ^#VÕ`i^ë)­?^#VëÍŒ8ÑÑÑÉÍ®8!DM!9^#Vë"¨B*¨B&^ÕÍ7Ñ*¨B$~·Êø+*¨B$^Õ!€Ñë̓=DMë! 9~#foÍÂ=ÊÛ+! 9^#VBKÅ! 9^#VÕ*¨BåÍ£,ÑÑÑÊø+Í7!É! 9^#V`i̓=ëÍè<"ªB|µÊL,*ªBå! 9^#V`iå*¨BåÍR2ÑÑÑ"¬B|µÊL,Í7*ªBë*¬B̓=ëÍØDM! 9^#VÕ! 9^#VÕ! ^#VÕ! ^ë)¶?^#VëÍŒ8ÑÑÑÉÍ®8!DM!9^#Vë"´C*´C&^ÕÍ7Ñ*´C$~·Êï.*´C$^Õ!€Ñë̓=DMë! 9~#foÍÂ=ÊÒ.! 9^#VBKÅ! 9^#VÕ*´Cåͧ/ÑÑÑÊï.Í7!ÿÿÉ! 9^#V`i̓=ëÍè<"¶C|µÊP/*¶Cå! 9^#V`iå*´CåÍZ2ÑÑÑ"¸C|µÊP/Í7*¶Cë*¸C̓=ëÍØ^ëÉÍÌ8!Ã_2ÍÌ8"Å*B@ë!€"B@ÍÁÅ*@@ëͷ˜2*@@!4Š2#4*D@+"D@}´Â`2ÁÉþʨ2þʨ2o&"âCÁ*D@ÉØÿÍ®8!9å!29^#VÕÍÒ5ÑÑDMÅÍ7Ñ!9å!å;5ÑÑDMÍ7`iÿÍ%=Êô2!ÿÿ"âC!ÿÿÉ!ÉÍ®8!9N#F!üÿ ^#Vë+))"ÌCÅÍ 5Ñ! 9^#VÕÍe3Ñ"ÊC|µÊa3*ÊCPYÍ4=Êa3! 9^#V*ÌCÍÂ=ÊM3*ÌCÃU3! 9^#Vëå*ÊCåÅÍ8ÑÑÑ*ÊCÉÍ®8!9^#Vë###ëÍè<#"ÐC*ÈC"ÎC|µÂ˜3!ÄC"ÎC"ÆC"ÈC*ÎC##^#VBKó3`i"ÎC! ^#VBK! ^#VÕ`iÑÍ4=Ê24! ^#VÕ`i^#Vë))PYÑÍ%=Ê24! ^#VÕ*ÈCÑÍ%=Ê4! ^#Vë##^#Vë"ÈC! ^#Vë^#VÕ`iÑå~#foëás#r! ^#Vë##^#V! s#ró3`i^#V*ÐCͳ=Ê¿4`i^#V*ÐCÍ%=Êb4! ^#VÕ*ÎC##Ñs#rç4*ÐC))PY"ÈC*ÈCå*ÎC##Ñs#r! ^#VÕ*ÈC##Ñs#r`i^#V*ÐC̓=å*ÈCÑs#r*ÐCë`is#r*ÎC"ÈC!ë! s#r`iÉ`ië*ÈCÍ%=Ê5!åÍ»6ÑDMÿÿÍ%=Êâ4!É!ë`is#r!ë! s#r`iåÍ 5Ñ*ÈCDMÃ¥3ÉÍ®8!9^#V!üÿ"ÒC*ÒC##~#¶Ê-5!ÿÿÉ*ÈCDMÃ>5! ^#VBK`ië*ÒCÍÂ=Â]5! ^#VÕ*ÒCÑëÍÂ=Ê‘5! ^#VÕ`iÑëͳ=ÊŽ5*ÒCPYëÍÂ=‘5! ^#VÕ*ÒCÑëÍÁ=‘5Ã55! ^#VÕ*ÒC##Ñs#r*ÒCë! s#r`i"ÈC!ÉÍÌ8ÍÁ5ëÉÍÌ8*@@DM*B@ëÍëo¯gÉÅ!9N#F#^#Vkb6#> 6 #=Âå5>6#=Âî5ëy°Ê–6 þ Ê6þ  6Ãû5Å ͯ6Ú#6Ö0_z‡‡‡‚‚ƒWà 6þ/Â-6ñÃ06Áÿ þ: >Â[6 æþAÚ–6þ[ÒL6Ö@ÃX6þaÚ–6þ{Ò–6Ö`w# þ.Êv6·Ê�6Ê^6Í�6w#Ã_6{…o|Îg ·Ê�6Í�6w#€6&jz·ÁÉ!ÿÿ|·ÁÉþ*¦6 >?ÉþaØþ{ÐÖ Éþ0Øþ:Ò¹6·É7É!9^#V*×>Úß6ë*äC}“|šÚß6*×>ë"×>ë|µÉ!ÿÿ¯=É!9}–_|#žWë"äCÉÍÌ8 ÿÍo&·ÉÍÌ8 ÿÍ2¾?:@@þÿÈ _ÃÍÌ8 :¾?_Ã!9ÅÿÃ=7!9ÅF+N+V+^+~+ngëx±Ê[7–Â[7·Ê[7# ÃF7ÁoŸgµÉ!9V+^+~+ngåw·Êy7#Ãn7á|µÉ!9ÅÿÑ7!9ÅF+N+V+^+~+ng対ʣ7#Û7x±Ê´7w·Ê´7# ã7wáÁ|µÉ!9^#V#në~»ÊÖ7·ÊÑ7#ÃÄ7!¯É|µÉ!9~#fo¯¾Êî7#Ãå7ë}´ÉÅ!9^#V#N#F#nëx±Ê 8s# Ã8ÁÉÅ! 9F+N+V+^+~+ngºÚJ8Â.8}»ÚJ8Ê^8 ë ¯Æê>8ë+í¸ÁÉ+w x±Â>8ÁɯÆêT8í°ÁÉ~# x±ÂT8ÁÉ!9~þaÚq8þ{Òq8Ö o&·É!9~þAÚ‡8þ[Ò‡8Æ o&·ÉéáÅDM!9ë9ùÕÝåýå`iÍŒ8ýáÝáëáùÁë|µÉáÅDM!9ë9ùÕ!¦8å`ié~# x±ÂÁ8ÉÑ!9¯ÆêÛ8ÝåýåÅÕ@@~#Ââ8!ï8ãéÁ¯Æêú8ýáÝá|µÉÑ!åë @Ã9Ñ!åë˜@~#~#~#~ɘ@w#w#w#wÉÑ!›@*š@å*˜@åëéÑá" @á"¢@ëé* @ë*˜@" @ë"˜@*¢@ë*š@"¢@ë"š@É!˜@¯>žw#Âq9É!˜@~·ÂÂ;#€9÷;¯=Áɯ<ÁÉÅ›@!£@~î€Oô9Å›@!£@¾Ú�9‘9+²9¯ÁÉŘ@! @¯Ž#ÂÍ9ÁÉŘ@! @¯ž#Ââ9ÁÉŘ@! @¦#Âö9ÁÉŘ@! @¶# :ÁÉŘ@! @®#Â:ÁÉ!˜@~/w#Â.:É: @æ?È*˜@ë*š@)ë)ëÒL:,=ÂD:"š@ë"˜@ÉÃ_::›@õ: @æ?Ê|:W!›@ñõ~w+Âp:Âi:ñÉ!Ny·ðëÃn9Ř@Í~:Å @Í~:yÁ©õÍê:ñÁúk9ÉŘ@Í~:y·õ @Í~:Íê:œ@!˜@w#ÂÀ:ñÁúk9ÉÅÍê:ÁÉÅÍê:œ@!˜@w#Âà:ÁÉ!œ@¯w#Âð:> õ!˜@·~�w#Âÿ:ŸæOœ@! @·ž#Â;yÞÂ-;!˜@4ñ=Âø:Éñ=Ê^;õ!˜@·~�w#Â9;ŸOœ@! @·Ž#ÂL;yÎÂ-;Ã#;œ@! @·Ž#Âg;ÉÅ!˜@œ@~6#Âz;> õ!˜@·~�w#Â�;Òª;˜@! @·Ž#¡;ñ=†;ÁÉÍ•9ÊÂ;!¯ÉÍ•9Ê·;!¯<ÉÍ•9úÂ;÷;Í•9úÂ;ÊÂ;÷;Í•9ú·;ÃÂ;Í•9ú·;Ê·;ÃÂ;Í©9úÂ;÷;Í©9úÂ;ÊÂ;÷;Í©9ú·;ÃÂ;Í©9ú·;Ê·;ÃÂ;"˜@!"š@É"˜@|·ò)ë)ëÒ�<, Ú <õ}‘o|˜gñ=‡<É=‡<ÉÅDM!>)ë)ëÒ¶< =®<Á}´Éë{æ_Êå<|´òð<|7g}oÂË<´Éë{æ_Êå<)Âà<}´Éë{æ_Êå<|·g}oÂð<´É|¢g}£o´É|/g}/o´É|²g}³o´É|ªg}«o´É|µÊ>=Ã/=}“Â/=|’Ê>=!¯É}“Â>=|’Ê/=!}´Éë|ªúW=}“|š?>Îo&Ézæo&Éë|ªúq=}“|š>Îo&É|æo&É}/o|/g#}´Éë}“o|šgµÉëáÅBK^#Vz·ú¬=#y¾Ê¦=###Ô=#x¾Â¡=#~#foÁéë}“|š>?Îo&Éë}“|š>Îo&É®³¸½ÂÇÌABCDEFabcdef9876543210   rr+ww+a a+ xx+èC???????????3'3'3'#'#'#'#'#'#'#'#'3'3'3'3'”)='S?B'S?G'Y?L'Y?Q'Y?V'Y?['Y?`'Y?e'_?j'_?e?#'}+-×- #'t.”0”0 00000 �@@@@@@@@@@@@@@@ @@@@@@@ @@@@@ @@@@ åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå MAKE.COM -- Tom Morris, Morris Code Works, 8/5/85 Adapted from MAKE.C86 for CP/M+ with time stamping. Thió ió calleä 'Make§ anä ió á mucè simplifieä versioî oæ �      thå makå utilitù oî UNIØ (á trademarë oò somethinç oæ AT&T© �      writteî usinç thå Azteã à compiler® Thió versioî ió adapteä �      froí thå versioî writteî iî Latticå à compileò foò thå IBÍ �      Personaì Computer® Thå Latticå packagå ió availablå froí �      Lifeboaô Assoc® 165± Thirä Avenuå Ne÷ York¬ NÙ 1012¸ . 'Make§ takeó á filå oæ dependencieó (á 'makefile'© anä �      decideó whaô commandó havå tï bå executeä tï brinç thå �      fileó uð tï date® Theså commandó arå eitheò executeä �      directlù froí 'Make§ oò writteî tï thå standarä outpuô �      withouô executinç them. 'Makefile' format: - Therå musô bå á 'makefile'» yoõ can'ô takå inpuô froí � the standard input. - Thå defaulô namå oæ thå 'makefile§ ió 'MAKEFILE§ oî thå � defaulô disk® Differenô 'makefiles§ caî bå specifieä � usinç thå '-f§ optioî oî thå commanä line® Iæ thå '-f§ � optioî ió used¬ thå defaulô 'makefile§ ió noô processed. - Any blank lines in the 'makefile(s)' are ignored. - Á linå iî á 'makefile§ thaô startó witè á taâ characteò � ió á 'howto§ linå anä consistó oæ á commanä namå � followeä bù arguments® Thå commanä namå musô bå á filå � name¬ e.g® 'cc'® 'Howto§ lineó applù tï thå mosô recentlù � precedinç 'dependency§ line® Iô ió aî erroò foò á � 'howto§ linå tï precedå thå firsô 'dependency§ line. - Anù otheò non-blanë linå ió á 'dependency§ line® � 'Dependency§ lineó consisô oæ á filenamå followeä bù á � (possiblù empty© lisô oæ dependenô filenames. Operation: Syntax: make [-l] [-f makefilename] [-n] [filename] -l means list the makefile showing dependencies and 'howto' lines that are encountered. -î meanó don'ô executå thå commands¬ jusô writå thå oneó � thaô shoulä bå executeä tï thå standarä output® Thió ió � usefuì foò creatinç batcè files¬ foò example. -æ specifieó thaô thå followinç argumenô ió thå namå oæ á � makefilå tï bå useä insteaä oæ thå defaulô (MAKEFILE). Alì argumentó maù bå repeateä anä relativå positioî oæ thå �      argumentó ió noô important® Iæ multiplå definitionó oæ á �Š     filå arå found¬ onlù thå firsô onå ió significant. First¬ 'Make§ readó alì oæ thå makefiles® Iô theî �      proceedó througè alì oæ thå filenamå arguments¬ 'making§ �      eacè onå iî turn® Á filå ió remadå iæ iô ió ouô oæ datå �      witè respecô tï thå fileó iô dependó oî oò ió non-existent® �      Dependencieó arå processeä iî á 'tree§ fashion¬ sï thaô �      thå lowest-ordeò fileó arå remadå first. 'Make§ createó á submiô filå whicè ió automaticallù ruî aô �      thå enä oæ thå 'make§ requesô unlesó thå -î optioî ió used. Alì definitionó anä howto'ó arå storeä iî dynamicallù �      allocateä struct's®� 'Make' REQUIRES CP/M 3.0 (or higher?). The default makefile name is MAKEFILE. An example follows: = ASCII 09 make.com make.o ln -t -o make.com make.o -l0/a:c sidsym make.sym make.sym make.o make.c stdio.h cz -i0/a: make as -zap make Aî explanationº make.coí ió á dependenô file® Ió ió �      dependenô oî make.o® make.ï ió dependenô oî make.ã anä �      stdio.h® Iæ thå followinç commanä ió issued:MAKÅ make.coí �      theî makå wilì checë tï seå iæ eitheò make.ã oò stdio.è haó �      á neweò date&timå thaî make.o® Iæ sï theî thå ² compilå �      instructionó arå issued, theî thå linë instructioî wilì bå �      issued® Iæ onlù make.ï ió neweò thaî make.coí theî onlù thå �      linë steð woulä bå executed. Hintsº Dependencieó caî bå iî anù order® Makå wilì resolvå � theí correctly.  How to lines must begin with a not just 7 spaces. Thå commanä linå neeä noô specifù whaô filå yoõ wisè tï �           make® Iæ noô specifieä theî thå firsô definitioî �           encounterä wilì bå thå filå thaô ió 'made'® Morå thaî �           oî filå maù bå specifieä oî thå commanä linå iæ �           desired.Yoõ maù havå morå thaî onå seô oæ filå �           definitionó iî á makefile® Iæ yoõ dï yoõ maù ruî ouô �           oæ memory® É haven'ô ruî intï thió yeô buô É supposå iô �           ió possible. Sincå 'make§ buildó á submiô filå therå ió nï waù tï �           kno÷ iæ aî erroò haó beeî encounterä durinç thå make. ŠååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååvÿK·MAKE.C[ßÿ šÿöÿ‘ÿ‹ÿòÿõÿ–ÿ�ÿŒÿ›ÿ�ÿžÿ�ÿ™ÿ !"#Äÿ“ÿœÿ×ÿÖÿÕÿ—ÿÂÿ’ÿŠÿ$%&'()*+,-./ÐÿˆÿÓÿoÿ˜ÿÔÿØÿ³ÿÒÿÁÿ0123456789:;<=ÏÿÝÿûÿ¤ÿ¢ÿ‡ÿ„ÿ‚ÿ”ÿÎÿºÿ†ÿªÿ±ÿ£ÿÍÿ>?@ABCDEFGHIúÿ¹ÿ�ÿ«ÿ‰ÿ¶ÿÞÿÌÿÚÿÙÿ»ÿ¾ÿÑÿ²ÿ¬ÿ¼ÿÅÿ§ÿÜÿJKLMN­ÿuÿÉÿOPQRSTUÇÿ…ÿÃÿùÿÈÿƒÿËÿ·ÿ¨ÿVWXYZÊÿÀÿ°ÿ ÿîÿåÿÆÿ½ÿ•ÿÿþ¿¬4õˆÿâU°îËpÔæ—•¦žñ_J#ªþ2µùe¥©ç@ü—FÝgú2µÑæW b…øÓÝËÏû׌Ó)ÝP±5�jó+P±B|÷óîûË·û;œÒ%5Sº¡/~~uªÍ¯@Å ñÛǯŸòíûm~*Vˆ_ÿöpÇ·Úü T¬¿ü¼ÿvÇ'ÚhãUœÅ6$E¸bæE+Š¢¤‘r$O¢’²Nô mØŠâOéÞWÌ‹>MoÿLH »ÚÉf‡õ‹~ÁÚp3¤Èÿtsô•6Ü )òW+³"_is]i£�Wqnn©á+m¸Rä~pËÆM•6ìUœŃ[Fj¸ºTƒ[VÚ\WÚhãUœÅ�r¤†¯´áfH‘{IUÚ°Wqn*©á>P©´a¯âÜ(”#5Ü ]ª@¹ÒæºÒF¯âÜ(T$RÃWÚp3¤È½¤‰*mØŠâ9+’¢JžÅÛ�P@ídÓ ¶X •6ìUœÅ�r¤†û@™$x'•6ìUœŃ[Fj¸ÜR¹Jö*Î�â@E"5Ü ]ª@E*m®+m´ñ*Î�âà"5|¥ 7CŠÜKš¨Ò†½Šs£8¸H ÷B—*¸J›ëJm¼Šs£8P‘H ÷�ŠÔÖ«J¯âÜ(.RÃ}pµõªÒF+Šé’šYQ¥�ÅS äÝDj°²©´±¢øFÜrpËJ+Škë••\i£ÍË·û;î§’+m´™’•)nšRܼA§�Å)nšJ›fH‘û7oÎ/*m®´áÚɆ§tCmWiÃÍ�"÷Sº!IUÚèßÙŠU-RÜ4+¤¸yƒ®ÒF^ôh"%Eðó«É*[l� èÚð,µ•›w?﾿ |»¿CWiö´ KjfEèp¥ ³--Ú©dŒ(.“´¸ûy÷ýåÛýÝ §ËÓ®Ã8â®´aæ’£UZx(ÆN›$;…&RRº¤fV„bkúò$§è*m˜™.­jq‹®Ò†ùZ¾Ö†=l�8HšËä±±oH0{‚ÅF¯¨X±Ê:A¿Ð†mi\m½Â8âña¿G‡+m˜ƒ«­WÑzçF!¸H úSªk×´ðöÏäJ ¯âÜ(©A‡®Ò†9¸Úzu8Jš#©­W‡£¤‰*m˜ƒ«­W‡£Ð¥ #öûJ¾ÖF^ôˆ4ÑôŠ"–CRXR$LéÆÊýBžÒ Iš#‚«­W‡£¤‰*m´áEqK”T×n)P!¸Úz…$ÁA 4!Õ5ú…6¼lM-‚«­Wx7âña¿G‡+m˜§È»‰Ô`eƒ/?ï¿ÝUÚ0Oé†ZW[¯GI¡«xÑÃnÄEB$5GÁ›TÏ„~¡ ³--ÞM)�w©ÁÊ®´af[Z܈[n‰N^Ÿ•­¨Ò«@1®pºûàw°s†rIÑ“œ®\m½:%M„®Ò†™©ö¤ ¯ÏJŽVTiáU W8 Nv 7â–ÜÊaJ7„Ý¿{’Ó‚«­W‡£¤‰ÐUÚ0_kÃ\m½ÂˆàjëÕá(t©‚«´ákm´áEO[°$L)’Ü«ÁÊýB¶¥]R3+ÂÇ�˜R ï&Rƒ• :\iÃ\r´¢J‹©äN)&OøàŸät…»Ÿwß_¾Ýß¡«´a.Mí<µ˜JFWiÃìs´¢J‹“Ë““?�¬púí῾}�þ)ž®p÷óîûË·û;t•6̯‚ó-þñ·NÐUÚðµ6Lµ'm˜g©­Ü´¸ûy÷ýåÛýºJ›km´±bU‹7Í )nÞ ÓÆŠâ7M¥M3¤È}Š›7ç•6WÚ°Åv…ÙS ’æZUÚhÃÁÕÖ+Œx|Øï+m8P‘Úz…�û}¥ kó§@%͵º¤fV„¯{¸«´áÚze%cÄËÏûow•6Úpq±…ÅˆÛ AŠ›¦ÂvkÑáJf[Z¤¸ysn/ÎO.0ŽØvèp¥ 3/z¸¬¬ô m˜Ù/­j†ÊÍ9Sl‘âæÍ¹½8¿½@‡WÚ0s“ç¬\HŠ0âõow•6̶´T$Žƒ[*‡w#ö{tÚ0ó¢Ç’0¤+^ŹQÖ‰G¿Ð†™§È»‰Ô`eƒ¯{¸«´ákm´áHjŽÒ"P‘|8N.Øb) «´¹ÖF›Â*×£c^ôH! Øš$Måjëú…6Í�"÷¾ÒæJö*Î�âà"5ÜgoW賊ϕ6ÚpVñ#Z¯âÜ(©AßaJuíšÞþ™\iáUœ…à"5èÐUÚhÃYÅÛÃQÒDá+^ôp7éÞJCpRߣIuMK«$AŠ›7èÚpVñöpºTÁaÄãÃ~_éßµáE�)Ýü KB“©^¦{�)©f@Û$O§`§ì¢J¢:ô m¸vKŠMòÔ"«x{8Jš]¥�6¼è!n‰�CpK�ÁÕÖ+ô mØ–ÁÕÖ+Œ#ö{tÚ0W[¯0"«x[iÃT{•6ÌYÅgŒ®¶^UÚ0/[S‹¬âóá(t©‚û�û=:m˜9«øŒYÅçÃQèRWiÜU|>….Up‘U¼­´ákm®µÑ&R Sº¡bkjáÑ1/zäèò>Sc‹¥€)ÝP±5¡_hÓ )rï+m®´á—o÷wÜ[WÚ°ÅÁ ÕVh…ìü v…ÿ«´áfH‘­ÔVèüíã×Ï?/V°RÜùÛǯŸ^TÚ°Wqn*©á>P‘¼B¨H~®´a¯âÜ(”#5ÜÊy…>PÎÏ•6ìUœŃ[Fj¸Ü2¯Ðn™Ÿ+m¸Rä~o½zm'j»Jn†yéÏߟ\TÌ‹^E+’¢…²¡_h£ /z¨xåà2 |nl±PlMèÚ°--ÚbkŒ(.“´ð+œÆStÆ'èp¥ sÉÑŠ*-¼ ã §�›ë ;—I°ûàwOrº‚GWiÃIÍQZ¼ü¼ÿv‡®Ò†¯µÑ†—ƒ­©EÙ�ò-¬ÔVh…·�_?ÿ\¡ØÞ�x|ØïÑáJf+µ:÷*Ö$­•Ú u‡Û ŒØ=�ì*^ôð*Ú ¡em…Ð/´Ñ†Ù–Vj+t~r�qÄîéd‡Nf^ô°q‘ðªNrƒÚ yô m˜¹q¢¬ÌTi£ ³--¬ÔVèüäïFìžÔ®´aæE¯RTpBK*èÚ0s햛䩅•Ú ¡«´aæE� ),‡¤°¤]$*V¬l`E9X)ýBf¶¥…÷M’ÒÂJm…V8ýàqº‚•âÐá݈[t¸Ò†×g%G+ª´ð*PŒ+œ6Iv ¾I‚Ý¿{’Ó¬ÔV]¥ ¯Ï'ÊÊL•6Ì|­�6̼è±!…¡%¼Šs£Ð/´aæ@E2F´^ŹQT$Rƒ¾Ã”êÚ5-¼ý3¹Ò«87 �ŠDjС«´aæE�¬‚rP�$À*R[¯Ð/´af[Z*R[¯0Žx|ØïÑiÃë³@EjëF*’+m˜™jO¸Ò†×g�ŠägŒT¤¶^UÚðúl9ØšZ*’ŸG¡K¨Þ�x|ØïÑiÃë�ŠägŒT$?ŽB—*P‘J^Ÿ*’ŸG¡K¨F*’+ý;3_k£ 3/zX±Ê¦Úþ™`ú…6̨H>%M„m3¤ˆ¾Ã”êÚ5-¼Š5I +š÷è*m˜Ù«Øäû�ŠäÃQÒD+X)]¥ 3*’Ç9+’"Œxùyÿí®âE�Ô¨9Õõ=f¹·ô m˜9P‘|8N.Øb)`ÄK[Ók;Q‹@Eòá(i"t•6ÌlK‹Úze%£Ã•6¼>+9ZQ¥…W�b\áôIŠ­ #vün…:y…É[,|ðOrºÒ†×/ɇ£¤‰VØ[¯^Û‰Z*’ÇÉ[,…–ºJ^Ÿ•­¨Ò«@1®p(“'?žä]¥ 3_kÃÌ�ŠäÃ1P& Þ F<>ì÷•6̨H>·T#öûJfT$ŽB—*PŒx|Øï+m´aæEqKlÔg¤º†+°jç(“’Æ’G¿Ð†™=Š�^­0¹7„œ¼‚ÅF¯ i"ô m˜9;�'•6̼lM-¬÷95ÔÂJm…γóèÐiÃë³í6;_iÃÌËÁÖÔâ�õ>§†ZX©­Ðyvþ>~¬ÔVè<;�w#vO';tÚðúl»ÍÎWÚ0󢇸%jç2Ôg¨� i"�~¡ 3'T[!Œxùyÿí®Ò†™—ƒ­©Å»à„j+„WÚ0û&I üC^Ÿ-[S ë}N µ°R[¡óìü:tÚðúÅv›�¯´áõ™--¬ÔVè<;�qÄîéd‡WÚðúEpBµˆ׿=ÜUÚðúEãDY™©Ò†×g×Úðú¬¸ØÂbÄI…wÖûœja¥¶BçÙù tøøVj+tž�¿À»»§“]…N^¿°RܹÝn/0ÂJm…γóÛíE¥ ¯Ï¬wn/0b÷t²«´áõÙ¢‡'‚-¨­¬GãDY™)À‰rºTˆ”jÔVýB^ŸÙÒ«ØL¹…•âV8}z:E‡qÄ :\iÃë‹‘R€Ð¥Bm…Ð/´áõ‹²!å[X©­Ð o¿~þ¹B±5ºJ^¿°R[¡s¯bMÒZ©­Pw¸½ÀˆÝÓɮ҆×/j·¤Ø$O-¬ÔV]¥ ¯_dç1â¤Ò†×/6N9ø&I \iÃë³kmx}¶è±!…¡%¼Šs£Ð/´áõY œ1¢õ*Î�B ©AßaJuíš^Åš¤…•âÐa‹[t•6¼>[ôH!À*(5H\A \[¯Ð/´áõ™--ɇc L¼Œ#ö{tÚðúE "ùp ”I‚w‚�r®´áõÕžp¥ ¯_Êù#ɇc L¼“J^¿X¶¦�r~>….U Œw#ö{tÚðú¯�r~ƈ@9?ŽB—*P®´áõ‹@9?ŽB—*Pƈ@9WÚðúìZÿÎë³@9Ž’&ˆ¶RDßaJuíš^Åš¤…•âÐa‹[t•6¼>ó*6ù¾E œGI­`¥8t•6¼>³¥Em½²’ÑiÃë%G+ª´ð*PŒ+œ>©þINW”óá(i"t•6¼> ”óá(t©eŒx|Øï+m˜ùZækm˜©ö„+^ôHÜÊ¡¶BèÚ0³--ÉG<>ì÷èp¥ ¯ÏJŽVTiáU W8ÜR9ÔVË…C bÅ*ëäINÑUÚðú¬ähE•^Šq…Ó'µûàwOrº‚•Ú ¡«´aækm˜yÑCÜ©®]“ÁçÔŠ‹P¡qÓ”$,RÜxÔVýBf..¶ÈÎcÄIë}N µ°R[¡óìüº Ûmv]¥�6̼èa Ô@‘`=¼›H V6PEZ!Õµk’"L4!I@ãò=ú…6ÌlK ¯bMÒâ£•Ú �gç/Ðá݈t¸Ò†×g‹RHZ«87 ýB^Ÿ n™1¢õ*Î�Âà–‘ô¦T×®iáíŸÉ•^ŹQÜ2Rƒ]¥ ¯Ï=R° ÊA ’W0¸em½B¿Ð†×g¶´T$Žƒ[*‡qÄãÃ~�WÚðúE "ùpÜR9ŒÜ2WÚðú…--jë••ŒN^ÿµähE•^Šq…ÓÁ-¡¦tC?žä]¥ ¯Ï®µáõÕžp¥ ¯_ n™Ÿ1"P‘|8n©\¥ ¯_,[S‹Á-óóá(t©·Ä»�û=:mxý×Á-ó3F n™ŸG¡K5¸e¥ ¯_ n™ŸG¡K5¸%F n™+mx}v­ ¯Ï=—ïѸiJP[!ô mx}6¸e>·lÜ„m3¤ˆ¾!ÔêÚ5-¼Š5I +µB‡²óØâ]¥ ¯ÏŠ‹-,FœT°R[¡óìüÞ�Ø=�ì*tÚðúÅà–ùpܲqÓ¹Ýn/0ÂJm…γóÛíE¥ ¯Ï·Ì‡ãà–�›ÎíFìžNv•6¼>³¥Em½²’ÑiÃë%G+ª´ð*PŒ+œ>©þINWÜ2Žƒ[6nBWiÃë³Á-óá(t©·ÄˆÇ‡ý¾Ò†™¯µa¾Ö†¯µáHjŽÒâõowè*m®µÑ¦vKŠMòÔ£ӦRäÞWÚ\iÃÅÅz�w#vO'» ~»E§ sï1B¹Ú-)¶è=ºJ›km´™ÅÛ�P@ídÃSºl‘Vx…N›Y¼ÝÔN6œVxUis¥ GRs” G¼Â¿#á^¡«ôï×Úh3‹·¡€ÚɆ_Úš^Û‰ZI¡Ó¦Rä¾Hš¨ÒæJžÅÛ�P@ídÃÊÕN6mWiÃÍ�"£4¯ÎßÿqQi£ —æ•«ZI­PšWè*mØ“šhjñ±4¯Îoÿ¸Xáö�ö{t•6ü*8ßâöäy…Ò¼BWiÑÔ¥…rµ“M‹�¥yuþü§ tè*m®µÑfo7Bµ“ Ÿc|m'j;m®´áY¼ÝÔN6¬\ídÓv•6ìUœŰ!)be'ª´Ñ†_ç[ÜžüÛ •�]¥ GRs”ÊÕN6->*;:t•6×Úh3‹·¡€ÚɆ•«�lZ4�6Í�"£Éç•6WÚð,Þn„j'^ºxSiÑ6Ö+Šh†¹_æJmx™1âãÒÅ›Jm¸_æí#š|þþ¢â~™·[ŒhòùóE¥ ÷˼ÝbD“ÏO.*î—Àˆ&Ÿß^TÚhÑÔ¥ÅÒÅt•6×Úh£\HŠZ”¼‚Êè´i†%Ÿ_TÚDÚX¯(¢Rä^åJ›+m¸Wy»Åˆ’ÏŸ/*îUÞn1¢äó÷•6Ü«¼ÝbDÉç·÷*QòùÉE¥Íµ6Ú4CŠÜï­W¯íD-Þ¤z…�Ññ¢Gãä E…ÚÉÊ!R éUMIÑBÙ‰Ð/´™ÅÛ�P@ídÃoR]iic½¢ˆfH‘û�+m®´‰´±^QD3¤È½Ï•6^%eö*Î�b’"¼EQRý))ª´ñ*)Ûp3¤Èý§tÿå_D7çq¥ Ÿ~K §+œ~›§+œ~u‚ÓN_Ï„ÓNÿE§+œ¾fœ®pú2Zœjs]iãUR¶a+Š¿:QÃw7‹:¿Àˆ+møýí ÏZáýí ïOVx»Âû“Þß®ðþv…÷'+¼¿]áýÉ ïoµ¹®´ñ*)Û0¬(¾§ý “5øBº÷+„�î}¥�6¼è1¹75Bº‡+XÝÀ«heƒ~¡ +’¢ߤz…�oEQ”TJŠÐUÚpq±…Ïñ)ÝÿGùÑÍù[Q%ÕŸ’¢/ŸÒ½Çüí¢Bïs…>äí#zŸ·[t•6Úð¢Gã¦<+‚Ÿ’"$ ˜Ü‚åpw©(Jª?%EèÚð¢G±Ñ+4©næ:)‚Í#‰Â=¥ˆ~¡ [ÜSŠ#þö§Bº÷ñVEIõ§¤è˧tï+më!Ý{ц�î=F´÷”¢ÇG¼ïðïxÿÇ¿áÞÿñGWiÃX¿Ønï)E¿BH÷‡!¤{�•6Úð¢GH÷â–hœ¨dÅC „HS²beƒ�î=¬@ „{JýBþêD ßÝ,êüö#BH÷¼ÿ·Š=žÿñü?(.â%½B¿ÐF^ô(v3G‚›–ƒmLNÔ5XëÑ/´áâb‹É‰äí#Ú�î=¸=é°ÅîdWqòv‹mH÷p{Òa‹ÝÉ®â>äí#v‹]¥ ÷!o·ÑÞSŠ ÜžtØbw²«¸y»ÅˆöžRôø€Û“[ìNv÷!o·±Ã®ÒF^ô˜Ü‚ÊN+ÊA „»KEQRý))‚WÑÊýBîCÞn1¢mߊ¢(©þ”}ù§›£Çñˆtøˆ“Ë“Òa‹Ýɮ҆û�·[Œhߊ¢(©þ”}ù§›£ÇGœ\ž”[ìNv•6܇¼ÝbÄîǮ҆û�·[ŒhÛ·¢(Jª?%E_¾Z™y�øG‡�8¹<)¶Ø�ì*m¸y»Åˆö­(Š’êOIÑ—¯VfEqryR:l±;ÙUÚp2€�û}¥�6IÍQZ„Œnÿ„®ÒæZ›ÿ^ÿ×ÿÚ°--ÚbkŒ(.“´ð+œÆStÆ'èp¥ sÉÑŠ*-¼ ã §�›ë ;—I°ûàwOrº‚GWiÃIÍQZ¼ü¼ÿv‡®Ò†¯µÑ†—ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååmake.com make.o ln -t -o make.com make.o -l0/a:c sidsym make.sym make.sym make.o make.c cc make cd.com cd.o getline.o ln -t -o cd.com cd.o getline.o -l0/a:c sidsym cd.sym cd.sym cd.o cd.c cc cd getline.o getline.c cc getline PIXGEN DOC kPIXRN DAT q€SCRPRINTCOM rSCRPRINTDOC s KEYTEST COM v€KEYTEST MAC w€ MAKE COM {€?MAKE DOC ‹åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå1*þ"ˆ¯2Š2‹!6 #û:]þA0Íy Bad file name entered®>2Ó>Ó>2Ó>?ÓÛöÓÛöÓ>Ó>Í�> Í™ÛÍKZReady when you are, Ace. Press ^C to abort. Šó>Í™�Ûæ€(úÛ/þ (ów#þ ë>Í�û> ö€å!�ÍQáå]T!޾ +øáà á6 #ë*ˆíRëÜ¢Íe:‹§ Ÿ>2‹˜>Í™§íR€6#ûÍ¢Íy File received and written to disk®ãÍQãÉÅÕ^Ë»åÍáË~#(ñÑÁÉÅÕåÿÍáÑÁþʧÉáÍQ:ЧÊ\ÍÃÅ/GÛ ÓÁÉÅGÛ°ÓÁÉÅÕ:ЧÂ,\åÍáþÿ(eÍK File already exists, do you want to overwrite it¿åÍáæ_þYÊ,þN ¶ÑÁÍy Returning to CP/M®\åÍáþÿ(H>2ŠÕåÍ\Íáѧ ,ë€ ëå§íRMD>€¥´á Ù!ëŧíBëíBëã ãÁí°ëÑÁÉÑÁÍy Disk error¡ PIXGEN DOC kPIXRN DAT q€SCRPRINTCOM rSCRPRINTDOC s KEYTEST COM v€KEYTEST MAC w€ MAKE COM {€?MAKE DOC ‹vÿ„ÉCEN-INP.MACaßÿ öÿšÿ‹ÿõÿòÿ�ÿ–ÿ�ÿžÿ‘ÿŒÿ !"#$%&»ÿ³ÿºÿÄÿ›ÿ“ÿ¼ÿ¾ÿ™ÿ½ÿÓÿœÿ¯ÿ¬ÿŠÿ—ÿ'()*+,-./012·ÿ�ÿ­ÿ±ÿ«ÿ¹ÿ°ÿ¶ÿ�ÿ’ÿªÿ˜ÿ†ÿÎÿ3456789:;<”ÿˆÿ²ÿoÿÏÿ‰ÿÑÿ×ÿÖÿ´ÿÕÿ®ÿ=>?@ABCDÍÿ¦ÿØÿ§ÿ¨ÿÅÿ¥ÿÇÿµÿ‡ÿÐÿEFGHI¸ÿÉÿŽÿJKLMNOPÊÿÈÿÒÿÌÿQRSTUVWXYZëÿûÿËÿôÿÔÿ©ÿ¡ÿÆÿúÿåÿÂÿøÿóÿïÿ[\]^_`êÿÝÿ…ÿ�ÿùÿðÿéÿÞÿÃÿÁÿÀÿÿþOÕîî.[oðßµÂýÿz{{Ã`l6œdÇ©ôâ ÞÞÞ´Âýß¼½½¡rË‹±çYpýçï¿ãpAâVî–ñöö¦îÿçÛÛ†'ìžÐºŸøÓÃõáO}@bùì:T5ðÏ®ÂÛÛ›VZiµ™mÄÒ¸³ñGÜÚ²DïBcÏ“aÈÌXzãË’K,�¸™ÙOî'±� q(�»AioZyTĸ`ûˆ¥7¾,¹ÄÒØ lÀÁJÎðÁÉ̽;.'aƒ[+3<*b\°}„VKgâ Æ‡x´‚Æ–!23²ŸÜObù Ø n}Ä­±"Ð8ƒoßêñ‡I´Š³›Ê¾Œ·ÎÜàÖÊŒ»ï¸µ2Cf†/ +Ö¸23ž¾}À2òT8¸å“VZmfFðG†k 3£à(6x±. ±%ã8EÁ�aC_N°23zw<úP ´�qke†V23‚?2\™mÄÒ¸³ñÇÎÀ nmYœÜZ™áØgpäý™Ÿ€}™ZÅ/Ö4¶ddøÒ°/.àŸ6J„ �™QØxÓáâ&ÜÚ²Ä�áã hœ�VK6G£uâàÙÜ+ ™üÓF±áŒÆ–ü¤•V›™ÁL^Õ*Ýv° ÄLÜáÖ–%ü$îèÅö¾,/°!²x”60æ¾6`ßÏZõÞëÏ Ã2™€ÆÈì"£wÇå$l"döÊ "‡½7Æú3ðL&Ä' ½@«È"6œ!3ƒÿ˜¼0ÆìÛý¦ÃÁ þŒ[[–80" Äá.À—% ÷l¹@áÅ?Z�,bÃëÝv 1ãÖ–"%gz†ÌŒ¥qgã�{Î0gŽh˜‹øÔÕë:ý Ç) ´:0ÄLŒÆÈì"£wÇå$l"ngÛϘ"CfF]½®w_Ò,ù-Ci£q³Eœý� ç'@«ö4~„�˜"°lefƒÞG~63ƒÿ˜¼0’ý8¤Ñ» Æ•…�ËÒ_à­lèÝц3 /.@fFì s€�°a¸gûÈÅ“VZ%6ÞàÖXá×÷“ÁíÌ�Ù@fFcKÆaj6°ÍT–|Yº[ÎhlÉÓâ • ŒÂÆØ€’ÃYfˆÃ�a¸gûÈÅP7ÂüÈæ‚Þcý™aX& 3ã†/çM­lD?sÃgàñO:™‡©iØÀFô3÷7\@"3l+°ÍT–¸°tð¡€Ì ­„ÍÑ/ÖDþcâÐ3lD?sÃgž´Òj33–Æ��?âÖ–%zƉa¸gûhÃS[Bf†°9Úàź€ÈLz†h•­“»ñ a bËŰ™mDä?&=ãè/80|¸ äp–¹Ãa§(àPàÖÊ ­zoŒõg†a™Lxöò)¢äp–6¢÷e?•^¸€ŸÄ½ØÞ—å‡ âtã{±á ­²ur7^ÑwD¶NîÆOÀff›£ ^¬ ˆüÇÄ¡g؈àQœá>bé�À5�™¡UcK~êFØÀpÏöц3df›£ ^¬ ˆüÇÄ¡çíiüQr#(Ýí“VZ탰1ÓR"¼a6úCÉng[2„ –Îø�É G­ò·û¿ÑJ«¶®^×”½Ÿè;åuõºÞ}I³ß²_p“,'ѪmOãGÊÞOt}XPÞžÆ�p“,'Ѫê![Qö~¢ ʇzÈVØ�6p“,'Ѫ7«–²÷}XP>Šqþ–“h¥•VùÛý¿j•ÿþýÃ7¾,¹ÄÒÿ1yá¨Uþvÿ¯Zi5ÔI½¡ìýDׇQ^£ðâÖp/Ö,�­†ºÚ¬({?Ñõº Êkô.ˆq%–ΈVC›ÔÊÞOtý° Ê[^ü¯Â¥3¢ÕÐV›eï'ºþuA”·è]ãJ,�­´jÇM½ÚPö~¢ëÃýß¶Dù(ÞVà´(¼x,�­´j³]EÙû‰®÷ÿÞRž…®AïÂ#›h]ÀÁ l@�Þ1®„á³�ÂF+­Ú$YQö~¢ëÃCK”'^< k¸ëÂ/7ÉrD.¹¬h¥U}·K2ÊÞOt½><\Z¢|·dãņ3Ž®`ôîxô¡@ã j>Û(l´Êi¿z‡ ÂÆLKAa£?”\h•SU_!ÆžÏl¸Àá‚ÒÝBf{ž!Ƈhź×`ܬvm¦UN4nV»6ûaÃ#á–[æ€Þ…À½8 üþýÃU«œªúl„›d9 þ‚ÈÑGW0|ß;SØp†8¬à¯p Ÿm6ZåD»I–“ ²@`~ÿþáÚá /ØgY†¥3¢•VíÝ.É({?Q}·K2¢|·dãņ3Ž®`4Π…á³�ÂF+­êd¿¢ìýDDùàŒ Fa ÷b]ÀÑÇ›+ˆ,ø7¸I–“hÕ&ûeï'ºÞÿ�–(œ´(¬á^¬ 8úx£•VÙºnÓŒ²÷=\¯-Q>´Úàà%£°†{±.t¸âß`Ãr­rºÿ—Ö Y"†úá/Ö*§ûi­àŠÈ1´¿ÿåϪúªUN÷ÿÒZÁD–ˆ¡ýk÷'­´ÊßîÿC«¼~Ý�ÿ˜¼pÔ*»ÿ­´jw» eï'z ʳŸVà‹ÂpŒ‡jøu§Õ¶j){?ÑŸªQ¾µ%£wAŒ+q(]_†cÔªMv#eï'úQ^ù²„8´ÉnÔJ«6¹«_3ÊÞOtý}A”ï–ø�-·Vfl«6à9É^´j“Ý�­){?ÑÃvA”ï–À?mÎhlɸµ2c[µ°ÏIö¢U›Tén¤ìýDׇQ^•.2[2n­ÌØV-lÀs’½hÕ&ÃiCÙû‰®Zå_ŒFàŸ‚È½8× ±%ãÖÊŒmÕÂ<'Ù‹VmÒž¶”½ŸèZ/ˆò‘†}ñëÖXa¦¦a_†cDcÜI¦U›ìׯ²÷]‰ò/Þ gp×¥ááCÃ2™Pk¥U›¼f){?ÑïDy5sƒ¾œ7g`Ãr­^³�û5eï'zØnDù>,'ASú3Äa9 l@†Æ´ÉköQ+­Úä÷ eï'ú@”� .°Ä!ö†9h¥•VùÛýÑ*¿³±ç²ô�ÝÁL^8j•¿Ýÿ­´jÓzýJÙû‰><,ˆòz¬ö{Jn´ªV”½Ÿè!Yå•7Æú3ðL&hµÝRö~¢‡jA”o�9¢a.´J·”½Ÿè¡^å© Œ†¹Ð*['íiKÙû‰>}ûô—Oõ§¸R^¹ Æ•ø†£77 ¸…PØx£•VZå# ¦%dfDñý –ÎaÓáÈGg.(]ïźáC�G6¶¹ ±%#ø#k¥U›ý¶_¥4¡qèÆM]½jEiB‹´{n“Ýø×Êö:sÑŠÒ„’¬ûˇ‡‡…VT' -Ò.É´¢4¡çÅþ.»{é)å {ž9 |QŽ�3hlÉ8LMÃF+ú¼[Q­¥ ='ãë—Õæ¥«)ß–þŒÆ,½ëK4¶dÜ+ÂâPØx£¥ =¯>__ºš(ß–þŒÆ4ÖD�áž—b]€kPxñZQšÐ"íÚÓv›­þ²YÝ�ûoZQšPÛmVwãþ›VëÝfu÷•Ò„žéKצõúU+Ú¯+Z¤ZQòcý�Ö»ÍêŽ(¿ó7Œ8Fpas´Á‹uQŒ g­´Ê)‚»ÅÒÙ âО¶Ûl¥•V”&TwÏÛªý‡ë å[k¢ Ÿ½ñ½°�kÐØ’ƒ?²VT ô©þD”ßùFœ ãÑ—¶@cKFðGaÃ…VôcEëªÛ¯÷¢|÷ Û ±%#ø#Cf6¬UušRöy¿!Ê—¥¿àÈ1ú3ÇþàŒhEIKÕªK·]µêÒ­V”Tô©õ[2‚?28.ž>i¥U>²`Zâ÷ï®Ziµ_ï7_)M¨îê»]’å# Ü’�Î8º‚áC�Ȃ‹ÿUXýX´¢ÝiCÏC]mV/]M9>Û(lÐ8ƒÂîź ¥ Õ]�ìWDù>,'ùå&YN‚£�7ZÑî´¡ç¡NêÍKWkEiBu×Þí’L+Ú�6ô<´ÕfõÒÕ”�,pK6^l8ãè Fã Z­(M¨îÚd¿"Ê÷a9É/7Ér}¼ÑŠv§ =mRo^ºZ+Ú¯©îž‡ºÚ¬^(ÿ�nÉÆ‹ g]ÁZÑnEm’¬ˆò‘…ÿ«°†{±.ÀðÙFaƒÆ^¼V´;mèy¨«Íꥫµ¢ýšêîyh«ÍêE+Ú­¨M’Q>² q…¯íNzÚj³zéj­(M¨î²uݦåYð‡’±tF"jøP Eã ö¿vZÑî´¡ç¡MêÍKWk¥Uþû÷WìƒëKû߸èY0-1ûPÄÙߨpÖJ+Jª»¶®^×ÿж§ñ#åuõºÞ}I³ä· +ð¡@{?â`E+ªê4¥6©7‹=Q>²`¶ç^ 3cé�/K.±tF´¢4¡ºk‡zÈV”~Én¬hEU�¦Ô&õ&Ýå# –~Én¬ t·ð‚¥3¢í×TwÏC�Ô›Êïü #N†±tF`#ú’½ÑJ«|ž¸ q¾ëB‡ÂÆeé/8rŒþÌZiEU�¦”ŒÃ]6jEIK×vÑý©^åUÉÞ ö†9hEI¶½£O+öÅ·3\Üo¸CÝóÓ'­(i©Zué¶«V]ºÕŠ’–> †cÄ?UpFž>iEIKÕªK·]µêÒí?|Xh¥Už:wƒÆذœ.`éŒh¥ÕêsºÛ _)ÙkEiBu×¶§ñ£VTÕiJmRoÒQ>² =�Qº[xÁÒÑJ+Úo)Ù�CúQ+Ò„’¬7«ö´Õвu²ßjµú�U½¦ü•y‰Ò¹ΰ ‚CáÅ㢕VùoNàÑÏÞø^Ø 13¢•V´_SÝ=uRo^(ÿ�ýì�ï…�VZå‰Ù8\0{SÜzÃlxd#ðgoƒVZQ5¤D”ïÃ#AáÅk¥U¾où‘V Ƈx´1Z:ý #N†q°‚?ÃF”îV+­h¿¥1ûÇv¿ÑŠ€z�П· ¢|dÁÁ þŒÒÝjEÙ:ÙoµÒ*O\ø$°¡/§‚Ñ8sDÃ\DØëÝv‹È¢•V´ßÒz·ÝjE@5Ðv«?Vô­[}«zMùþœa4ÎÑ0¶Áz·Ý"²hEÙ:ÙoµÒ*ÿÍ Š3 +ZiEû-%ûqH?jE@šÐs’½tµVì×%™V”­“ýV+­ò‘C�ºz]ᄂYò[†åTF†m˜ .´ÒŠö[ª«×uú›V¤ Õ][W¯k¢¼®^×»/i–ü–á`E+ª:M©MêMºÓŠ€4¡ºkëêu­U�¦Ô&õf±'Êëêu½û’fÉo–SY+Ò„êîy‘¾å+Žâ £Ÿ½ñ½°Ñвu²ßj¥U^�>ôŒ¥³AØÀ‡g‡ƒïoÐ8ƒ£3 Û 8‡®Ai㢕V´_W´H‰òºxô¡g,� ÂF+ªªVZÑ�­¿u«ÏcU¯)ÿâ­ q ¸¥ ¬i•gA¬a”60 ÷l¹èYОÆ�˜íyÖJ+Jª»¶=�µ¢ªNSj“z³ØåíiüˆÈ‚Ùžg­´Ê«™û4΀C×@Œñhc´.h¥e{­´Ê—¥¿ ´�a6.K��àà%ZiEû-%ûqH?jEÀ~KÕ*ÝjE¸ÿÛ4¡ºK·Zîÿ6Mè9É^ºZ+Âýßî×%™Vdëd¿ÕJ+’¬¢$#ÊSýì�ï… Ä¡°qYú‹V¤ ÕÝs’½hEÀnEßZ�&ôœd/]M”�bl8CØmðâŒV §qA‹T+Ò„i7nVíiKù(Ɔ3Ä¡°qYú‹VTušÒ"½ËF­v-R­(['û­VZÑp´H‰òÑ?2úÉ‚¥³AØhEiBY—jEiBI· Ê+·¼ ŸŒá X:„ l‡$ÓŠÒ„i—­“»ñÃ_®”§> úÙß ˆC?sƒÆ­(É*J2¢|p6Ä¡ôQÐÏÞø^ØÀpÏö‘ ­(M¨í6«»qÿ�ò”ÃYf¸Âæhƒ/ÅØpÖ*['Õâõ+¥ ÕÝs’½hEÕ@Ï‹ôE+ú±¢õ·n½Ûdë„´¢$«(É´¢$«h‘jEÉ�õ7ÊÖIµx%­hØ ´Hµ¢m÷ëý¸ Êë²Dáw¸5V�-âPØx£•VùÚ 8¸°tðE�ÒFÃ\À6Ìð¡@d†mpä£34SYj¥Õz·ÉÖÉWv-R­h¿¥j•nµ" Mèy‘¾té–(¯‹¥ Œ†¹ÐŠö늩V”­“ýV+Ê>S’u‹”(¯&c8–ÎaqH2­(Mh‘vÏ‹ý]v÷BùžgŽ‚¥‹ÑJFgü™QºÞ‹uA+ÛŠi—dDy5sƒÆ¸G6Ménµ¢ì3%Y·H‰òGq†±Hµ¢ªNSªº/«M{ÚRþÅXa4¶dD‡ÆØ‡©iØ ™ÊR+ªê4¥×ìãX­‰òjæþ�3¸áËÒpŒZi•'6.KÁ‘côg†mÐXýì�ï… ÷l¹ÐJ+Jª»çÕçë Q¾-ý�3¸F�áž—b]€kPxñZQ½N¨ÖŠ~#¬hý­[}Nw»A+­h¿¥õnƒd?éG­¨ê4¥dî²Q+’–ªU—n»jÕ¥[­H*ú´âží£ ç§OZQ¶Nö[­´¢4¡º»jEiBÏ«Ï×—®ÖŠ~¬hõ9Ýí¢ü7‡ƒïoÐ8ƒ£3¬•Vy]–(\à·Æ ã05 ˆCaã |(À?­h¥Õv¿Þ�‹¯”&Twm{?jEU�¦Ô&õ&Ýåwþ†œà0Å l@ï#ƒŠñ¨VpéV+JJ².['wㇿdëän¼jEõ:¡Z+ÛŠi—dDyëûLKˆCcM.Âp „ÍÑ/Ö­(M¨í¾?,ˆòÊMAÐ8ƒÆ–¥VZåwþ†'Ã8LMÃüS8¾¸PàûÃ7…› gpk¬°VZm÷i{Ú~¥4¡çEúÒeë¤=mµ¢ýº¢Eª%?Ößh»OÛÓV+ªê4¥/«M{Úå_ŒÆaj6ZQU§)eŸ÷­(i©Zué¶«V]ºÕŠ’Š>mmÉ0ܳ}ä>¸5V„Ä¡°ñæé“VZi•¿ÝïµÊ“q¸ËF6.K‰�™qäý™±t6‡Ã23k¢À…áádfDñýÍ´Ê73#Nã&±�aX&"ÄAf†/ Ã1Â7¾6�™qäý™Ÿ´Êßî÷Zi•ŒÃ]6~¥ì3=�ÃK·H‰òÑ?2i‡3 |QŽ®Á‘côg† X¤ZQU§)-Ò»l$Ê—¥¿àÈ1ú3à žé‹V”}¦çqxé)Q¾âÞ=²Á"í`X&à‹ÂpŒ‡(¾¿ÑŠVÙF+­´Êßî_µÊé]6¢°qYúK„ÌŒ#ÇèÏŒ¥³A¸€8.X¤OÀff”> úÙß §(˜ý#C«ü`Fdy6³�(\`.�™‘TXFž ÷·„ �™q÷ý>F>J6OÀ.À°L&tÐ*_¤X:$Bdf4ÖDÁá" ßÈÌ8rŒþÌOZåo÷¯ZiµHï²ñ+ §qAm¥ §qAI¦Õúóæ.¿RšPÖ=/Ò¢¼šŒá ègo|/l …�ËÒ_´¢U6ÒŸ»L+Jªº6ùÇ}B”·ÉnDïŽG ˆCaã²ôô³7¾6°™V4œÆ-R­¨ªÓ”Úd7jEÃn Eªµû ý¹{^¤/DykFdÁ¿�C×àÈ1ú3kEûuE‹T+ú±¢oÝúóæ.)e^âìl8c bKpkGŽÑŸ…�ËÒ_¸ÐІÝ@I¦ »�ÚJ+Ze­´Ò*»_h•¿fÇj�~æþ&¢q7|YŽñ Ø7�™qÃ؈ª:X�?8#âP ¿îž€:\ Uîdfƒ¾ÀF–É.`ê'`ß 8Üð·>bi8F.:<ÀF–É.ž´ÊßîZiõš}«õWNã‚ÚJ+Nã‚’L+Nã‚©V”&”u¯ÙÇýš(ß–þ qègîoÐ8ƒ¾, Ǩ¥ U]›¼f‰ò6Ù�èÝñèCqˆ½¸áËÁyShEU�¦Ô&»Q+v-R­hØ ”dZѰ¨­´¢j OÕ§¿üÝÂ(¯fîoÐ8ƒª´¢}ëÚÝnC”¯X& Õðë¶AtZQ½N¨&ÊG|cãДþ¬­²�VZi•¿ÝÿÐ*Ï>ï7(l\–þ!3ãÈ1ú3cél. ‡ df4ÖD�/ Ã1ÂÈ̈âûøP@«œZ‰‡jøu÷¤UþvÿC+­²ÏûÍWv-R¢|‘bél�q8rŒþÌ‡ÂÆeé/ZQU§)-Ò»l$Ê—¥¿@fÆ‘côgÖŠÒ„êî9_¿¬6/ZQ½N¨&ÊGfØ>\d¶áŒ[cE8@ o´¢}ëÚÝnC”ÿ˜¢€Z�8Tï;ØÁ‰V”&TumR¥»Q+JJ²n[µZQU§)µÉn$Ê«ÒEFcKÖŠ~ Ôîv¢<ûiâP ¿î´ÒJ«üíþU«¼MêÍb�È™+ð™û,˰tFÐ;c8.](l8Cdf¬ÀÔOÀhCÏÐ*—™1{SÜzðá‘�DÈÌp“,'é 3ã`6"² t·°23~ÿþáúÔe '3h•¬DxÃ(¹LÁ—†‹'­ò·ûW­´j“z³ØÅp ¶ÒŠª!%¢|ÙV´¢4¡¶«µ¢ýšêîyh“zóBùo,è'c8¢x™¢VT¯j‰ò‘†ÿ˜8 8X‰(Ý­V´;mèyh“zóÒÕZѰ¨­´¢U¶ÑJ+­ò·ûW­ò6©7éŽ"K„ÌŒ}–ep“,'AénŸ€:âÖÊŒ6©7‹}‡ààdfƒƒ•o¾6\@«Ü‡23V`#" l€ÌŒß¿¸B–ÆSÏð(Ý-¼@fÆÒyÒ*»ÕJ«6©7éî+ §qAm¥¥ µ]­í×TwÏC›Ô›ÊcA?ÃAÅ˵¢ÝŠZ¢|d�á?&ŽÂV0Ûó¬íNzÚ¤Þ¼tµV4ìj+­h•m´ÒJ«üí>Õ*ÿ²Ú´§-n�Ž8òÑ™ z„ƒD4ÆÑž¶ÛlqX¤ÿp…86Þ` bK4|Ë2û­òï .†�ÞØ™‡©iØ<ûÏÉøúeµyÁÿù¿x€ø§#GÈì23[2´Êm„/ ûâ·ä ,½ëËò‚[cE8@ܰ 0,“ |¸ äFÜ#.ÂÞ0´Ê�î‘ ˆƒÌŒŸm6œáÈÌ8LMæƒ)l„/… ‡¥³A 23ÿh•ûGoK(‡‹0\™‡©iØ2Ã6X~´nЏ5V®ï'c¸ÐŠ~ ´þÖíÇÝ�­)ßÚ’áKþ¸À-9À6XÓJ«|d†mÐØ’a#|iظ€ÂÆ­´¢4¡ªk“Ý�­µ¢4¡$ë¶U« §qA‹T+ªê4¥6Ù�DùÈÞô3gÀ?mÎhlÉZѰh‘jEÕ@Ûí‚(ÅËÑ8ƒàpôÒÏZÑ�}ëÖÙ—í>¥¼2ì…ø�-¶Ap8zég­´Ê·¶døÒ°/.àŸ6JÄ_àã –lŽ6FëÄÁ=²¹5VX+­~Ë6¯ÙǯTÕiJÉ8Üe£V”´T­ºtÛU«.ÝjEIEŸ¶¶døÒ°/.àŸ6JìP8\Ü„[âàÙÜ+ +ÿï“V”&Tum²_­h8� Z¤ZQU§)µÉn$Ê¿x+hœÁ _–†cÔŠ†Ý@‹T+ª× ýi» Êïü à ¦å’ zY+ªúôñ“Vôc oÝ~Ü ÙZ+ªú´þ¤ýXÑú[÷[¶yÍ>RþÅ[Aã >}ügðiýôI+­òʇO÷ÈæÖXa4¶düþàŒh¥ »�’L+vµ•VTÕiJÙçýF+JZªV]ºíªU—nµ¢¤¢O+–É·jøu÷ôI+­òʰ†Gà[4¶d­´Zg_¶ûô+¥ U]›ÜÕ¯™V”&”dݶjµ¢á4.h‘jEU�¦Ô&»Q+v-R­¨èa»]å£x™"zW0g8ˆ±á½-ý¡d­èÇŠ¾u_V›lµ¢<3ÆØÛíB+­ò­-6°/.‡[c…!N+­öãnÈÖ_)M@IÖµ§í6[Q¾µ& ¥ëoà4¶dˆÃ­±ÂZQšPÝ]µ¢4¡çd|ý²Ú¼t5å§eá…QØxƒ[c…Ñ”þ¬Õ—Õfýyó•Ò„ª®MÚÓV+Nã‚’L+Nã‚©VTÕiJm²‰ò‘…�78LMþ( Ǩ¥ U]› §�V”&”dݶjµ¢ªNSj“ÝH”1V×ßq¸G­hØ ´Hµ¢a7P’iEõ:¡Z+ú±¢õ·îËj“­V”'6Þ€�q¶Áú›V”}¦$ë©V”&ÔVÝ÷‡Qîš&²@ÿJ×ß@n�ÖŠê$¡EÚµ•V”}¦$ë)Q>8„ l@’aZ^¸ÐJ«|×ßq¸ãPºþ·ÆŠpèÐÏÜß qGgX+­h8� Z¤ZQ½N¨ÖŠÆ¶¢EÚ%™V”&Tu©V”&Ôv ¢|ô�ŒÞMAà>zl8ãpްm¥¥ ÕÝ÷‡…VT¯Jµ¢ÝŠDùÈ ÛÀ'3\?|Çá"aøèmЊ†Ý@‹T+ú±¢õ·îËj³þ¼ÑJ«¼�š† n�á€Ã$(9FÈì<®¾ãpÆ¡tý ŽþÃGoC‡£{dXAánƒVZQšÐ"íÚÓv›­(¿s�Œ~öÆ÷Â&¢äFàÙ@ÚÓv›­´¢ì3%Y·H‰òEŠ¥³A"Ä!ðOA?{ã{aq¸5VX+­ò}èË©`ppÓyÿãqàÆ†ÌŒÃÔ4lÐ8as´Á‹uQŒ gØ€ÞG†Ì ­òÆš(X:#ÖÜú_öņ{¶�\S’u‹T+Ê>Óó8¼t‹”(ÿ�½›‚ÀDñý�VT' -Ò®­ˆò}è 9z7Áá‚ÍênÜÓŠ²Ïô</Ý"ÕŠ†Ý@m¥¥É~¥eŸ)ɺEJ”/Rø³·KgƒDˆCàŸÿèmé%Ã…áµZïîvÿ˜}¥a7P’iEÃn ¶ÒŠVÙF+­òÌgP°p/\h¥Õ—Õ&[­¾Ò°(É´¢a7P[iEU�¦”}Þo´¢¤¥jÕ¥Û®ZuéV+J*ú”Øx6Æ™ÿýI+­´ÊßîÿF«üŽ�Î\ÅfxÃ>j•¿Ýÿ�VZ-öwÙÝWJFú@”ßùŸ˜¢?” _†cÔ*_¿¬6_)éJ”†­›" opk¬0šÒŸµZ}¾~¥d¤+Q¾µ& ÷¼ë\ƒÂ‹GSú³VÙ:¹¯_)iéÚ.ºk»èªå6G¼Xù�‰CÏZeëänüðU«ÍênÜ£ìýDÙ:¹?ü%['wãU«q³jOÛ¯”Œôááa¡%#}X壸þqé{ÖjÜÔÕëW­(i³º÷߈òÚ°Ç�g‡©iØà8EÁ�Ñ—ì Zµ§í6[}¥û¿Í·¶d¦¦a£•V”­­þõþîÿ±HKEYTEST COM v€KEYTEST MAC w€ MAKE COM {€?MAKE DOC ‹ This is the release date of the disk. KEYTEST COM €v€KEYTEST MAC €w€ MAKE COM €{€?MAKE DOC €‹MAKE CQ €�€MAKEFILE €˜CEN-INP COM €™CEN-INP MQC €š€'ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååSCRPRINT.COM EF EC 1024 8 SCRPRINT.DOC 4E 38 2304 18 KEYTEST .COM 73 5D 384 3 KEYTEST .MAC 66 26 3456 27 MAKE .COM D0 11 16256 127 MAKE .DOC 54 A1 4864 38 MAKE .CQ 29 CA 8064 63 MAKEFILE. 8A 0D 256 2 CEN-INP .COM 91 96 768 6 CEN-INP .MQC 75 07 10112 79 $ Fog Library Disk FOG-CPM.161 Copyright (1987) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Graphics programs for the Osborne Executive as well as other CPM+ utilities. Filename Description -03-00 .87 This is the release date of the disk. -CPM161 .DOC This is the description of the disk contents. DRAW .COM 2D54 6K [Draw 1 of 6] This is a graphics program with a demo. The Demo works on the Osborne Executive. Requires some hardware mods to completely implement. DRAWDEMO.COM B88B 6K [Draw 2 of 6] HI-RES .DOC B7BB 28K [Draw 3 of 6] HI-RES .MAC 8F37 23K [Draw 4 of 6] GRPH-MOD.DRW 6DDC 23K [Draw 5 of 6] FONT .PIX 3B53 1K [Draw 6 of 6] PIXGEN .BAS E883 17K [Pixgen 1 of 3] Design graphics for the Epson printer on the Executive screen This comes with MBasic source code, so it could be modified for other hardware combinations. PIXGEN .DOC 15C5 6K [Pixgen 2 of 3] PIXRN .DAT 1D8D 1K [Pixgen 3 of 3] SCRPRINT.COM EFEC 1K [Screen Print 1 of 2] This is a memory resident screen print utility for the Osborne Executive. SCRPRINT.DOC 4E38 3K [Screen Print 2 of 2] KEYTEST .COM 735D 1K [Key Tester 1 of 2] This is a test program for the keyboard of the Executive. It comes with Assembler source. KEYTEST .MAC 6626 4K [Key Tester 2 of 2] MAKE .COM D011 16K [Make 1 of 4] This is similar to the Unix MAKE command. It is a type of submit file builder that follows a written script. Source code in (squeezed) Aztec 'C' has been included. MAKE .DOC 54A1 5K [Make 2 of 4] MAKE .CQ 29CA 8K [Make 3 of 4] MAKEFILE. 8A0D 1K [Make 4 of 4] CEN-INP .COM 9196 1K [Centronics Import 1 of 2] This program makes the Executive parallel port resemble a printer to another computer. This can be helpful for file transfers. CEN-INP .MQC 7507 10K [Centronics Import 2 of 2]  code in (squeezed) Aztec 'C' has been included. MAKE .DOC 54A1 5K [Make 2 of 4] MAKE .CQ 29CA 8K [Make 3 of 4] MAKEFILE. 8A0D 1K [Make 4 of 4] CEN-INP .COM 9196 1K [Centronics Import 1 of 2] This program makes the Executive parallel port resemble a printer to another compuååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå%ååååå&ååååå'ååååå