þþø $X********************************$X** F A S T P R I N T **$X** By Bill Bodenstein **($X** 11/24/86 **2$X********************************<X;FX;This m/l routine will putP$X;characters directly into screenZ X;memory for faster printing.dX;Output sent to the screennX;editor is routed here.xX;‚X** EQUATES **ŒX;–‰RGTMARGINS ‡CURSCOLUªˆKEYPRESSü´ …NOKEYÿ¾ †BRKKEYÈ …BREAK€Ò …CLEAR}Ü †RETURN›æX;ð …ICCOMBú†ICBADRD†ICBAUXJ …FPFLGNˆPAUSEFLGO" „OPEN, …CLOSE 6 …INOUT @ ƒCIOVäJˆEHANDTABäTX;^†VKEYBDhX;rX;|†X;ŠINITIALIZEš ‰SETKEYINT¤Q†VKEYBD;;Change keybd®R>5‰NEWKEYINT;;interrupt¸F‡SETFLGS;;vector to goÂP‰OLDKEYINT;;to hereÌQ†VKEYBD;;beforeÖP‰OLDKEYINT;;handlingà=;;keypressêQ>4‰NEWKEYINTô P†VKEYBDþQ>5‰NEWKEYINTP†VKEYBD.X;& ‰COPYEHAND0%>;;Move E handler:ˆCOPYBYTEQˆEHANDTAB8;;tableDPˆNEWEHAND8;;from o.s. toN1;;Fast PrintX IˆCOPYBYTEbX;l ‰SETNEWPUTvQ>4ˆEPUTCHAR ;;Set new€PˆNEWEHAND;;put charŠQ>5ˆEPUTCHAR ;;vector”PˆNEWEHAND;;to F.P.žX;¨ŠSETNEWHAND²Q>4ˆNEWEHAND¼P!ÆQ>5ˆNEWEHANDÐP"ÚX;ä ˆCLOSESCRî$>;;Close editorø Q>…CLOSE P…ICCOM9  ƒCIOX;  ‡OPENSCR*Q>„OPEN;;Then open it4 P…ICCOM9> Q>…INOUTH P†ICBAUX9R Q>4„EDEV\ P†ICBADR9f Q>5„EDEVpP†ICBADR9z ƒCIO„X;Ž ‡SETFLGS˜Q>;;Set flags:¢P…FPFLG;;Fast Print on¬Q>¶PˆPAUSEFLG;;Pause onÀ:ÊX;ÔX;Þ„EDEV A‚E:AèX;òX;üX;"X;Receive a character being putX;to the screen editor.$X;. ˆEPUTCHAR8 …FPON?B%…FPFLG;;Go to o.s. ifLH„GR0?;;F.P. offV…GO.OS!‰PRINTCHAR`X;j„GR0?t%W;;Go to o.s. if~H…GO.OS;;not text modeˆX;’ †BREAK?œ%†BRKKEY;;Abort if¦F‹ABORTOUTPUT;;breaked°X;º †CTRL1?Ä%ÿ;;Loop if CTRL-1ÎH†BREAK?;;pressedØX;â ˆPAUSEON?ì %ˆPAUSEFLGöFFASTPRINTCHARX;  †CLEAR?R>…CLEAR;;If clear char,H‰COUNTLINE;;reset row(%>;;counter2 '‡ROWCNTR< F…GO.OSFX;P ‰COUNTLINEZR>†RETURN;;Keep count of #dF‡INCLINE;;of linesn$‡CURSCOL;;printedx(‰RGTMARGIN‚DFASTPRINTCHARŒ‡INCLINE#‡ROWCNTR–X; #X;Every 22nd line printed, pauseª"X;output and wait for keypress.´X;¾ ‰PAUSESCR?È ‰PRINTCHARÒ $‡ROWCNTRÜ(>æ D…LEAVEðX;ú †PUTMSG%>;;Print prompt'‡ROWCNTR;;message‡PUTBYTEQƒMSG8"P@^7,36)>4‡ROWCNTRƒMSG @ H‡PUTBYTEJX;TQ>…NOKEY;;Clear last^PˆKEYPRESS;;key pressedhX;rŠWAITFORKEY|RˆKEYPRESS;;Wait for user†HŠCONTOUTPUT;;to hit a key $†BRKKEYšHŠWAITFORKEY¤X;®‹ABORTOUTPUT¸%>…BREAK;; pressed '†BRKKEYÌ:ÖX;àŠCONTOUTPUTêPˆKEYPRESS;;Clear keypressô †CLRMSGþ%>;;Clear prompt C;;msg‡CLRBYTEP@^73&)>4‡ROWCNTRƒMSG 0 H‡CLRBYTE: …LEAVE:DX;NX;Put character directly inX#X;screen memory unless scrollingbX;or control character.lX;vFASTPRINTCHAR€ $‡CURSCOLŠ(‰RGTMARGIN”E‰PRINTCHARž>¨M>;;Is char a²R>};;non-control¼E‡PRINTIT;;char?ÆR> Ð E…PUTITÚR>ä D…PUTITîX;ø ‡PRINTITA  ‰PRINTCHAR?;;Print this char QˆEHANDTAB;;with o.s.* 5;;routine4QˆEHANDTAB>5HCR:\X;f …PUTITp ˆCONVCHARzR>`;;Convert to„6;;internalŽ A;;charset˜8¢ E‡PUTCHAR¬;¶S> ÀX;Ê ‡PUTCHARÔ%>;;Put char inÞP@^7;;curs pos inè;screen memò ‡MOVCURSü#‡CURSCOL;;Move cursor #c;;pointers to #^;;next column H‡PUTCURS$ #_. X;8 ‡PUTCURSB Q@^7;;Save char underL P];;cursor andV N>€;;inverse it` P@^7j X;t ‹EXITPUTCHAR:~ X;ˆ X;’ !X;Clear row counter for screenœ X;pause everytime a key is¦ X;pressed.° X;º ‰NEWKEYINTÄ 5Î Q>Ø P‡ROWCNTRâ 7ì !@‰OLDKEYINT:ö X; X; ƒMSG A‘ ¼ðòåóó áîù ëåù¾A ‡ROWCNTR  ˆNEWEHAND ( ‰OLDKEYINT 2 X;< …ENDFPF X;P X;Z àd  ŠINITIALIZE