;
; build clusterable PL/I FMS interface
;
;first we build a symbol table of FMS symbols (referenced in plifms.odl).
;we cant build PLIFMS with LIBR=FMSCLS or CLSTR=FMSCLS,FCSRES because then
;TKB gives "memory conflict" error. we cant say LB:[1,1]FMSCLS.STB/SS because
;then TKB gives "illegal reference to library P-section FDVROT", presumably
;due to the GBLREF on $FDV. so we build a special symbol table. all we need
;are the global constants (function codes, error codes, etc). the "empty/dl"
;prevents TKB from bringing FCS in, which would screw up PLIFMS (in particular
;.FINIT, accessed by FCSINIT) - empty.olb must be a library with nothing in it.
;
/nm,,fms.stb=lb:[30,11]fdvlib/lb:fdv
empty/dl
/
/
;
; now we build the PL/I FMS interface clusterable library
;
PLIFMS/-HD/LI/MM/SG,PLIFMS/MA/-SP,PLIFMS=PLIFMS/MP
STACK=0
PAR=PLIFMS:140000:40000
TASK=PLIFMS
;
;this ensures that the VEXT module (impure vector) is included 
;in the root of the user's address space:
;
GBLINC=vx$fms
;
;
;all our entry points must be revectored in user task:
;
GBLREF=FCLRSH,FGCF,FGET,FGETAF,FGETAL,FIDATA,FINIT,FINLN,FLCHAN,FLCLOS
GBLREF=FLEN,FLOPEN,FNDATA,FOUTLN,FPFT,FPUT,FPUTAL,FPUTL,FRETAL,FRETN
GBLREF=FSHOW,FSPOFF,FSPON,FSTAT,FSETST
;
;
;excludes for RMS vectoring:
;
GBLXCL=.SAVR1
GBLXCL=$RMCLO
GBLXCL=$RMCON
GBLXCL=$RMCRE
GBLXCL=$RMDEL
GBLXCL=$RMDIS
GBLXCL=$RMDSP
GBLXCL=$RMENT
GBLXCL=$RMERA
GBLXCL=$RMEXT
GBLXCL=$RMFIN
GBLXCL=$RMFLU
GBLXCL=$RMFRE
GBLXCL=$RMGET
GBLXCL=$RMNXT
GBLXCL=$RMOPE
GBLXCL=$RMPAR
GBLXCL=$RMPUT
GBLXCL=$RMREA
GBLXCL=$RMREL
GBLXCL=$RMREM
GBLXCL=$RMREN
GBLXCL=$RMRWI
GBLXCL=$RMSEA
GBLXCL=$RMSPA
GBLXCL=$RMTRU
GBLXCL=$RMUPD
GBLXCL=$RMWAI
GBLXCL=$RMWRI
;
;exclude all global symbols by hand.
;not sure all of this is necessary, but it works, and screw-ups in the area
;of symbols with clustering can lead to inscrutable program blow-ups....
;
GBLXCL=$FDV,.FCSJT,.FSRCB,FCSINIT,T$LUN
GBLXCL=$VEXT,$VEXTA,VX$FMI,VX$TKL,VX$TKH,VX$NRG,VX$STL
GBLXCL=CALLPL,FD$$NM,F$NAM,PLICPY,.ASLUN,.LNPUT,CRET$
GBLXCL=FD$$RQ,F$NUM,PLIENT,.BFRED,.MOVC,CSV$,FD$$SZ
GBLXCL=F$REQ,PLIFP,.BFWRT,.MOVCD,C$RET,FD.BLK,F$RSIZ,PLILEN
GBLXCL=.BUFGT,.ODCVT,C$RETS,FD.CR,F$STS,PLISDI,.CANCL,.OFLDG
GBLXCL=C$SAV,FD.FTN,F$TRM,PLISTR,.CLOSE,.OFLDP,ERRFIL,FD.INS
GBLXCL=F$VAL,PLZCPY,.CLOSF,.OPEN,FA.SHR,FD.PLC,F$$CHK
GBLXCL=R.FIX,.DCCVT,.OPENF,FD.RAN,F$$DBE,R.VAR,.DELET
GBLXCL=.OUTC,FC$ALL,FD.TTY,F$$DBM,SIGNAL,.ENTRY,.OUTCD,.OUTCS,FC$ANY
GBLXCL=FE$ARG,F$$DBP,STRLEN,.ERFLT,.PAGE,FC$CLS,FE$DLN
GBLXCL=F$$INM,S.FDB,.ERROR,.PARSE,FC$CSH,FE$DNM,F$$IVL
GBLXCL=.EXIT,.POSIT,FC$DAT,FE$DSP,FO.APD,F$$ONM,VX$FMD,.FATAL,.POSRC
GBLXCL=FC$GET,FE$FCD,FO.RD,F$$OVL,VX$FME,.FINIT,.PPASC,FC$GSC,FE$FCH
GBLXCL=FO.UPD,F.DSPT,VX$FMS,.FMTRT,.PRSDI,FC$LST,FE$FLB,FO.WRT,F.ERR
GBLXCL=$CFDV,.FORMT,.PRSDV,FC$OPN,FE$FLD,F.FACC,$CORE,.FREE,.PRSFN
GBLXCL=FC$PAL,FE$FNM,F.LUN,$DDIV,.FSRPT,.PUT,FC$PSC,FE$FRM,F.MBCT
GBLXCL=$DMUL,.GET,.PUTF,FC$PUT,FE$FSP,F.NRBD,$DSW,.GETF,.PUTFE
GBLXCL=FC$RAL,FE$ICH,F.OVBS,$LNTBL,.GETFE,.PUTFL,FC$RTN,FE$IFN,F.RACC
GBLXCL=$NLUN,.GETFL,.PUTF1,FC$SHO,FE$IMP,F.RATT,$OTSV,.GETF1,.RETRN
GBLXCL=FC$SLN,FE$INI,F.RCTL,$RLCB,.IFLDG,.SAVR1,FC$SPF,FE$IOL,$RQCB
GBLXCL=.IFLDP,.SKIP,FC$SPN,FE$IOR,F.RTYP,$SAVRG,.IOCAN,.SKIP1,FC$TRM
GBLXCL=FE$LIN,FS$SUC,F.URBD,$TASK,.IOERR,.SPTOP,FD$$AR,FE$NOF,F$CHN
GBLXCL=IE.EOF,.LINE,.STOP,FD$$CN,FE$NSC,F$FNC,IO.WVB,$$MSG
GBLXCL=.LNGET,.STPIO,FD$$CX,FE$STR,F$IMP,MSG,.ALLOT,.LNGTB,.VRCVT
GBLXCL=FD$$IM,FE$UTR,F$LEN,N.OVPT,.ASCPP,.LNGTH,..ALC1,..ALOC,..DID1
GBLXCL=..FINI,..PNT1,..RBLK,..SGR5,..WTW1,..ALUN,..DIRF,..IDPB,..PSDI
GBLXCL=..RDRN,..STFN,..XQIO,..BDRC,..EFCK,..MFID,..PSDV,..RFDB,..WAEF
GBLXCL=..XQI1,..BKRG,..EFC1,..MKDL,..PSFN,..RMOV,..WAIT,..CEFB,..ENTR
GBLXCL=..MLD,..PSIT,..RTAD,..CREA,..EXTD,..MVR1,..PSRC,..RWAC,..WAST
GBLXCL=..DEL1,..EXT1,..PARS,..PSRG,..RWAT,..WBLK,..DFDI,..FCSX,..PDI
GBLXCL=..PSR1,..SCR5,..WTWA,..DID,..FIND,..PGCR,..QIOW,..SEFB,..WTWD
//
