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 ; 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%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 -) 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, 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$=", 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