home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / APPS / TEKST / CMTEX330 / SOURCE / TFM.H < prev    next >
C/C++ Source or Header  |  1992-02-19  |  4KB  |  145 lines

  1.  
  2. /*
  3.  * %Y%:%M%:%I%:%Q%
  4.  *
  5.  * Copyright 1987,1988,1991 Pat J Monardo
  6.  *
  7.  * Redistribution of this file is permitted through
  8.  * the specifications in the file COPYING.
  9.  *
  10.  * 
  11.  */
  12.  
  13. global    file    tfm_file;
  14.  
  15. struct font_struct {
  16.     int    font_length_field;
  17.     qcell    font_check_field;
  18.     scal    font_size_field;
  19.     scal    font_dsize_field;
  20.     int    font_params_field;
  21.     str    font_name_field;
  22.     str    font_area_field;
  23.     int    font_bc_field;
  24.     int    font_ec_field;
  25.     ptr    font_glue_field;
  26.     bool    font_used_field;
  27.     int    hyphen_char_field;
  28.     int    skew_char_field;
  29.     int    font_bchar_field;
  30.     int    font_false_bchar_field;
  31.     qcell    *char_base_field;
  32.     scal    *width_base_field;
  33.     scal    *height_base_field;
  34.     scal    *depth_base_field;
  35.     scal    *italic_base_field;
  36.     qcell    *lig_kern_base_field;
  37.     qcell    *bchar_label_field;
  38.     scal    *kern_base_field;
  39.     qcell    *exten_base_field;
  40.     scal    *param_base_field;
  41. };
  42. typedef struct font_struct font_t;
  43.  
  44. global    int    nfonts;
  45. global    font_t    **font_info;
  46. global    font_t    **font_end;
  47. global    font_t    **font_ptr;
  48.  
  49. #define FONT_BASE    32
  50. #define FONT_MAX    1250
  51. #define null_font    FONT_BASE
  52.  
  53. global    qcell    null_character;
  54.  
  55. #define fmem(F)    (font_info[(F) - null_font])
  56.  
  57. #define font_length(F)        fmem(F)->font_length_field
  58. #define font_check(F)        fmem(F)->font_check_field
  59. #define font_size(F)        fmem(F)->font_size_field
  60. #define font_dsize(F)        fmem(F)->font_dsize_field
  61. #define font_params(F)        fmem(F)->font_params_field
  62. #define font_name(F)        fmem(F)->font_name_field
  63. #define font_area(F)        fmem(F)->font_area_field
  64. #define font_bc(F)        fmem(F)->font_bc_field
  65. #define font_ec(F)        fmem(F)->font_ec_field
  66. #define font_glue(F)        fmem(F)->font_glue_field
  67. #define font_used(F)        fmem(F)->font_used_field
  68. #define hyphen_char(F)        fmem(F)->hyphen_char_field
  69. #define skew_char(F)        fmem(F)->skew_char_field
  70. #define font_bchar(F)        fmem(F)->font_bchar_field
  71. #define font_false_bchar(F)    fmem(F)->font_false_bchar_field
  72. #define bchar_label(F)        fmem(F)->bchar_label_field
  73. #define char_base(F)        fmem(F)->char_base_field
  74. #define width_base(F)        fmem(F)->width_base_field
  75. #define height_base(F)        fmem(F)->height_base_field
  76. #define depth_base(F)        fmem(F)->depth_base_field
  77. #define italic_base(F)        fmem(F)->italic_base_field
  78. #define lig_kern_base(F)    fmem(F)->lig_kern_base_field
  79. #define kern_base(F)        fmem(F)->kern_base_field
  80. #define param_base(F)        fmem(F)->param_base_field
  81. #define exten_base(F)        fmem(F)->exten_base_field
  82.  
  83. #define NON_CHAR        256
  84. #define NON_ADDRESS        0
  85.  
  86. #define char_info(F, C)        char_base(F)[C]
  87. #define char_exists(CI)        ((CI).b0 > 0)
  88. #define char_width(F, CI)    width_base(F)[(CI).b0]
  89. #define height_depth(CI)    (CI).b1
  90. #define char_height(F, CB)    height_base(F)[(CB) / 16]
  91. #define char_depth(F, CB)    depth_base(F)[(CB) % 16]
  92. #define char_italic(F, CI)    italic_base(F)[(CI).b2 / 4]
  93. #define char_tag(CI)        ((CI).b2 % 4)
  94.  
  95. #define NO_TAG            0
  96. #define LIG_TAG            1
  97. #define LIST_TAG        2
  98. #define EXT_TAG            3
  99.  
  100. #define skip_byte(LK)        (LK).b0
  101. #define next_char(LK)        (LK).b1
  102. #define op_byte(LK)        (LK).b2
  103. #define rem_byte(LK)        (LK).b3
  104. #define lig_offset(LK)        ((op_byte(LK) * 256) + rem_byte(LK))
  105. #define kern_offset(LK)        (((op_byte(LK) - 128) * 256) + rem_byte(LK))
  106. #define char_kern(F, LK)    kern_base(F)[kern_offset(LK)]
  107. #define lig_kern_start(F, LK)    (lig_kern_base(F) + rem_byte(LK))
  108. #define lig_kern_restart(F, LK)    (lig_kern_base(F) + lig_offset(LK))
  109.  
  110. #define STOP_FLAG        128
  111. #define KERN_FLAG        128
  112.  
  113. #define ext_top(M)        (M).b0
  114. #define ext_mid(M)        (M).b1
  115. #define ext_bot(M)        (M).b2
  116. #define ext_rep(M)        (M).b3
  117.  
  118. #define SLANT_CODE        1
  119. #define SPACE_CODE        2
  120. #define SPACE_STRETCH_CODE    3
  121. #define SPACE_SHRINK_CODE    4
  122. #define X_HEIGHT_CODE        5
  123. #define QUAD_CODE        6
  124. #define EXTRA_SPACE_CODE    7
  125.  
  126. #define param(F, CODE)        param_base(F)[CODE]
  127. #define slant(F)        param(F, SLANT_CODE)
  128. #define space(F)        param(F, SPACE_CODE)
  129. #define space_stretch(F)    param(F, SPACE_STRETCH_CODE)
  130. #define space_shrink(F)        param(F, SPACE_SHRINK_CODE)
  131. #define x_height(F)        param(F, X_HEIGHT_CODE)
  132. #define quad(F)            param(F, QUAD_CODE)
  133. #define extra_space(F)        param(F, EXTRA_SPACE_CODE)
  134.  
  135. fnt    read_font_info();
  136. void    scan_font_ident();
  137. scal    *find_font_dimen();
  138. ptr    find_font_glue();
  139.  
  140. ptr    new_character();
  141. void    char_warning();
  142.  
  143. void    _tfm_init();
  144. void    _tfm_init_once();
  145.