mkoldproto.l 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. /* CHK=0x5793 */
  2. %{
  3. char *rev = "1.00";
  4. /*+-------------------------------------------------------------------------
  5. mkoldproto.c.{l,c} - make "old" style prototypes from "new" kind
  6. cc -Zg source.c | mkproto > lint_args.h
  7. takes prototypes of the style
  8. void change_report(char *original);
  9. and emits
  10. void change_report(char *);
  11. The UNIX V compiler makes the new kind, accepts the old and new kind,
  12. but there are a lot of compilers which don't like the new kind.
  13. Warning, this program will make mush out of "old" style prototypes
  14. fed to it.
  15. --------------------------------------------------------------------------*/
  16. /*+:EDITS:*/
  17. /*:04-26-2000-11:16-wht@bob-RELEASE 4.42 */
  18. /*:01-24-1997-02:37-wht@yuriatin-SOURCE RELEASE 4.00 */
  19. /*:09-11-1996-20:00-wht@yuriatin-3.48-major telnet,curses,structural overhaul */
  20. /*:11-23-1995-11:20-wht@kepler-source control 3.37 for tsx-11 */
  21. /*:11-14-1995-10:23-wht@kepler-3.37.80-source control point: SOCKETS */
  22. /*:05-04-1994-04:39-wht@n4hgf-ECU release 3.30 */
  23. /*:09-10-1992-13:59-wht@n4hgf-ECU release 3.20 */
  24. /*:08-22-1992-15:39-wht@n4hgf-ECU release 3.20 BETA */
  25. /*:11-27-1989-18:31-wht-creation */
  26. int verbose = 0;
  27. /*+-------------------------------------------------------------------------
  28. change_report(original)
  29. --------------------------------------------------------------------------*/
  30. void
  31. change_report(original)
  32. char *original;
  33. {
  34. fputs("fixing: ",stderr);
  35. while(*original)
  36. {
  37. if((*original >= ' ') && (*original <= '~'))
  38. fputc(*original,stderr);
  39. else
  40. fprintf(stderr,"<%02x>",*original);
  41. original++;
  42. }
  43. fputs("\n",stderr);
  44. } /* end of change_report */
  45. /*+-------------------------------------------------------------------------
  46. main(argc,argv,envp)
  47. --------------------------------------------------------------------------*/
  48. main(argc,argv,envp)
  49. int argc;
  50. char **argv;
  51. char **envp;
  52. {
  53. int itmp;
  54. int iargv;
  55. int fileiargv = 0;
  56. if(argc > 1)
  57. {
  58. for(iargv = 1; iargv < argc; iargv++)
  59. {
  60. if(argv[iargv][0] == '-')
  61. {
  62. switch(itmp = (argv[iargv][1]))
  63. {
  64. case 'v':
  65. verbose = 1;
  66. break;
  67. default:
  68. break;
  69. }
  70. }
  71. else
  72. {
  73. if(yyin != stdin)
  74. {
  75. fprintf(stderr,"only 1 filename, please\n");
  76. exit(1);
  77. }
  78. if( (yyin = fopen(argv[iargv],"r")) == NULL)
  79. {
  80. perror(argv[iargv]);
  81. exit(1);
  82. }
  83. fileiargv = iargv;
  84. }
  85. }
  86. }
  87. if(verbose && fileiargv)
  88. fprintf(stderr,"%s:\n",argv[fileiargv]);
  89. yylex();
  90. exit(0);
  91. } /* end of main */
  92. /* vi: set tabstop=4 shiftwidth=4: */
  93. %}
  94. W [ \t]
  95. STRING \"([^"\n]|\\\")*\"
  96. OPCHARS ["'+-*/=|!&%^?><:\]]
  97. IDENT [a-zA-Z0-9_]+
  98. U "unsigned"
  99. I "int"
  100. L "long"
  101. S "short"
  102. C "char"
  103. R "register"
  104. ST "static"
  105. I8 "INT8"
  106. I16 "INT16"
  107. I32 "INT32"
  108. UN_ST ("union "|"struct "){IDENT}
  109. DECLTAB1 ({I}|{C}|{S}|{L}|{U}|{R}|{ST}|{I8}|{I16}|{I32}|{UN_ST})[\t]{IDENT}
  110. DECLTAB2 ({I}|{C}|{S}|{L}|{U}|{R}|{ST}|{I8}|{I16}|{I32}|{UN_ST})[\t ][\t ]+{IDENT}
  111. %START COMMENT PREPROC
  112. %%
  113. <PREPROC>.*\n {ECHO;
  114. BEGIN 0;
  115. }
  116. ^"#" {
  117. ECHO;
  118. BEGIN PREPROC;
  119. }
  120. <COMMENT>([^*\n]|"*"+[^*/\n])* ECHO;
  121. <COMMENT>([^*\n]|"*"+[^*/\n])*"*"*"*/" {ECHO;
  122. BEGIN 0;
  123. }
  124. <COMMENT>.|\n ECHO;
  125. "/*" {
  126. ECHO;
  127. BEGIN COMMENT;
  128. }
  129. "extern " {
  130. ;
  131. }
  132. "* " {
  133. fprintf(yyout,"*");
  134. }
  135. {IDENT}"," {
  136. char *cptr = yytext + yyleng - 1;
  137. if(verbose)
  138. change_report(yytext);
  139. while((*cptr != '\t') && (*cptr != ' ') && (*cptr != '*'))
  140. *cptr-- = 0;
  141. fprintf(yyout,",",yytext);
  142. }
  143. {IDENT}")" {
  144. char *cptr = yytext + yyleng - 1;
  145. if(verbose)
  146. change_report(yytext);
  147. while((*cptr != '\t') && (*cptr != ' ') && (*cptr != '*'))
  148. *cptr-- = 0;
  149. fprintf(yyout,")",yytext);
  150. }
  151. {STRING} ECHO;
  152. "'"."'" ECHO;
  153. .|\n ECHO;