1 /* SOURCE.H: Entity and source control block structures and definitions. 2 */ 3 #define ENTHASH 503 /* Size of entity hash table. Must be prime. */ 4 /* Entity storage class values for estore member of entity structure. */ 5 #define EST 1 /* String: Tag (usually a fixed STARTGI). */ 6 /* <MDENTITY sets these:> */ 7 #define ESMD 2 /* String: Markup declaration. */ 8 #define ESMS 3 /* String: Marked section. */ 9 #define ESM 4 /* String: ordinary text. */ 10 /* <ENTOPEN treats these specially:> */ 11 #define ESS 5 /* ETD: Start-tag. */ 12 #define ESE 6 /* ETD: End-tag. */ 13 #define ESI 7 /* String: PI. */ 14 #define ESX 8 /* String: SDATA general entity. */ 15 #define ESC 9 /* String: CDATA general entity. */ 16 /* </MDENTITY> <MDEXTID sets these:> */ 17 #define ESFM 10 /* LPU: minimum external (file) storage class. */ 18 #define ESN 10 /* XCB: N/C/SDATA or SUBDOC control block. */ 19 /* </ENTOPEN> */ 20 #define ESF 11 /* LPU: General entity. */ 21 #define ESP 12 /* LPU: Parameter entity. */ 22 #define ESD 13 /* LPU: Document type definition. */ 23 #define ESL 14 /* LPU: Link process definition. */ 24 #define ESK 15 /* LPU: Data content notation. */ 25 /* </MDEXTID> */ 26 27 union etext { /* Entity text. */ 28 UNIV x; /* External ID generated by system. */ 29 UNCH *c; /* Character string. */ 30 struct ne *n; /* N/C/SDATA or SUBDOC entity control block. */ 31 }; 32 #define ETEXTSZ sizeof(union etext) 33 struct entity { /* Entity control block. */ 34 struct entity *enext; /* Next entity in chain. */ 35 UNCH *ename; /* Entity name with length and EOS. */ 36 UNCH estore; /* Storage class (see values above). */ 37 UNCH dflt; /* Declared as default entity. */ 38 UNCH mark; /* For use by for sgmlment. */ 39 union etext etx; /* Entity text. */ 40 }; 41 #define ENTSZ sizeof(struct entity) 42 typedef struct entity *PECB; /* Ptr to entity control block. */ 43 typedef struct entity **TECB; /* Table of entity control blocks. */ 44 45 struct source { /* Source control block. */ 46 struct entity ecb; /* Entity control block. */ 47 unsigned long rcnt; /* Source record number. */ 48 int ccnt; /* Source record chars since last RS. */ 49 int curoff; /* Offset of curchar (chars read in this block).*/ 50 UNCH curchar; /* Current character. */ 51 UNCH nextchar; /* If curchar was DELNONCH, next character. */ 52 UNIV fcb; /* SGMLIO fcb ptr returned by OPEN. */ 53 UNCH *fbuf; /* 1st char in buffer (0=PEND) or entity text. */ 54 UNCH *fpos; /* Current char in buffer or entity text. */ 55 UNCH pushback; /* Character before pend position */ 56 char copied; /* Is this a copy of the internal entity? */ 57 }; 58 #define SCBSZ sizeof(struct source) 59 typedef struct source *PSCB; /* Ptr to source control block. */ 60 61 extern int es; /* Index of current source in stack. */ 62 extern struct source *scbs; /* Stack of open sources ("SCB stack"). */ 63 64 /* Member definitions for source and entity control blocks. 65 */ 66 #define SCB (scbs[es]) /* Ptr to current source control block. */ 67 68 #define ECB SCB.ecb /* Pointer to current entity control block. */ 69 #define FBUF SCB.fbuf /* Pointer to start of entity buffer. */ 70 #define FPOS SCB.fpos /* Pointer to current char of current source. */ 71 #define RSCC SCB.ccnt /* CCNT at start of block (across EOB/EOS/EOF). */ 72 #define CCO SCB.curoff /* Offset in read buffer of current char. */ 73 #define CC SCB.curchar /* Current character of current source entity. */ 74 #define NEXTC SCB.nextchar /* Next character in current source entity. */ 75 #define CCNT (SCB.ccnt+CCO) /* Position of CC in current record (RS=0). */ 76 #define RCNT SCB.rcnt /* Position of record in entity (origin=1). */ 77 #define SCBFCB SCB.fcb /* Current file control block (if FILESW). */ 78 #define ECBPTR ((ECB.enext)) /* Pointer to this entity's ECB. */ 79 #define ENTITY ((ECB.ename)) /* Current entity name. */ 80 #define FILESW (ECB.estore>=ESFM) /* 1=Entity is external file; 0=internal. */ 81 #define NEWCC (++FPOS) /* Get next current character. */ 82 #define REPEATCC (--FPOS) /* Repeat previous current character. */ 83 #define COPIEDSW SCB.copied /* Non-zero means entity was copied. */ 84 85 struct srh { /* Short reference map header. */ 86 struct srh *enext; /* Next short reference map in chain. */ 87 UNCH *ename; /* Short reference map name. */ 88 TECB srhsrm; /* Ptr to short reference map. */ 89 }; 90 #define SRHSZ (sizeof(struct srh)) 91 typedef struct srh *PSRH; /* Ptr to short reference map header. */ 92 #define SRMNULL (&dumpecb) /* Dummy ptr to empty short reference map. */ 93 94 /* Definitions for ENTOPEN/ENTREF return codes. 95 */ 96 #define ENTUNDEF -1 /* Callers of ENTOPEN: entity undefined. */ 97 #define ENTLOOP -2 /* ENTOPEN: endless loop entity. */ 98 #define ENTMAX -3 /* ENTOPEN: too many open entities. */ 99 #define ENTFILE -4 /* ENTOPEN: file I/O error. */ 100 #define ENTDATA -5 /* ENTOPEN: CDATA or SDATA entity. */ 101 #define ENTPI -6 /* ENTOPEN: PI entity. */ 102 103 /* Definitions for ENTDATA switches set in contersw. 104 */ 105 #define CDECONT 2 /* 0010 CDATA entity referenced. */ 106 #define SDECONT 4 /* 0100 SDATA entity referenced. */ 107 #define NDECONT 8 /* 1000 NDATA entity referenced. */ 108 109 /* Definitions for manipulating signed source character counters. 110 */ 111 #define CTRSET(CTR) (CTR = (int) -(FPOS+1-FBUF)) /* Init source char ctr. */ 112 #define CTRGET(CTR) (CTR + (int) (FPOS+1-FBUF)) /* Read source char ctr. */ 113 114 115