home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / tex / texsrc1 / Src / lib / c / strpascal < prev    next >
Text File  |  1993-05-02  |  2KB  |  107 lines

  1. /* strpascal.c: deal with C vs. Pascal strings.  */
  2.  
  3. #include "config.h"
  4. #include "c-pathch.h"
  5.  
  6. /* Change the Pascal string P_STRING into a C string; i.e., make it
  7.    start after the leading character Pascal puts in, and terminate it
  8.    with a null.  */
  9.  
  10. void
  11. make_c_string (p_string)
  12.     char **p_string;
  13. {
  14.   (*p_string)++;
  15.   null_terminate (*p_string);
  16. }
  17.  
  18.  
  19. /* Replace the first space we come to with a null.  */
  20.  
  21. void
  22. null_terminate (s)
  23.     char *s;
  24. {
  25.   while (*s != ' ')
  26.     s++;
  27.  
  28.   *s = 0;
  29. }
  30.  
  31.  
  32. /* Change the C string C_STRING into a Pascal string; i.e., make it
  33.    start one character before it does now (so C_STRING had better have
  34.    been a Pascal string originally), and terminate with a space.  */
  35.  
  36. void
  37. make_pascal_string (c_string)
  38.     char **c_string;
  39. {
  40.   space_terminate (*c_string);
  41.   (*c_string)--;
  42. }
  43.  
  44.  
  45. /* Replace the first null we come to with a space.  */
  46.  
  47. void
  48. space_terminate (s)
  49.     char *s;
  50. {
  51.   for ( ; *s != 0; s++)
  52.     ;
  53.   
  54.   *s = ' ';
  55. }
  56.  
  57. /* Change the suffix of BASE (a Pascal string) to be SUFFIX (a
  58.    C string), if BASE does not already have a suffix.  We have to change
  59.    them to C strings to do the work, then convert them back to Pascal
  60.    strings.  */
  61.  
  62. void
  63. extendfilename (base, suffix)
  64.     char *base;
  65.     char *suffix;
  66. {
  67.   make_c_string (&base);
  68.   
  69.   if (!find_suffix (base))
  70.     {
  71.       strcat (base, ".");
  72.       strcat (base, suffix);
  73.     }
  74.     
  75.   make_pascal_string (&base);
  76. }
  77.  
  78. /* Print S, a Pascal string, on the file F.  It starts at index 1 and is
  79.    terminated by a space.  */
  80.  
  81. static void
  82. fprint_pascal_string (s, f)
  83.     char *s;
  84.     FILE *f;
  85. {
  86.   s++;
  87.   while (*s != ' ') putc (*s++, f);
  88. }
  89.  
  90. /* Print S, a Pascal string, on stdout.  */
  91.  
  92. void
  93. printpascalstring (s)
  94.     char *s;
  95. {
  96.   fprint_pascal_string (s, stdout);
  97. }
  98.  
  99. /* Ditto, for stderr.  */
  100.  
  101. void
  102. errprintpascalstring (s)
  103.     char *s;
  104. {
  105.   fprint_pascal_string (s, stderr);
  106. }
  107.