rem ////////////////////////////////////////////////////////// rem Program: Hreodwrit - A writing pen rem Author: Bill Chatfield rem License: GPL2 rem ////////////////////////////////////////////////////////// section variables dim b$(500) { Editing buffer } d$=chr$(4) f${nameOfFileInEditor}="" lc{lineCount}=0 ml{maxLines}=500 mc{maxColumns}=255 cx{currentScreenX}=1 cy{currentScreenY}=1 cl{currentLineInFile}=1 cc{currentColumnInFile}=1 sw{screenWidth}=40 sh{screenHeight}=24 bm{bufferModified}=0 oa{openApple}=0 closesection section splash text print "Hreodwrit - A writing pen" print "Copyright (c) 2019 Bill Chatfield" print "Distributed under the GPLv2" closesection section main gosub @openFile gosub @display £eventLoop # Check open apple and closed apple keys get k$ if peek(49249) > 127 then goto @openApplePressed if asc(k$) = 3 then gosub @copyText £openApplePressed if k$ = "s" then gosub @saveFile goto @eventLoop £atExit if bm{bufferModified} = 0 then goto @exit print "Save file ";f${nameOfFileInEditor};"? (Y/N) "; get k$ print k$ if k$ = "y" or k$ = "Y" then gosub @saveFile £exit end closesection £openFile print "File:"; input f$ if f$ = "" then return print d$;"open";f$ print d$;"read";f$ lc{lineCount}=0 on err goto @errorHandler £readLineLoop if lc{lineCount} < ml{maxLines} then goto @addLine print "File too large: ";f${nameOfFileInEditor} print d$;"close";f$ end £addLine lc{lineCount}=lc{lineCount}+1 input b$(lc{lineCount}) goto @readLineLoop £errorHandler poke 216,0 { Turn off error handler } e = peek(222) { Get the error code } print d$;"close";f$ { Close the open file } if e < > 5 then goto @die { 5 is the expected EOF } return £saveFile print d$;"open";f$ print d$;"write";f$ on err goto @errorHandler for i = 1 to lc{lineCount} print b$(i) next £errorHandler poke 216,0 { Turn off error handler } e = peek(222) { Get the error code } print d$;"close";f$ { Close the open file } goto @die return £saveAsFile print "File:"; input f$ print d$;"open";f$ print d$;"write";f$ on err goto @errorHandler for i = 1 to lc{lineCount} print b$(i) next £errorHandler poke 216,0 { Turn off error handler } e = peek(222) { Get the error code } print d$;"close";f$ { Close the open file } goto @die return £display home for i = 1 to 24 print b$(i) next return £die print "Error ";e end