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

  1.  
  2. /*
  3.  * @(#)str.c 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. #include "tex.h"
  14.  
  15. str     str_ptr;
  16. ptr     str_start[MAX_STRINGS];
  17. ascii   str_pool[POOL_SIZE];
  18. ptr     pool_ptr;
  19.  
  20. str     null_str;
  21.  
  22. bool
  23. str_eq_buf (s, k)
  24.     str     s;
  25.     int     k;
  26. {
  27.     int     j;
  28.     
  29.     j = str_start[s];
  30.     while (j < str_start[s + 1]) {
  31.         if (str_pool[j] != buffer[k])
  32.             return FALSE;
  33.         incr(j); incr(k);
  34.     }
  35.     return TRUE;
  36. }
  37.  
  38. bool
  39. str_eq_str (s, t)
  40.     str     s;
  41.     str     t;
  42. {
  43.     int     j;
  44.     int     k;
  45.  
  46.     if (length(s) != length(t))
  47.         return FALSE;
  48.     j = str_start[s];
  49.     k = str_start[t];
  50.     while (j < str_start[s + 1]) {
  51.         if (str_pool[j] != str_pool[k])
  52.             return FALSE;
  53.         incr(j); incr(k);
  54.     }
  55.     return TRUE;
  56. }
  57.  
  58. str
  59. make_str ()
  60. {
  61.     incr(str_ptr);
  62.     if (str_ptr == MAX_STRINGS)
  63.         overflow("number of strings", MAX_STRINGS);
  64.     str_start[str_ptr] = pool_ptr;
  65.     return (str_ptr - 1);
  66. }
  67.  
  68. str
  69. make_str_given (s)
  70.     chrs    s;
  71. {
  72.     while (*s != NUL) {
  73.         append_char(*s);
  74.         incr(s);
  75.     }
  76.     return (make_str());
  77. }
  78.  
  79. init_strings ()
  80. {
  81.     int     k;
  82.  
  83.     str_ptr = pool_ptr = 0;
  84.     for (k = 0; k <= 255; incr(k)) {
  85.         if (k < ' ') {
  86.             append_char('^');
  87.             append_char('^');
  88.             append_char(k + 0100);
  89.         } else if (k == 127) {
  90.             make_str_given("^^?");
  91.             continue;
  92.         } else {
  93.             append_char(k);
  94.         }
  95.         make_str();
  96.     }
  97.     null_str = make_str();
  98. }
  99.