*DECK SM5FROM 
          IDENT  SM5FROM
          TITLE  SM5FROM -  GATHER PARAMETERS ABOUT INPUT FILES 
          COMMENT  GATHER PARAMETERS ABOUT INPUT FILES
          SPACE  4
**        SM5FROM -  GATHER PARAMETERS ABOUT INPUT FILES
* 
*     CALLING SEQUENCE- 
*         SM5FROM(<FILE>, ..., <FILE>); 
* 
*     GIVEN-
*         <FILE> = SPECIFICATION OF A FILE NAME.  MAY BE QUOTED 
*           LITERAL (LEFT-JUSTIFIED, BLANK-FILLED) OR AN INTEGER
*           VALUE  (INDICATING FORTRAN FILE "TAPE<FILE>").
* 
*     DOES- 
*         SETS NPARMS = NUMBER OF PARAMETERS SPECIFIED. 
*         SETS ARRY = ARRAY OF VALUES OF PARAMETERS.
*         CALLS S$5FROM(NPARMS, ARRY);
  
  
          ENTRY  SM5FROM
 SM5FROM  SUBR
          SB1    1           CONSTANT 1 
          SB7    -1          COUNT OF PARAMETERS
 SM5FROM1 SB7    B7+B1       INCREMENT COUNT OF PARAMETERS
          SA2    A1+B7       GET ADDRESS OF NEXT PARAMETER
          NZ     X2,SM5FROM1 IF MORE PARAMETERS, LOOP 
  
          SB6    MAXPARMS 
          IFTHEN B7>B6       IF TOO MANY GIVEN PARAMETERS,
            SB7    MAXPARMS    KEEP ONLY SOME 
            ENDIF.
  
          SB6    0           INDEX TO PARAMETERS
SM5FROM2  SA2    A1+B6       GET ADDRESS OF NEXT PARAMETER
          MX4    -18
          BX0    X4*X2       SEE IF WE HAVE PART-WORD INFORMATION 
          ZR     X0,OK
* FETCH BEGINNING CHARACTER POSITION IN BITS 24-27
          LX0    36 
          MX2    -4 
          BX2    -X2*X0      BCP IN X2
          SX3    6
          IX2    X3*X2       BCP IN BITS
          SB2    X2          FOR MNS= 
          SB4    0           FOR MNS= 
* FETCH LENGTH IN CHARACTERS FROM BITS 30-47
          LX0    -6 
          MX2    -18
          BX2    -X2*X0      LENGTH IN X2 
          IX0    X2*X3       LENGTH IN BITS, FOR MNS= 
          SA2    A1+B6       SOURCE FIRST WORD ADDRESS IN X2
          SX4    ARRY+B6
          SX7    B6 
          SA7    SAVEB6 
          SX7    A1 
          SA7    SAVEA1 
          SA3    =10R 
          BX7    X3 
          SA7    ARRY+B6
          CALL   MNS= 
          SA1    SAVEA1 
          SA1    X1 
          SA2    SAVEB6 
          SB6    X2 
          EQ     SM5FROM3 
OK        SA3    X2          GET VALUE OF NEXT PARAMETER
          BX6    X3 
          SA6    ARRY+B6     STORE VALUE IN *ARRY*
SM5FROM3  SB6    B6+B1       INCREMENT INDEX
          LT     B6,B7,SM5FROM2  IF MORE VALUES TO MOVE, LOOP 
  
          SX6    B7          STORE NUMBER OF PARAMETERS 
          SA6    NPARMS 
  
          SA1    APLIST      ACTUAL PARAMETER LIST
          CALL   S$5FROM
          EXIT
  
  
 APLIST   VFD    42/,18/NPARMS
          VFD    42/,18/ARRY
  
 NPARMS   BSS    1           NUMBER OF PARAMETERS IN *ARRY* 
  
 MAXPARMS EQU    100+1       (+1 SO S$5FILE CAN DETECT TOO MANY FILES)
 ARRY     BSS    MAXPARMS 
 SAVEA1   BSS    1
 SAVEB6   BSS    1
          END 
