ÿz :�Ù *************•:�Ù ** GRAFGEN **°:�Ù *************¸(:�ÙÒ2:�Ù by Wes Meierö<:�Ù 230 B Park Lake CircleF:�Ù Walnut Creek, CA 94598"P:�Ù>Z:�Ù June/July 1982Fd:�Ùrn:�Ù Requires Color Adapter, BASICA,œx:�Ù and, optionally, IBM or EpsonÈ‚:�Ù (MX-80 or MX-100) equipped withçŒ:�Ù the GRAFTRAX ROMs.ï–:�Ù÷ É ݪ  ( ´È ,¾¿ ,È­ AêZKÒ† GRID (¼),REDBOX (), YELLOWBOX ()QÜÀkæ— ÑGC(G,C)ç(Gê€)ëéC�ð— ÑEXC(C)çí(êC)žúQ$çÿ–("):�Ù Quote Marks¼:�Ù Set up graphics grid.Ï‚ Xç Ì I Ï ä° (X,)ê(X,H),ê"ƒþ,‚ Yç  Ì I Ï 6° (,Y)ê(H,Y),@ƒ3Jþ‰ (,)ê(H,H),GRID9TÀP^:�Ù Set up cursor.gh° (,)ê(,),,BF�rþ‰ (,)ê(,),REDBOX‡|À¦†:�Ù Set up graphics block.½�° (,)ê(,),,BFÚšþ‰ (,)ê(,),YELLOWBOXä¤� Â ¶¸:�Ù Set up Main Menu Key Vectors.%• É() � ”6Ì• É() � ÚGÖ• É() �  Xà• É() � \iê• É() � zzô• É() � è‹þ• É() � Êœ• É() � 8­• É() � V¿• É( ) � °Ñ&• É( ) � ²ã0• É( ) � õ:• É( ) � HD• É() � z%N:�Ù Turn on Key Trapping.4X‚ Xç Ì @bÉ (X) •FlƒLvŽn€:�Ù Main Menu Key Subroutines‰Š:�Ù F1 Sub. Set Block.Ÿ”Tçÿ—(ÑGC(GN,ROW))Ïž‹ T î ÑEXC(COL) Í Æ:�Ù Block already set.¨þˆ (COLëé,ROWëé),YELLOWBOX,Æ:�ÙSet block.²TçTéÑEXC(COL)<¼˜(ÑGC(GN,ROW)),T:�ÙPut it in memory.BÆŽ_Ð:�Ù F2 Sub. Reset block.uÚTçÿ—(ÑGC(GN,ROW))¬ä‹ (T î ÑEXC(COL))ç Í Æ:�Ù Cell not set. Return.åîþˆ (COLëé,ROWëé),YELLOWBOX:�Ù Reset Block (XOR).÷øTçTêÑEXC(COL)� ä:�Ù Put cursor there.: ‰ ¼:�ÙPut in mem. and return.U:�Ù F3 Sub. Fill grid.n Kçÿ:�Ù All dots on.~*‚ ROWç Ì ’4˜ ÑGC(GN,ROW),K˜>ƒ¢HŽ ¾ ¾R:�Ù F4 Sub. Clear grid.×\Kç:�Ù All dots off.öf‰ *:�Ù Use fill routine.p:�Ù F5 Sub. Fill Current column.+z‚ ROWç Ì A„Pçÿ—(ÑGC(GN,ROW))]Ž‹ (P î ÑEXC(COL)) Í ¬o˜PçPéÑEXC(COL)ƒ¢˜ ÑGC(GN,ROW),P‰¬ƒ“¶‰ HµÀ:�Ù F7 Sub. Fill Current Row.Êʘ ÑGC(GN,ROW),ÿÔÔ‰ HúÞ:�Ù F6 Sub. Reset Current Column. è‚ ROWç Ì !òPçÿ— (ÑGC(GN,ROW))?ü‹ (P î ÑEXC(COL))ç Í QPçPêÑEXC(COL)e˜ ÑGC(GN,ROW),Pkƒu$‰ H˜.:�Ù F8 Sub. Reset Current Row.¬8˜ ÑGC(GN,ROW),¶B‰ HØL:�Ù F9 Sub. Save Set on Disk.ÞVÀé`Ê  ,j… "Enter Filespec ";FS$ t‹ ÿ’(FS$)æ Í Å:‰ VE~‘"Is "Q$FS$Q$" correct (Y/N) ?";²ˆA$çÞ:‹ A$ç"" Í ˆ :¡ ‹ A$ç"Y" ï A$ç"y" ï A$çÿ–( ) Í ’ :¡ ‹ A$ç"N" ï A$ç"n" ï A$ç"0" Í V :¡ Å:‰ ˆÂ’ FS$,,ÌœŽ ¦ ô¦:�Ù F10 Sub. Select Alternate Menu.þ°Ž ĺ:�Ù Set up Alternate Menu.8İ (,d)ê(>,£),,BFDÎÊ , ZØ‘"Alternate Menu"ŒâÊ ,:‘"F1 Main Menu. F2 Display Set."¾ìÊ ,:‘"F3 Print Set. F4 End Program."âö:�Ù Set up Alternate Menu Keys.ô• É () � d • É () � ‚• É () � ,*• É () � XF(:�Ù Turn off Keys 5-14.U2‚ Xç Ì a<É (X) ÝgFƒ¦P‰ P:�Ù Pressing the proper "F" key will break this loop.ËZ:�Ù F1 Sub. Return to Main Menu.òd� Â:�Ù Restore Main Key Vectors.ünŽ < x:�Ù F2 Sub. Display Set on CRT.&‚À:Œ‚ Xç€ Ì ÿ Ï H–‚ Yç Ì [ ‹ XéYæÿ Í ´�ª‘"#";:‘ × "### = "éQ$é"!"éQ$é" ";XéY;ÿ–(XéY);•´ƒ:‘§¾‹ Xèæ¿ Í æËÈ‘"Press any key to continue..."ÔÒA$çÞåÜ‹ A$ç""Í Òëæƒð‘"Press any key to continue..."úA$çÞ*‹ A$ç"" Í ú0À:‰ dB":�Ùt,:�Ù F3 Sub. Display Character Set on Printer.œ6:�Ù This routine will function onlyÈ@:�Ù with an IBM or EPSON (MX-80 or 100)ôJ:�Ù equipped with the GRAFTRAX graphicsT:�Ù ROMS!!.^:�Ù Also, use this routine only if youYh:�Ù have IBM DOS Version 1.10. Versionr:�Ù 1.00 has a bug in its printer”|:�Ù I/O routine.¶†� ÿ–()"@":�Ù Reset Printer.Ê�‚ Xç€ Ì ÿ Ï Úš ‚ Yç Ì ñ¤ ‹ YéXæþ Í  ® � "#";:� × "### = "éQ$;XéY;4 ¸ � ÿ–()"K"ÿ–()ÿ–();F  ‚ Zç Ì W Ì BYTEçk Ö ‚ Bç Ì ¨ à ‹ ÿ—(ÑGC(XéY,B)) î ÑEXC(Z) Í BYTEçBYTE é ÑEXC(B)¶ ê ƒ BÌ ô � ÿ–(BYTE);Ø þ ƒ Zë  � Q$ÿ˜();õ  ƒ Yý  �!&ƒ X!0� ÿ–( )!:À"!D‰ d?!N:�Ù F4 Sub. End Program.E!XÀO!bŽ ln!l:�Ù Turn Key Trapping off.}!v‚ Xç Ì ‰!€É (X) Ý�!Šƒ•!”�½!ž:�Ù Cursor Positioning Subroutines.Ù!¨:�Ù F11 Sub. Cursor Up."²‹ ROWêè Í Ž:�Ù At top of grid already."¼� ä:�ÙXOR Cursor.5"ÆROWçROWê:�ÙGo Up.`"Ð:�Ù This Sub. erases cursor, if there,‚"Ú:�Ù or sets it, if not there.¢"äþˆ (COLëé,ROWëé),REDBOX­"îXçÿˆëá"øþ“"MBMSL64O=X;T255A":�Ù Just for the fun of it.ç"Ž# :�Ù F12 Sub. Cursor Left.8#‹ COLêè Í Ž:�Ù Already at left side of grid.Y# � ä:�Ù XOR Current cursor.s#*COLçCOLê:�Ù Go left.Œ#4‰ ä:�Ù Set Cursor.«#>:�Ù F13 Sub. Cursor Right.½#H‹ COLéæ Í ŽÇ#R� äÕ#\COLçCOLéß#f‰ äý#p:�Ù F14 Sub. Cursor Down.$z‹ ROWéæ Í Ž$„� ä'$ŽROWçROWé1$˜‰ ä[$¢:�ÙPoint graphics vector to area just�$¬:�Ùabove BASICA in a 128K system.¨$¶— SEGç:�Ù Point to Bottom of RAM.³$À˜ |,¾$ʘ },Ñ$Ô˜ ~,ÿ—( )éå$Þ˜ ,ÿ—( )é+%è:�ÙThe vector at 0000:0510H-0511H points to the start of BASICA's?%ò:�Ù64K segment.G%ü:�Ùr% :�ÙPoint to Graphics table 64K+1 bytes”% :�Ùabove beginning of BASICA.°% — SEGçëÿ—()éÿ—(~)¶%$ ÀÁ%. Ê  ,ï%8 ‘"Do you want to load a previously saved" &B ‘"character set (Y/N) ?"#&L A$çÞ:‹ A$ç"" Í L H&V ‹ A$ç"N" ï A$ç"n" ï A$ç"0" Í ¦ w&` ‹ A$èæÿ–( ) î A$èæ"Y" î A$èæ"y" Í Å:‰ L “&j … "Enter filespec ";FS$È&t • § ‰ ˆ :�ÙTrap "File not found" error. ERR=53.Ò&~ ‰ œ 'ˆ ‹ Õç5 Í ‘ Q$FS$Q$" was not found.":Å:¨ j -'’ • § ‰ :�Ù Crash if any other error.9'œ à FS$,?'¦ ÀJ'° Ê  ,u'º ‘"Last Character number generated ="GN~'Ä XçGN 'Î ‘ "Enter Character number to"È'Ø … "generate (128-255)(EN=Next) ";GNÜ'â ‹ GNç Í GNçXéð'ì ‹ GNè€ Í GNç€(ö ‹ GNæÿ Í GNçÿ( ‹ GNèæÿ Í 2 ( ‘K( ‘"CHR$(255) is always null and cannot be"\( ‘"modified."f(( ‰ Î l(2 Àw(< Ê ,’(F ° (,d)ê(>,£),,BF¿(P Ê ,:‘"Use Arrow Keys to move Cursor."í(Z Ê ,:‘"F1 Sets Dot. F2 Resets Dot.")d Ê ,:‘"F3 Fills Grid. F4 Clears Grid."J)n Ê ,:‘"F5 Fills Col. F6 Clears Col."x)x Ê ,:‘"F7 Fills Row. F8 Clears Row."ª)‚ Ê ,:‘"F9 Saves Set. F10 Alternate Menu."Ù)Œ Ê ,:‘"Press Enter to Accept Character."ó)– ° (,c)ê(?,¤),,B*  ‚ Xç Ì *ª °(I,Xëé)ê(˜,Xëé),$*´ ƒX*¾ þˆ (,),GRID,Æ:�Ù Overwrite the existing grid.h*È ‚ ROWç Ì €*Ò Pçÿ—(ÑGC(GN,ROW))§*Ü ‹ Pç Í  :�Ù Skip a blank row.¹*æ ‚ COLç Ì ÷*ð ‹ P î ÑEXC(COL) Í � ä:þˆ(COLëé,ROWëé),YELLOWBOXÿ*ú ƒ+ ƒ+ ROWç+ COLç,+" þˆ(,),REDBOX6+, ‰ h @+6 ROWçJ+@ COLç\+J þˆ (,),GRIDp+T þˆ (,),REDBOX�+^ � *** Main Strobe Loop ***š+h Ê  ,Ç+r ‘"CHR$("ÿ‚(ÿ“(GN),)") = "Q$ÿ–(GN)Q$" ";÷+| ‘"STRING$(5,"ÿ‚(ÿ“(GN),)") = "Q$Ö(,GN)Q$;,† A$çÞA,� ‹ A$çÿ–( ) Í ¦ :�Ù "Enter" key? Get a new Character if so.O,š ‚ Xç Ì \,¤ Ê Xé,ˆ,® ‘"Byte"X"= "ÿ‚("0"éÿš(ÿ—(ÑGC(GN,X))),)Ž,¸ ƒ˜, ‰ h ®,Ì � :�Ù of program.