home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / dde / oc / !OC / c / ocs < prev   
Encoding:
Text File  |  1994-11-10  |  3.7 KB  |  72 lines

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. typedef void (*fptr)(); typedef void (*actn)(); struct 
  6. fsmcell { actn action; unsigned char nextstate; };
  7.  
  8. FILE *fileout,*filein;
  9.  
  10. int main(int argc,char *argv[]);
  11. void fsm(int c);
  12. void prefsm(int c);
  13. int premap(int c);
  14. int map(int c);
  15. void null(int c, fptr vec);
  16. void outc(int c, fptr vec);
  17. void W(int c, fptr vec); 
  18. void Wc(int c, fptr vec);
  19. void SL(int c, fptr vec);
  20. void SLc(int c, fptr vec);
  21. void err(int c, fptr vec);
  22. void pchar(int c);
  23. void NL(int c, fptr vec);
  24. void NLc(int c, fptr vec);
  25. void BSLc(int c, fptr vec);
  26. void WSL(int c, fptr vec);
  27. void WSLc(int c, fptr vec);
  28. void NLSL(int c, fptr vec);
  29. void NLSLc(int c, fptr vec);
  30. static struct fsmcell prestab[6][4] = { outc,1, null,0, outc,3, outc,1, null,4, 
  31. null,2, outc,1, outc,1, Wc,1, null,2, NLc,3, Wc,1, null,5, outc,0, outc,3, 
  32. outc,3, BSLc,1, null,1, BSLc,1, BSLc,1, BSLc,3, null,3, BSLc,3, BSLc,3 }; 
  33. static struct fsmcell stab[16][8] = { null,2, outc,0, null,1, null,9, outc,5, 
  34. outc,7, outc,0, outc,0, null,10, Wc,0, null,1, null,9, Wc,5, Wc,7, Wc,0, Wc,0 
  35. , err,0, null,3, SL,1, SL,9, err,0, err,0, err,0, SLc,0 , null,3, null,4, 
  36. null,3, null,3, null,3, null,3, null,3, null,3, null,0, null,4, null,3, 
  37. null,3, null,3, null,3, null,3, null,3, outc,5, outc,5, outc,5, err,0, outc,0, 
  38. outc,5, outc,6, outc,5, outc,5, outc,5, outc,5, err,5, outc,5, outc,5, outc,5, 
  39. outc,5, outc,7, outc,7, outc,7, err,0, err,0, outc,0, outc,8, outc,7, outc,7, 
  40. outc,7, outc,7, err,7, outc,7, outc,7, outc,7, outc,7, null,13, NLc,0, null,9, 
  41. null,9, NLc,5, NLc,7, NLc,0, NLc,0, err,0, null,11, WSL,1, WSL,9, err,0, 
  42. err,0, err,0, WSLc,0, null,11, null,12, null,11, null,11, null,11, null,11, 
  43. null,11, null,11, null,1, null,12, null,11, null,11, null,11, null,11, 
  44. null,11, null,11, err,0, null,14, NLSL,1, NLSL,9, err,0, err,0, err,0, 
  45. NLSLc,0, null,14, null,15, null,14, null,14, null,14, null,14, null,14, 
  46. null,14, null,9, null,15, null,14, null,14, null,14, null,14, null,14, null,14 
  47. }; int main(int argc,char *argv[]) { int c; if (argc!=3) {
  48. fprintf(stderr,"Syntax : oc [infile] [outfile]\n"); exit(1); } filein=fopen(argv[1],"rb"); fileout=fopen(argv[2],"wt");
  49. if(filein==NULL || fileout==NULL) { fprintf(stderr,"File error\n"); exit(1); }
  50. while(c = fgetc(filein), c != EOF) prefsm(c); fclose(filein); fclose(fileout); } void
  51. prefsm(c) int c; { static unsigned char state = 0; struct fsmcell *cp; int 
  52. input; input = premap(c); cp = &prestab[state][input]; (*cp->action)(c,fsm); 
  53. state = cp->nextstate; } int premap(int c) { switch(c) { case '\\': 
  54. return(0); case '\n': return(1); case '#': return(2); default: return(3); } } 
  55. void fsm(int c) { static unsigned char state = 0; struct fsmcell *cp; int
  56. input; input = map(c); cp = &stab[state][input]; (*cp->action)(c,pchar); state 
  57. = cp->nextstate; } int map(c) int c; { switch(c) { case '/': return(0); case 
  58. '*': return(1); case ' ': case '\t': return(2); case '\n': return(3); case 
  59. '\"': return(4); case '\'': return(5); case '\\': return(6); default: 
  60. return(7); } } void null(int c, fptr vec) { return; } void outc(int c,
  61. fptr vec) { (*vec)(c); } void W(int c, fptr vec) { (*vec)(' '); } void 
  62. Wc(int c, fptr vec) { (*vec)(' '); (*vec)(c); } void SL(int c,
  63. fptr vec) { (*vec)('/'); } void SLc(int c, fptr vec) { (*vec)('/');
  64. (*vec)(c); } void err(int c, fptr vec) { printf("\nError\n"); exit(1);
  65. } void pchar(int c) { fputc(c,fileout); } void NL(int c, fptr vec) {
  66. (*vec)('\n'); } void NLc(int c, fptr vec) { (*vec)('\n'); (*vec)(c); }
  67. void BSLc(int c, fptr vec) { (*vec)('\\'); (*vec)(c); } void WSL(
  68. int c, fptr vec) { (*vec)(' '); (*vec)('/'); } void WSLc(int c, fptr 
  69. vec) { (*vec)(' '); (*vec)('/'); (*vec)(c); } void NLSL(int c, fptr 
  70. vec) { (*vec)('\n'); (*vec)('/'); } void NLSLc(c,vec) int c; fptr vec; {
  71. (*vec)('\n'); (*vec)('/'); (*vec)(c); }
  72.