*COMDECK  IOLIB 
          TITLE  IOLIB - SEARCH LIBRARY FOR PROCEDURE 
**        IOLIB  -  SEARCH LIBRARY FOR PROCEDURE
* 
*         ENTRY  FILEPC CONTAINS PROCEDURE NAME (59-18) 
* 
*         EXIT  X5 = 1 WHEN PROCEDURE IS FOUND
*                  = 0 WHEN PROCEDURE IS NOT FOUND
*               FILEPC CONTAINS LIBRARY NAME
* 
  
 IOLIB    SUBR   =
  
          SA1    FILEPC 
          MX2    N.LIPRN
          ERRNZ  59-S.LIPRN 
          BX6    X2*X1       ISOLATE PROCEDURE NAME 
          SA6    LIBWD+W.LIPRN  STORE PROCEDURE NAME
  
          ERRNZ  W.LIPRN-W.LISTS
          ERRNZ  W.LIPRN-W.LIFUNC 
  
 NOSBE    IFNE   HOST,SC2 
          SX0    FUNCSP      CODE TO SEARCH FOR PROCEDURE 
 OSNOS    IFEQ   HOST,NOS 
          SA3    PREFIX      INDICATE A $ ON CALL 
          SA4    BGLIBSR     NAME CALL
          ZR     X3,LIB1.0   USE FUNCSP FUNCTION CODE 
          ZR     X4,LIB1.0   USE FUNCSP FUNCTION CODE 
  
*         USE FUNCTION CODE TO SEARCH THE SYSTEM LIBRARY FOR PROCEDURE
  
          SX0    FUNCSSP
  
 LIB1.0   BSS    0
 OSNOS    ENDIF 
          ERRNZ  S.LIFUNC-N.LIFUNC+1
          MX7    0
          BX6    X0+X6
          SA7    LIBDIR 
          SA6    LIBWD+W.LIFUNC  RESET FUNCTION CODE
          SA7    A7+B1
          SA7    A7+B1       3 WORD DIRECTORY CLEARED 
  
*         SET UP WORD CONTAINING LIBRARY DIRECTORY ADDRESSES
  
          SA1    LIBWD+W.LIDIR
  
          ERRNZ  W.LIDIR-W.LILILI 
          ERRNZ  W.LIDIR-W.LIDIRL 
          ERRNZ  S.LIDIR-N.LIDIR+1
  
          SX0    LIBDIR      LOCATION TO STORE DIRECTORY
 OSBE     IFEQ   HOST,NOSBE 
          SX2    LIBLIST     LIST OF LIBRARIES TO SEARCH
          LX2    S.LILILI-N.LILILI+1
          BX0    X0+X2
 OSBE     ENDIF 
          BX6    X0+X1       COMBINE WITH LENGTH
          SA6    A1          STORE INTO DIRECTORY WORD
  
 NOSBE    ENDIF 
  
  
          LOADD  LIBWD,R
  
  
 OSSC2    IFEQ   HOST,SC2 
          SA1    LIBWD+W.LIFND  WORD WITH FOUND STATUS
          EX5    X1,LIFND       OUTPUT X5 = STATUS
          ZR     X5,IOLIB       PROCEDURE NOT FOUND - EXIT
  
          SA3    FILEPC 
          SA2    LIBWD+W.LILIB  LIBRARY NAME WORD 
          MX1    N.LILIB
          ERRNZ  59-S.LILIB 
          BX7    X1*X2       ISOLATE LIBRARY NAME 
          SA7    SNFNAM      SAVE #FILE LIB  NAME 
          BX3    -X1*X3      CLEAR OLD PROCEDURE NAME 
          BX7    X3+X7
          SA7    A3          RESTORE FILEPC 
  
  
          SETFIT FILEPC 
  
*         AFTER THE LOADD MACRO EXECUTED THE LOADER HAD LEFT THE LIBRARY
*         FILE POSITIONED AFTER THE FIRST CARD OF THE PROCEDURE HEADER. 
*         THEREFORE WE MUST SKIP BACK A LOGICAL (I.E. ONE CARD) TO
*         POSITION THE FILE SO THAT CCL CAN READ THE PROCEDURE HEADER.
*         HOWEVER THERE IS A RECORD MANAGER ERROR THAT EFFECTS
*         A SKIPBL IF THE CARD SPANS AN LCM BUFFER.  THEREFORE CCL
*         MUST EXECUTE A FIND MACRO TO POSITION THE FILE. 
  
          SA3    LIBWD+W.LIPRN
          MX7    N.LIPRN
          ERRNZ  59-S.LIPRN 
          BX7    X3*X7       EXTRACT PROCEDURE NAME 
          SA7    LIBFIND
          STORE  FILEPC,FO=LB,5,6,7 
          FIND   FILEPC,LIBFIND 
  
  
 OSSC2    ENDIF 
  
 OSBE     IFNE   HOST,SC2 
          SA1    LIBWD+W.LISTS
          EX0    X1,LISTS 
          NZ     X0,LIBERR   IF ERROR IN LOADD
  
          SA5    LIBDIR+W.LILFN 
          MX0    N.LISYS
          MX4    N.LILFN
          ZR     X5,IOLIB    EXIT IF PROCEDURE NOT FOUND
  
          BX7    X0*X5
          LX4    S.LILFN+1
          BX0    X0-X7
 NOSBE    IFEQ   HOST,NOSBE 
  
          BX2    X4*X5       EXTRACT FILE NAME/ CLEAR BIT 59
          BX7    X2 
          SA7    SNFNAM      SAVE #FILE USER LIB NAME 
          MX6    0           INDICATE USER LIBRARY
          NZ     X0,LIB4     IF NOT SYSTEM LIBRARY
  
*         THE PROCEDURE IS ON A SYSTEM LIBRARY. 
  
          SA6    SNFNAM      SAVE #FILE SYSTEM LIB NAME 
  
*         CALL LDL TO ATTACH ZZZZZ03,ZZZZZ04,ZZZZZ06
  
          SYSTEM LDL,RECALL,LIBLDL
  
  
*         RETURN THE FILE ZZZZZ06 WHICH WAS ATTACHED BUT IS NOT NEEDED
  
          SA5    =0LZZZZZ06 
          RJ     =XIORTN
  
*         DETERMINE FILE NAME 
*         BIT 47 INDICATES WHETHER ZZZZZ03 OR ZZZZZ04 IS THE FILE NAME. 
*         1=ZZZZZ03   0=ZZZZZ04 
  
          SA4    LIBDIR+W.LIFF
          SA2    =0LZZZZZ03 
          SA5    =0LZZZZZ04 
          LX4    59-S.LIFF
          BX6    X2 
          NG     X4,LIB4     IF FILE NAME = ZZ..03, RETURN ZZ..04 
  
          BX2    X5 
          BX5    X6 
          BX6    X2 
  
* 
*                X2  = FILE NAME OF SYSTEM LIBRARY TO BE SEARCHED 
*                X5  = FILE NAME OF SYSTEM LIBRARY TO BE RETURNED 
*                X6  = FILE NAME OF SYSTEM LIBRARY (ZERO IF USER LIB) 
* 
 LIB4     BSS 
          BX7    X5 
          SA7    LIBRTN      SAVE LFN TO BE RETURNED
          SA6    ZSYSLIB     SAVE NAME OF SYSTEM LIBRARY (OR ZERO)
          BX5    X2 
          SX2    FILEPC 
          RJ     IOFET       RESET FET FIELDS - LFN 
  
          SA5    ZSYSLIB
          ZR     X5,LIB5     IF USER LIBRARY
  
          SA5    LIBRTN      LFN TO BE RETURNED 
          RJ     =XIORTN     X5=FILE NAME TO BE RETURNED
  
  
 LIB5     BSS 
  
 NOSBE    ELSE
  
          BX7    X4*X5       EXTRACT FILE NAME + CLEAR BIT 59 
          MX6    0
          ZR     X0,LIB6     SYSTEM LIBRARY FOUND 
  
          BX6    X7 
          MX5    -1 
          BX7    -X5+X7      SET COMPLETE BIT 
          SA7    FILEPC      SET LOCAL LIBRARY NAME IN FET
          SA7    LIBRTN      SET FLAG SO AS NOT TO *ASSIGN* 
          SA4    PREFIX      CHECK $ PREFIX ON NAME CALL
          NZ     X4,LIBERR   PROCEDURE NOT FOUND
  
  
 LIB6     BSS 
          SA6    SNFNAM      SAVE #FILE LIBRARY NAME
  
 NOSBE    ENDIF 
          SA5    LIBDIR+W.LIPRU 
          SA4    FILEPC+6 
          EX7    X5,LIPRU 
          BX7    X4+X7
          SA7    FILEPC+6    SET RELATIVE PRU IN FET
          MX6    1
          LX6    48 
          SA2    FILEPC+1 
          BX6    X2+X6
          SA6    FILEPC+1    SET RANDOM BIT 
  
 OSBE     ENDIF 
  
 OSNOS    IFEQ   HOST,NOS 
  
          SA5    LIBRTN      CHECK LOCAL LIBRARY FLAG 
          NZ     X5,LIB7     LOCAL LIBRARY FOUND
  
  
*         IF THE CALL TO CCL WAS A NAME CALL PRECEDED BY A $, THEN
*         A PROCEDURE IS TO BE EXECUTED FROM THE SYSTEM LIBRARY.
*         HOWEVER, IF A LOCAL FILE EXISTS WITH THE SAME NAME, THE 
*         ASSIGN FUNCTION WILL HAVE TO USE THE SPECIAL NAME M.FNASN.
*         THE PROCNAME OR LFN WILL BE STORED IN FET+8.
  
          MX7    0
          SA7    FILEPC+8    ZERO FET+8 
          SA3    PREFIX      INDICATES $ ON CALL
          SA4    BGLIBSR     NAME CALL
          ZR     X3,LIB6.2   EXECUTE ASSIGN FUNCTION
          ZR     X4,LIB6.2   EXECUTE ASSIGN FUNCTION
  
          SA1    FILEPC 
          SA2    =0L"M.FNASN" FILE NAME FOR ASSIGN
          ERRNZ  59-S.FELFN 
          MX4    N.FELFN
          BX7    X1*X4
          BX6    -X4*X1 
          BX6    X2+X6
          SA7    FILEPC+8 
          SA6    FILEPC 
  
 LIB6.2   BSS    0
          ASSIGN FILEPC,L 
  
 LIB7     BSS 
  
 OSNOS    ENDIF 
  
          MX4    6
          SA1    SNFNAM 
          SB2    10 
  
 LIB8     BSS    0           FIND SIZE OF #FILE NAME
          LX1    54 
          BX0    X4*X1
          NZ     X0,LIB9     SAVE SIZE
  
          SB2    B2-1 
          GT     B2,B0,LIB8 NEXT CHARACTER
  
 LIB9     BSS    0           STORE LENGTH OF NAME 
          SX6    B2 
          SA6    SNFNML 
          SX5    1           RETURN CODE= PROCEDURE FOUND 
          JP     IOLIB       EXIT 
  
  
 LIBERR   BSS 
  
          SX5    B0          CODE= NOT FOUND
          JP     IOLIB       EXIT 
  
  
 OSSC2    IFEQ   HOST,SC2 
  
 LIBFIND  BSS    1           STORAGE AREA FOR FIND MACRO
          DATA   2           LENGTH -1
          BSSZ   2
 OSSC2    ELSE
 LIBRTN   BSSZ   1           STORAGE AREA FOR LFN 
 OSSC2    ENDIF 
  
  
