THE BCPL EDITING PROGRAM (#EDMP MK 2B)  
--------------------------------------  
    THIS PROGRAM IS A LINE EDITOR FOR FILES WHICH CAN   
BE HANDLED BY BCPL PROGRAMS (INCLUDING THE COMPILER).   
FILE FORMAT IS NOT STANDARD I.C.L.  
    INPUT TO THE EDITOR, IN THE FORM OF A STREAM OF 
COMMANDS CALLED THE "EDITING STREAM", MAY BE FROM   
PAPER TAPE, CARDS, OR A DISC FILE. LINES BEGINNING  
WITH THE  WARNING CHARACTER  ( INITIALLY '*' ) ARE  
TREATED AS EDITING COMMANDS. OTHER LINES ARE COPIED 
TO THE  OUTPUT FILE , IF IT EXISTS. NORMALLY,  A NEW
VERSION OF THE INPUT FILE IS PRODUCED ON THE OUTPUT 
FILE.   
LIST OF COMMANDS
----------------
    (THE WARNING CHARACTER IS WRITTEN AS '*')   
*IN(FILE)   
    CLOSES THE CURRENT INPUT FILE, IF ANY AND OPENS 
    THE GIVEN FILE AS THE INPUT FILE. 'FILE' MAY BE 
    THE NAME OF AN EDS FILE, OR A NUMBER SPECIFYING A   
    BASIC PERIPHERAL.   
*OUT(FILE)  
    CLOSES THE CURRENT OUTPUT FILE, IF ANY, AND OPENS   
    THE GIVEN FILE AS THE OUTPUT FILE. SEE '*IN' FOR
    VALID FORMS OF 'FILE'.  
*LIST   
    GIVES A LISTING, WITH LINE NUMBERING, OF TEXT AS
    IT IS COPIED TO THE OUTPUT FILE.
*NOLIST 
    SUPPRESSES LISTING (DEFAULT)
*WC=X   
    REDEFINES THE WARNING CHARACTER TO BE 'X'.  
*ALTER M,N  
    THE BASIC EDITING COMMAND. 'M', 'N' ARE DECIMAL 
    NUMBERS. 'M' MUST NOT BE LESS THAN THE CURRENT  
    LINE NUMBER.
    IF N<0, IT IS REPLACED BY M-N-1.
    THE INPUT FILE IS COPIED UP TO LINE M-1. THEN N 
    LINES ARE SKIPPED.  
    (IF N<0, THE ',' CAN BE OMITTED. I.E. THE COMMAND   
     CAN BE WRITTEN IN THE FORM '*ALTER M-N'
     WHERE N IS THE LAST LINE TO BE SKIPPED)
*END
    COPIES THE REST  OF THE  INPUT FILE, AND CLOSES 
    BOTH THE INPUT AND THE OUTPUT FILES.
*FIN
    AS FOR '*END' BUT ALSO TERMINATES THE PROGRAM.  
*BOTTOM 
    COPIES THE REST OF THE INPUT FILE, AND CLOSES IT.   
*CHAIN(MESSAGE) 
    CAUSES THE EDITOR,  AT THE END OF THE RUN,  TO  
    DELETE ITSELF AND DISPLAY THE GIVEN MESSAGE ON  
    THE OPERATORS CONSOLE. THE ACCUMULATORS AT THIS 
    POINT WILL CONTAIN EITHER THE NAME OF THE LAST  
    EDS OUTPUT FILE, OR THE STRING GIVEN IN THE LAST
    '*XREGS' COMMAND, IF ONE HAS BEEN GIVEN.
        ( NORMALLY, 'MESSAGE' WILL BE OF THE FORM   
          'FI#PROG#FILE', WHICH WILL CAUSE EXECUTIVE
          TO LOAD THE NAMED SUCCESSOR PROGRAM. THIS 
          MAY BE THE BCPL COMPILER 'BCMX'). 
*XREGS(STRING)  
    CAUSES  'STRING'  TO BE THE FINAL ACCUMULATOR   
    CONTENTS (AS A BCPL STRING), IN A FORM WHICH WILL   
    BE ACCEPTABLE TO THE BCPL COMPILER. SEE '*CHAIN'.   
*TERMINATOR=XXXX
    DETERMINES THE FOUR CHARACTER TERMINATOR FOR THE
    THE EDITING STREAM (IF ON CARDS OR PAPER TAPE). 
    THE END OF STREAM ENCOUNTED IN THE EDITING STREAM   
    HAS THE SAME EFFECT AS '*FIN'.  
NOTES   
-----   
    (1) WHERE A NUMBER 'N' IS ALLOWED TO SPECIFY A  
        FILE, IT SPECIFIES A BASIC PERIPHERAL , UNIT
        NUMBER N REM 10, AND TYPE GIVEN BY N/10 WHERE   
        TYPE = TR, TP, LP, CR, CP FOR   
               0  ,1  ,2  ,3,  4 RESPECTIVELY.  
    (2) SEVERAL '*IN' AND '*OUT' PARAMETERS MAY BE  
        USED IN THE SAME RUN.   
    (3) ONLY THE FIRST CHARACTER OF EACH COMMAND IS 
        SIGNIFICANT.
OPERATING INSTRUCTIONS  
----------------------  
    (1) LOAD THE PROGRAM - IT USES 8K OF STORE. 
    (2) LOAD ANY PERIPHERALS OR EDS CARTRIGES NEEDED.   
    (3) GO AT 20 FOR  INSTRUCTIONS ON PAPER TAPE,   
              21  "     "      "   ON CARDS,
              25 ( OR JUST GO ) IF THE INSTRUCTIONS 
                 ARE ON AN EDS FILE WITH NAME IN THE
                 ACCUMULATORS AS A BCPL STRING. 
    THE PROGRAM HALTS 'BH', OR, IF A '*CHAIN' COMMAND   
    WAS GIVEN AND THERE WERE NO ERRORS, DELETES 
    DISPLAYING A CONSOLE MESSAGE.   
    UNDER GEORGE 2, THE FOLLOWING MACRO CAN BE USED:-   
        QRUN VOLUME,8,TIME,SOURCE,ENTRY POINT   
    ( WHERE ENTRY POINT IS 21 FOR CARD INPUT )  
ERRORS AND HALTS
----------------
    THE PROGRAM MAY FAIL TO OPEN A FILE. IN THIS CASE   
    A MESSAGE IS DISPLAYED AND THE PROGRAM HALTS 'E@'   
    RESUME TO TRY AGAIN.
EXAMPLES
--------
(1) TO SET UP FILES CALLED 'HEADER' AND 'SOURCE FILE'   
    FROM CARDS. 
    (A) ALLOCATE THE FILES IF NEED BE.  
    (B) LOAD #EDMP AND GO AT 21.
    (C) THE FOLLOWING CARDS ARE NEEDED:-
        *LIST   
        *OUT(SOURCE  FILE)  
        <- DATA FOR 'SOURCE FILE' ->
        *OUT(HEADER)
        <- DATA FOR 'HEADER' -> 
        ****
(2) TO EDIT THE FILE 'HEADER', DELETING LINE 10 AND 
    REPLACING LINES 20 TO 30 BY THE SINGLE LINE '$)'
    A CARD COPY AND A LISTING ARE REQUIRED. ALSO THE
    FILE 'SOURCE FILE' IS TO BE COMPILED AFTERWARDS.
    (A) ALLOCATE A TEMPORARY FILE, 'TEMPORARY' SAY  
    (B) RUN THE EDITOR WITH THE FOLLOWING COMMANDS:-
        *IN(HEADER) 
        *OUT(TEMPORARY) 
        *ALT 10,1   
        *ALT 20-30  
        $)  
        *END
        *IN(TEMPORARY)  
        *OUT(HEADER)
        *LIST   
        *END
        *IN(HEADER) 
        *OUT(40)
        *NOLIST 
        *XREGS(SOURCE  FILE)
        *CHAIN(FI#BCMX#DISC)
        ****
    (C) UNDER EXECUTIVE, #BCMX WILL LOAD AND RUN
        AUTOMATICALLY. UNDER GEORGE OR MAXIMOP #BCMX
        WILL HAVE TO BE LOADED BY COMMAND AND RESUMED   
        NOTE THAT 'SOURCE FILE' MUST CONTAIN COMPILER   
        STEERING.   
