Director Error Messages

Alleged: FEs 0,1,2 can become 1,2,2 !!! When a Director procedure is called, a record is kept of the procedure called and the value of the result returned. Subsequently, a process may use the procedures described here to interpret the result value and generate a meaningful error message. COMMANDS TO DIRECT %CONSTINTEGER TOPM = 101 In the table below, the first two digits give the number of the command in XOPER the next three digits describe the (first) three parameters 0 none 1 string(6) 2 numeric 3 string(6.11) 4 string(4) 5 string(1) 6 string(6) or numeric 7 string 0 < length < 32 8 no checking done the sixth digit 0 must have the specified number of parameters 1 may have fewer -------------------------------------------------! The following ACTivities are currently SPARE: ! ! -------------------------------------------------! %CONSTSTRING(25)%ARRAY M(1:TOPM) = %C "30-1220-ACR", "40-2001-AUTOFILE", "79-7000-AUTOSLOAD", "13-2220-BADFSYSCYLTRK", "43-2200-BADFSYSPAGE", "18-1201-BASEF", "50-2001-BROADCAST", "07-2000-CCK", "92-2000-CHECKFSYS", "14-2000-CCKDONE", "42-2000-CLEARBADPAGESLIST", "10-2000-CLEARFSYS", "100-2000-CLEARNNT", "26-2001-CLOSE", "12-0000-CLOSEDOWN", "70-2201-CLOSEFE", "70-2201-CLOSEFEP", "61-2201-CLOSEFSYS", "80-2201-CLOSENODE", "90-7201-CLOSEPAD", "82-7201-CLOSETCP", "91-2001-CLOSETIME", "76-1000-CLOSETO", "45-2001-CLOSEUSERS", "72-0000-CLOSE?", "60-2000-CONNECTFE", "15-0000-CREATE", "71-8801-DAP", "89-0000-DAY", "55-8001-DELIVER", "02-1200-DELUSER", "28-0000-DESTS", "39-1220-DIRMON", "67-2001-DIRPRINT", "57-2000-DISCONNECTFE", "11-2200-DUMPINDNO", "96-2000-DUMP", "97-2000-DUMPCODE", "98-2000-DUMPNNT", "74-0000-EMPTYDVM", "101-2200-EMPTYINDEX", "03-2221-ERTE", "63-0000-FAIL", "77-1000-FE", "73-2001-FEUSECOUNT", "06-1201-FSYS", "69-2200-FSYSBITNO", "68-2220-FSYSCYLTRK", "44-2200-GOODFSYSPAGE", "48-1500-INT:", "29-1201-KILL", "99-8001-LOGACTION", "54-0000-LOGSPACE", "87-1220-LS", "95-2001-MONITOR", "32-0000-MAINLP", "47-1201-MSG", "16-1221-NEWSTART", "01-1220-NEWUSER", "51-1201-NNT", "05-0000-OBEYFILE", "78-2000-OPENFE", "78-2000-OPENFEP", "46-2000-OPENFSYS", "81-2000-OPENNODE", "93-7000-OPENPAD", "83-7000-OPENTCP", "52-1000-OPENTO", "46-2001-OPENUSERS", "38-1400-PASS", "17-0000-PASSOFF", "65-2001-PREEMPTAT", "22-0000-PRG", "25-2001-PRINT", "04-3201-PRM", "59-0000-PROMPTOFF", "58-0000-PROMPTON", "21-1121-RENI", "35-2200-REP", "20-3201-S", "64-2001-SCARCITY", "33-1201-SENDMSG", "66-2001-SESSIONLENGTH", "37-1201-SETBASEF", "49-0000-SETMSG", "75-1220-SIGMON", "34-1200-SINT:", "88-0000-SITE", "08-0000-SNOS", "94-8001-SS", "31-1221-START", "27-0000-STOP", "41-1221-TESTSTART", "36-2000-TEXT", "24-0000-TRANSFER", "62-2001-USECOUNT", "23-0000-UNPRG", "09-2000-USERNAMES", "56-6201-{USERS}", "19-0000-VSN", "53-1201-XNNT" ----------------------------------------------------------------------- %CONSTINTEGER MODULE = 3 %endoflist %INCLUDE "C03FORMATS" %IF TARGET = 2900 %START %EXTERNALINTEGERFNSPEC %C DDELUSER(%STRING(19)FINDEX, %INTEGER FSYS) %externalintegerfnspec %c demptyi(%integer fsys, indno) %EXTERNALINTEGERFNSPEC %C DFINFO(%STRING(19)FILE INDEX, %STRING(255)FILE, %INTEGER FSYS, ADR) %EXTERNALINTEGERFNSPEC %C DFSTATUS(%STRING(19)FILE INDEX, %STRING(255)FILE, %INTEGER FSYS, ACT, VALUE) %EXTERNALINTEGERFNSPEC %C DGETDA(%STRING(19)FINDEX, %STRING(255)FILE, %INTEGER FSYS, ADR) %EXTERNALINTEGERFNSPEC %C DNEWUSER(%STRING(19)FINDEX, %INTEGER FSYS, NKB) %EXTERNALINTEGERFNSPEC %C DPRG(%STRING(19)USER, %STRING(255)FILE, %INTEGER FSYS, %STRING(6)LABEL, %INTEGER SITE) %EXTERNALINTEGERFNSPEC %C DRENAME INDEX(%STRING(19)OLDNAME, NEWNAME, %INTEGER FSYS) %EXTERNALINTEGERFNSPEC %C DRENAME(%STRING(19)USER, %STRING(255)OLD, NEW, %INTEGER FSYS) %EXTERNALINTEGERFNSPEC %C DSFI(%STRING(19)INDEX, %INTEGER FSYS, TYPE, SET, ADR) %EXTERNALROUTINESPEC %C DSTOP(%INTEGER REASON) %EXTERNALINTEGERFNSPEC %C DTRANSFER(%STRING(19)USER1, USER2, %STRING(255)FILE1, FILE2, %INTEGER FSYS1, FSYS2, TYPE) %EXTERNALINTEGERFNSPEC %C DUNPRG(%STRING(19)USER, %STRING(255)FILE, %INTEGER FSYS, %STRING(6)LABEL, %INTEGER SITE) %EXTERNALROUTINESPEC %C DAP INTERFACE(%INTEGER ACT) %EXTERNALINTEGERFNSPEC %C DCHSIZE(%STRING(19)USER, %STRING(255)FILE, %INTEGER FSYS, NKB) %EXTERNALINTEGERFNSPEC %C IN2(%INTEGER FN) %EXTERNALINTEGERFNSPEC %C OUT(%INTEGER FLAG, %STRING(63)TEMPLATE) %EXTERNALINTEGERFNSPEC %C PRIME CONTINGENCY(%ROUTINE R) %EXTERNALROUTINESPEC %C STOP ONE(%INTEGER A, B) %FINISH %ELSE %START %EXTERNALINTEGERFNSPEC %C DCHSIZE(%STRINGNAME FILE INDEX, FILE, %INTEGERNAME FSYS, NKB) %EXTERNALINTEGERFNSPEC %C DDELUSER(%STRINGNAME FILE INDEX, %INTEGERNAME FSYS) %externalintegerfnspec %c demptyi(%integername fsys, indno) %EXTERNALINTEGERFNSPEC %C DFINFO(%STRINGNAME FILE INDEX, FILE, %INTEGERNAME FSYS, %STRINGNAME OFFERTO, %INTEGERARRAYNAME I) %EXTERNALINTEGERFNSPEC %C DFSTATUS(%STRINGNAME FILE INDEX, FILE, %INTEGERNAME FSYS, ACT, VALUE) %EXTERNALINTEGERFNSPEC %C DGETDA(%STRINGNAME FILE INDEX, FILE, %INTEGERNAME FSYS, %INTEGERARRAYNAME I) %EXTERNALINTEGERFNSPEC %C DNEWUSER(%STRINGNAME FILE INDEX, %INTEGERNAME FSYS, NKB) %EXTERNALINTEGERFNSPEC %C DPRG(%STRINGNAME USER, FILE, %INTEGERNAME FSYS, %STRINGNAME LABEL, %INTEGERNAME SITE) %EXTERNALINTEGERFNSPEC %C DPRIMECONTINGENCY(%ROUTINE ONTRAP) %EXTERNALINTEGERFNSPEC %C DRENAME INDEX(%STRINGNAME OLDNAME, NEWNAME, %INTEGERNAME FSYS) %EXTERNALINTEGERFNSPEC %C DRENAME(%STRINGNAME FILE INDEX, OLDNAME, NEWNAME, %INTEGERNAME FSYS) %EXTERNALINTEGERFNSPEC %C DSFI(%STRINGNAME FILE INDEX, %INTEGERNAME FSYS, TYPE, SET, %STRINGNAME S, %INTEGERARRAYNAME I) %EXTERNALINTEGERFNSPEC %C DSTOP(%INTEGERNAME REASON) %EXTERNALINTEGERFNSPEC %C DTRANSFER(%STRINGNAME FILE INDEX1, FILE INDEX2, FILE1, FILE2, %INTEGERNAME FSYS1, FSYS2, TYPE) %EXTERNALINTEGERFNSPEC %C DUNPRG(%STRINGNAME FILE INDEX, FILE, %INTEGERNAME FSYS, %STRINGNAME LABEL, %INTEGERNAME SITE) %externalintegerfnspec %c INTO(%integer FN, %string(11)TEMPLATE) %externalintegerfnspec %c OUTOF(%integer FLAG) %EXTERNALINTEGERFNSPEC %C SS(%INTEGER CNSL, %STRINGNAME S) %FINISH %EXTERNALROUTINESPEC %C ADJUST DLVN BIT(%INTEGER FSYS, SET) %EXTERNALINTEGERFNSPEC %C ASYNC MSG(%STRING(6) USER,%INTEGER INVOC,DACT,P1,P3) %EXTERNALINTEGERFNSPEC %C AUTO COMM(%STRING(19)USER, %STRING(255)FILE, %INTEGER ACT) %EXTERNALINTEGERFNSPEC %C AV(%INTEGER FSYS, TYPE) %EXTERNALINTEGERFNSPEC %C BAD PAGE(%INTEGER TYPE, FSYS, BITNO) %EXTERNALINTEGERFNSPEC %C CCK(%INTEGER FSYS, CHECK, %INTEGERNAME PERCENT) %EXTERNALROUTINESPEC %C CLEAR FSYS(%INTEGER FSYS) %ROUTINESPEC %C COPY TO LOG FILE(%INTEGER FA1,FA2) %EXTERNALINTEGERFNSPEC %C CREATE AND CONNECT(%STRING(19)FINDEX, %STRING(255)FILE, %INTEGER FSYS, NKB, ALLOC, MODE, APF, %INTEGERNAME SEG, GAP) %EXTERNALROUTINESPEC %C CYC CHECK(%INTEGER FAD, MAXBYTES) %EXTERNALROUTINESPEC %C DCHAIN(%INTEGER SEG, DESTROY) %EXTERNALINTEGERFNSPEC %C DCONNECTI(%STRING(19)FINDEX, %STRING(255)FILE, %INTEGER FSYS, MODE, APF, %INTEGERNAME SEG,GAP) %EXTERNALINTEGERFNSPEC %C DCREATEF(%STRING(19)FINDEX, %STRING(255)FILE, %INTEGER FSYS, NKB, ALLOC, LEAVE, %INTEGERNAME DA) %EXTERNALINTEGERFNSPEC %C DDAYNUMBER %EXTERNALINTEGERFNSPEC %C DDESTROYF(%STRING(19)FINDEX, %STRING(255)FILE, %INTEGER FSYS, DEALLOC) %EXTERNALINTEGERFNSPEC %C DDISCONNECTI(%STRING(19)FINDEX, %STRING(255)FILE, %INTEGER FSYS, LO) %EXTERNALINTEGERFNSPEC %C DDTENTRY(%INTEGERNAME ENTAD, %INTEGER FSYS) %EXTERNALINTEGERFNSPEC %C DDUMPINDNO(%INTEGER FSYS,INDNO) %EXTERNALROUTINESPEC %C DERR2(%STRING(31) S,%INTEGER FN, ERR) %EXTERNALINTEGERFNSPEC %C DISCSEGCONNECT(%INTEGER FSYS, SITE, SEG, APF, PGS, FLAGS) %EXTERNALROUTINESPEC %C DOPERR(%STRING(23)TXT,%INTEGER FN,RES) %EXTERNALROUTINESPEC %C DOPER2(%STRING(255)S) %EXTERNALintegerfnSPEC %C DOUTI(%RECORD(PARMF)%NAME P) %EXTERNALintegerfnSPEC %C DOUT11I(%RECORD(PARMF)%NAME P) %EXTERNALINTEGERFNSPEC %C DPERMISSIONI(%STRING(19)OWNER, %STRING(6)USER, %STRING(8)DATE, %STRING(255)FILE, %INTEGER FSYS, TYPE, ADRPRM) %EXTERNALintegerfnSPEC %C DPOFFI(%RECORD(PARMF)%NAME P) %EXTERNALintegerfnSPEC %C DPONI(%RECORD(PARMF)%NAME P) %EXTERNALINTEGERFNSPEC %C DPON3I(%STRING(6) USER,%RECORD(PARMF)%NAME P, %C %INTEGER INVOC,MSGTYPE,OUTNO) %EXTERNALROUTINESPEC %C EMPTY DVM %EXTERNALINTEGERFNSPEC %C ENCRYPT(%INTEGER MODE, %STRING(63)PASS, %LONGINTEGERNAME E, %INTEGERNAME K, DT) %EXTERNALINTEGERFNSPEC %C FBASE2(%INTEGER FSYS, ADR) %EXTERNALROUTINESPEC %C FILE FOR HOTTOP(%INTEGER INVOC) %EXTERNALINTEGERFNSPEC %C FIND NNT ENTRY(%STRING(19)INDEX, %INTEGERNAME FSYS, NNAD,%INTEGER TYPE) %EXTERNALSTRINGFNSPEC %C FROMSTRING(%STRING(255)S, %INTEGER I, J) %EXTERNALINTEGERFNSPEC %C FUNDS(%INTEGERNAME GPINDAD, %INTEGER INDAD) %EXTERNALROUTINESPEC %C GET AV FSYS2(%INTEGER TYPE, %INTEGERNAME N, %INTEGERARRAYNAME A) %EXTERNALINTEGERFNSPEC %C GETBIT(%INTEGER ADR, N) %EXTERNALINTEGERFNSPEC %C HINDA(%STRING(6)UNAME, %INTEGERNAME FSYS, INDAD, %INTEGER TYPE) %EXTERNALSTRINGFNSPEC %C HTOS(%INTEGER I, PL) %EXTERNALSTRINGFNSPEC %C ITOS(%INTEGER N) %EXTERNALINTEGERFNSPEC %C LISTMOD(%STRING(6) S1,%INTEGER N1,N2) %INTEGERFNSPEC %C LOGLINK(%RECORD(PARMF)%NAME P,%INTEGER ACT) %EXTERNALROUTINESPEC %C MOVE(%INTEGER LENGTH, FROM, TO) %EXTERNALROUTINESPEC %C OUTPUT MESSAGE TO FEP(%RECORD(FEPF)%ARRAYNAME FEPS, %INTEGER FE, TYPE, ADR, LEN, STREAM, PROTOCOL) %EXTERNALINTEGERFNSPEC %C PACKDT %EXTERNALROUTINESPEC %C PLACE(%STRING(39)TEXT, %INTEGER SCREEN,LINE,COL,ACTION) %EXTERNALROUTINESPEC %C PREC(%STRING(255)S, %RECORD(PARMF)%NAME P, %INTEGER N) %EXTERNALROUTINESPEC %C PRHEX(%INTEGER I) %EXTERNALROUTINESPEC %C PRINTSTRING(%STRING(255)S) %EXTERNALROUTINESPEC %C PRINTSYMBOL(%INTEGER SYMBOL) %EXTERNALINTEGERFNSPEC %C SETBIT(%INTEGER ADR, N, VALUE) %EXTERNALINTEGERFNSPEC %C SET CLOSING BIT(%INTEGER FSYS) %EXTERNALINTEGERFNSPEC %C STRING TO FILE(%INTEGER LEN,ADR,FAD) %EXTERNALROUTINESPEC %C SYMBOLS(%INTEGER N, SYMBOL) %EXTERNALINTEGERFNSPEC %C SYSAD(%INTEGER KEY, FSYS) %EXTERNALINTEGERFNSPEC %C TXTMESS(%STRING(6) USER,%RECORD(PARMF)%NAME RP, %C %INTEGER SYNC,INVOC,TXTLEN,TXTAD,FSYS,SACT) %EXTERNALROUTINESPEC %C UCTRANSLATE(%INTEGER ADR, LEN) %EXTERNALSTRINGFNSPEC %C UNPACKDT(%INTEGER DT) %EXTERNALINTEGERFNSPEC %C VAL(%INTEGER ADR, LEN, RW, PSR) %EXTERNALROUTINESPEC %C WRITE(%INTEGER N, PLACES) %EXTERNALROUTINESPEC %C WRS(%STRING(255)S) %EXTERNALROUTINESPEC %C WRSNT(%STRING(255)S, %INTEGER N, T) %EXTERNALROUTINESPEC %C WRSS(%STRING(255)S1, S2) %EXTERNALROUTINESPEC %C WRSN(%STRING(255)S, %INTEGER N) %EXTERNALROUTINESPEC %C WRS3N(%STRING(255)S1, S2, S3, %INTEGER N) %EXTERNALINTEGERFNSPEC %C AINDA(%STRING(19)INDEX, %INTEGER FSYS, %INTEGERNAME AFINDAD) %EXTERNALROUTINESPEC %C ATTU(%STRINGNAME S) %EXTERNALROUTINESPEC %C FILL(%INTEGER LENGTH, FROM, FILLER) %EXTERNALINTEGERFNSPEC %C FIND(%INTEGER FINDAD, %STRINGNAME FILE, %INTEGERNAME INDEX) %EXTERNALINTEGERFNSPEC %C FINDA(%STRING(19)INDEX, %INTEGERNAME FSYS, FINDAD, %INTEGER TYPE) %EXTERNALINTEGERFNSPEC %C HASH(%STRING(6)USER, %INTEGER NNTHASH) %INTEGERFNSPEC %C HOWFULL(%INTEGER FSYS) %EXTERNALINTEGERFNSPEC %C MAP FILE INDEX(%STRINGNAME INDEX, %INTEGERNAME FSYS, FINDAD, %STRING(63)TXT) %EXTERNALINTEGERFNSPEC %C MOVESECTION(%INTEGER FSYS1, STARTP1, FSYS2, STARTP2, EPGS) %EXTERNALROUTINESPEC %C NCODE(%INTEGER PC) %EXTERNALINTEGERFNSPEC %C NINDA(%INTEGER FSYS, INDNO, %INTEGERNAME INDAD) %EXTERNALINTEGERFNSPEC %C PP(%INTEGER SEMADDR,SEMANO,%STRING(63)S) %EXTERNALINTEGERFNSPEC %C S11OK(%STRINGNAME S11) %EXTERNALINTEGERFNSPEC %C SYSBASE(%INTEGERNAME SYS START, %INTEGER FSYS) %EXTERNALINTEGERFNSPEC %C UIF(%STRINGNAME INDEX, FILE, UNA, INA, FULL) %EXTERNALINTEGERFNSPEC %C UI(%STRINGNAME INDEX, UNA, INA) %EXTERNALINTEGERFNSPEC %C UNOK(%STRINGNAME USER) %EXTERNALROUTINESPEC %C VV(%INTEGER SEMADDR, SEMANO) ----------------------------------------------------------------------- %if TARGET = 2900 %start %STRING(69)%FN MESSAGE(%INTEGER N) %INTEGER I,K,M,Q,S,SHIFT %INTEGER WORDMAX, DEFAULT %STRING(70)OMESS %INTEGERARRAYFORMAT LETTF(0 : 32767) %INTEGERARRAYNAME LETT %if TARGET = 2900 %start %HALFINTEGERARRAYFORMAT WORDF(0 : 32767) %HALFINTEGERARRAYNAME WORD %finish %else %start %SHORTINTEGERARRAYFORMAT WORDF(0 : 32767) %SHORTINTEGERARRAYNAME WORD %finish %RESULT = "Message file not available" %IF D_MESSAGE = 0 WORDMAX = INTEGER (D_MESSAGE+4) DEFAULT = INTEGER (D_MESSAGE+8) LETT == ARRAY(D_MESSAGE + 12, LETTF) WORD == ARRAY(D_MESSAGE + INTEGER(D_MESSAGE), WORDF) OMESS="" K = N + 10000 K = K + 1000 %UNLESS N = 0 %FOR I=0,1,WORDMAX-1 %CYCLE -> FOUND %IF K=WORD(I) %REPEAT I=DEFAULT FOUND: SHIFT=64 %CYCLE I = I + 1 K=WORD(I) %EXIT %IF K > 9999 OMESS = OMESS . " " %UNLESS OMESS = "" %CYCLE M=LETT(K) %CYCLE S = 4, -1, 0 Q=M&63 %EXIT %IF Q = 0 M = M >> 6 %IF Q=63 %C %THEN SHIFT=31 %C %ELSE OMESS=OMESS.TOSTRING(Q+SHIFT) %AND SHIFT=64 %REPEAT K=K+1 %REPEAT %UNTIL M=0 %REPEAT %RESULT=OMESS %END; ! MESSAGE %finish %else %start %STRING(69)%FN MESSAGE(%INTEGER N) %CONSTSTRING(39)%ARRAY FIRST(1001:1115) = %C {1001} "File too big or bad site", {1002} "Name used for a group", {1003} "No free segments for Alloc Dseg", {1004} "Denable Terminal Stream fails", {1005} "File not available", {1006} "Use count on fsys negative", {1007} "No space for index", {1008} "Bad parameter", {1009} "Must allow 15 mins", {1010} "File system full", {1011} "Bad USER name", {1012} "Nkb must be 2 or between 4 and 32", {1013} "Name number table full", {1014} "User already has index on fsys", {1015} "No free file descriptors", {1016} "File already exists", {1017} "No free permission descriptors", {1018} "Invalid filename &", {1019} "Password truncated to 11 characters", {1020} "File & on offer", {1021} "File being executed", {1022} "Bits already clear for some pages", {1023} "Fsys not available", {1024} "Intermediate group does not exist", {1025} "Disk transfer failed", {1026} "Name used for a file", {1027} "File too big", {1028} "CBT freelist empty", {1029} "No free CONLIST entries", {1030} "Invalid index name", {1031} "Ambiguous", {1032} "File & does not exist or no access", {1033} "Conflicting use of file & in another VM", {1034} "File is already connected", {1035} "Segment in use or GAP too small", {1036} "(De-)Nominate fails", {1037} "User & not known", {1038} "Already claimed", {1039} "File & is not connected", {1040} "File is connected", {1041} "Single file limit exceeded", {1042} "File is connected in another VM", {1043} "No free section descriptors", {1044} "invalid group name", {1045} "User's parameters not accessible", {1046} "Bad permission", {1047} "Not enough stack", {1048} "TELL message rejected", {1049} "Permission list full (max 16)", {1050} "User not in list", {1051} "OWNP is zero or no-destroy set", {1052} "File is connected in write mode", {1053} "No interrupt data", {1054} "No outward call set up", {1055} "Facility not available! (see AG)", {1056} "Area crosses segment boundary", {1057} "End of session", {1058} "Bad parameter or RCB not accessible", {1059} "Archive index checksum failure", {1060} "User has no funds", {1061} "Process not available", {1062} "Max in DAP Claim Queue", {1063} "DAP not claimed at start", {1064} "DAP claim cancelled", {1065} "Bad Date or Time", {1066} "Close sequence cancelled", {1067} "Not claimed", {1068} "Failed to lock-down area", {1069} "CCK already done", {1070} "List is full", {1071} "No time left", {1072} "DAP not started", {1073} "DAP not available", {1074} "Not enough contiguous DAP blocks", {1075} "DAP closing", {1076} "User already has DAP", {1077} "Failed to claim archive semaphore", {1078} "Disconnect cannot find file", {1079} "Area not locked", {1080} "Not in list", {1081} "LP is already MAIN", {1082} "Maximum areas already locked", {1083} "Total file space limit exceeded", {1084} "Restricted connect", {1085} "Fsys closing", {1086} "Failed to create and connect #msg", {1087} "Index corrupt", {1088} "Re-map fails", {1089} "Invalid file", {1090} "Maximum already allocated", {1091} "Block still active", {1092} "Interactive use not allowed", {1093} "User does not have privilege", {1094} "Failed to claim semaphore", {1095} "Cannot allocate main LP", {1096} "Password failure", {1097} "Bad page reported in NINDA", {1098} "Resources Scarce", {1099} "Obsolete index format encountered", {1100} "Logged on", {1101} "System Full", {1102} "Logon Fails", {1103} "Invalid Pass", {1104} "Process Running", {1105} "Invalid Name", {1106} "Workfile Fail", {1107} "No User Service", {1108} "No Batch File", {1109} "No Funds", {1110} "User not found", {1111} "FE closing", {1112} "Node closing", {1113} "TCP closing", {1114} "Connected", {1115} "???" %constinteger top second = 1659 %CONSTSTRING(39)%ARRAY SECOND(1620:top second) = %C {1620} "Invalid NKb", {1621} "Invalid TSN", {1622} "Invalid Chapter", {1623} "Non unique file or group found", {1624} "Invalid Type", {1625} "Invalid Maxrec", {1626} "Invalid ADR", {1627} "Invalid Fsys", {1628} "Invalid Stream", {1629} "Invalid LEN", {1630} "Invalid OFFSET", {1631} "Invalid CURSOR", {1632} "Invalid SEG", {1633} "Old password not given", {1634} "New password not given", {1635} "Invalid ACT", {1636} "Invalid START REC", {1637} "Invalid DATE", {1638} "Invalid UNITS", {1639} "Cannot send TELL messages to executives", {1640} "Invalid SET", {1641} "Operation not valid on a file index", {1642} "String too long", {1643} "MAXFILE must be > 64Kb", {1644} "Too many groups in #ARCH", {1645} "Invalid APF", {1646} "Invalid INCR", {1647} "Inconsistent or invalid params to DEAL", {1648} "Cannot rename a file to be a group", {1649} "Cannot rename a group to be a file", {1650} "Errors encountered by DDESTROY", {1651} "1651", {1652} "P_DEST = -1", {1653} "File already connected at another seg", {1654} "File already connected in a smaller gap", {1655} "File already connected, cannot NEWCOPY", {1656} "File already connected in another mode", {1657} "Invalid MARK", {1658} "Mismatching fragment", {1659} "File not on offer" %RESULT = "Successful" %IF N = 0 N = N + 1000 %RESULT = FIRST(N) %IF 1001 <= N <= 1115 %RESULT = SECOND(N) %IF 1620 <= N <= top second %RESULT = "???" %END; ! MESSAGE %finish ----------------------------------------------------------------------- %EXTERNALSTRINGFN DERRS(%INTEGER N) %string(255)num, text num = itos(n) text = message(n) %RESULT = " " . num . " " . text %END; ! DERRS -----------------------------------------------------------------------

DDUMP

%externalroutine DDUMP(%integer START, FINISH, CH, LIM) Prints a hexadecimal dump from virtual address START to virtual address FINISH to DIRLOG. The dump has either 16 if LIM = 16, or 32 bytes per line.

DFLAG

%IF TARGET = 2900 %START %externalintegerfn DFLAG(%integer FLAG, %stringname TXT) This procedure returns the text string associated with FLAG as described in the list above. The text returned is of the form: sp flag sp error-message

DERROR

%externalintegerfn DERROR(%stringname xTXT) This procedure returns a string which describes the most recent call on a Director procedure. The text has the form: sp procedure-name sp flag sp error-message It is envisaged that sections of code could be written in the form: FLAG = DCONNECT(... -> FAIL %unless FLAG = 0 %or FLAG = 34 ... FAIL: J = DERROR(TXT) PRINTSTRING(TXT) NEWLINE %end

GETUSNAMES

%externalintegerfn GET USNAMES(%integername N, %integer ADR, FSYS) This procedure supplies a sorted list of users who have user records on disc pack FSYS. The names are either listed (to DIRLOG) if ADR = -1 or written as a series of 6 byte strings to ADR onwards. N is set to the number of names returned. The array at ADR must be able to hold 1365 names, i.e. 9555 bytes.

DPROCEDURE

%externalintegerfn DPROCEDURE(%integer ACT, ADR) This procedure provides a general interface to Director to allow new facilities to be tested easily ACT is an activity number and ADR the address of a record ACT = 1 Returns Directors 'proclist'. In this case, ADR is the address of a record of format: %integername N, %integer A the proclist entries are returned to address A onwards and the number of entries is returned in N. Currently each proclist entry is 56 bytes long, but is liable to change. ACT = 2 Allows the caller to 'fork' another invocation of his own process. ADR is the address of a record of format: %integer INVOC, %string(11)PARAM The new invocation number is returned in INVOC and PARAM is placed in the UINF record of the new invocation as UINF_SPOOLRFILE. The caller should disable the IO streams before calling this procedure. Director disconnects the streams and reconnects them subsequently to the new invocation. ACT = 3 Sends a message to another invocation of your own process. ADR is the address of a record of format: %record(PARMF) P, %integer INVOC, MSGTYPE, OUTNO MSGTYPE = 3 async, OUTNO = 5(pon+poff), 6(pon) ACT = 4 Allows the caller to find out howfull a disc is. ADR is the address of a record of format: %integer FSYS, PERCENTFULL

OPER

%IF TARGET = 2900 %START %externalroutine OPER %alias "S#OPER" (%integer CONSOLE, %string(255)S) This procedure causes the text string S to be displayed on logical Oper console number CONSOLE (taking as many lines of scrolled Oper output as necessary).

DOPER

%externalroutine DOPER(%integer CONSOLE, %string(255)S) This writes the string S to Dirlog and to the OPER. CONSOLE is not used and should be set to zero.

DOPERPROMPT

%IF TARGET = 2900 %START %externalroutine DOPER PROMPT(%integer CNSL, %string(255)S) This procedure is used when an interactive process is started from an OPER

DOPERR

%externalroutine DOPERR(%string(23)TXT, %integer FN, RES) This procedure is used to write a short error message to the OPER console. FN is used to select a value from the list of names below and the text written is of the form: TXT sp NAME(FN) sp RES %CONSTINTEGER TOP = 15 %CONSTSTRING(4)%ARRAY NAME(1:TOP) = %C {..1}"CRTE", {..2}"CONN", {..3}"PERM", {..4}"DSFI", {..5}"DSCN", {..6}"STOP", {..7}"GTDA", {..8}"DFST", {..9}"RNAM", {.10}"SPOL", {.11}"XFER", {.12}"DNDA", {.13}"CNDA", {.14}"GFND", {.15}"DSTR"

Test basefile name

We have stated that "basefile name" specifies the name of the object file that is to be entered as the "subsystem", and that the version residing on a fixed site on the System disc is used if that name is null. If the "test basefile name", is non-null, it overrides the setting of "basefile name", even if the latter is null, for the next invocation. Thus if the subsystem under test fails disastrously the next log-on will yield the default or specified subsystem, which can then be used to study the failure and remake the test subsystem.

Director monitor filename

The Director monitor filename, if non-null, specifies a file belonging to the process owner, into which Director places the following: * Process failure messages not diagnosed by the subsystem. * Extra monitoring of Director procedure entries (see 'Director monitor level'), or extra monitoring of contingencies. * Text specified, by the process, to Director procedure DPRINTSTRING * The contents of areas of store, printed by DDUMP. This monitoring file, which must not exceed 512 Kbytes in size, is used in a circular manner.

Contingency monitor level

For the case of being unable to satisfy references to Director procedures, and for other programming errors not otherwise diagnosable, the field "contingency monitor level" will be useful. This field is zeroed at IPL, it can be set by a call of Director procedure DSFI (TYPE=17). Bits in this word have meanings as follows: Bit value Meaning and use 1 Print a routine trace-back on the occurrence of a contingency, with contents of stack frames. 2 Print text describing the contingency in words and codes ("CLASS/SUBCLASS"). 4 Print a hexadecimal dump of the stack segment. 8 2**3 Print a hexadecimal dump of Director GLA. 16 Print the contents of the virtual memory (relating segment number to filename and to disc address). 32 Print a de-assembly from the code segment of the area around the value of the PC register at the time of the contingency. 64 Print out the machine registers. A useful value for this field is 99. In order to diagnose the situation in which a subsystem has been unable to satisfy its references to Director procedures, it is useful to have a recognisable pattern in the places where the System Call descriptors are intended to be placed. With the contingency monitor level 64, that pattern will be found in the printing of the machine registers DR0 and DR1 if the filling of the System Call descriptor was unsuccessful. The contingency monitor level field can also be set by typing, at the Oper console, a command of the form: n/SIGMON m 0 where n is the process number (as displayed on the Oper screen) m is an integer specifying the required value of the field, as above.

Director monitor level

If Director monitor level is set non-zero, see SETDIRMON, a message is written to Dirlog after each Director procedure called, giving the values of the parameters supplied and the result returned.

Director version

A System disc has four fixed sites (256 Kbytes each), for up to four versions of Director. Site zero is used by default. Setting the Director version field causes the next invocation of the process to use the specified Director version (0, 1, 2 or 3) rather than the default version (0). This facility should only be used after consultation with the System Manager, as the contents of a given Director site cannot always be guaranteed to be valid.

DPRINTSTRING

%IF TARGET = 2900 %START %externalroutine DPRINTSTRING(%stringname S) Allows a privileged process to write a string to DIRLOG.

DBITMAP2

%externalintegerfn DBITMAP2(%integername LO, HI, %integer FSYS)

DDELUSER

%IF TARGET = 2900 %START %externalintegerfn DDELUSER(%string(19)FILE INDEX, %integer FSYS)

DEMPTYI

%IF TARGET = 2900 %START %externalintegerfn DEMPTYI(%integer FSYS, INDNO) This privileged procedure writes 'EMPTY' at the start of the 1K block INDNO on FSYS.

DGETINDEXES

%IF TARGET = 2900 %START %externalintegerfn DGETINDEXES(%integername N, %integer ADR, FSYS) This procedure supplies a sorted list of index names accredited on FSYS. The names are either listed (to DIRLOG) if ADR = -1 or written as a series of 19 byte strings to ADR onwards. N is set to the number of names returned. The array at ADR must be able to hold as many index names as there are on the disc. The current max is 1365, i.e. 20 * 1365 (=27300) bytes.

DGETINDEXES2

%IF TARGET = 2900 %START %externalintegerfn DGETINDEXES2(%integername N, %integer ADR, FSYS) This procedure supplies a list of the indexes accreditted on FSYS, sorted into INDEX NO order. A series of records of format (string(19)NAME, byteinteger KB, SPARE, halfinteger INDNO) is returned to ADR onwards, a maximum of 24 * 1365 bytes. N is set to the number of records supplied.

DINDEX2

%IF TARGET = 2900 %START %externalintegerfn DINDEX2(%string(19)INDEX, %integer FSYS, ADR) This procedure returns the index INDEX on fsys FSYS into ADR onwards, with sensitive fields blanked off.

DNEWUSER

%IF TARGET = 2900 %START %externalintegerfn DNEWUSER(%string(19)FILE INDEX, %integer FSYS, NKB) This privileged procedure creates either a user record+main file index (if FILE INDEX is simply a username) or a file index (if FILE INDEX is supplied as username{fileindexname} ). The index is created on disc pack FSYS with NKB Kbytes. NKB must either be 2 or a multiple of 4 between 4 and 32. (NKB is taken as: NPD << 24 ! NFD << 8 ! NKB )

DPROCS

%if target = 2900 %start %externalintegerfn DPROCS(%integername MAXPROCS, %integer ADR) This procedure copies Supervisor's list of current processes to ADR onwards. Each entry is 32 bytes long and the number of entries is returned in MAXPROCS.

DRENAMEINDEX

%IF TARGET = 2900 %START %externalintegerfn DRENAME INDEX(%string(19)OLDINDEX, NEWINDEX, %integer FSYS) This privileged procedure renames index OLDINDEX to NEWINDEX. Both OLDINDEX and NEWINDEX must either be of the form: username or username{indexname} ie not one of each. Note that only the specified index is renamed. If the user has other fileindexes, these are not renamed.

DREPLACEINDEX

%if target = 2900 %start %externalintegerfn DREPLACE INDEX(%integer FSYS, INDNO, ADR) Allows 1024 bytes in the index area of a disc to be overwritten by a privileged process.

DSYSAD

%IF TARGET = 2900 %START %externalintegerfn DSYSAD(%integer TYPE, ADR, FSYS) This privileged procedure returns the bitmap (TYPE=0) the name-number table (TYPE=1) the DIRCOM record (TYPE=5) or the bad pages bitmap (TYPE=6) in ADR onwards for FSYS.

DUSERINDEXES

%IF TARGET = 2900 %START %externalintegerfn DUSERINDEXES(%string(6)USER, %integer FSYS, ADR, %integername N) Searches FSYS (or all fsys's if FSYS is -1) for indexes belonging to USER. Returns N records to ADR onwards of the form: %string(11)index, %integer fsys

GETUSNAMES2

%externalintegerfn GET USNAMES2(%record(NNF)%arrayname UNN, %integername N, %integer FSYS) This procedure supplies the list of users who have user records on disc-pack FSYS, sorted into INDEX NO order. A series of records of format (string(6)NAME, byteinteger KB, integer INDNO) is returned in the array UNN, which should be declared (0:1364). N is set to the number of names supplied.