.PROC,COMPCPS*I,
I "- source input file name"         = (*F),
L "- listing output file name"       = (*F),
B "- binary output library name"     = (*F),
LO "- listing options"               = (*S14(ABCDEFGLMNRSTX),*N=0),
UN "- NOS/BE perm file ID"           = (*F,*N=),
.
.HELP
 The COMPCPS procedure assembles a COMPASS source program and
 places the output binaries into a specified library. This procedure
 is used as the Cyber 170 half of a NOS/VE COMPASS "cross assembler".

 Parameter   Default   Description
   Name       Value

   I          none     Source input file to be assembled
   L          none     Listing output file to be produced
   B          none     Binary library to receive output
   LO          0       Listing options as per COMPASS assembler
   UN                  User name

.HELP,I
 The I parameter specifies the input source file. This file may be
 local or permanent.
.HELP,L
 The L parameter specifies the output listing file. This file will
 be permanent.
.HELP,B
 The B parameter specifies the binary output library. The output
 binary modules will be added to this library, or replaced in this
 library as appropriate.
.HELP,LO
 The LO parameter specifies the listing options. If not supplied
 then default COMPASS options will be used.
.HELP,UN
 The UN parameter specifies a permanent file ID on NOS/BE systems. This
 parameter must not be specified on NOS.
.ENDHELP
.IF,SYS.EQ.NOSB,CHECKUN.
  REQUEST,YYYYYDF,PF.
  REQUEST,L,PF.
  .IF,$UN$.EQ.$$,BADUN.
    NOTE(OUTPUT); THE #UN PARAMETER MUST BE SPECIFIED.
    REVERT,ABORT.
  .ENDIF,BADUN.
.ELSE,CHECKUN.
  .IF,$UN$.NE.$$,BADUN2.
    REVERT,ABORT. NO #UN PARAMETER ON NOS
  .ENDIF,BADUN2.
.ENDIF,CHECKUN.
.IFE(FILE(OPL,.NOT.AS),GETOPL)
  .IF,SYS.EQ.NOS,NOSSYS.
    GETFILE(OPL,OPL,LIBRARY,READ)
  .ELSE,NOSSYS.
    GETFILE,OPL,OPL,UN,READ.
  .ENDIF,NOSSYS.
  IFE(FILE(OPL,.NOT.AS),NOOPL)
    .IF,SYS.EQ.NOS.NOEXIT.
    DAYFILE(#L=YYYYYDF,FR=COMPCPS,OP=M)
    REPFILE(YYYYYDF,YYYYYDF,PRIVATE,READ,,UN)
    .IF,SYS.EQ.NOS.ONEXIT.
    UNLOAD(YYYYYDF)
    NOTE(OUTPUT); OPL NOT FOUND.
    REVERT(ABORT) OPL NOT FOUND
  ENDIF,NOOPL.
.ENDIF(GETOPL)
.IF,SYS.EQ.NOS,NOSTXTS.
  .IFE(FILE(NOSTEXT,.NOT.AS),GETNOST)
  COMTEXT(NOSTEXT,NOSTEXT)
  .ENDIF(GETNOST)
  .IFE(FILE(PSSTEXT,.NOT.AS),GETPSST)
  COMTEXT(PSSTEXT,PSSTEXT)
  .ENDIF(GETPSST)
  .IFE(FILE(SSYTEXT,.NOT.AS),GETSSYT)
  COMTEXT(SSYTEXT,SSYTEXT)
  .ENDIF(GETSSYT)
  .IFE(FILE(CETEXT,.NOT.AS),GETCET)
  COMTEXT(CETEXT,CETEXT)
  .ENDIF(GETCET)
.ENDIF,NOSTXTS.
GETFILE(YCMP,I,UN,READ,NO)
IFE(FILE(YCMP,.NOT.AS),NOSOURCE)
  .IF,SYS.EQ.NOS.NOEXIT.
  DAYFILE(#L=YYYYYDF,FR=COMPCPS,OP=M)
  REPFILE(YYYYYDF,YYYYYDF,PRIVATE,READ,,UN)
  .IF,SYS.EQ.NOS.ONEXIT.
  .IFE(FILE(NOSTEXT,.NOT.AS),RETNOST1)
    UNLOAD(NOSTEXT)
  .ENDIF(RETNOST1)
  .IFE(FILE(PSSTEXT,.NOT.AS),RETPSST1)
    UNLOAD(PSSTEXT)
  .ENDIF(RETPSST1)
  .IFE(FILE(SSYTEXT,.NOT.AS),RETSSYT1)
    UNLOAD(SSYTEXT)
  .ENDIF(RETSSYT1)
  .IFE(FILE(OPL,.NOT.AS),RETOPL1)
    UNLOAD(OPL)
  .ENDIF(RETOPL1)
  UNLOAD(YYYYYDF)
  NOTE(OUTPUT,NR); INPUT SOURCE NOT FOUND
  REVERT(ABORT) INPUT SOURCE NOT FOUND
ENDIF(NOSOURCE)
.IF,SYS.EQ.NOS,NOSASM.
  COMPASS(#I=YCMP,#L=L,#B=LGO,#LO=LO,X=OPL,A,G=NOSTEXT,G=PSSTEXT,G=SSYTEXT,
    G=CETEXT)
.ELSE,NOSASM.
  COMPASS(#I=YCMP,#L=L,#B=LGO,#LO=LO,X=OPL,A,S=CPUTEXT,S=PPTEXT,S=SSYTEXT,
    S=IOTEXT)
.ENDIF,NOSASM.
SKIP(ASSEMOK)
  EXIT(S)
  .IF,SYS.EQ.NOS.NOEXIT.
  REPFILE(L,L,PRIVATE,READ,,UN)
  DAYFILE(#L=YYYYYDF,FR=COMPCPS,OP=M)
  REPFILE(YYYYYDF,YYYYYDF,PRIVATE,READ,,UN)
  .IF,SYS.EQ.NOS.ONEXIT.
  .IFE(FILE(NOSTEXT,.NOT.AS),RETNOST2)
    UNLOAD(NOSTEXT)
  .ENDIF(RETNOST2)
  .IFE(FILE(PSSTEXT,.NOT.AS),RETPSST2)
    UNLOAD(PSSTEXT)
  .ENDIF(RETPSST2)
  .IFE(FILE(SSYTEXT,.NOT.AS),RETSSYT2)
    UNLOAD(SSYTEXT)
  .ENDIF(RETSSYT2)
  .IFE(FILE(OPL,.NOT.AS),RETOPL2)
    UNLOAD(OPL)
  .ENDIF(RETOPL2)
  UNLOAD(YYYYYDF,YCMP,LGO,L)
  NOTE(OUTPUT,NR); ASSEMBLY ERRORS
  REVERT(ABORT) ASSEMBLY ERRORS
ENDIF(ASSEMOK)
REPFILE(L,L,PRIVATE,READ,,UN)
SKIP(REPFILEOK)
  EXIT(S)
  .IF,SYS.EQ.NOS.NOEXIT.
  DAYFILE(#L=YYYYYDF,FR=COMPCPS,OP=M)
  REPFILE(YYYYYDF,YYYYYDF,PRIVATE,READ,,UN)
  .IF,SYS.EQ.NOS.ONEXIT.
  .IFE(FILE(NOSTEXT,.NOT.AS),RETNOST3)
    UNLOAD(NOSTEXT)
  .ENDIF(RETNOST3)
  .IFE(FILE(PSSTEXT,.NOT.AS),RETPSST3)
    UNLOAD(PSSTEXT)
  .ENDIF(RETPSST3)
  .IFE(FILE(SSYTEXT,.NOT.AS),RETSSYT3)
    UNLOAD(SSYTEXT)
  .ENDIF(RETSSYT3)
  .IFE(FILE(OPL,.NOT.AS),RETOPL3)
    UNLOAD(OPL)
  .ENDIF(RETOPL3)
  UNLOAD(YYYYYDF,YCMP,LGO,L,B)
  NOTE(OUTPUT,NR); LISTING REPLACE FAILED
  REVERT(ABORT) LISTING REPLACE FAILED
ENDIF(REPFILEOK)
REPLIB(LGO,B,,UN)
SKIP(REPLIBOK)
  EXIT(S)
  .IF,SYS.EQ.NOS.NOEXIT.
  DAYFILE(#L=YYYYYDF,FR=COMPCPS,OP=M)
  REPFILE(YYYYYDF,YYYYYDF,PRIVATE,READ,,UN)
  .IF,SYS.EQ.NOS.ONEXIT.
  .IFE(FILE(NOSTEXT,.NOT.AS),RETNOST4)
    UNLOAD(NOSTEXT)
  .ENDIF(RETNOST4)
  .IFE(FILE(PSSTEXT,.NOT.AS),RETPSST4)
    UNLOAD(PSSTEXT)
  .ENDIF(RETPSST4)
  .IFE(FILE(SSYTEXT,.NOT.AS),RETSSYT4)
    UNLOAD(SSYTEXT)
  .ENDIF(RETSSYT4)
  .IFE(FILE(OPL,.NOT.AS),RETOPL4)
    UNLOAD(OPL)
  .ENDIF(RETOPL4)
  UNLOAD(YYYYYDF,YCMP,LGO,L,B)
  NOTE(OUTPUT,NR); LIBRARY UPDATE FAILED
  REVERT(ABORT) LIBRARY UPDATE FAILED
ENDIF(REPLIBOK)
.IF,SYS.EQ.NOS.NOEXIT.
DAYFILE(#L=YYYYYDF,FR=COMPCPS,OP=M)
REPFILE(YYYYYDF,YYYYYDF,PRIVATE,READ,,UN)
.IF,SYS.EQ.NOS.ONEXIT.
.IFE(FILE(NOSTEXT,.NOT.AS),RETNOST5)
  UNLOAD(NOSTEXT)
.ENDIF(RETNOST5)
.IFE(FILE(PSSTEXT,.NOT.AS),RETPSST5)
  UNLOAD(PSSTEXT)
.ENDIF(RETPSST5)
.IFE(FILE(SSYTEXT,.NOT.AS),RETSSYT5)
  UNLOAD(SSYTEXT)
.ENDIF(RETSSYT5)
.IFE(FILE(OPL,.NOT.AS),RETOPL5)
  UNLOAD(OPL)
.ENDIF(RETOPL5)
UNLOAD(YYYYYDF,YCMP,LGO,L,B)
REVERT. ASSEMBLED I --> B
/EOR
