! The first parameter of the command SS is the particular function ! to be executed. Each one is described in full below. ! ! %CONTROL 0 %RECORDFORMAT OF(%STRING(11)NAME, %INTEGER SP12, NKB, %C %BYTEINTEGER ARCH, CODES, CCT, OWNP, %C EEP, USE, CODES2, SSBYTE, FLAGS, POOL, DAYNO, SP31) %RECORDFORMAT AF(%STRING(11)NAME, %INTEGER NKB, %STRING(8)DATE, %C %STRING(6)TAPE, %INTEGER CHAP, COUNT) %RECORDFORMAT %C DFINF(%INTEGER NKB, RUP, EEP, APF, USE, ARCH, FS, SEG, CCT, CDS, %C %BYTEINTEGER SP, DAY, POL, CD2, %C %INTEGER SS, %C %STRING(6)OFF) ! ! ! %DYNAMICINTEGERFNSPEC %C DCHACCESS(%STRING(6)USER, %STRING(11)FILE, %INTEGER FSYS, NEWMODE) %DYNAMICINTEGERFNSPEC %C DCHSIZE(%STRING(6)U, %STRING(15)F, %INTEGER FS,NKB) %DYNAMICINTEGERFNSPEC %C DCONNECT(%STRING(6)USER, %STRING(15)FILE, %INTEGER FSYS, MODE, APF, %C %INTEGERNAME SEG, GAP) %DYNAMICINTEGERFNSPEC %C DCREATE(%STRING(6)USER, %STRING(15)FILE, %INTEGER FSYS, NKB, TYPE) %DYNAMICINTEGERFNSPEC %C DDELUSER(%STRING(6)USER, %INTEGER FSYS) %DYNAMICINTEGERFNSPEC %C DDESTROY(%STRING(6)USER, %STRING(11)FILE, %STRING(8)DATE, %C %INTEGER FSYS, TYPE) %DYNAMICINTEGERFNSPEC %C DDISCONNECT(%STRING(6)USER, %STRING(11)FILE, %INTEGER FSYS, DESTROY) %DYNAMICINTEGERFNSPEC %C DDONATE(%STRING(6)USER, %INTEGER FSYS, UNITS) %EXTERNALSTRINGFNSPEC %C DERRS(%INTEGER N) %DYNAMICINTEGERFNSPEC %C FBASE(%INTEGERNAME LO, HI, %INTEGER FSYS) %DYNAMICINTEGERFNSPEC %C DFILENAMES(%STRING(6)U, %RECORD(OF)%ARRAYNAME INFS, %C %INTEGERNAME FILENUM, MAXREC, NFILES, %INTEGER FSYS, TYPE) %DYNAMICINTEGERFNSPEC %C DFINFO(%STRING(6)U, %STRING(15)F, %INTEGER FS, ADR) %DYNAMICINTEGERFNSPEC %C DFSTATUS(%STRING(6)USER, %STRING(11)FILE, %INTEGER FSYS, ACT, VALUE) %DYNAMICINTEGERFNSPEC %C DFSYS(%STRING(6)USER, %INTEGERNAME FSYS) %DYNAMICINTEGERFNSPEC %C DGETDA(%STRING(6)USER, %STRING(11)FILE, %INTEGER FSYS, ADR) %DYNAMICINTEGERFNSPEC %C DNEWGEN(%STRING(6)USER, %STRING(11)FROM, TO, %INTEGER FSYS) %DYNAMICINTEGERFNSPEC %C DNEWUSER(%STRING(6)USER, %INTEGER FSYS, NKB) %DYNAMICINTEGERFNSPEC %C DOFFER(%STRING(6)USER, OFFERTO, %STRING(11)FILE, %INTEGER FSYS) %DYNAMICINTEGERFNSPEC %C DPERMISSION(%STRING(6)OWNER, USER, %STRING(8)DATE, %STRING(15)FILE, %C %INTEGER FSYS, TYPE, ADR) %DYNAMICINTEGERFNSPEC %C DPRG(%STRING(6)USER, %STRING(11)FILE, %INTEGER FSYS, %STRING(6)LABEL, %INTEGER SITE) %DYNAMICINTEGERFNSPEC %C DPROCS(%INTEGERNAME MAXPROCS, %INTEGER ADR) %DYNAMICINTEGERFNSPEC %C DRENAME(%STRING(6)USER, %STRING(11)FROM, TO, %INTEGER FSYS) %DYNAMICINTEGERFNSPEC %C DRENAMEINDEX(%STRING(6)OLD, NEW, %INTEGER FSYS) %DYNAMICINTEGERFNSPEC %C DSFI(%STRING(6)USER, %INTEGER FSYS, TYPE, SET, ADR) %DYNAMICINTEGERFNSPEC %C DRESTORE(%STRING(6)USER, %STRING(11)FILE, %STRING(8)DATE, %INTEGER FSYS, TYPE) %DYNAMICINTEGERFNSPEC %C DSYSAD(%INTEGER TYPE, ADR, FSYS) %DYNAMICINTEGERFNSPEC %C DTRANSFER(%STRING(6)USER1,USER2, %STRING(11)FILE1,FILE2, %C %INTEGER FSYS1, FSYS2, TYPE) %DYNAMICINTEGERFNSPEC %C DUNPRG(%STRING(6)USER, %STRING(11)FILE, %INTEGER FSYS, %STRING(6)LABEL, %INTEGER SITE) %DYNAMICROUTINESPEC %C GETAVFSYS(%INTEGERNAME N, %INTEGERARRAYNAME A) %DYNAMICINTEGERFNSPEC %C GETUSNAMES(%INTEGERNAME N, %INTEGER ADR, FSYS) %DYNAMICINTEGERFNSPEC %C DRETRIEVE(%STRING(6)TAPE,%INTEGER CHAPTER) %DYNAMICROUTINESPEC %C PROMPT(%STRING(255)S) %SYSTEMROUTINESPEC %C UCTRANSLATE(%INTEGER ADR, LEN) %EXTERNALSTRINGFNSPEC %C UINFS(%INTEGER N) %SYSTEMROUTINESPEC %C ZVIEW(%STRING(255)S) ! ! %CONSTINTEGER FUNCTION = 1 %CONSTINTEGER USER = 2 %CONSTINTEGER FILE = 3 %CONSTINTEGER FSYS = 4 %CONSTINTEGER MODE = 5 %CONSTINTEGER NKB = 6 %CONSTINTEGER APF = 7 %CONSTINTEGER SEG = 8 %CONSTINTEGER GAP = 9 %CONSTINTEGER TYPECR = 10 %CONSTINTEGER TYPEDE = 11 %CONSTINTEGER DATE = 12 %CONSTINTEGER DSTROY = 13 %CONSTINTEGER FUNDS = 14 %CONSTINTEGER FILENUM = 15 %CONSTINTEGER ACTFSTAT = 16 %CONSTINTEGER VALUE = 17 %CONSTINTEGER FROM U = 18 %CONSTINTEGER TO U = 19 %CONSTINTEGER FROM F = 20 %CONSTINTEGER TO F = 21 %CONSTINTEGER FROM FSYS = 22 %CONSTINTEGER TO FSYS = 23 %CONSTINTEGER OFFER TO = 24 %CONSTINTEGER TYPE PRM = 25 %CONSTINTEGER TYPE TR = 26 %CONSTINTEGER TYPE DSFI = 27 %CONSTINTEGER PERMISSION = 28 %CONSTINTEGER SETDSFI = 29 %CONSTINTEGER OPTNFILE = 30 %CONSTINTEGER TYPE REST = 31 %CONSTINTEGER LABEL = 32 %CONSTINTEGER SITE = 33 %CONSTINTEGER OLDNAME = 34 %CONSTINTEGER NEWNAME = 35 %CONSTINTEGER TAPEID = 36 %CONSTINTEGER CHAPID = 37 ! ! each entry gives: prompt ! default ! helptext ! %CONSTSTRING(80)%ARRAY TABLE(1:37) = %C "Function: !?!*1", {complicated HELP info} "User: !*1!6 character user name", "File: !!up to 11 charac name", "Fsys: !-1!0 <= Fsys < 100", "Mode: !1!*2", "NKB: !4!Number of Kbytes", "APF: !0!X'EWR'", "Seg: !0!seg < 256", "Gap: !0!no of segs to reserve", "Type: !0!1=temp 2=Vtemp 4=0@create 8=cherish", {for create} "Type: !0!0=on-line 1=archive 2=backup", {for dfilenames and destroy} "Date: !nodate!reqd only if file not on-line", "Destroy: !0!1 for DESTROY after disconnecting", "Units: !10000!hundredths of pence, default 1 pound", "Filenum: !0!from where to start (off-line files)", "Act: !!*3", {for dfstatus} "Value: !0!Depends on Act", "From User: !*1!", "To User: !*1!", "From File: !!", "To File: !!", "From Fsys: !-1!", "To Fsys: !!", "Offer to: !!", "Type: !!*4", {for dpermission} "Type: !!0=Accept,1=Transfer,2=Transfer & resite,3=Copy", "Type: !!*5", {for DSFI} "Permission: !5!1=read,2=write,4=execute", "Set: !0!0=Get, 1=Set", "Option file: !SS#OPT!", "Type: !0!0=archive", {for drestore} "Label: !!6 character disc label", "Site: !1!disc site eg X2C0", "Oldname: !!", "Newname: !!", "Tape: !!Tape ID as found by SS Filenames", "Chapter: !!Chapter as found by SS Filenames" ! ! ! %CONSTINTEGER TOPFN = 36 %CONSTSTRING(31)%ARRAY E(1:TOPFN) = %C "CHACCESS", "CHSIZE", "CONNECT", "CREATE", "DELUSER", "DESTROY", "DISCONNECT", "DISCS", "DONATE", "FBASE", "FILENAMES", "FINFO", "FSTATUS", "FSYS", "GETDA", "NEWGEN", "NEWUSER", "OFFER", "OPTIONS", "PERMISSION", "PERMS", "PRG", "PROCS", "RENAME", "RENAMEINDEX", "RESTORE", "SETPASSWORD", "SFI", "SUBMIT", "TRANSFER", "UNPRG", "USERS", "WHO", "QUIT", "Q", "RETRIEVE" ! ! ! %CONSTINTEGER TOPDSFI = 39 ! %CONSTINTEGERARRAY NI(0:TOPDSFI) = %C 0, 0, 0, 0,-8,-2,-1, 1, 1,-9, 1, 1, 1,-2, 3, 1, 1, 1, 0, 0, 2, 1,-1, 2, 1, 1, 1, 2, 1, 1, -6, 2, 1, 1, 1, 0, 0, 0, 1, 0 ! %CONSTBYTEINTEGERARRAY T(0:TOPDSFI) = %C 0, 1, 2, 3, 4,16,18,19,20,21, 33,34,35,36,38,41,42,43,44,45, 46,48,49,50,52,53,54,55,57,58, 59,65,67,68,69,70,71,72,73,74 ! %CONSTSTRING(15)%ARRAY TXT(0:74) = %C "Basefile", "Delivery", "Control file", "Data", "No of files", "FDs in use", "Free FDs", "Index size", "No SDs", "Free SDs", "No PDs", "Free PDs", "","","","", "","", "Last log-on", "ACR", "Dirvsn", "No of A files", "A Kbytes", "No of B files", "B Kbytes", "#ARCH Kb", "No FDs", "Free FDs", "No PDs", "Free PDs", "","","", "Stacksize", "MaxKb", "Max file size", "Cur I procs", "Cur B procs", "Imax", "Bmax", "Tmax", "Privacy", "Dirmon", "Sigmon", "I.Surname", "Logfile", "Kinstrs(int)", "Kinstrs(batch)", "Kinstrs(cur)", "Kinstrs(Dir)", "Ptrns(int)", "Ptrns(batch)", "Ptrns(cur)", "Kbytes(output)", "Kbytes(input)", "Msecs(int)", "Msecs(batch)", "Msecs(cur)", "Connect time", "No of files", "Disc Kbytes", "Cherfiles", "CherKbytes", "Tempfiles", "TempKbytes", "Archfiles", "ArchKbytes", "Session length", "Funds", "Gp Hldrs fsys", "Test SS", "Batch SS", "Group Holder", "Privileges", "Default LP" ! ! ! %EXTERNALROUTINE SS(%STRING(255)P) %STRING(255)FN %SWITCH F(1:TOPFN) %INTEGER RSEG, RGAP %INTEGER LO, HI %INTEGER TYPEV, FILENUMV, MAXREC, NFILES, J, X %INTEGER FSYSV %STRING(11)S11, USERV %BYTEINTEGERARRAY B(0:8039); ! used in DFILENAMES %INTEGER ADR, ADDRDSFI, NOP %INTEGERARRAY IP(1:10) %STRING(15)%ARRAY SP(1:10) %INTEGERARRAY DSFII(0:31) %INTEGERARRAYNAME I %INTEGERARRAYFORMAT IFT(0:11) %STRINGNAME S0 %INTEGERARRAY AA(-4:255) %RECORDFORMAT PRMSF(%STRING(6)USER, %BYTEINTEGER PRM) %RECORDFORMAT PRMF(%INTEGER B, OWNP, EEP, S, %C %RECORD(PRMSF)%ARRAY PRMS(0:15)) %RECORD(PRMF) PRM %RECORD(OF)%ARRAYNAME OS %RECORD(AF)%ARRAYNAME AS %RECORD(OF)%ARRAYFORMAT OSF(0:200) %RECORD(AF)%ARRAYFORMAT ASF(0:200) %RECORD(OF)%NAME O %RECORD(AF)%NAME A %RECORD(DFINF) DFIN %INTEGER RESULT ! ! ! %ONEVENT 1,2,3,4,5,6,7,8,9 %START %STOP %FINISH ! ! ! ! %STRINGFN HTOS(%INTEGER VALUE, PLACES) %INTEGER I %STRING(8)S %CONSTBYTEINTEGERARRAY H(0:15) = %C '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' PLACES = 8 %IF PLACES > 8 I = 64 - 4 * PLACES *LD_S *LSS_PLACES *ST_(%DR) *INCA_1 *STD_%TOS *STD_%TOS *LSS_VALUE *LUH_0 *USH_I *MPSR_X'24' *SUPK_%L=8 *LD_%TOS *ANDS_%L=8,0,15 *LSS_H+4 *LUH_X'18000010' *LD_%TOS *TTR_%L=8 %RESULT = S %END ! !----------------------------------------------------------------------- ! %STRINGFN ITOS(%INTEGER N) %STRING(16)S %INTEGER D0, D1, D2, D3 *LSS_N *CDEC_0 *LD_S *INCA_1 *CPB_%B *SUPK_%L=15,0,32 *STD_D2 *JCC_8, *LSD_%TOS *ST_D0 *LD_S *INCA_1 *MVL_%L=15,15,48 BYTEINTEGER(D1) = '-' %AND D1 = D1 - 1 %IF N < 0 BYTEINTEGER(D1) = D3 - D1 - 1 %RESULT = STRING(D1) WASZERO: %RESULT = "0" %END ! !----------------------------------------------------------------------- ! %INTEGERFN STOI2(%STRING(255) S, %INTEGERNAME I2) %STRING (63) P %INTEGER TOTAL, SIGN, AD, I, J, HEX !MON MON(1) = MON(1) + 1 HEX = 0; TOTAL = 0; SIGN = 1 AD = ADDR(P) A: %IF S -> (" ").S %THEN -> A; !CHOP LEADING SPACES %IF S -> ("-").S %THEN SIGN = -1 %IF S -> ("X").S %THEN HEX = 1 %AND -> A P = S %UNLESS S -> P.(" ").S %THEN S = "" I = 1 %WHILE I <= BYTEINTEGER(AD) %CYCLE J = BYTE INTEGER(I+AD) -> FAULT %UNLESS '0' <= J <= '9' %OR (HEX # 0 %C %AND 'A' <= J <= 'F') %IF HEX = 0 %THEN TOTAL = 10*TOTAL %C %ELSE TOTAL = TOTAL<<4+9*J>>6 TOTAL = TOTAL+J&15; I = I+1 %REPEAT %IF HEX # 0 %AND I > 9 %THEN -> FAULT %IF I > 1 %THEN I2 = SIGN*TOTAL %AND %RESULT = 0 FAULT: I2 = 0 %RESULT = 1 %END; ! STOI2 ! !----------------------------------------------------------------------- ! ! ! %ROUTINE WRS(%STRING(255)S) PRINTSTRING(S) NEWLINE %END ! %ROUTINE WRSN(%STRING(255)S, %INTEGER N) PRINTSTRING(S) PRINTSTRING(" =") WRITE(N, 1) NEWLINE %END ! %ROUTINE WRSNT(%STRING(255)S, %INTEGER N, TYPE) %INTEGER J %SWITCH SW(0:3) ! ! type & 3 = 0 decimal if small else hex ! 1 decimal ! 2 hex ! 3 decimal and hex ! type & 4 = 1 dont put NL at end ! type & X70 gives number of digits, 0=8 PRINTSTRING(S) SPACE -> SW(TYPE & 3) SW(0): -> SW(2) %IF IMOD(N) > 255 SW(3): SW(1): PRINTSTRING(ITOS(N)) -> OUT %IF TYPE & 2 = 0 SPACE SW(2): PRINTSTRING("X'") J = TYPE >> 4 & 7 J = 8 %IF J = 0 PRINTSTRING(HTOS(N, J)) OUT: NEWLINE %IF TYPE & 4 = 0 %END; ! OF WRSNT ! !----------------------------------------------------------------------- ! ! ! %ROUTINE RSTRG(%STRINGNAME S) %INTEGER I S = "" %CYCLE READSYMBOL(I) %RETURN %IF I = NL S = S . TOSTRING(I) %REPEAT %END ! ! ! %ROUTINE RDINT(%INTEGERNAME N) %STRING(63)S N = -1 %CYCLE RSTRG(S) %RETURN %IF STOI2(S, N) = 0 %REPEAT %END ! ! ! ! PROCEDURES FOR DOING PROMPTS ! ! %STRINGFN PROMPTS(%STRING(255)S) %STRING(255)T %IF LENGTH(P) > 0 %START T = P %AND P = "" %UNLESS P -> T . (",") . P %FINISH %ELSE PROMPT(S) %AND RSTRG(T) %RESULT = T %END ! ! %INTEGERFN PROMPTI(%STRING(255)S) %INTEGER T %STRING(255)S0 %IF LENGTH(P) > 0 %START S0 = P %AND P = "" %UNLESS P -> S0 . (",") . P %RESULT = -1 %UNLESS STOI2(S0, T) = 0 %RESULT = T %FINISH PROMPT(S) RDINT(T) %RESULT = T %END ! ! %STRINGFN GIVE DEFAULT(%STRING(255)S) %INTEGER J, N %STRING(15)W %CONSTINTEGER TOPSW = 1 %SWITCH SW(1 : TOPSW) %RESULT = S %UNLESS LENGTH(S) > 1 %AND CHARNO(S, 1) = '*' S -> ("*") . W J = STOI2(W, N) %RESULT = "" %UNLESS J = 0 %AND 0 < N <= TOPSW -> SW(N) SW(1): %RESULT = UINFS(1); ! procuser %END ! ! %STRINGFUNCTION CURCODEFILE ! Returns the name of the object file which called this function. %INTEGER AD %SYSTEMSTRINGFUNCTIONSPEC CONFILE(%INTEGER AD) *LSS_(%LNB+2) *ST_AD %RESULT=CONFILE(AD) %END ; ! of string function CURCODEFILE %STRINGFUNCTION CURCODE ! Returns the name of the current object file as username.filename, ! omitting _membername if it is a PDfile member %STRING(23)S,SS S=CURCODEFILE S=S%IF S->S.("_").SS %RESULT=S %END ; ! of string function 'CURCODE' ! %ROUTINE GIVEHELP(%STRING(255)S, D) %INTEGER J, N %STRING(63)W %CONSTINTEGER TOPSW = 5 %SWITCH SW(1:TOPSW) %IF S = "" %OR CHARNO(S, 1) # '*' %START PRINTSTRING(S) %IF D = "" %C %THEN WRS(" there is no default") %C %ELSE %START WRS(" default is " . GIVEDEFAULT(D)) %FINISH %RETURN %FINISH ! S -> ("*") . W J = STOI2(W, N) %RETURN %UNLESS J = 0 %AND 0 < N <= TOPSW -> SW(N) SW(1): ZVIEW(CURCODE.",SOURCE") %RETURN SW(2): WRS("The bits in MODE may be set as follows") WRS(" 1=read 2=write 4=execute 8=write shared") WRS(" 16=newcopy 64=not drum 128=process stack") WRS("256=Disconnect, change access, change size NOT allowed") WRS("512=advisory sequential") WRS("2**31=non-slaved") %RETURN SW(3): ! DFSTATUS WRS("Values for Act are") %RETURN SW(4): ! DPERMISSION WRS("Type: 0=set OWNP 1=set EEP") WRS(" 2=user into FILE list 3=remove 4=return list 5=destroy") WRS(" 6=user into INDX list 7 8 9") WRS("10=give user's access to file") %RETURN SW(5): ! DSFI WRS(" 0=Basefile 1=Delivery 2=Control file 3=Data") WRS(" 4=index use 5=passwords 6=last log on 7=ACR") WRS(" 8=Dirvsn 9=#arch use 10=stack size 11=MaxKb") WRS("12=Maxfile 13=Iprocs etc 14=Imax etc 15=Privacy") WRS("16=Dirmon 17=Sigmon 18=I.Surname 19=Logfile") WRS("20=KinstrsT 21=KinstrsC 22=KinstrsD 23=PtrnsT") WRS("24=Ptrns(cur) 25=Kbytes o/p 26=Kbytes i/p 27=Msecs(tot)") WRS("28=Msecs(cur) 29=Connecttime 30=files 31=Afiles") WRS("32=Sess len 33=Funds 34=GpFsys 35=TestSS") WRS("36=BatchSS 37=GpHolder 38=Privileges 39=DefaultLP") %END ! ! ! %INTEGERFN IPROMPT(%INTEGER N) %INTEGER J, RES %STRING(80)T, PTXT, DTXT, HTXT TABLE(N) -> PTXT . ("!") . DTXT . ("!") . HTXT ! T = P %AND P = "" %UNLESS P -> T . (",") . P ! %CYCLE PROMPT(PTXT) %AND RSTRG(T) %IF T = "" %IF T = "?" %OR T = "HELP" %START GIVEHELP(HTXT, DTXT) %FINISH %ELSE %START T = GIVE DEFAULT(DTXT) %IF T = "" J = STOI2(T, RES) ! %IF J = 0 %START NOP = NOP + 1 SP(NOP) <- T IP(NOP) = RES %RESULT = RES %FINISH ! WRS("that wasn't a number") %FINISH T = "" %REPEAT %END ! ! %STRINGFN SPROMPT(%INTEGER N) %STRING(80)T, PTXT, DTXT, HTXT TABLE(N) -> PTXT . ("!") . DTXT . ("!") . HTXT ! T = P %AND P = "" %UNLESS P -> T . (",") . P ! %CYCLE PROMPT(PTXT) %AND RSTRG(T) %IF T = "" %IF T = "?" %OR T = "HELP" %START GIVEHELP(HTXT, DTXT) T = "" %FINISH %ELSE %START T = GIVE DEFAULT(DTXT) %IF T = "" %UNLESS T = "" %START NOP = NOP + 1 UCTRANSLATE(ADDR(T)+1, LENGTH(T)) SP(NOP) <- T %RESULT = T %FINISH %FINISH %REPEAT %END ! ! %INTEGERFN IDCONNECT(%STRING(6)USER, %STRING(11)FILE, %INTEGER FSYS, MODE, APF, SEG, GAP, %INTEGERNAME RSEG, RGAP) RSEG = SEG RGAP = GAP %RESULT = DCONNECT(USER, FILE, FSYS, MODE, APF, RSEG, RGAP) %END ! ! ! %INTEGERFN IDFSYS(%STRING(6)USER) %INTEGER FOUND, N, I, J %INTEGERARRAY F(0:99) FOUND = 37 GET AV FSYS(N, F) %CYCLE I = 0, 1, N-1 J = DFSYS(USER, F(I)) %RESULT = J %IF 0 # J # 37 WRSN("Fsys", F(I)) %AND FOUND = 0 %IF J = 0 %REPEAT %RESULT = FOUND %END ! ! ! %ROUTINE IDISCS %INTEGER FSYS, J, LO, HI, N, W, A, LOW %INTEGER AU, NU, AF, U, K %INTEGERARRAY BITS(0:5119) %CONSTINTEGER TOPC = 5 %INTEGERARRAY DS(1:TOPC) %STRING(6)%ARRAY US(1:TOPC) %STRING(15)MODE, U0 %INTEGERARRAY FLD(0:15) %STRINGNAME U1, S %INTEGERNAME I1 %BYTEINTEGERARRAY UNAMES(0:2400) ! %CYCLE FSYS = 0, 1, 99 J = FBASE(LO, HI, FSYS) %IF J = 0 %START WRITE(FSYS, 2) ! %IF LO > X'40' %C %THEN PRINTSTRING("*") %C %ELSE SPACE ! PRINTSTRING(" 80 Mb") %IF HI = X'3F1F' PRINTSTRING("100 Mb") %IF HI = X'59F3' PRINTSTRING("160 Mb") %IF HI = X'8F6F' PRINTSTRING("200 Mb") %IF HI = X'B3E7' PRINTSTRING("640 Mb") %IF HI > X'B3E7' ! A = ADDR(BITS(0)) AU = ADDR(UNAMES(0)) J = GETUSNAMES(NU, AU, FSYS) %IF J = 0 %C %THEN WRITE(NU, 3) %C %ELSE PRINTSTRING(" ??") PRINTSTRING(" users") ! J = DSYSAD(0, A, FSYS) %IF J = 0 %START LOW = (LO + X'100') >> 5 HI = HI >> 5 N = 0 %CYCLE J = LOW, 1, HI W = BITS(J) %WHILE W # 0 %CYCLE N = N + 100 *LSS_W *ST_%TOS *USB_1 *AND_%TOS *ST_W %REPEAT %REPEAT WRITE(N//(HI-LOW+1)<<5, 2) PRINTSTRING("%") %FINISH ! AF = ADDR(FLD(0)) I1 == FLD(1) ! %CYCLE J = 1, 1, TOPC DS(J) = 0 US(J) = "" %REPEAT ! %CYCLE U = 0, 7, (NU-1)*7 U1 == STRING(AU+U) K = DSFI(U1, FSYS, 30, 0, AF) %IF K = 0 %START W = I1 // 1000 %CYCLE J = 1, 1, TOPC %IF W > DS(J) %START K = TOPC %WHILE K > J %CYCLE DS(K) = DS(K-1) US(K) = US(K-1) K = K - 1 %REPEAT DS(J) = W US(J) = U1 %EXIT %FINISH %REPEAT %FINISH %REPEAT; ! through users ! %CYCLE J = 1, 1, TOPC %EXIT %IF DS(J) = 0 SPACE PRINTSTRING(US(J)) WRITE(DS(J), 2) %REPEAT NEWLINE %FINISH %REPEAT %END ! !----------------------------------------------------------------------- ! %INTEGERFN IOPTIONS(%STRING(6)USER, %STRING(11)FILE) %CONSTINTEGER KSHIFT = 10 %CONSTINTEGER MAXKEY = 14 %CONSTINTEGER MAXSEARCHDIRCOUNT = 16 %CONSTSTRING (12) %ARRAY KEY(1 : MAXKEY) = %C "BRACKETS","NOBRACKETS","NORECALL","TEMPRECALL","PERMRECALL", "NOFSTARTFILE","?","NOBLANKLINES","BLANKLINES","NOBSTARTFILE", "INITPARMS","NOECHO","PARTECHO","FULLECHO" ! ! ! %ROUTINE OUTI(%STRING (255) S, %INTEGER N) PRINTSTRING(S." :") WRITE(N,1) NEWLINE %END ! ! ! %ROUTINE OUTS(%STRING (255) S, T) PRINTSTRING(S." : ".T) NEWLINE %END ! ! ! %CONSTSTRING(9)%ARRAY PARMS(0:63) = %C "","I8","L8","R8",""(4),"MAXDICT",""(5),"MINSTACK",""(17), "QUOTES", "NOLIST", "NODIAG", "STACK", "NOCHECK", "NOARRAY", "NOTRACE", "PROFILE", "IMPS", "INHIBIOF", "ZERO", "XREF", "LABELS", "LET", "CODE", "ATTR", "OPT", "MAP", "DEBUG", "FREE", "DYNAMIC","","EBCDIC","NOLINE", ""(2),"PARMZ","PARMY", "PARMX","MISMATCH",""(2) %ROUTINE PRINTPARMS(%LONGINTEGER P) %INTEGER I, FOUND FOUND = 0 %FOR I=0,1,63 %CYCLE %IF P&1 = 1 %START %IF PARMS(I) # "" %START; !IGNORE BLANK PARMS %IF FOUND = 0 %THEN FOUND = 1 %ELSE PRINTSYMBOL(',') PRINTSTRING(PARMS(I)) %FINISH %FINISH P = P>>1 %REPEAT %IF FOUND = 0 %THEN PRINTSTRING("DEFAULTS") %END; ! OF PRINTPARMS ! ! ! %RECORD %FORMAT %C CONTF (%INTEGER DATAEND,DATASTART,PSIZE,FILETYPE, %C SUM,DATETIME,SPARE1,SPARE2,MARK, NULL1, UGLA, ASTK, USTK, %C NULL2, ITWIDTH, LDELIM, RDELIM, JOURNAL, SEARCHDIRCOUNT, %C ARRAYDIAG,INITWORKSIZE,SPARE,ITINSIZE,ITOUTSIZE, %C NOBL, ISTK, %LONGINTEGER INITPARMS, %INTEGER DATAECHO, %C TERMINAL, I23, I24, I25, I26, I27, I28, I29, I30, I31, I32, %C %STRING (31) FSTARTFILE, BSTARTFILE, PRELOADFILE, MODDIR, %C CFAULTS, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, %C S16, S17, S18, S19, S20, S21, S22, S23, S24, S25, S26, S27, %C S28, S29, S30, S31, S32, %C %STRING (31) %ARRAY SEARCHDIR(1:16));!1/2/79 ! ! ! %INTEGER J, FSYS, SEG, GAP %INTEGER DPFLAG, DCFLAG %STRING(6)SELF %RECORD(CONTF)%NAME C %INTEGER I SELF = UINFS(1) FSYS = -1 J = DFSYS(USER, FSYS) %RESULT = J %UNLESS J = 0 ! ! DPFLAG = DPERMISSION(USER, SELF, "", "", FSYS, 7, 0) ! OUTI("Remove prm flag", DPFLAG) %UNLESS DPFLAG = 0 %OR DPFLAG = 50 ! J = DPERMISSION(USER, SELF, "", "", FSYS, 6, 1) ! OUTI("Give prm flag", J) %AND %RESULT = J %UNLESS J = 0 ! SEG = 0 GAP = 0 DCFLAG = DCONNECT(USER, FILE, FSYS, 1, 0, SEG, GAP) OUTI("Connect flag", DCFLAG) %AND -> OUT %IF 34 # DCFLAG # 0 ! C == RECORD(SEG << 18) OUTS("Analysis of", USER.".".FILE) ! %IF 0 <= C_JOURNAL <= 2 %C %THEN WRS(KEY(3+C_JOURNAL)) %C %ELSE OUTI("C_JOURNAL", C_JOURNAL); ! NORECALL ETC ! %IF C_LDELIM = ' ' %THEN PRINTSTRING("NO") WRS("BRACKETS") ! %IF C_NOBL = 1 %THEN PRINTSTRING("NO") WRS("BLANKLINES") ! OUTI("ITWIDTH",C_ITWIDTH) OUTI("ARRAYDIAG",C_ARRAYDIAG) OUTI("ITINSIZE",C_ITINSIZE>>KSHIFT) OUTI("ITOUTSIZE",C_ITOUTSIZE>>KSHIFT) OUTI("USERSTACKSIZE",C_USTK>>KSHIFT) %IF C_ISTK >= 0 %THEN OUTI("INITSTACKSIZE",C_ISTK>>KSHIFT) OUTI("AUXSTACKSIZE",C_ASTK>>KSHIFT) %IF C_INITWORKSIZE#0 %C %THEN OUTI("INITWORKSIZE",C_INITWORKSIZE>>KSHIFT) %IF LENGTH(C_MODDIR) < 32 %C %THEN OUTS("ACTIVEDIR",C_MODDIR) %C %ELSE OUTI("Length(MODDIR)", LENGTH(C_MODDIR)) ! %IF LENGTH(C_FSTARTFILE) < 32 %START %IF C_FSTARTFILE#"" %C %THEN OUTS("FSTARTFILE",C_FSTARTFILE) %C %ELSE WRS("NOFSTARTFILE") %FINISH %ELSE OUTI("Length(FSTARTFILE)", LENGTH(C_FSTARTFILE)) ! %IF LENGTH(C_BSTARTFILE) < 32 %START %IF C_BSTARTFILE#"" %C %THEN OUTS("BSTARTFILE",C_BSTARTFILE) %C %ELSE WRS("NOBSTARTFILE") %FINISH %ELSE OUTI("Length(BSTARTFILE)", LENGTH(C_BSTARTFILE)) ! PRINTSTRING("INITPARMS : "); PRINTPARMS(C_INITPARMS) NEWLINE ! %IF LENGTH(C_CFAULTS) < 32 %START %IF C_CFAULTS # "" %THEN OUTS("CFAULTS",C_CFAULTS) %FINISH %ELSE OUTI("Length(CFAULTS)", LENGTH(C_CFAULTS)) ! %IF 0 <= C_DATAECHO <= 2 %C %THEN WRS(KEY(12+C_DATAECHO)) %C %ELSE OUTI("Dataecho",C_DATAECHO) ! %IF C_SEARCHDIRCOUNT <= MAXSEARCHDIRCOUNT %START %IF C_SEARCHDIRCOUNT > 0 %START NEWLINE %FOR I=1,1,C_SEARCHDIRCOUNT %CYCLE OUTS("SEARCHDIR ".ITOS(I),C_SEARCHDIR(I)) %REPEAT %FINISH %FINISH %ELSE OUTI("Searchdircount",C_SEARCHDIRCOUNT) OUT: J = DDISCONNECT(USER, FILE, FSYS, 0) %IF DCFLAG = 0 ! J = DPERMISSION(USER, SELF, "", "", FSYS, 7, 0) %IF DPFLAG=50 %RESULT = DCFLAG %IF 0 # DCFLAG # 34 %RESULT = 0 %END ! !----------------------------------------------------------------------- ! %INTEGERFN OPERMS(%STRING(6)USER) %INTEGER J, A, N, JUNK, NFILES, I %STRING(127)LINE %RECORDFORMAT F1(%STRING(6)USER, %BYTEINTEGER PRM) %RECORDFORMAT F2(%INTEGER N, OWNP, EEP, X, %RECORD(F1)%ARRAY IP(0:15)) %RECORDFORMAT F3(%STRING(11)NAME, %INTEGER X1, KB, %C %BYTEINTEGER X2, X3, X4, OWNP, EEP, X5, X6, X7, X8, X9, XA, XB) ! %RECORD(F2)P %RECORD(F1)%NAME IP %RECORD(F3)%ARRAY INF(0:1023) %RECORD(F3)%NAME FL ! ! ! %STRINGFN Z(%INTEGER P) %STRING(7)W W = "" W = "N" %IF P = 0 W = W . "P" %IF P & 8 > 0 W = W . "E" %IF P & 4 > 0 W = W . "W" %IF P & 2 > 0 W = W . "R" %IF P & 1 > 0 W = "?" . W %IF P >> 4 > 0 %RESULT = W %END ! ! ! WRS("On-line files:") A = ADDR(P) J = DPERMISSION(USER, "", "", "", -1, 8, A) -> OUT %UNLESS J = 0 ! N = P_N-24 %UNLESS N < 0 %START N = N // 8 LINE = "Index list: " %CYCLE J = N, -1, 0 IP == P_IP(J) LINE = LINE . "..." . IP_USER . ":" . Z(IP_PRM) WRS(LINE) %AND LINE = "" %IF LENGTH(LINE) > 56 %REPEAT WRS(LINE) %UNLESS LINE = "" %FINISH ! JUNK = 0 N = 1024 J = DFILENAMES(USER, INF, JUNK, N, NFILES, -1, 0) -> OUT %UNLESS J = 0 ! %CYCLE I = 0, 1, N-1 FL == INF(I) J = DPERMISSION(USER, "", "", FL_NAME, -1, 4, A) %IF J = 0 %AND FL_NAME#"#MSG" %START %UNLESS %C FL_OWNP = 7 %C %ANDC FL_EEP = 0 %C %ANDC P_N = 16 %C %START LINE = FL_NAME . " " LENGTH(LINE) = 12 LINE = LINE . "OWNP:" . Z(FL_OWNP) %UNLESS FL_OWNP = 7 LINE = LINE . "EEP:" . Z(FL_EEP) %UNLESS FL_EEP = 0 ! %IF P_N > 16 %START %CYCLE J = (P_N-24)//8, -1, 0 IP == P_IP(J) LINE = LINE . "....".IP_USER . ":" . Z(IP_PRM) WRS(LINE) %AND LINE = "" %IF LENGTH(LINE) > 56 %REPEAT %FINISH WRS(LINE) %UNLESS LINE = "" %FINISH %FINISH %REPEAT ! J = 0 OUT: %RESULT = J %END ! !----------------------------------------------------------------------- ! %INTEGERFN APERMS(%STRING(6)USER) %INTEGER J, A, N, JUNK, NFILES, I, TYPE %STRING(127)LINE %RECORDFORMAT F1(%STRING(6)USER, %BYTEINTEGER PRM) %RECORDFORMAT F2(%INTEGER N, OWNP, EEP, X, %RECORD(F1)%ARRAY IP(0:15)) %RECORDFORMAT F3(%STRING(11)NAME, %INTEGER KB, %C %STRING(8)DATE, %STRING(6)TAPE, %INTEGER CHAPTER, FLAGS) ! %RECORD(F2)P %RECORD(F1)%NAME IP %RECORD(F3)%ARRAY INF(0:1023) %RECORD(F3)%NAME FL ! ! %STRINGFN Z(%INTEGER P) %STRING(7)W W = "" W = "N" %IF P = 0 W = W . "P" %IF P & 8 > 0 W = W . "E" %IF P & 4 > 0 W = W . "W" %IF P & 2 > 0 W = W . "R" %IF P & 1 > 0 W = "?" . W %IF P >> 4 > 0 %RESULT = W %END ! ! ! WRS("Off-line files:") A = ADDR(P) J = DPERMISSION(USER, "", "", "", -1, 24, A) -> OUT %UNLESS J = 0 ! N = P_N-24 %UNLESS N < 0 %START N = N // 8 LINE = "Index list: " %CYCLE J = N, -1, 0 IP == P_IP(J) LINE = LINE . "..." . IP_USER . ":" . Z(IP_PRM) WRS(LINE) %AND LINE = "" %IF LENGTH(LINE) > 56 %REPEAT WRS(LINE) %UNLESS LINE = "" %FINISH ! %CYCLE TYPE = 1, 1, 2 JUNK = 0 N = 1024 J = DFILENAMES(USER, INF, JUNK, N, NFILES, -1, TYPE) -> OUT %UNLESS J = 0 ! %CYCLE I = 0, 1, N-1 FL == INF(I) J = DPERMISSION(USER, "", FL_DATE, FL_NAME, -1, 20, A) %IF J = 0 %AND P_N > 16 %START LINE = FL_NAME . " " LENGTH(LINE) = 12 LINE = LINE . FL_DATE ! %CYCLE J = (P_N-24)//8, -1, 0 IP == P_IP(J) LINE = LINE . " ....".IP_USER . ":" . Z(IP_PRM) WRS(LINE) %AND LINE = "" %IF LENGTH(LINE) > 56 %REPEAT WRS(LINE) %UNLESS LINE = "" %FINISH %REPEAT %REPEAT ! J = 0 OUT: %RESULT = J %END ! ! ! %INTEGERFN IPERMS(%STRING(6)USER) %INTEGER J J = OPERMS(USER) J = APERMS(USER) %IF J = 0 %RESULT = J %END ! ! ! %INTEGERFN IDPROCS %INTEGER J, MAX, ADR, L, K %BYTEINTEGERARRAY PLIST(0:32*256) %STRINGNAME USER ADR = ADDR(PLIST(0)) J = DPROCS(MAX, ADR) -> OUT %UNLESS J = 0 L = 0 %CYCLE K = 0, 1, MAX-1 USER == STRING(ADDR(PLIST(32*K))) %UNLESS USER = "" %START WRITE(K, 3) SPACE PRINTSTRING(USER) L = L + 1 L = 0 %AND NEWLINE %IF L = 6 %FINISH %REPEAT NEWLINE %UNLESS L = 0 OUT: %RESULT = J %END ! ! ! %INTEGERFN IUSERS(%INTEGER FSYS) %INTEGER ADR, N, J %BYTEINTEGERARRAY B(0:2400) ADR = ADDR(B(0)) N = 0 J = GETUSNAMES(N, ADR, FSYS) %IF N > 0 = J %START WRSN("No of users", N) %CYCLE PRINTSTRING(STRING(ADR)) %IF J = 9 %C %THEN J = 0 %AND NEWLINE %C %ELSE J = J + 1 %AND SPACE ADR = ADR + 7 N = N - 1 %EXIT %IF N = 0 %REPEAT J = 0 %FINISH NEWLINE %RESULT = J %END ! !----------------------------------------------------------------------- ! %INTEGERFN IWHO(%STRING(6)USER) ! %ROUTINE ERROR(%INTEGER N) PRINTSTRING("Flag = ") PRINTSTRING(DERRS(N)) %END ! ! ! %ROUTINE PRINTCHS(%STRING(255)S) %SYSTEMINTEGERFNSPEC IOCP(%INTEGER EP, PARM) %INTEGER LEN, ADR, RES; ! KEEP IN THIS ORDER !!!! %RETURN %IF LENGTH(S) = 0 LEN = LENGTH(S) ADR = ADDR(S) + 1 RES = IOCP(19, ADDR(LEN)) %END ! ! ! %ROUTINE MOVE(%INTEGER L, FROM, TO) *LDTB_X'18000000' *LDB_L *LDA_FROM *CYD_0 *LDA_TO *MV_%L=%DR %END; ! MOVE ! ! ! %INTEGERFN GET FSYS(%STRING(6)USER, %INTEGERNAME FS) %EXTERNALSTRINGFNSPEC VDUS(%INTEGER N) %INTEGER N, F, C %INTEGERARRAY FSYS(0:99) GET AV FSYS(N, FSYS) C = 0 %CYCLE F = 0, 1, N-1 J = DFSYS(USER, FSYS(F)) %RESULT = J %IF 0 # J # 37 ! %IF J = 0 %START %IF C = 0 %START PRINTCHS(VDUS(1)) PRINTSTRING("User: ") PRINTSTRING(USER) PRINTSTRING(" Fsys: ") FS = FSYS(F) %FINISH C = C + 1 WRITE(FSYS(F), 2) %FINISH %REPEAT ! %RESULT = 37 %IF C = 0 %RESULT = 0 %END ! ! ! %SYSTEMSTRING(8)%FNSPEC UNPACKDATE(%INTEGER I) %SYSTEMSTRING(8)%FNSPEC UNPACKTIME(%INTEGER I) %INTEGER J, T, FSYS, AI0, K %INTEGERARRAY INT(0:15) %STRING(15)W %REAL R %STRINGNAME S %CONSTINTEGER TYPES = 16 %CONSTBYTEINTEGERARRAY TYP(1:TYPES) = %C 18, 1, 0, 4, 30, 11, 12, 7, 5, 13, 14, 33, 37, 40, 6, 9 %CONSTSTRING(31)%ARRAY TAG(1:TYPES) = %C "Surname: ", " Delivery: ", " Basefile: ", " Index use: ", " Files: ", " Limits: MaxKb", " Maxfilesize", " ACR: ", " ", " Current procs: ", " max procs: ", " Funds: ", " Gpholder: ", " Dates passwords changed: ", " Last log on: ", " #ARCH use: index size" %SWITCH SW(1:TYPES) ! J = GET FSYS(USER, FSYS) %RESULT = J %UNLESS J = 0 NEWLINE ! AI0 = ADDR(INT(0)) S == STRING(AI0) %CYCLE T = 1, 1, TYPES J = DSFI(USER, FSYS, TYP(T), 0, AI0) PRINTSTRING(TAG(T)) -> SW(T) %IF J = 0 ERROR(J) -> NEXT SW(1): SW(2): SW(3): SW(13): PRINTSTRING(S) -> NEXT SW(4): WRITE(INT(0), 1) PRINTSTRING(" files, index size") WRITE(INT(3)+1, 1) PRINTSTRING("Kb") NEWLINE ! WRITE(INT(1), 3); PRINTSTRING(" FDs used") WRITE(INT(4)-INT(5), 3); PRINTSTRING(" SDs used") WRITE(INT(6)-INT(7), 3); PRINTSTRING(" PDs used") NEWLINE ! WRITE(INT(2), 3); PRINTSTRING(" FDs free") WRITE(INT(5), 3); PRINTSTRING(" SDs free") WRITE(INT(7), 3); PRINTSTRING(" PDs free") -> NEXT SW(5): WRITE(INT(0), 1) PRINTSTRING(" disc files,") WRITE(INT(1), 1) PRINTSTRING(" Kb,") WRITE(INT(4), 1) PRINTSTRING(" Temp files,") WRITE(INT(5), 1) PRINTSTRING(" Temp Kb") -> NEXT SW(6): SW(7): SW(8): WRITE(INT(0), 1) -> NEXT SW(9): W = "----, ++++" MOVE(4, AI0, ADDR(W)+1) MOVE(4, AI0+4, ADDR(W)+7) PRINTSTRING(W) -> NEXT SW(10): WRITE(INT(0), 3) WRITE(INT(1), 3) -> NEXT SW(11): WRITE(INT(0), 3) WRITE(INT(1), 3) WRITE(INT(2), 3) -> NEXT SW(12): R = INT(0) / 10000 PRINT(R, 1, 2) -> NEXT SW(14): SW(15): %CYCLE J = 0, 1, 1 K = INT(J) %IF K = 0 %C %THEN PRINTSTRING("????") %C %ELSE PRINTSTRING(UNPACKDATE(K)." ".UNPACKTIME(K)) PRINTSTRING(" / ") %IF J = 0 %REPEAT -> NEXT SW(16): WRITE(INT(4), 1) NEWLINE WRITE(INT(0), 6); PRINTSTRING(" A files ") WRITE(INT(2), 6); PRINTSTRING(" B files ") WRITE(INT(5)-INT(6), 4); PRINTSTRING(" FDs used") WRITE(INT(7)-INT(8), 4); PRINTSTRING(" PDs used") NEWLINE WRITE(INT(1), 6); PRINTSTRING(" A Kbytes") WRITE(INT(3), 6); PRINTSTRING(" B Kbytes") WRITE(INT(6), 4); PRINTSTRING(" FDs free") WRITE(INT(8), 4); PRINTSTRING(" PDs free") NEXT: %REPEAT NEWLINE %RESULT = 0 %END ! !----------------------------------------------------------------------- ! %INTEGERFN IDTRANSFER(%STRING(6)FROMU, %STRING(11)FROM F, %INTEGER FROM FSYS, %STRING(6)TO U, %STRING(11)TO F, %INTEGER TO FSYS, TYPE) %RESULT = DTRANSFER(FROMU, TOU, FROMF, TOF, FROMFSYS, TOFSYS, TYPE) %END ! ! ! %INTEGERFN ADRPRM %INTEGER J J = IP(6) & 15; ! type %IF 0 <= J <= 2 %OR J = 6 %C %THEN %RESULT = IPROMPT(PERMISSION) %C %ELSE %RESULT = ADDR(PRM) %END ! ! ! %INTEGERFN ADRDSFI %INTEGER TYPE, J, K TYPE = IP(3) %IF IP(4) = 1 %AND 0 <= TYPE <= TOPDSFI %START K = NI(TYPE); ! 0=string n>0 integers, <0 can't do %IF K = 0 %C %THEN S0 = PROMPTS(TXT(T(TYPE))) %C %ELSE %START %IF K > 0 %START %CYCLE J = 0, 1, K-1 I(J) = PROMPTI(TXT(T(TYPE)+J)) %REPEAT %FINISH %FINISH %FINISH ! %RESULT = ADDRDSFI %END ! %ROUTINE RES(%INTEGER R) RESULT = R ! %IF R = 0 %START WRS("Done") %FINISH %ELSE %START PRINTSTRING("Flag = ") WRS(DERRS(R)) %FINISH %END ! !-------------------------------------------------- START OF MAIN PROGRAM ------ ! ADDRDSFI = ADDR(DSFII(0)) I == ARRAY(ADDRDSFI, IFT) S0 == STRING(ADDRDSFI) NOP = 0; ! count parameters FNLOOP: FN = SPROMPT(FUNCTION) NOP = 0; ! reset %CYCLE J = 1, 1, TOPFN -> F(J) %IF FN = E(J) %REPEAT WRS("Invalid function, reply ? for help info") P = "" -> FNLOOP F(1): ! !%EXTERNALROUTINE KCHACCESS(%STRING(255)S) RES(DCHACCESS(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), IPROMPT(MODE))) %RETURN; !%END ! ! ! F(2): ! !%EXTERNALROUTINE KCHSIZE(%STRING(255)S) RES(DCHSIZE(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), IPROMPT(NKB))) %RETURN; !%END ! ! ! F(3): ! RES(IDCONNECT(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), IPROMPT(MODE), IPROMPT(APF), IPROMPT(SEG), IPROMPT(GAP), RSEG, RGAP)) ! %IF RESULT = 0 %OR RESULT = 34 %START WRSNT("Connected at ", RSEG<<18, 6) WRSN(" Seg", RSEG) %FINISH %RETURN; !%END ! ! F(4): ! !%EXTERNALROUTINE KCREATE(%STRING(255)S) RES(DCREATE(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), IPROMPT(NKB), IPROMPT(TYPECR))) %RETURN; !%END ! ! F(5): ! !%EXTERNALROUTINE KDELUSER(%STRING(255)S) RES(DDELUSER(SPROMPT(USER), IPROMPT(FSYS))) %RETURN; !%END ! ! ! F(6): ! !%EXTERNALROUTINE KDESTROY(%STRING(255)S) RES(DDESTROY(SPROMPT(USER), SPROMPT(FILE), SPROMPT(DATE), IPROMPT(FSYS), IPROMPT(TYPEDE))) %RETURN; !%END ! ! ! F(7): ! !%EXTERNALROUTINE KDISCONNECT(%STRING(255)S) RES(DDISCONNECT(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), IPROMPT(DSTROY))) %RETURN; !%END ! ! ! F(8): ! IDISCS %RETURN ! ! ! F(9): ! !%EXTERNALROUTINE KDONATE(%STRING(255)S) RES(DDONATE(SPROMPT(USER), IPROMPT(FSYS), IPROMPT(FUNDS))) %RETURN; !%END ! F(10): ! !%EXTERNALROUTINE KFBASE(%STRING(255)S) FSYSV = IPROMPT(FSYS) RES(FBASE(LO, HI, FSYSV)) %RETURN %UNLESS RESULT = 0 WRSNT("LO=", LO, 6) WRSNT(" HI=X", HI, 2) %RETURN; !%END ! ! F(11): ! !%EXTERNALROUTINE KFILENAMES(%STRING(255)S) USERV = SPROMPT(USER) FILENUMV = IPROMPT(FILENUM) FSYSV = IPROMPT(FSYS) TYPEV = IPROMPT(TYPEDE) OS == ARRAY(ADDR(B(0)), OSF) AS == ARRAY(ADDR(B(0)), ASF) MAXREC = 200 %IF TYPEV = 0 %THEN %C RES(DFILENAMES(USERV, OS, FILENUMV, MAXREC, NFILES, FSYSV, TYPEV)) %C %ELSE %C RES(DFILENAMES(USERV, AS, FILENUMV, MAXREC, NFILES, FSYSV, TYPEV)) %RETURN %UNLESS RESULT = 0 ! WRSNT("Maxrec", MAXREC, 5) WRSN(" Nfiles", NFILES) %RETURN %IF MAXREC = 0 ! MAXREC = MAXREC - 1 %IF TYPEV = 0 %START; ! on-line files WRS("file NKB OWNP EEP Use") %CYCLE J = 0, 1, MAXREC O == OS(J) S11 <- O_NAME . " " PRINTSTRING(S11) WRITE(O_NKB, 4) WRITE(O_OWNP, 5) WRITE(O_EEP, 4) WRITE(O_USE, 4) NEWLINE %REPEAT %FINISH %ELSE %START ! archive files WRS("file NKB Date Tape Chapter") %CYCLE J = 0, 1, MAXREC A == AS(J) S11 <- A_NAME . " " PRINTSTRING(S11) WRITE(A_NKB, 4) SPACES(2) PRINTSTRING(A_DATE) SPACES(2) PRINTSTRING(A_TAPE) WRITE(A_CHAP, 6) NEWLINE %REPEAT %FINISH %RETURN; !%END ! ! ! F(12): ! !%EXTERNALROUTINE KFINFO(%STRING(255)S) RES(DFINFO(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), ADDR(DFIN))) ! %IF RESULT = 0 %START WRSNT("NKB", DFIN_NKB, 5) WRSNT(",RUP", DFIN_RUP, 5) WRSNT(",EEP", DFIN_EEP, 5) WRSNT(",APF ", DFIN_APF, X'36') WRSNT(",USE", DFIN_USE, 1) ! WRSNT("ARCH ", DFIN_ARCH, X'26') WRSNT(",FSYS", DFIN_FS, 5) WRSNT(",SEG", DFIN_SEG, 5) WRSNT(",CCT", DFIN_CCT, 5) WRSNT(",CODES ", DFIN_CDS, X'22') ! WRSNT("DAY", DFIN_DAY, 5) WRSNT(",CODES2 ", DFIN_CD2, X'26') WRSNT(",SS", DFIN_SS, 5) WRS(",ON OFFER TO " . DFIN_OFF) %FINISH %RETURN; !%END ! ! F(13): !>2)&B'11111' = VALUE. ! ! 11 ARCH Operation 1 (PRIVILEGED). ! Set currently-being-backed-up bit (bit 2**1 in ! ARCH byte), unless the file is currently ! connected in write mode, when error result 52 ! is given. ! ! 12 ARCH Operation 2 (PRIVILEGED). ! Clear currently-being-backed-up bit (2**1) and ! has-been-connected-in-write-mode bit (2**0). ! ! 13 ARCH Operation 3 (PRIVILEGED). ! Set archive byte to be bottom 8 bits of VALUE ! and clear the UNAVAilable bit in CODES. ! ! 14 ARCH Operation 4 (PRIVILEGED). ! Clear the UNAVAilable and privacy VIOLATed bits ! in CODES. Used by the back-up and archive ! programs when the file has been read in from ! magnetic tape. ! ! 15 CLR USE Clear file use-count and WRITE-CONNECTED status ! (PRIVILEGED). ! ! 16 CLR NOARCH Clear archive-inhibit bit in CODES. ! ! 17 SET NOARCH Set archive-inhibit bit in CODES ! ! 18 SSBYTE Set SSBYTE to be the bottom 8 bits of VALUE ! (byte for a subsystem's exclusive use). ! ! 19 ARCH Operation 5 (PRIVILEGED). Set the WRCONN bit in ! CODES2. Used to prevent any user connecting ! the file in write mode during back-up or ! archive. ! ! 20 ARCH Operation 6 (PRIVILEGED). Clear the WRCONN bit ! in CODES2. Used when back-up is complete. ! ! 21 DAYNO Set DAYNO to bottom 8 bits of VALUE ! ! Possible error results: 8, 11, 18, 20, 37, 47, 52 !> !%EXTERNALROUTINE KFSTATUS(%STRING(255)S) RES(DFSTATUS(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), IPROMPT(ACTFSTAT), IPROMPT(VALUE))) %RETURN; !%END ! ! ! F(14): ! FSYS ! RES(IDFSYS(SPROMPT(USER))) %RETURN ! ! ! F(15): ! !%EXTERNALROUTINE KGETDA(%STRING(255)S) ADR = ADDR(AA(-4)) RES(DGETDA(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), ADR)) %RETURN %UNLESS RESULT = 0 ! WRSNT("Sectsi", AA(-4), 5) WRSNT(" Nsects", AA(-3), 5) WRSN(" PGS in last sect", AA(-2)) ! J = 0 %WHILE J < AA(-3) %CYCLE WRSNT("DA ", J+1, 5) WRSNT(" ", AA(J), 2) J = J + 1 %REPEAT %RETURN; !%END ! ! ! F(16): ! !%EXTERNALROUTINE KNEWGEN(%STRING(255)S) RES(DNEWGEN(SPROMPT(USER), SPROMPT(FROMF), SPROMPT(TOF), IPROMPT(FSYS))) %RETURN; !%END ! ! ! F(17): ! !%EXTERNALROUTINE KNEWUSER(%STRING(255)S) RES(DNEWUSER(SPROMPT(USER), IPROMPT(FSYS), IPROMPT(NKB))) %RETURN; !%END ! ! ! F(18): ! !%EXTERNALROUTINE KOFFER(%STRING(255)S) RES(DOFFER(SPROMPT(USER), SPROMPT(OFFERTO), SPROMPT(FILE), IPROMPT(FSYS))) %RETURN; !%END ! ! ! F(19): ! RES(IOPTIONS(SPROMPT(USER), SPROMPT(OPTNFILE))) %RETURN ! ! ! F(20): ! !%EXTERNALROUTINE KPERMISSION(%STRING(255)S) RES(DPERMISSION(SPROMPT(USER), SPROMPT(TO U), SPROMPT(DATE), SPROMPT(FILE), IPROMPT(FSYS), IPROMPT(TYPEPRM), ADRPRM)) ! %IF RESULT = 0 %START J = IP(6) & 15 %IF J = 10 %START WRSNT("PERM=", PRM_B, 26) %FINISH %ELSE %START %IF J = 4 %START WRSNT("OWNP=", PRM_OWNP, 26) WRSNT(" EEP=", PRM_EEP, 26) %FINISH %IF J = 4 %OR J = 8 %START J = (PRM_B-16)>>3 %IF J > 0 %START %CYCLE X = 0, 1, J-1 NEWLINE WRSNT(PRM_PRMS(X)_USER, PRM_PRMS(X)_PRM, 26) %REPEAT %FINISH %FINISH %FINISH NEWLINE %FINISH %RETURN; !%END ! ! ! F(21): ! RES(IPERMS(SPROMPT(USER))) %RETURN ! ! ! F(22): ! PRG ! RES(DPRG(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), SPROMPT(LABEL), IPROMPT(SITE))) %RETURN ! ! ! F(23): ! PROCS ! RES(IDPROCS) %RETURN ! ! ! F(24): ! !%EXTERNALROUTINE KRENAME(%STRING(255)S) RES(DRENAME(SPROMPT(USER), SPROMPT(FROMF), SPROMPT(TOF), IPROMPT(FSYS))) %RETURN; !%END ! ! ! F(25): ! RENAME INDEX ! RES(DRENAMEINDEX(SPROMPT(OLDNAME), SPROMPT(NEWNAME), IPROMPT(FSYS))) %RETURN ! ! ! F(26): ! RESTORE ! RES(DRESTORE(SPROMPT(USER), SPROMPT(FILE), SPROMPT(DATE), IPROMPT(FSYS), IPROMPT(TYPE REST))) %RETURN ! ! ! F(27): ! SET PASSWORD ! %RETURN ! ! ! F(28): ! RES(DSFI(SPROMPT(USER), IPROMPT(FSYS), IPROMPT(TYPEDSFI), IPROMPT(SETDSFI), ADRDSFI)) %IF RESULT = 0 = IP(4) %START X = NI(IP(3)) %IF X = 0 %START PRINTSTRING(TXT(T(IP(3)))) WRS(S0) %FINISH %ELSE %START X = -X %IF X < 0; ! X is the number of integers to print %CYCLE J = 0, 1, X-1 WRSNT(TXT(T(IP(3))+J).":", I(J), 3) %REPEAT %FINISH %FINISH %RETURN F(29): ! SUBMIT %RETURN ! ! ! F(30): ! RES(IDTRANSFER(SPROMPT(FROM U), SPROMPT(FROM F), IPROMPT(FROM FSYS), SPROMPT(TO U), SPROMPT(TO F), IPROMPT(TO FSYS), IPROMPT(TYPETR))) %RETURN ! ! ! F(31): ! UNPRG ! RES(DUNPRG(SPROMPT(USER), SPROMPT(FILE), IPROMPT(FSYS), SPROMPT(LABEL), IPROMPT(SITE))) %RETURN ! ! ! F(32): ! USERS ! RES(IUSERS(IPROMPT(FSYS))) %RETURN ! ! ! F(33): ! WHO ! RES(IWHO(SPROMPT(USER))) %RETURN ! F(34): !QUIT F(35): !Q %RETURN ! F(36): !RETRIEVE ! RES(DRETRIEVE(SPROMPT(TAPEID),IPROMPT(CHAPID))) %RETURN ! %END %ENDOFFILE