|
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: 2877 (0xb3d) Types: TextFile Names: »mywget.c«
└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit └─⟦e7f64e0c0⟧ »EurOpenD3/mail/vmh.tar.Z« └─⟦dcb95597f⟧ └─⟦this⟧ »mywget.c«
#ifndef lint static char rcsid[] = "$Header: mywget.c,v 2.6 88/01/13 19:11:33 deboor Exp $"; static char notice[] = "This program is in the public domain and is available for unlimited \ distribution as long as this notice is enclosed."; #endif /* * routines to replace curses input routines. * * $Source: /c/support/deboor/usr/src/old/vmh/RCS/mywget.c,v $ * $Revision: 2.6 $ * $Author: deboor $ * * FUNCTIONS: * mygetch wgetch() with idle_flag maintenance * mywgetstr wgetstr() with default and interrupt: returns 0 if * ^C'ed, 1 if \n'ed or \r'ed */ #include "vmh.h" /* Returns zero if aborted */ /* Returns non-zero if ended w/return */ /**** If the string "s" is non-empty on entry, that is used as ****/ /**** a type-ahead prompt buffer! ****/ mywgetstr(win, s, allowspaces) WINDOW *win; char *s; int allowspaces; { int c; /* Next character */ char *p = s; /* prompt string */ int pf = 0; /* Non-zero if prompting */ int xinit, yinit; getyx (win, yinit, xinit); /* Remember initial position */ if (strlen(s)) /* If supplied w/prompt string */ { p = s + strlen(s); /* Point p at end of string */ wprintw(win, s); /* Put up prompt */ wrefresh(win); pf = 1; /* remember prompt flag */ } for ( ; ; ) /* Handles <bs> sometimes */ { c = mygetch(win) & 0177; /* Stupid idiotic compiler */ switch (c) { case ERR: case '\n': case '\r': *p = '\0'; return (GS_OK); default: if (c == bs) { /* hasn't got decent switch stmt */ if (p <= s) { _putchar ('\007'); } else { waddstr (win, "\b \b"); p--; /* Decr pointer */ } } else if (c == quit) { wprintw(win, " ... Aborted\n"); wrefresh(win); *s = 0; return(GS_ABORT); } else if (c == werasec) { # define NukeC(win) waddstr (win, "\b \b") while ((--p >= s) && ((*p == ' ') || (*p == '\t'))) { NukeC(win); } while ((p >= s) && (*p != ' ') && (*p != '\t')){ NukeC(win); p--; } p++; } else { /* Normally, just add the char */ if (pf || c == killc) {/* don't use default.. */ p = s; /* Zero out the string */ *p = 0; /* And its image on */ wmove(win, yinit, xinit); /* the window */ wclrtoeol(win); } if (c > 040 || (c == 040 && allowspaces)) { waddch(win, c); *p++ = c; } } } wrefresh(win); /* Update screen every character */ pf = 0; /* non-zero only for first input character */ } } mygetch(win) register WINDOW *win; { register int i; /* Alarms break me up */ idleflag = 1; /* Ok for mailwatch to interrupt */ while ((i = wgetch(win)) < 0) ; idleflag = 0; /* Not ok for mailwatch */ return (i); }