コード例 #1
0
ファイル: sr.c プロジェクト: xaberus/nih
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;
}
コード例 #2
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);
}