*DECK MOREIN
USETEXT COMCBEG 
USETEXT COMADEF 
USETEXT COMACBX 
USETEXT COMAFET 
    FUNC MOREIN B;
# TITLE MOREIN - DETERMINE AVAILABILITY OF NEW INPUT EXTENT.  # 
  
      BEGIN  # MOREIN # 
  
# 
**    MOREIN - DETERMINE AVAILABILITY OF NEW INPUT EXTENT.
* 
*     MOREIN DETERMINES THE AVAILABILITY OF A NEW INPUT EXTENT
*     AND ESTABLISHES THE INPUT EXTENT STATE. 
* 
*     FUNC MOREIN B 
* 
*     ENTRY 
* 
* 
*     EXIT
* 
* 
* 
* 
*     PROCESS    PRESET INPUT NOT AVAILABLE FLAG. 
*                IF READING TAPE AND (INCOMPLETE OR PARITY-ERROR) 
*                  RETURN.
*                IF AT LEAST ONE DATA WORD AVAILABLE
*                THEN 
*                  SET PREVIOUS PRU NOT FULL
*                  IF INPUT CONTROL WORDS SUPPLIED
*                  THEN 
*                    CALCULATE DATA WORDS IN PRU. 
*                    IF ENTIRE PRU IS AVAILABLE 
*                    THEN 
*                      IF PRU IS SHORT
*                      THEN 
*                        SET EOR INPUT EXTENT.
*                        SAVE INPUT LEVEL 
*                      ELSE 
*                        SET FULL INPUT EXTENT. 
*                        SET PREVIOUS PRU WAS FULL
*                      SET INPUT EXTENT WORD SIZE.
*                      RETURN INPUT EXTENT AVAILABLE FLAG.
*                  ELSE 
*                    IF EOR SET IN INPUT FET
*                    THEN 
*                      SET EOR INPUT EXTENT.
*                      SAVE INPUT LEVEL 
*                    ELSE 
*                      SET FULL INPUT EXTENT. 
*                    SET INPUT EXTENT WORD SIZE (MUST RECALL DATAWDS).
*                    RETURN INPUT EXTENT AVAILABLE FLAG.
*                ELSE (NO DATA WORDS) 
*                  IF FET WAS NOT COMPLETE
*                    RETURN (RECHECK WHEN FET NOT BUSY).
*                  IF NO INPUT CONTROL WORDS
*                    SET INDATAWDS = 0. 
*                  IF EOI SET IN INPUT FET
*                    AND I/O STATE IS NOT DONE
*                  THEN 
*                    SET I/O STATE DONE.
*                    IF PREVIOUS PRU WAS FULL 
*                      OR OUTPUT EXTENT EXISTS
*                      AND CVT OUTPUT BLOCK IS NOT FULL 
*                    THEN 
*                      SET EOI INPUT EXTENT.
*                  ELSE 
*                    IF EOR SET IN INPUT FET (BUT NOT EOI)
*                      AND NO INPUT CONTROL WORDS 
*                      SET EOR INPUT EXTENT 
*                      SET INPUT LEVEL = INPUT FET LEVEL
*                RETURN.
* 
****  PROC MOREIN - XREF LIST BEGIN.
# 
  
      XREF
        BEGIN 
        FUNC DATAWDS I;              # DATA WORDS IN INPUT BUFFER # 
        FUNC MODIN I;                # MODULO INPUT BUFFER POINTER #
        END 
  
# 
# 
  
  
      ITEM AVAILWDS I;               # AVAILABLE DATA WRDS IN INPUT # 
                                     # OR CVT OUTPUT BLOCK SIZE # 
      ITEM COMPFET  B;               # FET NOT BUSY FLAG #
      ITEM PRUWDS   I;               # SIZE OF PRU WITH CONTROLWORDS #
  
CONTROL EJECT;
  
    MOREIN = FALSE; 
    COMPFET = GFETCOMPL;           # PRESERVE CURRENT FET STATE # 
    IF NOT INTAPE                  # IF NOT READING TAPE #
      OR (COMPFET                  # OR NO TAPE PARITY ERROR #
          AND GFETEC NE CIO$PERRC)
    THEN
      BEGIN 
      AVAILWDS = DATAWDS; 
      IF AVAILWDS GT 0
      THEN
        BEGIN 
        PREVINFULL = FALSE; 
        IF INCWS
        THEN
          BEGIN 
          P<CW> = GFETOUT;
        CONTROL IFEQ OS$NOS;
          PRUWDS = (CWBYTC + 4)/5 + 2;
          IF AVAILWDS GE PRUWDS 
          THEN
            BEGIN 
            IF CWBYTC NE (CWPRU * 5)
            THEN
              BEGIN 
              INDATSTATE = DSEOR; 
              P<LVLCW> = MODIN(PRUWDS - 1); 
              INLEVEL = LVLCWLVL; 
              END 
  
            ELSE
              BEGIN 
              INDATSTATE = DSFULL;
              PREVINFULL = TRUE;
              END 
  
            INWDSIZE = PRUWDS;
        CONTROL ENDIF;
        CONTROL IFEQ OS$NOSBE;
          IF AVAILWDS GE PRUWDSIZE
          THEN
            BEGIN 
            IF CWBYTC NE (5 * CWPRU)
            THEN
              BEGIN 
              INDATSTATE = DSEOR; 
              P<LVLCW> = MODIN((CWBYTC + 4)/5 + 1); 
              INLEVEL = LVLCWLVL; 
              END 
  
            ELSE
              BEGIN 
              INDATSTATE = DSFULL;
              PREVINFULL = TRUE;
              END 
        CONTROL ENDIF;
  
            MOREIN = TRUE;
            END 
          END 
  
        ELSE
          BEGIN 
          IF GFET$EOR 
          THEN
            BEGIN 
            INDATSTATE = DSEOR; 
            INLEVEL = GFETLEVEL;
            END 
  
          ELSE
            BEGIN 
            INDATSTATE = DSFULL;
            END 
  
          INWDSIZE = DATAWDS; 
          MOREIN = TRUE;
          END 
        END 
  
      ELSE                         # NO DATA WORDS #
        BEGIN 
        IF COMPFET                 # IF FET WAS COMPLETE #
        THEN
          BEGIN 
          IF NOT INCWS
          THEN
            BEGIN 
            INWDSIZE = 0; 
            END 
  
          IF (GFETEC EQ EOI)
            AND (INIOSTATE NE IODONE) 
          THEN
            BEGIN 
            INIOSTATE = IODONE; 
            IF OTWRAP 
            THEN
              BEGIN 
              AVAILWDS = OUTBLKBYT + OTPART2; 
              END 
  
            ELSE
              BEGIN 
              AVAILWDS = OUTBLKBYT; 
              END 
  
            IF PREVINFULL 
              OR ((OTDATSTATE NE DSNULL)
                AND (AVAILWDS NE OTFULLBYT))
            THEN
              BEGIN 
              PREVINFULL = FALSE; 
              INDATSTATE = DSEOI; 
              END 
  
            END 
  
          ELSE
            BEGIN 
            IF GFET$EOR 
              AND GFETEC NE EOI 
              AND NOT INCWS 
            THEN
              BEGIN 
              INDATSTATE = DSEOR; 
              INLEVEL = GFETLEVEL;
              MOREIN = TRUE;
              END 
  
            END 
  
          END 
  
        END 
  
      END 
  
      END  # MOREIN # 
  
    TERM
