INTEGER FUNCTION SPAWN( PROCES, ARGS, DESC, INWAIT) LOGICAL*1 PROCES(480), ARGS(512), DESC(9) LOGICAL*1 INWAIT, WAIT, MSG(512), PRNAME(20), BXNAME(20) LOGICAL*1 TERMNL(480), TTY(480) LOGICAL*1 IMAGE(480), TEMP(480) LOGICAL*1 CLOWER LOGICAL*1 OUTFIL(480), ERRFIL(480), C INTEGER INIT, JUNK, I, TERUNT, N, BOXUNT, STATUS, UIC, PRIOR, BASP *RI INTEGER STSFLG, DCL, START, STOP, J, INPDSC(2), OUTDSC(2), ERRDSC( *2) INTEGER IMGDSC(2), PRCDSC(2), PRVADR(2), UNIT, LPID, OFFSET, SYS$C *REPRC INTEGER TRM_INFO(21,1) INTEGER OPNOUT, OPNERR, OUTMOD, IND INTEGER FILNFO, GTMODE, INDEXS, STMODE INTEGER TRNLOG, CREMBX, OPEN, GETPDB, EQUAL, PWAIT, DCLOUT INTEGER LNMPD(2), LNMTM(2), SYS$CRELNM INTEGER*4 GRP_LIST(4) INTEGER*4 JOB_LIST(4) INTEGER*2 GRP_WDS(8) INTEGER*2 JOB_WDS(8) INTEGER N4GRND INTEGER SPUNIT INTEGER PDONE INTEGER PMSG INTEGER MBXCHN LOGICAL*1 PID LOGICAL*1 PNAME INTEGER TERMBX INTEGER IOSB INTEGER TERMSG LOGICAL*1 B1, B2, B3, B4, B5, B6, B7, B8, B9, BA, BB, BC, BD, B0 INTEGER L1, L2, L3, L4, L5, L6, L7, L8, L9, LA, LB, LC, LD LOGICAL*1 BLKGTR(3) LOGICAL*1 BLKQMK(3) LOGICAL*1 TRMBOX(20) LOGICAL*1 NULDEV(6) LOGICAL*1 LOGIN(24) LOGICAL*1 DODCL(23) LOGICAL*1 NOVER(15) LOGICAL*1 ASS1(14) LOGICAL*1 ASS2(5) LOGICAL*1 ASS3(9) LOGICAL*1 ASS4(14) LOGICAL*1 LNMGRP(10) LOGICAL*1 LNMJOB(8) LOGICAL*1 ST001Z(22) LOGICAL*1 ST002Z(22) LOGICAL*1 ST003Z(3) LOGICAL*1 ST004Z(34) LOGICAL*1 ST005Z(42) LOGICAL*1 ST006Z(6) COMMON / CPROC / N4GRND, SPUNIT, PDONE(8), PMSG(21, 8), MBXCHN(8), * PID(9, 8), PNAME(480, 8) COMMON / CTRMBX / TERMBX, IOSB(2), TERMSG(21) COMMON / CQUOTA / B1, L1, B2, L2, B3, L3, B4, L4, B5, L5, B6, L6, *B7, L7, B8, L8, B9, L9, BA, LA, BB, LB, BC, LC, BD, LD, B0 EQUIVALENCE (GRP_LIST(1),GRP_WDS(1)) EQUIVALENCE (JOB_LIST(1),JOB_WDS(1)) DATA GRP_WDS/9, 2, 6*0/ DATA JOB_WDS/7, 2, 6*0/ DATA BLKGTR(1)/32/,BLKGTR(2)/62/,BLKGTR(3)/0/ DATA BLKQMK(1)/32/,BLKQMK(2)/63/,BLKQMK(3)/0/ DATA TRMBOX(1)/84/,TRMBOX(2)/82/,TRMBOX(3)/77/,TRMBOX(4)/66/,TRMBO *X(5)/88/,TRMBOX(6)/0/ DATA NULDEV(1)/78/,NULDEV(2)/76/,NULDEV(3)/65/,NULDEV(4)/48/,NULDE *V(5)/58/,NULDEV(6)/0/ DATA LOGIN(1)/115/,LOGIN(2)/121/,LOGIN(3)/115/,LOGIN(4)/36/,LOGIN( *5)/115/,LOGIN(6)/121/,LOGIN(7)/115/,LOGIN(8)/116/,LOGIN(9)/101/,LO *GIN(10)/109/,LOGIN(11)/58/,LOGIN(12)/108/,LOGIN(13)/111/,LOGIN(14) */103/,LOGIN(15)/105/,LOGIN(16)/110/,LOGIN(17)/111/,LOGIN(18)/117/, *LOGIN(19)/116/,LOGIN(20)/46/,LOGIN(21)/101/,LOGIN(22)/120/,LOGIN(2 *3)/101/,LOGIN(24)/0/ DATA DODCL(1)/36/,DODCL(2)/64/,DODCL(3)/115/,DODCL(4)/116/,DODCL(5 *)/95/,DODCL(6)/98/,DODCL(7)/105/,DODCL(8)/110/,DODCL(9)/58/,DODCL( *10)/100/,DODCL(11)/111/,DODCL(12)/100/,DODCL(13)/99/,DODCL(14)/108 */,DODCL(15)/47/,DODCL(16)/111/,DODCL(17)/117/,DODCL(18)/116/,DODCL *(19)/112/,DODCL(20)/117/,DODCL(21)/116/,DODCL(22)/61/,DODCL(23)/0/ DATA NOVER(1)/36/,NOVER(2)/115/,NOVER(3)/101/,NOVER(4)/116/,NOVER( *5)/32/,NOVER(6)/110/,NOVER(7)/111/,NOVER(8)/118/,NOVER(9)/101/,NOV *ER(10)/114/,NOVER(11)/105/,NOVER(12)/102/,NOVER(13)/121/,NOVER(14) */10/,NOVER(15)/0/ DATA ASS1(1)/36/,ASS1(2)/97/,ASS1(3)/115/,ASS1(4)/115/,ASS1(5)/105 */,ASS1(6)/103/,ASS1(7)/110/,ASS1(8)/47/,ASS1(9)/117/,ASS1(10)/115/ *,ASS1(11)/101/,ASS1(12)/114/,ASS1(13)/32/,ASS1(14)/0/ DATA ASS2(1)/32/,ASS2(2)/84/,ASS2(3)/84/,ASS2(4)/10/,ASS2(5)/0/ DATA ASS3(1)/36/,ASS3(2)/97/,ASS3(3)/115/,ASS3(4)/115/,ASS3(5)/105 */,ASS3(6)/103/,ASS3(7)/110/,ASS3(8)/32/,ASS3(9)/0/ DATA ASS4(1)/32/,ASS4(2)/83/,ASS4(3)/89/,ASS4(4)/83/,ASS4(5)/36/,A *SS4(6)/67/,ASS4(7)/79/,ASS4(8)/77/,ASS4(9)/77/,ASS4(10)/65/,ASS4(1 *1)/78/,ASS4(12)/68/,ASS4(13)/10/,ASS4(14)/0/ DATA LNMGRP(1)/76/,LNMGRP(2)/78/,LNMGRP(3)/77/,LNMGRP(4)/36/,LNMGR *P(5)/71/,LNMGRP(6)/82/,LNMGRP(7)/79/,LNMGRP(8)/85/,LNMGRP(9)/80/,L *NMGRP(10)/0/ DATA LNMJOB(1)/76/,LNMJOB(2)/78/,LNMJOB(3)/77/,LNMJOB(4)/36/,LNMJO *B(5)/74/,LNMJOB(6)/79/,LNMJOB(7)/66/,LNMJOB(8)/0/ DATA INIT / 1 / DATA ST001Z(1)/76/,ST001Z(2)/78/,ST001Z(3)/77/,ST001Z(4)/36/,ST001 *Z(5)/80/,ST001Z(6)/82/,ST001Z(7)/79/,ST001Z(8)/67/,ST001Z(9)/69/,S *T001Z(10)/83/,ST001Z(11)/83/,ST001Z(12)/95/,ST001Z(13)/68/,ST001Z( *14)/73/,ST001Z(15)/82/,ST001Z(16)/69/,ST001Z(17)/67/,ST001Z(18)/84 */,ST001Z(19)/79/,ST001Z(20)/82/,ST001Z(21)/89/,ST001Z(22)/0/ DATA ST002Z(1)/76/,ST002Z(2)/78/,ST002Z(3)/77/,ST002Z(4)/36/,ST002 *Z(5)/84/,ST002Z(6)/69/,ST002Z(7)/77/,ST002Z(8)/80/,ST002Z(9)/79/,S *T002Z(10)/82/,ST002Z(11)/65/,ST002Z(12)/82/,ST002Z(13)/89/,ST002Z( *14)/95/,ST002Z(15)/77/,ST002Z(16)/65/,ST002Z(17)/73/,ST002Z(18)/76 */,ST002Z(19)/66/,ST002Z(20)/79/,ST002Z(21)/88/,ST002Z(22)/0/ DATA ST003Z(1)/84/,ST003Z(2)/84/,ST003Z(3)/0/ DATA ST004Z(1)/67/,ST004Z(2)/97/,ST004Z(3)/110/,ST004Z(4)/110/,ST0 *04Z(5)/111/,ST004Z(6)/116/,ST004Z(7)/32/,ST004Z(8)/99/,ST004Z(9)/1 *14/,ST004Z(10)/101/,ST004Z(11)/97/,ST004Z(12)/116/,ST004Z(13)/101/ *,ST004Z(14)/32/,ST004Z(15)/116/,ST004Z(16)/101/,ST004Z(17)/114/,ST *004Z(18)/109/,ST004Z(19)/105/,ST004Z(20)/110/,ST004Z(21)/97/,ST004 *Z(22)/116/,ST004Z(23)/105/,ST004Z(24)/111/,ST004Z(25)/110/,ST004Z( *26)/32/,ST004Z(27)/109/,ST004Z(28)/97/,ST004Z(29)/105/,ST004Z(30)/ *108/,ST004Z(31)/98/,ST004Z(32)/111/,ST004Z(33)/120/,ST004Z(34)/0/ DATA ST005Z(1)/67/,ST005Z(2)/97/,ST005Z(3)/110/,ST005Z(4)/110/,ST0 *05Z(5)/111/,ST005Z(6)/116/,ST005Z(7)/32/,ST005Z(8)/111/,ST005Z(9)/ *112/,ST005Z(10)/101/,ST005Z(11)/110/,ST005Z(12)/32/,ST005Z(13)/116 */,ST005Z(14)/116/,ST005Z(15)/121/,ST005Z(16)/32/,ST005Z(17)/117/,S *T005Z(18)/110/,ST005Z(19)/105/,ST005Z(20)/116/,ST005Z(21)/32/,ST00 *5Z(22)/102/,ST005Z(23)/111/,ST005Z(24)/114/,ST005Z(25)/32/,ST005Z( *26)/115/,ST005Z(27)/112/,ST005Z(28)/97/,ST005Z(29)/119/,ST005Z(30) */110/,ST005Z(31)/32/,ST005Z(32)/65/,ST005Z(33)/83/,ST005Z(34)/84/, *ST005Z(35)/32/,ST005Z(36)/119/,ST005Z(37)/114/,ST005Z(38)/105/,ST0 *05Z(39)/116/,ST005Z(40)/101/,ST005Z(41)/115/,ST005Z(42)/0/ DATA ST006Z(1)/108/,ST006Z(2)/111/,ST006Z(3)/99/,ST006Z(4)/97/,ST0 *06Z(5)/108/,ST006Z(6)/0/ IF (.NOT.( INIT .EQ. 1 ))GOTO 23000 INIT = 0 CALL DSCBLD(LNMPD, ST001Z) CALL DSCBLD(LNMTM, ST002Z) GRP_LIST(2) = %LOC(LNMGRP) JOB_LIST(2) = %LOC(LNMJOB) JUNK = TRNLOG( ST003Z, TTY) I = 1 23002 IF (.NOT.(I .LE. 8 ))GOTO 23004 CALL PUTPDB(I) 23003 I = I + 1 GOTO 23002 23004 CONTINUE N4GRND = 0 IF (.NOT.( CREMBX( TRMBOX, 1, TERMBX, TERUNT) .EQ. -3 ))GOTO 23005 CALL ERROR( ST004Z ) 23005 CONTINUE SPUNIT = OPEN( TTY, 2) IF (.NOT.( SPUNIT .EQ. -3 ))GOTO 23007 CALL REMARK( ST005Z ) 23007 CONTINUE CALL ENBINT CALL RDTMBX 23000 CONTINUE IF (.NOT.( ARGS(1) .EQ. 0 ))GOTO 23009 SPAWN=(-3) RETURN 23009 CONTINUE WAIT = CLOWER(INWAIT) IF (.NOT.( GETPDB( OFFSET, WAIT) .EQ. -3 ))GOTO 23011 SPAWN=(-3) RETURN 23011 CONTINUE OPNOUT = -3 OPNERR = -3 OUTMOD = -3 CALL STRCPY( PROCES, PNAME( 1, OFFSET) ) CALL STRCPY( ARGS, MSG) CALL GENPNM( PRNAME, WAIT, OFFSET - 5 ) CALL ARGGEN( PRNAME, BXNAME) CALL GETPRV(PRVADR) CALL GETBPR(BASPRI) STSFLG = 0 IF (.NOT.(WAIT .EQ. 98))GOTO 23013 JUNK = SYS$CRELNM(, LNMPD, LNMTM,, GRP_LIST) GOTO 23014 23013 CONTINUE JUNK = SYS$CRELNM(, LNMPD, LNMTM,, JOB_LIST) 23014 CONTINUE STATUS = CREMBX( BXNAME, 0, MBXCHN(OFFSET), BOXUNT) IF (.NOT.( STATUS .NE. -3 ))GOTO 23015 UNIT = OPEN( BXNAME, 3) IF (.NOT.( UNIT .EQ. -3 ))GOTO 23017 STATUS = -3 23017 CONTINUE 23015 CONTINUE IF (.NOT.( STATUS .NE. -3 ))GOTO 23019 IF (.NOT.( WAIT .EQ. 98 ))GOTO 23021 CALL GETUIC(UIC) PRIOR = BASPRI / 2 CALL STRCPY( NULDEV, TERMNL) GOTO 23022 23021 CONTINUE UIC = 0 PRIOR = BASPRI CALL STRCPY( TTY, TERMNL) 23022 CONTINUE CALL STRCPY( PROCES, IMAGE) CALL FOLD(IMAGE) DCL = 0 IF (.NOT.( EQUAL( IMAGE, ST006Z ) .EQ. 1 ))GOTO 23023 DCL = 1 IF (.NOT.(WAIT .EQ. 98))GOTO 23025 STSFLG = 64 23025 CONTINUE CALL STRCPY( LOGIN, IMAGE) I = 1 CALL STCOPY( DODCL, 1, MSG, I) CALL STRCPY( TERMNL, TEMP) STATUS = DCLOUT( ARGS, START, STOP, TEMP) CALL STCOPY( TEMP, 1, MSG, I) CALL CHCOPY( 32, MSG, I) IF (.NOT.( STATUS .EQ. 1 ))GOTO 23027 J = 1 23029 IF (.NOT.(J .LE. START ))GOTO 23031 CALL CHCOPY( ARGS(J), MSG, I) 23030 J = J + 1 GOTO 23029 23031 CONTINUE J = STOP GOTO 23028 23027 CONTINUE J = 1 23028 CONTINUE CALL SCOPY( ARGS, J, MSG, I) CALL DSCBLD( INPDSC, BXNAME) CALL DSCBLD( OUTDSC, NULDEV) GOTO 23024 23023 CONTINUE CALL DSCBLD( INPDSC, TERMNL) CALL DSCBLD( OUTDSC, TERMNL) IF (.NOT.( WAIT .EQ. 119 ))GOTO 23032 IF (.NOT.( INDEXS( MSG, BLKGTR) .EQ. 0 ))GOTO 23034 IF (.NOT.( FILNFO( 2, OUTFIL, JUNK) .EQ. 0 ))GOTO 23036 OPNOUT = 2 OUTMOD = GTMODE(2) CALL APPRED( 2, 62, OUTFIL, MSG) 23036 CONTINUE 23034 CONTINUE IND = INDEXS( MSG, BLKQMK) IF (.NOT.( IND .NE. 0 ))GOTO 23038 C = MSG( IND + 2 ) IF (.NOT.( C .EQ. 32 .OR. C .EQ. 9 .OR. C .EQ. 0 ))GOTO 23040 IND = 0 23040 CONTINUE 23038 CONTINUE IF (.NOT.( IND .EQ. 0 ))GOTO 23042 IF (.NOT.( FILNFO( 3, ERRFIL, JUNK) .EQ. 0 ))GOTO 23044 OPNERR = 3 CALL APPRED( 3, 63, ERRFIL, MSG) 23044 CONTINUE 23042 CONTINUE 23032 CONTINUE 23024 CONTINUE CALL DSCBLD( ERRDSC, TERMNL) CALL DSCBLD( IMGDSC, IMAGE) CALL DSCBLD( PRCDSC, PRNAME) CALL UPPER(IMAGE) CALL QUOTAS (WAIT) CALL SYS$SETAST( %VAL(0) ) STATUS = SYS$CREPRC( LPID, IMGDSC, INPDSC, OUTDSC, ERRDSC, PRVADR, * B1, PRCDSC, %VAL(PRIOR), %VAL(UIC), %VAL(TERUNT), %VAL(STSFLG) ) IF (.NOT.( STATUS .NE. 1 ))GOTO 23046 STATUS = -3 CALL SYS$SETAST( %VAL(1) ) GOTO 23047 23046 CONTINUE N = LENGTH(MSG) IF (.NOT.( DCL .EQ. 1 ))GOTO 23048 CALL PUTLIN( NOVER, UNIT) CALL PUTLIN( ASS1, UNIT) CALL PUTLIN( TTY, UNIT) CALL PUTLIN( ASS2, UNIT) CALL PUTLIN( ASS3, UNIT) CALL PUTLIN( TTY, UNIT) CALL PUTLIN( ASS4, UNIT) CALL PUTLIN( MSG, UNIT) CALL PUTCH( 10, UNIT) GOTO 23049 23048 CONTINUE I = 48 + 64 CALL SYS$QIOW( %VAL(1), %VAL( MBXCHN(OFFSET) ), %VAL(I), , , , MSG *, %VAL(N), , , , ,) 23049 CONTINUE CALL CLOSE(UNIT) CALL PUTHEX( LPID, DESC) CALL STRCPY( DESC, PID( 1, OFFSET) ) IF (.NOT.( WAIT .NE. 98 ))GOTO 23050 N4GRND = N4GRND + 1 23050 CONTINUE CALL SYS$SETAST( %VAL(1) ) STATUS = 0 IF (.NOT.( WAIT .EQ. 119 ))GOTO 23052 IF (.NOT.( PWAIT( 1, DESC, TRM_INFO(1,1), DESC, 50) .EQ. 101 ))GOT *O 23054 STATUS = 101 23054 CONTINUE 23052 CONTINUE 23047 CONTINUE 23019 CONTINUE CALL SRESET( OPNOUT, OUTFIL) IF (.NOT.( OUTMOD .NE. -3 ))GOTO 23056 JUNK = STMODE( 2, OUTMOD) 23056 CONTINUE CALL SRESET( OPNERR, ERRFIL) IF (.NOT.( STATUS .EQ. -3 .OR. STATUS .EQ. 101 ))GOTO 23058 CALL PUTPDB(OFFSET) 23058 CONTINUE SPAWN=(STATUS) RETURN END