char* espctl(Conv *c, char **f, int n) { Espcb *ecb = c->ptcl; char *e = nil; if(strcmp(f[0], "esp") == 0) e = setalg(ecb, f, n, espalg); else if(strcmp(f[0], "ah") == 0) e = setalg(ecb, f, n, ahalg); else if(strcmp(f[0], "header") == 0) ecb->header = 1; else if(strcmp(f[0], "noheader") == 0) ecb->header = 0; else e = "unknown control request"; return e; }
/**************************************************** * Hlavní program. ****************************************************/ int main(void) { double rnumber; // číslo se kterým se má počítat double inumber; // číslo se kterým se má počítat char enter[CMDLEN]; // vstup od uživatele setrad(); /* Čte řádky až do konce souboru */ while (readEnter(enter) != EOF) { if (sscanf(enter, "%lg,%lg", &rnumber, &inumber) == 2) { pushalg(rnumber, inumber); } else if (sscanf(enter, "%lgL%lg", &rnumber, &inumber) == 2) { pushexp(rnumber, inumber); } else if (sscanf(enter, ",%lg", &inumber) == 1) { pushalg(0, inumber); } else if (sscanf(enter, "%lg", &rnumber) == 1) { pushalg(rnumber, 0); } else if (strcmp(enter, "pi") == 0) { pushalg(M_PI, 0); } else if (strcmp(enter, "e") == 0) { pushalg(M_E, 0); } else if (strcmp(enter, "+") == 0) { make2wrap(makePlus, enter); } else if (strcmp(enter, "-") == 0) { make2wrap(makeMinus, enter); } else if (strcmp(enter, "*") == 0) { make2wrap(makeTimes, enter); } else if (strcmp(enter, "/") == 0) { make2wrap(makeDivid, enter); } else if (strcmp(enter, "**") == 0) { /* n-tá mocnina */ make2wrap(cpow, enter); } else if (strcmp(enter, "^") == 0) { /* převrácená hodnota */ make1wrap(makeFlipp, enter); } else if (strcmp(enter, "sqrt") == 0 || strcmp(enter, "t") == 0) { make1wrap(csqrt, enter); } else if (strcmp(enter, "exp") == 0 || strcmp(enter, "x") == 0) { /* exponenciální funkce */ make1wrap(cexp, enter); } else if (strcmp(enter, "ln") == 0) { make1wrap(clog, enter); } else if (strcmp(enter, "log") == 0) { make1wrap(clog10, enter); } else if (strcmp(enter, "r") == 0) { /* přepne kalkulačku do radiánů */ setrad(); } else if (strcmp(enter, "d") == 0) { /* přepne kalkulačku do stupňů */ setdeg(); } else if (strcmp(enter, "la") == 0) { /* poslední číslo převede do algebraickém tvaru */ last2alg(); printStack(); } else if (strcmp(enter, "le") == 0) { /* poslední číslo převede exponenciálním tvaru */ last2exp(); printStack(); } else if (strcmp(enter, "aa") == 0) { /* všechny čísla převede do algebraickém tvaru */ all2alg(); printStack(); } else if (strcmp(enter, "ae") == 0) { /* všechny čísla převede do exponenciálním tvaru */ all2exp(); printStack(); } else if (strcmp(enter, "da") == 0) { setalg(); } else if (strcmp(enter, "de") == 0) { setexp(); } else if (strcmp(enter, "switch") == 0 || strcmp(enter, "s") == 0) { if (!lastSwitch()) fprintf(stderr, " error > Nelze prohodit\n"); } else if (strcmp(enter, "deg") == 0) { make1wrap(rad2deg, enter); } else if (strcmp(enter, "rad") == 0) { make1wrap(deg2rad, enter); /* Goniometrické funkce */ } else if (strcmp(enter, "sin") == 0) { make1wrap(csin, enter); } else if (strcmp(enter, "cos") == 0) { make1wrap(ccos, enter); } else if (strcmp(enter, "tan") == 0 || strcmp(enter, "tg") == 0) { make1wrap(ctan, enter); } else if (strcmp(enter, "asin") == 0) { make1wrap(casin, enter); } else if (strcmp(enter, "acos") == 0) { make1wrap(cacos, enter); } else if (strcmp(enter, "atan") == 0 || strcmp(enter, "atg") == 0) { make1wrap(catan, enter); } else if (enter[0] == '>') { /* ukládá do proměnné */ complex double number = pop(); memput(number, enter, algform ? ALGFORM : EXPFORM); push(number, algform); } else if (enter[0] == '<') { /* vybírá obsah proměnné */ enter[0] = '>'; char form; complex double number = memget(enter, &form); push(number, form == ALGFORM ? true : false); } else if (strcmp(enter, "rem") == 0 || strcmp(enter, "m") == 0) { pop(); printStack(); } else if (strcmp(enter, "clr") == 0 || strcmp(enter, "c") == 0) { stackclear(); // vymaže celý zásobník } else if (strcmp(enter, "p") == 0 || strcmp(enter, "print") == 0) { // jen tiskne zásobník printStack(); } else if (strcmp(enter, "help") == 0 || strcmp(enter, "h") == 0) { printHelp(); } else if (strcmp(enter, "quit") == 0 || strcmp(enter, "q") == 0) { break; } else { fprintf(stderr, " error > %s\n", enter); fprintf(stderr, " error > Neplatný vstup\n"); } } stackclear(); // maže zásobník memclear(); // maže zásobník return 0; }