err_t sr_test_eval(sx_t * sx, sr_t * ret) { sr_t a[1] = {{0,1}}, b[1] = {{0,1}}; err_t err; if (!sx) return ERR_IN_NULL_POINTER; if (sx->islist) { sx_t * sn, * sd; signed n = 0; unsigned d = 1; /* is rational tuple ? */ if (sx->list) { sn = sx->list; if (sn->issint || sn->isuint) { if (sn->issint) n = (int16_t)sn->atom.sint; else if (sn->isuint) n = (uint16_t)sn->atom.uint; else return ERR_FAILURE; if (sn->next) { sd = sn->next; if (sd->isuint) d = (uint16_t)sd->atom.uint; else return ERR_FAILURE; } err = sr_set(ret, n, d); if (err) return err; return 0; } else if (sn->isplain) { if (strncmp(sn->atom.string->buffer, "add", sn->atom.string->used) == 0) { if (sn->next && sn->next->next) { err = sr_test_eval(sn->next, a); if (err) return err; sn = sn->next->next; while (sn) { err = sr_test_eval(sn, b); if (err) return err; if (err) return err; err = sr_add(a, b, a); sn = sn->next; } *ret = *a; } } else if (strncmp(sn->atom.string->buffer, "sub", sn->atom.string->used) == 0) { if (sn->next && sn->next->next) { err = sr_test_eval(sn->next, a); if (err) return err; sn = sn->next->next; while (sn) { err = sr_test_eval(sn, b); if (err) return err; if (err) return err; err = sr_sub(a, b, a); sn = sn->next; } *ret = *a; } } else if (strncmp(sn->atom.string->buffer, "mul", sn->atom.string->used) == 0) { if (sn->next && sn->next->next) { err = sr_test_eval(sn->next, a); if (err) return err; sn = sn->next->next; while (sn) { err = sr_test_eval(sn, b); if (err) return err; if (err) return err; err = sr_mul(a, b, a); sn = sn->next; } *ret = *a; } } else if (strncmp(sn->atom.string->buffer, "div", sn->atom.string->used) == 0) { if (sn->next && sn->next->next) { err = sr_test_eval(sn->next, a); if (err) return err; sn = sn->next->next; while (sn) { err = sr_test_eval(sn, b); if (err) return err; if (err) return err; err = sr_div(a, b, a); sn = sn->next; } *ret = *a; } } else return ERR_FAILURE; } } } return 0; }
int getTermData () { char *name; char *pter; char *sr_set (); char *j; extern char *getenv (), *get_kbd_env (); #ifdef DCUREOR if ((debugc = fopen (DP, "w")) == NULL) { fprintf (stderr, "OPEN ERR IN %d. \n", DP); } #endif /* for convert_key --- added by Nide 10/3 */ if (NULL == (name = get_kbd_env ()) || 0 != convert_getterm (name, (0 != verbose_option))) { fprintf (stderr, "Cannot get keyboard information.\n"); return (-1); } if (((name = getenv ("TERM")) == NULL) || (tgetent (TermData, name) <= 0)) { fprintf (stderr, "Cannot get terminal information.\n"); return (-1); } strcpy (Term_Name, name); pter = TermDataArea; Term_ResetScreen = tgetstr ("rs", &pter); Term_UnderScoreEnd = tgetstr ("ue", &pter); if (!((Term_UnderScoreEnd = tgetstr (j = "ue", &pter)) && ((Term_LineWidth = tgetnum (j = "co")) != -1) && ((Term_RowWidth = tgetnum (j = "li")) != -1) && /* line */ /* (Term_Bell = tgetstr(j = "bl", &pter)) && */ (Term_ClrScreen = tgetstr (j = "cl", &pter)) && (Term_ClrEofLine = tgetstr (j = "ce", &pter)) && (Term_CleEndScreen = tgetstr (j = "cd", &pter)) && (Term_ThrowCursor = tgetstr (j = "cm", &pter)) && /* Check padding */ (Term_StandOutStart = tgetstr (j = "so", &pter)) && (Term_StandOutEnd = tgetstr (j = "se", &pter)) && /* ((Term_StandOutBlankNum = tgetnum(j = "sg")) != -1) && (Term_DelChar = tgetstr(j = "dc", &pter)) && */ (Term_UnderScoreStart = tgetstr (j = "us", &pter)) && (Term_SaveCursor = tgetstr (j = "sc", &pter)) && (Term_RestoreCursor = tgetstr (j = "rc", &pter)) && (Term_SetScrollRegion = tgetstr (j = "cs", &pter)) && (Term_ScrollRegion = sr_set (&pter, 0, Term_RowWidth - 2)))) { fprintf (stderr, "Your terminal doesn't have %s entry in termcap.\n", j); fprintf (stderr, "Maybe, your terminal is not strong enough to use Uum!\n"); return (-1); } if (Term_BoldOutStart && Term_BoldOutEnd) { bold_mode_fun = 1; } else { bold_mode_fun = 0; } Term_BoldOutStart = tgetstr ("md", &pter); Term_BoldOutEnd = tgetstr ("me", &pter); Term_CursorInvisible = tgetstr ("vi", &pter); Term_CursorNormal = tgetstr ("ve", &pter); if (Term_CursorInvisible && Term_CursorNormal) { cursor_invisible_fun = 1; } else { cursor_invisible_fun = 0; } Term_KeyPadOn = tgetstr ("ks", &pter); Term_KeyPadOff = tgetstr ("ke", &pter); if (Term_KeyPadOn && Term_KeyPadOff) { keypad_fun = 1; } else { keypad_fun = 0; } /* and needs more precise check of Terminal status. */ #ifdef DGUX /* copied from JLS5.4.2 */ { struct winsize ws; if ((ioctl (0, TIOCGWINSZ, &ws) == 0) && (ws.ws_row > 0) && (ws.ws_col > 0)) { Term_LineWidth = ws.ws_col; Term_RowWidth = ws.ws_row; } } #endif /* DGUX */ maxlength = Term_LineWidth; crow = Term_RowWidth - conv_lines; /* decfline(TermData); decfline is moved after reading uumrc.*/ return (0); }