! cursor.tec ! [W [C [T ! save working registers ! UW ! save screen height (for page up/down) ! 0,8ET ! read without echo ! ::CUC ! remember cursor column ! @^UC~ ! Load into C.str ! ^Q< ! repeat for # chars on line ! ::C-QC; ! exit if .ge. column we want ! C ! advance ! > ! end repeat ! ::C-QC"N ! if .not. column we want ! R ! backup 1 char ! ' ! endif ! ~ ! end load into C.str ! < ! Loop ! W ! refresh screen ! ^TUT ! get char from kb into T.num ! QT-1; ! exit loop if char NOT function key (0) ! ::^T/256&255UT ! read the scan code, >>8, save 8 bits into T ! QT-71@O%Home,UpArrow,PageUp,,LeftArrow,,RightArrow,,End,DownArrow,PageDown% ! 71 72 74 75 77 79 80 81 ! 7^T ! if none of the above beep ! F< ! continue ! !Home! J ! jump to beginning of buffer ! 0UC ! remember new cursor column ! F< ! continue ! !UpArrow! -L ! backup a line ! MC ! Find Column (or come close) ! F< ! continue ! !PageUp! 0-QWL ! backup a page ! MC ! Find Column (or come close) ! F< ! continue ! !LeftArrow! :R$ ! backukp char, ignore end of buffer ! ::CUC ! remember new cursor column ! F< ! continue ! !RightArrow! :C$ ! advance char, ignore end of buffer ! ::CUC ! remember new cursor column ! F< ! continue ! !End! ZJ ! go to end of buffer ! ::CUC ! remember new cursor column ! F< ! continue ! !DownArrow! L ! advance a line ! MC ! Find Column (or come close) ! F< ! continue ! !PageDown! QWL ! advance a page ! MC ! Find Column (or come close) ! > ! End major loop ! QT ]T ]C ]W ! return character, restore registers !