; ; 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 //