1 ! E X E C S t a r t u p P r o g r a m 2 ! PROGRAM : START.BAS 3 ! PACKAGE : SYSTEMS UTILITIES 4 V$ = "V02-01" 5 ! DATE : 26-Jan-82 6 ! AUTHOR : Steven R. Gerber 7 ! 8 ! Copyright (C) 1982 By Steven R. Gerber 9 ! 10 EXTEND ! This is an Extend Mode Program 20 Y$=SYS(CHR$(6%)+CHR$(-7%)) ! Enable CTRL/C Trapping & \ ON ERROR GOTO 19000 95 ! & ! P R O G R A M D E S C R I P T I O N & ! 295 ! & ! I / O C H A N N E L S & ! & ! #1% Buffer for Resending Messages & ! #2% The .HLD Virtual Array & ! 395 ! & ! V A R I A B L E D E F I N I T I O N S & ! & ! ACCESS% Access Control Field for the Declare Receiver SYS Call & ! BACKSLASH% Pointer to the Backslash character in a string & ! BUF.MAX% Maximum amount of Buffer Space to be used from the Monitor's Buffer Pool & ! BUF.OFFSET% Offset to Message in Message Buffer & ! COMMON.CORE$ Data from Common Core & ! DEVNAM% Device Name Table & ! DEVOKB% 2%*(Number of Disks) & ! DEVPTR% DDB Pointer Table & ! ERL System Variable for Line at which an Error occurred & ! ERR System Variable used to Specify the type of Error & ! EXTENSION.RADIX.50$ Extension of Command file in RADIX-50 format & ! HOLD$(64%) The .HLD Virtual Array & ! I% Loop Variable used to Clean up Monitor Table SYS Calls & ! JOBTBL% Job Table & ! KB.DDB% Keyboard's Device Data Block & ! KB.UNIT$ Data from Common Core containing number of Keyboard from which I was Spawned & ! KB.UNIT% Number of Keyboard from which I was Spawned & ! LINK.MAX% Maximum number of DECNET logical links I am willing to support at any one time & ! LOCAL% Local/No Local Senders & ! MAX.LEN% Maximum Length of any Message & ! ME% My Job number & ! MES.MAX% Maximum number of Pending Messages & ! NAM$ My Name as a Receiver & ! NAME.RADIX.50$ Name of Command file in RADIX-50 format & ! NETWORK% Network Logical Links/No Logical Links & ! P1% Virtual Array Pointer & ! PARAM$ Parameter string from Receive & ! PASS$ Message Buffer & ! PGR.PROGRAMMER$ CHR$(Programmer number of PPN to Log) & ! PJT.PROJECT$ CHR$(Project number of PPN to Log) & ! PK.OFFSET% Pseudo-Keyboard's Device Offset & ! PRIVILEGED% Local Privileged/Local Non-privileged & ! RADIX.50.PASSWORD$ Password of PPN to Log in RADIX-50 format & ! SG.SPAWN.PROGRAMMER$ CHR$(Programmer number of Program to Spawn) & ! SINGLE.NETWORK% Network Single Messages/No Single Messages & ! SJ.SPAWN.PROJECT$ CHR$(Project number of Program to Spawn) & ! SPAWN$ Filespec of Program to Spawn & ! SYS.12%(30%) Monitor Tables Part 1 & ! SYS.14$ Data returned from READ/RESET Accounting Data SYS Call & ! SYS.23$ Data returned from Terminating Filename String Scan & ! SYS.3%(30%) Monitor Tables Part 2 & ! TYPE% Object Type Code & ! V$ String indicating program Version and Edition & ! Y$ Used for SYS Calls 595 ! & ! F U N C T I O N S & ! 795 ! & ! F U N C T I O N / S U B R O U T I N E D E F I N I T I O N S & ! 895 ! & ! D I M E N S I O N I N G A R E A & ! 900 DIM SYS.3%(30%) ! Monitor Tables Part 1 & \ DIM SYS.12%(30%) ! Monitor Tables Part 2 995 ! & ! S T A R T O F P R O G R A M & ! & ! Am I Attached or Detached ? & ! 1000 ME%=(PEEK(518%) AND 255%)/2% ! My Job & \ CHANGE SYS(CHR$(6%)+CHR$(-3%)) TO SYS.3% & \ SYS.3%(I%)=SYS.3%(I%)+SWAP%(SYS.3%(I%+1%)) FOR I%=5% TO 29% STEP 2% & \ JOBTBL%=SYS.3%(11%) ! Job Table & \ KB.DDB%=PEEK(PEEK(PEEK(JOBTBL%+(ME%*2%)))) & \ IF (PEEK(KB.DDB%+2%) AND 255%)/2%=ME% & AND (PEEK(KB.DDB%+6%) AND 8192%)=8192% & THEN 1110 ! Attached 1005 ! & ! Log Myself into [1,2] & ! 1010 KB.UNIT$=SYS(CHR$(7%)) ! Common Core & \ BACKSLASH%=INSTR(1%,KB.UNIT$,CHR$(92%)) ! Backslash & \ KB.UNIT%=VAL(LEFT(KB.UNIT$,BACKSLASH%-1%)) ! Keyboard from which I was Spawned & \ PJT.PROJECT$=CHR$(1%) ! Project=1 & \ PGR.PROGRAMMER$=CHR$(2%) ! Programmer=2 & \ SYS.14$=SYS(CHR$(6%)+CHR$(14%)+STRING$(4%,0%)+ & PGR.PROGRAMMER$+PJT.PROJECT$) & \ RADIX.50.PASSWORD$=MID(SYS.14$,9%,4%) & \ Y$=SYS(CHR$(6%)+CHR$(4%)+CHR$(0%)+CHR$(0%)+ & PGR.PROGRAMMER$+PJT.PROJECT$+ & RADIX.50.PASSWORD$) 1015 ! & ! Set DEVPTR% & ! 1020 DEVPTR%=SYS.3%(7%) ! DDB Pointer Table 1025 ! & ! Set DEVNAM% \ DEVOKB% & ! 1030 CHANGE SYS(CHR$(6%)+CHR$(-12%)) TO SYS.12% & \ SYS.12%(I%)=SYS.12%(I%)+SWAP%(SYS.12%(I%+1%)) FOR I%=3% TO 29% STEP 2% & \ DEVNAM%=SYS.12%(5%) ! Device Name Table & \ DEVOKB%=SYS.12%(9%) ! 2%*(Number of Disks) 1035 ! & ! Set PK.OFFSET% & ! 1040 PK.OFFSET%=DEVOKB% & \ PK.OFFSET%=PK.OFFSET%+2% WHILE & CVT%$(SWAP%(PEEK(DEVNAM%+PK.OFFSET%)))<>"PK" 1045 ! & ! Declare Myself a Receiver & ! 1050 NAM$="EXEC " & \ LINK.MAX%=0% & \ LOCAL%=0% & \ MAX.LEN%=32% & \ MES.MAX%=32% & \ NETWORK%=0% & \ PRIVILEGED%=2% & \ SINGLE.NETWORK%=0% & \ TYPE%=0% & \ ACCESS%=LOCAL%+PRIVILEGED%+NETWORK%+SINGLE.NETWORK% & \ BUF.MAX%=MES.MAX%*MAX.LEN% & \ Y$=SYS(CHR$(6%)+CHR$(22%)+CHR$(1%)+CHR$(0%)+ & NAM$+STRING$(10%,0%)+ & CHR$(TYPE%)+ & CHR$(ACCESS%)+ & CHR$(BUF.MAX%)+CHR$(SWAP%(BUF.MAX%))+ & CHR$(MES.MAX%)+ & CHR$(LINK.MAX%)) 1055 ! & ! Open the Message Buffer & ! 1060 OPEN "NL:" AS FILE 1%,RECORDSIZE 32% & \ FIELD #1%,32% AS PASS$ & \ BUF.OFFSET%=0% & \ P1%=0% 1065 ! & ! Open the .HLD Virtual Array & ! 1070 OPEN "[210,2]EXEC.HLD" AS FILE 2% & \ DIM #2%,HOLD$(64%) 1075 ! & ! Resend a Message & ! 1080 GOTO 1090 IF HOLD$(1%)="" & \ P1%=P1%+1% & \ PARAM$=NUM1$(ASCII(LEFT(HOLD$(P1%),1%)))+ & ","+ & NUM1$(ASCII(MID(HOLD$(P1%),2%,1%))) & \ LSET PASS$=RIGHT(HOLD$(P1%),3%) & \ Y$=SYS(CHR$(6%)+CHR$(22%)+CHR$(-1%)+CHR$(0%)+NAM$+ & CHR$(CHAN%)+CHR$(0%)+ & CHR$(MAX.LEN%)+CHR$(SWAP%(MAX.LEN%))+ & CHR$(BUF.OFFSET%)+CHR$(SWAP%(BUF.OFFSET%))+ & STRING$(4%,0%)+NUM1$(LEN(PARAM$))+PARAM$) & \ GOTO 1080 IF P1%<64% 1085 ! & ! Close all I/O Channels & ! 1090 CLOSE 1%,2% 1095 ! & ! Chain to EXEC Processor & ! 1100 Y$=SYS(CHR$(8%)+NUM1$(DEVPTR%)+"\"+NUM1$(PK.OFFSET%)+"\"+NUM1$(JOBTBL%)+"\") & \ CHAIN"[210,2]EXEC.BAC" & \ GOTO 32767 1105 ! & ! Spawn Myself & ! 1110 KB.DDB%=PEEK(PEEK(PEEK(520%))) & \ KB.UNIT%=SWAP%(PEEK(KB.DDB%+2%)) AND 127% & \ COMMON.CORE$=NUM1$(KB.UNIT%)+"\" & \ SPAWN$="[210,2]START.BAC" & \ SYS.23$=SYS(CHR$(6%)+CHR$(-23%)+SPAWN$) & \ SJ.SPAWN.PROJECT$=MID(SYS.23$,6%,1%) & \ SG.SPAWN.PRGRAMMER$=MID(SYS.23$,5%,1%) & \ EXTENSION.RADIX.50$=MID(SYS.23$,11%,2%) & \ NAME.RADIX.50$=MID(SYS.23$,7%,4%) & \ Y$=SYS(CHR$(6%)+CHR$(24%)+CHR$(0%)+CHR$(0%)+ & SG.SPAWN.PRORAMMER$+SJ.SPAWN.PROJECT$+ & NAME.RADIX.50$+EXTENSION.RADIX.50$+ & COMMON.CORE$) & \ GOTO 32767 9995 ! & ! S U B R O U T I N E S & ! 18995 ! & ! S T A N D A R D E R R O R H A N D L I N G & ! 19000 IF ERL=1010 THEN & Y$=SYS(CHR$(6%)+CHR$(-5%)+CHR$(KB.UNIT%)+"?Can't Log in") & \ RESUME 32767 19010 IF ERL=1050 AND ERR=3 THEN Y$=SYS(CHR$(6%)+CHR$(-5%)+CHR$(KB.UNIT%)+"?Receiver already Declared") 19011 IF ERL=1050 AND ERR=16 THEN Y$=SYS(CHR$(6%)+CHR$(-5%)+CHR$(KB.UNIT%)+"?EXEC is already a Receiver") 19012 IF ERL=1050 AND ERR=32 THEN Y$=SYS(CHR$(6%)+CHR$(-5%)+CHR$(KB.UNIT%)+"?No Buffer Space Available ... Please, try again later") 19015 IF ERL=1050 THEN Y$=SYS(CHR$(6%)+CHR$(5%)) & \ RESUME 32767 19020 IF ERL=1070 OR ERL=1080 THEN CLOSE 1%,2% & \ RESUME 1100 19030 IF ERL=1100 THEN & OPEN"[210,2]EXEC.FTL"FOR OUTPUT AS FILE 1% & \ PRINT #1%,DATE$(0%);" ";TIME$(0%);" ";ERR;" ";ERL & \ CLOSE 1% & \ Y$=SYS(CHR$(6%)+CHR$(5%)) & \ RESUME 32767 19040 IF ERL=1110 THEN PRINT"?Can't Spawn Myself" & \ RESUME 32767 19995 ! & ! L I B R A R Y R O U T I N E S & ! 29995 ! & ! C C L E N T R Y & ! 32700 ! & ! E X I T F R O M P R O G R A M C O D E & ! 32767 END