65816-llvm-mos/demos/gnoStdin.c
Scott Duensing 9e53e5fd38 GNO Support
2026-05-29 15:43:28 -05:00

23 lines
1 KiB
C

// gnoStdin.c — stdin verification, now with a printf BEFORE the read
// (mirroring gnoCat) to test whether prior stdout output corrupts fgets.
// 0xC0DE = exact "FILE-STDIN-OK"; 0xBAD1 = other; 0xBAD0 = EOF.
#include <stdint.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
char line[80];
line[0] = 0;
printf("Type a line:\n"); // <-- prior stdout write, like gnoCat
char *r = fgets(line, sizeof(line), stdin);
size_t n = strlen(line);
while (n && (line[n-1] == '\n' || line[n-1] == '\r')) line[--n] = 0;
uint16_t mark;
if (r && strcmp(line, "FILE-STDIN-OK") == 0) mark = 0xC0DE;
else if (r && n > 0) mark = 0xBAD1;
else mark = 0xBAD0;
*(volatile uint16_t *)0x025000UL = mark;
*(volatile uint16_t *)0x025002UL = (uint16_t)n;
*(volatile uint16_t *)0x025004UL = (uint16_t)(uint8_t)line[0];
for (volatile unsigned long i = 0; i < 300000UL; i++) {}
return 0;
}