copy/io.c

60 lines
1.1 KiB
C
Raw Normal View History

2018-10-08 05:07:48 +00:00
#include <stdio.h>
#include <string.h> /* strlen */
2022-04-05 02:18:19 +00:00
#include "io.h"
2018-11-13 02:27:27 +00:00
#include "prodos.h"
#include "prodosext.h"
#define ESC '\x1b'
2018-10-08 05:07:48 +00:00
static char *readLine(char *line, size_t capacity);
static void chomp(char *line);
static bool complete;
2018-11-13 02:27:27 +00:00
static uint8_t result;
2018-10-08 05:07:48 +00:00
2022-04-05 02:18:19 +00:00
bool inputFileName(const char *prompt, FilePath name)
2018-10-08 05:07:48 +00:00
{
complete = false;
while (! complete) {
printf(prompt);
2022-04-05 02:18:19 +00:00
readLine(name, sizeof(name));
2018-11-13 02:27:27 +00:00
if (strlen(name) == 0) {
puts("Aborting");
break;
2018-10-08 05:07:48 +00:00
}
2018-11-13 02:27:27 +00:00
else if (name[0] == ESC) {
puts("Escaping");
break;
2018-10-08 05:07:48 +00:00
}
}
2018-11-13 02:27:27 +00:00
return complete;
2018-10-08 05:07:48 +00:00
}
char *readLine(char *line, size_t capacity)
{
char *result;
if ((result = fgets(line, capacity, stdin)) != NULL)
chomp(line);
2018-11-13 02:27:27 +00:00
else if (ferror(stdin))
perror("stdin");
2018-10-08 05:07:48 +00:00
return result;
}
void chomp(char *line)
{
size_t i;
char c;
for (i = strlen(line); i > 0; ) {
c = line[--i];
if (c == '\r' || c == '\n')
line[i] = '\0';
else
break;
}
}