/* egg_getc: * Reads the next byte of the input stream, applying some bodges. */ static int egg_getc() { int c = do_getc(); if ((c >= 'A') && (c <= 'Z')) c = c - 'A' + 'a'; if (c == '#') { while ((c != '\n') && (c != EOF)) c = do_getc(); } if (c == '\n') egg_line++; return c; }
static int read_offsets(dsk_data_t *data) { long idx; int a, acyl, asid, lcyl, lsid, lsec, llen, c, count; idx = 0; data->len = 0; while (242) { acyl = do_getc(data); idx++; if (acyl == EOF) return 0; asid = do_getc(data); idx++; if (asid == EOF) return -1; lcyl = do_getc(data); idx++; if (lcyl == EOF) return -1; lsid = do_getc(data); idx++; if (lsid == EOF) return -1; lsec = do_getc(data); idx++; if (lsec == EOF) return -1; llen = do_getc(data); idx++; if (llen == EOF) return -1; c = do_getc(data); idx++; if (c == EOF) return -1; count = c; c = do_getc(data); idx++; if (c == EOF) return -1; count |= (c << 8); data->offset[data->len].head = lsid; data->offset[data->len].cylinder = lcyl; data->offset[data->len].sector = lsec; data->offset[data->len].count = count; data->offset[data->len].offset = idx; data->len++; for (a = 0;a < count;a++) { c = do_getc(data); idx++; if (c == EOF) return -1; } } }
/* Copies stdin to stdout, performing substitutions. */ static void subst_from_stdin (void) { static char *buffer; static size_t bufmax; static size_t buflen; int c; for (;;) { c = do_getc (); if (c == EOF) break; /* Look for $VARIABLE or ${VARIABLE}. */ if (c == '$') { unsigned short int opening_brace = 0; unsigned short int closing_brace = 0; c = do_getc (); if (c == '{') { opening_brace = 1; c = do_getc (); } if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '_') { unsigned short int valid; /* Accumulate the VARIABLE in buffer. */ buflen = 0; do { if (buflen >= bufmax) { bufmax = 2 * bufmax + 10; buffer = xrealloc (buffer, bufmax); } buffer[buflen++] = c; c = do_getc (); } while ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '_'); if (opening_brace) { if (c == '}') { closing_brace = 1; valid = 1; } else { valid = 0; do_ungetc (c); } } else { valid = 1; do_ungetc (c); } if (valid) { /* Terminate the variable in the buffer. */ if (buflen >= bufmax) { bufmax = 2 * bufmax + 10; buffer = xrealloc (buffer, bufmax); } buffer[buflen] = '\0'; /* Test whether the variable shall be substituted. */ if (!all_variables && !sorted_string_list_member (&variables_set, buffer)) valid = 0; } if (valid) { /* Substitute the variable's value from the environment. */ const char *env_value = getenv (buffer); if (env_value != NULL) fputs (env_value, stdout); } else { /* Perform no substitution at all. Since the buffered input contains no other '$' than at the start, we can just output all the buffered contents. */ putchar ('$'); if (opening_brace) putchar ('{'); fwrite (buffer, buflen, 1, stdout); if (closing_brace) putchar ('}'); } } else { do_ungetc (c); putchar ('$'); if (opening_brace) putchar ('{'); } } else putchar (c); } }
/* * Reads and returns a character from the serial port * - Times out after delay iterations checking for presence of character * - Sets *error_p to UART error bits or - on timeout * - On timeout, sets *error_p to -1 and returns 0 */ char awaitkey(unsigned long delay, int* error_p) { return (do_getc(NULL, delay, error_p)); }
int fgetc(FILE *f) { return do_getc(f); }