;> Screen
REDRAW AND R7,UPDATE,#ABORT ;seperate out the abortable bit
 BIC UPDATE,UPDATE,#ABORT
 LDRB R0,[ARGP,#OLDUPDATE]
 CMP UPDATE,R0
 MOVCC UPDATE,R0
 MOV R0,#NONE
 STRB R0,[ARGP,#OLDUPDATE]
 TEQ UPDATE,#BOTHSCREEN
 BEQ REDR1A
 TEQ UPDATE,#THELOT
 BNE REDR1
 LDRB R6,[ARGP,#TUTMODE]
 TEQ R6,#"0"
 TEQNE R6,#"3"
 TEQNE R6,#"E"
 BEQ REDR1A
 SWI WRITEI+26
 STMFD SP!,{R14}
 BL SELREV
 TEQ R6,#"T"
 BNE NOTREDRAWT
 BL VSTRNG
 = "Twin 'T' mode. Shift f5 to change mode. Twin is at &"
 = 0
 BL SETSTART
 MOV R8,R1
 BL WORDHX
 BL VSTRNG
 [ WIDTH=80
 = ". ",0
 |
 = ". You are using an Arthur 132 column mode.            ",0
 ]
 B REDRAWTIME
NOTREDRAWT TEQ R6,#"D"
 BEQ BANNERD
 BL VSTRNG
 [ WIDTH=132
 ASSERT OSTYPE=1
 [ A500=1
 = "末c/s-F1末沫末c/s-F2末沫末膨/s-F3末沫末膨/s-F4末磨  末膨/s-F5末沫末c/s-F6末沫末c/s-F7末沫末c/s-F8末磨  末c/s-F9末沫末膨/s-F10末 "
 = " Undelete   Load via    Append                      Pop        Push                Auto task      Task     Connect to  "
 = " Character   *path      to file                    Buffer     Buffer                Bottom       Bottom      buffer    "
 = "尠膨tl-F1末漫末ctl-F2末漫末膨tl-F3末漫末膨tl-F4末慢  尠末ctl-F5末漫末ctl-F6末漫末ctl-F7末漫末ctl-F8末慢  尠膨tl-F9末漫末膨tl-F10末 "
 = "  Expand     Close     Next error  Insert           Enter     Format                Change       Task        Toggle    "
 = "  Window     Window       Line     Structures     Character  Paragraph              LF韻R       Status      Window    "
 = "尠shift-F1末泱shift-F2末泱穆hift-F3末泱穆hift-F4末  尠穆hift-F5末泱shift-F6末泱shift-F7末泱shift-F8末  尠shift-F9末泱穆hift-F10慢 "
 = " Insert or   Insert      Change      Exit to     Set screen    Clear     Marked     Marked       Clear       Display   "
 = " Overtype     file       Margins    Language        Mode       Marks      Move      Delete       text        NewLines  "
 = "尠末芳1末末漫末末F2末末漫末末芳3末末漫末末芳4末末慢  尠末末F5末末漫末末F6末末漫末末F7末末漫末末F8末末慢  尠末芳9末末漫末末芳10末末 "
 = "  Command     Load        Save       Find &        Global      Mark      Marked      Print       Bytes      Goto line  "
 = "   line       file        file       Replace       Replace     Place      Copy       text        free        or mark   "
 = "ｖ末末末末末椁末末末末末椁末末末末末満末末末末末末  ｖ末末末末末満末末末末末満末末末末末満末末末末末麻  ｖ末末末末末椁末末末末末麻 "
 |
 = "末c/s-F1末蘭膨/s-F2末蘭膨/s-F3末蘭膨/s-F4磨末c/s-F5末蘭膨/s-F6末蘭膨/s-F7末蘭膨/s-F8磨末c/s-F9末蘭膨/s-F10沫末c/s-F11沫膨/s-F12磨"
 [ OLDMAIL<>2
 = "           Load via   Append           劔 Pop       Push        Get    僊uto Task劔 Task     僂onnect to                   "
 = "            *path     to file          劔 Buffer    Buffer      Mail   傳ottom   劔 Bottom    Buffer                      "
 = "尠膨tl-F1末泱膨tl-F2末泱膨tl-F3末泱膨tl-F4慢尠膨tl-F5末泱膨tl-F6末泱膨tl-F7末泱膨tl-F8慢尠膨tl-F9末泱膨tl-F10漫末ctl-F11漫膨tl-F12慢"
 = " Expand    Close    儂ext error僮nsert   劔Enter     僥ormat       Send    Change  劔  Task     Toggle    Pop       Close   "
 = " Window    Window     Line    儡truct   劔Character 儕aragraph    Mail    LF韻R  劔  Status   Window    Buffer    Window  "
 |
 = "           Load via   Append           劔 Pop       Push               僊uto Task劔 Task     僂onnect to                   "
 = "            *path     to file          劔 Buffer    Buffer             傳ottom   劔 Bottom    Buffer                      "
 = "尠膨tl-F1末泱膨tl-F2末泱膨tl-F3末泱膨tl-F4慢尠膨tl-F5末泱膨tl-F6末泱膨tl-F7末泱膨tl-F8慢尠膨tl-F9末泱膨tl-F10漫末ctl-F11漫膨tl-F12慢"
 = " Expand    Close    儂ext Error僮nsert   劔Enter     僥ormat               Change  劔  Task     Toggle    Pop       Close   "
 = " Window    Window     Line    儡tructure劔Character 儕aragraph            LF韻R  劔  Status   Window    Buffer    Window  "
 ]
 = "尠穆hf-F1末泱穆hf-F2末泱穆hf-F3末泱穆hf-F4慢尠穆hf-F5末泱穆hf-F6末泱穆hf-F7末泱穆hf-F8慢尠穆hf-F9末泱穆hf-F10漫末shf-F11漫穆hf-F12慢"
 = "僮nsert or  Insert    Change   僞xit to  劔Set Screen  Clear    Marked    Marked  劔 Clear     Display   Push      Expand  "
 = "儖vertype    file     Margins  儉anguage 劔  Mode      Marks    Move      Delete  劔 Text      NewLines  Buffer    Window  "
 = "尠末芳1末末泱末芳2末末泱末芳3末末泱末芳4末慢尠末芳5末末泱末芳6末末泱末芳7末末泱末F8末末撥末末F9末末泱末芳10末漫末末F11末漫末末F12末"
 = "* Command   Load      Save    僥ind &   劔 Global     Mark     Marked    Print   劔 Bytes    僭oto Line 僂onnect to Toggle  "
 = "  Line      File      File    儚eplace  劔 Replace    Place    Copy      Text    劔 Free      or Mark   Buffer    Window  "
 = "ｖ末末末末満末末末末末椁末末末末満末末末末麻ｖ末末末末満末末末末末椁末末末末満末末末末麻ｖ末末末末満末末末末末椁末末末末満末末末末麻"
 ]
 |
 [ OSTYPE=1
 = "c/s-F1沫c/s-F2沫c/s-F3沫c/s-F4沫c/s-F5沫c/s-F6沫c/s-F7沫c/s-F8沫c/s-F9幼/s-F10"
 [ OLDMAIL<>2
 = " Undel 儉oad vi僊ppend         Pop    Push   Get   僊uto   儺ask  僂onnect"
 = " Char   *path 冲o file        Buffer Buffer Mail  儺askBot傳ottom冲o Buff"
 = "嫩tl-F1漫ctl-F2漫ctl-F3漫ctl-F4漫ctl-F5漫ctl-F6漫ctl-F7漫ctl-F8漫ctl-F9歡tl-F10"
 = "僞xpand 僂lose   Next  僮nsert  Enter 僥ormat  Send  僂hange 儺ask  儺oggle "
 = "儻indow 儻indow  Line  儡tructs Char  儕ara    Mail  儉F韻R 儡tatus儻indow "
 |
 = "       儉oad vi僊ppend         Pop    Push         僊uto   儺ask  僂onnect"
 = "        *path 冲o file        Buffer Buffer       儺askBot傳ottom冲o Buff"
 = "嫩tl-F1漫ctl-F2漫ctl-F3漫ctl-F4漫ctl-F5漫ctl-F6漫ctl-F7漫ctl-F8漫ctl-F9歡tl-F10"
 = "僞xpand 僂lose   Next  僮nsert  Enter 僥ormat        僂hange 儺ask  儺oggle "
 = "儻indow 儻indow  Line  儡tructs Char  儕ara          儉F韻R 儡tatus儻indow "
 ]
 = "孕hf-F1漫shf-F2漫shf-F3漫shf-F4漫shf-F5漫shf-F6漫shf-F7漫shf-F8漫shf-F9殱hf-F10"
 = "僮nsert/僮nsert 僂hange 僞xit to Set    Clear 儁arked 儁arked 僂lear 僖isplay"
 = " Over   file  儁argins儉anguag Mode   Marks 儁ove   僖elete 冲ext  儂ewLine"
 = "尠芳1末漫末F2末漫末F3末漫末F4末漫末F5末漫末F6末漫末F7末漫末F8末漫末F9末泱芳10末"
 = "僂ommand Load   Save  僥ind & 僭lobal  Mark  儁arked  Print 傳ytes  Goto  "
 = "儉ine  * File   File  儚eplace儚eplace Place 僂opy    Text  僥ree   Line  "
 = "ｖ末末末椁末末末椁末末末椁末末末椁末末末椁末末末椁末末末椁末末末椁末末満末末末麻"
 ]
 [ OSTYPE=0
 = "ｰc/s-f0ｦｧc/s-f1ｦｧc/s-f2ｦｧc/s-f3ｦｧc/s-f4ｦｧc/s-f5ｦｧc/s-f6ｦｧc/s-f7ｦｧc/s-f8ｦｧc/s-f9ｱ"
 = "ｩConnectｩ Undel ｩLoad viｩAppend ｩ       ｩ Pop   ｩ Push  ｩ Get   ｩAuto   ｩTask  ｩ"
 = "ｩto buffｩ Char  ｩ *path ｩto fileｩ       ｩ Bufferｩ Bufferｩ Mail  ｩTaskBotｩBottomｩ"
 = "ｫctl-f0ｦｯctl-f1ｦｯctl-f2ｦｯctl-f3ｦｯctl-f4ｦｯctl-f5ｦｯctl-f6ｦｯctl-f7ｦｯctl-f8ｦｯctl-f9ｭ"
 = "ｩToggle ｩExpand ｩClose  ｩ Next  ｩInsert ｩ Enter ｩFormat ｩ Send  ｩChange ｩTask  ｩ"
 = "ｩWindow ｩWindow ｩWindow ｩ Line  ｩStructsｩ Char  ｩPara   ｩ Mail  ｩLF韻R ｩStatusｩ"
 = "ｫshf-f0ｦｯshf-f1ｦｯshf-f2ｦｯshf-f3ｦｯshf-f4ｦｯshf-f5ｦｯshf-f6ｦｯshf-f7ｦｯshf-f8ｦｯshf-f9ｭ"
 = "ｩDisplayｩInsert/ｩInsert ｩChange ｩExit toｩ Set   ｩ Clear ｩMarked ｩMarked ｩClear ｩ"
 = "ｩNewLineｩ Over  ｩ file  ｩMarginsｩLanguagｩ Mode  ｩ Marks ｩMove   ｩDelete ｩtext  ｩ"
 = "ｫｦｦf0ｦｦｦｯｦｦf1ｦｦｦｯｦｦf2ｦｦｦｯｦｦf3ｦｦｦｯｦｦf4ｦｦｦｯｦｦf5ｦｦｦｯｦｦf6ｦｦｦｯｦｦf7ｦｦｦｯｦｦf8ｦｦｦｯｦｦf9ｦｦｭ"
 = "ｩ Goto  ｩCommandｩ Load  ｩ Save  ｩFind & ｩGlobal ｩ Mark  ｩMarked ｩ Print ｩBytes ｩ"
 = "ｩ line  ｩline   ｩ file  ｩ file  ｩReplaceｩReplaceｩ Place ｩCopy   ｩ text  ｩfree  ｩ"
 = "ｲｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｳ"
 ]
 [ OSTYPE>=2
 = "ｰc/s-F1ｦｧc/s-F2ｦｧc/s-F3ｦｧc/s-F4ｦｧc/s-F5ｦｧc/s-F6ｦｧc/s-F7ｦｧc/s-F8ｦｧc/s-F9ｧc/s-F10ｱ"
 [ OLDMAIL<>2
 = "ｩ Undel ｩLoad viｩAppend ｩ       ｩ Pop   ｩ Push  ｩ Get   ｩAuto   ｩTask  ｩConnectｩ"
 = "ｩ Char  ｩ *path ｩto fileｩ       ｩ Bufferｩ Bufferｩ Mail  ｩTaskBotｩBottomｩto buffｩ"
 = "ｫctl-F1ｦｯctl-F2ｦｯctl-F3ｦｯctl-F4ｦｯctl-F5ｦｯctl-F6ｦｯctl-F7ｦｯctl-F8ｦｯctl-F9ｯctl-F10ｭ"
 = "ｩExpand ｩClose  ｩ Next  ｩInsert ｩ Enter ｩFormat ｩ Send  ｩChange ｩTask  ｩToggle ｩ"
 = "ｩWindow ｩWindow ｩ Line  ｩStructsｩ Char  ｩPara   ｩ Mail  ｩLF韻R ｩStatusｩWindow ｩ"
 |
 = "ｩ       ｩLoad viｩAppend ｩ       ｩ Pop   ｩ Push  ｩ       ｩAuto   ｩTask  ｩConnectｩ"
 = "ｩ       ｩ *path ｩto fileｩ       ｩ Bufferｩ Bufferｩ       ｩTaskBotｩBottomｩto buffｩ"
 = "ｫctl-F1ｦｯctl-F2ｦｯctl-F3ｦｯctl-F4ｦｯctl-F5ｦｯctl-F6ｦｯctl-F7ｦｯctl-F8ｦｯctl-F9ｯctl-F10ｭ"
 = "ｩExpand ｩClose  ｩ Next  ｩInsert ｩ Enter ｩFormat ｩ       ｩChange ｩTask  ｩToggle ｩ"
 = "ｩWindow ｩWindow ｩ Line  ｩStructsｩ Char  ｩPara   ｩ       ｩLF韻R ｩStatusｩWindow ｩ"
 ]
 = "ｫshf-F1ｦｯshf-F2ｦｯshf-F3ｦｯshf-F4ｦｯshf-F5ｦｯshf-F6ｦｯshf-F7ｦｯshf-F8ｦｯshf-F9ｯshf-F10ｭ"
 = "ｩInsert/ｩInsert ｩChange ｩExit toｩ Set   ｩ Clear ｩMarked ｩMarked ｩClear ｩDisplayｩ"
 = "ｩ Over  ｩ file  ｩMarginsｩLanguagｩ Mode  ｩ Marks ｩMove   ｩDelete ｩtext  ｩNewLineｩ"
 = "ｫｦｦF1ｦｦｦｯｦｦF2ｦｦｦｯｦｦF3ｦｦｦｯｦｦF4ｦｦｦｯｦｦF5ｦｦｦｯｦｦF6ｦｦｦｯｦｦF7ｦｦｦｯｦｦF8ｦｦｦｯｦｦF9ｦｦｯｦｦF10ｦｦｭ"
 = "ｩCommandｩ Load  ｩ Save  ｩFind & ｩGlobal ｩ Mark  ｩMarked ｩ Print ｩBytes ｩ Goto  ｩ"
 = "ｩline   ｩ file  ｩ file  ｩReplaceｩReplaceｩ Place ｩCopy   ｩ text  ｩfree  ｩ line  ｩ"
 = "ｲｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｮｦｦｦｦｦｦｦｳ"
 ]
 ]
 = 0
 BL SELFWD
 B REDR2
BANNERD BL VSTRNG
 [ WIDTH=132
 ASSERT OSTYPE=1
 [ A500=1
 = "末c/s-F1末沫末膨/s-F2末沫末膨/s-F3末沫末末c/s-F4末磨 末膨/s-F5末沫末膨/s-F6末沫末c/s-F7末沫末c/s-F8末磨 末c/s-F9末沫末膨/s-F10末"
 = "儷ndel Char  *path load   Append                   Pop buffer  Push buffer Get mail  僊uto bottom 儺ask bottom  Connect   "
 = "尠膨tl-F1末漫末膨tl-F2末漫末膨tl-F3末漫末末ctl-F4末慢 尠末ctl-F5末漫末膨tl-F6末漫末ctl-F7末漫末ctl-F8末慢 尠膨tl-F9末漫末膨tl-F10末"
 = "僞xpand win  Close wind  Next line  僮nsert struct  Enter char  Format para Send mail   LF韻R     Task stat  Toggle win "
 = "尠shift-F1末泱穆hift-F2末泱穆hift-F3末泱末shift-F4末 尠穆hift-F5末泱穆hift-F6末泱shift-F7末泱shift-F8末 尠shift-F9末泱穆hift-F10慢"
 = " Insrt/Ovr    Insert     Margins    Exit lang      Set Mode   Clear Marks Mark Move 儁arked del  僂lear text   Newlines  "
 = "尠末芳1末末漫末末芳2末末漫末末芳3末末漫末末末F4末末慢 尠末末F5末末漫末末芳6末末漫末末F7末末漫末末F8末末慢 尠末芳9末末漫末末芳10末末"
 = " *Command   Load file   Save file  僥ind/replace     Global    Mark place  Mark copy 儕rint text  傳ytes free   Goto line "
 = "ｖ末末末末末椁末末末末末満末末末末末末椁末末末末末末 ｖ末末末末末満末末末末末末椁末末末末末椁末末末末末 ｖ末末末末末椁末末末末末麻"
 |
 = "末c/s-F1末蘭膨/s-F2末蘭膨/s-F3末蘭膨/s-F4磨末c/s-F5末蘭膨/s-F6末蘭膨/s-F7末蘭膨/s-F8磨末c/s-F9末蘭膨/s-F10沫末c/s-F11沫膨/s-F12磨"
 [ OLDMAIL<>2
 = "          *path load Append            劔Pop Buff  儕ush Buff 僭et Mail  僊uto Bott劔Task Bottm Connect                     "
 = "尠膨tl-F1末泱膨tl-F2末泱膨tl-F3末泱膨tl-F4慢尠膨tl-F5末泱膨tl-F6末泱膨tl-F7末泱膨tl-F8慢尠膨tl-F9末泱膨tl-F10漫末ctl-F11漫膨tl-F12慢"
 = "僞xpand Win僂lose Win 儂ext Line 儡tructure劔Enter Char僥ormat Par儡end Mail  LF韻R  劔Task Stat 儺oggle Win儕op Buff  僂lose Win"
 |
 = "          *path load Append            劔Pop Buff  儕ush Buff           僊uto Bott劔Task Bott  Connect                     "
 = "尠膨tl-F1末泱膨tl-F2末泱膨tl-F3末泱膨tl-F4慢尠膨tl-F5末泱膨tl-F6末泱膨tl-F7末泱膨tl-F8慢尠膨tl-F9末泱膨tl-F10漫末ctl-F11漫膨tl-F12慢"
 = "僞xpand Win僂lose Win 儂ext Line 儡tructure劔Enter Char僥ormat Par           LF韻R  劔Task Stat 儺oggle Win儕op Buff  僂lose Win"
 ]
 = "尠穆hf-F1末泱穆hf-F2末泱穆hf-F3末泱穆hf-F4慢尠穆hf-F5末泱穆hf-F6末泱穆hf-F7末泱穆hf-F8慢尠穆hf-F9末泱穆hf-F10漫末shf-F11漫穆hf-F12慢"
 = "僮nsrt/Ovr 僮nsert Fil儡et Margin僞xit Lang劔 Set Mode 僂lear Mark儁ark Move 儁ark Delt劔Clear Text Newlines 儕ush Buff 僞xpand Wn"
 = "尠末芳1末末泱末芳2末末泱末芳3末末泱末芳4末慢尠末芳5末末泱末芳6末末泱末芳7末末泱末F8末末撥末末F9末末泱末芳10末漫末末F11末漫末末F12末"
 = "* Command 儉oad File 儡ave File 僥ind/Repl劔 Global   儁ark Place儁ark Copy  Print   劔Bytes Free僭oto Line  Connect  儺oggle Wn"
 = "ｖ末末末末満末末末末末椁末末末末満末末末末麻ｖ末末末末満末末末末末椁末末末末満末末末末麻ｖ末末末末満末末末末末椁末末末末満末末末末麻"
 ]
 |
 [ OSTYPE=1
 = "c/s-F1沫c/s-F2沫c/s-F3沫c/s-F4沫c/s-F5沫c/s-F6沫c/s-F7沫c/s-F8沫c/s-F9幼/s-F10"
 [ OLDMAIL<>2
 = "儷ndel  *pathld僊ppend         Pop    Push  僭etMail僊utoBot儺skBot僂onnect"
 = "嫩tl-F1漫ctl-F2漫ctl-F3漫ctl-F4漫ctl-F5漫ctl-F6漫ctl-F7漫ctl-F8漫ctl-F9歡tl-F10"
 = "僞xpand 僂lose   Next  儡truct  Char  僥ormat  Mail  儉F韻R  Task 儺oggle "
 |
 = "       *pathld僊ppend         Pop    Push         僊utoBot儺skBot僂onnect"
 = "嫩tl-F1漫ctl-F2漫ctl-F3漫ctl-F4漫ctl-F5漫ctl-F6漫ctl-F7漫ctl-F8漫ctl-F9歡tl-F10"
 = "僞xpand 僂lose   Next  儡truct  Char  僥ormat        儉F韻R  Task 儺oggle "
 ]
 = "孕hf-F1漫shf-F2漫shf-F3漫shf-F4漫shf-F5漫shf-F6漫shf-F7漫shf-F8漫shf-F9殱hf-F10"
 = "僮ns/Ovr僮nsert 儁argins僞xit to Mode  僂lr Mrk Move  僖elete 僂lr Tx儂ewLine"
 = "尠芳1末漫末F2末漫末F3末漫末F4末漫末F5末漫末F6末漫末F7末漫末F8末漫末F9末泱芳10末"
 = "僂ommand Load   Save   Find  僭lobal  Mark   Copy   Print  Bytes Goto  "
 = "ｖ末末末椁末末末椁末末末椁末末末椁末末末椁末末末椁末末末椁末末末椁末末満末末末麻"
 ]
 [ OSTYPE=0
 = "ｰc/s-f0ｦｧc/s-f1ｦｧc/s-f2ｦｧc/s-f3ｦｧc/s-f4ｦｧc/s-f5ｦｧc/s-f6ｦｧc/s-f7ｦｧc/s-f8ｦｧc/s-f9ｱ"
 = "ｩConnectｩUndel  ｩ*pathldｩAppend ｩ       ｩ Pop   ｩ Push  ｩGetMailｩAutoBotｩTskBotｩ"
 = "ｫctl-f0ｦｯctl-f1ｦｯctl-f2ｦｯctl-f3ｦｯctl-f4ｦｯctl-f5ｦｯctl-f6ｦｯctl-f7ｦｯctl-f8ｦｯctl-f9ｭ"
 = "ｩToggle ｩExpand ｩClose  ｩ Next  ｩStruct ｩ Char  ｩFormat ｩ Mail  ｩLF韻R ｩTask  ｩ"
 = "ｫshf-f0ｦｯshf-f1ｦｯshf-f2ｦｯshf-f3ｦｯshf-f4ｦｯshf-f5ｦｯshf-f6ｦｯshf-f7ｦｯshf-f8ｦｯshf-f9ｭ"
 = "ｩNewLineｩIns/OvrｩInsert ｩMarginsｩExit toｩ Mode  ｩClr Mrkｩ Move  ｩDelete ｩClr Txｩ"
 = "ｫｦｦf0ｦｦｦｯｦｦf1ｦｦｦｯｦｦf2ｦｦｦｯｦｦf3ｦｦｦｯｦｦf4ｦｦｦｯｦｦf5ｦｦｦｯｦｦf6ｦｦｦｯｦｦf7ｦｦｦｯｦｦf8ｦｦｦｯｦｦf9ｦｦｭ"
 = "ｩ Goto  ｩCommandｩ Load  ｩ Save  ｩ Find  ｩGlobal ｩ Mark  ｩ Copy  ｩ Print ｩBytes ｩ"
 = "ｲｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｳ"
 ]
 [ OSTYPE>=2
 = "ｰc/s-F1ｦｧc/s-F2ｦｧc/s-F3ｦｧc/s-F4ｦｧc/s-F5ｦｧc/s-F6ｦｧc/s-F7ｦｧc/s-F8ｦｧc/s-F9ｧc/s-F10ｱ"
 [ OLDMAIL<>2
 = "ｩUndel  ｩ*pathldｩAppend ｩ       ｩ Pop   ｩ Push  ｩGetMailｩAutoBotｩTskBotｩConnectｩ"
 = "ｫctl-F1ｦｯctl-F2ｦｯctl-F3ｦｯctl-F4ｦｯctl-F5ｦｯctl-F6ｦｯctl-F7ｦｯctl-F8ｦｯctl-F9ｯctl-F10ｭ"
 = "ｩExpand ｩClose  ｩ Next  ｩStruct ｩ Char  ｩFormat ｩ Mail  ｩLF韻R ｩ Task ｩToggle ｩ"
 |
 = "ｩUndel  ｩ*pathldｩAppend ｩ       ｩ Pop   ｩ Push  ｩ       ｩAutoBotｩTskBotｩConnectｩ"
 = "ｫctl-F1ｦｯctl-F2ｦｯctl-F3ｦｯctl-F4ｦｯctl-F5ｦｯctl-F6ｦｯctl-F7ｦｯctl-F8ｦｯctl-F9ｯctl-F10ｭ"
 = "ｩExpand ｩClose  ｩ Next  ｩStruct ｩ Char  ｩFormat ｩ       ｩLF韻R ｩ Task ｩToggle ｩ"
 ]
 = "ｫshf-F1ｦｯshf-F2ｦｯshf-F3ｦｯshf-F4ｦｯshf-F5ｦｯshf-F6ｦｯshf-F7ｦｯshf-F8ｦｯshf-F9ｯshf-F10ｭ"
 = "ｩIns/OvrｩInsert ｩMarginsｩExit toｩ Mode  ｩClr Mrkｩ Move  ｩDelete ｩClr TxｩNewLineｩ"
 = "ｫｦｦF1ｦｦｦｯｦｦF2ｦｦｦｯｦｦF3ｦｦｦｯｦｦF4ｦｦｦｯｦｦF5ｦｦｦｯｦｦF6ｦｦｦｯｦｦF7ｦｦｦｯｦｦF8ｦｦｦｯｦｦF9ｦｦｯｦｦF10ｦｦｭ"
 = "ｩCommandｩ Load  ｩ Save  ｩ Find  ｩGlobal ｩ Mark  ｩ Copy  ｩ Print ｩ Bytesｩ Goto  ｩ"
 = "ｲｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｦｮｦｦｦｦｦｦｮｦｦｦｦｦｦｦｳ"
 ]
 ]
 [ OSTYPE<>4
 = 0
 BL PATOUT
 = &FF,&C0,&FE,&06,&06,&06,&06,&06
 = &FF,&03,&7F,&60,&6F,&68,&69,&69
 = &00,&40,&40,&40,&C0,&00,&80,&80
 = &00,&00,&00,&01,&01,&00,&19,&31
 = &00,&00,&00,&80,&80,&00,&9B,&9C
 = &00,&00,&00,&00,&00,&00,&C0,&60
 BL VSTRNG
 [ OSTYPE<>1
 = "Two Window Editor  1987 Acorn Computers. "
 |
 = "Two Window Editor  1987 Acorn Computers. "
 ]
 [ TERM=CR
 = "CR ver"
 |
 = "      "
 ]
 [ OSTYPE<>1
 = "  ｰｦｦｦｱShift: screen up   "
 |
 = "  shf: scrn末磨text: ctl "
 [ WIDTH=132
 = "                                                    "
 ]
 ]
 = 0
 ALIGN
 BL PATOUT
 = &06,&06,&06,&07,&00,&03,&00,&00
 = &69,&69,&69,&E9,&08,&F8,&00,&00
 = &98,&BC,&E7,&C3,&00,&00,&00,&00
 = &61,&C1,&81,&01,&00,&00,&00,&00
 = &98,&98,&98,&98,&00,&00,&00,&00
 = &60,&60,&60,&60,&00,&00,&00,&00
 [ RELEASE=0
 SWI WRITEI+"a"
 SWI WRITEI+" "
 BL PATOUT
 = &3F,&61,&D1,&BF,&B0,&B9,&B6,&E2
 = &00,&80,&80,&3C,&47,&C6,&CE,&78
 = &00,&00,&1E,&33,&73,&3F,&03,&06
 = &00,&1E,&33,&3E,&F8,&0F,&00,&00
 = &01,&07,&0C,&38,&E0,&80,&00,&00
 = &C0,&60,&20,&00,&00,&00,&00,&00
 BL VSTRNG
 = "prog         "
 |
 BL VSTRNG
 = "    Version 2.00     "
 ]
 |
 = "Twin Window Editor. 2.00. Copyright Acorn Computers."
 ]
;------------------------------< last - is end of date
 = "    Made on 20th April 1988"
 [ OSTYPE=4
 = ".Cancel command = <ESC>. <KP+> means numeric Key Pad +. <BS> means BackSpace.    "
 = "Delete:  char at cursor = <KP+>; char left of cursor = <BS>; line = <SHIFT>+<BS>"
 = "Tab control: change mode = <SHIFT>+<TAB>; expand tabs = <CTRL>+<SHIFT>+<HOME>.  "
 = "Start/End:   line = <HOME>/<END>; text buffer = <CTRL>+<HOME>/<CTRL>+<END>.     "
 = "Up/Down:     line = <>/<>;     screen page = <PAGE UP>/<PAGE DOWN>.           "
 = "Left/Right:  char = <>/<>;     word = <CTRL>+<>/<CTRL>+<>."
 |
 [ OSTYPE<>1
 =                                                       "  ｩ  ｩControl: text start"
 = "TAB performs tabulation controlled by shift TAB.      ｰｦｮｦｧｦｮｦｱShift: word l/r  "
 = "Control TAB expands TABs in text.                     ｩ 愛ｩ｢ ｩControl: line l/r"
 = "COPY deletes the character above the cursor.          ｲｦｧｦｮｦｧｦｳShift:screen down"
 = "Shift COPY for soft keys & cursor editing, ESCAPE out.  ｩ  ｩControl: text end  "
 = "Control COPY deletes the current line (to next RETURN)  ｲｦｦｦｳ "
 |
 =                                                       "         up  冱tart     "
 [ WIDTH=132
 = "    This version of Twin works using the Arthur     "
 ]
 = "      末末末末末蘭末末末末沫末末末末末沫末末末末末末  shf: 末漫末漫末磨 ctl: "
 [ WIDTH=132
 = "    MODEs 16 and 17 to give a 132 column display.   "
 ]
 = "TAB   儺AB move  冲oggle TAB僞xpand TABs僂ompress TAB  word  漠  剪  line "
 [ WIDTH=132
 = "                                                    "
 ]
 = "Insert儷ndel char僮nsert Spc儷ndel line 儷ndelete all       ｖ末椁末椁末      "
 [ WIDTH=132
 = "    Twin's normal facilities are unchanged.         "
 ]
 = "COPY  僖elete abv僂ursor Edt僖elete line僖elete Rest   screen: shf.ctl:text end"
 [ WIDTH=132
 = "                                                    "
 ]
 = "      ｖ末末末末満末shift末満膨trl末末末椁ctrl+shift麻   down "
 [ WIDTH=132
 = "                                                    "
 ]
 ]
 ]
 = 0
 ALIGN
REDRAWTIME BL SELFWD
 SUB R1,SP,#256
 [ OSTYPE=1
 MOV R0,#3
 STR R0,[R1]
 MOV R0,#14
 |
 MOV R0,#1
 ]
 SWI WORD
 STMFD SP!,{R8}
 LDR R8,[R1]
 LDRB R6,[R1,#4]
 BL PRINTTIME
 LDMFD SP!,{R8}
REDR2 LDMFD SP!,{R14}
REDR1A STMFD SP!,{R14}
 BL REDRMN ;redraw this window
 ADD R6,ARGP,#AREA0
 TEQ R6,AP
 ADDEQ R6,ARGP,#AREA1
 LDRB R14,[R6,#ONSCREEN]
 TEQ R14,#0
 BEQ DECWNP
 STMFD SP!,{AP}
 MOV AP,R6
 BL REDRMN ;then the other window
 LDMFD SP!,{AP}
 B DECWNP ;then get my window
;single window redraw from now on. Updates >= to fullscreen are fullscreen
REDR1 STMFD SP!,{R14}
 BL REDRMN
DECWNP LDMFD SP!,{R14}
DECWIN LDRB R0,[AP,#SLINE]
 TEQ R0,#0
 BNE DECWN1
 LDRB R0,[AP,#ELINE]
 LDRB R2,[ARGP,#MAXY]
 TEQ R0,R2
 SWIEQ WRITEI+26
 MOVEQ PC,R14
DECWN1 SWI WRITEI+28
 SWI WRITEI+0
 LDRB R0,[AP,#ELINE]
 SWI WRITEC
 SWI WRITEI+WIDTH-1
 LDRB R0,[AP,#SLINE]
 SWI WRITEC
 MOV PC,R14
REDRMN TEQ UPDATE,#NONE
 MOVEQ PC,R14
 STMFD SP!,{R14}
 BL ABORTQ
 LDMNEFD SP!,{PC}
 TEQ UPDATE,#HARDDN
 BEQ SCRLDN
 TEQ UPDATE,#HARDUP
 BEQ SCRLUP
 CMP UPDATE,#FULLSCREEN
 BCC REDR4 ;branch if mode doesn't require top of screen doing
 LDRB R0,[AP,#Y]
 BL LINEBK ;get R4 pointing at first char on screen
 LDRB R1,[AP,#Y]
 SUB R1,R1,R0
 STRB R1,[AP,#Y] ;adjust cursor a little!
 TEQ R1,#0
 BEQ REDR4 ;nothing at the top of the screen: do bottom only
 LDR R4,[AP,#GE] ;paint bottom first (to get current line)
 LDRB R6,[AP,#SLINE]
 LDRB R1,[AP,#Y]
 ADD R6,R6,R1
 LDRB R5,[AP,#ELINE]
 BIC R7,R7,#&40000000
 BL UPDTLN
 LDMNEFD SP!,{PC} ;aborted
 MOV R0,#1
 BL LINEBK
 LDRB R1,[AP,#Y]
 LDRB R5,[AP,#SLINE]
 ADD R6,R5,R1
 SUB R6,R6,#1
 ORR R7,R7,#&40000000
 BL UPDTLN
 LDMFD SP!,{PC}
REDR4 LDR R4,[AP,#GE]
 LDRB R6,[AP,#SLINE]
 LDRB R1,[AP,#Y]
 ADD R6,R6,R1
 LDRB R5,[AP,#ELINE]
 BIC R7,R7,#&40000000
 BL UPDTLN
 LDMFD SP!,{PC}
;scroll screen up by one line for cursor down
SCRLUP LDRB R5,[AP,#Y]
 BL DECSCL
 SWI WRITEI+31
 SWI WRITEI+0
 LDRB R0,[AP,#ELINE]
 LDRB R1,[AP,#SLINE]
 ADD R2,ARGP,#SCRIM
 ADD R14,R1,R2
 ADD R2,R0,R2
 SUB R0,R0,R1
 BNE SCLUP1 ;did declare window
 SWI WRITEC
 SWI WRITEI+10
SCLUP0 LDRB R1,[R14,#1]
 STRB R1,[R14],#1
 TEQ R14,R2
 BNE SCLUP0
 MOV R1,#0
 STRB R1,[R14]
 SUB R0,R0,R5
 SUB R0,R0,#1
 BL LINEFW
 LDRB R5,[AP,#ELINE]
 SUB R6,R5,#1
 TEQ R0,#0 ;can move all these lines forward?
 BEQ SCROLL
 MOV R2,#0
 MOV R0,R6
 BL WIPENOW
 LDMFD SP!,{R14}
 B STATUS
SCLUP1 SUB R0,R0,#1
 SWI WRITEC
 SWI WRITEI+10
 SUB R2,R2,#1
SCLUP3 LDRB R1,[R14,#1]
 STRB R1,[R14],#1
 TEQ R14,R2
 BNE SCLUP3
 MOV R1,#0
 STRB R1,[R14]
 SUB R0,R0,R5
 BL LINEFW
 LDRB R5,[AP,#ELINE]
 SUB R6,R5,#1
 TEQ R0,#0 ;can move all these lines forward?
 BEQ SCLUP2
 MOV R2,#0
 MOV R0,R6
 LDMFD SP!,{R14}
 B WIPENOW
SCLUP2 LDMFD SP!,{R14}
 B UPDTLN
;declare scroll area, EQ status if fullscreen
DECSCL LDRB R0,[AP,#SLINE]
 TEQ R0,#0
 BNE DECSL1
 LDRB R0,[AP,#ELINE]
 LDRB R2,[ARGP,#MAXY]
 TEQ R0,R2
 SWIEQ WRITEI+26
 MOVEQ PC,R14
DECSL1 SWI WRITEI+28
 SWI WRITEI+0
 LDRB R0,[AP,#ELINE]
 SUB R0,R0,#1
 SWI WRITEC
 SWI WRITEI+WIDTH-1
 LDRB R0,[AP,#SLINE]
 SWI WRITEC
 MOV PC,R14
;scroll screen down by one line for cursor up
SCRLDN LDRB R0,[AP,#Y]
 TEQ R0,#0
 LDREQ R4,[AP,#GE]
 BLNE LINEBK ;guarenteed move back by Y lines
 BL DECSCL
 SWI WRITEI+30
 SWI WRITEI+11
 LDRB R6,[AP,#SLINE]
 ADD R5,R6,#1
 BNE SCLDN2 ;branch if window declared
 ADD R0,ARGP,#SCRIM
 ADD R1,R6,R0
 LDRB R2,[AP,#ELINE]
 ADD R2,R2,R0
SCRLD4 LDRB R0,[R2,#-1]
 STRB R0,[R2],#-1
 TEQ R2,R1
 BNE SCRLD4
 MOV R0,#0
 STRB R0,[R2]
SCROLL BL UPDTLN
 LDMFD SP!,{R14}
 B STATUS
SCLDN2 ADD R0,ARGP,#SCRIM
 ADD R1,R6,R0
 LDRB R2,[AP,#ELINE]
 ADD R2,R2,R0
 SUB R2,R2,#1
SCRLD5 LDRB R0,[R2,#-1]
 STRB R0,[R2],#-1
 TEQ R2,R1
 BNE SCRLD5
 MOV R0,#0
 STRB R0,[R2]
 B SCLUP2
;R4 -> first char to be output, R5 absolute screen line of end of print+1
;R6 absolute screen position of start, R7 abortable flag. R7 bit 31 also
;used to determine if fwd or rev currently selected; R7 bit 30=1 implies
;upwards paint direction (R6=start, R5=end+1 i.e. R5 line is painted).
UPDTLN TST R7,#1
 MOVNE PC,R14 ;if aborted exit
 STMFD SP!,{R14}
 MOV R0,#0
 TEQ UPDATE,#TOCRLONG
 TEQNE UPDATE,#TOCRSHORT
 TEQNE UPDATE,#CSRONWARDS
 LDREQB R0,[AP,#X] ;get current X
 ADDEQ R4,R4,R0
UPDTL0 SWI WRITEI+26
 SWI WRITEI+31
 SWI WRITEC
 MOV R2,R0
 MOV R0,R6
 SWI WRITEC
 SUB R3,R4,R2 ;start of output on this line
 B UPDTL1
UPDTL2 BL CHOUTOPT
 ADD R2,R2,#1
 CMP R2,#WIDTH
 BEQ UPDTL3
UPDTL1 LDRB R0,[R4],#1
 TEQ R0,#TERM
 BNE UPDTL2
 LDR R1,[AP,#END] ;check if end of world term
 CMP R4,R1
 BHI UPDTL4
 TEQ UPDATE,#TOCRSHORT
 TEQEQ R2,#WIDTH-1
 MOVEQ UPDATE,#CSRONWARDS ;if X=WIDTH-1 IF newline then alter tocrshort to csronward
 TEQ UPDATE,#TOCRLONG
 TEQEQ R2,#0
 MOVEQ UPDATE,#CSRONWARDS ;if X=0 IF newline then alter tocrlong to csronward
 BL CROUT
 BICNE R7,R7,#&80000000
 ADDNE R2,R2,#1
 BL FINALFWD
 MOV R0,R6
 BL WIPENOW
 BL UPDTMK
 TEQ UPDATE,#TOCRLONG
 TEQNE UPDATE,#TOCRSHORT
 LDMEQFD SP!,{PC} ;exit if reached newline
 B UPDTLQ
UPDTL3 ADD R14,R6,#SCRIM ;address in SCRIM of line
 STRB R2,[ARGP,R14] ;maximum length
 BL UPDTMK
UPDTLQ BL ABORTQ
 LDMNEFD SP!,{PC}
 MOV R0,#0
 TST R7,#&40000000
 BNE UPDTLQUPWARDS
 ADD R6,R6,#1
 CMP R5,R6
 BHI UPDTL0
 BL FINALFWD
 TEQ R7,R7
 LDMFD SP!,{PC}
UPDTLQUPWARDS LDR R3,[AP,#START]
 MOV R0,#2
 BL LINBK1 ;move R4 back to start of previous line
 SUB R6,R6,#1
 CMP R5,R6
 BLE UPDTL0
 BL FINALFWD
 BICS R7,R7,#&40000000
 LDMFD SP!,{PC}
UPDTL4 MOV R0,#"*"
 BL CHOUTIOPT
 ADD R2,R2,#1
 BL FINALFWD
 MOV R0,R6
 BL WIPENOW
 BL UPDTMK
 TEQ UPDATE,#TOCRLONG
 LDMEQFD SP!,{PC}
 LDRB R0,[AP,#ELINE]
 SUBS R0,R0,#1 ;bottom Y of window
 TEQ R0,R6 ;reached end already?
 LDMEQFD SP!,{PC}
 ADD R2,R0,#SCRIM
 [ OSTYPE=1
 SWI WRITEI+23
 SWI WRITEI+8
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0 ;left X
 ADD R0,R6,#1
 SWI WRITEC ;top Y
 [ WIDTH>127
 SWI WRITEI+0 ;right X
 SUB R0,R2,#SCRIM
 ADD R0,R0,#1 ;problem with 132, 144 being negative
 |
 SWI WRITEI+WIDTH ;right X
 SUB R0,R2,#SCRIM
 ]
 SWI WRITEC ;bottom Y
 SWI WRITEI+0
 SWI WRITEI+0
 ADD R0,R6,#1
 |
 SWI WRITEI+28
 SWI WRITEI+0
 SWI WRITEC
 SWI WRITEI+WIDTH-1
 ADD R0,R6,#1
 SWI WRITEC
 SWI WRITEI+12
 ]
 ADD R0,R0,#SCRIM
 MOV R1,#0
UPDTL5 STRB R1,[ARGP,R0]
 ADD R0,R0,#1
 CMP R0,R2
 BCC UPDTL5
 TEQ R0,R0 ;set EQ status (r0 could have equalled r2 on entry to loop)
 LDMFD SP!,{PC}
;NE status if prefetch aborting
ABORTQ TST R7,#ABORT
 MOVEQ PC,R14
 TST R7,#1
 MOVNE PC,R14 ;aborted already
 STMFD SP!,{R14}
 MOV R1,#0
 MOV R2,#0
 BL AINKEY
 LDMFD SP!,{R14}
 TEQ R2,#&FF
 MOVEQ PC,R14
 LDRB R0,[ARGP,#ESCFLG]
 CMP R0,#&80
 BCS ESCAPE
 MOV R0,UPDATE
 CMP R0,#CSRONWARDS
 BNE ABORTQ1
 CMP R1,#&7F
 MOVCS R0,#FULLSCREEN
 B ABORTQ2
ABORTQ1 MOVCC R0,#CSRONWARDS ;if none, tocrlong, tocrshort then csronwards
 TEQNE R0,#HARDUP
 TEQNE R0,#HARDDN
 MOVEQ R0,#FULLSCREEN ;if csronwards, hardup, harddn then fullscr
ABORTQ2 STRB R0,[ARGP,#OLDUPDATE]
 AND R7,R7,#&80000000
 ORR R7,R7,R1,LSL #8
 ORR R7,R7,#ABORT+1 ;aborted: NE
FINALFWD TEQ R7,#0
 MOVPL PC,R14
 BIC R7,R7,#&80000000
 B SELFWD
;update marks on line: R4 start of next line, R3 start of this screen line
UPDTMK LDRB R1,[AP,#MARKS]
 SUBS R1,R1,#1
 MOVCC PC,R14 ;no marks so quit quickly
 STMFD SP!,{R14}
UPDTM8 ADD R14,AP,R1,LSL #2
 STMFD SP!,{R4}
 LDR R4,[R14,#MARKTB]
 BL MARKADR
 MOV R14,R4
 LDMFD SP!,{R4}
 CMP R14,R4
 BCS UPDTM1 ;past end of this line
 SUBS R0,R14,R3
 BCC UPDTM1 ;before start of this line
 SWI WRITEI+26
 SWI WRITEI+31
 SWI WRITEC
 ADD R14,R6,#SCRIM
 CMP R0,R2 ;test X posn of mark with line length
 ADD R0,R0,#1
 STRCSB R0,[ARGP,R14] ;if mark past end of line, update length
 MOV R0,R6
 SWI WRITEC
 ADD R0,R1,#"0"+1
 BL CHOUTI
 BIC R7,R7,#&80000000
UPDTM1 SUBS R1,R1,#1
 BCS UPDTM8
 LDMFD SP!,{PC}
;output character R0. NE if written, EQ if not
CHOUTOPT CMP R0,#" "
 BCC CHOUT1OPT
 CMP R0,#&7F
 MOVEQ R0,#"?"
 BEQ CHOUTIOPT
 TEQ R7,#0
 SWIMI WRITEI+17
 SWIMI WRITEI+7
 SWIMI WRITEI+17
 SWIMI WRITEI+128
 SWI WRITEC
 BIC R7,R7,#&80000000
 MOV PC,R14
CHOUT1OPT ORR R0,R0,#"@"
CHOUTIOPT TEQ R7,#0
 SWIPL WRITEI+17
 SWIPL WRITEI+0
 SWIPL WRITEI+17
 SWIPL WRITEI+7+128
 SWI WRITEC
 ORR R7,R7,#&80000000
 MOV PC,R14
;output character R0. NE if written, EQ if not
CHOUT CMP R0,#" "
 BCC CHOUT1
 CMP R0,#&7F
 SWINE WRITEC
 MOVNE PC,R14
 MOV R0,#"?"
CHOUTI SWI WRITEI+17
 SWI WRITEI+0
 SWI WRITEI+17
 SWI WRITEI+7+128
 SWI WRITEC
SELFWD SWI WRITEI+17
 SWI WRITEI+7
 SWI WRITEI+17
 SWI WRITEI+128
 MOV PC,R14
CHOUT1 CMP R0,#TERM
 ORRNE R0,R0,#"@"
 BNE CHOUTI
CROUT LDRB R0,[AP,#SHOWCR]
 TEQ R0,#0
 MOVNE R0,#""
 BNE CHOUTI
 MOV PC,R14
;output both window's status lines
STATAL STMFD SP!,{AP,R14}
 ADD AP,ARGP,#AREA0
 LDRB R0,[AP,#ONSCREEN]
 TEQ R0,#0
 BEQ STATA1
 LDR R0,[SP]
 MOV R1,#0
 TEQ R0,AP
 MOVEQ R1,#1
 BL STATOT
STATA1 ADD AP,ARGP,#AREA1
 LDRB R0,[AP,#ONSCREEN]
 TEQ R0,#0
 BEQ STATA2
 LDR R0,[SP]
 MOV R1,#0
 TEQ R0,AP
 MOVEQ R1,#1
 BL STATOT
STATA2 LDMFD SP!,{AP,R14}
 B DECWIN
;subroutine to call if modifying text
MODTXT LDRB R1,[AP,#MODIFY]
 TST R1,#1 ;if bottom bit already set then exit early
 MOVNE PC,R14
 LDRB R1,[AP,#MODIFY]
 TEQ R1,#4
 MOVEQ PC,R14 ;discarded!
MODSTT MOV R1,#1
 STRNEB R1,[AP,#MODIFY]
;output this window's status
STATUS MOV R1,#1
STATOT LDRB R0,[AP,#ELINE]
;output status on line n (R0), selected (R1)
 STMFD SP!,{R0,R1,R14}
 SWI WRITEI+26
 SWI WRITEI+31
 SWI WRITEI+0
 SWI WRITEC
 TEQ R1,#0
 BLNE SELREV
 LDRB R0,[AP,#BUFFNO]
 SWI WRITEC
 LDRB R0,[AP,#PUSHNO]
 TEQ R0,#"0"
 SWIEQ WRITEI+" "
 SWINE WRITEC
 LDRB R2,[AP,#INSERT]
 TEQ R2,#0
 BNE STAT1
 BL VSTRNG
 = "Over   ",0
 B STAT2
STAT1 BL VSTRNG
 = "Insert ",0
 ALIGN
STAT2 LDRB R2,[AP,#MARKS]
 CMP R2,#1
 BEQ STAT2A
 BHI STAT2B
 LDRB R2,[AP,#TABMOD]
 TEQ R2,#0
 BNE STAT2C
 BL VSTRNG
 = "TAB words ",0
 B STAT4
STAT2C BL VSTRNG
 = "TAB cols  ",0
 B STAT4
STAT2A BL VSTRNG
 = "One mark  ",0
 B STAT4
STAT2B BL VSTRNG
 = "Two marks ",0
 ALIGN
STAT4 LDRB R0,[AP,#TASKQ]
 TEQ R0,#0
 BNE STATUSTASK
 LDRB R2,[ARGP,#ERRCTL]
 TEQ R2,#255
 BNE STAT0
 BL VSTRNG
 = "Cursor Editing - ESCAPE to leave.",0
 MOV R2,#2+7+10+33
 B STAT6B
STATUSTASK BL VSTRNG
 = "Task running in this window ",0
 MOV R2,#28+2+7+10
 B STAT6B
STAT0 LDRB R2,[AP,#MODIFY]
 TEQ R2,#0
 BNE STAT4A
 BL VSTRNG
 = "Original """,0
 B STAT4B
GETMTABLE ADR R3,MTABLE
 MOV PC,R14
CDAYS * 10000*6*6*24
LYTABLE & 365*24*60*60*100*4+CDAYS ;year*3+leap year
YTABLE & 365*24*60*60*100+CDAYS ;leap year
 & CDAYS ;days
MTABLE & 31*CDAYS
 = "Jan",0
 & 28*CDAYS
 = "Feb",0
 & 31*CDAYS
 = "Mar",0
 & 30*CDAYS
 = "Apr",0
 & 31*CDAYS
 = "May",0
 & 30*CDAYS
 = "Jun",0
 & 31*CDAYS
 = "Jul",0
 & 31*CDAYS
 = "Aug",0
 & 30*CDAYS
 = "Sep",0
 & 31*CDAYS
 = "Oct",0
 & 30*CDAYS
 = "Nov",0
 & 31*CDAYS
 = "Dec",0
TTABLE & 100000*6*6 ;tens of hours
 & 10000*6*6 ;hours
 & 10000*6 ;tens of minutes
 & 1000*6 ;minutes
 & 1000 ;tens of seconds
 & 100 ;seconds
 & 10
 & 1
STAT4C BL VSTRNG
 = "LF  CR """,0
 B STAT4B
STAT4D BL VSTRNG
 = "Discarded""",0
 B STAT4B
STAT4A TEQ R2,#2
 BEQ STAT4C
 TEQ R2,#4
 BEQ STAT4D
 BL VSTRNG
 = "Modified """,0
 ALIGN
STAT4B ADD R2,AP,#NAMBUFF
 ADD R8,R2,#WIDTH-49
 LDR R0,[AP,#FLLOAD]
 CMN R0,#1
 BEQ STAT5
 CMN R0,#&100000
 BCC STAT5
 CMN R0,#256
 ADDCC R8,R2,#WIDTH-52
STAT5 LDRB R0,[R2],#1
 TEQ R0,#CR
 BEQ STAT5DONE
 SWI WRITEC
 CMP R2,R8
 BNE STAT5
 SWI WRITES
 = 127,127,127,127,127," etc",0
 ALIGN
STAT5DONE SUB R2,R2,AP
 SUB R2,R2,#NAMBUFF-26-19-2
 SWI WRITEI+""""
 LDR R8,[AP,#FLLOAD]
 CMN R8,#1
 BEQ STAT6A
 CMN R8,#&100000
 BCC STAT6A
 CMN R8,#256
 BCS STATTEXTTYPE
 MOV R8,R8,LSR #8
 BL THREEOUT
 ADD R2,R2,#3
STATTEXTTYPE ADD R2,R2,#1
 SWI WRITEI+" "
 LDR R8,[AP,#FLEXEC] ;get time
 LDRB R6,[AP,#FLLOAD]
 BL PRINTTIME
 B STAT6B
PRINTTIME STMFD SP!,{R0,R1,R2,R3,R7,R14}
 LDR R3,YTABLE+4
 ADDS R8,R8,R3
 ADC R6,R6,#0 ;add a day so that 1900 is a leap year
 MVN R1,#3 ;years (-4)
 LDR R2,LYTABLE
DATEO0 ADD R1,R1,#4
 SUBS R8,R8,R2
 SBCS R6,R6,#2
 BCS DATEO0
 ADDS R8,R8,R2
 ADC R6,R6,#2
 LDR R2,YTABLE
 SUBS R8,R8,R2
 SBCS R6,R6,#0
 BCC DATEY0
 SUB R2,R2,R3 ;change from leap year to year
DATEO1 ADD R1,R1,#1
 SUBS R8,R8,R2
 SBCS R6,R6,#0
 BCS DATEO1
DATEY0 ADD R8,R8,R2 ;restore if overshot
 ADR R4,MTABLE ;pointer to month
 LDR R2,[R4],#8
 SUBS R8,R8,R2
 BCC DATEM0 ;january?
 LDR R2,[R4],#8
 TST R1,#3
 ADDEQ R2,R2,R3 ;if feb in leap year then 29 days
 SUBS R8,R8,R2
 BCC DATEM0 ;febuary?
DATEO4 LDR R2,[R4],#8
 SUBS R8,R8,R2
 BCS DATEO4
DATEM0 ADD R8,R8,R2        
 LDR R2,YTABLE+4
 MOV R3,#0 ;days
DATEO3 ADD R3,R3,#1
 SUBS R8,R8,R2
 BCS DATEO3
 ADD R8,R8,R2
 ADR R6,TTABLE
 BL DIGIT
 BL DIGIT
 SWI WRITEI+":"
 BL DIGIT
 BL DIGIT
 SWI WRITEI+":"
 BL DIGIT
 BL DIGIT
 SWI WRITEI+" "
 MOV R8,R3
 BL DIGIT
 BL DIGIT
 SWI WRITEI+"-"
 LDRB R0,[R4,#-4]
 SWI WRITEC
 LDRB R0,[R4,#-3]
 SWI WRITEC
 LDRB R0,[R4,#-2]
 SWI WRITEC
 SWI WRITEI+"-"
 MOV R8,R1
 SUB R6,R6,#8
 BL DIGIT
 BL DIGIT
 LDMFD SP!,{R0,R1,R2,R3,R7,PC}
;print digit derived from r8 and current TABLE entry
DIGIT MOV R0,#"0"
 LDR R7,[R6],#4
DIGIT1 SUBS R8,R8,R7
 ADDCS R0,R0,#1
 BCS DIGIT1
 ADD R8,R8,R7 ;(went too far)
 SWI WRITEC
 MOV PC,R14 
STAT6A CMN R8,#1
 TEQNE R8,#0
 BNE STAT6W
 LDR R0,[AP,#FLEXEC]
 CMN R0,#1
 BNE STAT6W
 BL VSTRNG
 = " **Command File** ",0
 B STAT6B
STAT6W BL WORDSP
 LDR R8,[AP,#FLEXEC]
 BL WORDSP
STAT6B BL SLWIPE
STAT6C LDMFD SP!,{R0,R1,R14}
 TEQ R1,#0
 MOVNE PC,R14
 LDRB R2,[ARGP,#TUTMODE+1]
 AND R2,R2,#&7F
 CMP R2,#18
 RSBCC R2,R0,#32
 RSBCS R2,R0,#64
 MOVCC R2,R2,LSL #5
 MOVCS R2,R2,LSL #4
 SUBCC R0,R2,#32
 SUBCS R0,R2,#16
 SWI WRITEI+25
 SWI WRITEI+4
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEC
 MOV R0,R0,LSR #8
 SWI WRITEC
 SWI WRITEI+25
 SWI WRITEI+1
 SWI WRITEI+254
 SWI WRITEI+4
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+25
 SWI WRITEI+1
 SWI WRITEI+0
 SWI WRITEI+0
 SWICC WRITEI+28
 SWICS WRITEI+14
 SWI WRITEI+0
 SWI WRITEI+25
 SWI WRITEI+17
 SWI WRITEI+2
 SWI WRITEI+251
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+25
 SWI WRITEI+1
 SWI WRITEI+0
 SWI WRITEI+0
 SWICC WRITEI+228
 SWICS WRITEI+242
 SWI WRITEI+255
 MOV PC,R14
SELREV SWI WRITEI+17
 SWI WRITEI+0
 SWI WRITEI+17
 SWI WRITEI+7+128
 MOV PC,R14
PROMPT MOV R0,#0
PRMPTX STMFD SP!,{R9}
 BIC R9,R14,#&FC000003
 BL PROMPTR9
 ADD R14,R9,#3
 LDMFD SP!,{R9}
 BIC PC,R14,#3
PROMPTR9 SWI WRITEI+31
 SWI WRITEC
 SUB R2,R0,#1
 LDRB R1,[AP,#ELINE]
 LDRB R0,[AP,#SLINE]
 SUB R0,R1,R0
 SWI WRITEC
 STMFD SP!,{R0}
 STMFD SP!,{R14}
 BL SELREV
 MOV R0,R9
 SWI WRITE0
 SUB R1,R0,R9
 MOV R9,R0
 ADD R2,R2,R1
 STMFD SP!,{R2}
 BL SELFWD
 LDRB R0,[AP,#ELINE]
 BL SWIPE
 BL DECWIN
 LDMFD SP!,{R14,R2}
 SWI WRITEI+31
 MOV R0,R2
 SWI WRITEC
 LDMFD SP!,{R0}
 SWI WRITEC
 MOV PC,R14
INFORR SWI WRITEI+31
 SWI WRITEI+WIDTH-18
 LDRB R1,[AP,#ELINE]
 LDRB R0,[AP,#SLINE]
 SUB R0,R1,R0
 SWI WRITEC
 SWI WRITEI+17
 SWI WRITEI+0
 SWI WRITEI+17
 SWI WRITEI+7+128
 SWI WRITEI+" "
 BIC R14,R14,#&FC000003
 MOV R0,R14
 SWI WRITE0
 SUB R1,R0,R14
 ADD R2,R1,#13
 MOV R14,R0
 ADD R14,R14,#3
 BIC R14,R14,#3
QWIPE MOV R0,#&86
 SWI BYTE
 MOV R2,R1
SLWIPE STMFD SP!,{R14}
 LDRB R0,[AP,#ELINE]
 BL SWIPE
 BL SELFWD
 BL DECWIN
 LDMFD SP!,{PC}
;start clear in R2, end clear WIDTH-1, update to WIDTH-1, line number R0
SWIPE STMFD SP!,{R0,R14}
 ADD R14,R0,#SCRIM
 CMP R2,#WIDTH
 BCS SWIPE1
 [ OSTYPE=0
 LDRB R0,[ARGP,#WIPESTYLE]
 CMP R0,#0
 BNE SWIPESIMPLE
 ]
 [ OSTYPE=4
 SWI WRITEI+28 ;special, dumb, code for SpringBoard
 MOV R0,R2
 SWI WRITEC
 LDR R0,[SP]
 SWI WRITEC
 SWI WRITEI+WIDTH-1
 SWI WRITEC
 SWI WRITEI+12
 |
 SWI WRITEI+31
 MOV R0,R2
 SWI WRITEC
 LDR R0,[SP]
 SWI WRITEC
 SWI WRITES
 = 23,8,5,6,0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 ]
 [ OSTYPE=0
 B SWIPE1
SWIPESIMPLE SWI WRITEI+28
 MOV R0,R2
 SWI WRITEC
 LDR R0,[SP]
 SWI WRITEC
 SWI WRITEI+WIDTH-1
 SWI WRITEC
 SWI WRITEI+12
 ]
SWIPE1 MOV R0,#WIDTH
 STRB R0,[ARGP,R14]
 LDMFD SP!,{R0,PC}
;start clear in R2, end clear in scrim,R0, absolute line number in R0
WIPENOW STMFD SP!,{R0,R14}
 ADD R14,R0,#SCRIM
 LDRB R0,[ARGP,R14]
 CMP R2,R0
 BCS WIPEN1
 [ OSTYPE=0
 LDRB R0,[ARGP,#WIPESTYLE]
 CMP R0,#0
 BNE WIPESIMPLE
 ]
 [ OSTYPE=4
 SWI WRITEI+28 ;special, dumb, code for SpringBoard
 MOV R0,R2
 SWI WRITEC ;left X
 LDR R0,[SP]
 SWI WRITEC ;bottom Y
 LDRB R0,[ARGP,R14] ;right X from scrim
 SUB R0,R0,#1
 SWI WRITEC
 LDR R0,[SP]
 SWI WRITEC ;top Y = bottom Y
 SWI WRITEI+12
 |
 SWI WRITEI+26
 SWI WRITEI+31
 MOV R0,R2
 SWI WRITEC
 LDR R0,[SP]
 SWI WRITEC
 SWI WRITES
 = 23,8,5,6,0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 ]
 [ OSTYPE=0
 B WIPEN1
WIPESIMPLE SWI WRITEI+28
 MOV R0,R2
 SWI WRITEC ;left X
 LDR R0,[SP]
 SWI WRITEC ;bottom Y
 LDRB R0,[ARGP,R14] ;right X from scrim
 SUB R0,R0,#1
 SWI WRITEC
 LDR R0,[SP]
 SWI WRITEC ;top Y = bottom Y
 SWI WRITEI+12
 ]
WIPEN1 STRB R2,[ARGP,R14]
 LDMFD SP!,{R0,PC}
BIGCUR SWI WRITEI+23
 SWI WRITEI+0
 SWI WRITEI+10
 SWI WRITEI+&60
 B CURPAD
NMLCUR SWI WRITEI+23
 SWI WRITEI+0
 SWI WRITEI+10
 SWI WRITEI+&67
 B CURPAD
CUROFF SWI WRITEI+23
 SWI WRITEI+1
 SWI WRITEI+0
 B CURPAD
CURON SWI WRITEI+23
 SWI WRITEI+1
 SWI WRITEI+1
CURPAD SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 SWI WRITEI+0
 MOV PC,R14
PATOUT BIC R2,R14,#&FC000003
 BL PATA
 BL PATA
 BL PATA
 BL PATA
 BL PATA
 BL PATA
 [ OSTYPE<>1
 BL VSTRNG
 = 23,255,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,0
 ]
 MOV R14,R2
 B CURPAD
PATA LDR R0,[R2],#4
 SWI WRITEI+23
 [ OSTYPE<>1
 SWI WRITEI+255
 |
 SWI WRITEI+132
 ]
 SWI WRITEC
 MOV R0,R0,ROR #8
 SWI WRITEC
 MOV R0,R0,ROR #8
 SWI WRITEC
 MOV R0,R0,ROR #8
 SWI WRITEC
 LDR R0,[R2],#4
 SWI WRITEC
 MOV R0,R0,ROR #8
 SWI WRITEC
 MOV R0,R0,ROR #8
 SWI WRITEC
 MOV R0,R0,ROR #8
 SWI WRITEC
 [ OSTYPE<>1
 SWI WRITEI+255
 |
 SWI WRITEI+132
 ]
 MOV PC,R14
WORDSP SWI WRITEI+" "
;print R8
WORDHX STMFD SP!,{R0,R2,R14}
 MOV R2,#32-4
WORDLP MOV R0,R8,LSR R2
 AND R0,R0,#15
 CMP R0,#9
 ORRLS R0,R0,#"0"
 ADDHI R0,R0,#"A"-10
 SWI WRITEC
 SUBS R2,R2,#4
 BPL WORDLP
 LDMFD SP!,{R0,R2,PC}
THREEOUT STMFD SP!,{R0,R2,R14}
 MOV R2,#12-4
 B WORDLP
SETARGP ADR ARGP,ZEEND
 STR R0,ZEPANIC
 LDR R0,ZEEND
 ADD ARGP,ARGP,R0
 LDR R0,ZEPANIC
 MOV PC,R14
ESCHAM ADR R12,ZEEND
 STR R0,ZEPANIC
 LDR R0,ZEEND
 ADD R12,R12,R0
 LDR R0,ZEPANIC
 MOV R11,R11,LSL #1
 STRB R11,[R12,#ESCFLG]
 MOV PC,R14
EVTHAM ADR R11,ZEEND
 STR R0,ZEPANIC
 LDR R0,ZEEND
 ADD R11,R11,R0
 LDR R0,ZEPANIC
 LDRB R11,[R11,#TASK]
 TEQ R11,#1
 BEQ EVTHAM1
 MOV PC,R14
STRUCTADDR ADR R9,(ZEEND+4)
 MOV PC,R14
ZEPANIC DCD 0
ZEEND
ZELEN * ZEEND-ORIGIN
 LNK Structs ;END
