COMPUFT 
COMMON
          CTEXT  COMPUFT - UPDATE FAMILY ORDINAL TABLE. 
 UFT      SPACE  4,10 
          IF     -DEF,QUAL$,1 
          QUAL   COMPUFT
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 UFT      SPACE  4,10 
***       UFT - UPDATE FAMILY ORDINAL TABLE.
*         H. C. PORTILLO.    81/09/17.
 UFT      SPACE  4,10 
***       *COMPUFT* PROVIDES THE INTERFACE FOR SEARCHING AND UPDATING 
*         THE FAMILY ORDINAL TABLE. 
* 
*         IF THE SYMBOL *GFO$* IS DEFINED, THE ROUTINE *GFO*
*         (GET FAMILY ORDINAL) WILL BE ASSEMBLED.  *GFO* IS USED TO 
*         CONVERT A FAMILY NAME TO A FAMILY ORDINAL.  *GFO* ALSO
*         UPDATES THE *FOT* WHEN REQUESTED. 
* 
*         IF THE SYMBOL *DFF$* IS DEFINED, THE CODE IN *GFO* TO ADD THE 
*         FAMILY NAME TO THE FOT WILL NOT BE ASSEMBLED. 
* 
*         IF THE SYMBOL *GFM$* IS DEFINED, THE ROUTINE *GFM*
*         (GET FAMILY NAME) WILL BE ASSEMBLED.  *GFM* IS USED TO
*         CONVERT A FAMILY ORDINAL TO A FAMILY NAME.
 GFO$     IF     DEF,GFO$ 
 GFO      SPACE  4,25 
**        GFO - GET FAMILY ORDINAL. 
* 
*         ENTRY  (FN - FN+4) = 42/ FAMILY NAME, 18/ UNKNOWN.
*                IF *DFF$* IS NOT DEFINED, (A) = 0 TO ADD FAMILY TO THE 
*                FAMILY ORDINAL TABLE IF NOT FOUND. 
*                (A) .NE.  0 DO NOT ADD FAMILY NAME.
* 
*         EXIT   (A) = 0 IF FAMILY NAME FOUND.
*                (A) = 1 IF FAMILY NAME ADDED.  (*DFF$* NOT DEFINED)
*                (A) = 2 IF FAMILY NOT FOUND AND ADD NOT SELECTED.
*                (A) = 3 IF FAMILY ORDINAL TABLE FULL.  (*DFF$* NOT 
*                DEFINED. 
*                (A) .LT. 0 IF ERROR FLAG SET.
*                (FN - FN+4) = 42/ FAMILY NAME, 6/, 12/ FOT ORDINAL 
*                            IF FOUND OR ADDED TO *FOT*.
*                (FN+4) = 0 IF NOT FOUND AND NOT ADDED. 
* 
*         USES   T2, CM - CM+4, CN - CN+4.
* 
*         CALLS  SFN. 
* 
*         MACROS DELAY, MONITOR, PAUSE. 
* 
*         XREF   COMSCPS, COMSEVT.
  
  
 GFO7     LDN    2           SET EXIT CONDITION 
  
 GFO      SUBR               ENTRY/EXIT 
          STD    T2          SAVE OPTION
          LDD    FN+3        CLEAR EXTRANEOUS INFORMATION 
          SCN    77 
          STD    FN+3 
          LDN    0
          STD    FN+4 
          LDC    FOTP        READ CONTROL WORD
          CRD    CN 
          RJM    SFN         SEARCH FAMILY NAME 
          ZJN    GFOX        IF FAMILY NAME FOUND 
 DFF$     IF     DEF,DFF$ 
          UJN    GFO7        RETURN ERROR CODE
 DFF$     ELSE
          LDD    T2          CHECK ENTRY OPTION 
          NJN    GFO7        IF ADD NOT SELECTED
 GFO1     DELAY 
          PAUSE 
          LDD    CM+1 
          NJN    GFO3        IF ERROR FLAG SET
          LDN    ZERL 
          CRD    CM 
          LDD    CN 
          STD    CM+3 
          LDD    CN+1 
          STD    CM+4 
          MONITOR UTEM       INTERLOCK FOT
          LDC    FOTP        READ CONTROL WORD
          CRD    CN 
          LDD    CM+1 
          ZJN    GFO5        IF INTERLOCKED 
          LDD    CN+4 
          NJN    GFO1        IF FOT NOT FULL
 GFO2     LDN    ZERL        ISSUE FOT FULL EVENT 
          CRD    CM 
          LDN    FOTE 
          STD    CM+4 
          MONITOR EATM       ISSUE EVENT
*         LDN    0
*         STD    FN+4 
          LDN    MXET+3 
 GFO3     SBN    MXET 
 GFO4     LJM    GFOX        RETURN 
  
 GFO5     RJM    SFN         SEARCH FOR FAMILY NAME 
          ZJN    GFO6        IF FAMILY NAME FOUND 
          LDN    ZERL 
          CRD    CM 
          LDN    PFOT        ENTER FAMILY NAME IN FOT 
          STD    CM+2 
          LDD    MA 
          CWD    FN 
          MONITOR MTRM
          LDD    CM+1        SET FOT ORDINAL
          STD    FN+4 
          AOD    T2 
 GFO6     LDD    CN 
          SHN    14 
          LMD    CN+1 
          CRD    CM 
          LDN    0           CLEAR FOT INTERLOCK
          STD    CM+4 
          LDD    CN 
          SHN    14 
          LMD    CN+1 
          CWD    CM 
          LDD    FN+4 
          ZJP    GFO2        IF FOT FULL
          LDD    T2 
          LJM    GFO4        RETURN 
 DFF$     ENDIF 
 SFN      SPACE  4,10 
**        SFN - SEARCH FOR FAMILY NAME. 
* 
*         ENTRY  (FN - FN+4) = 42/ FAMILY NAME TO LOCATE, 18/0. 
*                (CN - CN+4) = FOT POINTER WORD.
* 
*         EXIT   (A) = 0 IF FAMILY NAME FOUND.
*                (A) .NE. 0 IF FAMILY NAME NOT FOUND. 
*                (FN+4) =  FOT ORDINAL SET IF FAMILY NAME FOUND.
* 
*         USES   CM - CM+4, FN+4. 
  
  
 SFN2     LDD    CN          READ NEXT FAMILY ORDINAL FROM FOT
          SHN    14 
          LMD    CN+1 
          ADD    FN+4 
          CRD    CM 
          LDD    CM 
          ZJN    SFN1        IF ENTRY NOT IN USE
          LMD    FN 
          NJN    SFN1        IF WRONG FAMILY
          LDD    FN+1 
          LMD    CM+1 
          NJN    SFN1        IF WRONG FAMILY
          LDD    FN+2 
          LMD    CM+2 
          NJN    SFN1        IF WRONG FAMILY
          LDD    FN+3 
          LMD    CM+3 
          SCN    77 
          NJN    SFN1        IF WRONG FAMILY
  
 SFN      SUBR               ENTRY/EXIT 
*         LDN    0           PRESET SEARCH INDEX
*         STD    FN+4 
 SFN1     AOD    FN+4        INCREMENT SEARCH INDEX 
          LMD    CN+2 
          NJN    SFN2        IF NOT END OF SEARCH 
          STD    FN+4 
          LDN    1           SET EXIT CONDITION 
          UJN    SFNX        RETURN 
  
 GFO$     ENDIF 
  
  
 GFM$     IF     DEF,GFM$ 
 GFM      SPACE  4,15 
**        GFM - GET FAMILY NAME.
* 
*         ENTRY  (A) = FAMILY ORDINAL.
* 
*         EXIT   (FN) = 0 IF FAMILY ORDINAL IS NOT
*                         ASSIGNED TO A FAMILY NAME.
*                (FN - FN+4) = FAMILY NAME, 18/0. 
* 
*         USES   FN - FN+4. 
* 
*         MACROS  MONITOR.
* 
*         NOTE   *GFM* WILL HANG IF THE FAMILY ORDINAL
*                IS OUT OF RANGE. 
  
  
 GFM2     LDD    FN          READ FAMILY ORDINAL FROM FOT 
          SHN    14 
          LMD    FN+1 
          ADD    T0 
 GFM3     CRD    FN 
  
 GFM      SUBR               ENTRY/EXIT 
          ZJN    GFM1        IF NO FOT ORDINAL
          STD    T0          SAVE FAMILY ORDINAL
          LDC    FOTP        READ FOT POINTER 
          CRD    FN 
          LDD    FN+2        CHECK FAMILY ORDINAL NUMBER TOO LARGE
          SBD    T0 
          PJN    GFM2        IF FAMILY ORDINAL IN RANGE 
 GFM1     MONITOR  HNGM      HANG PP
          LDN    ZERL 
          UJN    GFM3        RETURN 
  
 GFM$     ENDIF 
          SPACE  4,10 
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 GFO$     IF     DEF,GFO$ 
 GFO      EQU    /COMPUFT/GFO 
 GFO$     ENDIF 
 GFM$     IF     DEF,GFM$ 
 GFM      EQU    /COMPUFT/GFM 
 GFM$     ENDIF 
 QUAL$    ENDIF 
          ENDX
