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"); } } } }
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); }