*DECK GETDFU
          IDENT     GET$FU
          COMMENT   CRM SQ GET U AND F RECORD PROCESSOR 
          LIST      C,F,X 
*#
*1CD  GET$UF
*0D   PURPOSE 
*0        PERFORM RECORD-TYPE-DEPENDENT PROCESSING ON F-TYPE AND U-TYPE 
*         RECORDS FOR GET$SQ.  ALSO PERFORM MOVE PROCESSING ON W, D, AND
*         T-TYPE RECORDS AFTER *GET$W* AND *GET$DT* HAVE FINISHED.
*0D   CALL
*             RT=U,F
*                   SX2       NUMBER-OF-AVAILABLE-CHARACTERS
*                   EQ        =XGET$U (RT=U)
*                   EQ        =XGET$F (RT=F)
*0            RT=W/D/T
*                   SX2       NUMBER-OF-AVAILABLE-CHARACTERS
*                   SX4       NUMBER OF CHARACTER REQUESTED 
*                   EQ        =XRMU$SQ
*0D   PARAMETERS
*0        A0        FIT ADDRESS.
*         B1        1.
*         X4        REQUESTED NUMBER OF CHARACTERS (RT=W/D/T ONLY). 
*         X2        NUMBER OF CHARACTERS IN BUFFER. 
*0D   ACTION
*0        SET RECORD LENGTH REQUEST (RRL) TO FIXED LENGTH (FL) FOR RT=F.
*0        IF THIS RECORD IS DELETED (OR BEING SKIPPED IN RESPONSE TO A
*         *SKIP* REQUEST), BRANCH TO THE ADDRESS GTMR$SQ IN GET$SQ
*         TO GET MORE CHARACTERS IF THE NUMBER REQUESTED IS NOT 
*         ALREADY IN THE BUFFER AND THEN CONVERT REQUESTED LENGTH TO
*         WORDS AND INCREMENT *OUT* POINTER BY IT. IF THE CONTINUATION
*         READ FLAG (CRF) IS NOT SET, BRANCH TO *GXIT$SQ* (IN *GET$SQ*) 
*         TO TERMINATE GET PROCESSING; IF *CRF* IS SET, FETCH THE 
*         RECORD TYPE PROCESSING ROUTINE ADDRESS FROM THE RTJG
*         FIT FIELD TO USE AS THE *AMAC$SQ* RETURN ADDRESS AND
*         BRANCH TO *AMAC$SQ* (IN *GET$SQ*) TO READ ANOTHER RECORD. 
*0        IF THIS RECORD IS NOT DELETED OR SKIPPED, SET UP PARAMETERS 
*         FOR *MOVE$RM* AND BRANCH THERE TO MOVE DATA FROM THE BUFFER 
*         TO THE USER WORKING STORAGE AREA. UPON RETURN, CHECK TO SEE 
*         IF THE REQUESTED LENGTH WAS AVAILABLE IN THE BUFFER. IF NOT,
*         BRANCH TO THE ADDRESS GTMR$SQ IN GET$SQ TO GET
*         MORE DATA THEN BRANCH TO *MOVE$RM* AGAIN AND REPEAT UNTIL 
*         THE REQUESTED LENGTH WAS TRANSFERED.
*0        WHEN ALL DATA HAS BEEN TRANSFERED TO THE USER WSA, CHECK TO 
*         SEE IF THERE WAS EXCESS DATA (RECORD LENGTH (RRL) > 
*         MAXIMUM RECORD LENGTH (MRL)).  IF SO, SET THE *GET* DELETE
*         FLAG AND BRANCH TO *AMAC$SQ* WHICH WILL BRANCH BACK TO GET$UF 
*         TO SKIP OVER THE EXCESS DATA. IF THERE WAS NO EXCESS DATA,
*         CHECK THE CONTINUATION READ FLAG (CRF). IF NOT SET, BRANCH
*         TO *GXIT$SQ* (IN *GET$SQ*) TO TERMINATE GET PROCESSING. 
*         IF SET, FETCH THE RECORD-TYPE PROCESSING ROUTINE ADDRESS
*         FROM THE RTJG FIT FIELD TO USE AS THE *AMAC$SQ* RETURN
*         ADDRESS AND BRANCH TO *AMAC$SQ* (IN *GET$SQ*) TO READ 
*         ANOTHER RECORD. 
*0D   REGISTERS USED
*0        A135,B3456,X0123457 
*0D   OTHER CODE
*0        PROGRAMS- MOVE$RM,GET$SQ
*         MACROS-   SET.RM,F.RM,ON.RM,OFF.RM,INC.RM 
*#
          SST 
          B1=1
          ENTRY     GET$U,GET$F,RMU$SQ,RMU0$SQ,RMU1$SQ
 TENTH    CON       0.1P48+1
 FWRD.RM  MICRO     1,,/36B/
 XREG.RM  MICRO     1,, 0 
* CALL /GETDU/               /GETDU/  *COMDECK /GETDU/
*CALL /GETDU/ 
* CALL /GETDF/               /GETDF/  *COMDECK /GETDF/
*CALL /GETDF/ 
* CALL /RMUDSQ/               /RMUDSQ/ *COMDECK /RMUDSQ/
*CALL /RMUDSQ/
          END 
