          CTEXT  DSI$GET HARDWARE ELEMENT                               
          SPACE  4                                                      
 QUAL$    IF     -DEF,QUAL$                                             
          QUAL   DSIGHE                                                 
 QUAL$    ENDIF                                                         
          BASE   M                                                      
*         COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992              
          SPACE  4                                                      
***       DSI$GET_HARDWARE_ELEMENT                                      
*         G. J. FALCONER     85/05/14.                                  
          SPACE  4                                                      
***              PROVIDES ROUTINES TO FIND SPECIFIC OR ARBITRARY        
*         HARDWARE ELEMENT DEFINITIONS AND TO REWRITE THE               
*         DEFINITON.                                                    
*                                                                       
*         THIS DECK REQUIRES THAT THE USER HAS DEFINED A BUFFER         
*         IN THE FOLLOWING MANNER OR OF THE APPROPRIATE SIZE.           
*                                                                       
*                  BSSZ   3           SLACK FOR ENTRY                   
*         HBUF     BSSZ   CMXLEN      HARDWARE ELEMENT BUFFER           
*                                                                       
*         IF THE WRITE MRT ROUTINE (*WHE*) IS TO BE USED, THE           
*         SYMBOL WHE$ MUST BE DEFINED.                                  
 GNE      SPACE  4,10                                                   
**        GNE - GET NEXT HARDWARE ELEMENT ENTRY.                        
*                                                                       
*         ENTRY  GNEA = PP WORD OFFSET TO NEXT ELEMENT.                 
*                INXW = WORD OFFSET TO 2AP IN CIP DIRECTORY.            
*                INXP = PP WORD OFFSET WITHIN 2AP.                      
*                (HP - HP+1) = R-REGISTER POINTER TO 2AP.               
*                                                                       
*         EXIT   HBUF = CONTAINS NEXT ENTRY.                            
*                A = ELEMENT ID OR -1 IF NO MORE ENTRIES.               
*                                                                       
*         USES   T1.                                                    
*                                                                       
*         NOTE   *HBUF* AND 3 ADDITIONAL CELLS MUST BE DEFINED BY       
*                THE CALLER OF THIS COMMON DECK.                        
                                                                        
                                                                        
 GNE1     LCN    1                                                      
                                                                        
 GNE      SUBR               ENTRY/EXIT                                 
                                                                        
*         CONVERT PP WORD OFFSET TO CM ADDRESS AND OFFSET FROM HBUF.    
                                                                        
          LDM    INDEX       INDEX INTO HARDWARE TABLE                  
          LPN    3                                                      
          STD    T1                                                     
          LDC    HBUF                                                   
          SBD    T1                                                     
          STM    GNEA        WHERE TO READ SO ENTRY STARTS AT HBUF      
                                                                        
          LDN    CMXLEN/4                                               
          STD    T1                                                     
          LDM    INDEX       COMPUTE CM WORD OFFSET                     
          SHN    -2                                                     
          ADC    RR+1                                                   
 INXW     EQU    *-1                                                    
          LRD    HP                                                     
          CRML   *,T1        READ INTO HBUF                             
 GNEA     EQU    *-1                                                    
          LDM    HBUF                                                   
          ZJN    GNE1                                                   
          SHN    -6                                                     
          RAM    INDEX                                                  
          LDM    HBUF        FETCH ELEMENT ID                           
          LPN    77                                                     
          UJN    GNEX        RETURN                                     
                                                                        
 INDEX    CON    0                                                      
                                                                        
 FHE      SPACE  4,10                                                   
**        FHE - FIND HARDWARE ELEMENT                                   
*                                                                       
*         ENTRY  (A) = 6/NUMBER, 12/KIND OF ELEMENT.                    
*                                                                       
*         EXIT   (A) = ORDINAL OF ELEMENT OR -1 IF NOT FOUND.           
*                                                                       
*         USES   T2, T3, T4.                                            
*                                                                       
*         CALLS  GNE, RHT.                                              
                                                                        
                                                                        
 FHE      SUBR                                                          
          STD    T3          KIND OF ELEMENT                            
          SHN    -14                                                    
          STD    T4          NUMBER OF ELEMENT                          
          LDN    0                                                      
          STD    T2                                                     
          RJM    RHT         RESET HARDWARE TABLE                       
                                                                        
 FHE1     AOD    T2          INCREMENT ELEMENT ORDINAL                  
          RJM    GNE         GET NEXT ELEMENT                           
          MJN    FHEX        IF AT END OF TABLE                         
          SBD    T3                                                     
          NJN    FHE1        IF WRONG KIND OF ELEMENT                   
          SOD    T4                                                     
          PJN    FHE1        IF WRONG NUMBER                            
          SOD    T2          ELEMENT ORDINAL                            
          UJN    FHEX        RETURN                                     
 PHT      SPACE  4,10                                                   
          USE    PRESET                                                 
                                                                        
**        PHT - PREPARE HARDWARE TABLES.                                
*                                                                       
*         EXIT   HP, INXP, INDEX = SETUP FOR GNE.                       
*                                                                       
*         USES   W0 - W3.                                               
*                                                                       
*         CALLS  FCM.                                                   
                                                                        
                                                                        
 PHT      SUBR               ENTRY/EXIT                                 
          FINDCM 2AP         FIND 2AP IN THE CIP CM DIRECTORY           
          RAM    INXW                                                   
          CRDL   W0          READ HDWR OFFSET VALUE                     
          LDD    W0                                                     
          STM    INXP        SAVE PP WORD OFFSET TO HARDWARE TABLE      
          STM    INDEX       RESET HARDWARE TABLE                       
          SRD    HP          SAVE R-REGISTER POINTER                    
          UJN    PHTX        RETURN                                     
                                                                        
          USE    *                                                      
 RHT      SPACE  4,10                                                   
**        RHT - RESET HARDWARE TABLE.                                   
*                                                                       
*         USES   NONE.                                                  
*                                                                       
*         EXIT   INDEX = RESET TO START OF TABLE.                       
                                                                        
                                                                        
 RHT      SUBR               ENTRY/EXIT                                 
          LDC    **                                                     
 INXP     EQU    *-1         PP WORD OFFSET TO HARDWARE TABLE           
          STM    INDEX                                                  
          UJN    RHTX        RETURN                                     
                                                                        
                                                                        
 .A       IF     DEF,WHE$                                               
 WHE      SPACE  4,15                                                   
**        WHE - WRITE HARDWARE ELEMENT.                                 
*                                                                       
*         ENTRY  (A) = 6/NUMBER, 12/KIND OF ELEMENT.                    
*                (T5) = FWA OF NEW ELEMENT DEFINITION.                  
*                                                                       
*         EXIT   (A) = 0 IF REQUEST COMPLETED SUCCESSUFULLY.            
*                    = -1 IF REQUEST COULD NOT BE COMPLETED.            
*                (HBUF) = NEW DESCRIPTOR.                               
*                                                                       
*         USES   T1, T2, T3, T5.                                        
*                                                                       
*         CALLS  DBC, EBC, FHE.                                         
                                                                        
                                                                        
 WHE20    LCN    1           ERROR                                      
                                                                        
 WHE      SUBR               ENTRY/EXIT                                 
          RJM    FHE         FIND HARDWARE ELEMENT                      
          MJN    WHEX        IF ELEMENT NOT IN MRT CURRENTLY            
          LDM    GNEA        SET OFFSET                                 
          STM    WHEA                                                   
          LDC    HBUF                                                   
          STD    T2                                                     
          LDIL   T2          HEADERS MUST MATCH                         
          LMIL   T5                                                     
          NJN    WHE20       IF MISMATCH                                
          LDIL   T2          GET NUMBER OF BYTES                        
          SHN    -6                                                     
          STDL   T3                                                     
          LMC    777777                                                 
          RAM    INDEX                                                  
 WHE10    LDIL   T5          TRANSFER NEW DEFINITION TO HBUF            
          STIL   T2                                                     
          AOD    T5                                                     
          AOD    T2                                                     
          SOD    T3                                                     
          NJN    WHE10       IF TRANSFER NOT COMPLETE                   
          RJM    DBC         DISABLE BOUNDS CHECKING                    
          LDN    CMXLEN/4                                               
          STD    T1                                                     
          LDM    INDEX                                                  
          SHN    -2                                                     
          ADML   INXW                                                   
          ADC    RR                                                     
          LRD    HP                                                     
          CWML   *,T1                                                   
 WHEA     EQU    *-1                                                    
          RJM    EBC         ENABLE BOUNDS CHECKING                     
          LDN    0           REQUEST COMPLETED NORMALLY                 
          UJP    WHEX        RETURN                                     
                                                                        
                                                                        
 .A       ENDIF                                                         
          SPACE  4                                                      
          BASE   *                                                      
 QUAL$    IF     -DEF,QUAL$                                             
          QUAL   *                                                      
 GNE      EQU    /DSIGHE/GNE                                            
 FHE      EQU    /DSIGHE/FHE                                            
 PHT      EQU    /DSIGHE/PHT                                            
 .B       IF     DEF,WHE$                                               
 WHE      EQU    /DSIGHE/WHE                                            
 .B       ENDIF                                                         
 QUAL$    ENDIF                                                         
          ENDX                                                          
