home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Tex / Tex29 / StTeXsrc.zoo / src / heap.h < prev    next >
C/C++ Source or Header  |  1988-03-13  |  2KB  |  104 lines

  1.  
  2. /*
  3.  * @(#)heap.h 2.5 EPA
  4.  *
  5.  * Copyright 1987,1988 Pat J Monardo
  6.  *
  7.  * Redistribution of this file is permitted through
  8.  * the specifications in the file COPYING.
  9.  *
  10.  * 
  11.  */
  12.  
  13. #define qi(M)           (M + MIN_QUARTERWORD)
  14. #define qo(M)           (M - MIN_QUARTERWORD)
  15. #define hi(M)           (M + MIN_HALFWORD)
  16. #define ho(M)           (M - MIN_HALFWORD)
  17.  
  18. #ifdef NULL
  19. #undef NULL
  20. #endif
  21. #define NULL            MIN_HALFWORD
  22.  
  23. global  mword   mem[];
  24. global  ptr     lo_mem_max;
  25. global  ptr     hi_mem_min;
  26.  
  27. global  int     var_used;
  28. global  int     max_var_used;
  29. global  int     dyn_used;
  30.  
  31. #define link(M)         mem[M].hh.hh1.rh
  32. #define info(M)         mem[M].hh.hh1.lh
  33.  
  34. global  ptr     avail;
  35. global  ptr     mem_end;
  36.  
  37. ptr get_avail();
  38.  
  39.  
  40. #ifdef  STAT
  41. #define fast_get_avail(M) \
  42.     {M = avail; \
  43.     if (M == NULL) M = get_avail(); \
  44.     else {avail = link(M); link(M) = NULL; incr(dyn_used);}}
  45. #else
  46. #define fast_get_avail(M) \
  47.     {M = avail; \
  48.     if (M == NULL) M = get_avail(); \
  49.     else {avail = link(M); link(M) = NULL;}}
  50. #endif
  51.  
  52.  
  53. #ifdef STAT
  54. #define free_avail(M) \
  55.     {link(M) = avail; avail = M; decr(dyn_used);}
  56. #else
  57. #define free_avail(M) \
  58.     {link(M) = avail; avail = M;}
  59. #endif
  60.  
  61. int     flush_list();
  62.  
  63. #define is_empty(M)         (link(M) == EMPTY_FLAG)
  64. #define EMPTY_FLAG          MAX_HALFWORD
  65. #define node_size           info
  66. #define llink(M)            info(M + 1)
  67. #define rlink(M)            link(M + 1)
  68.  
  69. global  ptr rover;
  70.  
  71. ptr     get_node();
  72. int     free_node();
  73.  
  74. global  ptr temp_ptr;
  75.  
  76. #define zero_glue       MEM_BOT
  77. #define fil_glue        (zero_glue + GLUE_SPEC_SIZE)
  78. #define fill_glue       (fil_glue + GLUE_SPEC_SIZE)
  79. #define ss_glue         (fill_glue + GLUE_SPEC_SIZE)
  80. #define fil_neg_glue    (ss_glue + GLUE_SPEC_SIZE)
  81.  
  82. #define LO_MEM_STAT_MAX (fil_neg_glue + GLUE_SPEC_SIZE - 1)
  83.  
  84. #define page_ins_head   (MEM_TOP)
  85. #define contrib_head    (MEM_TOP - 1)
  86. #define page_head       (MEM_TOP - 2)
  87. #define temp_head       (MEM_TOP - 3)
  88. #define hold_head       (MEM_TOP - 4)
  89. #define adjust_head     (MEM_TOP - 5)
  90. #define active          (MEM_TOP - 7)
  91. #define align_head      (MEM_TOP - 8)
  92. #define end_span        (MEM_TOP - 9)
  93. #define lig_trick       (MEM_TOP - 10)
  94. #define garbage         (MEM_TOP - 10)
  95.  
  96. #define HI_MEM_STAT_MIN     (MEM_TOP - 10)
  97. #define HI_MEM_STAT_USAGE   11
  98.  
  99. bool    init_mem();
  100.  
  101. #ifdef INIT
  102. int     sort_avail();
  103. #endif
  104.