{"id":117,"date":"2026-04-12T12:31:33","date_gmt":"2026-04-12T12:31:33","guid":{"rendered":"https:\/\/permacomputer.solarpunk.au\/?p=117"},"modified":"2026-04-13T17:46:28","modified_gmt":"2026-04-13T17:46:28","slug":"l-e-d","status":"publish","type":"post","link":"https:\/\/permacomputer.solarpunk.au\/?p=117","title":{"rendered":"L.E.D."},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"line-oriented-text-editor\">Line-Oriented Text Editor<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"arnie-lee\">Arnie Lee<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"abacus-software\">ABACUS SOFTWARE<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"published-compute-magazine-feb-1981.\">Published: Compute! Magazine; Feb, 1981.<\/h2>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"774\" height=\"1024\" data-id=\"120\" src=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-02-774x1024.jpg\" alt=\"\" class=\"wp-image-120\" srcset=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-02-774x1024.jpg 774w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-02-227x300.jpg 227w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-02-768x1016.jpg 768w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-02-1161x1536.jpg 1161w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-02.jpg 1257w\" sizes=\"auto, (max-width: 774px) 100vw, 774px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"766\" height=\"1024\" data-id=\"121\" src=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-03-766x1024.jpg\" alt=\"\" class=\"wp-image-121\" srcset=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-03-766x1024.jpg 766w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-03-224x300.jpg 224w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-03-768x1026.jpg 768w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-03-1149x1536.jpg 1149w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-03.jpg 1233w\" sizes=\"auto, (max-width: 766px) 100vw, 766px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"774\" height=\"1024\" data-id=\"122\" src=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-04-774x1024.jpg\" alt=\"\" class=\"wp-image-122\" srcset=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-04-774x1024.jpg 774w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-04-227x300.jpg 227w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-04-768x1016.jpg 768w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-04-1161x1536.jpg 1161w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-04.jpg 1247w\" sizes=\"auto, (max-width: 774px) 100vw, 774px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"1024\" data-id=\"119\" src=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-01-775x1024.jpg\" alt=\"\" class=\"wp-image-119\" srcset=\"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-01-775x1024.jpg 775w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-01-227x300.jpg 227w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-01-768x1014.jpg 768w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-01-1163x1536.jpg 1163w, https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-01.jpg 1257w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>The LED is line-oriented as opposed to word-oriented. As such, it cannot be considered a true word processor although it does provide many of the same capabilities as many of the other commercially available word processors. In fact, a slightly modified version of the LED was used to create this article. Although we wrote the LED to maintain program source statements, its usefulness is by no means limited to that application.<\/p>\n\n\n\n<p>The LED is a line oriented text editor. The entire source program must be in memory while the user is modifying it. Modifications allowed include appending source to the end of the text, inserting lines of text into the middle of existing text, changing occurrence of a character string to another string, and printing the text to a hard copy device. After creating or modifying the text, the user may then save it onto tape or diskette. Some of the key points to note when using the LED are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Each line is numbered;<\/li>\n\n\n\n<li>Each line can contain up to 80 characters;<\/li>\n\n\n\n<li>When entering 3 line, the line must be terminated by <code>RETURN<\/code> key;<\/li>\n\n\n\n<li>A maximum of 500 lines of text may be entered (this is subject to the memory capacity of your particular computer);<\/li>\n\n\n\n<li>As lines arc inserted or deleted from the source program, the remaining lines arc automatically renumbered;<\/li>\n\n\n\n<li>A line of source may extend more than one screen line on your CRT.<\/li>\n<\/ul>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"commands.\">Commands.<\/h1>\n\n\n\n<p>The following arc the descriptions of each of the commands:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"f\">\u2018F\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"enter-filer-portion-of-led.\">Enter FILER portion of LED.<\/h3>\n\n\n\n<p>This command allows you to use the LOAD or SAVE commands which arc described below:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"l\">\u2018L\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"load-file-from-tape-or-diskette.\">Load file from tape or diskette.<\/h3>\n\n\n\n<p>This command allows you to load a previously edited source program. The source program may have been saved on tape or diskette. After keying \u2018L\u2019 the LED will prompt you for the name of the source program. Key in the filename and depress <code>RETURN<\/code>. Do not key in the suffix <code>.SOURCE<\/code>. If you decide that you really don\u2019t want to load a file, then enter a null line instead of a filename. At this point you will be asked if the file was saved on tape or diskette (for the PET version of LED). Type \u2018T\u2019 or \u2018D\u2019 as appropriate. If the source program is on tape, then you must put the source file tape into cassette #1. For either tape or diskette, the filename that is keyed in must match the filename that is on the storage medium.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"s\">\u2018S\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"save-file-onto-tape-or-diskette.\">Save file onto tape or diskette.<\/h3>\n\n\n\n<p>This command allows you to save the current source program onto tape or diskette. After keying \u2018S\u2019, the LED will prompt you for the name of the file to be saved. Key in the file-name and then depress <code>RETURN<\/code>. The file-name is limited to twelve characters. The suffix <code>.SOURCE<\/code> will be added to the filename by the LED. If you decide that you really don\u2019t want to save a file, then enter a null line instead of a filename.<\/p>\n\n\n\n<p>At this point you will be asked if you want to save the file onto tape or diskette (for PET version of the LED). Type \u2018T\u2019 or \u2018D\u2019 as appropriate. If the source is to be saved onto tape, then you must put the tape into cassette #1.<\/p>\n\n\n\n<p>*** Note that tape is supported only in the PET version.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"a\">\u2018A\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"append-the-end-of-source.\">Append the end of source.<\/h3>\n\n\n\n<p>This command allows you to add lines to the end of the current source program. If you have not loaded any source program, then this command will allow you to create a new source program. You may append one or as many lines as you desire. To signal the end of append mode press <code>RETURN<\/code> when the cursor is sitting at the first character after the line number prompt (null line).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"c\">\u2018C\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"change-string.\">Change string.<\/h3>\n\n\n\n<p>This command allows you to change an existing string to a new string. It will make changes to either a single line or to a range of lines. Indicate a single line by keying in its line number followed by <code>RETURN<\/code>. Indicate a range of lines by keying the line number of the first line to be searched followed by \u2018-\u2019 and finally followed by the line number of the last line to be searched followed by <code>RETURN<\/code>. You will then be prompted for the change siring. The format for the changed string is:<\/p>\n\n\n\n<p><code>+ from-string + to-string +<\/code><\/p>\n\n\n\n<p>where:<\/p>\n\n\n\n<p><code>+<\/code> is a delimiter \u2014 any character may be used but it must not be contained in either the <code>from-string<\/code> or the <code>to-string<\/code>.<\/p>\n\n\n\n<p><code>from-string<\/code> is the string of characters which are to be replaced<\/p>\n\n\n\n<p><code>to-string<\/code> is the string of characters which are to replace the from-string in the original source line<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>e.g.  \/abc\/xyz\/ <\/code><\/pre>\n\n\n\n<p>in the above example all occurrences of <code>abc<\/code> will be replaced by <code>xyz<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>e.g.  \/abc\/\/ <\/code><\/pre>\n\n\n\n<p>in the above example all occurrences of \u2018<code>abc<\/code>\u2019 will be eliminated (replaced by nulls).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"d\">\u2018D\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"delete-line-or-range.\">Delete line or range.<\/h3>\n\n\n\n<p>This command allows you to delete a line or a range of lines from the source program in memory.<\/p>\n\n\n\n<p><code>DELETE RANGE(LOW,HIGH)-&gt; 80<\/code> will delete line 80<\/p>\n\n\n\n<p><code>DELETE RANGE(LOW,HIGH)-&gt; 80-90<\/code><\/p>\n\n\n\n<p>will delete lines 80 thru 90<\/p>\n\n\n\n<p><code>DELETE RANGE(LOW-HIGH)-&gt; -20<\/code><\/p>\n\n\n\n<p>will delete all lines thru 20<\/p>\n\n\n\n<p>\u2018I\u2019 insert lines into source program<\/p>\n\n\n\n<p>This command will allow you to insert lines into the existing source program. LED will prompt you for the line number before which you want to insert the new source statements. You may enter one or as many new lines as you desire. Follow each line with <code>RETURN<\/code>. To signal the end of INSERT mode press <code>RETURN<\/code> when the cursor is setting at the first character in the line (null).<\/p>\n\n\n\n<p>\u2018L\u2019 list source program<\/p>\n\n\n\n<p>This command allows you to list a line or range of lines.<\/p>\n\n\n\n<p><code>LIST RANGE(LOW-HIGH)-&gt; 80<\/code><\/p>\n\n\n\n<p>will list line 80<\/p>\n\n\n\n<p><code>LIST RANGE(LOW-HIGH)-&gt; 80-100<\/code><\/p>\n\n\n\n<p>will list lines 80 thru 100<\/p>\n\n\n\n<p><code>LIST RANGE(LOW-HIGH)-&gt; -20<\/code><\/p>\n\n\n\n<p>will list all lines thru 20<\/p>\n\n\n\n<p><code>LIST RANGE(LOW-HIGH)-&gt; NULL<\/code><\/p>\n\n\n\n<p>will list all lines<\/p>\n\n\n\n<p>With the LIST command only the following features are available:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"pet.\">PET.<\/h3>\n\n\n\n<p><code>RUN\/STOP<\/code> key &#8211; suspends the listing awaiting the depression of the <code>RETURN<\/code> key.<\/p>\n\n\n\n<p><code>SPACE BAR<\/code> &#8211; scrolls the listing one line at a time<\/p>\n\n\n\n<p><code>OFF\/RVS<\/code> key &#8211; slows the speeds of the listing<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"apple-ii.\">APPLE II.<\/h3>\n\n\n\n<p><code>ESC<\/code> key &#8211; suspends the listing awaiting the depression of the <code>RETURN<\/code> key.<\/p>\n\n\n\n<p><code>RETURN<\/code> key &#8211; reverts to normal speed listing after ESC<\/p>\n\n\n\n<p><code>SPACE BAR<\/code> &#8211; slows the speed of the listing<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"m\">\u2018M\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"menu-display.\">Menu display.<\/h3>\n\n\n\n<p>This command allows you to sec a more complete explanation of the commands than the abbreviated version which prompts you,<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"p\">\u2018P\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"print-source-program.\">Print source program.<\/h3>\n\n\n\n<p>This command allows you to print a line or range of lines to a hard copy printer. The PET is supported thru the IEEE interface as device 4. The APPLE II is supported thru slot 2. The range specifications are identical as LIST.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"q\">\u2018Q\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"quit-led.\">Quit LED.<\/h3>\n\n\n\n<p>This command allows you to gracefully exit from the LED. The LED gives you a chance to change your mind so that if you accidentally keyed <code>Q<\/code>, then you will have another opportunity to save your source file.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"r\">\u2018R\u2019<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"replace-a-line.\">Replace a line.<\/h3>\n\n\n\n<p>This command allows you to replace a single line only. After keying in the line number to be replaced, the LED will prompt you with that line number. Key in the replacement text and press return.<\/p>\n\n\n\n<p>e.g.&nbsp;<\/p>\n\n\n\n<p><code>REPLACE -LINE#-&gt; 108<\/code><\/p>\n\n\n\n<p>allows you to replace line 108.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"listing.\">Listing.<\/h1>\n\n\n\n<p>The listing which follows is the version of the LED for the PET\/CBM machines. The version for the APPLE II is very similar to the PET\/CBM version and runs under APPLESOFT. The major differences between the two versions are in the routines that handle the disk and printer I\/O.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>0 REM LINE EDITOR (c)1980 ABACUS SOFTWARE\n10 DIM T$(500):REM BUFFER SPACE\n20 L$=\"\":REM CURRENT LINE\n30 LL=1:REM LAST LINE #\n40 SP$=\" \":DL$=CHR$(20)\n50 EE=0:REM DISK ERROR CHANNEL CLOSED\n60 PR=0: REM PRINT CHANNEL\n90 POKE 144,49:REM DISABLE STOP KEY\n100 PRINT \"       ABACUS SOFTWARE LINE EDITOR\"\n110 PRINT \"      FUNCTIONS:\"\n130 PRINT\n140 PRINT TAB(8);\"A)PPEND-TO END OF TEXT\"\n150 PRINT TAB(8);\"C)HANGE-STRING\"\n160 PRINT TAB(8);\"D)ELETE LINE(S)\"\n170 PRINT TAB(8);\"F)ILER COMMANDS\"\n180 PRINT TAB(8);\"I)NSERT BEFORE LINE\"\n190 PRINT TAB(8);\"L)IST LINE(S)\"\n200 PRINT TAB(8);\"M)ENU DISPLAY\"\n210 PRINT TAB(8);\"P)RINT LINE(S)\"\n220 PRINT TAB(8);\"Q)UIT LEAVE EDITOR\"\n230 PRINT TAB(8);\"R)EPLACE LINE\"\n240 PRINT:PRINT \"    ENTER SELECTION-> \";\n250 GOTO 510\n500 PRINT:PRINT \"ENTER A,C,D,F,I,L,P,Q,R,M)ENU->\";\n510 GET A$:IF A$=\"\" THEN 510\n520 J=0:FOR I=1 TO 10\n530 IF A$=MID$(\"ACDFILRMQP\",I,1) THEN J=I:I=10\n540 NEXT I\n550 PRINT A$\n560 IF J=0 THEN 500\n570 ON J GOTO 1000,2000,3000,4000,5000,6000,7000,100,8000,9000\n1000 PRINT\n1005 PRINT \"APPEND TO END OF TEXT\"\n1010 PRINT:PRINT LL \">\";\n1020 GOSUB 10000:REM GO READ LINE\n1030 IF LEN(L$)=0 THEN 500\n1040 T$(LL)=L$\n1050 LL=LL+1\n1060 GOTO 1010\n2000 REM CHANGE STRING\n2010 PRINT:PRINT \"CHANGE\";:GOSUB 16000:REM GET RANGE\n2020 IF HI=0 THEN 500\n2025 PRINT \"CHANGE STRING->\";:GOSUB 10000:REM GET STRING\n2030 L=LEN(L$)\n2040 IF L=0 THEN 500\n2050 IF L&lt;4 THEN 2000\n2060 DM$=LEFT$(L$,1):REM DELIMITER\n2070 IF RIGHT$(L$,1)&lt;>DM$ THEN 2000\n2080 J=0: FOR I=2 TO L-1\n2090     IF MID$(L$,I,1)=DM$ THEN J=I\n2100 NEXT I\n2110 IF J=0 THEN 2000\n2120 IF J=2 THEN 2000\n2130 FR$=MID$(L$,2,J-2)\n2140 IF J+1=L THEN TS$=\"\":GOTO 2160\n2150 TS$=MID$(L$,J+1,L-J-1)\n2160 F=LEN(FR$)\n2170 FOR I=LO TO HI\n2180     T=LEN(T$(I)):S=1:NL$=\"\"\n2190     FOR J=1 TO T-F+1\n2200         IF MID$(T$(I),J,F)&lt;>FR$ THEN 2230\n2210         NL$=NL$+MID$(T$(I),S,J-S)+TS$\n2220         S=J+F:J=S-1\n2230     NEXT J\n2240     IF S&lt;>1 THEN NL$=NL$+RIGHT$(T$(I),T=S+1):T$(I)=NL$\n2250 NEXT I\n2260 GOTO 500\n3000 REM DELETE LINES(S)\n3005 PRINT:PRINT \"DELETE \";:GOSUB 16000:REM GET RANGE\n3010 IF NOT DF THEN 3015:REM NOT DEFAULT ON ENTIRE FILE\n3011 PRINT \"DELETE ENTIRE FILE? \";\n3012 GET A$:IF A$=\"\" THEN 3012\n3013 PRINT A$:IF A$=\"N\" THEN 500\n3014 IF A$&lt;>\"Y\" THEN 3011\n3015 IF HI>LL-1 THEN 500\n3020 IF HI=LL-1 THEN LL=LO:GOTO 500\n3030 J=HI-LO+1\n3040 FOR I=LO TO LL-J-1\n3050     T$(I)=T$(I+J)\n3060 NEXT I\n3070 LL=LL-(HI-LO)-1\n3080 GOTO 500\n4000 REM FILER\n4010 PRINT \"FILER ENTER L)OAD OR S)AVE-> \";\n4020 GET A$:IF A$=\"\" THEN 4020\n4030 IF A$&lt;>\"L\" AND A$&lt;>\"S\" THEN PRINT:GOTO 4000\n4040 PRINT A$:M$=A$\n4050 PRINT \"ENTER FILENAME-> \";\n4070 GOSUB 10000\n4075 IF LEN(L$)=0 THEN 500\n4076 IF LEN(L$)>12 THEN 4050\n4080 FI$=L$\n4090 PRINT \"ENTER D)ISK OR T)APE-> \";\n4100 GET A$:IF A$=\"\" THEN 4100\n4110 PRINT A$\n4120 IF A$&lt;>\"D\" AND A$&lt;>\"T\" THEN 4090\n4130 IF A$=\"D\" THEN 4160:REM DISK ROUTINES\n4140 IF M$=\"L\" THEN 4400\n4150 GOTO 4200\n4160 DR$=\"\":IF LEFT$(FI$,2)&lt;>\"0:\" AND LEFT$(FI$,2)&lt;>\"1:\" THEN DR$=\"0:\"\n4170 GOTO 4600\n4200 REM TAPE SAVE\n4210 IF LL=1 THEN PRINT \"NO FILE TO SAVE\":GOTO 500\n4220 OPEN 2,1,2,FI$+\".SOURCE\"\n4230 FOR I=1 TO LL-1\n4230     FOR J=1 TO LEN(T$(I))\n4250         PRINT# 2,MID$(T$(I),J,1);\n4260\t NEXT J\n4270     PRINT# 2,CHR$(255);\n4280 NEXT I\n4290 CLOSE 2\n4300 PRINT SPC(6);FI$;\" SAVED\"\n4310 GOTO 500\n4400 REM TAPE LOAD\n4410 OPEN 2,1,0,FI$+\".SOURCE\"\n4430 IF=L0:REM LINE COUNT\n4440 LL=LL+1:T$(LL)=\"\"\n4450 GET# 2,A$\n4460 IF ST=64 THEN 4500:REM END OF FILE\n4465 IF ST&lt;>0 THEN PRINT \"*** LOAD ERROR ***\":GOTO 500\n4470 IF A$=CHR$(255) THEN 4440:REM END OF LINE\n4480 T$(LL)=T$(LL)+A$\n4490 GOTO 4450\n4500 CLOSE 2\n4510 PRINT SPC(6);FI$;\" LOADED\"\n4520 LL+LL+1\n4530 GOTO 500\n4600 REM DISK SAVE\n4610 IF M$=\"L\" THEN 4800\n4620 IF LL=1 THEN PRINT \"NO FILE TO SAVE\":GOTO 500\n4630 FL$=\"@0\"+DR$+FI$+\".SOURCE,S,W\"\n4640 OPEN 2,8,2,FL$\n4650 GOSUB 20000:REM ERROR CHECK\n4655 IF E1&lt;>0 THEN 500\n4660 FOR I=1 TO LL-1\n4670     FOR J=1 TO LEN(T$(I))\n4680         PRINT# 2,MID$(T$(I),J,1);\n4690     NEXT J\n4700     PRINT# 2,CHR$(255);\n4710 NEXT I\n4720 CLOSE 2\n4730 PRINT SPC(6);FI$;\" SAVED\"\n4740 GOTO 500\n4800 REM DISK LOAD\n4810 FL$=DR$+FI$+\".SOURCE,S,R\"\n4820 OPEN 2,8,2,FL$\n4830 GOSUB 20000:REM ERROR CHECK\n4835 IF E1&lt;>0 THEN 500\n4840 LL=0:REM LINE COUNT\n4850 LL=LL+1:T$(LL)=\"\"\n4860 GET# 2,A$\n4870 IF ST=64 THEN 4500: REM END OF FILE\n4880 IF ST&lt;>0 THEN GOSUB 20000:GOTO 500\n4890 IF A$=CHR$(255) THEN 4850:REM END OF LINE\n4900 T$(LL)=T$(LL)+A$\n4910 GOTO 4860\n4920 CLOSE 2\n4930 PRINT SPC(6);FI$;\" LOADED\"\n4940 LL=LL+1\n4950 GOTO 500\n5000 REM INSERT LINE\n5010 PRINT:PRINT \"INSERT BEFORE \";:GOSUB 17000:REM GET LINE #\n5015 IF LO>LL OR LO&lt;1 THEN 5000\n5020 PRINT:PRINT LO;\">\";\n5030 GOSUB 10000:REM READ LINE\n5040 IF LEN(L$)=0 THEN 500\n5050 LL=LL+1\n5060 FOR I=LL TO LO STEP -1\n5070     T$(LO)=L$\n5080 NEXT I\n5090 T$(LO)=L$\n5100 LO=LO+1\n5110 GOTO 5020\n6000 REM LIST LINES\n6010 PRINT:PRINT \"LIST \";:GOSUB 16000:REM GET RANGE\n6020 IF HI=0 THEN 500\n6030 SS$=\"N\":PRINT:FOR I=LO TO HI:REM PERFORM LIST\n6040 PRINT I;\">\";T$(I)\n6050 GET A$:OF A$=CHR$(18) THEN FOR J=1 TO 1024:NEXT J\n6060 IF A$&lt;>CHR$(3) THEN 6110\n6070 SS$=\"Y\"\n6080 GET A$:IF A$=CHR$(13) THEN SS$=\"N\":GOTO 6110\n6090 IF A$&lt;>CHR$(32) THEN 6070\n6100 GOTO 6120\n6110 IF SS$=\"Y\" THEN 6070\n6120 NEXT I\n6130 GOTO 500\n7000 REM REPLACE LINE\n7010 PRINT:PRINT \"REPLACE \";:GOSUB 17000:REM GET LINE #\n7020 IF LO>=LL OR LO&lt;1 THEN 7000\n7030 PRINT:PRINT LO;\">\";\n7040 GOSUB 10000:REM READ LINE\n7050 IF LEN(L$)=0 THEN 500\n7060 T$(LO)=L$\n7070 GOTO 500\n8000 REM QUIT\n8010 PRINT:PRINT \"     LEAVE EDITOR-ARE YOU SURE? \";\n8020 GET A$:IF A$=\"\" THEN 8020\n8030 PRINT A$\n8040 IF A$&lt;>\"Y\" AND A$&lt;>\"N\" THEN 8000\n8050 IF A$=\"N\" THEN 500\n8060 PRINT:PRINT \"           ** END LINE EDITOR **\"\n8070 POKE 144,46:REM ENABLE STOP KEY\n8080 END\n9000 REM PRINT LINE\n9010 IF PR=0 THEN PR=4 OPEN PR,PR\n9020 PRINT \"PRINT \";:GOSUB 16000:REM GET RANGE\n9030 IF HI=0 THEN 500\n9040 FOR I=LO TO HI:REM PERFORM PRINT\n9050     PRINT# PR,I;\": \";T$(I)\n9060 NEXT I\n9070 PRINT# PR\n9080 PRINT# PR,\"***\";LL-1;\"LINES IN BUFFER ***\"\n9090 PRINT #PR\n9100 GOTO 500\n10000 REM INPUT A LINE OF TEXT\n10010 L$=\"\"\n10020 PRINT \"$&lt;-\";\n10030 GET A$:IF A$=\"\" THEN 10030\n10040 IF A$=CHR$(13) THEN PRINT \" \":RETURN\n10050 IF LEN(L$)>80 THEN GOTO 15000\n10060 IF A$>=SP$ AND A$&lt;=CHR$(95) THEN 10100\n10065 IF A$>=CHR$(161) AND A$&lt;=CHR$(223) THEN 10100\n10070 IF A$&lt;>DL$ THEN GOTO 10030\n10080 IF LEN(L$)>0 THEN PRINT A$;:L$=LEFT$(L$,LEN(L$)-1)\n10090 GOTO 10020\n10100 L$=L$+A$:PRINT A$;:GOTO 10020\n15000 REM LINE INPUT ERROR\n15010 PRINT:PRINT \"ERROR LINE TRUNCATED\"\n15020 RETURN\n16000 PRINT \"RANGE(LOW,HIGH)-> \";\n16010 GOSUB 10000:REM INPUT RANGE\n16020 LO=1:HI=LL-1:REM DEFAULT LIST ALL\n16025 L=LEN(L$)\n16030 DF=0:IF L=0 THEN DF=-1:GOTO 16150\n16040 J=0:FOR I=1 TO L\n16050 A$=MID$(L$,I,1)\n16060 IF A$>=\"0\" AND A$&lt;=\"9\" THEN 16090\n16070 IF A$=\"-\" THEN J=I:GOTO 16090\n16080 J=99:I=99\n16090 NEXT I\n16100 IF J=99 THEN 16000\n16110 IF J=0 THEN LO=VAL(L$):HI=LO:RETURN\n16120 IF J>1 THEN LO=VAL(LEFT$(L$,J-1))\n16130 IF J&lt;L THEN HI=VAL(RIGHT$(L$,L-J))\n16140 IF LO>HI THEN 16000\n16150 RETURN\n17000 PRINT \"-LINE#->\";\n17010 GOSUB 10000:REM INPUT LINE#\n17020 L=LEN(L$)\n17030 IF L=0 THEN 17000\n17040 J=0\n17050 FOR I=1 TO L\n17060     A$=MID$(L$,I,1)\n17070     IF A$>=\"0\" AND A$&lt;=\"9\" THEN 17090\n17080     J=99:I=L\n17090 NEXT I\n17100 IF J=99 THEN 17000\n17110 LO=VAL(L$)\n17120 RETURN\n20000 IF EE=0 THEN EE=15:OPEN EE,8,EE\n20010 INPUT# EE,E1,E2$,E3,E4\n20020 IF E1=0 THEN RETURN\n20030 PRINT E1;\",\";E2$;\",\";E3:\",\";E4\n20040 PRINT \"*** DISK ERROR ***\"\n20050 CLOSE 2\n20060 RETURN\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Line-Oriented Text Editor Arnie Lee ABACUS SOFTWARE Published: Compute! Magazine; Feb, 1981. The LED is line-oriented as opposed to word-oriented. As such, it cannot be considered a true word processor although it does provide many of the same capabilities as many of the other commercially available word processors. In fact, a slightly modified version of [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":119,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[18],"tags":[13,20,17],"class_list":["post-117","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-basic-text-editors","tag-8k-basic","tag-basic","tag-retrocomputing"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/permacomputer.solarpunk.au\/wp-content\/uploads\/2026\/04\/led-page-01.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/posts\/117","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=117"}],"version-history":[{"count":3,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/posts\/117\/revisions"}],"predecessor-version":[{"id":124,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/posts\/117\/revisions\/124"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=\/wp\/v2\/media\/119"}],"wp:attachment":[{"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=117"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=117"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/permacomputer.solarpunk.au\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=117"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}