Example #1
0
File: bouncer.c Project: PtxDK/OSM
void
loop() {
  char op = 0;
  int pri = 0;

  while(1) {

    op = skip_spaces();

    switch (op) {
    case EOF:
      return;
      break;



    case 'p':
      //Pop an element off of the queue.
      if (queue_pop(&Queue, &pri) == 2) {
        printf("!! Queue underflow.\n");
      } else {
        printf("=> %d\n", pri);
      }
      break;


    default:
      ungetc(op, stdin);
      if (scanf("%d", &pri) == 1) {
        //Insert the read priority into the queue.
        if (queue_push(&Queue, pri) == 1) {
          printf("!! Queue overflow.\n");
        }
      } else {
        skip_until_space();
        printf("Invalid input!\n");
      }
    }
  }
}
Example #2
0
static PyObject *
typecast_MXINTERVAL_cast(const char *str, Py_ssize_t len, PyObject *curs)
{
    long years = 0, months = 0, days = 0, denominator = 1;
    double hours = 0.0, minutes = 0.0, seconds = 0.0, hundredths = 0.0;
    double v = 0.0, sign = 1.0;
    int part = 0;

    if (str == NULL) { Py_RETURN_NONE; }

    Dprintf("typecast_MXINTERVAL_cast: s = %s", str);

    while (*str) {
        switch (*str) {

        case '-':
            sign = -1.0;
            break;

        case '0': case '1': case '2': case '3': case '4':
        case '5': case '6': case '7': case '8': case '9':
            v = v * 10.0 + (double)(*str - '0');
            Dprintf("typecast_MXINTERVAL_cast: v = %f", v);
            if (part == 6){
                denominator *= 10;
                Dprintf("typecast_MXINTERVAL_cast: denominator = %ld",
                        denominator);
            }
            break;

        case 'y':
            if (part == 0) {
                years = (long)(v*sign);
                str = skip_until_space(str);
                Dprintf("typecast_MXINTERVAL_cast: years = %ld, rest = %s",
                        years, str);
                v = 0.0; sign = 1.0; part = 1;
            }
            break;

        case 'm':
            if (part <= 1) {
                months = (long)(v*sign);
                str = skip_until_space(str);
                Dprintf("typecast_MXINTERVAL_cast: months = %ld, rest = %s",
                        months, str);
                v = 0.0; sign = 1.0; part = 2;
            }
            break;

        case 'd':
            if (part <= 2) {
                days = (long)(v*sign);
                str = skip_until_space(str);
                Dprintf("typecast_MXINTERVAL_cast: days = %ld, rest = %s",
                        days, str);
                v = 0.0; sign = 1.0; part = 3;
            }
            break;

        case ':':
            if (part <= 3) {
                hours = v;
                Dprintf("typecast_MXINTERVAL_cast: hours = %f", hours);
                v = 0.0; part = 4;
            }
            else if (part == 4) {
                minutes = v;
                Dprintf("typecast_MXINTERVAL_cast: minutes = %f", minutes);
                v = 0.0; part = 5;
            }
            break;

        case '.':
            if (part == 5) {
                seconds = v;
                Dprintf("typecast_MXINTERVAL_cast: seconds = %f", seconds);
                v = 0.0; part = 6;
            }
            break;

        default:
            break;
        }

        str++;
    }

    /* manage last value, be it minutes or seconds or hundredths of a second */
    if (part == 4) {
        minutes = v;
        Dprintf("typecast_MXINTERVAL_cast: minutes = %f", minutes);
    }
    else if (part == 5) {
        seconds = v;
        Dprintf("typecast_MXINTERVAL_cast: seconds = %f", seconds);
    }
    else if (part == 6) {
        hundredths = v;
        Dprintf("typecast_MXINTERVAL_cast: hundredths = %f", hundredths);
        hundredths = hundredths/denominator;
        Dprintf("typecast_MXINTERVAL_cast: fractions = %.20f", hundredths);
    }

    /* calculates seconds */
    if (sign < 0.0) {
        seconds = - (hundredths + seconds + minutes*60 + hours*3600);
    }
    else {
        seconds += hundredths + minutes*60 + hours*3600;
    }

    /* calculates days */
    days += years*365 + months*30;

    Dprintf("typecast_MXINTERVAL_cast: days = %ld, seconds = %f",
            days, seconds);
    return mxDateTime.DateTimeDelta_FromDaysAndSeconds(days, seconds);
}