home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.sources.misc
- subject: v12i050: Grabchars 1.9, get keystrokes direct from user BSD/SYSV part 2
- From: daniel@island.UUCP (Dan Smith "Happy Birthday James Brown G.O.S.")
- Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
-
- Posting-number: Volume 12, Issue 50
- Submitted-by: daniel@island.UUCP (Dan Smith "Happy Birthday James Brown G.O.S.")
- Archive-name: grabchars-1.9/part02
-
- This is part 2 of the grabchars kit...
-
- Daniel
-
- dansmith@well.sf.ca.us daniel@island.uu.net unicom!daniel@pacbell.com
- ph: (415) 332 3278 (h), 491 1000 (w) disclaimer: Island's coffee was laced :-)
-
- #! /bin/sh
-
- # Make a new directory for the grabchars sources, cd to it, and run kits 1
- # thru 2 through sh. When all 2 kits have been run, read README.
-
- echo "This is grabchars 1.9 kit 2 (of 2). If kit 2 is complete, the line"
- echo '"'"End of kit 2 (of 2)"'" will echo at the end.'
- echo ""
- export PATH || (echo "You didn't use sh, you clunch." ; kill $$)
- mkdir web 2>/dev/null
- echo Extracting demo
- sed >demo <<'!STUFFY!FUNK!' -e 's/X//'
- X#!/bin/csh -f
- Xclear
- Xcat << GUMBY
- X
- X Grabchars demo...
- X
- X get one character with "grabchars"
- XGUMBY
- Xgrabchars
- Xecho " status returned was $status"
- X
- Xcat << POKEY
- X
- X grab a vowel with "grabchars -caeiou"
- X
- X Type something that isn't a vowel at first...
- X
- XPOKEY
- Xgrabchars -caeiou
- Xecho " status returned was $status"
- X
- Xcat << WILMA
- X
- X prompt the user with "grabchars -p 'give me any character >> '"
- XWILMA
- Xgrabchars -p 'give me any character >> '
- Xecho " status returned was $status"
- X
- Xcat << FRED
- X
- X prompt through stderr with "grabchars -q 'give me any character >> '",
- Xso that we can set the variable "user_char"...
- XFRED
- Xset user_char=`grabchars -q 'give me any character >> '`
- Xecho " status returned was $status"
- Xecho '$user_char = '$user_char
- X
- Xcat << BETTY
- X
- X enter three characters... "grabchars -n3"
- X
- XBETTY
- Xgrabchars -n3
- Xecho " status returned was $status"
- X
- Xcat << DINO
- X
- X map 5 characters to upper case.... "grabchars -n5 -U"
- X
- XDINO
- Xgrabchars -n5 -U
- X
- Xcat << BARNEY
- X
- X enter 10 characters within 3 seconds... "grabchars -n10 -t3"
- X
- X
- XBARNEY
- Xgrabchars -n10 -t3
- Xset really_typed=$status
- Xif ($really_typed == 10) then
- X echo 'hey\! you got 10\!?'
- Xelse
- X echo " $really_typed returned...means that grabchars timed out..."
- Xendif
- X
- Xdef_test:
- Xcat << RADRED
- X
- X let the user pick a default...
- X using "grabchars -d yes -p 'just hit return '...
- X
- XRADRED
- X# the '-f' here is used to flush any previous input...
- Xgrabchars -f -d yes -p 'just hit return '
- Xif ($status != 3) then
- X echo whoops\! Let\'s try that again...
- X goto def_test
- Xendif
- X
- Xcat << MUSKRAT
- X
- X same idea, but let this timeout in four seconds...
- X using "grabchars -f -d always -t 4"
- X
- X (don't type anything...)
- X
- XMUSKRAT
- Xgrabchars -f -d always -t 4
- X
- Xcat << PEBBLES
- X
- X
- X The last one... get two numbers with a ten second timeout...
- X trying "grabchars -c 0123456789 -n2 -t10 -p 'give me 2 numbers >> '
- X
- XPEBBLES
- Xgrabchars -c 0123456789 -n2 -t10 -p 'give me 2 numbers >> '
- Xecho " status returned was $status"
- Xecho ""
- Xecho test/demo done...enjoy\!
- !STUFFY!FUNK!
- chmod 755 demo
- echo Extracting globals.c
- sed >globals.c <<'!STUFFY!FUNK!' -e 's/X//'
- X/*
- X** $Header: globals.c,v 1.9 89/12/29 21:14:44 daniel grabchars_1_9 $
- X**
- X** globals.c - declare global variables for grabchars
- X**
- X** Dan Smith (daniel@island.uu.net), November 29, 1988
- X*/
- X#include <stdio.h>
- X#include "grabchars.h" /* where we typedef FLAGS */
- X
- XFILE *outfile, *otherout;
- XFLAG *flags;
- X
- Xint exit_stat;
- Xchar valid_chars[128], default_string[128];
- X
- X#ifdef DV_ERASE
- Xchar *erase_buf; /* DV: Malloc'ed later */
- X#endif
- X
- X/*
- X** this gets in the way sitting in grabchars.c, so I moved it here.
- X** If you add anything, keep in mind that you're trying to squeeze
- X** everything onto a 24 line window/terminal... The "-h" doc
- X** is just a convenience, any option that grabchars doesn't already
- X** use will give the help screen...
- X*/
- Xchar *usage_statement[] = {
- X"usage: grabchars gets one keystroke",
- X" -b output to stdout and stderr",
- X" -c<valid characters> only <valid chars> are returned",
- X" -d<char(s)> default char or string to return",
- X" -e output to stderr instead of stdout",
- X" -f flush any previous input before reading",
- X" -h help screen",
- X" -n<number> number of characters to read",
- X" -p<prompt> prompt to help user",
- X" -q<prompt> prompt to help user (through stderr)",
- X" -r RETURN key exits (use with -n)",
- X" -s silent, just return status",
- X" -t<seconds> timeout after <seconds>",
- X" -E honor erase/kill characters", /* DV */
- X" -U/-L upper/lower case mapping on input",
- X"grabchars -c aeiou get one of the vowels",
- X"grabchars -c i get the letter 'i'",
- X"grabchars '-penter a letter ' print the prompt \"enter a letter \"",
- X"grabchars -n4 get four characters",
- X"grabchars -t2 timeout after two seconds",
- X" ",
- X"print a prompt and grab three characters...",
- X"grabchars -p 'enter three characters >> ' -n 3",
- X0
- X};
- X
- Xstatic char my_copyright[]=
- X"grabchars 1.9, (c) Dan Smith (daniel@island.uu.net), 1990";
- !STUFFY!FUNK!
- echo Extracting grabchars.h
- sed >grabchars.h <<'!STUFFY!FUNK!' -e 's/X//'
- X/*
- X** $Header: grabchars.h,v 1.9 89/12/29 21:15:25 daniel grabchars_1_9 $
- X**
- X** grabchars.h - setup for grabchars
- X**
- X** Dan Smith (daniel@island.uu.net), November 29, 1988
- X*/
- X
- X#define mk_lower(c) (isupper (c) ? tolower (c) : c)
- X#define mk_upper(c) (islower (c) ? toupper (c) : c)
- X
- X/* define SIGRET=void in Makefile for Sun 4.X */
- X#ifndef SIGRET
- X#define SIGRET int
- X#endif
- X
- Xstruct flag_type {
- X int both; /* output to stdout and stderr */
- X int check; /* filter input */
- X int dflt; /* use following char or string as default */
- X int used_dflt; /* if editing on and used default don't echo stderr */
- X int flush; /* if set flush input buffer */
- X int ret_key; /* RETURN key exits when set */
- X int silent; /* be quiet, just return a status */
- X int erase; /* DV: honor erase/kill characters */
- X int lower; /* map chars to lower case */
- X int upper; /* map chars to upper case */
- X};
- X
- Xtypedef struct flag_type FLAG;
- X
- !STUFFY!FUNK!
- echo Extracting MANIFEST
- sed >MANIFEST <<'!STUFFY!FUNK!' -e 's/X//'
- XAfter all the grabchars kits are run you should have the following files:
- X
- XFilename Kit Description
- X-------- --- -----------
- XConfig 1 configure grabchars
- XMANIFEST 2 Packing list
- XMakefile.dist 1 Config makes Makefile from this
- XREADME 1 general idea of all things grabby
- XTODO 1 some thoughts on improvements
- Xdemo 2 test/familiarize with grabchars
- Xglobals.c 2 global vars
- Xgrabchars.1 1 man page
- Xgrabchars.c 1 main program
- Xgrabchars.h 2 defines
- Xsys.c 1 system calls
- Xweb/README 1 README for the two types of script exmaples
- Xweb/gensource 1 called by mkmenu
- Xweb/mkmenu 1 use to generate menu-oriented csh scripts
- Xweb/script.template 1 example script
- !STUFFY!FUNK!
- echo ""
- echo "End of kit 2 (of 2)"
- cat /dev/null >kit2isdone
- run=''
- config=''
- for iskit in 1 2; do
- if test -f kit${iskit}isdone; then
- run="$run $iskit"
- else
- todo="$todo $iskit"
- fi
- done
- case $todo in
- '')
- echo "You have run all your kits. Please read README and then type Config."
- chmod 755 Config
- ;;
- *) echo "You have run$run."
- echo "You still need to run$todo."
- ;;
- esac
- : Someone might mail this, so...
- exit
-
-