support.c
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:4k
源码类别:

编译器/解释器

开发平台:

Others

  1. /*
  2.  * SOFTWARE RIGHTS
  3.  *
  4.  * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
  5.  * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
  6.  * company may do whatever they wish with source code distributed with
  7.  * PCCTS or the code generated by PCCTS, including the incorporation of
  8.  * PCCTS, or its output, into commerical software.
  9.  *
  10.  * We encourage users to develop software with PCCTS.  However, we do ask
  11.  * that credit is given to us for developing PCCTS.  By "credit",
  12.  * we mean that if you incorporate our source code into one of your
  13.  * programs (commercial product, research project, or otherwise) that you
  14.  * acknowledge this fact somewhere in the documentation, research report,
  15.  * etc...  If you like PCCTS and have developed a nice tool with the
  16.  * output, please mention that you developed it using PCCTS.  In
  17.  * addition, we ask that this header remain intact in our source code.
  18.  * As long as these guidelines are kept, we expect to continue enhancing
  19.  * this system and expect to make other tools available as they are
  20.  * completed.
  21.  *
  22.  * DLG 1.33
  23.  * Will Cohen
  24.  * With mods by Terence Parr; AHPCRC, University of Minnesota
  25.  * 1989-1998
  26.  */
  27. #include <stdio.h>
  28. #include <string.h>
  29. #include "dlg.h"
  30. #ifdef MEMCHK
  31. #include "trax.h"
  32. #else
  33. #ifdef __STDC__
  34. #include <stdlib.h>
  35. #else
  36. #include <malloc.h>
  37. #endif /* __STDC__ */
  38. #endif
  39. int err_found = 0; /* indicates whether problem found */
  40. void internal_error(s,file,line)    /* MR9 23-Sep-97 */
  41. char *s,*file;
  42. int line;
  43. {
  44. fprintf(stderr,s,file,line);
  45. exit(PCCTS_EXIT_FAILURE);
  46. }
  47. char *dlg_malloc(bytes,file,line)
  48. int bytes;
  49. char *file;
  50. int line;
  51. {
  52. char *t;
  53. t = (char *) malloc(bytes);
  54. if (!t){
  55. /* error */
  56. internal_error("%s(%d): unable to allocate memoryn",
  57. file,line);
  58. }
  59. return t;
  60. }
  61. char *dlg_calloc(n,bytes,file,line)
  62. int n,bytes;
  63. char *file;
  64. int line;
  65. {
  66. char *t;
  67. t = (char *) calloc(n,bytes);
  68. if (!t){
  69. /* error */
  70. internal_error("%s(%d): unable to allocate memoryn",
  71. file,line);
  72. }
  73. return t;
  74. }
  75. FILE *read_stream(name)
  76. char *name;
  77. {
  78. FILE *f;
  79. if (name){
  80. if (name[0] == '-') {
  81. fprintf(stderr, "dlg: invalid option: '%s'n", name);
  82. f = NULL;
  83. }else{
  84. f = fopen(name, "r");
  85. if (f == NULL){
  86. /* couldn't open file */
  87. fprintf(stderr,
  88. "dlg: Warning: Can't read file %s.n",
  89. name);
  90. }
  91. }
  92. }else{
  93. /* open stdin if nothing there */
  94. f = stdin;
  95. }
  96. return f;
  97. }
  98. FILE *write_stream(name)
  99. char *name;
  100. {
  101. FILE *f;
  102. if (name){
  103. if (name[0] == '-') {
  104. fprintf(stderr, "dlg: invalid option: '%s'n", name);
  105. f = NULL;
  106. }else{
  107. f = fopen(OutMetaName(name), "w");
  108. if (f == NULL){
  109. /* couldn't open file */
  110. fprintf(stderr,
  111. "dlg: Warning: Can't write to file %s.n",
  112. name);
  113. }
  114. else
  115. #ifdef SPECIAL_FOPEN
  116.                 special_fopen_actions(OutMetaName(name)); /* MR1 */
  117. #else
  118. ; /* MR1 */
  119. #endif
  120. }
  121. }else{
  122. /* open stdout if nothing there */
  123. f = stdout;
  124. }
  125. return f;
  126. }
  127. void fatal(message,line_no)
  128. char *message;
  129. int line_no;
  130. {
  131. fprintf(stderr,ErrHdr,
  132. (file_str[0] ? file_str[0] : "stdin"), line_no);
  133. fprintf(stderr, " Fatal: %sn", message);
  134. exit(PCCTS_EXIT_FAILURE);
  135. }
  136. void error(message,line_no)
  137. char *message;
  138. int line_no;
  139. {
  140. fprintf(stderr,ErrHdr,
  141. (file_str[0] ? file_str[0] : "stdin"), line_no);
  142. fprintf(stderr, " Error: %sn", message);
  143. err_found = 1;
  144. }
  145. void warning(message,line_no)
  146. char *message;
  147. int line_no;
  148. {
  149. fprintf(stderr,ErrHdr,
  150. (file_str[0] ? file_str[0] : "stdin"), line_no);
  151. fprintf(stderr, " Warning: %sn", message);
  152. }
  153. /* MR10: Jeff Vincent
  154.    MR10: Changed to remove directory information from n only if
  155.    MR10: if OutputDirectory was changed by user (-o option)
  156. */
  157. char *
  158. #ifdef __USE_PROTOS
  159. OutMetaName(char *n)
  160. #else
  161. OutMetaName(n)
  162. char *n;
  163. #endif
  164. {
  165.     static char *dir_sym = DirectorySymbol;
  166.     static char newname[MaxFileName+1];
  167.     char *p;
  168. /* If OutputDirectory is same as TopDirectory (platform default) then leave n alone. */
  169.     if (strcmp(OutputDirectory, TopDirectory) == 0)
  170. return n;
  171. /* p will point to filename without path information */
  172. if ((p = strrchr(n, *dir_sym)) != NULL)
  173. p++;
  174. else
  175. p = n;
  176. /* Copy new output directory into newname[] */
  177. strcpy(newname, OutputDirectory);
  178. /* if new output directory does not have trailing dir_sym, add it! */
  179. if (newname[strlen(newname)-1] != *dir_sym)
  180. strcat(newname, dir_sym);
  181. /* contatenate FILE NAME ONLY to new output directory */
  182. strcat(newname, p);
  183. return newname;
  184. }