home *** CD-ROM | disk | FTP | other *** search
/ Mega Top 1 / os2_top1.zip / os2_top1 / APPS / TEKST / CMTEX330 / SOURCE / STR.C < prev    next >
C/C++ Source or Header  |  1992-02-19  |  1KB  |  105 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. #ifndef lint
  14. static char *sccsid = "%A%";
  15. #endif
  16.  
  17. #include "tex.h"
  18.  
  19. str    null_str;
  20. str    ASCII[256];
  21.  
  22. str    cur_str;
  23. str    cur_str_end;
  24. str    cur_str_ptr;
  25.  
  26. str
  27. make_str ()
  28. {
  29.     int    n;
  30.     str    s;
  31.  
  32.     n = cur_length();
  33.     s = new_str(n);
  34.     memcpy(s, cur_str, n);
  35.     cur_str_ptr = cur_str;
  36.  
  37.     return s;
  38. }
  39.  
  40. void
  41. str_room (i)
  42.     int    i;
  43. {
  44.     if (cur_str_ptr + i >= cur_str_end) {
  45.         overflow("str pool", MAX_STR_SIZE);
  46.     }
  47. }
  48.  
  49. str
  50. new_str (i)
  51.     int    i;
  52. {
  53.     str    s;
  54.  
  55.     s = (str) malloc(i+1);
  56.     if (s == (str) 0) {
  57.         overflow("new str", i);
  58.     }
  59.     s[i] = NUL;
  60.  
  61.     return    s;
  62. }
  63.  
  64. void
  65. free_str (s)
  66.     str    s;
  67. {
  68.     free(s);
  69. }
  70.  
  71. void
  72. _str_init ()
  73. {
  74. }
  75.  
  76. void
  77. _str_init_once ()
  78. {
  79.     int     k;
  80.  
  81. #define app_lc_hex(L) append_char(((L)<10) ? (L)+'0' : (L)-10+'a')
  82.  
  83.     cur_str = new_str(MAX_STR_SIZE);
  84.     cur_str_end = cur_str + MAX_STR_SIZE;
  85.     cur_str_ptr = cur_str;
  86.     for (k = 0; k <= 255; incr(k)) {
  87.         if (k < ' ' || k > '~') {
  88.             append_char('^');
  89.             append_char('^');
  90.             if (k < 0100) {
  91.                 append_char(k + 0100);
  92.             } else if (k < 0200) {
  93.                 append_char(k - 0100);
  94.             } else {
  95.                 app_lc_hex(k / 16);
  96.                 app_lc_hex(k % 16);
  97.             }
  98.         } else {
  99.             append_char(k);
  100.         }
  101.         ASCII[k] = make_str();
  102.     }
  103.     null_str = "";
  104. }
  105.