þþödX; SAVE#D:SPYPT6.M65nX;xX;------------------;‚X; Secret Agent ;ŒX; By: Barry Kolbe ;–X; Screen Handlers ; X; (c) 1988 ;ªX;------------------;´X;¾!X;Graphics 0 display list withÈX;a Status Line at the topÒX;Ü…GDLST p=p=`=Bæ …PLACE;;status lineð =Bú ƒGR0 ==== ==== ====" ====, ==A6 …GDLST@X;J X;Positions of the Graphics 0TX;lines in increments of 40^X;used by the Print routinehX;rX;Low bytes|X;†‚GL =(=P=x=  È=ð==@=hš =¸=à==0¤ X=€=¨=Ю ø= =H=p¸X;ÂX;High bytesÌX;Ö‚GH ====à ====ê ====ô ===þ ===X;X;The Status LineX;&…PLACE A A0 A SA: A‰CORE: 0 ADX;NX;Tables for converting fromXX;ASCII to Internal CodebX;lƒA2I @== =`vX;€X;Special Keys CodesŠX;”X;a-z :The Raw Key CodesžX;from 764 (CH = $2FC)¨X;²„KEYC ?===:=*¼ 8===9= =Æ ==%=#=Ð  =/=(=>=-Ú  ==.==+ä îX;øX;SPACE/./,/DEL-Bsp/EOLX; „OKEY !="= =4=  v X;*X;The ASCII equivalents4X;>„ASCK  =.=,=~=›H }RX;\„JIFF5;;just waitfQ>;;a jiffyp P†RTCLOKz†WAITJ1Q†RTCLOK„ F†WAITJ1Ž7˜:¢X;¬†CLRGR0%>;;clear the¶ C;;screenÀ…CLRSCPƒGR08Ê PƒGR08Ô PƒGR08Þ PƒGR08è3ò H…CLRSCü „HOME;;reset cursor:X;X;Get Screen Position$X;from the GL/GH tables.X;8ˆPOSITION%†ROWCRSBQ‚GL8;;get low offsetL,VO>4ƒGR0;;add to start`P‚SL;;of screenjQ‚GH8;;memoryt O>5ƒGR0~ P‚SLˆ:’X;œX;Scroll Screen Memory Up¦ X;One Line°X;º†SCROLLQ†ROWCRS;;need toÄR>†BOTLIN;:scroll?ÎDˆSCMOVEDN;;noØQ>4ƒGR0;;top lineâPƒSCRì Q>5ƒGR0ö PƒSCRQ>4ƒGR0( ;;next line  P„SCR2Q>5ƒGR0(  P„SCR2($>;;counter2†SCMOVE%>';;move 40 bytes<‡SCMOVITQ@„SCR27;;upF P@ƒSCR7P 1;;done?ZI‡SCMOVIT;;nodQ„SCR2;;reset pntrsn PƒSCRx Q„SCR2‚PƒSCRŒ,;;add 40 to–O>(;;from pntr  P„SCR2ª Q„SCR2´O>¾ P„SCR2È2Ò(>;;23 lines?ÜD†SCMOVE;;noæ"†ROWCRS;;cursor up 1ç "„ROWXð!†SCROLL;;need more?úˆSCMOVEDN:;;doneX;#X;Convert ASCII to Internal CodeX;"†ASC2IC …BITER, LƒA2I96$‚X2@:JX;T…BITER5;;save byte^ U?;;X16hU?rU?|U?†M>;;type of char&‚X2;;save xš >;;offset¤ 7;;restore®M>Ÿ¸:ÂX;ÌX;Get a KeyÖX;à†INPKEYQ‚CH;;get keyêR>ÿ;;none pressedôF†INPKEY;;yupþ$>ÿ;;reset&‚CH $>;;a-z?ƒIN1R„KEYC9& FƒIN2;;yes00:IƒIN1D$>;;special keyNƒIN3R„OKEY9X FƒIN4;;yesb0lIƒIN3vG‚K2€ƒIN4Q„ASCK9;;get asciiŠ!…CLKER;;make sound”ƒIN7!†INPKEY;;get keyžX;¨ƒIN2A;;see if caps² ,;;needed¼ O„CAPSÆ !…CLKERÐX;Ú‚K2R><;;caps key?ä HƒIN7;;noî Q„CAPSøR>a;;lower? FƒIN5;;yes  Q>a;;flipƒIN6P„CAPS;;switch it !†INPKEY;;get a key*ƒIN5Q>A;;upper case4HƒIN6>X;H…CLKER%>;;make a keyRƒCK1'†CONSOL;;click\$>fƒCK20pHƒCK2z1„IƒCK1Ž:˜X;¢X;print with word wrap¬X;uses PBUF as output¶X;Enter with X, Y as LowÀX;and High byte of AddressÊX;Ô†PRINTE&‚ML;;X =LowÞ'‚ML;;Y = Highè%>;;if 1st byteòQ@‚ML7;;is $FF noüR>ÿ;;message,so HƒPE7;;quit : ƒPE7 ˆPOSITION;;get screen$ %>;;position-set. '„EOLF;;end flag8 ƒPE3Q@‚ML7;;get byteB P„PBUF8;;put in bufferL 3V R>;;end of msg?` HƒPE1;;noj #„EOLF;;set flagt H„SPLP~ ƒPE1)>…ENLIN;;at end ofˆ HƒPE3;;physical line?’ 1œ „SPLPQ@‚ML7;;find space¦ R> ;;for word wrap° F„GTSPº 1;;back upÄ H„SPLPÎ %>…ENLINØ „GTSP3;;breakâ „SPCE'‚Y2;;save positionì Q>;;set 0 asö P„PBUF8;;end flag C;;move pointer ,;;in message O‚ML P‚ML( DƒPE22 #‚ML< ƒPE2%>;;left marginF ƒPE5Q„PBUF8;;get byteP FƒPE6;;end if 0Z  †ASC2IC;;convertd P@‚SL7;;on screenn  „JIFF;;wait a jiffx 3;;next char‚ HƒPE5Œ ƒPE6 ‚CR;;linefeed– Q„EOLF;;end?  H„EDON;;yesª !ƒPE7;;do more´ „EDON †SCROLL;;see if scroll¾ :;;doneÈ X;Ò X;Force a Carriage ReturnÜ X;æ ‚CR#†ROWCRS;;next lineð Q>;;left marginú P†COLCRS : X; X;Input Routine" X;, …INPUT ˆPOSITION;;get screen6 %†COLCRS;;position@ 1;;back upJ Q>;;' > ' ;forT P@‚SL7;;prompt^ $>;;inputh &‚X1;;counterr Q>P;;max input| P†MAXLEN† Q†COLCRS;;save current P„COLX;;position forš Q†ROWCRS;;del-bck spc¤ P„ROWX® ˆPOSITION¸  †SHOCRS;;show the cursor X;Ì †INLOOP †INPKEY;;loop untilÖ R>ƒEOL;;end of lineà F†INDONEê R>~;;DEL BCK SPCô F†DELETEþ R>};;clear screen F†SCLEAR $‚X1;;at end? (†MAXLEN& E†INLOOP;;yes-get EOL0 5;;save char:  †PUTCHR;;onto screenD $‚X1N 7;;get it backX R>`;;lower case?b D„NOLO;;nol ;v S> ;;make it upper€ „NOLOP„IBUF9;;in inputŠ #‚X1;;buffer” !†INLOOP;;more?ž X;¨ †INDONE$‚X1;;all done² P„IBUF9¼  †ZAPCRS;;erase cursorÆ  ‚CRÐ  †SCROLL;;need toÚ :;;scroll?ä X;î X;Clear the Screenø X; †SCLEAR †CLRGR0 !…INPUT X; X;Delete a character* X;4 †DELETEQ†COLCRS;;was there> R„COLX;;any input?H H„DDEL;;yesR Q†ROWCRS;;same line?\ R„ROWXf F…NODEL;;yes no DELp  †ZAPCRS;;erase cursorz "†ROWCRS;;up 1 line„ Q>';;right edgeŽ P†COLCRS˜ !ƒDHI;;show cursor¢ X;¬ „DDEL †ZAPCRS;;erase cursor¶ "†COLCRS;;back upÀ ƒDHI ˆPOSITION;;new positionÊ Q>?;;show cursorÔ %†COLCRSÞ P@‚SL7è "‚X1;;1 less charò …NODEL!†INLOOP;;get inputü X;X;Erase the cursorX;†ZAPCRS ˆPOSITION$ %†COLCRS.Q>8 P@‚SL7B:LX;V"X;Put a Character on the Screen`X;j†PUTCHR5;;save itt ˆPOSITION;;get position~7;;retrieve itˆ †ASC2IC;;to Int Code’%†COLCRS;;get columnœP@‚SL7;;on screen¦#†COLCRS;;next column° Q†COLCRSºR>(;;at right edge?Ä HƒPCO;;noÎQ>;;yes-resetØ P†COLCRSâ#†ROWCRS;;next lineì †SCROLL;;scroll?öƒPCO †SHOCRS;;show cursor: X;X;Show the Underline as a X;cursor(X;2†SHOCRS ˆPOSITION<Q>?F %†COLCRSP P@‚SL7Z: