|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 3347 (0xd13)
Types: TextFile
Names: »manscreen.c«
└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen
└─⟦this⟧ »cph85dist/mandelbrot/manscreen.c«
/*
* (Textual) screen handling for Mandelbrot programs.
* Also prompt/input routines and some other junk.
*/
#include <stdio.h>
#include <ctype.h>
#ifdef vms
#include errno
#define IO_ERROR errno
#endif
#define FALSE 0
#define TRUE 1
#define EOS '\0'
extern char line[]; /* General scratch (input line) */
extern double atof();
extern char *strchr();
/*
* Prompt and read (integer/real/complex/string)
*/
getint(row, prompt, result, def_value, max_value)
int row;
char *prompt;
int *result;
int def_value;
int max_value;
{
again: *result = def_value;
if (isatty(fileno(stdin))) {
scr_move(row, 1);
scr_eol();
printf("%s (0:%d) <%d>: ",
prompt, max_value, def_value);
fflush(stdout);
}
if (gets(line) == NULL)
return (FALSE);
if (line[0] != EOS)
*result = atoi(line);
if (*result < 0 || *result > max_value) {
printf("\nvalue %d out of range 0 .. %d, try again",
*result, max_value);
scr_eol();
goto again;
}
return (TRUE);
}
int
getdouble(row, prompt, result)
int row;
char *prompt;
double *result;
{
again: if (isatty(fileno(stdin))) {
scr_move(row, 1);
scr_eol();
printf("%s: ", prompt);
fflush(stdout);
}
if (gets(line) == NULL)
return (FALSE);
if (line[0] == EOS) {
printf("No default permitted, try again\n");
goto again;
}
*result = atof(line);
return (TRUE);
}
getcomplex(row, prompt, real, imag)
int row;
char *prompt;
double *real, *imag;
{
register char *lp;
again: if (isatty(fileno(stdin))) {
scr_move(row, 1);
scr_eol();
printf("%s: ", prompt);
fflush(stdout);
}
if (gets(line) == NULL)
return (FALSE);
else if (line[0] == EOS) {
printf("No default permitted, try again\n");
goto again;
}
else if ((lp = strchr(line, ',')) == NULL) {
printf("Need two values, separated by a comma\n");
goto again;
}
*lp = EOS;
*real = atof(line);
*imag = atof(lp + 1);
return (TRUE);
}
getstring(row, prompt, result, def_value)
int row;
char *prompt;
char *result;
char *def_value;
{
strcpy(result, def_value);
if (isatty(fileno(stdin))) {
scr_move(row, 1);
scr_eol();
printf("%s <%s>: ", prompt, result);
fflush(stdout);
}
if (gets(line) == NULL)
return (FALSE);
if (line[0] != EOS)
strcpy(result, line);
return (TRUE);
}
\f
/*
* Display routines (text -- for commands) These assume ANSI controls:
* scr_clear() Clear screen, Home cursor
* scr_home() Home cursor
* scr_move(r,c) Move to row r, column c (upper-left == 1,1)
* scr_eol() Clear to end of line
*/
scr_clear()
{
scr_home();
printf("\033[2J"); /* ANSI Erase display */
printf("\033[?25h"); /* DEC force cursor on */
}
scr_home()
{
scr_move(1, 1);
}
scr_move(row, col)
{
printf("\033[%d;%dH", row, col); /* ANSI Cursor Position */
}
scr_eol()
{
printf("\033[K"); /* ANSI Erase Line */
}
\f
FILE *
fcreate(fname)
char *fname;
/*
* Create a text file
*/
{
register FILE *fd;
#ifdef vms
/*
* This creates files in vanilla RMS on VMS V2
*/
int channel;
extern FILE *fdopen();
if ((channel = creat(fname, 0, "rat=cr", "rfm=var")) == -1
|| (fd = fdopen(channel, "w")) == NULL) {
perror(fname);
return (NULL);
}
#else
if ((fd = fopen(fname, "w")) == NULL) {
perror(fname);
return (NULL);
}
#endif
return (fd);
}