Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.20 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>          //int*unuse,int*preg
  4. #include <string.h>
  5.  
  6. void inreg(int*preg,int*unuse)
  7. {
  8.     int k;
  9.     printf("Enter value: ");
  10.     scanf("%d", preg);
  11.     k = *preg;
  12.     while (k)
  13.     {
  14.         if ((k % 10 == 8) || (k % 10 == 9))
  15.         {
  16.             printf("Error: not 8 SS\n");
  17.             exit;
  18.         }
  19.     k /= 10;
  20.     }
  21. }    
  22. void outreg(int*preg,int*unuse)
  23. {
  24.     printf("Result: %u\n", (unsigned)*preg);
  25. }
  26. void and(int*preg1,int*preg2)
  27. {
  28.     *preg1=(*preg1)&(*preg2);
  29. }
  30. void or(int*preg1,int*preg2)
  31. {
  32.     *preg1 = (*preg1)|(*preg2);
  33. }
  34. void nor(int*preg1, int*preg2)
  35. {
  36.     *preg1 = ~(*preg1 | *preg2);
  37. }
  38. void nand(int*preg1,int*preg2)
  39. {
  40.     *preg1=~(*preg1 & *preg2);
  41. }
  42. void imp(int*preg1,int*preg2)
  43. {
  44.     *preg1=~(*preg1)|*preg2;
  45. }
  46. void bimp(int*preg1,int*preg2)
  47. {
  48.     *preg1=~(*preg2)|*preg1;
  49. }
  50. void coimp(int*preg1,int*preg2)
  51. {
  52.     *preg1=~(~(*preg1)|*preg2);
  53. }
  54. void coBimp(int*preg1,int*preg2)
  55. {
  56.     *preg1=~(~(*preg2)|*preg1);
  57. }
  58. void eqv(int*preg1,int*preg2)
  59. {
  60.     *preg1=(~(*preg1)|*preg2)&(~(*preg2)|*preg1);
  61. }
  62. void copy(int*preg1,int*preg2)
  63. {
  64.     *preg1=*preg2;
  65. }
  66. void xor(int*preg1,int*preg2)
  67. {
  68.     *preg1=(*preg1 & ~(*preg2))|(~(*preg1) & *preg2);
  69. }
  70. void not(int*preg,int*unuse)
  71. {
  72.     *preg=~(*preg);
  73. }
  74.  
  75. //char *Err[]={"Error: DOUBLE OPEN SK","Error: before EO not found END of SK","Error: before EOF bot found END of SK"}, **Er;
  76. char *COM[]={"IN","OUT", "NOR","AND","OR","NAND","IMP","BIMP","COIMP","COBIMP","EQV","COPY","XOR","NOT"};
  77. void (*pdone[])(int*,int*)={inreg,outreg,nor,and,or,nand,imp,bimp,coimp,coBimp,eqv,copy,xor,not};
  78.  
  79. void Interpret(char*, char*, char*);
  80.  
  81. int main()
  82. {
  83.     FILE*fi = NULL;
  84.     char buf1[BUFSIZ] = { 0 }, buf2[BUFSIZ] = { 0 }, buf3[BUFSIZ] = { 0 }, *pb = buf1, ch, _c = 0;
  85.     int cs = 0, cc = 0;
  86.     //int a, inComment = 0;
  87.     //char ch1, **Er=*Err;
  88.  
  89.     if (!(fi = fopen("in.txt", "r")))
  90.     {
  91.         perror("Finish program!");
  92.         return -1;
  93.     }
  94.  
  95.    
  96.  
  97.     /*while (!feof(fi))
  98.     {
  99.         ch1 = fgetc(fi);
  100.         if (ch1 == '{')
  101.         {
  102.             if (inComment)
  103.             {
  104.                 printf("%s\n", **Er);
  105.                 a = 1;
  106.                 Er++;
  107.             }
  108.             else inComment = 1;
  109.         }
  110.         if (ch1 == '}')
  111.         {
  112.             if (!inComment)
  113.             {
  114.                 a = 1;
  115.                 printf("%s\n",**Er);
  116.                 Er++;
  117.             }
  118.             else inComment = 0;
  119.         }
  120.         if ((ch1 == EOF) && (ch1 != '}'))
  121.         {
  122.             a = 1;
  123.             printf("%s\n",**Er);
  124.             //Er++;
  125.         }
  126.     }
  127.     if (a == 0) { */
  128.         while (!feof(fi))
  129.         {
  130.            
  131.             ch = fgetc(fi);
  132.        
  133.             if (isalpha(ch))*pb++ = toupper(ch);
  134.             else if (isalpha(_c) && ch != ';')
  135.         {
  136.                 *pb = 0;
  137.                 if (++cs % 2 == 1)
  138.                     pb = buf2;
  139.                 else pb = buf3;
  140.             }
  141.             else if (ch == ';')
  142.             {
  143.                 cs = *pb = 0;
  144.                 pb = buf1;
  145.                 printf("%d buf1=%s buf2=%s buf3=%s\n", ++cc, buf1, buf2, buf3);
  146.                 Interpret(buf1, buf2, buf3);
  147.             }
  148.             _c = ch;
  149.         }
  150.     //}
  151.     getchar();
  152.     getchar();
  153.     return 0;
  154. }
  155.  
  156. int GetName(char*b)
  157. {
  158.     return !*(b + 1) && isalpha(*b) ? *b - 'A' : -1;
  159. }
  160.  
  161. void Interpret(char*b1, char*b2, char*b3)
  162. {
  163.     static int reg[26];
  164.    
  165.     char**pCOM = COM;
  166.     int border = sizeof(COM) / sizeof(char*), ind;
  167.  
  168.     for (; (ind = pCOM - COM) < border; pCOM++)
  169.     {
  170.         if (strstr(*pCOM, b2))
  171.         {
  172.             pdone[ind](reg + GetName(b1), reg + GetName(b3));
  173.             return;
  174.         }
  175.     }
  176.     if (pCOM - COM == border)
  177.     {
  178.         printf("Unknown instruction: '%s'\n", b2);
  179.     }
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement