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 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 ST001Z(3) LOGICAL*1 ST002Z(34) LOGICAL*1 ST003Z(42) LOGICAL*1 ST004Z(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 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 INIT / 1 / DATA ST001Z(1)/84/,ST001Z(2)/84/,ST001Z(3)/0/ DATA ST002Z(1)/67/,ST002Z(2)/97/,ST002Z(3)/110/,ST002Z(4)/110/,ST0 *02Z(5)/111/,ST002Z(6)/116/,ST002Z(7)/32/,ST002Z(8)/99/,ST002Z(9)/1 *14/,ST002Z(10)/101/,ST002Z(11)/97/,ST002Z(12)/116/,ST002Z(13)/101/ *,ST002Z(14)/32/,ST002Z(15)/116/,ST002Z(16)/101/,ST002Z(17)/114/,ST *002Z(18)/109/,ST002Z(19)/105/,ST002Z(20)/110/,ST002Z(21)/97/,ST002 *Z(22)/116/,ST002Z(23)/105/,ST002Z(24)/111/,ST002Z(25)/110/,ST002Z( *26)/32/,ST002Z(27)/109/,ST002Z(28)/97/,ST002Z(29)/105/,ST002Z(30)/ *108/,ST002Z(31)/98/,ST002Z(32)/111/,ST002Z(33)/120/,ST002Z(34)/0/ DATA ST003Z(1)/67/,ST003Z(2)/97/,ST003Z(3)/110/,ST003Z(4)/110/,ST0 *03Z(5)/111/,ST003Z(6)/116/,ST003Z(7)/32/,ST003Z(8)/111/,ST003Z(9)/ *112/,ST003Z(10)/101/,ST003Z(11)/110/,ST003Z(12)/32/,ST003Z(13)/116 */,ST003Z(14)/116/,ST003Z(15)/121/,ST003Z(16)/32/,ST003Z(17)/117/,S *T003Z(18)/110/,ST003Z(19)/105/,ST003Z(20)/116/,ST003Z(21)/32/,ST00 *3Z(22)/102/,ST003Z(23)/111/,ST003Z(24)/114/,ST003Z(25)/32/,ST003Z( *26)/115/,ST003Z(27)/112/,ST003Z(28)/97/,ST003Z(29)/119/,ST003Z(30) */110/,ST003Z(31)/32/,ST003Z(32)/65/,ST003Z(33)/83/,ST003Z(34)/84/, *ST003Z(35)/32/,ST003Z(36)/119/,ST003Z(37)/114/,ST003Z(38)/105/,ST0 *03Z(39)/116/,ST003Z(40)/101/,ST003Z(41)/115/,ST003Z(42)/0/ DATA ST004Z(1)/108/,ST004Z(2)/111/,ST004Z(3)/99/,ST004Z(4)/97/,ST0 *04Z(5)/108/,ST004Z(6)/0/ IF (.NOT.( INIT .EQ. 1 ))GOTO 23000 INIT = 0 JUNK = TRNLOG( ST001Z, 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( ST002Z ) 23005 CONTINUE SPUNIT = OPEN( TTY, 2) IF (.NOT.( SPUNIT .EQ. -3 ))GOTO 23007 CALL REMARK( ST003Z ) 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 STATUS = CREMBX( BXNAME, 0, MBXCHN(OFFSET), BOXUNT) IF (.NOT.( STATUS .NE. -3 ))GOTO 23013 UNIT = OPEN( BXNAME, 3) IF (.NOT.( UNIT .EQ. -3 ))GOTO 23015 STATUS = -3 23015 CONTINUE 23013 CONTINUE IF (.NOT.( STATUS .NE. -3 ))GOTO 23017 IF (.NOT.( WAIT .EQ. 98 ))GOTO 23019 CALL GETUIC(UIC) PRIOR = BASPRI / 2 CALL STRCPY( NULDEV, TERMNL) GOTO 23020 23019 CONTINUE UIC = 0 PRIOR = BASPRI CALL STRCPY( TTY, TERMNL) 23020 CONTINUE CALL STRCPY( PROCES, IMAGE) CALL FOLD(IMAGE) DCL = 0 IF (.NOT.( EQUAL( IMAGE, ST004Z ) .EQ. 1 ))GOTO 23021 DCL = 1 IF (.NOT.(WAIT .EQ. 98))GOTO 23023 STSFLG = 64 23023 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 23025 J = 1 23027 IF (.NOT.(J .LE. START ))GOTO 23029 CALL CHCOPY( ARGS(J), MSG, I) 23028 J = J + 1 GOTO 23027 23029 CONTINUE J = STOP GOTO 23026 23025 CONTINUE J = 1 23026 CONTINUE CALL SCOPY( ARGS, J, MSG, I) CALL DSCBLD( INPDSC, BXNAME) CALL DSCBLD( OUTDSC, NULDEV) GOTO 23022 23021 CONTINUE CALL DSCBLD( INPDSC, TERMNL) CALL DSCBLD( OUTDSC, TERMNL) IF (.NOT.( WAIT .EQ. 119 ))GOTO 23030 IF (.NOT.( INDEXS( MSG, BLKGTR) .EQ. 0 ))GOTO 23032 IF (.NOT.( FILNFO( 2, OUTFIL, JUNK) .EQ. 0 ))GOTO 23034 OPNOUT = 2 OUTMOD = GTMODE(2) CALL APPRED( 2, 62, OUTFIL, MSG) 23034 CONTINUE 23032 CONTINUE IND = INDEXS( MSG, BLKQMK) IF (.NOT.( IND .NE. 0 ))GOTO 23036 C = MSG( IND + 2 ) IF (.NOT.( C .EQ. 32 .OR. C .EQ. 9 .OR. C .EQ. 0 ))GOTO 23038 IND = 0 23038 CONTINUE 23036 CONTINUE IF (.NOT.( IND .EQ. 0 ))GOTO 23040 IF (.NOT.( FILNFO( 3, ERRFIL, JUNK) .EQ. 0 ))GOTO 23042 OPNERR = 3 CALL APPRED( 3, 63, ERRFIL, MSG) 23042 CONTINUE 23040 CONTINUE 23030 CONTINUE 23022 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 23044 STATUS = -3 CALL SYS$SETAST( %VAL(1) ) GOTO 23045 23044 CONTINUE N = LENGTH(MSG) IF (.NOT.( DCL .EQ. 1 ))GOTO 23046 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 23047 23046 CONTINUE I = 48 + 64 CALL SYS$QIOW( %VAL(1), %VAL( MBXCHN(OFFSET) ), %VAL(I), , , , MSG *, %VAL(N), , , , ,) 23047 CONTINUE CALL CLOSE(UNIT) CALL PUTHEX( LPID, DESC) CALL STRCPY( DESC, PID( 1, OFFSET) ) IF (.NOT.( WAIT .NE. 98 ))GOTO 23048 N4GRND = N4GRND + 1 23048 CONTINUE CALL SYS$SETAST( %VAL(1) ) STATUS = 0 IF (.NOT.( WAIT .EQ. 119 ))GOTO 23050 IF (.NOT.( PWAIT( 1, DESC, TRM_INFO(1,1), DESC, 50) .EQ. 101 ))GOT *O 23052 STATUS = 101 23052 CONTINUE 23050 CONTINUE 23045 CONTINUE 23017 CONTINUE CALL SRESET( OPNOUT, OUTFIL) IF (.NOT.( OUTMOD .NE. -3 ))GOTO 23054 JUNK = STMODE( 2, OUTMOD) 23054 CONTINUE CALL SRESET( OPNERR, ERRFIL) IF (.NOT.( STATUS .EQ. -3 .OR. STATUS .EQ. 101 ))GOTO 23056 CALL PUTPDB(OFFSET) 23056 CONTINUE SPAWN=(STATUS) RETURN END