*DECK GETDZ 
          IDENT     GET$Z 
          COMMENT   CRM SQ GET Z-RECORD PROCESSOR 
          LIST      C,F,X 
*#
*1CD  GET$Z 
*0D   PURPOSE 
*0        PERFORM RECORD-TYPE-DEPENDENT PROCESSING ON Z-TYPE RECORDS
*         FOR GET$SQ. 
*0D   CALL
*0                  SB3       OUT 
*                   SX2       NUMBER-OF-AVAILABLE-CHARACTERS
*                   EQ        =XGET$Z 
*0D   PARAMETERS
*0        A0        FIT ADDRESS.
*         B1        1.
*         B3        CIRCULAR BUFFER OUT POINTER.
*         X2        NUMBER OF CHARACTERS IN BUFFER. 
*0D   ACTION
*0        IF THIS RECORD IS DELETED (OR BEING SKIPPED IN RESPONSE TO
*         A *SKIP* REQUEST), READ DATA FROM THE BUFFER (BUT DO NOT
*         STORE IN USER WSA) UNTIL LOW-ORDER ZERO BYTE ENCOUNTERED. IF
*         NO MORE DATA (X2=0), BRANCH TO ADDRESS GTMR$SQ TO GET MORE. 
*0        IF THIS RECORD IS NOT DELETED, GET THE RECORD LENGTH. IF
*         NOT GETP, RECORD LENGTH = FIT FIELD *FL*. IF GETP, RECORD 
*         LENGTH = *FL* UNLESS THE SUM OF THE CHARACTERS TRANSFERED FOR 
*         THIS RECORD THUS FAR (*RL*) AND THE NUMBER OF CHARACTERS
*         REQUESTED FOR THIS PARTIAL GET (*RPTL*) IS LESS THAN THE *FL* 
*         IN WHICH CASE RECORD LENGTH EQUALS *RL* + *RPTL*. 
*0        SET THE RECORD SEARCH LIMIT TO THE SMALLER OF RECORD LENGTH 
*         AND NUMBER OF AVAILABLE CHARACTERS. 
*0        THEN LOOP PICKING UP WORD FROM BUFFER, INCREMENTING *OUT*,
*         AND STORING WORD IN USER WORKING STORAGE AREA UNTIL RECORD
*         SEARCH LIMIT IS REACHED OR A LOW-ORDER ZERO BYTE (EOR) IS 
*         ENCOUNTERED. IF THE RECORD SEARCH LIMIT IS REACHED, UPDATE
*         RECORD LENGTH AND USER WSA AND CHECK TO SEE IF
*         CALCULATED RECORD LENGTH WAS LESS THAN THE NUMBER OF
*         AVAILABLE CHARACTERS.  IF NOT, BRANCH TO THE ADDRESS GTMR$SQ
*         IN GET$SQ TO GET MORE CHARACTERS.  IF SO AND THE PARTIAL
*         READ FLAG (PRD) IS SET AND THE RECORD LENGTH COUNT IS 
*         LESS THAN THE RECORD LENGTH (*FL*) BRANCH TO *GXIT$SQ* (IN
*         *GET$SQ*) TO TERMINATE GETP PROCESSING; OTHERWISE,
*         CHECK TO SEE IF THERE IS MORE DATA IN THE 
*         BUFFER.  IF NOT, BRANCH TO THE ADDRESS GTMR$SQ
*         TO GET MORE CHARACTERS. IF SO, LOAD NEXT WORD AND BRANCH
*         TO *GXIT$SQ* (IN *GET$SQ*) TO TERMINATE GET PROCESSING IF 
*         THE LOW-ORDER BYTE IS ZERO, AND IF IT IS NOT ZERO, SET THE
*         FIT FIELD GET ERROR NUMBER (GEN) TO 142B (EXCESS DATA) AND
*         BRANCH TO THE CODE FOR DELETED RECORDS TO SKIP OVER EXCESS. 
*0        IF WE DID FIND THE ZERO BYTE TERMINATOR IN THE ORIGINAL 
*         LOOP, REPLACE LOW-ORDER ZERO BYTES WITH BLANKS. IF PARTIAL
*         READ FLAG SET (*PRD*), DECREMENT PARTIAL TRANSFER 
*         LENGTH (*PTL*) BY AMOUNT NOT READ.  NEXT PAD OUT USER WSA 
*         WITH BLANKS FROM RECORD LENGTH TRANSFERED TO *FL*/*PTL*, SAVE 
*         USER WSA, AND GO TO *GXIT$SQ* (IN *GET$SQ*) TO TERMINATE. 
*0        FOR THE 176:  X4 KEEPS THE SCM/LCM ADDRESS AND A FLAG (IN THE 
*         SIGN BIT) TO INDICATE LCM.  HOWEVER, THE MAIN LOOPS MOVE X4 
*         INTO A6 WHEN SCM IS IN USE. 
*0D   REGISTERS USED
*0        A1347,B23456,X01234567
*0D   OTHER CODE
*0        PROGRAMS- GET$SQ
*         MACROS-   ON.RM,F.RM,SET.RM,INC.RM,DEC.RM 
*#
          SST 
          B1=1
 BLANKS   DATA      10H 
 MAGIC    DATA      40404040404040404040B 
ABLANKS   DATA      00400040004000400040B 
AMAGIC    DATA      40004000400040004000B 
 MASK     VFD       60/0           BCC=0
          VFD       6/77B,54/0       BCC=1
          VFD       12/7777B,48/0    BCC=2
          VFD       18/777777B,42/0  BCC=3
          VFD       24/77777777B,36/0 
          VFD       30/7777777777B,30/0 
          VFD       36/777777777777B,24/0 
          VFD       42/77777777777777B,18/0 
          VFD       48/7777777777777777B,12/0 
          VFD       54/777777777777777777B,6/0
          VFD       60/77777777777777777777B
 SHIFT    DATA      0 
          DATA      6 
          DATA      12
          DATA      18
          DATA      24
          DATA      30
          DATA      36
          DATA      42
          DATA      48
          DATA      54
* CALL /GETDZ/               /GETDZ/  *COMDECK /GETDZ/
*CALL /GETDZ/ 
          END 
