$B$$$$$<AAA>>QIE>IIIAAAIIIAAAA>"AII6B@ AA??@@@?@@@@y"AII6


001  REM ------------ LAWRENCE UNIVERSITY ------------
002  REM ------------ COMPUTER CENTER     ------------
003  REM ------------ APPLETON, WISCONSIN 54911 ------
004  REM ------------ (414) 739-3681      ------------
005  ! --------------
006  REM -- PROGRAM NAME, VERSION AND DATE--
007  REM --     TEXTED VERSION 1-B   11-JUNE-73
008  ! --------------
009  REM -- PROGRAM AUTHORSHIP--
010  REM --     TEXTED WAS DESIGNED AND AUTHORED BY
011  REM --     MR. ANDREW RIEBS,
012  REM --     LAWRENCE UNIVERSITY COMPUTER CENTER.
013  ! --------------
014  REM -- PURPOSE OF PROGRAM--
015  REM --     TEXTED IS A GENERAL TEXT (INCLUDING
016  REM --     NATURAL LANGUAGE AND BASIC-PLUS
017  REM --     PROGRAM) TEXT EDITER.  IT ALLOWS ADDITIONS
018  REM --     OR DELETIONS OF SINGLE CHARACTERS AND/OR
019  REM --     ENTIRE LINES ON DISK STORED FILES.
020  REM --     TEXTED GIVES THE USER OF A 64
021  REM --     CHARACTER ASR 33 TERMINAL ESSENTIALLY
022  REM --     THE SAME EDITTING CAPABILITIES HE WOULD HAVE
023  REM --     ON A CRT TERMINAL.
024  ! --------------
025  REM -- LANGUAGE AND OPERATING SYSTEM--
026  REM --     TEXTED IS WRITTEN IN BASIC-PLUS FOR
027  REM --     OPERATION UNDER RSTS VERSION 4A ON A
028  REM --     PDP 11/20 WITH 28K OF CORE AND AT
029  REM --     LEAST ONE DISK DRIVE.  IT MAKES USE OF
030  REM --     CERTAIN SYS FUNCTIONS PRESENT IN V4A OF
031  REM --     RSTS.  (FOR DETAILS, SEE BASIC-PLUS
032  REM --     LANGUAGE MANUAL [DEC-11-ORBPA-A-D] AND
033  REM --     THE RSTS-11 SYSTEM MANAGER'S GUIDE
034  REM --     [DEC-11-ORSMA-B-D].)  TEXTED ASSUMES
035  REM --     I/O FROM 64 CHARACTER ASCII TERMINALS.
036  ! --------------
037  REM -- AVAILABILITY--
038  REM --     TEXTED IS A NON-PROPRIETARY PROGRAM
039  REM --     PRODUCT OF LAWRENCE UNIVERSITY.
040  REM --     IT IS DISTRIBUTED AT COST FOR
041  REM --     EDUCATIONAL USE, ON THE CONDITION THAT
042  REM --     IT NOT BE SOLD, RENTED, OR LEASED
043  REM --     FOR PROFIT.
044  ! --------------
045  REM -- LIMITATIONS--
046  REM --     NONE.
047  ! --------------
048  REM -- FURTHER DOCUMENTATION--
049  REM --     COMPLETE DOCUMENTATION, INCLUDING A
050  REM --     USER'S GUIDE TO TEXTED, WILL BE FOUND
051  REM --     IN THE LAWRENCE UNIVERSITY COMPUTER
052  REM --     CENTER PUBLICATION ESPD NO. PDP 11/73/1,
053  REM --     WHICH WILL BE REPRODUCED IN VERSION 2
054  REM --     OF THE USER'S GUIDE TO THE LAWRENCE UNIVERSITY
055  REM --     PDP 11/20 RSTS SYSTEM TO BE PUBLISHED IN
056  REM --     AUGUST, 1973.
057  ! --------------
058  REM -- DISCLAIMER--
059  REM --     NEITHER THE AUTHOR OF THIS PROGRAM OR
060  REM --     LAWRENCE UNIVERSITY ASSUME ANY LIABILITY,
061  REM --     EXPRESSED OR IMPLIED, WITH RESPECT TO THE
062  REM --     CORRECTNESS OR PERFORMANCE OF THIS PROGRAM.
063  ! --------------
100 DIM M%(30%) : V$=SYS(CHR$(6%)+CHR$(-10%))
    : CHANGE V$ TO M%
    : R4$=".J"+MID(NUM$(100%+M%(1%)/2%),3%,LEN(NUM$(100%+M%(1%)/2%))-2%)
101        ! CREATE A UNIQUE EXTENSION FOR TEMP FILES BASED ON JOB NO.
109  ! --------------
110  REM -- FUNCTION TO DECODE NUMBERS IN COMMANDS
111  ! --------------
120 DEF FNA$(C$) : N$="" : CHANGE C$ TO M% : FOR I%=1% TO M%(0%) 
    :  N$=N$+CHR$(M%(I%)) IF (M%(I%)>47% AND M%(I%)<58%) OR M%(I%)=45% 
    :  NEXT I% : FNA$=N$ : FNEND
121        ! FUNCTION EXTRACTS NUMBERS AND MINUS SIGN FROM COMMAND
130 V$=SYS(CHR$(6%)+CHR$(-7%))
           ! CATCH CTRL/C AS AN ERROR
140 PRINT "TEXT EDITOR VERSION 1-B" : PRINT
           ! ANNOUNCE THAT THE TEXT EDITOR IS HERE!!  (TA-DA)
150 PRINT "NAME.EXT OF FILE THAT NEEDS EDITTING--"; 
    : OPEN "KB:" AS FILE 1% : INPUT #1% R9$ : CLOSE 1% 
    : ON ERROR GOTO 160 : OPEN R9$ FOR INPUT AS FILE 1% : GOTO 170 
151        ! GET THE NAME OF THE FILE TO EDIT AND MAKE SURE IT EXISTS
160 IF ERR=28% THEN RESUME 1590 ELSE
      PRINT "CAN'T FIND FILE, ARE YOU USING THE EXTENSION?" 
    : RESUME 150 
161        ! ASSUME ANYTHING BUT CTRL/C IS 'CAN'T FIND FILE'
170 PRINT "ONE MOMENT PLEASE."
           ! LET THE USER KNOW THIS MIGHT TAKE A LITTLE TIME
180 ON ERROR GOTO 1560 : W%=1% : Y%=8% : GOSUB 1050 
181        ! GO OPEN THE FIRST TEMP FILE AS FILE 8%
190 PRINT "I'M READY"
191        ! TELL THE USER WE ARE SET TO GO
200 V$=SYS(CHR$(0%)) : ON ERROR GOTO 1560 
    : OPEN "KB:" AS FILE 1% : INPUT #1%,"*";C$
    : CLOSE 1% : ON ERROR GOTO 250 : Z%=VAL(FNA$(C$))
201        ! PRINT THE * AND GET THE COMMANDS
209  ! --------------
210  REM -- COMMAND REFERENCE AREA MODULE (CRAM)
211  ! --------------
220 IF LEFT(C$,2%)="SK" THEN C$="K" ELSE IF LEFT(C$,2%)="SH" THEN
    C$="O" ELSE IF LEFT(C$,4%)="INST" THEN C$="N"
        ! CONVERT LONG FORM OF COMMAND INTO SHORT FORM
221        ! DECODE COMMANDS (SHOW, SKIP AND INSTRUCTIONS HANDLED EXTRA)
225 C%=ASCII(C$)
        ! MAKE C% THE ASCII EQUIVALENT OF C$
230 IF C%-64%>9% THEN C%=C%-9% : GOTO 236
233 ON C%-64% GOSUB 420, 710, 450, 290,1230,330,510,760,260
           !         A,   B,   C,   D,   E,  F,  G,  H,  I
235 GOTO 200
236 ON C%-64% GOSUB 310,620,600,380,1200,400,790
           !        J,  K,  L,  M,  N,   O,  P
240 GOTO 200 
250 IF ERR=28% THEN RESUME 1590 ELSE PRINT"UNRECOGNIZED COMMAND-"C$
    : RESUME 200 
           ! TELL THE STUPID USER THIS IS NOT A VALID COMMAND
259  ! --------------
260  REM -- INSERT CHARACTERS
261  ! --------------
270 PRINT "I>"; : D%=R0% : R5$=LEFT(A$,D%-1%) : R6$=RIGHT(A$,D%) 
    : OPEN "KB:" AS FILE 1% : INPUT LINE #1%,Z$ : CLOSE 1%
           ! R0% IS DOT'S LOCATION, BREAK THE LINE AT DOT AND SAVE THE
             HALVES
280 Z$=LEFT(Z$,LEN(Z$)-1%) : IF RIGHT(Z$,LEN(Z$))=CHR$(10%)
      OR RIGHT(Z$,LEN(Z$))=CHR$(13%) THEN 280 ELSE
      A$=R5$+Z$+R6$ : RETURN
281        ! CHOP OFF THE <CR>; KEEP THE NEW CHARACTERS, AND REASSEMBLE
             THE LINE
289  ! --------------
290  REM -- DELETE CHARACTERS
291  ! --------------
300 D%=R0% : D1%=D% : D2%=D% : Z%=1% IF Z%=0% : D1%=D%+Z% IF Z%>0% 
    : D2%=D%+Z% IF Z%<0% : R0%=D2% IF Z%<0%
    : R5$=LEFT(A$,D2%-1%) : R6$=RIGHT(A$,D1%) : A$=R5$+R6$
    : RETURN
301        ! R0% IS DOT'S POSITION.  DELETE Z CHARACTERS FROM THE LINE
309  ! --------------
310  REM -- JUMP THE DOT
311  ! --------------
320 D%=R0% : Z%=1% IF Z%=0% : D1%=1% IF D%+Z%<1% : D1%=D%+Z% IF D%+Z%>0% 
    : R0%=D1% : RETURN
           ! JUMP THE DOT Z CHARACTERS (FORE OR AFT). R0% IS FINAL
             POSITION
329  ! --------------
330  REM -- (F)IND A STRING IN THIS LINE
331  ! --------------
340 PRINT "FIND";
    : INPUT LINE B$
           ! GET THE STRING TO LOOK FOR
350 B$=LEFT(B$,LEN(B$)-1%)
    : IF RIGHT(B$,LEN(B$))=CHR$(13%) OR RIGHT(B$,LEN(B$))=CHR$(10%)
      THEN 350 
351        ! CHOP THE LINE DELIMITER OFF THE STRING TO LOOK FOR
360 Z%=INSTR(R0%,A$,B$):IF Z%=0% THENPRINT"CAN'T FIND "B$ ELSE R0%=Z%
           ! R0% IS THE FIRST CHARACTER OF THE STRING (IF WE FOUND IT)
             OTHERWISE TELL THE USER THAT STRING DOESN'T EXIST 
370 RETURN
371        ! GO BACK TO CRAM
379  ! --------------
380  REM -- MERGE TWO LINES
381  ! --------------
390 A$=LEFT(A$,LEN(A$)-1%) : IF RIGHT(A$,LEN(A$))=CHR$(10%) OR
      RIGHT(A$,LEN(A$))=CHR$(13%) THEN 390 ELSE
      INPUT LINE #W%,B$ : A$=A$+B$ : RETURN
391        ! PULL THE LINE DELIMITERS FROM THE CURRENT LINE AND ADD
             THE NEXT LINE TO IT
399  ! --------------
400  REM --SHOW THE DOT'S LOCATION
401  ! --------------
410 PRINT RIGHT(A$,R0%) : RETURN
           ! PRINT THE CURRENT LINE FROM DOT TO FINISH
419  ! --------------
420  REM -- ADD (INSERT) LINES
421  ! --------------
430 PRINT ">"; : R0%=1% : OPEN "KB:" AS FILE 1%
    : INPUT LINE #1%, A1$ : CLOSE 1% : IF ASCII(A1$)=60% AND
      ASCII(MID(A1$,2%,1%))<32% THEN 440 ELSE R1%=R1%+1%
    : PRINT #Y%,A$; : A$=A1$+"" : GOTO 430
431        ! ADD LINES AND SAVE THEM IN THE TEMP FILE.  R1% COUNTS THE
             NUMBER OF LINES SINCE THE BEGINNING.  KEEP ADDING
             UNTIL THE USER TYPES '<'.
440  RETURN
           ! THE "<" IS NOT ADDED AS A LINE
449  ! --------------
450  REM -- CLOBBER (DELETE) LINES
451  ! --------------
460 R0%=1% : Z%=1% IF Z%=0% : IF Z%<0% THEN 480 
           ! IF NO NUMBER WAS SPECIFIED, ASSUME 1. (Z IS NUMBER OF
             LINES TO CLOBBER.)
470 ON ERROR GOTO 490 : FOR I%=1% TO Z% : INPUT LINE #W%,A$ : NEXT I%
    : RETURN
           ! KILL Z LINES BY NOT WRITING THEM IN THE TEMP FILE
480 H%=R1% : PRINT #Y%,A$; : GOSUB 800 : GOSUB 880 : R1%=H%+Z%
    : Z%=ABS(Z%) : ON ERROR GOTO 490 : FOR I%=1% TO R1%-1%
    : PRINT #Y%,A$; : INPUT LINE #W%,A$ : NEXT I% : GOTO 470 
481        ! IF Z (THE NUMBER OF LINES TO CLOBBER) IS NEGATIVE
             BACK UP Z LINES AND CLOBBER THEM
490 IF ERR=28% THEN RESUME 1590 ELSE RESUME 500 
           ! IF THE ERROR ISN'T A CTRL/C, IT MUST BE AN "END OF FILE"
500 GOSUB 880 : PRINT "YOU ARE NOW AT LINE"R1% : RETURN
           ! GO CLOSE THE TEMP FILE AND REOPEN IT (START OVER)
             THE USER TRIED TO CLOBBER LINES HE DIDN'T HAVE
509  ! --------------
510  REM -- GET A STRING
511  ! --------------
520 PRINT "GET";
    : INPUT LINE B$
           ! GET THE STRING TO LOOK FOR
530 B$=LEFT(B$,LEN(B$)-1%)
    : IF RIGHT(B$,LEN(B$))=CHR$(13%) OR RIGHT(B$,LEN(B$))=CHR$(10%)
      THEN 530 
531        ! CHOP THE LINE DELIMITERS OFF THE STRING TO LOOK FOR
540 Z%=INSTR(0%,A$,B$) : IF Z% THEN R0%=Z% : RETURN
           ! IF WE FOUND THE STRING, POINT TO IT (R0% IS POINTER)
550 ON ERROR GOTO 580 
           ! SET SOMEWHERE TO GO IF WE RUN OUT OF FILE
560 PRINT #Y%,A$; : R1%=R1%+1%
           ! SAVE THE CURRENT LINE, AND ADD 1 TO THE LINE COUNTER (R1%)
570 INPUT LINE #W%,A$ : GOTO 540
           ! GET THE NEXT LINE OF THE FILE AND SEE IF THE STRING IS HERE
580 IF ERR=28% THEN RESUME 1590 ELSE PRINT "REQUESTED STRING NOT FOUND"
    : RESUME 590 
           ! TELL THE USER WE CAN'T FIND HIS STRING
590 A$="" : GOSUB 760 : PRINT "YOU ARE NOW AT LINE"R1%
    : RETURN
           ! FAKE A HOME INSTRUCTION AND TELL THE USER HE IS AT LINE 1
599  ! --------------
600  REM -- (L)IST LINES
601  ! -------------
610 Z%=1% IF Z%<=0% : PRINT A$; : FOR I%=R1% TO R1%+Z%-2%: PRINT #Y%,A$;
    : R1%=R1%+1 : ON ERROR GOTO 660 : INPUT LINE #W%,A$
    : PRINT A$; : NEXT I% : RETURN
611        ! LIST Z LINES (LIST ONLY THE CURRENT LINE IF Z<0)
619  ! --------------
620  REM -- SKIP LINES
621  ! --------------
630 F%=0% : R0%=1% : Z%=1% IF Z%=0% : S%=R1%+Z% : IF S%<R1% THEN 670 
      ELSE H9%=R1% 
           ! FIGURE OUT IF WE'RE SKIPPING FORWARD OR BACKWARD
640 R1%=S% : ON ERROR GOTO 660 : FOR I%=H9% TO S%-1%
    : PRINT #Y%,A$; : INPUT LINE #W%,A$ : NEXT I%
           ! SKIP FORWARD Z LINES (SAVE LINES IN THE TEMP FILE)
650 IF F%<>1% THEN RETURN ELSE A$="" : GOSUB 760 
    : PRINT "YOU ARE NOW AT LINE"R1% : RETURN
           ! RETURN AFTER SKIP (F IS NEVER 1)
660 IF ERR=28% THEN RESUME 1590 ELSE PRINT "LAST LINE WAS"I% 
    : RESUME 700 
           ! ASSUME  ERROR IS "END OF FILE" .  GO FAKE A HOME INSTR.
670 PRINT #Y%,A$; : R1%=R1%+1% : H5%=R1%+Z% : H9%=R1% : GOSUB 800 
    : GOSUB 880 : IF H5%<0% THEN S%=0% ELSE S%=H5%-1%
           ! SKIP BACKWARD Z LINES
680 H5%=R1%+Z% : H9%=R1%
           ! TRANSLATE THE NEGATIVE SKIP INTO A FORWARD SKIP
690 H9%=1% : GOTO 640 
           ! WE HAVE BACKED UP TO THE BEGINNING, NOW SKIP UP TO THE
             CURRENT LINE MINUS Z
700 A$="" : GOSUB 760 : PRINT"YOU ARE NOW AT LINE"R1% : RETURN
           ! WE SKIPPED PAST THE END OF THE FILE.  PUT THE POINTER
             AT THE HOME POSITION
709  ! --------------
710  REM -- (B)REAK A LINE (INSERT <CR>-<LF>)
711  ! -----------,--
720 D%=R0%
           ! D IS THE CURRENT POSITION OF THE DOT
730 R5$=LEFT(A$,D%-1%) : R6$=RIGHT(A$,D%)
           ! BREAK THE LINE AT DOT
740 IF Z%<>1% THEN Z$=CHR$(13%)+CHR$(10%)
      ELSE Z$=CHR$(10%)+CHR$(13%)+CHR$(0%)
           ! IS THIS A BREAK OR BREAK 1
750 A$=R5$+Z$+R6$ : PRINT #Y%,LEFT(A$,D%+1%); : A$=RIGHT(A$,D%+2%)
    : R1%=R1%+1% : R0%=1% : RETURN
           ! PUT THE PART OF THE OLD LINE BEFORE THE DOT INTO THE
             TEMP FILE
759  ! --------------
760  REM -- HOME  (BACK TO BEGINNING OF FILE)
761  ! --------------
770 IF Z%=1% THEN R0%=1% : RETURN
           ! IF THIS IS AN H 1 THEN JUST MOVE THE POINTER TO THE 
             BEGINNING OF THE LINE!!
780 PRINT #Y%,A$; : GOSUB 800 : GOSUB 880 : RETURN
           ! MOVE THE POINTER TO THE BEGINNING OF THE FILE
789  ! ---------------
790  REM -- (P)ROVE THIS LINE
791  ! ---------------
792 PRINT A$; : RETURN
799  ! --------------
800  REM --  COPY A FILE LINE BY LINE
801  ! --------------
810 ON ERROR GOTO 1520 
820 INPUT LINE#W%,A$ : PRINT#Y%,A$; : GOTO 820 
           ! COPY THE FILE A LINE AT A TIME
830 ON ERROR GOTO 860 : IF ERR=28% THEN RESUME 1590 ELSE RESUME 840 
840 PRINT #Y%,CHR$(26%)
           ! PUT THE END-OF-FILE CHARACTER IN THE FILE
850 GOTO 870 
           ! BACK TO BUSINESS
860 IF ERR=28% THEN RESUME 1590 ELSE RESUME 870 
870 ON ERROR GOTO 1560 : RETURN
           ! RETURN TO POINT OF DEPARTURE
879  ! --------------
880  REM -- RESET FIHES (GET BACK TO THE BEGINNING)
881  ! --------------
890  CLOSE Y%,W%
           ! CLOSE THE FLIP-FLOP FILES
900 IF R3%=9% THEN R3%=8% ELSE R3%=9%
           ! R3% IS THE NEW TEMP OUTPUT FILE NUMBER (8 OR 9)
910 IF R3%=8% THEN 920 ELSE 930
           ! DECIDE WHICH FLIP-FLOP IS THE NEW SOURCE FILE
920 Y%=8% : W%=9% : GOTO 940
           ! TEXT02 IS THE NEW TEMP OUTPUT FILE
930 Y%=9% : W%=8%
           ! TEXT01 IS THE NEW TEMP OUTPUT FILE
940 OPEN R7$ AS FILE 8%
           ! OPEN THE FIRST FLIP-FLOP FILE
950 OPEN R8$ AS FILE 9%
           ! OPEN THE SECOND FLIP-FLOP FILE
960 R1%=1% : R0%=1%
           ! SET THE POINTER AND LINE COUNTER TO THE HOME POSITION
970 ON ERROR GOTO 1000 
980 INPUT LINE #W%,A$
           ! HERE IS THE FIRST LINE OF TEXT
990 RETURN
           ! BACK TO BUSINESS
1000 PRINT"YOU HAVE NO TEXT LEFT IN YOUR REVISED FILE."
1010 PRINT"YOUR ONLY ALTERNATIVE AT THIS POINT, IF YOU DO"
1020 PRINT"NOT FEEL YOUR TEXT SHOULD HAVE BEEN WIPED OUT,"
1030 PRINT"IS TO END AND SAVE THE ORIGINAL TEXT."
           ! THE USER HAS A FILE OF LENGTH ZERO!  TELL HIM ABOUT IT
1040 IF ERR=28% THEN RESUME 1590 ELSE RESUME 990 
1049  ! --------------
1050  REM -- CREATE TEMP FILES ON SEPARATE DISKS IF POSSIBLE
1051  ! --------------
1060 ON ERROR GOTO 1130 
1070 A$="DK0:"
           ! LET'S HOPE WE HAVE AN RK05 DRIVE 0
1080 R7$=A$+"TEXT02"+R4$ : OPEN R7$ AS FILE 8%
           ! OPEN THE FIRST TEMP FILE (A.K.A. FLIP-FLOP FILE)
1090 A$="DK1:"
           ! SHOOT THE MOON AND PRAY FOR AN RK05 DRIVE 1
1100 R8$=A$+"TEXT01"+R4$ : OPEN R8$ AS FILE 9%
           ! OPEN THE SECOND FLIP-FLOP FILE (TEMP FILE)
1110 R1%=1% : R0%=1% : GOSUB 1150 
           ! SET THE POINTER AND LINE COUNTER FOR THE HOME POSITION
1120 R3%=8% : GOSUB 880 : RETURN
1130 IF ERR=2 OR ERR=4 OR ERR=6 OR ERR=8 OR ERR=14 OR ERR=21 OR ERR=22
      OR ERR=24 OR ERR=25 THEN 1140 ELSE ON ERROR GOTO 1560 
1131       ! IF WE GET ANY DISK ERRORS, CHECK THEM OUT
             RK05'S ARE NOT NECESSARY, WE CAN PROCEED WITHOUT THEM
1140 A$="" : IF ERR=28% THEN RESUME 1590 ELSE RESUME 
1141       ! LET THE SYSTEM DECIDE WHICH DISK TO USE AND TRY TO
             CREATE THE TEMP FILES AGAIN
1149  ! --------------
1150  REM -- QUICKLY COPY THE ORIGINAL FILE
1151  REM -- WE NEVER MESS WITH THE ORIGINAL UNTIL THE VERY END
1152  ! --------------
1160 ON ERROR GOTO 1560 
    : FIELD #W%,512% AS V$ : FIELD #Y%,512% AS N$ 
    : ON ERROR GOTO 1180 
1161       ! SET UP 512 BYTE INPUT AND OUTPUT BUFFERS
1170 GET #W% : LSET N$=V$ : PUT #Y% : GOTO 1170 
           ! COPY THE ORIGINAL FILE INTO THE FIRST TEMP FILE A BLOCK
             AT A TIME
1180 IF ERR=11% THEN RESUME 1190 ELSE ON ERROR GOTO 1560 
           ! WHEN WE GET THE "END OF FILE" ERROR WE ARE READY
1190 RETURN
           ! WE ARE READY TO BEGIN EDITTING
1199  ! --------------
1200  REM -- I(N)STRUCTIONS  (LIMITED EDITION)
1201  ! --------------
1210 PRINT "DIRECTIONS FOR USE ARE IN VERSION 2 OF THE PDP-11 USER'S"
    : PRINT "GUIDE; OR, ESCAPE FROM THIS PROGRAM AND TYPE 'RUN "
      "$TEXTIN.'"
1220 PRINT "TO ESCAPE FROM THIS PROGRAM, TYPE 'END'" : RETURN
           ! TELL THE USER HOW TO GET INSTRUCTIONS
1229  ! --------------
1230  REM -- (E)ND ROUTINE
1231  ! --------------
1240 F%=0%
           ! F% IS A SWITCH FOR MESSAGES
1250 ON ERROR GOTO 1260 : KILL "HOLDIT"+R4$ : GOTO 1270 
           ! HOLDIT SHOULD NOT EXIST AT THIS TIME
             R4$ IS THE UNIQUE EXTENSION WE ORIGINALLY CREATED
1260 IF ERR=28% THEN RESUME 1590 ELSE RESUME 1270 
1270 PRINT #Y%,A$; : GOSUB 800 : CLOSE Y%,W% :
      IF R3%=8% THEN NAME R7$ AS "HOLDIT"+R4$ 
    : KILL R8$ : GOTO 1290 
1271       ! IF R7$ IS THE COMPLETE REVISED TEXT THEN CALL IT
             HOLDIT FOR NOW
1280  NAME R8$ AS "HOLDIT"+R4$ : KILL R7$ 
           ! IF R8$ IS THE COMPLETE REVISED TEXT CALL IT HOLDIT
1290 ON ERROR GOTO 1300 : KILL "WAIT"+R4$ : GOTO 1310 
           ! WAIT SHOULD NOT EXIST NOW
1300 IF ERR=28% THEN RESUME 1590 ELSE RESUME 1310 
1310 PRINT "DO YOU WANT TO SAVE THE REVISED COPY";
    : NAME R9$ AS "WAIT"+R4$
    : INPUT Q$ : IF LEFT(Q$,1%)="N" THEN KILL "HOLDIT"+R4$
    : N1$="" : GOTO 1340 
1311       ! SEE IF THE REVISED COPY SHOULD BE SAVED (NULL RESPONSE
             IS YES) AND NAME THE ORIGINAL FILE WAIT
1320 PRINT "NEW NAME.EXT OF NEW COPY, <CR> TO USE OLD NAME";
    : ON ERROR GOTO 1560 
    : INPUT N1$ : N1$=R9$ IF N1$=""
    : NAME "HOLDIT"+R4$ AS N1$
    : PRINT "NEW FILE "N1$" IS NOW SAVED"
1321       ! GET A NAME FOR THE NEW COPY AND CALL IT BY NAME
1330 F%=1% IF N1$=R9$
           ! TURN ON THE SWITCH IF THE NEW NAME IS REALLY THE OLD NAME
1340 INPUT "DO YOU WANT TO SAVE THE ORIGINAL COPY";Q$
    : IF LEFT(Q$,1%)="N" THEN KILL "WAIT"+R4$
    : N$="" : GOTO 1370 
1341       ! SEE IF THE ORGINAL COPY IS WANTED
1350 A$="" : A$=", <CR> TO USE OLD NAME" IF F%=0%
    : PRINT "NEW NAME.EXT FOR ORIGINAL COPY"+A$;
    : INPUT N$ : IF N$="" THEN IF F%=0% THEN N$=R9$
      ELSE PRINT "I NEED A NAME.EXT" : GOTO 1350 
1351       ! DON'T LET THE OLD NAME BE USED IF THE NEW COPY ALREADY
             HAS THE OLD NAME
1360 ON ERROR GOTO 1560 : NAME "WAIT"+R4$ AS N$  
           ! CALL THE ORIGINAL COPY BY ITS NEW NAME
1369  ! --------------
1370  REM -- MAKE THEM HAPPY ROUTINE (TELL THEM WHICH FILES EXIST)
1371  ! --------------
1380 PRINT "THESE FILES NOW EXIST--" : GOTO 1410
1390 ON ERROR GOTO 1400 : OPEN N$ FOR INPUT AS FILE 8% : CLOSE 8%
    : PRINT N$ : F1%=2% IF N$=R7$ OR N$=R8$ OR N$="WAIT"+R4$
      OR N$="HOLDIT"+R4$ : RETURN
             ! OPEN ALL THE FILES FOR INPUT TO SEE IF THEY EXIST
1400 IF ERR=28% THEN RESUME 1590 ELSE RESUME 1405
1405 RETURN
1410 GOSUB 1390 : N$=N1$ : GOSUB 1390 : N$=R7$ : GOSUB 1390 
    : N$=R8$ : GOSUB 1390 : N$="WAIT"+R4$ : GOSUB 1390
    : N$="HOLDIT"+R4$ : GOSUB 1390
1500 IF F1%<>2% THEN PRINT "ALL TEMP FILES NOW KILLED." ELSE
      PRINT "RECOMMEND USING $PIP TO EXAMINE THE CONTENTS OF ANY"
    : PRINT "FILE THAT YOU DON'T RECOGNIZE OR WANT."
1501       ! IF ALL THE TEMP FILES ARE GONE TELL THE USER.  OTHERWISE
             HE MIGHT WANT TO USE PIP
1510 PRINT : PRINT "GOOD DAY!" : GOTO 1670 
           ! WE ARE FINISHED!!!!  WISH THE USER WELL
1512  ! --------------
1513  REM -- ERROR ROUTINES
1514  ! --------------
1520 IF ERR=11 THEN 1540 ELSE IF ERR=4 THEN RESUME 1550 
1530 ON ERROR GOTO 1560 
1540 ON ERROR GOTO 860 : IF ERR=28% THEN RESUME 1590 ELSE RESUME 840 
1550 IF ERR=28% THEN RESUME 1590 ELSE PRINT 
    : PRINT "NO ROOM FOR YOU AT THIS TIME.  SORRY." : RESUME 1230 
1551       ! NO DISK SPACE FOR USER RIGHT NOW
1559  ! --------------
1560  REM -- EXTRANEOUS ERRORS ROUTINE
1561  ! --------------
1570 IF ERR=28% THEN RESUME 1590 ELSE GOSUB 1580 
    : IF ERL>200 AND ERL<1050 THEN RESUME 200 ELSE
      IF ERL=1320 THEN RESUME 1320 ELSE
      IF ERL=1360 THEN RESUME 1350 ELSE
      PRINT "PROGRAM TERMINATED." : RESUME 1590 
1571       ! IF THE ERROR OCCURED DURING A COMMAND, JUST IGNORE THAT
             COMMAND.  OTHERWISE TERMINATE EXECUTION OF 'TEXTED'
1580 M$=RIGHP(SYS(CHR$(6%)+CHR$(9%)+CHR$(ERR)),3%)
    : PRINT LEFT(M$,INSTR(1%,M$,CHR$(0%))-1%);
    : PRINT " - COMMAND IGNORED"
    : RETURN
1581       ! PRINT OUT THE SYSTEM ERROR MESSAGE FOR THIS ERROR
1590 ON ERROR GOTO 1600 
    : KILL R7$
    : GOTO 1610 
           ! KILL ALL THE TEMP FILES BEFORE HONORING THE CTRL/C
1600 RESUME 1610 
1610 ON ERROR GOTO 1620 
    : KILL R8$
    : GOTO 1630 
           ! KEEP GOING -- WE HAVE LOTS TO CLEAN
1620 RESUME 1630 
1630 ON ERROR GOTO 1640 
    : NAME "WAIT"+R4$ AS R9$ 
    : GOTO 1650 
           ! DON'T KILL THE ORIGINAL FILE
1640 RESUME 1650 
1650 ON ERROR GOTO 1670 
    : KILL "HOLDIT"+R4$ 
           ! LAST ONE -- NOW HONOR CTRL/C
1670 END
$B$$$$$<
D_<U2	(
