Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h> //int*unuse,int*preg
- #include <string.h>
- void inreg(int*preg,int*unuse)
- {
- int k;
- printf("Enter value: ");
- scanf("%d", preg);
- k = *preg;
- while (k)
- {
- if ((k % 10 == 8) || (k % 10 == 9))
- {
- printf("Error: not 8 SS\n");
- exit;
- }
- k /= 10;
- }
- }
- void outreg(int*preg,int*unuse)
- {
- printf("Result: %u\n", (unsigned)*preg);
- }
- void and(int*preg1,int*preg2)
- {
- *preg1=(*preg1)&(*preg2);
- }
- void or(int*preg1,int*preg2)
- {
- *preg1 = (*preg1)|(*preg2);
- }
- void nor(int*preg1, int*preg2)
- {
- *preg1 = ~(*preg1 | *preg2);
- }
- void nand(int*preg1,int*preg2)
- {
- *preg1=~(*preg1 & *preg2);
- }
- void imp(int*preg1,int*preg2)
- {
- *preg1=~(*preg1)|*preg2;
- }
- void bimp(int*preg1,int*preg2)
- {
- *preg1=~(*preg2)|*preg1;
- }
- void coimp(int*preg1,int*preg2)
- {
- *preg1=~(~(*preg1)|*preg2);
- }
- void coBimp(int*preg1,int*preg2)
- {
- *preg1=~(~(*preg2)|*preg1);
- }
- void eqv(int*preg1,int*preg2)
- {
- *preg1=(~(*preg1)|*preg2)&(~(*preg2)|*preg1);
- }
- void copy(int*preg1,int*preg2)
- {
- *preg1=*preg2;
- }
- void xor(int*preg1,int*preg2)
- {
- *preg1=(*preg1 & ~(*preg2))|(~(*preg1) & *preg2);
- }
- void not(int*preg,int*unuse)
- {
- *preg=~(*preg);
- }
- //char *Err[]={"Error: DOUBLE OPEN SK","Error: before EO not found END of SK","Error: before EOF bot found END of SK"}, **Er;
- char *COM[]={"IN","OUT", "NOR","AND","OR","NAND","IMP","BIMP","COIMP","COBIMP","EQV","COPY","XOR","NOT"};
- void (*pdone[])(int*,int*)={inreg,outreg,nor,and,or,nand,imp,bimp,coimp,coBimp,eqv,copy,xor,not};
- void Interpret(char*, char*, char*);
- int main()
- {
- FILE*fi = NULL;
- char buf1[BUFSIZ] = { 0 }, buf2[BUFSIZ] = { 0 }, buf3[BUFSIZ] = { 0 }, *pb = buf1, ch, _c = 0;
- int cs = 0, cc = 0;
- //int a, inComment = 0;
- //char ch1, **Er=*Err;
- if (!(fi = fopen("in.txt", "r")))
- {
- perror("Finish program!");
- return -1;
- }
- /*while (!feof(fi))
- {
- ch1 = fgetc(fi);
- if (ch1 == '{')
- {
- if (inComment)
- {
- printf("%s\n", **Er);
- a = 1;
- Er++;
- }
- else inComment = 1;
- }
- if (ch1 == '}')
- {
- if (!inComment)
- {
- a = 1;
- printf("%s\n",**Er);
- Er++;
- }
- else inComment = 0;
- }
- if ((ch1 == EOF) && (ch1 != '}'))
- {
- a = 1;
- printf("%s\n",**Er);
- //Er++;
- }
- }
- if (a == 0) { */
- while (!feof(fi))
- {
- ch = fgetc(fi);
- if (isalpha(ch))*pb++ = toupper(ch);
- else if (isalpha(_c) && ch != ';')
- {
- *pb = 0;
- if (++cs % 2 == 1)
- pb = buf2;
- else pb = buf3;
- }
- else if (ch == ';')
- {
- cs = *pb = 0;
- pb = buf1;
- printf("%d buf1=%s buf2=%s buf3=%s\n", ++cc, buf1, buf2, buf3);
- Interpret(buf1, buf2, buf3);
- }
- _c = ch;
- }
- //}
- getchar();
- getchar();
- return 0;
- }
- int GetName(char*b)
- {
- return !*(b + 1) && isalpha(*b) ? *b - 'A' : -1;
- }
- void Interpret(char*b1, char*b2, char*b3)
- {
- static int reg[26];
- char**pCOM = COM;
- int border = sizeof(COM) / sizeof(char*), ind;
- for (; (ind = pCOM - COM) < border; pCOM++)
- {
- if (strstr(*pCOM, b2))
- {
- pdone[ind](reg + GetName(b1), reg + GetName(b3));
- return;
- }
- }
- if (pCOM - COM == border)
- {
- printf("Unknown instruction: '%s'\n", b2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement