þþR EIX;Atari Basic-NoCapsX;don lebow 5/87(X;2X;<X;Standard equates...FX;P†INVFLG¶;;inverse flagZ†SHFLOK¾;;caps lockd†HATABS;;handler tablen†INBUFFó;;lbuff pointerxX;‚X;NoCaps equates...ŒX;–…INDEXÔ;;z page pointer …QFLAGÖ;;quote status tempª†RETURN›;;RETURN key´†QUOTES";;asc "¾X;ÈX;ÒÜX;æX;init with USR (1536)ðX;úƒUSR7;;pop args-X;"!X;find E: vector table address,X;see MAPPING... pp. 81-826X;@ ‡INSTALLJ$> TX;^ †SEARCHhQ†HATABS9;;search defaultsrR> E;;here?|FˆTAKEOVER;;yup†0;;no 0;;tryš 0;;again¤I†SEARCH;;always®X;¸ X;got it!ÂX;Ì ˆTAKEOVERÖ&…HOLDX;;mark placeà!Q†HATABS9;;E: table lo byteêP‰OLD_TABLE;;to storageôP…INDEX;;to pointerþQ†HATABS9;;hi byte tooP‰OLD_TABLE P…INDEXX;&X;move vectors to NEWTABLE0X;:%>;;$10 bytesDX;N ˆDEFAULTSXQ@…INDEX7;;from oldbPˆNEWTABLE8;;to newl1v IˆDEFAULTS€X;Š(X;fill in JSR at start of new routine”X;ž#QˆNEWTABLE;;original GET BYTE¨,²O>;;adjust for offset¼P…MYGET;;lo byteÆQˆNEWTABLEÐO>ÚP…MYGET;;hiäX;îX;point to new GETøX;Q>4…MYGET PˆNEWTABLEQ>5…MYGET PˆNEWTABLE*X;4X;alter handler table>X;HQ>4ˆNEWTABLERP†HATABS9\Q>5ˆNEWTABLEfP†HATABS9pX;z:;;dot's it!„X;ŽX;NOCAPS mainline˜X;Custom GET BYTE routine¢X;¬ …MYGET¶ ÿÿ;;old GET BYTEÀ6;;save flagsÊ-Ô)>€;;typed BREAK?ÞH†ACTIVE;;noèX;òX;turn it OFF!üX; ‡DISABLE $…HOLDX;;fetch original index+Q‰OLD_TABLE;;restore old handler address$P†HATABS9.Q‰OLD_TABLE8P†HATABS9BM>LP†INVFLG;;no inverseVL>@`P†SHFLOK;;upper casejQ>†RETURN;;add crtX;~„EXITˆ8;;restore flags’ :;;byeœX;¦X;no break...proceed°X;º †ACTIVEÄR>†RETURN;;End of Line?ÎH„EXIT;;nope, returnØX;âX;ok...let's get to workìX;ö ˆLEGALIZEC;;save registers 5A5(@;;hold stack pointer2X;<X;stackflag set?FX;PQ‰STACKFLAGZH‡CHEKRUN;;yesd3&‰STACKFLAG;;no...this is 'immediate mode' valuenX;xX;program RUNning?‚X;Œ ‡CHEKRUN–(‰STACKFLAG HƒPAU;;if so, no actionªX;´%X;Blitz LBUFF! (INPUT line buffer)¾X;È ‡PROCEEDÒ%>Ü'…QFLAG;;clear quotesæ …CHEK1ðQ@†INBUFF7;;input characterúR>†RETURN;;Finished? FƒPAU;;yesR>†QUOTES;;delimiter?H…CHEK2;;no"Q…QFLAG;;yes,"N>;;flip status (1=in quotes)6 P…QFLAG@IˆNEXTCHAR;;move aheadJX;TX;check for inverse^X;h …CHEK2rR>€|D…CHEK3;;no inverse†$…QFLAG;;in quotes?H…CHEK3;;yup-no actionšM>;;else, strip inverse¤P@†INBUFF7;;and restore®X;¸X;check for lower caseÂX;Ì …CHEK3ÖR> aàDˆNEXTCHAR;;noê$…QFLAG;;in quotes?ôHˆNEXTCHAR;;yesþN> ;;convert to upper caseP@†INBUFF7;;put it backX;X;& ˆNEXTCHAR03:I…CHEK1;;to end of lbuffDX;NX;processing finishedXX;bƒPAUl7;;leave everythingv>€7;;as we found itŠ?” Q>†RETURNž8¨ :;;aloha²X;¼X;program registersÆX;Ð,‰STACKFLAG ;;immediate mode stack valueÚ…HOLDX ;;hatabs indexä#‰OLD_TABLE;;old table addressîX;øX;the new E: handler tableX; ˆNEWTABLEX; X;*4X;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV