*COMDECK PTTPMARK 
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                      P T T P S V M R K                              * 
*                                                                     * 
*        SAVE FILE REGISTERS USED FOR TEXT PROCESS -TPMARK-           * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$I-,R-,G-     INTERRUPTABLE, NON-RECURSIVE?
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW  - THIS PROCEDURE GETS A BUFFER, OR USES THE BUFFER       * 
*              PASSED BY THE CALLER, SAVES THE FILE 1 REGISTERS       * 
*              USED BY TP FOR THE TPMARK (LVL 1/2) INSTRUCTION        * 
*              AND RETURNS THE BUFFER ADDRESS TO THE CALLER FOR       * 
*              A SUBSEQUENT PTTPRSMRK.                                * 
*                                                                     * 
** INPUT     - T8BUFPTR FOR SAVING THE TPMARK FILE 1 REGISTERS.       * 
*              IF THIS PTR IS NIL, A BUFFER WILL BE OBTAINED.         * 
*                                                                     * 
** OUTPUT    - T8BUFPTR POINTS TO THE 16 SAVED FILE 1 REGISTERS.      * 
*                                                                     * 
** EXTERNAL SUBROUTINES -                                             * 
*              PBGET1BF   - GET A DYNAMIC BUFFER                      * 
*              PBDF       - READ FILE 1 REGISTER(S)                   * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PTTPSVMRK (VAR T8BUFPTR : B0BUFPTR);
  
BEGIN 
IF T8BUFPTR = NIL 
THEN
  T8BUFPTR := PBGET1BF (B0S16);             _GET BUFFER                ?
PBDF ($10E0, T8BUFPTR'.BIINT[1]);           _SAVE REGISTERS E0-EF      ?
END;
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                      P T T P R S M R K                              * 
*                                                                     * 
*        RESTORE FILE REGISTERS USED FOR TEXT PROCESS -TPMARK-        * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$I-,R-,G-   INTERRUPTABLE, NON-RECURSIVE ? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW  - THIS PROCEDURE RESTORES THE FILE 1 REGISTER USED       * 
*              BY TP FOR THE TPMARK (LVL 1/2) INSTRUCTION. THE        * 
*              PASSED BUFFER CONTAINING THE SAVED REGISTERS IS        * 
*              OPTIONALLY RELEASED.                                   * 
*                                                                     * 
** INPUT     - T8BUFPTR,  PTR TO THE PREVIOUSLY SAVED FILE 1 REGS.    * 
*              T8RELFLAG, IF SET TO TRUE, THE BUFFER IS RELEASED.     * 
*                                                                     * 
** OUTPUT    - FILE 1 REGISTERS FOR TPMARK ARE RESTORED,              * 
*              T8BUFPTR SET TO NIL ONLY IF THE BUFFER IS RELEASED.    * 
*                                                                     * 
** EXTERNAL SUBROUTINES -                                             * 
*              PBEF       - LOAD FILE 1 REGISTER(S)                   * 
*              PBREL1BF   - RELEASE A BUFFER                          * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PTTPRSMRK (VAR T8BUFPTR : B0BUFPTR; T8RELFLAG : BOOLEAN); 
  
BEGIN 
PBEF ($10E0, T8BUFPTR'.BIINT[1]);           _RESTORE REGISTERS E0-EF   ?
IF T8RELFLAG
THEN
  BEGIN 
  T8BUFPTR'.BCCHAINS [16] := NIL;           _CLEAR CHAIN WORD          ?
  PBREL1BF (T8BUFPTR, B0S16);               _RELEASE THE BUFFER        ?
  END;
END;
_$J+? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
*                      P T T P U S R E L                              * 
*                                                                     * 
*        RELEASE SOURCE BUFFERS UP TO THE LAST LEVEL 1/2 -TPMARK-     * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
_$I-,R-,G-   INTERRUPTABLE, NON-RECURSIVE ? 
_ 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                     * 
** OVERVIEW  - THIS PROCEDURE RELEASES SOURCE BUFFERS UP TO THE       * 
*              LAST LEVEL 1 OR 2 MARK DONE. IT UPDATES THE PTR        * 
*              NCFSBA IN THE TPCB. IF THE SPECIFIED MARK IS NOT       * 
*              FOUND FOR THE CURRENT SOURCE, ALL SOURCE IS RELEASED.  * 
*                                                                     * 
** INPUT     - T8TPCBP,  POINTER TO THE TEXT PROCESS CONTROL BLOCK.   * 
*              T8BUFPTR, POINTER TO THE BUFFER CONTAINING THE SAVED   * 
*                        MARKS (FROM THE LATEST PTTPSVMRK CALL).      * 
*              T8LEVEL,  THE LEVEL NR (1/2) OF THE MARKED SOURCE.     * 
*                                                                     * 
** OUTPUT    - NCFSBA POINTS TO THE BUFFER CONTAINING THE MARK        * 
*              (AND IS ZERO IF NONE OF THE SOURCE WAS MARKED).        * 
*                                                                     * 
** EXTERNAL SUBROUTINES -                                             * 
*              PBREL1BF   - RELEASE A BUFFER                          * 
*                                                                     * 
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
? 
PROCEDURE PTTPUSREL (T8TPCBP, T8BUFPTR : B0BUFPTR; T8LEVEL : INTEGER);
  
VAR 
      T8WORK  : B0OVERLAY;
      T8WP    : B0BUFPTR; 
      T8INDEX : ARRAY [1..2] OF INTEGER;    _INDEX FOR LEVEL 1/2 SBA   ?
VALUE 
      T8INDEX = (1,9);
BEGIN 
T8WORK.BABUFPTR :=
  T8BUFPTR'.BCCHAINS [T8INDEX [T8LEVEL]];   _GET LAST MARKED SBA       ?
T8WORK.BASET := T8WORK.BASET -
                BEDBSIZE'.BEMSK.BASET;      _GET BASE OF MARKED SBA    ?
T8WP := T8TPCBP'.BGMLCB.NCFSBA;             _GET PTR TO FIRST SOURCE   ?
WHILE (T8WP " T8WORK.BABUFPTR) &            _MARKED SOURCE NOT REACHED ?
      (T8WP " NIL) DO                       _AND NOT AT END OF CHAIN   ?
  PBREL1BF (T8WP, BEDBSIZE);                _RELEASE SOURCE BUFFER     ?
T8TPCBP'.BGMLCB.NCFSBA := T8WP;             _SET NCFSBA TO REMAINDER   ?
  IF T8WP = NIL 
  THEN                                      _ALL SOURCE PROCESSED      ?
    T8TPCBP'.BGMLCB.NCSBP := NIL;           _YES, CLEAR CURRENT SBP    ?
END;
