         << LINES .001/.009 ARE RESERVED FOR SYSTEMS INTEGRATION >>     00000001
           SUBTYPE'2608B'TRANSPARENT = 13       #;             <<11860>>00785000
$EDIT VOID=00795000                                            <<11860>>00790000
$EDIT VOID=01190000                                            <<11860>>01190000
          ,prespace            = outflags2.(13:1)  #           <<11502>>01192000
LOGICAL PROCEDURE SGETBLOCK';                                  <<11502>>04860100
OPTION FORWARD;                                                <<11502>>04860200
                                                               <<11502>>04860300
$EDIT VOID=14195000                                            <<11860>>14160000
      sent'fopen := false;                                     <<12096>>14296000
$EDIT VOID=17165000                                            <<11860>>17150000
               IF NOT SGETBLOCK' THEN                          <<11502>>17745000
                     IF PAGE'BOUNDARY THEN                     <<11502>>17800000
                        BEGIN                                  <<11502>>17801000
                        IF SRP2.(15:1)=1 THEN                  <<11502>>17802000
                           PRESPACE :=TRUE;                    <<11502>>17803000
                        GO TO CHECKPT;                         <<11502>>17804000
                        END;                                   <<11502>>17804100
$EDIT VOID=19120000                                            <<*1213>>19116000
         <<****************************************************<<*1213>>19985000
         << THIS SECTION SEARCHES FOR THE BLOCK TO RESTART     <<*1213>>19990000
         << PRINTING. THE RECORD TO RESTART FROM IS CALCULATED <<*1213>>19995000
         << AND THE BLOCKS ARE SEARCHED FOR THIS RECORD.  THE  <<*1213>>20000000
         << ALGORITHM USED IS BINARY NATURE.                   <<*1213>>20005000
         << VARIABLE USAGE IS AS FOLLOWS:                      <<*1213>>20010000
         <<    NON'PURGE'BLKNUM - LOWER LIMIT OF SEARCH REGION <<*1213>>20015000
         <<    CURR'BLOCK ------- UPPER LIMIT OF SEARCH REGION <<*1213>>20020000
         <<    TARGET'REC ------- RECORD TO SEARCH FOR         <<*1213>>20025000
         <<    TARGET'BLOCK ----- BLOCK BEING SEARCHED         <<*1213>>20030000
         <<    DRECNO ----------- FIRST RECORD IN MIDDLE       <<*1213>>20035000
         <<    CONTINUE --------- TERMINATE SEARCH FLAG        <<*1213>>20040000
         <<****************************************************<<*1213>>20045000
            FREAD ( SPOOLFILE, SBASE, 512 ); << READ BLOCK 0 >><<*1213>>20050000
            TOS := SBASE ( 510 ); << GET FIRST RECORD NUMBER >><<*1213>>20051000
            TOS := SBASE ( 511 ); << IN FIRST BLOCK.         >><<*1213>>20055000
            NON'PURGE'RECNUM := TOS; << SAVE RECORD NUMBER >>  <<*1213>>20060000
           << SAVE CALCULATED RESTART RECORD NUMBER >>         <<*1213>>20061000
            TARGET'REC := SET'TARGET'REC'III;                  <<*1213>>20062000
                                                               <<*1213>>20063000
           << TARGET'REC IS PAST BEGINNING OF FILE? >>         <<*1213>>20064000
            IF TARGET'REC < NON'PURGE'RECNUM THEN              <<*1213>>20064100
               GOTO ERR263;   << YES, INDICATE ERROR >>        <<*1213>>20064200
                                                               <<*1213>>20064300
                 << INITIALIZE SEARCH TERMINATION FLAG >>      <<*1213>>20064400
            CONTINUE := TRUE;                                  <<*1213>>20064500
                 << START SEARCHING FOR BLOCK WHICH >>         <<*1213>>20064600
                 << CONTAINS THE TARGET RECORD.     >>         <<*1213>>20064700
            WHILE CONTINUE DO                                  <<*1213>>20065000
               BEGIN                                           <<*1213>>20070000
               TARGET'BLOCK :=   << CALCULATE MIDDLE BLOCK >>  <<*1213>>20075000
                   ( NON'PURGE'BLKNUM + CURR'BLOCK ) / 2D;     <<*1213>>20080000
               FREADDIR (SPOOLFILE, SBASE, 512, TARGET'BLOCK); <<*1213>>20085000
               IF <> THEN                                      <<*1213>>20090000
ERR260:           BEGIN <<ERR = OUT OF BOUNDS ON FILE>>        <<*1213>>20095000
                  FILEREQUEST := RELINKFILE;                   <<*1213>>20100000
                  SPOOLREQUEST := WAITSPOOLING;                <<*1213>>20105000
<< 260 Ldev#\restart of file#O! went past eof; file deferred >><<*1213>>20110000
                  GENMSG(1,260,%11000,DEVICE,DEVFILEID,,,,0);  <<*1213>>20115000
                  UPDATE'CKPT'FLAG := FALSE;                   <<*1213>>20120000
                  RETURN;                                      <<*1213>>20125000
                  END;                                         <<*1213>>20130000
              << GET FIRST RECORD NUMBER IN MIDDLE BLOCK >>    <<*1213>>20135000
               TOS := SBASE(510); << GET FIRST RECORD NUMBER >><<*1213>>20140000
               TOS := SBASE(511); << IN THE SEARCH BLOCK,    >><<*1213>>20145000
               DRECNO := TOS;     << SAVE THIS RECORD NUMBER >><<*1213>>20150000
               IF TARGET'REC = DRECNO THEN  << FOUND RECORD? >><<*1213>>20155000
                  CONTINUE := FALSE         << EXIT SEARCH >>  <<*1213>>20160000
               ELSE                                            <<*1213>>20165000
                  IF TARGET'REC > DRECNO THEN                  <<*1213>>20170000
                     IF TARGET'BLOCK = NON'PURGE'BLKNUM THEN   <<*1213>>20175000
                        CONTINUE := FALSE    << EXIT SEARCH >> <<*1213>>20180000
                     ELSE                                      <<*1213>>20185000
                        << SEARCH LOWER HALF OF FILE >>        <<*1213>>20190000
                        NON'PURGE'BLKNUM := TARGET'BLOCK       <<*1213>>20195000
                  ELSE                                         <<*1213>>20200000
                  << SEARCH UPPER HALF OF FILE >>              <<*1213>>20205000
                                                               <<*1213>>20210000
                     CURR'BLOCK := TARGET'BLOCK;               <<*1213>>20215000
                                                               <<*1213>>20220000
               END; << OF SEARCH >>                            <<*1213>>20225000
         <<********************************************>>      <<*1213>>20241000
         << THIS SECTION PLACES THE RECORD POINTER AT  >>      <<*1213>>20242000
         << THE RESTART RECORD.  IF THE FIRST RECORD   >>      <<*1213>>20242500
         << IN THE BLOCK IS THE RESTART RECORD, NO     >>      <<*1213>>20243000
         << RECORD POINTER MOVEMENT WILL BE NEEDED.    >>      <<*1213>>20243500
         <<********************************************>>      <<*1213>>20244000
            WHILE DRECNO < TARGET'REC DO                       <<*1213>>20245000
               DRECNO := DRECNO + 1D;<< POINT TO NEXT RECORD >><<*1213>>20275500
            END;                                               <<*1213>>20280000
   COMMENT   ************************************************* <<11502>>20471000
       Returns the next record (non-268X) or the next 8 blocks <<11502>>20472000
   (268X), reading from the spool file if the current block is <<11502>>20473000
   exhausted.  Exception : If the global flag prespace is set, <<11502>>20474000
   it is cleared and the current record  is returned a second  <<11502>>20475000
   time.  This  is so that RESUMESPOOL  of a file  in prespace <<11502>>20476000
   mode will print the first line of the first page. Exception <<11502>>20477000
   of the exception :  the alternate entry point  (SGETBLOCK') <<11502>>20478000
   forces the return of the next record,  even if the prespace <<11502>>20479000
   flag is set.  ;                                             <<11502>>20479100
                                                               <<11502>>20479200
                                                               <<11502>>20479300
ENTRY SGETBLOCK';                                              <<11502>>20479400
  LOGICAL NEXT'RECORD := FALSE;                                <<11502>>20481000
   WHILE FALSE DO                                              <<11502>>20486000
SGETBLOCK':                                                    <<11502>>20487000
   NEXT'RECORD:=TRUE;                                          <<11502>>20488000
   IF PRESPACE THEN                                            <<11502>>20496000
      BEGIN                                                    <<11502>>20497000
      PRESPACE :=FALSE;                                        <<11502>>20498000
      IF NOT NEXT'RECORD THEN RETURN;                          <<11502>>20499000
      END;                                                     <<11502>>20499100
$EDIT VOID=21085000                                            <<09896>>21085000
         @LAST := @RECP - 4;   << Last I/O we really did.   >> <<09896>>21166000
                                                               <<09971>>22526000
<<   The following SCHECKREQ call assures that we catch op- >> <<09971>>22527000
<< erator requests made while printing the trailer. It must >> <<09971>>22528000
<< follow the above SDWRITE call for Device Close.          >> <<09971>>22529000
                                                               <<09971>>22529100
         SCHECKREQ;                                            <<09971>>22529200
$EDIT VOID=23570000                                            <<09970>>23570000
$EDIT VOID=28270000                                            <<09970>>28270000
         IF SPOOLER THEN                                       <<09555>>28451000
            BEGIN   << Spooler, not :STREAM, tell console.  >> <<09555>>28452000
            GENMSG (8, ERRNUM,,,,,,,0);                        <<09555>>28453000
            GENMSG (1, 228, %11000, DEVICE, DEVFILEID,,,,0);   <<09555>>28454000
            END     << Spooler, not :STREAM, tell console.  >> <<09555>>28454100
         ELSE                                                  <<09555>>28454200
            BEGIN   << :STREAM, tell $STDLIST.              >> <<09555>>28454300
            GENMSG (8, ERRNUM);                                <<09555>>28455000
            STREAMERROR (STRMSPFLECLOSEERR, FALSE);            <<09555>>28460000
            END;    << :STREAM, tell $STDLIST.              >> <<09555>>28461000
