home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / games / volume13 / okbridge / part07 / ps.h < prev    next >
C/C++ Source or Header  |  1992-01-12  |  4KB  |  110 lines

  1. /* ps.h -- "parse-string" data structure.
  2.  ! 
  3.  ! Copyright (C) 1990,1991 by Matthew Clegg
  4.  ! 
  5.  ! This program may be copied and distributed freely.  Please do not
  6.  ! charge money for this program or for any program derived from it.
  7.  ! If you modify this program, then include a notice stating plainly
  8.  ! that your program is derived from the okbridge program and is not
  9.  ! the same as the official okbridge program.
  10.  !
  11.  ! I welcome any suggestions for improvement to okbridge, and 
  12.  ! I would be especially happy to receive improved source code.
  13.  ! If you have comments or suggestions, or if you would like to
  14.  ! join the okbridge mailing list, then write to
  15.  !
  16.  !   mclegg@cs.ucsd.edu
  17.  !
  18.  *
  19.  * This file defines a data structure for handling strings which are
  20.  * to be parsed.  The crucial aspect of a such a data structure is that
  21.  * it permit the current character to be read without advancing the
  22.  * input pointer.
  23.  *
  24.  * The lifetime of a parse string can be described crudely as follows:
  25.  *   Create the parse string
  26.  *   Repeat:
  27.  *     Copy data into the parse string (from memory or from a file).
  28.  *     Read the data out of the parse string.
  29.  *   End.
  30.  *
  31.  * Thus, we provide procedures for handling each of these steps and for
  32.  * giving some additional information about the string.
  33.  */
  34.  
  35. typedef char *parse_string;
  36.  
  37. #define PS_SIZE        0
  38. #define PS_LENGTH    1
  39. #define PS_POS        2
  40. #define PS_OFFSET    3
  41.  
  42.  
  43. extern parse_string ps_alloc ();
  44. /* parse_string ps_alloc (int n); */
  45. /* Returns a parse_string which can hold up to n bytes of text. */
  46.  
  47. /* void ps_reset(parse_string ps); */
  48. /* Clears a parse_string so that new data can be copied into it. */
  49. #define ps_reset(ps)    (ps[PS_LENGTH]=ps[PS_POS]=0;)
  50.  
  51. extern ps_put ();
  52. /* void ps_put (parse_string ps, char ch); */
  53. /* Adds the character ch to the parse_string ps. */
  54.  
  55. extern ps_copy ();
  56. /* void ps_copy (parse_string ps, char *s); */
  57. /* Copies the string s to the parse_string ps.
  58.    Resets ps before doing the copy. */
  59.  
  60. extern ps_read ();
  61. /* void ps_read (parse_string ps, FILE *fp); */
  62. /* Copies the next text line from the file fp to the parse_string ps.
  63.  * Resets ps before doing the copy.
  64.  */
  65.  
  66. /* char ps_scan (parse_string ps); */
  67. /* Returns the current character in the parse_string ps.
  68.  * Does not advance the pointer in ps.
  69.  */
  70. #define ps_scan(ps)    ((ps[PS_POS] < ps[PS_LENGTH]) ? ps [PS_OFFSET + ps[PS_POS]] : '\0')
  71.  
  72. extern int ps_matches ();
  73. /* int ps_matches (parse_string ps, char *key); */
  74. /* Returns TRUE if the next sequence of characters in the parse string
  75.  * matches key.  If so, then advances the pointer in the parse string
  76.  * past key.  Otherwise, returns FALSE.
  77.  */
  78.  
  79. extern int ps_matches_ic ();
  80. /* int ps_matches_ic (parse_string ps, char *key); */
  81. /* Returns TRUE if the next sequence of characters in the parse string
  82.  * matches key, after both are converted to upper case.  If so, then
  83.  * advances the pointer in the parse string past key.
  84.  */
  85.  
  86. /* int ps_next (parse_string ps); */
  87. /* Advances the pointer in the parse_string ps to the next character.
  88.  *  Returns the character which the read head has just moved past.
  89.  */
  90. /* #define ps_next(ps)    (ps[PS_POS]++) */
  91. #define ps_next(ps) ((ps[PS_POS] < ps[PS_LENGTH]) ? ps[PS_OFFSET+ps[PS_POS]++] : '\0')
  92.  
  93. /* int ps_size  (parse_string ps); */
  94. /* Returns the number of characters allocated for text in ps. */
  95. #define ps_size(ps)    (ps[PS_SIZE])
  96.  
  97. /* int ps_length (parse_string ps); */
  98. /* Returns the number of characters of text currently used in ps. */
  99. #define ps_length(ps)    (ps[PS_LENGTH])
  100.  
  101. /* int ps_pos (parse_string ps); */
  102. /* Returns the index of the current character in ps. */
  103. #define ps_pos(ps)    (ps[PS_POS])
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.