home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / net / pascal2c.1 < prev    next >
Internet Message Format  |  1987-01-27  |  4KB

  1. From HELLER%cs.umass.edu@relay.cs.net Tue Jan 27 01:56:15 1987
  2. Path: beno!seismo!ut-sally!husc6!mit-eddie!rutgers!brl-adm!adm!HELLER%cs.umass.edu@relay.cs.net
  3. From: HELLER%cs.umass.edu@relay.cs.net (Stride 440 User)
  4. Newsgroups: net.sources
  5. Subject: ptoc.c
  6. Message-ID: <3820@brl-adm.ARPA>
  7. Date: 27 Jan 87 06:56:15 GMT
  8. Sender: news@brl-adm.ARPA
  9. Lines: 139
  10.  
  11. /* -*-c,save-*- */
  12. /*------------------------------------------------------
  13.  *    PTOC.C - Pascal to C pre-translator
  14.  *    Robert Heller Fri Feb  1 09:55:14 1985
  15.  *------------------------------------------------------*/
  16. #define VMS /* VMS version */
  17. /*#define CPM /* CP/M-68K version */
  18. #ifdef VMS
  19. #include <stdio.h>    /* standard I/O */
  20. #include <ctype.h>    /* character macros */
  21. #define FAST register    /* (not really needed under VMS...) */
  22. #define ROM readonly static    /* (for Read Only stuff, if any) */
  23. #define LOCAL static    /* for static stuff */
  24. #define GLOBAL extern    /* for external stuff */
  25. #endif
  26. #ifdef CPM
  27. #include <stdio.h>    /* standard I/O */
  28. #include <ctype.h>    /* character macros */
  29. #define FAST register    /* fast access vars */
  30. #define ROM static    /* (for Read Only stuff, if any) */
  31. #define LOCAL static    /* for static stuff */
  32. #define GLOBAL extern    /* for external stuff */
  33. #define CPMEOF 0x1a    /* ^Z - EndOfFile under CP/M */
  34. #endif
  35.  
  36. /* main routine:  get words and special character and process them */
  37. main()
  38. {
  39.     FAST char *letter;
  40.     LOCAL word[100];
  41.     FAST int wordlnth,c;
  42.  
  43.     letter = (&word[0]);
  44.     wordlnth = 0;
  45.     while ((c=getchar()) != EOF
  46. #ifdef CPM
  47.     || (isatty(fileno(stdin)) && c != CPMEOF)
  48. #endif
  49.     ) {
  50.     if (isalpha(c)) {
  51.         *letter++ = c;
  52.         wordlnth++;
  53.         }
  54.     else {
  55.         if (wordlnth > 0) {
  56.         *letter = '\0';
  57.         wtest(word);
  58.         wordlnth = 0;
  59.         letter = (&word[0]);
  60.         }
  61.         ctest(c);
  62.         }
  63.     }
  64.     if (wordlnth>0) {
  65.     *letter = '\0';
  66.     wtest(word);
  67.     putchar('\n');
  68.     }
  69.     }
  70. wtest(word)
  71. FAST char *word;
  72. {
  73.     FAST char *swapword;
  74.  
  75.     swapword = word;
  76.     switch (*word) {
  77.     case 'w': case 'W':
  78.     if (cf_strcmp(word,"writeln") == 0 ||
  79.         cf_strcmp(word,"write") == 0) swapword = "printf";
  80.     break;
  81.     case 'r': case 'R':
  82.     if (cf_strcmp(word,"readln") == 0 ||
  83.         cf_strcmp(word,"read") == 0) swapword = "scanf";
  84.     break;
  85.     case 't': case 'T':
  86.     if (cf_strcmp(word,"then") == 0) swapword = "\0";
  87.     break;
  88.     case 'a': case 'A':
  89.     if (cf_strcmp(word,"and") == 0) swapword = "&&";
  90.     break;
  91.     case 'o': case 'O':
  92.     if (cf_strcmp(word,"or") == 0) swapword = "||";
  93.     break;
  94.     case 'b': case 'B':
  95.     if (cf_strcmp(word,"begin") == 0) swapword = "{";
  96.     break;
  97.     case 'e': case 'E':
  98.     if (cf_strcmp(word,"end") == 0) swapword = ";}";
  99.     break;
  100.     default: break;
  101.     }
  102.     swap(swapword);
  103.     }
  104. ctest(c)
  105. FAST c;
  106. {
  107.     switch (c) {
  108.     case '\'' : putchar('"'); break;
  109.     case '{' : swap("/*"); break;
  110.     case '}' : swap("*/"); break;
  111.     case '(' : swapif('(','*',"/*"); break;
  112.     case '*' : swapif('*',')',"*/"); break;
  113.     case ':' : swapif(':','=',"="); break;
  114.     case '<' : swapif('<','>',"!="); break;
  115.     case '>' : putchar(c); putchar(getchar()); break;
  116.     case '=' : swap("=="); break;
  117.     default: putchar(c);
  118.     }
  119.     }
  120. swap(s)
  121. FAST char *s;
  122. {
  123.     while(*s != '\0') putchar(*s++);
  124.     }
  125. swapif(first,second,replacement)
  126. FAST char first,second,*replacement;
  127. {
  128.     FAST char c;
  129.  
  130.     if ((c=getchar()) == second) swap(replacement);
  131.     else {
  132.     putchar(first);
  133.     ungetc(c,stdin);
  134.     }
  135.     }
  136. cf_strcmp(s1,s2)
  137. FAST char *s1,*s2;
  138. {
  139.     FAST int i;
  140.  
  141.     while(*s1 != '\0' && *s2 != '\0' && toupper(*s1) == toupper(*s2)) {
  142.     s1++;
  143.     s2++;
  144.     }
  145.     i = toupper(*s1) - toupper(*s2);
  146.     if (i<0) return(-1);
  147.     else if (i>0) return(1);
  148.     else return(0);
  149.     }
  150.  
  151.  
  152.