IMD 1.16: 30/08/2008 23:28:44 84-94121-00 b030 f12100 cartos macros I product disk   }fA __M@IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICARTOSMA282100513201840830907140600 830907140600AF12100 VOL84-94121-00 CARTOS MACROS I PRODUCT DISKETTE (B030)   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII_M@qGyy GGG`HX@ b G`^Y e GQ @@p@987 85P@ G:پN 8)0. * C'xC# b# }B* @0DAJL w+™ЀЀΖQA1"   i  ž} š} @EEFF)DEۄF8 џ} ԟ} ̟} * `jUBBI,v BI, # @ G7H@pܾrCHC C GTq` Lg gEXC P+s=胾P+c fQN p $Rxnj  ޔniZ ތ⊞ } }HGž Ÿ@ALS)"$ C k20j.h( +$`%ꂜ\1 !M' y %'+os慾)sY ed|{ @8 o O m J K i gN )V% t%sLn`"E F. F„ D>) =`;nrgy w"G,{Kq1 A&}E*`(t@% ;c  765y342(.OS:: SYSG @ @G6BDāCGDĀ# BC @E OB TITL BEGIN PARAMETER BLOCK - BGIN.MAC - 84-94149-60 (A300) * *************************************************************************** * * BEGIN PARAMETER BLOCK * * +----------+ * 0 | BG:TID | Task ID * +----------+ * 1 | BG:PRI | Priority descriptor * +----------+ * 2 | 0 | Reserved *  +----------+ * 3 | BG:CKW | Table check word * +----------+ * * BG:TID - Task ID. * * BG:PRI - Priority descriptor. * * BG:CKW - Check word. * *************************************************************************** BG:TID EQU 0 TCB ID BG:PRI EQU 1 PRIORITY DESCRIPTOR BG:CKW EQU 3 CHECK WORD BG:SIZ EQU 4 SIZE OF BEGIN PARAMETER BLOCK * BGIN: MACRO MACLAB #(-1) TSTART: BG:SIZ CHECKP: #(?),2,2 BG:TID WORD: #(1) BG:PRI WORD: #(2) BG:CKW WORD: CKW:BG TEND: ENDM M M IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII TITL WALL/TICK CLOCK PARAMETER BLOCK - CLOCK.MAC - 84-94140-61 (A300) ************************************************************************ * * +--------+ * 0 | CL:ID | The identifier for this clock * +--------+ * 1 | CL:FLG | Flag word *   +--------+ * 2 | CL:SID | The identifier of the semaphore associated with the clock * +--------+ * 3 | CL:HIGH| The most significant 16 bits of the request * +--------+ * 4 | CL:LOW | The least significant 16 bits of the request. * +--------+ * 5 | | Reserved * +--------+ * 6 | | Reserved * +--------+ * 7 | CL:CKW | The table checkword. *  +--------+ * * CL:ID - If a zero or negative number, the system will generate * a unique identifer and return it here to the user. If positive * the identifier must be unique amongst types of clocks (wall or * tick). * CL:FLG - No flags are currently defined. * * CL:SID - The identifier of the semaphore to be signalled when * the clock expires. * * CL:HIGH- The most significant 16 bits of the request. * * CK:LOW - The least significant 16 bits of the request. Depending * on the service, these 2 words are treated as ticks, or * quarter seconds. * * CL:CKW - The table checkword. used to identify the table and to * ensure system integrity. * ************************************************************************ * WALL/TICK CLOCK, CALENDAR PARAMETER BLOCK * CL:ID EQU 0 CLOCK IDENTIFIER CL:FLG EQU 1 FLAG WORD CL:SID EQU 2 SEMAPHORE ID TO SIGNAL CL:HIGH EQU 3 HIGH ORDER TIME CL:LOW EQU 4 LOW ORDER TIME CL:CKW EQU 7 CHECK WORD CL:SIZE EQU 8 BLOCK SIZE * CLOCK: MACRO MACLAB MACLAB #(-1) TSTART: CL:SIZE CHECKP: #(?),3,5 CL:ID WORD: #(1),0 CL:FLG WORD: #(5),0 CL:SID WORD: #(2) IFT #(?)<4 CL:HIGH DOUBLE: #(3),0 ENDC IFF #(?)<4 CL:HIGH WORD: #(3) CL:LOW WORD: #(4) ENDC CL:CKW WORD: CKW:CL TEND: ENDM l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l TITL DEVICE INFORMATION BLOCK - DIB.MAC - 84-94140-62 (B000) * * COMMON PORTIONS OF THE DIB. THESE WORDS * ARE ALSO COMMON WITH THE FILE INFORMATION * BLOCK (FIB) AND THE LINK INFORMATION BLOCK (LIB). * DI:CLAS EQU 0 DEVICE CLASS DI:FLG EQU 1 ATTRIBUTE FLAGS DI:TYPE EQU 2 DEVICE TYPE DI:CKW EQU :F TABLE CHECKWORD DI:SIZ EQU :10 TABLE SIZE * * THE DEVICE NAME IS COMMON TO ALL DIBS ONLY. * DI:NAME EQU 3 32 BIT ASCII NAME * * WORDS 5-:E ARE DEVICE SPECIFIC IN THEIR DEFINITION * * DEVICE DEPENDENT DEFINITION FOR DISK DEVICES * DI:VOL EQU 5 ADDRESS OF THE VOLUME NAME STRING DI:PASS EQU 6 ADDRESS OF THE VOLUME PASSWORD STRING DI:SID EQU 7 SPECIAL MANAGER TYPE ID DIV:NFM EQU :FF NO FORMAT MOUNT REQUEST DI:BPS EQU 8 NUMBER OF BYTES PER SECTOR DI:SPT EQU 9 NUMBER OF SECTORS PER TRACK DI:TPC EQU :A NUMBER OF TRACKS PER CYLINDER (LOWER BYTE) DI:HOS EQU :A HEAD OFFSET (UPPER BYTE) DI:CPD EQU :B NUMBER OF CYLINDERS PER DISK DI:SPA EQU :D NUMBER OF SECTORS PER AU DI:DADR EQU :E DEVICE ADDRESS OF DISK * * DEVICE SPECIFIC DEFINITIONS FOR INTERACTIVE TERMINALS * * * THESE WORDS ARE COMMON WITH A FILE INFORMATION BLOCK * FOR TV/LINE PRINTERS * DI:FRMS EQU 13 FORM SIZE DI:FRMT EQU 14 FORM TYPE * DIB:DK MACRO * * THIS MACRO BUILDS A DISK DIB * * CALLING SEQUENCE: * * LABEL DIB:DK P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 * * P1 = DEVICE CLASS (DI:CLAS) * P2 = FLAG WORD (DI:FLG) * P3 = DEVICE TYPE (DI:TYPE) * P4 = PHYSICAL DEVICE NAME 32 BITS (DI:NA ME) * P5 = ADDRESS OF VOLUME NAME (DI:VOL) * P6 = ADDRESS OF PASSWORD (DI:PASS) * P7 = SPECIAL FILE MANAGER ID (DI:SID) * P8 = BYTES PER SECTOR (DI:BPS) * P9 = SECTORS PER TRACK (DI:SPT) * P10 = TRACKS PER CYLINDER (DI:TPC) * P11 = CYLINDERS PER DISK (DI:CPD) * P12 = SECTORS PER AU (DI:SPA) * * ALL PARAMETERS DEFAULT TO ZERO * EXCEPT FOR P7 WHICH DEFAULTS TO :C1 (SFM/OS4 FORMAT) * MACLAB #(-1) TSTART: DI:SIZ CHECKP: #(?),0,12 DI:CLAS WORD: #(1),0 DI:FLG WORD: #(2),0 DI:TYPE WORD: #(3),0 DI:NAME DOUBLE: #(4),0 DI:VOL WORD: #(5),0 DI:PASS WORD: #(6),0 DI:SID WORD: #(7),:C1 DI:BPS WORD: #(8),0 DI:SPT WORD: #(9),0 DI:TPC WORD: #(10),0 DI:CPD WORD: #(11),0 DI:SPA WORD: #(12),0 DI:CKW WORD: CKW:DI TEND: ENDM * * DIB:TV MACRO * * THIS MACRO BUILDS A CRT DIB * * CALLING SEQUENCE: * * LABEL DIB:TV P1,P2,P3,P4,P5,P6 * * P1 = DEVICE CLASS (DI:CLAS) * P2 = FLAG WORD (DI:FLG) * P3 = DEVICE TYPE (DI:TYPE) * P4 = PHYSICAL DEVICE NAME 32 BITS (DI:NAME) * P5 = SPECIAL MANAGER ID (DEFUALT=0,SPOOLER) *  P6 = FORM SIZE (LINES/PAGE CHARS/LINE DI:FRMS) * P7 = FORM TYPE (DI:FRMT) * * ALL PARAMETERS DEFAULT TO ZERO * MACLAB #(-1) TSTART: DI:SIZ CHECKP: #(?),0,6 DI:CLAS WORD: #(1),0 DI:FLG WORD: #(2),0 DI:TYPE WORD: #(3),0 DI:NAME DOUBLE: #(4),0 DI:SID WORD: #(5),0 DI:FRMS WORD: #(6),0 DI:FRMT WORD: #(7),0 DI:CKW WORD: CKW:DI TEND: ENDM * * DIB:SY MACRO * * THIS MACRO BUILDS A SYNCHRONOUS COMMUNICATIONS DIB * * CALLING SEQUENCE: * * LABEL DIB:SY P1,P2,P3,P4 * * P1 = DEVICE CLASS (DI:CLAS) * P2 = FLAG WORD (DI:FLG) * P3 = DEVICE TYPE (DI:TYPE) * P4 = PHYSICAL DEVICE NAME 32 BITS (DI:NAME) * * ALL PARAMETERS DEFAULT TO ZERO * MACLAB #(-1) TSTART: DI:SIZ CHECKP: #(?),0,4 DI:CLAS WORD: #(1),0 DI:FLG WORD: #(2),0 DI:TYPE WORD: #(3),0 DI:NAME BYTE: '##(4)',0 DI:CKW WORD: CKW:DI TEND: ENDM  TITL ENVIRONMENT DEFINITION BLOCK - EDB.MAC - 84-94140-63 (B020) * *************************************************************************** * * +----------+ * 0 | ED:ID | Environment identifier * +----------+ *  1 | ED:ECB | Environment Control Block address * +----------+ * 2 | ED:FLG | Flag Word *  +----------+ * 3 | ED:ERB | Environment Resource Block address * +----------+ * 4  | ED:LM | Logical map of Environment * +----------+ * 5 | ED:TDB | Task Definition Block list head * +----------+ * 6 | ED:MDB | Mailbox Definition Block list head * +----------+ *  7 | ED:SDB | Semaphore Definition Block list head * +----------+ * 8 | ED:SMD | Shared Memory Definition list head * +----------+ * 9 | ED:QDB | Queue Definition Block list head * +----------+ * A | 0 | Reserved * +----------+ * B | 0 | Reserved * +----------+ * C | ED:XVT | Exception Vector Table * +----------+ * D | ED:ITDB | Initial  Task for this Environment * +----------+ * E | ED:IPRI | Priority of initial Task * +----------+ * F | ED:CKW | EDB Checkword * +----------+ * * ED:ID - This is the Environment identifier. ID's must be * unique among Environment peers. If zero or negative, * the system will supply an ID. After Environment load, * this word is updated to reflect the actual ID of the Environment. * * ED:ECB - The Environment Control Block address returned after * loading. This is useful only to Environments * which have system service privilege. * * ED:FLG - Environment flag word. This word is used to define * additional attributes of the Environment. * * EDF:RTE - (Bit 0) Activities are to run in real-time. * The Environment must be able to obtain real-time privilege. * * ED:LM - The logical map the Environment was loaded into. * * ED:TDB - List head of all Task Definition Blocks (TDB) which *  belong to the Environment. * * ED:SDB - List head of all Semaphore Definition Blocks (SDB) which * belong to the Environment. * * ED:MDB - List head of all Mailbox Definition Blocks (MDB) which * belong to the Environment. * * ED:SMD - List head of all Shared Memory Definition blocks (SMD) for * the Environment. * * ED:QDB - List head of all Queue Definition Blocks for the * Environment. * * ED:XVT - Pointer to the Exception Vector Table (XVT). If zero, * all exceptions generated by the Environment are passed to the * parent Environment. * * ED:ITDB - Initial Task. This word contains a pointer to the Task * Definition Block for the initial Task for the Environment. * Zero if there is no initial Task or if * the Environment contains data only. * * ED:IPRI - Initial Task priority. This word must be less than or * equal to ER:MPRI and greater than zero if ED:ITDB is specified. * A negative value indicates a priority relative to the maximum for * the Environment. * * ED:CKW - Table checkword. * *************************************************************************** ED:ID EQU 0 ENVIRONMENT ID ED:ECB EQU 1 ECB OF LOADED ENVIRONMENT ED:FLG EQU 2 FLAG WORD ED:ERB EQU 3 ADDRESS OF ERB ED:LM EQU 4 LM NUMBER OF LOADED ENVIRONMENT ED:TDB EQU 5 TDB LIST HEAD ED:MDB EQU 6 MDB LIST HEAD ED:SDB EQU 7 SDB LIST HEAD ED:SMD EQU 8 SMD LIST HEAD ED:QDB EQU 9 QDB LIST HEAD ED:XVT EQU :C ADDRESS OF XVT ED:ITDB EQU :D ADDRESS OF INITIAL TDB ED:IPRI EQU :E PRIORITY OF INITIAL TASK ED:CKW EQU :F CHECKWORD ED:SIZ EQU :10 SIZE OF THE EDB * * EDB flag equates. * EDF:RTE EQU 1%0 ACTIVITIES ARE TO RUN REAL-TIME * * EDB macro invocation is as follows: * * label EDB: ERB,ID,FLG,ITDB,IPRI[,XVT] * EDB: MACRO MACLAB #(-1) TSTART: ED:SIZ CHECKP: #(?),1,6 ED:ID WORD: #(2),0 ED:FLG WORD: #(3),0 ED:ERB WORD: #(1) ED:TDB HEAD: R:TDBL ED:MDB HEAD: MDB: ED:SDB HEAD: SDB: ED:SMD HEAD: SMD: ED:QDB HEAD: QDB: ED:XVT WORD: #(6),XVT: ED:ITDB WORD: #(4),0 ED:IPRI WORD: #(5),0 ED:CKW WORD: CKW:ED TEND: ENDM M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M  9 | EL:ST | Status * +----------+ * A | EL:EDB | EDB address * +----------+ *   TITL ENVIRONMENT LOAD PARAMETER LIST - ELOAD.MAC - 84-94140-64 (A300) *************************************************************************** * * ENVIRONMENT LOAD PARAMETER LIST * * +----------+ * 0 | EL:LUN | Logical Unit *  +----------+ * 1 | EL:ERB | Environment Resource Block address * +----------+ * 2  | EL:FLG | Flag word * +----------+ * 3 | EL:EID | Subordinate Environment ID * +----------+ * 4 | EL:UID | 32-bit subordinate user ID * +- - - - - + * 5 | | *  +----------+ * 6 | EL:OFF | Load offset for relocatable Environments * +----------+ * 7  | EL:LOW | Low memory * +----------+ * 8 | EL:HIGH | High memory * +----------+ *  9 | EL:ST | Status * +----------+ * A | EL:EDB | EDB address * +----------+ *  B | 0 | Reserved * +----------+ * C | 0 | Reserved * +----------+ * D | 0 | Reserved * +----------+ * E | 0 | Reserved * +----------+ * F | EL:CKW | Check word * +----------+ * * EL:LUN - logical unit connected to the binary file * containing the Environment to be loaded. * This LUN must already be connected; R:LDENV does open, read, close. * * EL:ERB - Address of an Environment Resource Block (ERB) which * contains the limitations to be placed on the subordinate. * * EL:FLG - Flag word. * * Bits 15, 13-1 - Reserved. * * Bit 14 (ELF:ER) - If set, indicates that any error is to * be set into the ELOAD block before return, but the return * status (function value; A-reg.) is to be GOOD. * *  Bit 0 (ELF:MAP) - If set, indicates the subordinate is to be loaded * into its own logical address space. If clear, the subordinate * will share its parent's logical address space. * * EL:EID - Subordinate Environment ID. To override the subordinate's * ID, an ID between 1 and :7FFF is supplied in this word. * If this word is zero, then the system will supply an ID that * overrides the subordinate's ID and returns it in this word. * If -1, then the subordinate's ID is used and returned in * this word. * * EL:UID - 32 bit Environment user ID. This identifier * is used by the CARTOS File Manager as the ID for protection use. * If non-zero, these two words define the subordinates user ID. * This function requires privilege (ERF:AUID). * If zero, the subordinate inherits the user ID of the parent. * * EL:OFF - Specifies the relocation offset of any relocatable * data in the Environment. * * EL:LOW - The low load address for any data being loaded. The area * between this address and the actual low loaded address will be * allocated for EMP area unless the EMP is in a local vector or is * allocated from the parent's EMP space. The low address allocated * to the Environment will be returned in this word. * * EL:HIGH - The high load address for any data being loaded. The area * between the actual  high loaded address and this address will be * allocated for EMP area unless the EMP is in a local vector or is * allocated from the parent's EMP space. The high address allocated * to the Environment will be returned in this word. If the *  Environment attemps to load into any address outside the EL:LOW * to EL:HIGH range an exception will occur. Any attempt to use * logical pages outside the returned EL:LOW to EL:HIGH range * will result in an exception in the referencing activity. * * A zero may be specified for EL:HIGH. This is valid for Environments * being loaded into their own address space to indicate that only the * actual area required to load plus EMP space requested will be * allocated to the Environment * * EL:ST - Completion status. This status is a standard CARTOS * error. Zero indicates a normal completion and *  that the parameter block has been updated. * Errors can be in in the Real-Time, I/O, memory management, * or Environment class. If the class of error that occurs * is not intercepted by the exception handler (set to abnormal return * in the XVT:), * then the R:LDENV service will return the error in the status word. * * EL:EDB - The Environment Definition Block address of the subordinate * Environment is returned here. This is actually the execution * address on the binary file. * If no execution address was specified, or the address does not * point to an EDB, an error is generated. * *  EL:CKW - Table checkword. * *************************************************************************** EL:LUN EQU 0 LOGICAL UNIT EL:ERB EQU 1 ADDRESS OF ERB EL:FLG EQU 2 FLAG WORD EL:EID EQU 3 ENVIRONMENT ID EL:UID EQU 4 USER ID (32 BITS) EL:OFF EQU 6 RELOCATION OFFSET EL:LOW EQU 7 LOW LOGICAL ADDRESS EL:HIGH EQU 8 HIGH LOGICAL ADDRESS EL:ST EQU 9 STATUS EL:EDB EQU :A RETURNED EDB ADDRESS EL:CKW EQU :F EL:SIZ EQU :10 SIZE OF ELOAD PARAMETER LIST * * FLAG WORD (EL:FLG) * ELF:ER EQU :4000 DO NOT CAUSE EXCEPTION ON ERROR ELF:MAP EQU :0001 LOAD INTO UNIQUE LOGICAL ADDR SPACE ** NOTE ** THIS FLAG HAS REVERSED MEANING IN ECB * ELOAD: MACRO MACLAB #(-1) TSTART: EL:SIZ CHECKP: #(?),2,8 EL:LUN WORD: #(1) EL:ERB WORD: #(2) EL:FLG WORD: #(3),0 EL:EID WORD: #(4),0 EL:UID DOUBLE: #(5),0 EL:OFF WORD: #(6),0 EL:LOW WORD: #(7),0 EL:HIGH WORD: #(8),0 EL:CKW WORD: CKW:EL TEND: ENDM  EMP address * +----------+ * 7 | ER:MLM | Maximum logical maps * +----------+ * 8 | ER:MPM | Maximum physical memory * +----------+ * 9 | ER:MSFP | Maximum small freepool blocks * +----------+ * A | ER:MMFP | Maximum medium freepool blocks * +----------+ * B  TITL ENVIRONMENT RESOURCE BLOCK - ERB.MAC - 84-94140-65 (B020) ************************************************************************** * * ENVIRONMENT RESOURCE BLOCK * * +----------+ * 0 | ER:FLG | Privilege Flags *  +----------+ * 1 | ER:MPRI | Maximum priority * +----------+ * 2 | ER:ECB | User ECB address * +----------+ * 3 | 0 | Reserved. * +----------+ * 4 | 0 |  Reserved. * +----------+ * 5 | ER:EMPS | EMP size * +----------+ * 6 | ER:EMPA | EMP address * +----------+ * 7 | ER:MLM | Maximum logical maps * +----------+ * 8 | ER:MPM | Maximum physical memory * +----------+ * 9 | ER:MSFP | Maximum small freepool blocks * +----------+ * A | ER:MMFP | Maximum medium freepool blocks * +----------+ * B  | ER:MDSB | Maximum door stack blocks * +----------+ * C | 0 | Reserved * +----------+ * D | 0 | Reserved * +----------+ * E | 0 | Reserved * +----------+ * F | ER:CKW | Check word * +----------+ * * ER:FLG - This word contains 16 Environment privilege level flags. * When an Environment is created or loaded, the privilege level specified * in the EDB can not exceed that of the parent Environment. * That is, the privilege level flags assigned to the new Environment * are the logical "and" of ER:FLG for the new Environment with the * privilege flags of the parent Environment. * * Bit 0 (ERF:RT) -  indicates that the Environment's Activities * may run in real-time mode. If clear, they may run only in * time-sliced mode. If this bit is set, the Environment's * activities will run real-time if the EDF:RTE flag in the * EDB flag word is set. * * Bit 1 (ERF:SSER) - Activities can use system services (S:xxxxxx). * * Bit 2 (ERF:NFP) - inhibits protection checks for file access (i.e. * access to any file is allowed). * * Bit 3 (ERF:NUP) - all Activities execute in unprotected mode (status * bit 11 is zero). This allows execution of privileged instructions. * * Bit 4 (ERF:MELK) - all physical memory allocated to the Environment * is locked in until the Environment is destroyed. * * Bit 5 (ERF:MALK) - a physical map is permanently allocated to the * Environment until it is destroyed. * * Bit 8 (ERF:SST) - allows the system time of day to be * changed with R:SSTOD. * * Bit 9 - (ERF:AUID) - allows the Environment to assign * user IDs to subordinates. If clear, all subordinate user IDs * are the same as the parent's user ID. * * Bit 10 - (ERF:PRIO) - allows activity priority to exceed the * Environment maximum. * * Other bits are reserved. * * ER:MPRI - Maximum priority of any Activity belonging to the * Environment. This priority must be less than or * equal to the maximum priority of the parent Environment. * If zero, then the maximum priority is set equal to that of the * parent Environment. * * ER:ECB - The Environment Control Block address of the * calling Environment. This is generally useful only to * Environments which have system service privilege. * * ER:EMPS - The minimum number of words of Environment Memory Pool * which are required. Zero indicates no EMP. * A successful load guarentees that a single block of this size * can be allocated from the EMP. * * ER:EMPA - If non-zero, indicates the EMP is to reside in a local  * vector and ER:EMPS must be equal to its size. * The address is relative to the relocation offset specified * in the ELOAD block. * If zero, the EMP is allocated from the parent or in the * remaining logical address space. * * ER:MLM - Maximum number of logical maps which the * Environment and all of its subordinates can allocate. * The logical map needed to load the environment is not * included in this number. * A -1 in a parent ERB indicates that the loaded Environment * map request count will not be checked. A -1 in a loading * subordinate ERB indicates that maps should be allocated * upon demand. In this case the subordinate will be able * to obtain additional maps until the parent has no more. * * ER:MPM - Maximum number of physical pages which can be * allocated to the Environment and all of its * subordinates. * * ER:MSFP - The maximum number of small system freepool * blocks which can be used by the Environment. * Minus 1 indicates no local limit, allocation units are subtracted from * the parent's quota * (or grandparent if parent is -1, etc). * Note that for any accountable resource if an environment * has no local limit, none of its subordiantes may have a * local limit. * * ER:MMFP - The maximum number of medium system freepool * blocks which can be used by the Environment. * Minus 1 indicates no local limit, allocation units are subtracted from * the parent's quota * (or grandparent if parent is -1, etc). * * ER:MDSB - The maximum number of door stack blocks * whcih can be used by the Environment. One door stack block * is used each time an activity calls a CARTOS system service. * The block is deallocated when the service is complete. * If an Activity attempts to make a system service call which would * cause the total number of Activities making system service * calls at the same time to exceed ER:MDSB, then that * Activity is suspended until * another Activity finishes its system call. * ER:MDSB may not be zero if the environment has any executable code. * Minus 1 indicates no local limit, units are * subtracted from the parent's quota. * * ER:CKW - Table checkword. * ************************************************************************** * * HISTORY: * A110 17/Feb/82 JCS * ER:TQTA deleted. * B000 18/Nov/82 Dan * ERF:PWFL added. * B020 14/Jun/83 JCS * ERF:PRIO added, ERF:PWFL deleted. * ER:FLG EQU 0 FLAG WORD ER:MPRI EQU 1 MAXIMUM PRIORITY ER:ECB EQU 2 ECB ADDRESS ER:EMPS EQU 5 EMP SIZE ER:EMPA EQU 6 EMP ADDRES ER:MLM EQU 7 MAXIMUM LOGICAL MAPS ER:MSFP EQU 9 MAXIMUM SMALL FREEPOOL BLOCKS ER:MMFP EQU :A MAXIMUM MEDIUM FREEPOOL BLOCKS ER:MDSB EQU :B MAXIMUM DOOR-STACK BLOCKS ER:CKW EQU :F CHECK WORD ER:SIZ EQU :10 SIZE OF ERB BLOCK * * PRIVILEGE FLAGS (ER:FLG) * ERF:RT EQU :0001 RUN IN REAL TIME ERF:SSER EQU :0002 CAN USE SYSTEM SERVICES ERF:NFP EQU :0004 INHIBIT FILE PROTECTION ERF:NUP EQU :0008 UNPROTECTED MODE ERF:MELK EQU :0010 PHYSICAL MEMORY LOCKED IN ERF:MALK EQU :0020 PHYSICAL MAP LOCKED IN ERF:SST EQU :0100 CAN CHANGE SYSTEM CLOCK ERF:AUID EQU :0200 ALLOW ASSIGNMENT OF USER IDS ERF:PRIO EQU :0400 ALLOW ACTIVITY PRIORITY TO EXCEED  ENV MAX * * SPECIAL EQUATES FOR RETURNING ACTIVITY STATUS * ER:CALL EQU 0 -1 = ACTIVITY STATUS CALL TO R:GERI ER:EID EQU 1 SUBORDINATE ECB ID ER:POS EQU 2 POSITION NUMBER IN ECB:EAPL CHAIN ER:ACB EQU 3 ACB ADDRESS (-1 = POSITION INVALID) ER:PRIO EQU 4 ACTIVITY PRIORITY ER:TYPE EQU 5 WAIT LIST TYPE ER:LHD EQU 6 WAIT LIST HEAD ADDRESS * TITL ENVIRONMENT PRIVILEGE DEFINITION BLOCK MACRO (EPD:) EPD: MACRO * * Calling Sequence: * * EPD: P1,P2 * * P1 - The Environment Privilege flags (Defaults to 0) * P2 - Maximum Environment Priority (Defaults to :8000 (relative 0)) * CHECKP: #(?),0,2 FLG:: SET: #(1),0 MPRI:: SET: #(2),0 ENDM TITL ENVIRONMENT MEMORY POOL DESCRIPTOR MACRO (EMP:) EMP: MACRO * * Calling Sequence: * * EMP: P1,P2 * * P1 - Size of the EMP in words (Defaults to 0) *  P2 - Start address of the EMP (Defaults to 0) * CHECKP: #(?),0,2 EMPS:: SET: #(1),0 EMPA:: SET: #(2),0 ENDM TITL ENVIRONMENT RESOURCE BLOCK GENERATION MACRO (ERB:) ERB: MACRO * * Calling Sequence: * * ERBNAME ERB: P1,P2,P3,P4,P5 * *  ERBNAME - The label associated with the ERB (Required) * P1 - Maximum number of small freepool blocks allowed *  (Defaults to "no local limit" (get from parent)) * P2 - Maximum number of medium freepool blocks allowed * (Defaults to "no local limit" (get from parent)) * P3 - Reserved, currently not used. * (Defaults to 0) * P4 - Maximum number of logical maps which can be given away *  (Defaults to 0) * P5 - Maximum number of door stack blocks allowed (Defaults * to "no local limit" (get from parent)) * MACLAB #(-1) TSTART: ER:SIZ CHECKP: #(?),0,5 ER:FLG WORD: FLG:: ER:MPRI WORD: MPRI:: ER:EMPS WORD: EMPS:: ER:EMPA WORD: EMPA:: ER:MLM WORD: #(4),0 ER:MSFP WORD: #(1),-1 ER:MMFP WORD: #(2),-1 ER:MDSB WORD: #(5),-1 ER:CKW WORD: CKW:ER TEND: ENDM M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M OTE ** CLASS EQUATES ARE DEFINED IN X:COMMON.MAC FI:FLG EQU 1 FILE ATTRIBUTES FLAG * * FLAG WORD EQUATES * * FIF:DEAC EQU :0001 DEALLOCATION CODE FIF:SUID EQU :0002 SET USER IDS FROM FIB FIF:CFN EQU :0100 CONNECT TO FNO FIF:CR EQU :0200 CREATE AND CONNECT FIF:CP EQU :0400 CONNECT TO PARENT FIF:OFF EQU 0 NO FLAGS SET * FI:TYPE EQU 2 FILE TYPE * * FILE TYPE EQUATES * * FIV:BS EQU 0 B TITL FILE INFORMATION BLOCK - FIB.MAC - 84-94140-66 (A300) * * FILE INFORMATION BLOCK EQUATES * FI:CLAS EQU 0 DEVICE CLASS ** NOTE ** CLASS EQUATES ARE DEFINED IN X:COMMON.MAC FI:FLG EQU 1 FILE ATTRIBUTES FLAG * * FLAG WORD EQUATES * * FIF:DEAC EQU :0001 DEALLOCATION CODE FIF:SUID EQU :0002 SET USER IDS FROM FIB FIF:CFN EQU :0100 CONNECT TO FNO FIF:CR EQU :0200 CREATE AND CONNECT FIF:CP EQU :0400 CONNECT TO PARENT FIF:OFF EQU 0 NO FLAGS SET * FI:TYPE EQU 2 FILE TYPE * * FILE TYPE EQUATES * * FIV:BS EQU 0 BYTE STREAM FIV:DIR EQU 1 DIRECTORY FIV:FLR EQU 2 FIXED LENGTH RECORD FIV:VLR EQU 3 VARIABLE LENGTH RECORD FIV:UNB EQU 4 UNBLOCKED * FI:NAME EQU 5 ADDRESS OF FILE NAME FI:PASS EQU 6 ADDRESS OF PASSWORD FI:UCLAS EQU 7 USERS CLASS (RETURNED IN READ FIB) FI:PR  OT EQU 8 PROTECTION CODE FI:BLK EQU 9 BLOCK SIZE FI:REC EQU :A RECORD SIZE FI:IEXT EQU :B INITIAL EXTENT SIZE FI:SEXT EQU :C SECONDARY EXTENT SIZE FI:FRMS EQU :D FORM SIZE, BITS 15-8 = LINES/PAGE, 7-0 = CHARS/LINE FI:FRMT EQU :E FORM TYPE FI:UID EQU FI:FRMS USER IDS (32 BITS) FI:CKW EQU :F TABLE CHECK WORD FI:SIZE EQU :10 TABLE SIZE FI:SIZ EQU :10 TABLE SIZE (STANDARD MNEMONIC) * * MISCELLANEOUS EQUATES * FI:PWLEN EQU 4 8 CHARACTER PASSWORD LENGTH FI:NMLEN EQU 7 14 CHARACTER NAME LENGTH * FIB: MACRO * * MACRO TO BUILD A FILE INFORMATION BLOCK * * CALLING SEQUENCE: * * FIB: P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12 * * P1 = DEVICE CLASS (FI:CLAS) * P2 = FILE ATTRIBUTE FLAGS (FI:FLG) * P3 = FILE TYPE (FI:TYPE) * P4 = ADDRESS OF FILE NAME BUFFER (FI:NAME) * P5 = ADDRESS OF PASSWORD BUFFER (FI:PASS) * P6 = PROTECTION CODE (FI:PROT) * P7 = FILE BLOCK SIZE (FI:BLK) * P8 = FILE RECORD SIZE (FI:REC) * P9 = INITIAL EXTENT SIZE (FI:IEXT) * P10 = SECONDARY EXTENT SIZE (FI:SEXT) * P11 = FORM SIZE (FI:FRMS) * P12 = FORM TYPE (FI:FRMT) * * ALL PARAMETERS DEFAULT TO ZERO * MACLAB #(-1) TSTART: FI:SIZ FI:CLAS WORD: #(1),0 FI:FLG WORD: #(2),0 FI:TYPE WORD: #(3),0 FI:NAME WORD: #(4),0 FI:PASS WORD: #(5),0 FI:PROT WORD: #(6),0 FI:BLK WORD: #(7),0 FI:REC WORD: #(8),0 FI:IEXT WORD: #(9),0 FI:SEXT WORD: #(10),0 FI:FRMS WORD: #(11),0 FI:FRMT WORD: #(12),0 FI:CKW WORD: CKW:FI TEND: ENDM N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N NORD (NONE DEFINED) GF:ST EQU 4 COMPLETION STATUS (BITS DEFINED BELOW) GF:DFUN EQU 5 DEFAULT LOGICAL UNIT GF:FEXTL EQU  6 FILE EXTENSION LENGTH GF:ILUN EQU 7 INPUT LUN SPECIFIED GF:PROT EQU 8 PROTECTION CODE (<402>) IN BCD * RESERVED WD  TITL GET FILE NAME PARAMETER BLOCK - GFN.MAC - 84-94140-67 (A300) * * EQUATES FOR THE GFN BLOCK * GF:NAME EQU 0 ADDRESS OF FILE NAME BUFFER GF:PASS EQU 1 ADDRESS OF PASSWORD BUFFER GF:DUN EQU 2 DIRECTORY LOGICAL UNIT GF:FLG EQU 3 FLAG WORD (NONE DEFINED) GF:ST EQU 4 COMPLETION STATUS (BITS DEFINED BELOW) GF:DFUN EQU 5 DEFAULT LOGICAL UNIT GF:FEXTL EQU  6 FILE EXTENSION LENGTH GF:ILUN EQU 7 INPUT LUN SPECIFIED GF:PROT EQU 8 PROTECTION CODE (<402>) IN BCD * RESERVED WD  9 * GF:CKW EQU :A CHECKWORD GF:FBUF EQU :B FILE BUFFER (7 WORDS) GF:PBUF EQU :12 PASSWORD BUFFER (4 WORDS) GF:ISM EQU :16 START OF ISM BLOCK GF:ISCKW EQU GF:ISM+:11 OFFSET OF ISM CHECKWORD FROM GFN BLOCK GF:SIZ EQU GF:ISM+:11+1 LENGTH OF ENTIRE GFN BLOCK * * OTHER INFORMATION * GFP:SIZ EQU GF:CKW+1 SIZE OF GFN PART GF:DDLUN EQU :5546 HEX EQUIVALENT OF 'UF'. USED IF GF:DLUN = 0 * * RETURN STATUS MASKS * GFF:SE EQU 1 STARTING ERROR GFF:IFI EQU 2 INVALID FILE ID GFF:DIR EQU 4 RESULT WAS DIRECTORY GFF:PWD EQU 8 PASSWORD WAS READ ON FILE NAME GFF:PN EQU :10 READ A PATH GFF:WC EQU :20 AT LEAST 1 WILD CARD CHARACTER IS IN THE FILE GFF:PC EQU :40 GFN READ A PROTECTION SPEC (<234>) GFF:FN EQU :80 GOT A FILE NAME GFF:JLU EQU :100 GOT JUST A LOGICAL UNIT T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T --+ * 3 | IO:FC | Operation code * +----------+ * 4 | IO:xxxxx | I/O operation dependent   TITL INPUT/OUTPUT BLOCK - IOB.MAC - 84-94140-68 (B020) * ************************************************************************* * * +----------+ * 0 | IO:LUN | Logical unit number * +----------+ * 1 | IO:PER | IOB peer pointer * +----------+ * 2 | IO:CFI | Address of 32 bit CFI * +----------+ * 3 | IO:FC | Operation code * +----------+ * 4 | IO:xxxxx | I/O operation dependent * +----------+ * 5 | IO:xxxxx | I/O operation dependent * +----------+ * 6 | IO:xxxxx | I/O operation dependent * +----------+ * 7 | IO:ST | Status * +----------+ *  8 | IO:SID | Semaphore ID * +----------+ * 9 | IO:CKW | Table check word * +----------+ * * IO:LUN - Logical unit number. Normally supplied by the user. * For mount and connect operations, a zero in this word * will cause the system to supply a LUN. * * IO:PER - Peer pointer for chained IOBs. This word * is used when multiple IOB are chained together. Zero indicates * end of chain. * * IO:CFI - Address of 32 bit Current File Index (CFI). If zero, * then no CFI is used. This word must be zero or point * to a 32 bit storage area for all * read, write, position, and function operations. This word * is not used with mount, dismount, connect, or disconnect operations. * *  IO:FC - I/O operation code. * This word incudes the operation code, operation modifier, * and flags. * * IO:ST - Status returned by the system when the I/O operation * requested by this block has completed (normally or abnormally). *  When IOB's are chained together, this word is set in each * IOB as the I/O has completed, before continuing to the next *  I/O request in the chain. * * IO:SID - ID of the Semaphore to signal when the I/O has completed. * This word is only used when the IOB is used with no-wait I/O * (I:IOR). If zero, then a Semaphore is not signaled. * If the SID is non-zero and I:IOR is used, then the Semaphore * must exist at the time of the call. * Semaphore exceptions (e.g. overflow) are ignored when the Semaphore * is signaled by the I/O system. * * IO:CKW - Table check word. Only used when the IOB is used with * no-wait I/O (I:IOR), but always generated by the IOB: macro. * * IO:xxxxx - The definition of these words varies depending * upon the type of I/O operation specified in IO:FC. * * * All I/O operation codes have the following form: * * 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ * | x | E | B | x | S | x | C | M | * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ * * - Reserved fields. Must be zero. * * - Exception override (ER:). If set, all error conditions will * be returned, an exception is not generated regardless of the * XVT mode for I/O class. If clear, an exception is generated if * the XVT mode for I/O class is not set to ignore * and bit 15 if the status word (IO:ST) is set.  * Otherwise, * the error is returned in the IOB. * This bit is used for all I/O operations. * * - Second byte (SB:). If set, the data begins on the second * (right) byte of the first word of the buffer. If clear, the data begins *  on the first (left) byte of the first word. * This bit is only used for read and write operations. For all other * operations, this bit must be zero. * * - Shareable logical unit (SU:). This bit is used with mount and * connect to indicate whether the logical unit being created can * be accessed by a subordinate Environment. If set, then the LUN can *  be accessed by a subordinate. If clear, then the LUN is private to * the Environment. For other I/O operations, this bit must be clear. * * - Operation code. * There are 16 operation codes in the range 0 - :F. They * are defined as follows: * * 0 - Read (RE:) * 1 - Write (WR:) * 2 - Position (PO:) * 3 - Function (FU:) *  4 - Connect (CO:) * 5 - Disconnect (DC:) * 6 - Mount (MO:) * 7 - Dismount (DM:) * 8 to :F - Reserved * * - Operation modifier. * There are 16 operation modifiers (0-:F). The definition * of each modifier depends upon the operation code and the * type of device. Modifiers in the range 0-7 are used * for operations which are device independent. Modifiers * in the range 8-:F are used for device dependent * operations. * ************************************************************************* * IO:LUN EQU 0 LOGICAL UNIT NUMBER IO:PER EQU 1 CHAINED IOB PEER POINTER IO:CFI EQU 2 ADDRESS OF CFI IO:FC EQU 3 FUNCTION CODE IO:BCT EQU 4 REQUESTED BYTE COUNT IO:BUF EQU 5 BUFFER ADDRESS IO:ACT EQU 6 ACTUAL BYTE COUNT IO:ST EQU 7 COMPLETION STATUS IO:SID EQU 8 SEMAPHORE ID FOR NO-WAIT I/O IO:CKW EQU 9 CHECKWORD * IO:DIB EQU IO:BCT DIB ADDRESS FOR MOUNT IO:FIB EQU IO:BCT FIB ADDRESS FOR CONNECT IO:DUN EQU IO:BUF DIRECTORY LUN FOR CONNECT IO:POS EQU IO:BCT COUNT FOR POSITION IO:FOP EQU IO:BCT OPERAND FOR FUNCTION IO:SIZ EQU :A IOB SIZE (NO-WAIT I/O OR COMPILED WITH CARTOS MACS) IO:WSIZ EQU 8 IOB SIZE (WAIT I/O OR RTX COMPATIBLE) * * OPERATION CODE FLAGS IO:FC BITS 15-8 * THESE ARE MASK VALUES * ER: EQU :4000 EXCEPTION OVERRIDE SB: EQU :2000 BEGIN ON SECOND BYTE SU: EQU :0800 SHAREABLE LOGICAL UNIT * * OPERATION CODE IO:FC BITS 7-4 * RE: EQU 0 READ WR: EQU 1 WRITE PO: EQU 2 POSITION FU: EQU 3 FUNCTION CO: EQU 4 CONNECT DC: EQU 5 DISCONNECT MO: EQU 6 MOUNT DM: EQU 7 DISMOUNT * * MASK BIT FOR BITS 7-0 * IO:MFC EQU :00F0 MASK FOR OPERATION CODE-BITS 7-4 IO:MFM EQU :000F MASK FOR OPERATION MODIFIER-BITS 3-0 MFC EQU 4 LENGTH OF OPERATION CODE/MODIFIER * * OPERATION MODIFIERS-DEVICE INDEPENDENT * UF: EQU 0 UNFORMATTED FA: EQU 1 FORMATTED * * READ OPERATION MODIFIERS-DEVICE INDEPENDENT * RUF: EQU UF: READ UNFORMATTED RFA: EQU FA: READ FORMATTED RPU: EQU 2 WITH PROMPT, UNFORMATTED RPF: EQU 3 WITH PROMPT, FORMATTED RSTAT: EQU 7 READ STATUS RMR: EQU 7 READ MODEM STATUS * * WRITE OPERATION MODIFIERS-DEVICE INDEPENDENT * WUF: EQU UF: WRITE UNFORMATTED WFA: EQU FA: WRITE FORMATTED WP: EQU 2 WRITE PROMPT WSTAT: EQU 7 WRITE STATUS WMR: EQU 7 WRITE MODEM STATUS * * POSITION OPERATION MODIFIERS-DEVICE IND  EPENDENT * * CRT MNEMONICS POSA: EQU 0 POSITION CURSOR ABSOLUTE POSR: EQU 1 POSITION CURSOR RELATIVE RPOS: EQU 2 READ POSITION * THE FOLLOWING ARE THE FM NAMES FOR ABOVE * AND MUST HAVE THE SAME VALUES AS THEIR CRT COUNTERPARTS WCFI: EQU 0 WRITE CFI ABSOLUTE WCFIR: EQU 1 WRITE CFI RELATIVE RCFI: EQU 2 READ CFI REOF: EQU 3 READ EOF WEOF: EQU 4 WRITE EOF * * FUNCTION OPERATION MODIFIERS-DEVICE INDEPENDENT * OP: EQU 0 OPEN CL: EQU 1 CLOSE CLU: EQU 2 CLOSE UNCONDITIONAL RIB: EQU 3 READ FILE INFORMATION BLOCK WIB: EQU 5 WRITE INFORMATION BLOCK STOP: EQU 7 STOP I/O OPERATION * * MOUNT OPERATION MODIFIERS-DEVICE INDEPENDENT * SHR: EQU 0 MOUNT SHARABLE EU: EQU 1 MOUNT FOR EXCLUSIVE USE * * FUNCTION MODIFIERS-FILE MANAGER DEPENDENT * DEL: EQU 4 DELETE FILE REN: EQU 5 RENAME USING FIB * * FUNCTION MODIFIERS - MAG TAPE DEPENDENT * ERFM: EQU 6 ERASE FILE MARK ERBLK: EQU 7 ERASE BLOCK REWIND: EQU 8 REWIND * * FUNCTION MODIFIERS - QIC DEPENDENT * ERASE: EQU 9 ERASE TAPE INIT: EQU :A INITIALIZE TAPE (RETENSION COMMAND) * * FUNCTION MODIFIERS - DEVICE INDEPENDENT * RESDMA: EQU :B RESERVE DMA BUFFER * * FUNCTION OPERAND EQUATES (OPEN) * BITS 15-12 OPEU: EQU 4%12 EXCLUSIVE USE OPEN * BITS 11-8 OPRAN: EQU 0 RANDOM ACCESS OPSEQ: EQU 1%8 SEQUENTIAL ACCESS * BITS 7-4 OPBYT: EQU 0 BYTE ACCESS OPREC: EQU 1%4 RECORD ACCESS OPUB: EQU 2%4 UNBLOCKED OPFIL: EQU 3%4 USE FILE TYPE * BITS 3-0 OPRW: EQU 0 READ/WRITE OPRE: EQU 1 READ ONLY OPWR: EQU 2 WRITE ONLY OPEX: EQU 3 EXTEND (WRITE) ONLY * *  CONNECT MODIFIERS-FILE MANAGER DEPENDENT * CON: EQU 0 NORMAL CONNECT OPERATION COP: EQU 2 PUSH CONNECT OPERATION COL: EQU 3 COMPARE LUNS OPERATION * * READ OPERATION MODIFIERS, TV DEPENDENT * RSUF: EQU 8 READ SECURE UNFORMATETED RSF: EQU 9 READ SECURE FORMATTED RPSU: EQU :A READ WITH PROMPT, SECURE UNFORMATTED RPSF: EQU :B READ WITH PROMPT, SECURE FORMATTED * * FUNCTION OPERATION MODIFIERS, TV DEPENDENT * SETO: EQU 8 SET OPTION RSTO: EQU 9 RESET OPTION CM: EQU :A CHARACTER MATCH BR: EQU :B SET BAUD RATE SBK: EQU :C SEND BREAK BEX: EQU :D ENABLE/DISABLE BREAK * * FUNCTION OPERANDS, TV DEPENDENT * AUTOE: EQU 1 AUTO ECHO OPTION RANGE: EQU 2 EOB ON RANGE MATCH TYPEA: EQU 3 TYPE AHEAD INLCK: EQU 4 READ/WRITE INTERLOCK TRUNC: EQU 5 TRUNCATION AT END OF LINE TMERR: EQU 6 ERROR IF TIMEOUT * * FUNCTION MODIFIERS, SYNC COMMUNICATIONS DEPENDENT * RST: EQU 8 READ STATUS TABLE CST: EQU 9 CLEAR STATUS TABLE * * READ OPERATION MODIFIERS, DISK DEPENDENT * RR: EQU 8 READ REGARDLESS RV: EQU 9 READ AND VERIFY VCB: EQU 10 READ THE VOLUME CONTROL BLOCK OF A DISK * * POSITION OPERATION MODIFIERS, DISK DEPENDENT * SK: EQU 8 SEEK ONLY * * FUNCTION OPERATION MODIFIERS, DISK DEPENDENT * TIO: EQU 8 TEST I/O FMT: EQU 9 FORMAT * * * IOB: MACRO MACLAB #(-1) TSTART: IO:SIZ CHECKP: #(?),2,9 IO:LUN WORD: #(1) IO:PER WORD: #(8),0 IO:CFI WORD: #(6),0 IO:FC WORD: #(2)%4+#(3)+#(7)+0 IO:BCT WORD: #(4),0 IO:BUF WORD: #(5),0 IO:SID WORD: #(9),0 IO:CKW WORD: CKW:IO TEND: ENDM * MOUNT: MACRO MO: MACLAB FUNC: MACENT FU: MACLAB CHECKP: #(?),1,6 N: SET #(1,?)=0 IFF #(0)=MO:*N: #(-1) IOB: #(1),#(0),#(2),#(3),,,#(4),#(5),#(6) ENDC IFT #(0)=MO:*N: #(-1) IOB: 0,#(0),#(2),#(3),,,#(4),#(5),#(6) ENDC ENDM * POS: MACRO PO: MACLAB CHECKP: #(?),1,6 #(-1) IOB: #(1)  ,#(0),#(2),,,#(3),#(4),#(5),#(6) ENDM * DMOUNT: MACRO DM: MACLAB DISCON: MACENT DC: MACLAB CHECKP: #(?),1,5 #(-1) IOB: #(1),#(0),#(2),,,,#(3),#(4),#(5) ENDM * CONNECT: MACRO CO: MACLAB CHECKP: #(?),1,7 IFT #(1,?) #(-1) IOB: #(1),#(0),#(2),#(3),#(4),,#(5),#(6),#(7) ENDC IFF #(1,?) #(-1) IOB: 0,#(0),#(2),#(3),#(4),,#(5),#(6),#(7) ENDC ENDM * READ: MACRO RE: MACLAB WRITE: MACENT WR: MACLAB CHECKP: #(?),2,8 #(-1) IOB: #(1),#(0),#(2),#(3),#(4),#(5),#(6),#(7),#(8) ENDM M M M M M M M M M M M M M M  BYTE LENGTH OF USER BUFFER *RES WORD IS:BC+1 * IS:CKW EQU IS:BC+2 CHECKWORD * * OTHER INFORMATION ABOUT ISM * IS:SIZ EQU IS:CKW+1 LENGTH * * MACRO TO BUILD AN ISM BLOCK * P1 = USER BUFFER LOCATION * P2 = USER BUFFER LENGTH IN WORDS * ISM: M TITL INPUT SYMBOL PARAMETER BLOCK - ISM.MAC - 84-94140-69 (A300) * * EQUATES AND OTHER INFORMATION ABOUT * THE ISM PARAMETER BLOCK. THIS BLOCK * IS USED AS THE PARAMETER TO THE I:ISM * SYSTEM SERVICE. I:ISM RETURNS THE NEXT * 'SYMBOL' FROM A CHARACTER BUFFER. * IS:TC EQU 0 TERMINATION CHARACTER IS:NC EQU 1 NUMBER OF CHARACTERS IN SYMBOL IS:DF EQU 2 DECIMAL FLAG (0 IF SYMBOL WAS DEC NUMBER) IS:DV EQU 3 DECIMAL VALUE (HAS MEANING IFF IS:DF=0) IS:HF EQU 4 HEX FLAG (0 IF SYMBOL WAS A HEX NUMBER) IS:HV EQU 5 HEX VALUE (HAS MEANING IFF IS:HF=0) IS:SB EQU 6 SYMBOL BUFFER (7 WORDS) IS:SYML EQU 7 LENGTH OF SYMBOL BUFFER IN WORDS IS:BP EQU IS:SB+IS:SYML BYTE INDEX INTO USER BUFFER IS:UB EQU IS:BP+1 USER BUFFER IS:BC EQU IS:UB+1 BYTE LENGTH OF USER BUFFER *RES WORD IS:BC+1 * IS:CKW EQU IS:BC+2 CHECKWORD * * OTHER INFORMATION ABOUT ISM * IS:SIZ EQU IS:CKW+1 LENGTH * * MACRO TO BUILD AN ISM BLOCK * P1 = USER BUFFER LOCATION * P2 = USER BUFFER LENGTH IN WORDS * ISM: MACRO MACLAB #(-1) TSTART: IS:SIZ CHECKP: #(?),2,2 IS:UB WORD: #(1) IS:BC WORD: #(2)*2 IS:CKW WORD: CKW:IS TEND: ENDM E E E Ee zero to * remain compatible with future enhancements. * * LA:NPSH - Upon return from I:GLA, this word contains * the number of times the LUN has been pushed (via * a push connect). * * LA:PUN - The physical unit name (eg. TV01) that the LUN * is connected to is returned in these two words (in ASCII). * * LA:UD1 and LA:UD2 - These two words are associated with * the LUN  TITL LOGICAL UNIT ATTRIBUTE BLOCK - LAB.MAC - 84-94141-60 (A300) * * LAB.MAC * * EQUATES FOR THE LUN ATTRIBUTE BLOCK * * PARAMTER BLOCK FOR I:GLA AND I:SLA * * Description of words in this block: * * LA:LUN - This word contains the Logical Unit Number *  about which information is to be returned. * * LA:RPOS - If LA:LUN is zero on a I:GLA this word * contains the number of Luns on the LUN chain associated * with the calling Environment to skip before reporting * on a LUN. By increasing LA:RPOS by 1 inside a loop * and calling I:GLA, an Environment's LUN list can be scanned. * * LA:FLG - flag word. All unused bits should be zero to * remain compatible with future enhancements. * * LA:NPSH - Upon return from I:GLA, this word contains * the number of times the LUN has been pushed (via * a push connect). * * LA:PUN - The physical unit name (eg. TV01) that the LUN * is connected to is returned in these two words (in ASCII). * * LA:UD1 and LA:UD2 - These two words are associated with * the LUN  but not used by the system. They may be modified * by I:SLA and read by I:GLA. There use is up to the user. * LA:LUN EQU 0 LOGICAL UNIT LA:RPOS EQU 1 RELATIVE POSITION (GLA ONLY) LA:FLG EQU 2 FLAGS (SEE BELOW) LA:NPSH EQU 4 NUMBER OF LUNS PUSHED LA:PUN EQU 5 PHYSICAL UNIT NAME (2 WORDS, ASCII) LA:UD1 EQU 7 USER DEFINED WORD 1 LA:UD2 EQU 8 USER DEFINED WORD 2 LA:CKW EQU :B CHECKWORD LA:SIZ EQU :C TABLE SIZE * * FLAGS * * Description of the flags: * * LAF:SH - This bit is set if the LUN may also be accessed * by subordinates. This attribute is initialy set during connect. * LAF:PT - This bit is set if the LUN in LA:LUN is owned * by the parent. I:SLA searches the parent's Logical Unit Table * if it doesn't find the requested LUN in the requesting * Environment's list. All LUNs thus marked are sharable with * the subordinate (calling) Environment. * LAF:PH - This bit is set if the LA:LUN is the result * of a mount and thus cannot be reassigned without * dismounting the device. * LAF:SH EQU 4 SHARABLE LUN FLAG LAF:PT EQU 2 LUN IS IN PARENTS LUT LAF:PH EQU 1 LUN IS A PHYSICAL DEVICE (CANNOT BE REASSIGNED) O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O logical unit connected to binary file to be loaded. * * LD:FLG - flag word. ER: (:4000) is defined to work as with I:IO. * * LD:OFF - Relocation offset to be used for relocatable data. * * LD:HLL - High load limit. Any attempt to load higher is an error. TITL OBJECT LOAD PARAMETER BLOCK - LDB.MAC - 84-94142-63 (A300) * * +----------+ * 0 | LD:LUN | Pre-connected Logical Unit * +----------+ * 1 | LD:FLG | Flag word * +----------+ * 2 | LD:OFF | Relocation Offset * +----------+ * 3 | LD:HLL | High Load Limit * +----------+ * 4 | LD:LLL | Low Load Limit * +----------+ * 5 | LD:XAD | Execution Address * +----------+ * 6 | LD:HAD | High Address / Module size * +----------+ * 7 | LD:ST | Return Status * +----------+ * 8 | LD:MAP | Map number * +----------+ * 9 | LD:STP | Top-load step size * +----------+ * A | 0 | Reserved * +----------+ * B | LD:CKW | Checkword * +----------+ * * where * LD:LUN - logical unit connected to binary file to be loaded. * * LD:FLG - flag word. ER: (:4000) is defined to work as with I:IO. * * LD:OFF - Relocation offset to be used for relocatable data. * * LD:HLL - High load limit. Any attempt to load higher is an error. * * LD:LLL - Low load limit. Any attempt to load lower is an error. * * LD:XAD - Execution address is returned here. * * LD:HAD - Highest address OR if HLL = -1 and LLL = 0, this is * the module size. * * LD:ST - The return status (either GOOD. or of classes X:IOERR or * X:IOSRVS). * * LD:MAP - The map into which the load took place. * * LD:STP - Top-down load step size * * LD:CKW - Checkword. * LD:LUN EQU 0 LU ASSIGNED TO FILE TO BE LOADED LD:FLG EQU 1 ERROR FLAG WORD LD:OFF EQU 2 RELOC. OFFSET FOR RELOCATABLE DATA LD:HLL EQU 3 HIGHEST LEGAL LOAD ADDRESS + 1 LD:LLL EQU 4 LOWEST LEGAL LOAD ADDRESS LD:XAD EQU 5 EXECUTION ADDRESS OF SUCCESSFULLY LOADED FILE LD:HAD EQU 6 HIGHEST LOAD ADDRESS USED LD:SIZE EQU LD:HAD WHEN LD:MAP = -1  & LD:LLL = 0 THEN MODULE SIZE RETURNED IN LD:HAD LD:ST EQU 7 COMPLETION STATUS RETURN WORD LD:MAP EQU 8 MAP NO. INTO WHICH DATA IS TO BE LOADED COMMENT (S:LOAD ONLY, I:LOAD SETS THIS WORD TO THE LOGICAL COMMENT MAP NUMBER OF THE CALLER) LD:STP EQU 9 TOP-DOWN LOAD STEP SIZE LD:CKW EQU 11 CHECKWORD OF LOAD PARAMETER BLOCK * LD:SIZ EQU LD:CKW+1 SIZE OF LOAD PARAMETER BLOCK * ER: EQU :4000 ERROR BIT FOR FLAG (SEE IOB.MAC) * * LOAD: LUN,OFF[,FLG[,HLL[,LLL]]] * LOAD: MACRO #(-1) TSTART: LD:SIZ CHECKP: #(?),2,5 LD:LUN WORD: #(1) LD:FLG WORD: #(3),0 LD:OFF WORD: #(2) LD:HLL WORD: #(4),:FFFF LD:LLL WORD: #(5),0 LD:CKW WORD: CKW:LD TEND: ENDM M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M  TITL MAILBOX PARAMETER BLOCK - MAIL.MAC - 84-94141-61 (A300) *********************************************************************** * * MAILBOX PARAMETER BLOCK * * +----------+ * 0 | ML:MID | The Mailbox id word * +----------+ * 1 | ML:EID | The Environment id word * +----------+ * 2 | 0 | Reserved * +----------+ * 3 | ML:CKW | Table check word * +----------+ * * ML:MID - Mailbox ID. * * ML:EID - Environment ID. Zero is "my" Environment, -1 is * my parent. * * ML:CKW - check word. * *********************************************************************** ML:MID EQU 0 MAILBOX ID ML:EID EQU 1 ENVIRONMENT ID ML:CKW EQU 3 CHECKWORD ML:SIZE EQU 4 BLOCK SIZE * MAIL: MACRO MACLAB #(-1) TSTART: ML:SIZE CHECKP: #(?),1,2 ML:MID WORD: #(1) ML:EID WORD: #(2),0 ML:CKW WORD: CKW:ML TEND: ENDM M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M  TITL MAILBOX DEFINITION BLOCK - MDB.MAC - 84-94141-62 (A300) *********************************************************************** * * MAILBOX DEFINITION BLOCK * * +----------+ * 0 | MD:PER | Peer Link * +----------+ * 1 | MD:FLG | Mailbox Definition Block Flags * +----------+ * 2 | MD:ID | Mailbox id word * +----------+ * 3 | 0 | Reserved * +----------+ * 4 | 0 | Reserved * +----------+ * 5 | MD:A | A Register of the initial msg * +----------+ *  6 | MD:Q | Q Register of the initial msg * +----------+ * 7 | MD:CKW | Checkword *  +----------+ * * MD:ID - The identifier which is to be assigned to * the Mailbox. All Mailboxes created by a single Environment must have * unique identifiers. This identifier is used for all future references to * the Mailbox. * If zero or negative, the system will supply an ID and return it in * this word. * * MD:FLG - Mailbox attributes: * *  Bits 15-5 - Reserved. * * Bit 4 (MDF:IM) - Initial message. If set, then MD:A and MD:Q * contain an initial message. * * Bit 3 (MDF:PR) - A peer Environment can receive a message * from this Mailbox. * * Bit 2 (MDF:PS) - A peer Environment can send a message * to this Mailbox. * * Bit 1 (MDF:SR) - A subordinate Environment can receive *   a message from this Mailbox. * * Bit 0 (MDF:SS) - A subordinate Environment can send a * message to this Mailbox. * * If one of the above bits is on, then the access is allowed; otherwise, * it is not allowed. If none of the access bits are set, then the access * code is zero and the Mailbox is private to the Environment that created * it. No other Environment can use the Mailbox. If the access is not * specified in the macro call, it is assumed to be zero. * *  MD:A - Upper 16 bits of the initial message. If MD:Q is not specified, * then this is the lower 16 bits with the upper 16 bits 0. * * MD:Q - Lower 16 bits of the initial message. If not supplied, the * MD:A becomes the lower 16 bits. * *  Warning - the MDF:IM bit is not set automatically when the user * supplies the upper or lower 16 bits of the initial message. If the * bit is set and no initial message is supplied, the initial message will * be 32 bits of zero. * *********************************************************************** MD:PER EQU 0 PEER LINK MD:FLG EQU 1 MAILBOX DEFINITION BLOCK FLAGS MD:ID EQU 2 MAILBOX ID WORD MD:A EQU 5 -A- REGISTER OF THE MESSAGE MD:Q EQU 6 -Q- REGISTER OF THE MESSAGE MD:CKW EQU 7 MDB CHECKWORD MD:SIZE EQU 8 * * FLAG WORD (MD:FLG) * MDF:IM EQU :0010 INITIAL MESSAGE IS PRESENT MDF:PR EQU :0008 PEER ENVIRONMENT CAN RECEIVE MDF:PS EQU :0004 PEER ENVIRONMENT CAN SEND MDF:SR EQU :0002 SUBORDINATE ENVIRONMENT CAN RECEIVE MDF:SS EQU :0001 SUBORDINATE ENVIRONMENT CAN SEND * MDB: MACRO 1 MACLAB MDB:P MACENT 0 MACLAB #(-1) TSTART: MD:SIZE CHECKP: #(?),0,4 MD:PER PEER: MDB:,#(0) MD:FLG WORD: #(2),0 MD:ID WORD: #(1),0 IFF #(?)>3 MD:A DOUBLE: #(3),0 ENDC IFT #(?)>3 MD:A WORD: #(3) MD:Q WORD: #(4) ENDC MD:CKW WORD: CKW:MD TEND: ENDM M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M ntains the number of bytes to be * transfered. If an uninstalled memory error occurs during * the move, a partial move of t TITL MOVE PARAMETER BLOCK - MVB.MAC - 84-94142-64 (A303) * * S:MOVE/R:MOVE Parameter Definition Block * * Descriptions of words: * * MV:FLG - Flag word. Individual flags are defined below * * MV:OLM - The logical map number of the other Environment * involved in the data move. This logical map may be the * same as the Environment calling the move routine (S:MOVE). * * MV:SEID - The subordinate Environment ID where data is * to be moved to or from. (R:MOVE) * * MV:DSTA - The address of the word where the data moved is * to be transferred to. A bit in the flag indicates whether * the hi order byte is the start of the buffer or the * low order byte is. These are called 'word boundary' and * 'byte boundary' for the rest of this description. * * MV:SRCA - This word contains the address of the word where * the data to be moved is to come from. * * MV:BCNT - This word contains the number of bytes to be * transfered. If an uninstalled memory error occurs during * the move, a partial move of the data may have occured. * * MV:RES - Reserved. Should be zero. * MV:FLG EQU 0 Flag word (flags defined below) MV:OLM EQU 1 Other logical map number (S:MOVE) MV:SEID EQU 1 Subordinate EID (R:MOVE) MV:DSTA EQU 2 Destination Address MV:SRCA E QU 3 Source Address MV:BCNT EQU 4 Number of bytes to transfer (<=:7FFF) MV:RES EQU 5 Reserved word MV:CKW EQU 6 Checkword MV:SIZ EQU 7 Size of the MVB * * FLAGS * * Description of the flag bits * * MV:BBSR - This bit is on (1) if the source buffer starts * with the least significant byte of MV:SRCA. * * MV:BBDS - This bit is on if the DESTINATION buffer starts *  with the lsb of MV:DSTA * * MVF:DST - If this bit is on, words are transfered from * MV:OECB to the callers Envt. and vice-versa otherwise. * * NOTE: * DO NOT CHANGE THE EQUATES FOR BBSR * AND BBDS. THESE ARE ASSUMED TO BE * IN THE LOCATIONS BELOW BY S:MOVE!! * MVF:BBSR EQU 1 Source buffer on byte boundary MVM:BBSR EQU 1%MVF:BBSR Mask for above MVF:BBDS EQU 0 Destination buffer on byte boundary MVM:BBDS EQU 1%MVF:BBDS Mask for above MVF:DST EQU 2 Caller is destination MVM:DST EQU 1%MVF:DST Mask for above * * MVB: Macro - Parameter block for R:MOVE * * #(1) = (SEID) Subordinate Envrionment ID * #(2) = (DSTA) Destination Address * #(3) = (SRCA) Source Address * #(4) = (BCNT) Byte Count (<= :7FFF) * #(5) = (FLG) Flag Word (Optional) * MVB: MACRO #(-1) TSTART: MV:SIZ CHECKP: #(?),4,5 MV:FLG WORD: #(5),0 MV:SEID WORD: #(1) MV:DSTA WORD: #(2) MV:SRCA WORD: #(3) MV:BCNT WORD: #(4) MV:CKW WORD: CKW:MV TEND: ENDM t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t tAG WORD QD:ID EQU 2 QUEUE ID QD:MAX EQU 3 MAXIMUM INPUT MESSAGES QD:CKW EQU 7 CHECK WORD * QD:SIZ EQU 8 LENGTH OF QDB * * FLAG WORD (QD:FLG) * QDF:SG EQU :0008 SUBORDINATE ENVIRONMENTS CAN GET QDF:PG EQU :0004 PEER ENVIRONMENTS CAN GET QDF:SP EQU :0002 SUBORDINATE ENVIRONMENTS CAN PUT QDF:PP EQU :0001 PEER ENVIRONMENTS CAN PUT * QDB: MACRO 1 * * QUEUE DEFINITION BLOCK MACRO * TITL OVERLAY PARAMETER BLOCK - OVL.MAC - 84-94142-62 (A300) * * OVERLAY PARAMETER LIST * OV:LUN EQU 0 OV:ADR EQU 1 ADDRESS OF DIRECTORY BLOCK OV:LEN EQU 2 LENGTH OF DIRECTORY BLOCK OV:FLG EQU 3 FLAG WORD * RESERVE THREE WORDS FOR FUTURE EXPANSION OV:CKW EQU 7 CHECKWORD OV:SIZ EQU OV:CKW+1 ER: EQU :4000 * * OVL MACRO * * CALLING SEQUENCE: * LABEL OVL: LUN,ADR,LEN[,FLG] * OVL: MACRO 1 MACLAB OVL:P MACENT 0 #(-1) TSTSTART: OV:CKW+1,#(0) CHECKP: #(?),3,4 OV:LUN WORD: #(1) OV:ADR WORD: #(2) OV:LEN WORD: #(3) OV:FLG WORD: #(4),0 WORD CKW:OV TEND: ENDM M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M * +---------+ * 7 | QD:CKW | Checkword * +---------+ * * QD:PER - Peer link when chained to the EDB. * * QD:FLG - Queue attribute flags. * * Bits 15-4 - Reserved. * * Bit 0 (QDF:PP) - Peer Environments can PUT on this Queue. * * Bit 1 (QDF:SP) - Subordinate Environments can PUT on this Queue. * * Bit 2 (Q TITL QUEUE DEFINITION BLOCK - QDB.MAC - 84-94141-63 (A300) *************************************************************************** * * QUEUE DEFINITION BLOCK * * * +---------+ * 0 | QD:PER | Peer pointer * +---------+ * 1 | QD:FLG | Flag Word * +---------+ * 2 | QD:ID | ID of the Queue * +---------+ * 3 | QD:MAX | Maximum number of incoming messages * +---------+ * 4 | 0 | Reser ved * +---------+ * 5 | 0 | Reserved * +---------+ * 6 | 0 | Reserved * +---------+ * 7 | QD:CKW | Checkword * +---------+ * * QD:PER - Peer link when chained to the EDB. * * QD:FLG - Queue attribute flags. * * Bits 15-4 - Reserved. * * Bit 0 (QDF:PP) - Peer Environments can PUT on this Queue. * * Bit 1 (QDF:SP) - Subordinate Environments can PUT on this Queue. * * Bit 2 (QDF:PG) - Peer Environments can GET from this Queue. * * Bit 3 (QDF:SG) - Subordinate Environments can GET from *  this Queue. * * QD:ID - Queue ID. If zero or negative, the system will supply a unique * ID and return it in this word. All Queues within an * Environment must have unique ID's. * * QD:MAX - Is the maximum number of messages which can be * queued at any one time. If this number is not between * 1 and :7FFF it is defaulted to :7FFF. * * QD:CKW - Table checkword. * *************************************************************************** QD:PER EQU 0 PEER POINTER QD:FLG EQU 1 FLAG WORD QD:ID EQU 2 QUEUE ID QD:MAX EQU 3 MAXIMUM INPUT MESSAGES QD:CKW EQU 7 CHECK WORD * QD:SIZ EQU 8 LENGTH OF QDB * * FLAG WORD (QD:FLG) * QDF:SG EQU :0008 SUBORDINATE ENVIRONMENTS CAN GET QDF:PG EQU :0004 PEER ENVIRONMENTS CAN GET QDF:SP EQU :0002 SUBORDINATE ENVIRONMENTS CAN PUT QDF:PP EQU :0001 PEER ENVIRONMENTS CAN PUT * QDB: MACRO 1 * * QUEUE DEFINITION BLOCK MACRO * * CALLING SEQUENCE: * * QDBLABEL QDB: P1,P2,P3 * * P(-1) = THE ADDRESS OF THE QDB * P1 = QUEUE ID (DEFAULTS TO 0) * P2 = MAXIMUM NUMBER OF INPUT MESSAGES (DEFAULTS TO :7FFF) * P3 = FLAG WORD (DEFAULTS TO 0) * * MACLAB QDB:P MACENT 0 MACLAB #(-1) TSTART: QD:SIZ CHECKP: #(?),0,3 QD:PER PEER: QDB:,#(0) QD:FLG WORD: #(3),0 QD:ID WORD: #(1),0 QD:MAX WORD: #(2),:7FFF QD:CKW WORD: CKW:QD TEND: ENDM M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M  TITL QUEUE MESSAGE BLOCK - QMB.MAC - 84-94141-64 (A300) ******************************************************************* * * QUEUE MESSAGE BLOCK * * +----------+ * 0 | QM:EID | The Environment where the QDB is * +----------+ * 1 | QM:QID | The ID of a Queue * +----------+ * 2 | QM:MID | The ID of a message * +----------+ * 3 | QM:FLG | The Flag word * +----------+ * 4 | QM:RQID | The ID of the return Queue * +----------+ * 5 | QM:PRIO | Message priority * +----------+ * 6 | 0 | Reserved * +----------+ * 7 | QM:CKW | Checkword * +----------+ * 8 | QM:UDB1 | User Definable Block 1 (12 words) * * 13 | | * +----------+ *  14 | QM:UDB2 | User Definable Block 2 (12 words) * * 1F | | * +----------+ * * QM:EID - The ID of the Environment where the target Queue * resides. * If zero, specifies the Environment using the Queue service. * Minus 1 specifies the parent Environment. * Other values must be peer Environment ID's. * This is required  for R:QPUT(R), R:QGET(R), and R:QACK. * * QM:QID - Identifier of the Queue. * This is required for R:QPUT(R), R:QGET(R), and R:QACK. * * QM:MID - Message ID. * For a R:QGET(R) call, if a return queue was specified by the * PUT, this word is used to specify the ID of the message. * If non-zero, the message is assigned the ID * in this word. * If this assigned ID matches any ID among messages * which have been removed from a Queue by an R:QGET * but not yet acknowledged, an exception is generated. * If this word is zero, the system will generate a unique * ID, assign it to the message, and return it in this word. * If no return queue was specified by the PUT a zero is always * returned. * * When used with R:QACK, this word contains the ID * of the message to acknowledge. * * This word is not used by R:QPUT. * * QM:FLG - Flag word. * No flags are defined for calls to R:QPUT, R:QGET, or R:QACK and * this word should be set to zero before any call to preserve * compatibility for possible expansion. * * QM:RQID - Return Queue ID. * This word is used by R:QPUT(R) to specify the ID of the Queue * which is to get the message when it is acknowledged. * The return Queue must reside in the same Env. as the Activity * doing the R:QPUT(R). If this word is zero, it indicates no return * Queue. In this case, messages are deleted from the queue when * returned by a R:QGET. * * This word is not used by R:QGET(R) or R:QACK. * * QM:PRIO - Message priority. This word is used by R:QPUT(R) to * specify * the priority used to order the message on the queue. Messages * are put in FIFO order within equal priority numbers. * The priority is treated as a 16 bit unsigned integer. * The priority is returned in this word by a R:QGET(R). It is not * used by R:QACK. * * QM:CKW - Table check word. * * QM:UDB1 - User defined block 1. This block consists of 12 * words of data which are application-dependent. * A copy of this block is saved by R:QPUT(R) along with the * other message information. When an R:QGET(R) is used, the * saved block is copied into the QMB. The application * can use these words as part of the message itself. * When the message is acknowledged using R:QACK, the * block saved in the Queue is updated with theQM:UDB1 block *  in the QMB. This allows status or other information to * be passed back with the acknowledged message. * * QM:UDB2 - User defined block 2. This is another block * of 12 words which contain application-dependent data. * This block is handled likeQM:UDB1 except that it * is not modified by R:QACK. This block will * remain intact from the initial R:QPUT(R) until * the acknowledged message is received using R:QGET(R). * This block can be useful for request-dependent storage by * the Activity calling R:QPUT. * ******************************************************************* QM:EID EQU 0 ENVIRONMENT ID QM:QID EQU 1 QUEUE ID QM:MID EQU 2 MESSAGE ID QM:FLG EQU 3 FLAG WORD QM:RQID EQU 4 RETURN QUEUE ID QM:PRIO EQU 5 PRIORITY OF QMB QM:RES1 EQU 6 RESERVED QM:CKW EQU 7 CHECK WORD QM:UDB1 EQU 8 USER DEFINABLE BLOCK 1 QM:UD1L EQU 12 LENGTH OF USER DEFINE D AREA 1 QM:UD2L EQU 12 LENGTH OF USER DEFINED AREA 2 QM:UDB2 EQU QM:UDB1+QM:UD1L USER DEFINABLE BLOCK 2 QM:SIZ EQU QM:UDB2+QM:UD2L LENGTH OF THE QMB * QMB: MACRO MACLAB #(-1) TSTART: QM:SIZ CHECKP: #(?),1,6 QM:EID WORD: #(2),0 QM:QID WORD: #(1) QM:MID WORD: #(3),0 QM:FLG WORD: #(5),0 QM:RQID WORD: #(4),0 QM:PRIO WORD: #(6),0 QM:CKW WORD: CKW:QM TEND: ENDM M M M M M M M M M M cates that SD:MAV is the upper limit * with no exception generated. When the limit is reached, further * signals wil TITL SEMAPHORE DEFINITION BLOCK - SDB.MAC - 84-94141-65 (A300) ************************************************************************ * * SEMAPHORE DEFINITION BLOCK * * +----------+ * 0 | SD:PER | Peer linkage * +----------+ * 1 | SD:FLG | Flag word * +----------+ * 2 | SD:ID | Semaphore ID word *  +----------+ * 3 | 0 | Reserved * +----------+ * 4 | 0 | Reserved *  +----------+ * 5 | SD:INV | Initial count * +----------+ * 6 | SD:MAV | Maximum count * +----------+ * 7 | SD:CKW | Semaphore check word * +----------+ * * SD:PER - Peer link to next SDB. * * SD:FLG - Semaphore attributes. * * Bits 15-2 - Reserved. * * Bit 1 (SDF:NEX) - Indicates that SD:MAV is the upper limit * with no exception generated. When the limit is reached, further * signals will be ignored. If clear, then an exception is generated * if the upper limit is exceeded. * * Bit 0 (SDF:EV) - Designates an event Semaphore. In this * case a signal with Activities waiting will release all of them. * If clear, this is a regular Semaphore. A signal with Activities * waiting causes only the highest priority Activity * that has been waiting in the list the longest to be released. * * SD:ID - Semaphore ID. Must be unique within an Environment. * If zero, the system will supply an ID and return it in this word. * * SD:INV - Initial count of Semaphore. * * SD:MAV - Maximum or limit count. * * SD:CKW - Table check word. * ************************************************************************ SD:PER EQU 0 PEER LINK SD:FLG EQU 1 FLAG WORD SD:ID EQU 2 SEMAPHORE IDENTIFIER SD:INV EQU 5 INITIAL VALUE SD:MAV EQU 6 MAXIMUM VALUE SD:CKW EQU 7 CHECK WORD SD:SIZ EQU 8 TABLE SIZE * * FLAG WORD (SD:FLG) * SDF:NEX EQU :0002 NO EXCEPTION ON LIMIT SDF:EV EQU :0001 EVENT SEMAPHORE * SDB: MACRO 1 MACLAB SDB:P MACENT 0 MACLAB #(-1) TSTART: SD:SIZ CHECKP: #(?),0,4 SD:PER PEER: SDB:,#(0) SD:FLG WORD: #(4),0 SD:ID WORD: #(1),0 SD:INV WORD: #(2),0 SD:MAV WORD: #(3),:7FFF SD:CKW WORD: CKW:SD TEND: ENDM M M M M nvironment identifier of the Environment owning * access to the shared memory region. * * SH:ID - Identifier of the shared memory region. This is the * id given to it by the original SMD. * * SH:FLG - Access flags. Same as SM:FLG in the Sha TITL SHARE PARAMETER BLOCK - SHARE.MAC - 84-94141-66 (A300) *************************************************************************** * * SHARE PARAMETER BLOCK * * +----------+ * 0 | 0 | Reserved * +----------+  * 1 | SH:FLG | Flag word * +----------+ * 2 | SH:ID | SMD identifier * +----------+ * 3 | SH:EID | Environment ID * +----------+ * 4 | SH:OFF | Offset into region * +----------+ * 5 | SH:LOW | Low address * +----------+ * 6 | SH:HIGH | High address * +----------+ * 7 | SH:CKW | Table check word * +----------+ * * SH:EID - Environment identifier of the Environment owning * access to the shared memory region. * * SH:ID - Identifier of the shared memory region. This is the * id given to it by the original SMD. * * SH:FLG - Access flags. Same as SM:FLG in the Shared memory * Definition block (SMD). * * SH:OFF - Offset in words (must be low page boundary) into * the region to be mapped in. This allows part of a shared memory * region to be mapped in. * * SH:LOW - Low logical memory address where the shared region is to be * mapped * into. * This must be the low address of a page. * * SH:HIGH - This is the high logical memory address where the shared region * is to be mapped into. * This must be the high address of a page. * * SH:CKW - Table check word. * *************************************************************************** SH:FLG EQU 1 FLAG WORD SH:ID EQU 2 IDENTIFIER SH:EID EQU 3 ENVIRONMENT ID SH:OFF EQU 4 OFFSET SH:LOW EQU 5 LOW LOGICAL ADDRESS SH:HIGH EQU 6 HIGH LOGICAL ADDRESS SH:CKW EQU 7 CHECK WORD SH:SIZ EQU 8 TABLE SIZE * * FLAG WORD (SH:FLG) * SHF:ACC EQU :3000 ACCESS FLAGS * SHARE: MACRO MACLAB #(-1) TSTART: SH:SIZ CHECKP: #(?),3,6 SH:FLG WORD: #(6),0 SH:ID WORD: #(1),0 SH:EID WORD: #(2),0 SH:OFF WORD: #(5),0 SH:LOW WORD: #(3) SH:HIGH WORD: #(4),0 SH:CKW WORD: CKW:SH TEND: ENDM M M M M M M M M M M M M M M M M M M M M M M M M emory * +----------+ * 7 | SM:CKW | Table check word * +----------+ * * SM:PER - Peer link to other SMD* s. * * SM:FLG - Shared region attribute flags. * * Bits 15-2 - Reserved. * * Bit 1 (SMF:SM) - Subordinates can map in this region * * Bit 0 (SMF:PM) - Peers can map in this region * * SM:ID - ident TITL SHARED MEMORY DEFINITION BLOCK - SMD.MAC - 84-94141-67 (A300) *************************************************************************** * * SHARED MEMORY DEFINITION BLOCK * * +----------+ * 0 | SM:PER | Peer link *  +----------+ * 1 | SM:FLG | Flag word * +----------+ * 2 | SM:ID | Identifier *  +----------+ * 3 | 0 | Reserved * +----------+ * 4 | 0 | Reserved *  +----------+ * 5 | SM:LOW | Low address * +----------+ * 6 | SM:HIGH | High memory * +----------+ * 7 | SM:CKW | Table check word * +----------+ * * SM:PER - Peer link to other SMD* s. * * SM:FLG - Shared region attribute flags. * * Bits 15-2 - Reserved. * * Bit 1 (SMF:SM) - Subordinates can map in this region * * Bit 0 (SMF:PM) - Peers can map in this region * * SM:ID - ident ifier assigned to the shared memory region. * All SMD ids must be unique within an Environment. * If zero or negative, the system will supply an ID and return it here. * * SM:LOW - Low logical memory address of the shareable region. * This address must be on a page (1K) boundary. * * SM:HIGH - High logical memory address of the shareable region. * This address must be the last word of a memory page. * * SM:CKW - Table check word. * *************************************************************************** SM:PER EQU 0 PEER LINK SM:FLG EQU 1 FLAG WORD SM:ID EQU 2 IDENTIFIER SM:LOW EQU 5 LOW LOGICAL ADDRESS SM:HIGH EQU 6 HIGH LOGICAL ADDRESS SM:CKW EQU 7 CHECK WORD SM:SIZ EQU 8 * * FLAG WORD (SM:FLG) * SMF:ACC EQU :3000 ACCESS FLAGS SMF:SM EQU :0002 SUBORDINATE ENVIRONMENTS CAN MAPIN SMF:PM EQU :0001 PEER ENVIRONMENTS CAN MAPIN * SMD: MACRO 1 MACLAB SMD:P MACENT 0 MACLAB #(-1) TSTART: SM:SIZ CHECKP: #(?),2,4 SM:PER PEER: SMD:,#(0) SM:FLG WORD: #(4),0 SM:ID WORD: #(1),0 SM:LOW WORD: #(2) SM:HIGH WORD: #(3),#(2)+:3FF SM:CKW WORD: CKW:SM TEND: ENDM M M M M M M M M M M M M M M M M M M M M M M M M M M M M M --+ * 7 | TD:P | Start address * +----------+ * 8 | TD:QDB | QDB address *  +----------+ * 9 | TD:ID | Task ID * +----------+ * A | 0 | Reserved *  +----------+ * B | TD:CKW | Table check word * +----------+ * * TD:PER - Peer link to other Task TITL TASK DEFINITION BLOCK - TDB.MAC - 84-94141-68 (A300) ************************************************************************** * * +----------+ * 0 | TD:PER | Peer link * +----------+ * 1 | TD:FLG |  Flag word * +----------+ * 2 | 0 | Reserved * +----------+ * 3 | TD:NOX  | Concurrent executions * +----------+ * 4 | TD:Y | Y-scratchpad * +----------+ *  5 | TD:AD | Stack address * +----------+ * 6 | TD:AMT | Stack size * +----------+ * 7 | TD:P | Start address * +----------+ * 8 | TD:QDB | QDB address *  +----------+ * 9 | TD:ID | Task ID * +----------+ * A | 0 | Reserved *  +----------+ * B | TD:CKW | Table check word * +----------+ * * TD:PER - Peer link to other Task Definition Blocks. * * TD:FLG - Flag word. This word contains Task attribute flags. * * Bit 15 (TDF:IY) - Initialized Y-scratchpad. * If set, indicates automatic Y-scratchpad initialization * using template expansion. * * Bits 14-2 - Reserved. * * Bit 1 (TDF:CG4R) - If set, this is a rommable BCPL task. * Bit 0 (TDF:BCPL) - If set, indicates this is a NonROM task. * * TD:ID - The Task ID. * In most applications where the TDB is static, the address of the *  TDB can be used for the ID. If the ID is zero, the system * will supply an ID and return it in this word. * * TD:NOX - Maximum number of concurrent executions permitted. * * TD:Y - Number of Y-scratchpad required by the Activity. If zero, *   the Y-register of the Activity starting the new Activity is used. * If Bit 15 of TD:FLG is set, then this word is a template * pointer. * * TD:AD - Address of a fixed stack (serial Tasks only). If zero, * the stack is dynamically allocated from the EMP for * each Activity of the Task. * * TD:AMT - This word is the stack size in words. * * TD:P - The address of the first executable instruction for the Task. * * TD:QDB - Address of Queue Definition Block. If supplied (non-zero), * indicates that a Queue is to be created for each Activity. * * TD:CKW - Table check word. * ************************************************************************** * * TASK DEFINITION BLOCK EQUATES * TD:PER EQU 0 PEER LINK TD:FLG EQU 1 FLAG WORD TD:NOX EQU 3 NUMBER OF CONCURRENT EXECUTIONS TD:Y EQU 4 Y SCRATCHPAD TD:AD EQU 5 STACK ADDRESS TD:AMT EQU 6 STCK SIZE TD:P EQU 7 START ADDRESS TD:ID EQU 9 ID OF TCB (IF ZERO, ASSIGNED AUTOMATICALLY & RETURNED) TD:QDB EQU :A QDB ADDRESS TD:CKW EQU :B CHECKWORD TD:SIZ EQU :C SIZE OF TDB * * FLAG WORD (TD:FLG) * TDF:IY EQU :8000 INITIALIZED Y-SCRATCH TDF:BCPL EQU 1 BIT 0=1 MEANS ACTIVITY TO BE BEGUN IS A BCPL ACTIVITY TDF:CG4R EQU 2 BIT 1 ROMMABLE CG4 ACTIVITY TO BE STARTED TDF:ASA EQU 128 BIT 7=1 MEANS THAT TASK IS FOR ALWAYS-SYSTEM-ACTIVITIES * TDB: MACRO 1 * * TDB MACRO DEFINITION * * CALLING SEQUENCE: * *  TDBLABEL TDB: P1,P2,...,P8 * * P(-1) = LABEL TO BE ASSOCIATED WITH THE TDB * P1 = ID OF THE TCB (DEFAULTS TO 0) * P2 = TASK START ADDRESS * P3 = AMOUNT OF "Y" SCRATCH (DEFAULTS TO 0, NO "Y" SCRATCH. *  "*" FOR PRE-INITIALIZED "Y" SCRATCH) * P4 = STACK ADDRESS (DEFAULTS TO 0, DYNAMIC ALLOCATION) * P5 = STACK SIZE IN WORDS * P6 = FLAG WORD * P7 = NUMBER OF CONCURRENT EXECUTIONS (DEFAULTS TO 1) * P8 = QDB ADDRESS (DEFAULTS TO 0) * * MACLAB TDB:P MACENT 0 MACLAB #(-1) TSTART: TD:SIZ CHECKP: #(?),4,8 TD:PER PEER: R:TDBL,#(0) IFT #(3,?)=1&#(3,'*') TASK #(-1) NAM #(-1) TD:FLG WORD: #(6)+TDF:IY TD:Y ORG: TEMPLATE #(-1) ENDC IFF #(3,?)=1&#(3,'*') TD:FLG WORD: #(6),0 TD:Y WORD: #(3),0 ENDC TD:NOX WORD: #(7),1 TD:AD WORD: #(4),0 TD:AMT WORD: #(5) TD:P WORD: #(2) TD:ID WORD: #(1),0 TD:QDB WORD: #(8),0 TD:CKW WORD: CKW:TD TEND: ENDM B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B PARAMETER LIST CKW:MD EQU :AB07 MAILBOX DEFINITION BLOCK CKW:ML EQU :AB08 MAILBOX PARAMETER LIST CKW:SD EQU :AB09 SEMAPHORE DEFINITION BLOCK CKW:QD EQU :AB0A QUEUE DEFINITION BLOCK CKW:QM EQU :AB0B QUEUE MESSAGE BLOCK CKW:CL EQU :AB0C CLOCK PARAMETER LIST CKW:XI EQU :AB0D EXCEPTION INFORMATION BLOCK CKW:XV EQU :AB0E EXCEPTION VECTOR TABLE CKW:LD EQU :AB0F OBJECT LOAD PARAMETER LIS TITL USER COMMON DEFINITIONS - USERCOMMON.MAC - 84-94141-69 (B012) * * THIS FILE CONTAINS COMMON MACROS REQUIRED * BY THE SET OF TABLE GENERATION MACROS * CONTAINED IN EACH TABLE DEFINITION FILE * SELF: EQU 0 MY ENVIRONMENT PARENT: EQU -1 MY PARENT ENVIRONMENT * * TABLE CHECK WORD VALUE DEFINITIONS * CKW:ED EQU :AB00 ENVIRONMENT DEFINITION BLOCK CKW:ER EQU :AB01 ENVIRONMENT RESOURCE BLOCK CKW:EL EQU :AB02 ENVIRONMENT LOAD PARAMETER LIST CKW:SM EQU :AB03 SHARED MEMORY DEFINITION BLOCK CKW:SH EQU :AB04 SHARE  PARAMETER LIST CKW:TD EQU :F01E TASK DEFINITION BLOCK - FOR COMPATIBILTIY WITH FORTRAN COMPILER CKW:BG EQU :AB06 BEGIN ACTIVITY PARAMETER LIST CKW:MD EQU :AB07 MAILBOX DEFINITION BLOCK CKW:ML EQU :AB08 MAILBOX PARAMETER LIST CKW:SD EQU :AB09 SEMAPHORE DEFINITION BLOCK CKW:QD EQU :AB0A QUEUE DEFINITION BLOCK CKW:QM EQU :AB0B QUEUE MESSAGE BLOCK CKW:CL EQU :AB0C CLOCK PARAMETER LIST CKW:XI EQU :AB0D EXCEPTION INFORMATION BLOCK CKW:XV EQU :AB0E EXCEPTION VECTOR TABLE CKW:LD EQU :AB0F OBJECT LOAD PARAMETER LIST CKW:MV EQU :AB10 MOVE PARAMETER BLOCK CKW:IO EQU :AB11 IOB PARAMETER BLOCK CKW:FDB EQU :AB12 C:IO FILE DESCRIPTION BLOCK CKW:LA EQU :AB13 LUN ATTRIBUTE BLOCK CHECKWORD CKW:GF EQU :AB14 GET FILE NAME PARAMETER BLOCK CKW:IS EQU :AB15 INPUT SYMBOL PARAMETER BLOCK CKW CKW:FI EQU :AB16 FIB PARAMETER BLOCK CKW:DI EQU CKW:FI DIB PARAMETER BLOCK CKW:LI EQU CKW:FI LIB PARAMETER BLOCK CKW:OV EQU :AB17 OVL PARAMETER BLOCK * * DEFINE THE EQUATES FOR THE MACHINE STATUS REGISTER BITS * CY: EQU 0 CARRY BIT OV: EQU 1 OVERFLOW BIT BY: EQU 2 BYTE MODE BIT CI: EQU 4 CONSOLE INTERRUPT ENABLE BIT RI: EQU 5 REAL-TIME CLOCK ENABLE BIT XA: EQU 6 EXTENDED ADDRESSING ENABLE BIT INT: EQU 8 INTERRUPT ENABLE BIT UM: EQU 10 USER MODE BIT UP: EQU 11 USER PROTECT BIT * * SYSTEM SERVICE (STRAP) MACRO * * #(0) DEFINITION: CPNN * C - STRAP CODE FIELD (BITS 14-13) * 0 - STANDARD R: AND I: SERVICES * 1 - PRIVILEGED S: SERVICES * 2 - USER DEFINED SERVICES * 3 - STRAP EXCEPTION * P - OPERAND FLAG * 0 - NO OPERAND ON SERVICE * 1 - SERVICE REQUIRES OPERAND * NN - STRAP NUMBER (1-254) * * STANDARD R: AND I: SERVICES * R:LDENV MACRO 0101 R:DSENV MACENT 0102 R:SUENV MACENT 0103 R:REENV MACENT 0104 R:GERI MACENT 0105 R:CRSMR MACENT 0106 R:MAPIN MACENT 0107 R:UNMAP MACENT 0108 R:CRTASK MACENT 0109 R:DSTASK MACENT 010A R:BGIN MACENT 010B R:END MACENT 000C R:GPRI MACENT 000D R:SPRI MACENT 010E R:PAUS MACENT 010F R:CRSEM MACENT 0110 R:DSSEM MACENT 0111 R:SIG MACENT 0112 R:WAIT MACENT 0113 R:WAITR MACENT 0114 R:CRMBX MACENT 0115 R:DSMBX MACENT 0116 R:SEND MACENT 0117 R:SENDR MACENT 0118 R:RECV MACENT 0119 R:RECVR MACENT 011A R:CRQ MACENT 011B R:DSQ MACENT 011C R:QPUT MACENT 011D R:QPUTR MACENT 011E R:QGET MACENT 011F R:QGETR MACENT 0120 I:GLA MACENT 0121 I:SLA MACENT 0122 R:QACK MACENT 0123 R:ITIC MACENT 0124 R:MTIC MACENT 0125 R:CTIC MACENT 0126 R:AWAL MACENT 0127 R:IWAL MACENT 0128 R:CWAL MACENT 0129 R:GTOD MACENT 002A R:STOD MACENT 002B R:CDOW MACENT 002C R:CTODA MACENT 012D R:CATOD MACENT 012E R:GSTOD MACENT 002F R:SSTOD MACENT 0030 R:GELT MACENT 0031 R:GEXT MACENT 0032 R:ABUF MACENT 0133 R:PBUF MACENT 0134 R:RBUF MACENT 0135 I:IO MACENT 0136 I:IOR MACENT 0137 I:LOAD MACENT 0138 R:DSSMR MACENT 0139 I:OVL MACENT 013A I:DEVUP MACENT 013B I:DEVDN MACENT 013C I:GFN MACENT 013D R:UEX MACENT 013E R:REX MACENT 003F R:PUNT MACENT 0040 R:WEX MACENT 0041 R:ABUFW MACENT 0142 R:CFREQ MACENT 0043 I:ISM MACENT 0144 R:UID MACENT 0045 R:MOVE MACENT 0146 * * PRIVILEGED S: SERVICES * S:MOVE MACENT 1101 S:UID MACENT 1102 S:SSIG MACENT 1103 S:SWAIT MACENT 1104 S:THREAD MACENT 1105 S:UNTHRD MACENT 1106 S:FECBS MACENT 1107 S:READMZ MACENT 1008 S:GETDMA MACENT 1009 S:RETDMA MACENT 100A S:XNXA MACENT 100B C:IO MACENT 1111 CHECKP: #(?),#(0,2,2),#(0,2,2) I:: SET #(1,'*')=1 J:: SET I::+1 K :: SET #(1,'(')-1 IFT K::<0 K:: SET #(1,?) ENDC L:: SET K::+1 SYSTRAP: #(0,1,1)%14+:1A00+:#(0,3,4),I::,#(1,J::,K::),#(1,L::,99) ENDM SYSTRAP: MACRO M:: SET 0 IFT #(2) M:: SET M::+2 ENDC IFT #(4,'K') M:: SET M::+8 ENDC IFT #(4,'Y') M:: SET M::+4 ENDC IFT #(4,'X') M:: SET M::+1 ENDC IFF #(1)=:5A11 WORD #(1) ENDC IFT #(1)=:5A11 EXTR C:IO JSK C:IO ENDC WORD M:: IFT #(3,?) WORD #(3) ENDC IFF #(3,?) WORD 0 ENDC ENDM * WORD: MACRO WORD MACLAB DOUBLE: MACENT DOUBLE MACLAB BYTE: MACENT BYTE MACLAB CHAN: MACENT CHAN MACLAB HEAD: MACENT HEAD MACLAB D:: SET #(0,'DOUBLE') IFF T::+#(-1)=$ ORG T::+#(-1) ENDC IFF #(1,?)+#(2,?) IFF D:: WORD 0 ENDC IFT D:: DOUBLE 0 ENDC NOTE E,'*E*E*E*E* NON-OPTIONAL PARAMETER MISSING FOR ##(-1) *E*E*E*E*' ENDC IFT #(1,?)+#(2,?) IFT #(1,?) #(0) #(1) ENDC IFF #(1,?) IFT D:: DOUBLE #(2) ENDC IFF D:: WORD #(2) ENDC ENDC ENDC ENDM * ORG: MACRO MACLAB IFF T::+#(-1)=$ ORG T::+#(-1) ENDC ENDM * EQU: MACRO EQU MACLAB SET: MACENT SET MACLAB IFF #(1,?)+#(2,?) #(-1) #(0) 0 NOTE E,'*E*E*E*E* NON-OPTIONAL PARAMETER MISSING FOR ##(-1) *E*E*E*E*' ENDC IFT #(1,?)+#(2,?) IFT #(1,?) #(-1) #(0) #(1) ENDC IFF #(1,?) #(-1) #(0) #(2) ENDC ENDC ENDM * EXTR: MACRO MACLAB EXTR #(1) #(-1) WORD: #(1),#(2) ENDM * PEER: MACRO MACLAB IFT #(2) #(-1) CHAN: #(1) ENDC IFF #(2) WORD 0 ENDC ENDM * TEND: MACRO IFF $=E:: ORG E:: ENDC ENDM * CHECKP: MACRO IFT #(1)<#(2) NOTE W,'*W*W*W*W* MUST HAVE AT LEAST ##(2) PARAMETERS *W*W*W*W*' ENDC IFT #(1)>#(3) NOTE W,'*W*W*W*W* CANNOT HAVE MORE THAN ##(3) PARAMETERS *W*W*W*W*' ENDC ENDM * * * DEFINE A TABLE MACRO * DEFINE A SYSTEM TABLE MACRO * * CALLING SEQUENCE: * * LABEL STABLE: P1,P2 * * P1 = THE SIZE OF THE TABLE IN WORDS (EXCLUDING THE CHECKWORD) * P2 = THE TABLE CHECKWORD (PUT INTO TBLNAME-1) * * STSTART: MACRO 0 MACLAB TSTART: MACENT 1 MACLAB IFF #(0) WORD #(2) ENDC T:: SET $ #(-1) RES #(1),0 E:: SET $ ENDM * O O O O O O O O O O O O O O O O OLAS, which can also be discovered by R:GERI may * help to pin down the location of the offending Envt. * This word is also useful in bug reports. * * XI:INST - The last known instruction executed by the * offender. In the case of a system service, it TITL EXCEPTION INFORMATION BLOCK - XIB.MAC - 84-94142-60 (A300) * * EXCEPTION INFORMATION BLOCK * * This block is returned on the K/L stack when an exception * occurs. The block is available to vectored exceptions or * R:WEX waited handling exceptions. * * Description of the words: * * XI:ERR - CARTOS standard error code. (0<) * * XI:FLG - None currently defined (but we'll keep looking!) * * XI:XID - A temporary ID assigned to the Activity which * caused the exception so that more that one Activity * may do an R:REX without confusion. * * XI:EID - Environment ID of the Activity that caused the * exception. This is zero if the activity resides in the * same Envt as the XIB is put. * * XI:LAS - As Envt ids aren't unique throughout the system, * the LAS, which can also be discovered by R:GERI may * help to pin down the location of the offending Envt. * This word is also useful in bug reports. * * XI:INST - The last known instruction executed by the * offender. In the case of a system service, it  is * the STRAP. * * XI:EA - The effective address calculated by the system * in response to a service request (eg R:CRSMR *14(K,X)). * This should be examined to see if you and the system * agree on where your blocks are located (eg for checkword errors). * * XI:CKW - This word is set up before either a vectored Activity * is freed or an R:WEXed Activity is activated. In either case, * when an R:REX is done, this word is examined and if correct, * the new context values (below) are given back to the hopefully * mended Activity. * * XI:A,Q,X,Y,K,L,S,P,SN - The context of the Activity at * the time of errors. For system service related error, * this is the context at the time of the service request. * See XI:CKW for other uses of this area. * XI:ERR EQU 0 EXCEPTION ERROR CODE XI:FLG EQU 1 FLAG WORD XI:XID EQU 2 EXCEPTION ID XI:EID EQU 3 ENVIRONMENT ID XI:LAS EQU 4 LOGICAL ADDRESS SPACE NUMBER XI:INST EQU 5 INSTRUCTION XI:EA EQU 6 EFFECTIVE ADDRESS XI:CKW EQU :A TABLE CHECK WORD XI:P EQU :B P REGISTER XI:L EQU :C L REGISTER XI:S EQU :D S REGISTER XI:A EQU :E A REGISTER XI:Q EQU :F Q REGISTER XI:X EQU :10 X REGISTER XI:Y EQU :11 Y REGISTER XI:K EQU :12 K REGISTER XI:SIZ EQU :13 BLOCK LENGTH e e e e e e e e e e e e e e e e e e e e e e e e e e eORD XV:STK EQU 4 ADDRESS OF FIXED STACK XV:STKS EQU 5 FIXED STACK SIZE XV:CKW EQU 7 TABLE CHECK WORD XV:MODE EQU 8 CLASS 0 MODE XV:ADDR EQU 9 CLASS 0 ADDRESS XV:SIZ EQU XV:CKW+33 TABLE SIZE * * FLAGS * * flag explanation * * FSIU - This bit is on if XV:STK TITL EXCEPTION VECTOR TABLE - XVT.MAC - 84-94142-61 (A311) * * EXCEPTION VECTOR TABLE (XVT) * * NOTE: THIS TABLE IS 40 WORDS LONG. WORDS * 8-39 CONSIST OF 16 TWO WORD ENTRIES; ONE * FOR EACH CLASS OF EXCEPTION. * OFFSET OF MODE WORD IS XV:MODE+(C*2) WHERE C=CLASS * OFFSET OF ADDRESS IS XV:ADDR+(C*2) * * Definition of words 0-7: * * XI:FLG - Flag word. Bits defined below. Unused bits should be * zero to remain upward compatible with updates to CA softare. * * XV:STK and XV:STKS - location and size of a fixed size * stack used to store an XIB (eXception Information Block) * when the excepting Activities stack is too small. Only * one Activity may use the XV:STK at a time, regardless of * size. * * see note above for words 8-33 * XV:FLG EQU 1 FLAG WORD XV:STK EQU 4 ADDRESS OF FIXED STACK XV:STKS EQU 5 FIXED STACK SIZE XV:CKW EQU 7 TABLE CHECK WORD XV:MODE EQU 8 CLASS 0 MODE XV:ADDR EQU 9 CLASS 0 ADDRESS XV:SIZ EQU XV:CKW+33 TABLE SIZE * * FLAGS * XVF:FSIU EQU 1 FIXED STACK (XV:STK) IN USE XVM:FSIU EQU 1%XVF:FSIU MASK * * MASKS * * Mode mask explinations: * * PUNT - This bit is set if a class of exceptions is to be * given to a parent Environment to handle. Drastic actions * are taken (System Exception) if an exception is PUNTed * to the parent. In other words, be very careful when PUNTing * in your own end zone! * * PE - Process exception bit - The address word is substituted * for the Activities -P- at the time of the exception * after an XIB is stored on the K/L * stack, and the Activity freed. The net result is that the * Activity ends up at the Address location with an XIB * holding its former context. * XVM:PUNB EQU 5 PUNT FLAG BIT POSITION XVM:PUNT EQU 1%XVM:PUNB AND MASK XVM:PEB EQU 0 PROCESS EXCEPTION BIT POSITION XVM:PE EQU 1%XVM:PE B AND MASK XVT: MACRO MACLAB #(-1) TSTART: XV:SIZ CHECKP: #(?),0,5 IFT #(1,?) NOTE W,' XV:BUG OPTION NO LONGER AVAILABLE *W*W*W*W*W*W*W*W*W*' ENDC XV:STK WORD: #(2),0 XV:STKS WORD: #(3),0 XV:CKW WORD: CKW:XV XVT:TF 0,#(4),#(5) XVT:TF 1,#(4),#(5) XVT:TF 2,#(4),#(5) XVT:TF 3,#(4),#(5) XVT:TF 4,#(4),#(5) XVT:TF 5,#(4),#(5) XVT:TF 6,#(4),#(5) XVT:TF 7,#(4),#(5) XVT:TF 8,#(4),#(5) XVT:TF 9,#(4),#(5) XVT:TF 10,#(4),#(5) XVT:TF 11,#(4),#(5) XVT:TF 12,#(4),#(5) XVT:TF 13,#(4),#(5) XVT:TF 14,#(4),#(5) XVT:TF 15,#(4),#(5) TEND: ENDM * * XVT:TF MACRO * * Uses numbers (:0 thru :F) to insert * information in the current XVT * XVT:TF MACRO MACLAB CHECKP: #(?),2,3 XVT:: SET #(1)*2+XV:MODE XVT:: WORD: #(2),XVM:PUNT IFT #(-1,?) #(-1) EQU $-1 ENDC XVT:: SET #(1)*2+XV:ADDR XVT:: WORD: #(3),0 ENDM * * XVT:E macro * * Uses Error class equates to * insert information into XVTs * XVT:E MACRO MACLAB CHECKP: #(?),2,3 XVT:: SET #(1)%-X:CLSSFT*2+XV:MODE XVT:: WORD: #(2) IFT #(-1,?) #(-1) EQU $-1 ENDC XVT:: SET #(1)*2%-11+XV:ADDR XVT:: WORD: #(3),0 TEND: ENDM IS SET TO A "1" IF THE STATUS BEING * RETURNED IS AN ERROR. IF THE STATUS IS MEANT TO BE JUST * A STATUS AND NOT  TITL CARTOS EXCEPTION CODE EQUATES - X:COMMON.MAC - 84-94143-60 (B007) * * ********************************************************************** * * SYSTEM EXCEPTION AND ERROR CODE DEFINITIONS. * * SYSTEM EXCEPTIONS CURRENTLY CAUSE THE SYSTEM TO HALT WITH THE * ERROR CODE CORRESPONDING TO THE TYPE OF EXCEPTION IN THE * CONSOLE DISPLAY REGISTER. * * THE SYSTEM-WIDE ERROR CODE WORD IS DEFINED BELOW: * * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * | F | E | D | C | B | A | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * \./ \............./ \............................./ * | | | * ERROR EXCEPTION CLASS * BIT CLASS DEFINABLE * * * ERROR BIT - THIS BIT IS SET TO A "1" IF THE STATUS BEING * RETURNED IS AN ERROR. IF THE STATUS IS MEANT TO BE JUST * A STATUS AND NOT AN ERROR, THIS BIT SHOULD BE A "0". * * EXCEPTION CLASS - THIS 4-BIT FIELD DEFINES THE CLASS OF * EXCEPTION THAT *  OCCURRED. THE CLASSES OF ERRORS ARE AS FOLLOWS: * * 0 = INPUT/OUTPUT EXCEPTION INCLUDING FILE MANAGER EXCEPTION. * 1 = REAL-TIME SERVICE EXCEPTION (CLOCK, SEMA4, QUEUE, ETC.). * 2 = ENVIRONMENT MANAGEMENT EXCEPTION (S:CREA, ETC.). * 3 = MEMORY MANAGEMENT EXCEPTION. * 4 = STRAP EXCEPTION. * 5 = UTRAP EXCEPTION. * 6 = HARDWARE EXCEPTION. * 7 = USER EXCEPTION. * 8 = BREAK EXCEPTION. * 9 = "I:" SERVICE ERROR. *  15 = SYSTEM EXCEPTION. * * CLASS DEFINABLE - THE LOW ORDER 8 BITS OF THE STATUS WORD * ARE USED AS A CLASS DEFINABLE FIELD. THAT IS, EACH OF THE * CLASSES OF EXCEPTIONS MAY USE THIS FIELD TO FURTHER DEFINE THE * SPECIFIC ERROR THAT OCCURRED WITHIN THAT CLASS. THE 8 BITS * MAY BE BROKEN UP IN ANY WAY SUITABLE TO THAT CLASS OR MAY * BE USED  AS ONE 8-BIT FIELD. * ********************************************************************** * * DEFINE THE GENERAL ERROR CODE WORD BIT FIELD MASKS * X:ERRORM EQU :8000 ERROR BIT FIELD MASK X:CLASSM EQU :7800 EXCEPTION CLASS FIELD MASK X:DEFINM EQU :00FF CLASS DEFINABLE FIELD MASK X:CLSSFT EQU 11 SHIFT VALUE TO GET ERROR CLASS INTO BITS 0-3 * * DEFINE THE POSSIBLE ERROR BIT FIELD VALUES * X:ERROR EQU :8000 ERROR STATUS WORD INDICATOR X:STAT EQU 0 NON-ERROR STATUS WORD INDICATOR * * DEFINE THE POSSIBLE EXCEPTION CLASS FIELD VALUES * X:IOERR EQU 0 INPUT/OUTPUT OR FILE MANAGER EXCEPTION CLASS X:REALTM EQU :0800 REAL-TIME SERVICE EXCEPTION CLASS X:ENV EQU :1000 ENVIRONMENT MANAGEMENT EXCEPTION CLASS X:MEM EQU :1800 MEMORY MANAGEMENT EXCEPTION CLASS X:STRAP EQU :2000 STRAP EXCEPTION CLASS -- TRAP # IN BOTTOM 8 BITS X:UTRAP EQU :2800 UTRAP EXCEPTION CLASS -- TRAP # IN BOTTOM 8 BITS X:HDW EQU :3000 HARDWARE EXCEPTION CLASS X:UEX EQU :3800 USER EXCEPTION CLASS X:BREAK EQU :4000 BREAK EXCEPTION CLASS -- CRT # IN BOTTOM 8 BITS X:IOSRVS EQU :4800 "I:" SERVICE ERROR CLASS X:SEXCP EQU :7800 SYSTEM EXCEPTION CLASS * * SEVERAL ERRORS ARE COMMON TO MANY OF THE SYSTEM * SERVICES. THESE HAVE BEEN ASSIGNED MASKS TO AID IN * DETECTION OF ERROR TYPE (EG. NO MORE SMALL BLOCKS) * THE FOLLOWING EQUATES ARE THESE MASKS: * IDBC: EQU 0 ILLEGAL DESCRIPTOR BLOCK CHECKWORD SBAL: EQU 1 SMALL BLOCK ALLOCATION LIMIT REACHED (NO MORE SMALL BLOCKS) MBAL: EQU 2 MEDIUM BLOCK LIMIT REACHED DUID: EQU 3 DUPLICATE ID REQUESTED EID: EQU 4 ILLEGAL OR MISSING ENVIRONMENT ID IID: EQU 5 ILLEGAL OR MISSING BLOCK ID UIMT: EQU 6 UNINSTALLED MEMORY TRAP (CAN'T GET BLOCK) * * FOR ERRORS IN THE I/O CLASS (0), THE ERROR CODE HAS THE FOLLOWING * FORMAT: * * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ * | E | X:IOERR | ERROR CLASS | ERROR CODE | *  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ * * E IS THE ERROR BIT. IF SET, THEN THE WORD REPRESENTS AN ERROR * CONDITION AND THE ABNORMAL RETURN IS USED. IF CLEAR, THEN * THE NORMAL RETURN IS USED IF ERROR CLASS AND ERROR CODE ARE BOTH * ZERO. OTHERWISE, THE ABNORMAL RETURN IS USED. * * X:IOERR IS THE EXEPTION CLASS FOR ALL I/O ERRORS. * * ERROR CLASS IS THE CLASS OF ERROR CODE FOR I/O EXCEPTIONS. * IF ZERO, THEN THE ERROR CODE IS NOT DEVICE SPECIFIC. IF NON-ZERO, * THEN ERROR CODE IS THE DEVICE CLASS. * * DEVICE CLASS DEFINITIONS * * CLASS 0 IS RESERVED FOR NON-DEVICE SPECIFIC ERROR CODES CLASS:FM EQU 1 CARTOS FILE MANAGER (CFM) CLASS:FH EQU 2 CFM DIRECTORY OR FLIST HARDWARE ERRORS COMMENT NOTE: CLASS:FH INDICATES THAT THE ERROR CODE IS COMMENT DEFINED BY CLASS:DK AND THAT THE ERROR OCCURED COMMENT IN A CONTROL STRUCTURE USED BY CFM. CLASS:DK EQU 3 HARD DISKS CLASS:DF EQU 4 FLEXIBLE DISKS CLASS:MT EQU 5 MAGNETIC TAPE CLASS:QT EQU 5 QIC STREAMER TAPE DRIVER CLASS:TV EQU 6 INTERACTIVE TERMINALS CLASS:LP EQU 7 LINE PRINTERS OR SPOOLERS CLASS:CR EQU 8 CARD READER CLASS:PT EQU 9 PAPER TAPE READER OR PUNCH CLASS:SY EQU 10 SYNCHRONOUS COMMUNICATIONS * * DEVICE CLASS MASK DEFINITIONS * CMASK:FM EQU CLASS:FM%7 CARTOS FILE MANAGER (CFM) CMASK:FH EQU CLASS:FH%7 CFM DIRECTORY OR FLIST HARDWARE ERRORS CMASK:DK EQU CLASS:DK%7 HARD DISKS CMASK:DF EQU  CLASS:DF%7 FLEXIBLE DISKS CMASK:MT EQU CLASS:MT%7 MAGNETIC TAPE CMASK:QT EQU CLASS:QT%7 QIC STREAMER TAPE CMASK:TV EQU CLASS:TV%7 INTERACTIVE TERMINALS CMASK:LP EQU CLASS:LP%7 LINE PRINTERS OR SPOOLERS CMASK:CR EQU CLASS:CR%7 CARD READER CMASK:PT EQU CLASS:PT%7 PAPER TAPE READER OR PUNCH CMASK:SY EQU CLASS:SY%7 SYNCHRONOUS COMMUNICATIONS * * I/O ERROR SKELETONS * X:IO EQU X:ERROR+X:IOERR COMMON ERROR MASK X:FM EQU CMASK:FM+X:ERROR+X:IOERR X:FH EQU CMASK:FH+X:ERROR+X:IOERR X:DK EQU CMASK:DK+X:ERROR+X:IOERR X:DF EQU CMASK:DF+X:ERROR+X:IOERR X:MT EQU CMASK:MT+X:ERROR+X:IOERR X:QT EQU CMASK:QT+X:ERROR+X:IOERR X:TV EQU CMASK:TV+X:ERROR+X:IOERR X:LP EQU CMASK:LP+X:ERROR+X:IOERR X:CR EQU CMASK:CR+X:ERROR+X:IOERR X:PT EQU CMASK:PT+X:ERROR+X:IOERR X:SY EQU CMASK:SY+X:ERROR+X:IOERR IOBOF EQU X:IOERR+3 BEGINING OF FILE X:IOBOM EQU X:IOERR+4 BEGINING OF MEDIUM X:IOTFM EQU X:IOERR+5 TOP OF FORM X:IOBFM EQU X:IOERR+6 BOTTOM OF FORM * **** ABNORMAL CONDITIONS (BIT 15 SET) FOR DISK DEVICES (CLASS X:DK) * X:DKDRRT EQU X:STAT+CMASK:DK+1 RETRIES REQUIRED ON A DISK OPERATION * **** NON-DEVICE SPECIFIC ERROR CONDITIONS (BIT 15 SET) **** * X:IOIDBC EQU X:IO+IDBC: ILLEGA TITL EXCEPTION CLASS I/O ERRORS - X:IOERR - 84-94143-61 (B030) * * DEFINE THE I/O ERROR CLASS EQUATES * * THE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ * | E | X:IOERR | ERROR CLASS | ERROR CODE | * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ * * E IS THE ERROR BIT. IF SET, THEN THE WORD REPRESENTS AN ERROR * CONDITION AND THE ABNORMAL RETURN IS USED. IF CLEAR, THEN * THE NORMAL RETURN IS USED IF ERROR CLASS AND ERROR CODE ARE BOTH * ZERO. OTHERWISE, THE ABNORMAL RETURN IS USED. * * X:IOERR IS THE EXEPTION CLASS FOR ALL I/O ERRORS. * * ERROR CLASS IS THE CLASS OF ERROR CODE FOR I/O EXCEPTIONS. * IF ZERO, THEN THE ERROR CODE IS NOT DEVICE SPECIFIC. IF NON-ZERO, * THEN ERROR CODE IS DEVICE CLASS SPECIFIC. * IN THIS CASE, THE ERROR CLASS IS THE DEVICE CLASS. * * **** NORMAL I/O COMPLETION (BIT 15 CLEAR) **** * X:IONORM EQU X:STAT NORMAL I/O COMPLETION * **** ABNORMAL CONDITIONS (BIT 15 SET) **** * X:IOEOF EQU X:IOERR+1 END OF FILE X:IOEOM EQU X:IOERR+2 END OF MEDIUM OR END OF EXTENTS COMMENT FOR FILES X:IOBOF EQU X:IOERR+3 BEGINING OF FILE X:IOBOM EQU X:IOERR+4 BEGINING OF MEDIUM X:IOTFM EQU X:IOERR+5 TOP OF FORM X:IOBFM EQU X:IOERR+6 BOTTOM OF FORM * **** ABNORMAL CONDITIONS (BIT 15 SET) FOR DISK DEVICES (CLASS X:DK) * X:DKDRRT EQU X:STAT+CMASK:DK+1 RETRIES REQUIRED ON A DISK OPERATION * **** NON-DEVICE SPECIFIC ERROR CONDITIONS (BIT 15 SET) **** * X:IOIDBC EQU X:IO+IDBC: ILLEGAL I/O BLOCK CHECKWORD X:IOLNF EQU X:IO+1 LOGICAL UNIT NOT FOUND X:IONRDY EQU X:IO+2 NOT READY X:IOTOUT EQU X:IO+3 TIMEOUT X:IOPWRF EQU X:IO+4 POWER FAILED X:IOIOPR EQU X:IO+5 ILLEGAL OPERATION CODE X:IOIMOD EQU X:IO+6 ILLEGAL OPERATION MODIFIER X:IOLAE EQU X:IO+7 LOGICAL UNIT ALREADY EXISTS X:IODNP EQU X:IO+8 DEVICE NOT PRESENT OR FILE NOT FOUND X:IOCNP EQU X:IO+9 CONTROLLER NOT PRESENT X:IONOPN EQU X:IO+:A NOT OPEN X:IONCLS EQU X:IO+:B NOT CLOSED X:IONMTD EQU X:IO+:C NOT MOUNTED X:IODVDN EQU X:IO+:D DEVI CE IS DOWN X:IOPROT EQU X:IO+:E PROTECTION ERROR (WRITE OR FILE) X:IODIVA EQU X:IO+:F INVALID VOLUME NAME ADDRESS IN DIB X:IOPUNF EQU X:IO+:10 PHYSICAL UNIT NOT FOUND X:IONSHR EQU X:IO+:11 NOT SHAREABLE X:IOIUSE EQU X:IO+:12 ALREADY IN USE X:IOUNDH EQU X:IO+:13 UNDEFINED HARDWARE ERROR X:IOSBAL EQU X:IO+:14 NO MORE SMALL BLOCKS X:IOMBAL EQU X:IO+:15 NO MORE MEDIUM BLOCKS X:IONCON EQU X:IO+:16 NOT CONNECTED X:IODDBC EQU X:IO+:17 ILLEGAL DIB CHECKWORD X:IOADER EQU X:IO+:18 ILLEGAL IOB ADDRESS X:IOHLTD EQU X:IO+:19 I/O HALTED X:IODIBA EQU X:IO+:1A ILLEGAL DIB ADDRESS X:IODNF EQU X:IO+:1B DIRECTORY UNIT NOT FOUND X:IOENQL EQU X:IO+:1C  LUB ENQUEUE ERROR AFTER DISCONNECT FOR CONNECT X:IOECON EQU X:IO+:1D IMPLIED DISCONNECT FAILED DURING CONNECT COMMENT OLD LUB STILL EXISTS COMMENT DISCONNECT LUN TO FIND DISCONNECT ERROR CODE X:IODQER EQU X:IO+:1E LUB ENQUEUE OR DEQUEUE FAILED X:IOCONN EQU X:IO+:1F LUN CONNECTED TO MOUNTED LUN, DISMOUNT NOT ALLOWED X:IOMTDQ EQU X:IO+:20 FINDMARK OR DEQUEUE ERROR DURING MOUNT X:IOECBD EQU X:IO+:21 ECB IS BEING DESTROYED, IO NOT ALLOWED X:IOIPBE EQU X:IO+:22 QID FOR DISMOUNT NOT FOUND IN ANY IPB X:IOCLUN EQU X:IO+:23 USER MEMORY ERROR DURING DYNAMIC LUN COPY X:IORECE EQU X:IO+:24 DISCONNECT OF NEW LUB FAILED AFTER RECONNECT ERROR X:IOHIPB EQU X:IO+:25 HANDLER IPB NOT FOUND X:IOFMRQ EQU X:IO+:26 NON-MANAGER MOUNT REQUEST WITH MANAGER ALREADY MOUNTED X:IONFMR EQU X:IO+:27 MANAGER MOUNT REQUEST WITH NON-MANAGER ALREADY MOUNTED X:IOVNAM EQU X:IO+:28 ALREADY MOUNTED WITH DIFFERENT VOLUME NAME X:IOVNMA EQU X:IO+:29 NO VOLUME NAME ADDRESS IN DIB X:IODVNL EQU X:IO+:2A VOLUME NOT LABELED * **** ERROR CONDITIONS FROM THE CARTOS FILE MANAGER (CLASS:FM) **** * * GROUP 0 * FILE MANAGER GROUP 0 ERRORS INDICATE A CARTOS SYSTEM * ERROR. * X:FMFNDE EQU X:FM+1 F-ENTRY TO DEALLOCATE IS NOT IS USE X:FMFCUE EQU X:FM+2 INTERNAL FUNCTION CODE ERROR X:FMIOIE EQU X:FM+3 IOID IS UNKNOWN TO FILE MANAGER X:FMDIRE EQU X:FM+4 DIRECTORY HAS BEEN EXTENDED INCORRECTLY X:FMBLKE EQU X:FM+5 ADDRESS ERROR IN BLOCK DEALLOCATION X:FMAUDE EQU X:FM+6 AU TO DEALLOCATE IS NOT IN USE X:FMOCTE EQU X:FM+7 FAB OPEN, FDB OPEN COUNT = 0 * * GROUP 1 * FILE MANAGER GROUP 1 ERRORS INDICATE A DISK FORMAT ERROR. * X:FMFTYE EQU X:FM+:0010 F-ENTRY TYPE IS INVALID X:FMFRGE EQU X:FM+:0011 F-ENTRY NOT MAPPED BY FNO 2 X:FMFLKE EQU X:FM+:0012 F-ENTRY LINK WORD IS INCORRECT X:FMFNON EQU X:FM+:0013 F-ENTRY NUMBER NOT FOUND IN PARENT DIRECTORY * * GROUP 2 *  FILE MANAGER GROUP 2 ERRORS INDICATE A SPACE OR NAMING * RESTRICTION OF THE VOLUME OR A DIRECTORY IN THE VOLUME. * X:FMEOEX EQU X:FM+:0020 THE CFI IS BEYOND THE FILE EXTENT X:FMFNOX EQU X:FM+:0021 ALL AVAILABLE F-ENTRIES HAVE BEEN ALLOCATED X:FMEOV EQU X:FM+:0022 ALL AU'S ON THE VOLUME HAVE BEEN ALLOCATED X:FMNDIR EQU X:FM+:0023 DIRECTORY FUNCTION REQUESTED FOR NON-DIRECTORY FILE X:FMDNEM EQU X:FM+:0024 DELETE FILE REQUEST FOR NON-EMPTY DIRECTORY X:FMCONN EQU X:FM+:0025 DISMOUNT REQUEST WITH FILE CONNECT TO VOLUME X:FMDUPN EQU X:FM+:0026 FILE NAME ALREADY EXISTS X:FMUNKN EQU X:FM+:0027 FILE NAME NOT FOUND IN DIRECTORY X:FMDKID EQU X:FM+:0028 DISK ID INVALID; NOT SUPPORTED BY CARTOS X:FMNAMI EQU X:FM+:0029 FILE NAME CHAR ACTER STRING INVALID X:FMTCTI EQU X:FM+:002A BYTE COUNT IN TITLE BLOCK IS INVALID X:FMPUKN EQU X:FM+:002B PARENT FNO FOR FILE IS UNKNOWN X:FMEMPX EQU X:FM+:002C FILE MANAGER ENVIRONMENT MEMORY POOL EXHAUSTED X:FMISEC EQU X:FM+:002D ILLEGAL SECTOR NUMBER X:FMEXTI EQU X:FM+:002E FILE NAME EXTENSION .DIR USED INCORRECTLY X:FMLUNR EQU X:FM+:002F CANNOT DISMOUNT; LUN ASSIGNED TO ROOT * * GROUP 3 * FILE MANAGER GROUP 3 ERRORS INDICATE A FILE ACCESS ERROR, * USUALLY DUE TO AN INCONSISTANCY IN THE ACCESS REQUEST AND * THE FILE AS EXISTS ON THE DISK OR IN THE ACCESS REQUEST * AND THE OPEN OPERAND. * X:FMPROT EQU X:FM+:0031 FILE ACCESS REQUESTED IS NOT PERMITTED X:FMVWPR EQU X:FM+:0032 VOLUME PROTECT CODE PRECLUDES WRITE X:FMDIR EQU X:FM+:0033 OPERATION NOT PERMITTED FOR DIRECTORY X:FMEXUS EQU X:FM+:0034 EXCLUSIVE USE CONFLICT X:FMOPEN EQU X:FM+:0035 OPERATION NOT ALLOWED ON OPEN FILE X:FMNOPN EQU X:FM+:0036 OPERATION NOT ALLOWED UNLESS FILE IS OPEN X:FMACON EQU X:FM+:0037 ACCESS CONFLICT WITH OPEN PARAMETERS X:FMATYI EQU X:FM+:0038 FILE TYPE DOES NOT SUPPORT ACCESS TYPE X:FMCFII EQU X:FM+:0039 CFI IS INVALID, NOT GIVEN X:FMOPRI EQU X:FM+:003A IOB OPERAND IS INVALID FOR REQUESTED FUNCTION X:FMDMNT EQU X:FM+:003B MOUNT REQUEST FOR DISK ALREADY MOUNTED X:FMMODI EQU X:FM+:003C FUNCTION MODIFIER INVALID FOR OPERATION CODE X:FMCODI EQU X:FM+:003D OPERATION CODE INVALID X:FMCFLI EQU X:FM+:003E FLAG(S) IN FIB ARE INVALID X:FMFICK EQU X:FM+:003F FIB CHECKWORD INVALID X:FMMODE EQU X:FM+:0040 INVALID MODE BITS X:FMMTHD EQU X:FM+:0041 INVALID METHOD FOR OPEN X:FMFORM EQU X:FM+:0042 FILE FORMAT ERROR X:FMALLO EQU X:FM+:0043 NO ALLOCATION SPECIFIED WHEN CREATING FILE X:FMOPAC EQU X:FM+:0044  OPEN ACCESS CONFLICT WITH FILE ALREADY OPEN X:FMPASS EQU X:FM+:0045 ILLEGAL PASSWORD X:FMBLKS EQU X:FM+:0046 BLOCK SIZE INVALID FOR RECORD SIZE X:FMNCLD EQU X:FM+:0047 OPERATION INVALID FOR NON-CARTOS LABELED DISK X:CIOEMP EQU X:FM+:0048 NO EMP AVAILABLE FOR C:IO CALL * **** ERROR CONDITIONS FOR CFM DIRECTORY OR FLIST HARDWARE (CLASS:FH) **** * X:FHDR EQU X:FH+0 BASE VALUE OF THE DISK DRIVER ERRORS X:FHDH EQU X:FH+64 BASE VALUE OF THE DISK HANDLER ERRORS * **** ERROR CONDITIONS FOR THE DISK DRIVER (CLASS:FHDR) * X:FHERR SET X:FHDR+0 NO ID COMPARE X:FHERR SET X:FHDR+1 SYNC ERROR X:FHERR SET X:FHDR+2 FAULT X:FHERR SET X:FHDR+3 ID CRC ERROR X:FHERR SET X:FHDR+4 FORMAT ERROR X:FHERR SET X:FHDR+5 SEEK ERROR X:FHERR SET X:FHDR+6 DATA CRC ERROR X:FHERR SET X:FHDR+7 DATA RATE ERROR X:FHERR SET X:FHDR+8 DISK DRIVER "FUNNY" ERROR. INTERNAL COMMENT CODING ERROR IN DRIVER. NO ERROR COMMENT BITS ON IN THE CONTROLLER STATUS WORD COMMENT WHILE PROCESSING A DISK ERROR RETURN * **** ERROR CONDITIONS FOR THE DISK HANDLER (CLASS:FHDH) * X:FHERR SET X:FHDH+0 INVALID QUEUE ID GIVEN WHEN BEGUN X:FHERR SET X:FHDH+1 INVALID FUNCTION MODIFIER SPECIFIED X:FHERR SET X:FHDH+2 DISK NOT MOUNTED ERROR (FUNCTION ABORTED) X:FHERR SET X:FHDH+3 CFM: DISK MOUNTED FOR EU:, CANNOT BE MOUNTED SHR: X:FHERR SET X:FHDH+4 CFM: DISK MOUNTED SHR:, CANNOT BE MOUNTED EU: X:FHERR SET X:FHDH+5 FILE MANAGER RUNNING, CANNOT MOUNT WITHOUT FILE MANAGER X:FHERR SET X:FHDH+6 FILE MANAGER NOT RUNNING, CANNOT MOUNT WITH FILE MANAGER X:FHER  R SET X:FHDH+7 DISK ACCESS PROTECTION VIOLATION X:FHERR SET X:FHDH+8 INVALID FUNCTION CODE SPECIFIED X:FHERR SET X:FHDH+9 SPECIFIED CFI VALUE TOO LARGE FOR DISK X:FHERR SET X:FHDH+:A SPECIFIED BYTE COUNT TOO LARGE FOR ONE TRANSFER X:FHERR SET X:FHDH+:B INVALID FORMAT RSETEST (DISK IS NOT MOUNTED COMMENT FOR EXCLUSIVE USE. X:FHERR SET X:FHDH+:C INVALID DISK PARAMETERS IN DIB, IPB OR VCB. COMMENT EITHER IPB:LSPT OR IPB:LSPC IS ZERO. * **** ERROR CONDITIONS FOR DISK DEVICES (CLASS:DK) **** * X:DKDR EQU X:DK+0 BASE VALUE OF THE DISK DRIVER ERRORS X:DKDH EQU X:DK+64 BASE VALUE OF THE DISK HANDLER ERRORS * **** ERROR CONDITIONS FOR THE DISK DRIVER (CLASS:DKDR) * X:DKNOID EQU X:DKDR+0 CFM: NO ID COMPARE X:DKSYNC EQU X:DKDR+1 CFM: SYNC ERROR X:DKFALT EQU X:DKDR+2 CFM: FAULT X:DKICRC EQU X:DKDR+3 CFM: ID CRC ERROR X:DKFRMT EQU X:DKDR+4 CFM: FORMAT ERROR X:DKSEEK EQU X:DKDR+5 CFM: SEEK ERROR X:DKCRC EQU X:DKDR+6 CFM: DATA CRC ERROR X:DKRATE EQU X:DKDR+7 CFM: DATA RATE ERROR X:DKDRFY EQU X:DKDR+8 CFM: DISK DRIVER "FUNNY" ERROR. INTERNAL COMMENT CODING ERROR IN DRIVER. NO ERROR COMMENT BITS ON IN THE CONTROLLER STATUS WORD COMMENT WHILE PROCESSING A DISK ERROR RETURN X:DKNRDY EQU X:DKDR+9 CFM: CONTROLLER IS NOT READY X:DKDELE EQU X:DKDR+:A CFM: DELETED DATA (FLOPPY ONLY) X:DKINIT EQU X:DKDR+:B CFM: CONTROLLER ERROR DURING INITIALIZATION * **** ERROR CONDITIONS FOR THE DISK HANDLER (CLASS:DKDH) * X:DKDHIQ EQU X:DKDH+0 INVALID QUEUE ID GIVEN WHEN BEGUN X:DKDHME EQU X:DKDH+1 INVALID FUNCTION MODIFIER SPECIFIED X:DKDHMT EQU X:DKDH+2 DISK NOT MOUNTED ERROR (FUNCTION ABORTED) X:DKDHEU EQU X:DKDH+3 DISK MOUNTED FOR EU:, CANNOT BE MOUNTED SHR: X:DKDHSH EQU X:DKDH+4 DISK MOUNTED SHR:, CANNOT BE MOUNTED EU: X:DKDHFR EQU X:DKDH+5 FILE MANAGER RUNNING, CANNOT MOUNT WITHOUT FILE MANAGER X:DKDHNF EQU X:DKDH+6 FILE MANAGER NOT RUNNING, CANNOT MOUNT WITH FILE MANAGER X:DKDHAE EQU X:DKDH+7 DISK ACCESS PROTECTION VIOLATION X:DKDHFE EQU X:DKDH+8 INVALID FUNCTION CODE SPECIFIED X:DKDHIF EQU X:DKDH+:B INVALID FORMAT REQUEST (DISK IS NOT MOUNTED COMMENT FOR EXCLUSIVE USE. X:DKDHID EQU X:DKDH+:C INVALID DISK PARAMETERS IN DIB, IPB OR VCB. COMMENT EITHER IPB:LSPT OR IPB:LSPC IS ZERO. X:DKDHDC EQU X:DKDH+:D THE DIB SUPPLIED FOR A "MOUNT" DOES NOT HAVE COMMENT A VALID CHECKWORD X:DKDHVN EQU X:DKDH+:E INVALID VOLUME NAME X:DKDHEM EQU X:DKDH+:F INSUFFICIENT EMP SPACE AVAILABLE * **** ERROR CONDITIONS FOR MAG TAPE DRIVES * X:MTRATE EQU X:MT+1 RATE ERROR - DATA LOST OR WRITTEN TWICE X:MTNREC EQU X:MT+2 NOT RECEIVING - FORMATTER BUSY OR TRANSPORT NOT READY X:MTBBCT EQU X:MT+3 BYTE COUNT SPECIFIED TOO LARGE (MAX=:7FFE) X:MTBCNT EQU X:MT+4 BYTE COUNT SPECIFIED TOO SMALL (MIN=2) X:MTNXFR EQU X:MT+5 READ OR WRITE OPERATION COMPLETED WITHOUT COMMENT ERROR BUT NO BYTE COUNT WAS TRANSFERED * **** ERROR CONDITIONS FOR QIC DRIVES * X:QTABRT EQU X:QT+6 READ OR WRITE ABORT X:QTRERR EQU X:QT+7 READ ERROR COMMENT DUE TO ONE OF THE FOLLOWING: COMMENT BAD BLOCK XFER COMMENT FILLER BLOCK XFER COMMENT NO DATA COMMENT NO DATA AND EOM X:QTMARG EQU X:QT+8 MARGINAL BLOCK DETECTED X:QTBBCT EQU X:QT+9 BYTE COUNT SPECIFIED IS TOO LARGE (MAX=:8000) X:QTIBCT EQU X:QT+:A INVALID BYTE COUNT, MUST BE MULTIPLE OF 512 BYTES **** ERROR CONDITIONS FOR INTERACTIVE TERMINALS (CLASS:TV) **** * X:TV! BRK EQU X:TV+1 BREAK DETECTED X:TVFRAM EQU X:TV+2 FRAMING ERROR X:TVNDSR EQU X:TV+3 NO DATA SET READY X:TVNCD EQU X:TV+4 NO CARRIER DETECT X:TVOVER EQU X:TV+5 DATA OVERRUN X:TVPRTY EQU X:TV+6 DATA PARITY ERROR X:TVNEID EQU X:TV+7 NO EID FOR ENABLING BREAK EXCEPTION X:TVNEGB EQU X:TV+8 NEGATIVE BYTE COUNT IN IOB X:TVNODA EQU X:TV+9 NO DATA READY ON EIO BOARD X:TVFOP EQU X:TV+:A INVALID TV FUNCTION OPERAND * **** ERROR CONDITIONS FOR LINE PRINTERS/SPOOLERS (CLASS:LP) **** * X:LPIOE EQU X:LP+1 UNKNOWN IOID FROM THE DOOR X:LPMODI EQU X:LP+2 ILLEGAL FUNCTION MODIFIER X:LPCODI EQU X:LP+3 ILLEGAL FUNTION CODE X:LPIDCW EQU X:LP+4 ILLEGAL DIB CHECKWORD X:LPEMPX EQU X:LP+5 MEMORY POOL EXHAUSTED X:LPCONN EQU X:LP+6 DISMOUNT NOT ALLOWED UNLESS CONNECT COUNT ZERO X:LPIFOP EQU X:LP+7 ILLEGAL LP FUNCTION OPERAND X:LPBUSY EQU X:LP+8 PRINTER BUSY X:LPSELC EQU X:LP+9 PRINTER NOT SELECTED X:LPPAPE EQU X:LP+:A PAPER LOW X:LPDISC EQU X:LP+:B PRINTER DISCONNECTED * * **** ERROR CONDITIONS FOR SYNCRONOUS COMMUNICATIONS (CLASS:SY) **** * X:SYLIOP EQU X:SY+1 PHYSICAL LINE INOPERATIVE X:SYPIOP EQU X:SY+2 PROTOCOL LINK INOPERATIVE X:SYPRST EQU X:SY+3 PROCOTOL LINK RESET X:SYRETE EQU X:SY+4 RETRY THRESHOLD EXCEEDED X:SYINVF EQU X:SY+5 INVALID FRAME X:SYCONF EQU X:SY+6 CONFLICTING CONTROL REQUEST X:SYTMNY EQU X:SY+7 TOO MANY PROTOCOL LINKS ACTIVE X:SYABRT EQU X:SY+8 REQUEST ABORTED X:SYNFND EQU X:SY+9 PROTOCOL LINK NAME NOT FOUND IN CONFIG FILE X:SYECON EQU X:SY+10 ENVIRONMENT STILL CONNECTED TO PROTOCOL LINK X:SYNCIB EQU X:SY+11 CIB NOT FOUND FOR PHYSICAL LINE X:SYACON EQU X:SY+12 PROTOCOL LINK ALREADY CONNECTED X:SYAOPN EQU X:SY+13 PROTOCOL LINK ALREADY OPEN X:SYDCLN EQU X:SY+14 CAN'T DISMOUNT A CONNECTED LUN X:SYNEMP EQU X:SY+15 NO MEMORY LEFT IN ENVIRONMENT MEMORY POOL O O O O O O O O Oe821005132018821005132018830907141353e@821005132018821005132018821014151025" e821005132018821005132018821005132018e821005132018821005132018821005132018821005132018821005132018821005132018e|830907140752830907140753830907141033 e830907140755830907140757830907141035 e  830907140758830907140801830907141039  e # .830907140803830907140807830907141043  e u830907140808830907140812830907141047  e&$830907140814830907140819830907141053  e9830907140820830907140822830907141056  e>8830907140824830907140825830907141058 eA(830907140827830907140833830907141104 eVy830907140834830907140836830907141106 $ eY830907140837830907140841830907141109 e^ 830907140843830907140845830907141112 ec830907140846830907140847830907141114 ee &830907140849830907140852830907141117 el 1830907140853830907140855830907140855 er.830907140857830907140858830907141119 et%  830907140900830907140902830907141122 ey l830907140904830907140907830907141126 e830907140908830907140910830907141130 eP830907140912830907140914830907141133 eF830907140917830907140919830907141136 e 3830907140921830907140925830907141140 e 830907140927830907140931830907141144 & e830907140933830907140936830907141146 e ;830907140938830907140941830907141149 e 830907140942830907140946830907141154  e5830907140948830907140954830907141203 !e ]830907140956830907140958830907141207 "e$830907140959830907141003830907141214 #e2 ' 830907141006830907141009830907141219 $e< {830907141012830907141017830907141224 %eM830907141019830907141021830907141227 &eO b830907141024830907141027830907141231 'eYJ830907141029830907141030830907141233 ( ) * + . BGIN MACCLOCK MACDIB MAC EDB MAC ELOAD MAC ERB MAC FIB MAC GFN MACIOB MACISM MACLAB MACLDB MACMAIL MACMDB MACMVB MACOVL MACQDB MACQMB MACSDB MACSHARE MACSMD MACTDB MACUSERCOMMON MACXIB MACXVT MACX:COMMON MAC X:IOERR MAC!X:IOSRVS MAC"X:REALTM MAC#X:ENV MAC$X:MEM MAC%X:HDW MAC&X:SEXCP MAC'E:XXXX MAC TITL EXCEPTION CLASS "I:" SERVICES - X:IOSRVS.MAC - 84-94143-62 (B000) * * DEFINE THE "I:" SERVICE ERROR CLASS EQUATES * *  THE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ *  | E | X:IOERR | ERROR CLASS | ERROR CODE | * +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ * * E IS THE ERROR BIT. IF SET, THEN THE WORD REPRESENTS AN ERROR * CONDITION AND THE ABNORMAL RETURN IS USED. IF CLE, AR, THEN * THE NORMAL RETURN IS USED IF ERROR CLASS AND ERROR CODE ARE BOTH * ZERO. OTHERWISE, THE ABNORMAL RETURN IS USED. * * X:IOSRVS IS THE EXCEPTION CLASS FOR ALL "I:" SERVICE ERRORS. * * ERROR CLASS IS THE CLASS OF ERROR CODE FOR "I:" SERVICE EXCEPTIONS. * IF ZERO, THEN THE ERROR CODE IS NOT DEVICE SPECIFIC. IF NON-ZERO, * THEN ERROR CODE IS DEVICE CLASS SPECIFIC. * IN THIS CASE, THE ERROR CLASS IS THE DEVICE CLASS. * * THE ERROR CODE IN X:IOSRVS IS DIVIDED INTO 16 GROUPS * OF 16 ERRORS EACH. BITS 7-4 DEFINE THE SERVICE * THAT CAUSED THE ERROR AND BITS 3-0 DEFINE THE ACTUAL * ERROR. * X:ICMSK EQU X:ERRORM++X:IOSRVS DEFINE THE ERROR MASK * IC = I COLON (ERROR TYPE) X:ICISM EQU :00 ISM, GLA, SLA MASK X:ICGFN EQU :10 GFN MASK X:ICOV EQU :20 I:OVL (OVERLAY LOAD) ERROR MASK X:ILD EQU :30 I:LOAD ERROR MASK X:DUPDN EQU :40 DEVICE UP/DOWN ERROR MASK * * SEVERAL COMMON ERRORS (EG. UIMT, AND IDBC) ARE DEFINED * X:COMMON. * SUBCLASS 0: GLA, SLA, AND ISM X:ISIDBC EQU X:ICMSK++X:ICISM++IDBC: CKW ERROR (ISM, SLA OR GLA) X:ISMBAL EQU X:ICMSK++X:ICISM++MBAL: CAN'T GET MEDIUM BLOCK (ISM, SLA OR GLA) X:ISUIMT EQU X:ICMSK++X:ICISM++UIMT: UNINSTALLED MEM TRAP (ISM, SLA OR GLA) X:ISBCO EQU X:ICMSK++X:ICISM++:F BYTE COUNT OVERFLOW (ISM, SLA OR GLA) * * SUBCLASS 1: GFN X:IGSBAL EQU X:ICMSK++X:ICGFN++SBAL: CAN'T GET SMALL BLOCK (GFN) X:IGMBAL EQU X:ICMSK++X:ICGFN++MBAL: CAN'T GET MEDIUM BLOCK (GFN) X:IGUIMT EQU X:ICMSK++X:ICGFN++UIMT: UNINSTALLED MEM TRAP (GFN) * * SUBCLASS FOR I:OVL * X:OVIDBC EQU X:ICMSK++X:ICOV++IDBC: ILLEGAL OVL PARAM LIST CKW (OVL) X:OVUIMT EQU X:ICMSK++X:ICOV++UIMT: UNINSTALLED MEM TRAP (OVL) X:OVION EQU X:ICMSK++X:ICOV++:B ILLEGAL OVERLAY NUMBER X:OVIOLN EQU X:ICMSK++X:ICOV++:C ILLEGAL OVERLAY LENGTH X:OVEOF EQU X:ICMSK++X:ICOV++:F END OF FILE IN OVLY * * I:LOAD ERRORS * X:LDIDBC EQU X:ICMSK++X:ILD++IDBC: ILLEGAL LOAD BLOCK CHECKWORD ENCOUNTERED X:LDUIMT EQU X:ICMSK++X:ILD++UIMT: UNINSTALLED MEM (I:LOAD) X:LDSMB EQU X:ICMSK++X:ILD++:A SMALL BLOCK UNAVAILABLE (I:LOAD) X:LDNEMP EQU X:ICMSK++X:ILD++:B INSUFFICIENT EMP SPACE AVAILABLE (I:LOAD) X:LDUEOF EQU X:ICMSK++X:ILD++:C UNEXPECTED EOF WHILE LOADING (I:LOAD) X:LDBTC EQU X:ICMSK++X:ILD++:D BAD TYPE CODE (I:LOAD) X:LDADE EQU X:ICMSK++X:ILD++:E ADDRESS ERROR (I:LOAD) X:LDBFA EQU X:ICMSK++X:ILD++:F BUFFER ALLOCATION ERROR (I:LOAD) * * SUBCLSS UP/DOWN * X:DUUIMT EQU X:ICMSK++X:DUPDN++UIMT: UNINSTALLED MEMORY (I:DEVUP/I:DEVDN) X:DUPRIV EQU X:ICMSK++X:DUPDN++:D PRIVILEGE VIOLATION X:DUMTD EQU X:ICMSK++X:DUPDN++:E  PUN IS MOUNTED (FOR I:DEVDN) X:DUCGEN EQU X:ICMSK++X:DUPDN++:F CAN'T USE GENERIC LUN M M M M M M M M M M M M M M M M M M* THE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| *  | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | T Y P E | S P E C | * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * * WHERE TYPE DEFINES THE TYPE OF SERVICE REQUEST (SEMAPHORE, QUEUE, ETC) * THAT THE EXCEPTION WAS GENERATED FOR A TITL EXCEPTION CLASS REAL-TIME - X:REALTM.MAC - 84-94143-63 (A300) * * DEFINE THE REAL-TIME SERVICES ERROR CLASS EQUATES * * THE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * -  | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | T Y P E | S P E C | * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * * WHERE TYPE DEFINES THE TYPE OF SERVICE REQUEST (SEMAPHORE, QUEUE, ETC) * THAT THE EXCEPTION WAS GENERATED FOR AND SPEC IS THE SPECIFIC TYPE * OF ERROR GENERATED (EG SEMAPHORE LIMIT OVERFLOW). * X:RLTSKL EQU X:ERROR++X:REALTM MASTER REAL-TIME SERVICES ERROR SKELETON X:S4SKL EQU X:RLTSKL++:10 SEMAPHORES ARE TYPE ONE X:MBSKL EQU X:RLTSKL++:20 MAILBOXES ARE TYPE TWO X:QUSKL EQU X:RLTSKL++:30 QUEUES ARE TYPE THREE X:EVSKL EQU X:RLTSKL++:40 ENVIRONMENTS ARE TYPE 4 X:PRSKL EQU X:RLTSKL++:50 PRIORITY MANIPULATION IS TYPE 5 X:ACSKL EQU X:RLTSKL++:60 ACTIVITY MANIPULATION IS TYPE 6 X:CLSKL EQU X:RLTSKL++:70 CLOCKS ARE TYPE 7 X:EMSKL EQU X:RLTSKL++:80 EMP SERVICES ARE TYPE 8 X:EXSKL EQU X:RLTSKL++:90 EXCEPTION SERVICE EXCEPTION CLASSES (9) X:MVSKL EQU X:RLTSKL++:A0 MOVE BLOCK EXCEPTIONS (CLASS 10) X:SMSKL EQU X:RLTSKL++:B0 SHARED MEMORY EXCEPTION EQUATES (11) X:STSKL EQU X:RLTSKL++:C0 STRAP DOOR ERROR SKELETON * * SEMAPHORE SPECIFIC CODES * X:S4IDBC EQU X:S4SKL++IDBC: ILLEGAL SEMAPHORE CHECKWORD X:S4SBAL EQU X:S4SKL++SBAL: CANT GET SEMAPHORE BLOCK X:S4DUID EQU X:S4SKL++DUID: DUPLICATE SEMAPHORE ID X:S4IID EQU X:S4SKL++IID: UNKNOWN BLOCK ID X:S4EDES EQU X:S4SKL++9 ECB OF ACTIVITY ON SEMAPHORE IS DESTROYED X:S4ACB EQU X:S4SKL++:A ACB NOT ON SEMAPHORE LIST X:S4IIC EQU X:S4SKL++:B ILLEGAL INITIAL CONDITIONS X:S4DED EQU X:S4SKL++:C DELETED SEMAPHORE X:S4UIMT EQU X:S4SKL++:D UNINSTALLED MEM TRAP AT SDB LOCATION X:S4OVS EQU X:S4SKL++:E SEMAPHORE SIGNAL OVERFLOW X:S4OVW EQU X:S4SKL++:F SEMAPHORE WAIT (UNDERFLOW) OVERFLOW * * MAILBOX SPECIFIC CODES * X:MBIDBC EQU X:MBSKL++IDBC: ILLEGAL MCB CHECKWORD X:MBSBAL EQU X:MBSKL++SBAL: NO MORE SMALL BUFFERS AVAILABLE X:MBDUID EQU X:MBSKL++DUID: DUPLICATE MAILBOX ID X:MBIECB EQU X:MBSKL++EID: UNKNOWN ENVIRONMENT ID X:MBIID EQU X:MBSKL++IID: UNKNOWN MAILBOX ID X:MBUIMT EQU X:MBSKL++UIMT: UNINSTALLED MEMORY X:MBUDBC EQU X:MBSKL++:7 ILLEGAL MAIL CHECKWORD X:MBDED EQU X:MBSKL++:C MAILBOX DESTROYED WHILE WAITING COMMENT  TO SEND OR RECEIVE * * UNIQUE QUEUE ERRORS * X:QUIDBC EQU X:QUSKL++IDBC: ILLEGAL DESCRIPTOR BLOCK (QDB) CHECKWORD X:QUSBAL EQU X:QUSKL++SBAL: QUEUES - NO MORE SMALL BLOCKS X:QUMBAL EQU X:QUSKL++MBAL: MEDIUM BLOCK (QMB,QIB) NOT AVAILABLE X:QUDUID EQU X:QUSKL++DUID: DUPLICATE ID (QIB,QCB) X:QUEID EQU X:QUSKL++EID: UNKNOWN RETURN ENVT ID (QUEUES) X:QUIID EQU X:QUSKL++IID: UNKNOWN QUEUE (QCB) ID X:QUUIMT EQU X:QUSKL++UIMT: UNINSTALLED MEM TRAP (CANT GET DB) X:QUPVAC EQU X:QUSKL++:7 QUEUE ACCESS PRIVILEDGED X:QUCOND EQU X:QUSKL++:8 ACB'S WAITING WITH USAGE COUNT ZERO X:QUQDEL EQU X:QUSKL++:9 GET/PUT QUEUE HAS BEEN DELETED X:QURDEL EQU X:QUSKL++:A RETURN QUEUE HAS BEEN DELETED X:QMBCKW EQU X:QUSKL++:B MESSAGE BLOCK ILLEGAL CHECKWORD (QMB) X:QURQID EQU X:QUSKL++:C UNKNOWN RETURN QUEUE ID X:QUACKE EQU X:QUSKL++:D ACKNOWLEDGE ERRORED DUE TO DELETED QUEUE X:QUDMID EQU X:QUSKL++:E DUPLICATE MESSAGE ID X:QUIMID EQU X:QUSKL++:F UNKNOWN MESSAGE (QMD/QIB) ID * * PRIORITY MANIPULATION ERRORS * X:CPANEG EQU X:PRSKL++1 ATTEMPT TO SET PRIORITY LESS THAN OR EQUAL COMMENT TO ZERO X:CPAMAX EQU X:PRSKL++2 ATTEMPT TO SET PRIO. RITY GREATER THAN THE ECB COMMENT MAXIMUM LIMIT * * TASK & ACTIVITY SERVICE ERRORS * X:TAIDBC EQU X:ACSKL++IDBC: ILLEGAL TCB CHECKWORD X:TASBAL EQU X:ACSKL++SBAL: NO SMALL BLOCKS AVAILABLE X:TAMBAL EQU X:ACSKL++MBAL: NO MEDIUM BLOCKS AVAILABLE X:TADUID EQU X:ACSKL++DUID: TCB DUPLICATE ID X:TAIID EQU X:ACSKL++IID: UNKNOWN TCB ID X:TAUIMT EQU X:ACSKL++UIMT: UNINSTALLED MEMORY X:TASKER EQU X:ACSKL++10 INSUFFICIENT STACK SPACE DEFINED IN TDB X:TAPARE EQU X:ACSKL++11 CONFLICTING PARAMETERS RECEIVED X:TAIPRI EQU X:ACSKL++12 ILLEGAL PRIORITY DESCRIPTOR FOR BGIN X:TATXPE EQU X:ACSKL++13 TEMPLATE EXPANSION ERROR X:TAEVDD EQU X:ACSKL++14 ENVIRONMENT IS BEING KILLED X:TADED EQU X:ACSKL++15 TASK IS BEING DESTROYED * * CLOCK AND CALENDAR SPECIFIC CODES * X:CLIDBC EQU X:CLSKL++IDBC: UNKNOWN CLOCK PARAMETER LIST ID X:CLSBAL EQU X:CLSKL++SBAL: NO MORE SMALL BUFFERS AVAILABLE X:CLDUID EQU X:CLSKL++DUID: DUPLICATE ID REQUESTED X:CLIID EQU X:CLSKL++IID: UNKNOWN CLOCK ID X:CLUIMT EQU X:CLSKL++UIMT: UNINSTALLED MEMORY TRAP OCCURED X:CLS4ID EQU X:CLSKL++:A UNKNOWN CLOCK'S SEMA4 ID. X:CLUSYS EQU X:CLSKL++:B UNAUTHORIZED ATTEMPT TO CHANGE SYSTEM TIME X:CLNOOR EQU X:CLSKL++:C NUMBER OUT OF RANGE X:CLPERM EQU X:CLSKL++:D ATTEMPTED TO DELETE A PERMANENT CLOCK X:CLPTL EQU X:CLSKL++:E REQUEST MORE THAN 31 BITS X:CLSEM EQU X:CLSKL++:F SEMA4 NOT PROVIDED * * EMP SERVICE ERRORS * X:EMIUBC  EQU X:EMSKL++IDBC: ILLEGAL EMP HEADER CHECKWORD X:EMIMEM EQU X:EMSKL++8 USER MEMORY ADDRESS INVALID X:EMCHNE EQU X:EMSKL++9 EMP HEADER CHAIN IS INVALID X:EMEMPI EQU X:EMSKL++10 ILLEGAL EMPI PARAMETER BLOCK VALUE X:EMNBUF EQU X:EMSKL++11 ATTEMPT TO RETURN BUFFER NOT IN EMP X:EMFREB EQU X:EMSKL++12 ATTEMPT TO RETURN A FREE EMP BLOCK X:EMNEMP EQU X:EMSKL++13 EMP IS NOT INITIALIZED * * EXCEPTION CLASS * X:EXIID EQU X:EXSKL++IID: UNKNOWN ACB ID X:EXUIMT EQU X:EXSKL++UIMT: UNINSTALLED MEM TRAP X:EXIXIB EQU X:EXSKL++12 ILLEGAL XIB X:EXSTK EQU X:EXSKL++13 STACK TOO SMALL X:EXIXVT EQU X:EXSKL++14 ILLEGAL XVT POINTER X:EXIEDB EQU X:EXSKL++15 ILLEGAL EDB POINTER * * MOVE BLOCK ERRORS * X:MVIDBC EQU X:MVSKL++IDBC: ILLEGAL MVB CHECKWORD X:MVMBAL EQU X:MVSKL++MBAL: CAN'T GET A MEDIUM BLOCK X:MVUIMT EQU X:MVSKL++UIMT: UNINSTALLED MEMORY ERROR X:MVIEID EQU X:MVSKL++:C EID IS NOT SUBORDINATE TO CALLER X:MVILM EQU X:MVSKL++:D ILLEGAL LOGICAL MAP X:MVNBC EQU X:MVSKL++:E NEGATIVE BYTE COUNT X:MVIECB EQU X:MVSKL++:F ILLEGAL ECB * * SHARED MEMORY SPECIFIC CODES * X:SMIDBC EQU X:SMSKL++IDBC: ILLEGAL SDB CHECKWORD X:SMSBAL EQU X:SMSKL++SBAL: CANT GET RCB X:SMDUID EQU X:SMSKL++DUID: DUPLICATE RCB ID X:SMIEID EQU X:SMSKL++EID: UNKNOWN ENVT ID X:SMIID EQU X:SMSKL++IID: UNKNOWN SHARED MEM REGION ID X:SMUIMT EQU X:SMSKL++UIMT: UNINSTALLED MEM TRAP (BLOCK READ IN) X:SMCSHR EQU X:SMSKL++:9 CAN'T SHARE X:SMREQO EQU X:SMSKL++:A REQUEST OVERFLOW X:SMIMR EQU X:SMSKL++:B ILLEGAL MAP REQUEST X:SMIREQ EQU X:SMSKL++:C ILLEGAL SHARE REQUEST X:SMWA EQU X:SMSKL++:D WRAP AROUND X:SMPNPB EQU X:SMSKL++:E PARAMETER NOT ON PAGE BOUNDRY X:SMCSUP EQU X:SMSKL++:F CAN'T SHARE UNOWNED MEMORY * * STRAP DOOR EXCEPTIONS * ENTRY AND EXIT ERRORS * X:STIRBE EQU X:STSKL++1 ILLEGAL RETURN BEFORE ENTRY X:STMBAL EQU X:STSKL++2 CAN'T / ALLOCATE SHORT STACK X:STPRE EQU X:STSKL++3 ADDRESS MODE PARAMETER RANGE ERROR (M4D16) X:STIRS EQU X:STSKL++4 ILLEGAL R: SERVICE REQUEST X:STISS EQU X:STSKL++5 ILLEGAL S: SERVICE REQUEST X:STUIMT EQU X:STSKL++6 UNINSTALLED MEMORY TRAP P P P P P P P  TITL EXCEPTION CLASS ENVIRONMENT - X:ENV.MAC - 84-94143-64 (A308) * * DEFINE THE ENVIRONMENT MANAGEMENT ERROR CLASS EQUATES * * THE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * |---+---+---+---|---+---+---+---|---+---+---|---+---+---+---+---| * | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | T Y P E | S P E C | * |---+---+---+---|---+---+---+---|---+---+---|---+---+---+---+---| * * WHERE TYPE DEFINES THE TYPE OF SERVICE REQUEST (R:ELNV, R:SUENV, ETC.) * THAT THE EXCEPTION WAS GENERATED FOR AND SPEC IS THE SPECIFIC TYPE * OF ERROR GENERATED (E.G. FREEPOOL BLOCKS NOT AVAIL). * X:ENVSKL EQU X:ERROR++X:ENV MASTER ENVIRONMENT MANAGEMENT ERROR SKELETON X:EVLSKL EQU X:ENVSKL LOAD ENVIRONMENT ERRORS, TYPE ZERO X:EVISKL EQU X:ENVSKL++:20 INITIALIZE ENVIRONMENT ERROR, TYPE ONE X:EVDSKL EQU X:ENVSKL++:40 DESTROY ENVIRONMENT ERRORS, TYPE TWO X:EVSSKL EQU X:ENVSKL++:60 SUSPEND ENVIRONMENT ERRORS, TYPE THREE X:EVRSKL EQU X:ENVSKL++:80 RESUME ENVIRONMENT ERRORS, TYPE FOUR X:EVGSKL EQU X:ENVSKL++:A0 GET ENVIRONMENT INFORMATION ERRORS, TYPE FIVE X:EVUSKL EQU X:ENVSKL++:B0 GET/SET UID ERRORS, TYPE SIX * * * LOAD ENVIRONMENT ERRORS * X:ELSBAL EQU X:EVLSKL+0 SMALL BLOCK UNAVAILABLE X:ELMBAL EQU X:EVLSKL+1 MEDIUM BLOCK UNAVAILABLE X:ELMLOD EQU X:EVLSKL+2 MEMORY UNAVAILABLE TO LOAD X:ELEMPE EQU X:EVLSKL+3 EMP ALLOCATION ERROR X:ELELPA EQU X:EVLSKL+4 CALLING ELP ADDRESS INVALID X:ELELPC EQU X:EVLSKL+5 CALLING ELP CHECKWORD INVALID X:ELERBA EQU X:EVLSKL+6 CALLING ERB ADDRESS INVALID X:ELERBC EQU X:EVLSKL+7 CALLING ERB CHECKWORD INVALID X:ELLIOE EQU X:EVLSKL+8 S:LOAD I/O ERROR X:ELLTPC EQU X:EVLSKL+9 S:LOAD TYPE CODE ERROR X:ELLMEM EQU X:EVLSKL+:A S:LOAD INVALID MEMORY REFERENCE X:ELLUNM EQU X:EVLSKL+:B S:LOAD UNINSTALLED MEMORY X:ELENVD EQU X:EVLSKL+:D LOADING ENVIRONMENT HAS BEEN DESTROYED X:ELELRE EQU X:EVLSKL+:E ELOAD LOW-HIGH RANGE INSUFFICIENT TO LOAD X:ELLDBC EQU X:EVLSKL+:F BAD LDB CHECKWORD IN S:LOAD * * INITIALIZE ENVIRONMENT ERRORS * X:EISBAL EQU X:EVISKL+0 SMALL BLOCK UNAVAILABLE X:EIEDBA EQU X:EVISKL+1 LOADED EDB ADDRESS INVALID X:EIEDBC EQU X:EVISKL+2 LOADED EDB CHECKWORD INVALID  COMMENT (OR EXECUTION ADDRESS ISN'T EDB ADDR) X:EIERBA EQU X:EVISKL+3 LOADED ERB ADDRESS INVALID X:EIERBC EQU X:EVISKL+4 LOADED ERB CHECKWORD INVALID X:EIPRIV EQU X:EVISKL+5 REQUESTED PRIVILEGE NOT AVAILABLE X:EIPRIO EQU X:EVISKL+6 MAXIMUM PRIORITY TOO HGIH X:EISBCT EQU X:EVISKL+7 SMALL BLOCK REQUEST TOO HIGH X:EIMBCT EQU X:EVISKL+8 MEDIUM BLOCK REQUEST TOO HIGH X:EIITDC EQU X:EVISKL+9 INITIAL TDB CHECKWORD INVALID X:EILMCT EQU X:EVISKL+:B LOGICAL MAP COUNT REQUEST TOO HIGH X:EIDSCT EQU X:EVISKL+:C DOOR STACK COUNT REQUEST TOO HIGH X:EIEMPA EQU X:EVISKL+:D EMP ALLOCATION ERROR X:EIMEMU EQU X:EVISKL+:E EMP SPACE UNAVAILABLE FOR LOADED ENVIRONMENT X:EIEMPI EQU X:EVISKL+:F EMP INITIALIZATION ERROR X:EIEMPS EQU X:EVISKL+:10 EMPA IN LOADED ERB IS INVALID X:EIECBI EQU X:EVISKL+:11 INVALID ENVIRONMENT ID X:EIIACT EQU X:EVISKL+:12 INITIALIZING ACTIVITY COULD NOT0  BE BEGUN X:EIIPRI EQU X:EVISKL+:13 INITIAL TASK ACTIVITY PRIORITY TOO HIGH X:EIITSK EQU X:EVISKL+:14 INITIAL TASK COULD NOT BE BEGUN X:EIDQEC EQU X:EVISKL+:15 ECB DEQUEUE BLOCK ERROR X:EITIDB EQU X:EVISKL+:16 ITDB ADDRESS INVALID X:EIPEER EQU X:EVISKL+:17 PEER ADDRESS ON SOME CHAIN (OFF EDB) INVALID X:EIESER EQU X:EVISKL+:18 EMP SIZE ERROR X:EIREAL EQU X:EVISKL+:19 REAL-TIME EXECUTION NOT ALLOWED X:EIINLM EQU X:EVISKL+:1A PARENT HAS INSUFFICIENT LOGICAL MAPS * * DESTROY ENVIRONMENT ERRORS * X:EDEIDE EQU X:EVDSKL+0 ENVIRONMENT ID INVALID X:EDIOER EQU X:EVDSKL+1 I/O ERROR DURING DESTROY X:EDECBC EQU X:EVDSKL+2 DEQUEUE ERROR ON DESTROYED ECB X:EDDES2 EQU X:EVDSKL+3 DESTROY2 ACTIVITY NOT BEGUN X:EDACTE EQU X:EVDSKL+4 ACTIVITIES NOT DESTROYED FOR ENVIRONMENT X:EDASAE EQU X:EVDSKL+5 ASA ACTIVITY IN ENVIRONMENT X:EDACBN EQU X:EVDSKL+6 ACB NOT ON SPECIFIED LIST X:EDACBI EQU X:EVDSKL+7 ACB ON IMPROPER LIST X:EDLSTE EQU X:EVDSKL+8 ACB LIST HEAD IS INVALID X:EDSBAL EQU X:EVDSKL+9 SMALL BLOCK UNAVAILABLE * * SUSPEND ENVIRONMENT ERRORS * X:ESEIDE EQU X:EVSSKL+0 ENVIRONMENT ID INVALID * * RESUME ENVIRONMENT ERRORS * X:EREIDE EQU X:EVRSKL+0 ENVIRONMENT ID INVALID * * GET ENVIRONMENT INFORMATION ERRORS * X:EGERBA EQU X:EVGSKL+0 ERB ADDRESS INVALID X:EGERBC EQU X:EVGSKL+1 ERB CHECKWORD INVALID X:EGEIDE EQU X:EVGSKL+2 EID NOT SUBORDINATE TO CALLER X:EGPOSE EQU X:EVGSKL+3 NO ACB AT POSITION SPECIFIED * * GET/SET ENVIRONMENT USER IDENTIFICATION * X:EUPRIV EQU X:EVUSKL+0 NO PRIVILEGE TO MODIFY USER ID S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S SHE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | E R R O R C O D E | * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * * THE ERROR CODE IS DEFINED AS FOLLOWS: * * |----+---+---+---|---+---+---+---| * | MODULE | ERROR  TITL EXCEPTION CLASS MEMORY - X:MEM.MAC - 84-94143-65 (A300) * * DEFINE THE MEMORY MANAGEMENT ERROR CLASS EQUATES * * THE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | E R R O R C O D E | * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * * THE ERROR CODE IS DEFINED AS FOLLOWS: * * |----+---+---+---|---+---+---+---| * | MODULE | ERROR  | * |----+---+---+---|---+---+---+---| * * X:MEMSKL EQU X:ERROR++X:MEM MASTER MEMORY MANAGEMENT ERROR SKELETON * *  THE FOLLOWING ARE THE POSSIBLE ERRORS WHICH CAN BE GOTTEN WHILE * EXECUTING THE SHARED PAGE SUBROUTINES. * X:SHRP EQU X:MEMSKL++:00 MASTER SHARED PAGE ROUTINE ERROR SKELETON * * S:SHRPG (SHARE A PAGE OF MEMORY BETWEEN TWO LOGICAL MAPS) * X:SHPISM EQU X:SHRP++0 INVALID SOURCE MAP COMMENT THE SOURCE MAP SPECIFIED IS NOT CURRENTLY IN USE. X:SHPIDM EQU X:SHPISM+1 INVALID DESTINATION MAP. COMMENT MAP SPECIFIED IS NOT CURRENTLY IN USE. X:SHPISP EQU X:SHPIDM+1 INVALID SOURCE PAGE. COMMENT PAGE SPECIFIED IS NOT CURRENTLY IN USE. X:SHPIDP EQU X:SHPISP+1 INVALID DESTINATION PAGE. COMMENT PAGE SPECIFIED IN NOT CURRENTLY IN1  USE. X:SHPSOF EQU X:SHPIDP+1 SHARED PAGE COUNT OVERFLOW. COMMENT TOO MANY SHARE CALLS TO THE SAME PAGE. * * S:UNSHRP (UN-SHARE A PHYSICAL PAGE OF MEMORY) * X:USPILM EQU X:SHPSOF+1 INVALID LOGICAL MAP. COMMENT MAP SPECIFIED IS NOT CURRENTLY IN USE. X:USPIPN EQU X:USPILM+1 INVALID LOGICAL PAGE. COMMENT PAGE SPECIFIED IS NOT CURRENTLY IN USE. X:USPPLK EQU X:USPIPN+1 ATTEMPT TO UNSHARE A LOCKED PAGE SHARED WITH ANOTHER * * S:LCKPG (LOCK A PHYSICAL PAGE IN MEMORY) * X:LKPILM EQU X:USPPLK+1 INVALID LOGICAL MAP. COMMENT MAP SPECIFIED IS NOT CURRENTLY IN USE. X:LKPIPN EQU X:LKPILM+1 INVALID LOGICAL PAGE. COMMENT PAGE SPECIFIED IS NOT CURRENTLY IN USE. X:LKPLOF EQU X:LKPIPN+1 PAGE LOCK COUNT OVERFLOW. COMMENT PHYSICAL PAGE HAS BEEN LOCKED TOO MANY TIMES. * * S:UNLCKP (UN-LOCK A PAGE OF PHYSICAL MEMORY) * X:UKPILM EQU X:LKPLOF+1 INVALID LOGICAL MAP. COMMENT MAP SPECIFIED IS NOT CURRENTLY IN USE. X:UKPIPN EQU X:UKPILM+1 INVALID LOGICAL PAGE. COMMENT PAGE SPECIFIED IS NOT CURRENTLY IN USE. X:UKPLUF EQU X:UKPIPN+1 PAGE LOCK COUNT UNDERFLOW. PAGE NOT LOCKED * * S:MAPPG (MAP IN A LOGICAL MEMORY PAGE) * X:MPPISM EQU X:UKPLUF+1 INVALID SOURCE MAP COMMENT MAP NOT CURRENTLY IN USE. X:MPPIDM EQU X:MPPISM+1 INVALID DESTINATION MAP. COMMENT MAP IS NOT CURRENTLY IN USE. X:MPPISP EQU X:MPPIDM+1 INVALID SOURCE PAGE. COMMENT PAGE IS NOT CURRENTLY IN USE. X:MPPIDP EQU X:MPPISP+1 INVALID DESTINATION PAGE. COMMENT PAGE IS IN NON-EXISTANT MEMORY. * * S:UNMAPP (UN-MAP A PAGE OF LOGICAL MEMORY) * X:UMPILM EQU X:MPPIDP+1 INVALID LOGICAL MAP. COMMENT MAP SPECIFIED IS NOT CURRENTLY IN USE. X:UMPIPN EQU X:UMPILM+1 INVALID LOGICAL PAGE. COMMENT PAGE SPECIFIED IS NOT CURRENTLY IN USE. * * THE FOLLOWING ARE THE POSSIBLE LOGICAL MEMORY MANAGEMENT - EMP * ERRORS * X:LMMEMP EQU X:MEMSKL++:40 MASTER LOG. MEM. MNGMT. EMP ERROR SKELETON * * THE FOLLOWING ARE THE POSSIBLE LOGICAL MEMORY MANAGEMENT - BUFFER * POOL MANAGEMENT ERRORS * X:LMMBUF EQU X:MEMSKL++:80 MASTER LOG. MEM. MNGMT. BUFFER ERROR SKELETON * * S:GSB (GET A SMALL BUFFER FROM THE FREE BUFFER POOL) * X:SBLMER EQU 1++X:LMMBUF SMALL BUFFER POOL LIMIT ERROR COMMENT THE USAGE LIMIT IN THE ECB OF THE REQUESTOR COMMENT HAS BEEN EXCEEDED. * * S:GMB (GET A MEDIUM BUFFER FROM THE FREE BUFFER POOL) * X:MBLMER EQU 3++X:LMMBUF MEDIUM BUFFER POOL LIMIT ERROR COMMENT THE USAGE LIMIT IN THE ECB OF THE REQUESTOR COMMENT HAS BEEN EXCEEDED. * * EXTND:BF (EXTEND THE BUFFER POOL) * X:BUFEXT EQU 5++X:LMMBUF BUFFER POOL EXTENSION ERROR COMMENT THERE WERE NO MORE PAGES IN THE SYSTEM COMMENT EMP WHEN THE BUFFER POOL EXTENSION WAS COMMENT ATTEMPTED. (OUT OF MEMORY) * * THE FOLLOWING ARE THE POSSIBLE PHYSICAL MEMORY MANAGEMENT ERRORS * X:PMM EQU X:MEMSKL++:C0  MASTER PHYSICAL MEM. MNGMT. ERROR SKELETON * * S:MAPLP (MAP A LOGICAL PAGE) * X:MAPLMN EQU 1++X:PMM BAD LOGICAL MAP NUMBER  COMMENT (LOGICAL MAP NOT CURRENTLY IN USE) X:MAPPIM EQU 2++X:PMM PAGE ALREADY IN MEMORY (SWAPPED IN) * * A:GSWA (GET SWAP FILE SECTOR ADDRESSES) * X:MAPFIL EQU 3++X:PMM SWAP FILE NOT CORRECTLY DEFINED OR TOO SMALL * * S:DAPP (DEALLOCATE A PHYSICAL PAGE OF MEMORY) * X:DAPSPT EQU 5++X:PMM BAD SYSTEM POINTER TABLE ENCOUNTERED COMMENT (BAD TABLE CHECKWORD) X:DAPLMN EQU 6++X2 :PMM BAD LOGICAL MAP NUMBER GIVEN COMMENT (LOGICAL MAP NOT IN USE) X:DAPLPN EQU 7++X:PMM BAD LOGICAL PAGE NUMBER GIVEN COMMENT (LOGICAL PAGE NOT CURRENTLY ALLOCATED) * * S:GETPP (GET A PHYSICAL PAGE FROM FREE LIST) * X:GETSPT EQU 9++X:PMM BAD SYSTEM POINTER TABLE ENCOUNTERED COMMENT (BAD TABLE CHECKWORD) * * S:PUTPP (PUT A PHYSICAL PAGE ON THE FREE LIST) * X:PUTSPT EQU 11++X:PMM BAD SYSTEM POINTER TABLE ENCOUNTERED COMMENT (BAD TABLE CHECKWORD) X:PUTPPN EQU 12++X:PMM BAD PHYSICAL PAGE NUMBER GIVEN COMMENT (PAGE NUMBER OUT OF VALID RANGE OR COMMENT PAGE ALREADY ON FREE LIST) X:PUTFPL EQU 13++X:PMM FREE PAGE LIST FORMAT ERROR COMMENT (TRAILER IS ZERO, HEADER IS NOT) * * S:SWAP (SWAP IN OR OUT OF A LOGICAL PAGE) ERROR CODES * X:SWPDMA EQU 19++X:PMM ERROR FROM S:GETDMA (Q = RETURNED CODE) X:SWPQUE EQU 20++X:PMM ERROR FROM S: QUEUE SERVICE (Q = RETURNED CODE) X:SWPIOW EQU 21++X:PMM WORDS PROCESSED NOT EQUAL TO 1024 (ONE PAGE) X:SWPIOE EQU 22++X:PMM ERROR FROM SYSTEM DISK DRIVER COMMENT (Q = RETURNED CODE) * * A:ILM (INSTALL A LOGICAL MAP IN THE MMU) ERROR CODES * X:ILMLMN EQU 23++X:PMM BAD LOGICAL MAP NUMBER COMMENT (LOGICAL MAP NUMBER IS <0 OR >LMT-LENGTH OR) COMMENT (LOGICAL MAP IS NOT IN CURRENTLY IN USE) X:ILMNPM EQU 24++X:PMM NO PHYSICAL MAPS AVAIALBLE COMMENT (COULD NOT INSTALL NEW MAP BECAUSE THERE COMMENT WAS NO ROOM IN THE MMT) * * S:CLAS (CREATE A LOGICAL ADDRESS SPACE) ERROR CODES * X:CLAIEB EQU 26++X:PMM INVALID ECB ADDRESS PASSED IN X:CLALFL EQU 27++X:PMM MEMORY TABLE FULL. CANNOT CREATE LOGICAL MAP X:CLANMM EQU 28++X:PMM NO MORE MEMORY AVAIALBLE. COMMENT CANNOT ALLOCATE A NEW MIT FOR THE LOGICAL MAP * * S:DLAS (DESTROY A LOGICAL ADDRESS SPACE) ERROR CODES * X:DLALMN EQU 30++X:PMM INVALID LOGICAL MAP NUMBER. COMMENT (LOGICAL MAP NUMBER IS OUT OF RANGE OR COMMENT LOGICAL MAP IS NOT CURRENTLY ALLOCATED. * * A:UPM (UNLOAD A PHYSICAL MAP FROM THE MMU) * X:UPMPMN EQU 32++X:PMM INVALID PHYSICAL MAP NUMBER COMMENT (PHYSICAL MAP NOT CURRENTLY LOADED IN THE MMU) X:UPMLOK EQU 33++X:PMM PHYSICAL MAP LOCKED IN MMU COMMENT (CANNOT BE UNLOADED) * * S:FSPP (FIND AND SWAP OUT A PHYSICAL PAGE OF MEMORY) * X:NOPAGE EQU 34++X:PMM NO PAGES AVAILABLE FOR SWAPPING OUT X:FSPSIN EQU 35++X:PMM CONFLICT IN MIT AND PPT TABLES * * S:GETDMA (GET A BUFFER AREA IN THE DMA MAP) * X:GDMILM EQU 36++X:PMM INVALID LOGICAL MAP SPECIFIED. COMMENT (LOGICAL MAP NOT CURRENTLY IN USE.) X:GDMWCS EQU 37++X:PMM ERROR WHILE ATTEMPING TO "WAIT" ON COMMENT THE COUNTING SEMAPHORE. X:GDMIPG EQU 38++X:PMM INVALID PAGE SPECIFIED. ONE OR MORE COMMENT OF THE PAGES WHICH HOLD THE SPECIFIED COMMENT BUFFER DO NOT EXIST IN THE MAP GIVEN. X:GDMWES EQU 39++X:PMM ERROR WHILE ATTEMPTING TO "WAIT" ON COMMENT THE EVENT SEMAPHORE. X:GDMSCS EQU 40++X:PMM ERROR WHILE ATTEMPTING TO "SIGNAL" COMMENT THE COUNTING SEMAPHORE. * * S:RETDMA (RETURN A BUFFER AREA IN THE DMA MAP) * X:RDMIBA EQU 43++X:PMM INVALID BUFFER ADDRESS. THE ADDRESS GIVEN COMMENT DOES NOT EXIST IN THE DMA MAP TABLE. * * S:CXTBLA (COMPUTE TRANSLATE TABLE ADDRESS) * * THESE ERRORS ALSO RETURNED BY S:RXLATE AND S:WXLATE * X:CXLIPM EQU 45++X:PMM INVALID PHYSICAL MAP NUMBER GIVEN. COMMENT THE PHYSICAL MAP NUMBER IS NOT BETWEEN 0-15 X:CXLILP EQU 46++X:PMM INVAL3 ID LOGICAL PAGE NUMBER GIVEN. COMMENT THE LOGICAL PAGE NUMBER IS NOT BETWEEN 0-63 * * ERRORS RETURNED BY MEMORY EXCEPTION TRAP HANDLER * X:UMTERR EQU 47++X:PMM UNINSTALLED MEMORY TRAP X:TTPERR EQU 48++X:PMM TRANSLATION TABLE PARITY ERROR X:UKNMEM EQU 49++X:PMM UNKNOWN REASON FOR MEMORY EXCEPTION TRAP X:PMMPER EQU 50++X:PMM PPT ERROR WHEN PREPARING TO MAP FAULTING PAGE E E E THE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | E R R O R C O D E | * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * * X:HDWSKL EQU X:ERROR++X:HDW MASTER HARDWARE EXCEPTION ERROR SKELETON * X:HDWUI EQU :0++X:HDWSKL UNIMPLEMENTED INS TITL EXCEPTION CLASS HARDWARE - X:HDW.MAC - 84-94143-66 (A300) * * DEFINE THE HARDWARE EXCEPTION ERROR CLASS EQUATES * *  THE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | E R R O R C O D E | * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * * X:HDWSKL EQU X:ERROR++X:HDW MASTER HARDWARE EXCEPTION ERROR SKELETON * X:HDWUI EQU :0++X:HDWSKL UNIMPLEMENTED INSTRUCTION TRAP X:HDWSTK EQU :1++X:HDWSKL STACK EXCEPTION TRAP X:HDWAE EQU :2++X:HDWSKL ARITHMETIC EXCEPTION TRAP X:HDWPI EQU :3++X:HDWSKL PRIVILEGED INSTRUCTION TRAP X:HDWUM EQU :4++X:HDWSKL UNINSTALLED MEMORY EXECPTION N N N N N N N N N N N N N N N N N  | 1 | 1 | 1 | 1 | 0 | 0 | 0 | E R R O R C O D E | * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * * X:SEXSKL EQU X:ERROR++X:SEXCP MASTER SYSTEM EXCEPTION ERROR SKELETON * * THE FOLLOWING ARE THE POSSIBLE SYSTEM E TITL EXCEPTION CLASS SYSTEM - X:SEXCP.MAC - 84-94143-67 (B008) * * DEFINE THE SYSTEM EXCEPTION ERROR CLASS EQUATES * * THE ERROR STATUS WORD IS DEFINED AS FOLLOWS: * * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | E R R O R C O D E | * |---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---| * * X:SEXSKL EQU X:ERROR++X:SEXCP MASTER SYSTEM EXCEPTION ERROR SKELETON * * THE FOLLOWING ARE THE POSSIBLE SYSTEM EXCEPTION ERROR CODES * COMMENT * BUFFER POOL MANAGEMENT ERRORS COMMENT X:CHNERR EQU :01++X:SEXSKL BUFFER ALREADY ON CHAIN ERROR COMMENT ATTEMPT TO RETURN A BUFFER MORE THAN ONCE X:LOPERR EQU :02++X:SEXSKL BUFFER CHAIN LOOPING ERROR COMMENT BUFFER CHAIN LOOPED BACK ON ITSELF X:CNTERR EQU :03++X:SEXSKL BUFFER COUNT ERROR COMMENT NUMBER OF BUFFERS ON FREE CHAIN DOES NOT COMMENT MATCH THE FREE BUFFER COUNT IN THE BCB X:EXTERR EQU :04++X:SEXSKL BUFFER EXTENT ADDRESS ERROR COMMENT INVALID BUFFER ADDRESS BEING RETURNED X:EXAERR EQU :05++X:SEXSKL INVALID BUFFER ADDRESS IN EXTENSION PAGE ERROR X:BADECB EQU :06++X:SEXSKL BAD ECB CHAIN POINTER WHILE LOOKING FOR PARENT X:MEMXCP EQU :07++X:SEXSKL MEMORY EXCEPTION OCCURRED DURING INITIALIZATION * * LIST CORRUPT (BAD CHECKWORD) ERRORS * X:IS4CKW EQU :10++X:SEXSKL ILLEGAL SEMAPHORE CHECKWORD X:IMBCKW EQU :11++X:SEXSKL ILLEGAL MAILBOX CHECKWORD X:QCBCKW EQU :12++X:SEXSKL ILLEGAL QUEUE CONTROL CHECKWORD X:QIBCKW EQU :13++X:SEXSKL ILLEGAL QUEUE MESSAGE CH4 ECKWORD X:IIQCKW EQU :14++X:SEXSKL ILLEGAL INTQ ACB CHECKWORD X:IRDCKW EQU :15++X:SEXSKL ILLEGAL RDYL ACB CHECKWORD X:IECCKW EQU :16++X:SEXSKL ILLEGAL ENVIRONMENT CHECKWORD X:ITCCKW EQU :17++X:SEXSKL ILLEGAL TASK CHECKWORD X:ICCCKW EQU :18++X:SEXSKL ILLEGAL CLOCK CHECKWORD X:IACCKW EQU :19++X:SEXSKL ILLEGAL ACB CHECKWORD (DSP:DISP) X:CSECKW EQU :1A++X:SEXSKL ILLEGAL ECB CHECKWORD IN COLD-START X:CSACKW EQU :1B++X:SEXSKL ILLEGAL ACB CHECKWORD IN COLD-START * * MISCELLANEOUS CATASTROPHIC EXCEPTIONS * X:SYFOR EQU :30++X:SEXSKL FELL OFF THE ROOT ON A PUNT X:LIBAL EQU :31++X:SEXSKL FINDMARK & DQBLOCK CALLS UNBALANCED X:IDLPER EQU :32++X:SEXSKL THE IDLE ACTIVITY HAS A PEER ACB! X:CSALLO EQU :34++X:SEXSKL TABLE/CODE OVERLAY IN COLD START X:SCTMUL EQU :35++X:SEXSKL UNLOCK CALLED WITHOUT PREVIOUS LOCK X:SCTMLK EQU :36++X:SEXSKL TOO MANY LOCKS (SOMEONE FORGOT TO UNLOCK) X:DBGSTK EQU :37++X:SEXSKL INSUFFICIENT STACK SPACE TO CALL FM:DEBUG X:PSYSEV EQU :38++X:SEXSKL ATTEMPT TO PUNT TO SYSTEM ENVIRONMENT COMMENT (Q REGISTER = EXCEPTION CODE, X = ACB ADDRESS) X:SWAPNI EQU :39++X:SEXSKL SWAPPING NOT INSTALLED, NO MORE FREE PAGES X:SHRMAX EQU :3A++X:SEXSKL UNLOCK FAILED WHEN SHARE COUNT AT MAXIMUM X:TSTICS EQU :3B++X:SEXSKL TIME SLICE TICK UNDERFLOW X:SYSSTK EQU :3C++X:SEXSKL DISPATCH ENTERED WHEN NOT ON SYSTEM STACK * * CODING ERRORS (ILLEGAL OPERATION) * X:CEMBX EQU :40++X:SEXSKL MAILBOX CODING ERROR X:SCEQU EQU :41++X:SEXSKL SYSTEM CODING ERROR - QUEUES X:CEACT EQU :42++X:SEXSKL RESUMING ENDED ACTIVITY X:CEIOD EQU :43++X:SEXSKL I/O POST PROCESSOR EXITED X:SCGFN EQU :44++X:SEXSKL GFN CODING ERROR (BOB'S NOT TELLING WHAT KIND) X:SCZERO EQU :46++X:SEXSKL JUMP TO ABS ZERO ERROR X:STRPR EQU :47++X:SEXSKL SPECIAL STRAP OUT OF RANGE X:SCEMS4 EQU :48++X:SEXSKL MOUNT SEMAPHORE ERROR IN DEV UP/DOWN X:SCTHRD EQU :49++X:SEXSKL ERROR IN BREAK THREADING (PUNT TO ROOT) X:SCUTHD EQU :4A++X:SEXSKL ERROR IN UNTHREADING (NO SUCH IPB) * * CRT/LP HANDLER SYSTEM EXCEPTIONS * * Q REGISTER CONTAINS ACTUAL EXCEPTION * X:SETV EQU :50++X:SEXSKL SKELETON X:SETVDP EQU :01++X:SETV DECODE PROCESSOR SYSTEM EXCEPTION X:SETVWP EQU :02++X:SETV WRITE PROCESSOR SYSTEM EXCEPTION X:SETVRP EQU :03++X:SETV READ PROCESSOR SYSTEM EXCEPTION X:SETVRB EQU :04++X:SETV READ BUFFER PROCESSOR SYSTEM EXCEPTION X:SETVCM EQU :05++X:SETV COMMON ROUTINE SYSTEM EXCEPTION X:SETVPR EQU :06++X:SETV PRINTER ROUTINE SYSTEM EXCEPTION * * COLD START ACTIVITY EXCEPTIONS * X:CLDACT EQU :70++X:SEXSKL ERROR IN COLD START ACTIVITY (Q=ERROR STATUS) X:TCERR EQU X:CLDACT+1 ERROR WHILE EXPANDING TYPE CODES COMMENT GENERALLY AN ILLEGAL TYPE CODE ENCOUNTERED X:ADERR EQU X:TCERR+1 ADDRESS ERROR WHILE EXPANDING TYPE CODES COMMENT GENERALLY AN ADDRESS OCCURRED OUTSIDE THE LOAD BOUNDARIES X:CLDEMP EQU X:ADERR+1 INSUFFICIENT EMP SPACE TO LOAD CARTOS * * SYSTEM TRAP EXCEPTIONS * X:TPPWRF EQU :80++X:SEXSKL  POWER FAIL TRAP X:TPSSTK EQU :81++X:SEXSKL SYSTEM STACK EXCEPTION TRAP X:TPHDW EQU :82++X:SEXSKL HARDWARE EXCEPTION TRAP WHILE ON SYSTEM STACK COMMENT (X:HDW CLASS ERROR CODE IN Q REGISTER) X:TPSYS EQU :83++X:SEXSKL HARDWARE EXCEPTION TRAP OF A SYSTEM ACTIVITY COMMENT (X:HDW CLASS ERROR CODE IN Q REGISTER) X:TPSTP EQU :84++X:SEXSKL STRAP WHILE O5 N SYSTEM STACK * * MDE SYSTEM EXCEPTIONS * X:MDESKL EQU :F0++X:SEXSKL MDE EXCEPTION SKELETON N N N N N N N N N N N N N N N -13) * 0 - STANDARD R: AND I: SERVICES * 1 - PRIVILEGED S: SERVICES * 2 - USER DEFINED SERVICES * 3 - STRAP  TITL E:XXXX (MDE) USER MACROS - E:XXXX.MAC - 84-94142-65 (A300) * * THIS FILE CONTAINS COMMON MACROS REQUIRED * IN ORDER TO USE THE MDE VIA E:XXXX SERVICES. * * THIS MACRO FILE REQUIRES USERCOMMON.MAC AS IT CALLS THE * GENERAL STRAP MACROS CHECKP: AND SYSTRAP: * * * SYSTEM SERVICE (STRAP) MACRO (cf. The one in USERCOMMON) * * #(0) DEFINITION: CPNN * C - STRAP CODE FIELD (BITS 14-13) * 0 - STANDARD R: AND I: SERVICES * 1 - PRIVILEGED S: SERVICES * 2 - USER DEFINED SERVICES * 3 - STRAP EXCEPTION (The one used for E:XXXXX) * P - OPERAND FLAG * 0 - NO OPERAND ON SERVICE * 1 - SERVICE REQUIRES OPERAND *  NN - STRAP NUMBER (1-254) * E:MONC MACRO 3101 E:RCI MACENT 3102 E:MSG MACENT 3106 E:MSGL MACENT 3107 E:CMD MACENT 3108 E:NJOB MACENT 3009 E:SEND MACENT 310A CHECKP: #(?),#(0,2,2),#(0,2,2) I:: SET #(1,'*')=1 J:: SET I::+1 K:: SET #(1,'(')-1 IFT K::<0 K:: SET #(1,?) ENDC L:: SET K::+1 SYSTRAP: #(0,1,1)%13+:1A00+:#(0,3,4),I::,#(1,J::,K::),#(1,L::,99) ENDM * * NOW FOR VARIANTS OF E:MONC * E:MON MACRO E:MONC 0 ENDM * E:MONE MACRO E:MONC :FFFF ENDM M M M M M M M M M M M M M M M M M M M M M M M M M M M IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII6 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII7 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII8 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII9 IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII: IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII; IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII< IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII= IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII> IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII? IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII@ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIA IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIB IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIC IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIID IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIE IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIF IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIG IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIH IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJ IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIK IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIL IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIICARTOSMA282100513201840830907140600 830907140600AF12100 VOL84-94121-00 CARTOS MACROS I PRODUCT DISKETTE (B030)