1 /*        BEGIN INCLUDE FILE comp_font.incl.pl1                              */
  2 
  3 /* Fonts already loaded into the compose (pdir) database */
  4 
  5 /* format: style2,ind2,ll79,dclind4,idind15,comcol41,linecom */
  6 
  7      dcl 1 fnttbldata   aligned based (const.fnttbldata_ptr),
  8            2 count      fixed bin,      /* number of fonts loaded */
  9            2 ndx        fixed bin,      /* index of current font */
 10            2 medsel_ptr ptr,            /* -> media select table */
 11            2 ptr        (100) ptr;      /* 100 fonts should be plenty! */
 12 
 13      dcl fnttbl_ptr     ptr init (null);
 14      dcl 1 fnttbl       aligned based (fnttbl_ptr),
 15            2 min_wsp    fixed bin,      /* min wordspace - in strokes        */
 16            2 avg_wsp    fixed bin,      /* nominal wordspace - in strokes */
 17            2 max_wsp    fixed bin,      /* max wordspace - in strokes */
 18            2 rel_units  fixed bin,      /* stroke value for this font */
 19            2 siztbl_ptr ptr,            /* -> loaded size table */
 20            2 entry                      /* stack entry for this font */
 21                         like fntstk_entry,
 22            (                            /* for each font character */
 23            2 devfnt     fixed bin,      /* font in the device */
 24            2 replptr    ptr,            /* replacement string ptrs */
 25            2 units      fixed bin,      /* width in strokes */
 26            2 white      bit (1) unal    /* white space flags */
 27            )            dimension (0:511);
 28 
 29      dcl repl_str_ptr   ptr;            /* replacement strings */
 30      dcl 1 repl_str     based (repl_str_ptr),
 31            2 len        fixed bin (35),
 32            2 str        char (256);
 33      dcl replstr        char (256) var based (repl_str_ptr);
 34                                         /* media select strings */
 35                                         /* (indexed on fnttbldata.ndx) */
 36      dcl medsel         (100) char (12) based (fnttbldata.medsel_ptr);
 37 
 38      dcl 1 siztbl       based (fnttbl.siztbl_ptr),
 39            2 ct         fixed bin,      /* number of sizes */
 40            2 size       (siztbl.ct) fixed bin (31);
 41 
 42 /* This is the storage referred by family.member_r in comp_dvt
 43 
 44    If member.count is 1 and member.name(1) is null, then the font is a
 45    'bachelor'.
 46 
 47    The font stack will hold the family/member names which were used to
 48    originally get to the font. When a bachelor is accessed, the member name
 49    will remain but the bachelor flag will be set to tell any displayers not
 50    to include it.
 51 
 52    %FontName% will contain either "family" or "family/member" depending on
 53    the setting of the bachelor switch. */
 54 
 55      dcl member_ptr     ptr;
 56      dcl 1 member       based (member_ptr),
 57            2 count      fixed bin,      /* # members present                 */
 58            2 e          (member.count), /* members defined for this device   */
 59              3 font_r   bit (18) unal,  /* font character table relptr       */
 60              3 size_r   bit (18) aligned,
 61                                         /* point size list relptr            */
 62              3 Scalex   fixed bin (35), /* X (hor) scaling * 1e8 - FUTURE    */
 63              3 Scaley   fixed bin (35), /* Y (ver) scaling * 1e8 - FUTURE    */
 64              3 name     char (32);      /* member name                       */
 65 
 66 /* Storage referred by member.font_r */
 67      dcl font_ptr       ptr;
 68      dcl 1 font         based (font_ptr),
 69          ( 2 oput_r,                    /* offset of output data array */
 70            2 units_r                    /* offset of width array */
 71            )            bit (18) aligned,
 72            2 rel_units  fixed bin,      /* stroke value for this table  */
 73            2 footsep    char (1),       /* footref separator */
 74            2 fill       char (3),
 75            2 min_wsp    fixed bin,      /* min wordspace */
 76            2 avg_wsp    fixed bin,      /* nominal wordspace */
 77            2 max_wsp    fixed bin;      /* max wordspace */
 78 
 79 /* storage referred by font.units_r */
 80      dcl units_ptr      ptr;            /* width in strokes */
 81      dcl units          (0:511) fixed bin based (units_ptr);
 82 
 83 /* media select table in the device table */
 84      dcl medsel_table_ptr
 85                         ptr;
 86      dcl 1 medsel_table based (medsel_table_ptr),
 87            2 count      fixed bin,
 88            2 ref_r      (medsel_table.count) bit (18) aligned;
 89 
 90 /* storage referred by font.oput_r */
 91      dcl oput_p         ptr;
 92      dcl 1 oput         based (oput_p),
 93            2 data_ct    fixed bin,      /* highest char defined */
 94            2 e          (0:oput.data_ct),
 95              3 which                    /* index into view array */
 96                         fixed bin (17) unal,
 97              3 what_r                   /* output string */
 98                         bit (18) unal;
 99 
100 /* storage referred by member.size_r */
101 
102      dcl sizel_p        ptr;
103      dcl 1 sizel        based (sizel_p),/* list of allowed point sizes       */
104            2 val_ct     fixed bin,
105            2 val        (sizel.val_ct) fixed bin (31);
106 
107 /* storage referred by oput.what_r */
108 
109      dcl medchar_sel_p  ptr;            /* MediaChar select string */
110      dcl 1 medchar_sel  based (medchar_sel_p),
111            2 str_l      fixed bin,
112            2 str        char (medchar_sel.str_l);
113      dcl medchar        char (medchar_sel.str_l) var based (medchar_sel_p);
114 
115      dcl med_sel_p      ptr;            /* media select string */
116      dcl 1 med_sel      based (med_sel_p),
117            2 str_l      fixed bin,
118            2 str        char (med_sel.str_l);
119 
120 /*        END INCLUDE FILE comp_font.incl.pl1     */