# HG changeset patch # User HackBot # Date 1461798935 0 # Node ID d74cf4326ba6322de7674747b18435172cb540b9 # Parent e3afd51e02ba0cc3c232f2e82f41168f126742b3 ` mv Hpepq8AE moonlang.c diff -r e3afd51e02ba -r d74cf4326ba6 Hpepq8AE --- a/Hpepq8AE Wed Apr 27 23:15:20 2016 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -#include -#include - -#include -#include -#include -#include -// initialize the tape with 30,000 zeroes -unsigned long long int tape[30000] = {0}; -unsigned long long int registrar[3] = {0}; // R1, R2, and R3 -// set the pointer to point at the left-most cell of the tape -unsigned long long int* ptr = tape; - - - -void interpret(char* input) { - char current_char; - size_t i; - size_t i2; - size_t i3; - size_t loop; - char i4; - - for (i = 0; input[i] != 0; i++) { - current_char = input[i]; - if (current_char == 'p') { - ++ptr; - } else if (current_char == 'P') { - --ptr; - } else if (current_char == '+') { - ++*ptr; - } else if (current_char == '-') { - --*ptr; - } else if (current_char == 'o' ) { - putchar(*ptr); - } else if (current_char == 'i') { - - *ptr = getchar(); - - } else if (current_char == '[') { - continue; - } else if (current_char == ']' && *ptr) { - loop = 1; - while (loop > 0) { - current_char = input[--i]; - if (current_char == '[') { - loop--; - } else if (current_char == ']') { - loop++; - } - } - } else if (current_char == '/') { //push the value under the pointer to the register specified by the next value under the pointer - ++ptr; - if (*ptr > 2) { - --ptr; - } else { - char temp1 = *ptr; - --ptr; - registrar[temp1] = *ptr; - } - } else if (current_char == '\\') { //Same as /, except popped, also, i used an excapecode here to get past \ - ++ptr; - if (*ptr > 2) { - --ptr; - } else { - char temp1 = *ptr; - --ptr; - *ptr = registrar[temp1]; - } - } else if (current_char == 'a') { //Add R1 to R2 and put the sum in R3 - registrar[2] = registrar[0] + registrar[1]; - } else if (current_char == 's') { //Subtract R1 from R2 and put the diffrence in R3 - registrar[2] = registrar[0] - registrar[1]; - } else if (current_char == 'd') { // Divide R1 by R2 and put the quotient in R3 - if (registrar[1] == 0) { - printf("Division by zero occured, Ending!"); - break; - } - registrar[2] = registrar[0] / registrar[1]; - } else if (current_char == 'm') { // Multiply R1 by R2 and put the result in R3 - registrar[2] = registrar[0] * registrar[1]; - } else if (current_char == '*') { // Terminate - break; - } else if (current_char == 'j') { // Jump forward n spaces - - for (i2 = *ptr; i2 != 0; i2--) { - i++; - current_char = input[i]; - } - } else if (current_char == 'J') { // Jump backword n spaces - for (i2 = *ptr; i2 != 0; i2--) { - i--; - current_char = input[i]; - } - } else if (current_char == 'r') { //prints out the data in the source until it hits a ; - i++; - - i3 = i; - for (input[i3];input[i3] != ';';i3++){ - putchar(input[i3]); - i++; - - } - - } else if (current_char == 'R') { - i++; - - putchar(input[i]); - } - // More commands to come, the CIOL specs are not done - } -} - - -int main() { - FILE *fp; - char input[100]; - printf("The program requires a file in this location: C:/, The file should be named CIOL.txt and should contain the code of your CIOL program, does this file exist? hit enter to continue"); - scanf("%s",input); - - fp = fopen("/CIOL.txt","r+"); - char input2[10000]; - fgets(input2, 10000, (FILE*)fp); - interpret(input2); // outputs input - fclose(fp); - return 0; -} \ No newline at end of file diff -r e3afd51e02ba -r d74cf4326ba6 moonlang.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/moonlang.c Wed Apr 27 23:15:35 2016 +0000 @@ -0,0 +1,127 @@ +#include +#include + +#include +#include +#include +#include +// initialize the tape with 30,000 zeroes +unsigned long long int tape[30000] = {0}; +unsigned long long int registrar[3] = {0}; // R1, R2, and R3 +// set the pointer to point at the left-most cell of the tape +unsigned long long int* ptr = tape; + + + +void interpret(char* input) { + char current_char; + size_t i; + size_t i2; + size_t i3; + size_t loop; + char i4; + + for (i = 0; input[i] != 0; i++) { + current_char = input[i]; + if (current_char == 'p') { + ++ptr; + } else if (current_char == 'P') { + --ptr; + } else if (current_char == '+') { + ++*ptr; + } else if (current_char == '-') { + --*ptr; + } else if (current_char == 'o' ) { + putchar(*ptr); + } else if (current_char == 'i') { + + *ptr = getchar(); + + } else if (current_char == '[') { + continue; + } else if (current_char == ']' && *ptr) { + loop = 1; + while (loop > 0) { + current_char = input[--i]; + if (current_char == '[') { + loop--; + } else if (current_char == ']') { + loop++; + } + } + } else if (current_char == '/') { //push the value under the pointer to the register specified by the next value under the pointer + ++ptr; + if (*ptr > 2) { + --ptr; + } else { + char temp1 = *ptr; + --ptr; + registrar[temp1] = *ptr; + } + } else if (current_char == '\\') { //Same as /, except popped, also, i used an excapecode here to get past \ + ++ptr; + if (*ptr > 2) { + --ptr; + } else { + char temp1 = *ptr; + --ptr; + *ptr = registrar[temp1]; + } + } else if (current_char == 'a') { //Add R1 to R2 and put the sum in R3 + registrar[2] = registrar[0] + registrar[1]; + } else if (current_char == 's') { //Subtract R1 from R2 and put the diffrence in R3 + registrar[2] = registrar[0] - registrar[1]; + } else if (current_char == 'd') { // Divide R1 by R2 and put the quotient in R3 + if (registrar[1] == 0) { + printf("Division by zero occured, Ending!"); + break; + } + registrar[2] = registrar[0] / registrar[1]; + } else if (current_char == 'm') { // Multiply R1 by R2 and put the result in R3 + registrar[2] = registrar[0] * registrar[1]; + } else if (current_char == '*') { // Terminate + break; + } else if (current_char == 'j') { // Jump forward n spaces + + for (i2 = *ptr; i2 != 0; i2--) { + i++; + current_char = input[i]; + } + } else if (current_char == 'J') { // Jump backword n spaces + for (i2 = *ptr; i2 != 0; i2--) { + i--; + current_char = input[i]; + } + } else if (current_char == 'r') { //prints out the data in the source until it hits a ; + i++; + + i3 = i; + for (input[i3];input[i3] != ';';i3++){ + putchar(input[i3]); + i++; + + } + + } else if (current_char == 'R') { + i++; + + putchar(input[i]); + } + // More commands to come, the CIOL specs are not done + } +} + + +int main() { + FILE *fp; + char input[100]; + printf("The program requires a file in this location: C:/, The file should be named CIOL.txt and should contain the code of your CIOL program, does this file exist? hit enter to continue"); + scanf("%s",input); + + fp = fopen("/CIOL.txt","r+"); + char input2[10000]; + fgets(input2, 10000, (FILE*)fp); + interpret(input2); // outputs input + fclose(fp); + return 0; +} \ No newline at end of file