home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume12 / grabchars-1.9 / part02 < prev    next >
Text File  |  1990-05-05  |  8KB  |  271 lines

  1. Newsgroups: comp.sources.misc
  2. subject: v12i050: Grabchars 1.9, get keystrokes direct from user BSD/SYSV part 2
  3. From: daniel@island.UUCP (Dan Smith "Happy Birthday James Brown G.O.S.")
  4. Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  5.  
  6. Posting-number: Volume 12, Issue 50
  7. Submitted-by: daniel@island.UUCP (Dan Smith "Happy Birthday James Brown G.O.S.")
  8. Archive-name: grabchars-1.9/part02
  9.  
  10.     This is part 2 of the grabchars kit...
  11.  
  12.                 Daniel
  13.  
  14.    dansmith@well.sf.ca.us   daniel@island.uu.net   unicom!daniel@pacbell.com
  15. ph: (415) 332 3278 (h), 491 1000 (w) disclaimer: Island's coffee was laced :-)
  16.  
  17. #! /bin/sh
  18.  
  19. # Make a new directory for the grabchars sources, cd to it, and run kits 1
  20. # thru 2 through sh.  When all 2 kits have been run, read README.
  21.  
  22. echo "This is grabchars 1.9 kit 2 (of 2).  If kit 2 is complete, the line"
  23. echo '"'"End of kit 2 (of 2)"'" will echo at the end.'
  24. echo ""
  25. export PATH || (echo "You didn't use sh, you clunch." ; kill $$)
  26. mkdir web 2>/dev/null
  27. echo Extracting demo
  28. sed >demo <<'!STUFFY!FUNK!' -e 's/X//'
  29. X#!/bin/csh -f
  30. Xclear
  31. Xcat << GUMBY
  32. X
  33. X    Grabchars demo...
  34. X
  35. X    get one character with "grabchars"
  36. XGUMBY
  37. Xgrabchars
  38. Xecho " status returned was $status"
  39. X
  40. Xcat << POKEY
  41. X
  42. X    grab a vowel with "grabchars -caeiou"
  43. X
  44. X    Type something that isn't a vowel at first...
  45. X
  46. XPOKEY
  47. Xgrabchars -caeiou
  48. Xecho " status returned was $status"
  49. X
  50. Xcat << WILMA
  51. X
  52. X    prompt the user  with "grabchars -p 'give me any character >> '"
  53. XWILMA
  54. Xgrabchars -p 'give me any character >> '
  55. Xecho " status returned was $status"
  56. X
  57. Xcat << FRED
  58. X
  59. X    prompt through stderr  with "grabchars -q 'give me any character >> '",
  60. Xso that we can set the variable "user_char"...
  61. XFRED
  62. Xset user_char=`grabchars -q 'give me any character >> '`
  63. Xecho " status returned was $status"
  64. Xecho '$user_char = '$user_char
  65. X
  66. Xcat << BETTY
  67. X
  68. X    enter three characters...  "grabchars -n3"
  69. X
  70. XBETTY
  71. Xgrabchars -n3
  72. Xecho " status returned was $status"
  73. X
  74. Xcat << DINO
  75. X
  76. X    map 5 characters to upper case.... "grabchars -n5 -U"
  77. X
  78. XDINO
  79. Xgrabchars -n5 -U
  80. X
  81. Xcat <<  BARNEY
  82. X
  83. X    enter 10 characters within 3 seconds... "grabchars -n10 -t3"
  84. X
  85. X
  86. XBARNEY
  87. Xgrabchars -n10 -t3
  88. Xset really_typed=$status
  89. Xif ($really_typed == 10) then
  90. X    echo 'hey\! you got 10\!?'
  91. Xelse
  92. X    echo "    $really_typed returned...means that grabchars timed out..."
  93. Xendif
  94. X
  95. Xdef_test:
  96. Xcat << RADRED
  97. X
  98. X    let the user pick a default...
  99. X    using "grabchars -d yes -p 'just hit return '...
  100. X
  101. XRADRED
  102. X#    the '-f' here is used to flush any previous input...
  103. Xgrabchars -f -d yes -p 'just hit return '
  104. Xif ($status != 3) then
  105. X    echo whoops\!  Let\'s try that again...
  106. X    goto def_test
  107. Xendif
  108. X
  109. Xcat << MUSKRAT
  110. X
  111. X    same idea, but let this timeout in four seconds...
  112. X    using "grabchars -f -d always -t 4"
  113. X
  114. X    (don't type anything...)
  115. X
  116. XMUSKRAT
  117. Xgrabchars -f -d always -t 4
  118. X
  119. Xcat << PEBBLES
  120. X
  121. X
  122. X    The last one...  get two numbers with a ten second timeout...
  123. X    trying "grabchars -c 0123456789 -n2 -t10 -p 'give me 2 numbers >> '
  124. X
  125. XPEBBLES
  126. Xgrabchars -c 0123456789 -n2 -t10 -p 'give me 2 numbers >> '
  127. Xecho " status returned was $status"
  128. Xecho ""
  129. Xecho test/demo done...enjoy\!
  130. !STUFFY!FUNK!
  131. chmod 755 demo
  132. echo Extracting globals.c
  133. sed >globals.c <<'!STUFFY!FUNK!' -e 's/X//'
  134. X/*
  135. X**    $Header: globals.c,v 1.9 89/12/29 21:14:44 daniel grabchars_1_9 $
  136. X**
  137. X**    globals.c - declare global variables for grabchars
  138. X**
  139. X**    Dan Smith (daniel@island.uu.net), November 29, 1988
  140. X*/
  141. X#include <stdio.h>
  142. X#include "grabchars.h"    /* where we typedef FLAGS */
  143. X
  144. XFILE *outfile, *otherout;
  145. XFLAG *flags;
  146. X
  147. Xint exit_stat;
  148. Xchar valid_chars[128], default_string[128];
  149. X
  150. X#ifdef DV_ERASE
  151. Xchar *erase_buf;    /* DV: Malloc'ed later */
  152. X#endif
  153. X
  154. X/*
  155. X**    this gets in the way sitting in grabchars.c, so I moved it here.
  156. X**    If you add anything, keep in mind that you're trying to squeeze
  157. X**    everything onto a 24 line window/terminal... The "-h" doc
  158. X**    is just a convenience, any option that grabchars doesn't already
  159. X**    use will give the help screen...
  160. X*/
  161. Xchar *usage_statement[] = {
  162. X"usage: grabchars        gets one keystroke",
  163. X"    -b            output to stdout and stderr",
  164. X"    -c<valid characters>    only <valid chars> are returned",
  165. X"    -d<char(s)>        default char or string to return",
  166. X"    -e            output to stderr instead of stdout",
  167. X"    -f            flush any previous input before reading",
  168. X"    -h            help screen",
  169. X"    -n<number>        number of characters to read",
  170. X"    -p<prompt>        prompt to help user",
  171. X"    -q<prompt>        prompt to help user (through stderr)",
  172. X"    -r            RETURN key exits (use with -n)",
  173. X"    -s            silent, just return status",
  174. X"    -t<seconds>        timeout after <seconds>",
  175. X"    -E            honor erase/kill characters", /* DV */
  176. X"    -U/-L            upper/lower case mapping on input",
  177. X"grabchars -c aeiou        get one of the vowels",
  178. X"grabchars -c i            get the letter 'i'",
  179. X"grabchars '-penter a letter '    print the prompt \"enter a letter \"",
  180. X"grabchars -n4            get four characters",
  181. X"grabchars -t2            timeout after two seconds",
  182. X" ",
  183. X"print a prompt and grab three characters...",
  184. X"grabchars -p 'enter three characters >> ' -n 3",
  185. X0
  186. X};
  187. X
  188. Xstatic char my_copyright[]=
  189. X"grabchars 1.9, (c) Dan Smith (daniel@island.uu.net), 1990";
  190. !STUFFY!FUNK!
  191. echo Extracting grabchars.h
  192. sed >grabchars.h <<'!STUFFY!FUNK!' -e 's/X//'
  193. X/*
  194. X**    $Header: grabchars.h,v 1.9 89/12/29 21:15:25 daniel grabchars_1_9 $
  195. X**
  196. X**    grabchars.h - setup for grabchars
  197. X**
  198. X**    Dan Smith (daniel@island.uu.net), November 29, 1988
  199. X*/
  200. X
  201. X#define mk_lower(c) (isupper (c) ? tolower (c) : c)
  202. X#define mk_upper(c) (islower (c) ? toupper (c) : c)
  203. X
  204. X/* define SIGRET=void in Makefile for Sun 4.X */
  205. X#ifndef SIGRET
  206. X#define SIGRET int
  207. X#endif
  208. X
  209. Xstruct flag_type {
  210. X    int both;    /* output to stdout and stderr */
  211. X    int check;    /* filter input */
  212. X    int dflt;    /* use following char or string as default */
  213. X    int used_dflt;    /* if editing on and used default don't echo stderr */
  214. X    int flush;    /* if set flush input buffer */
  215. X    int ret_key;    /* RETURN key exits when set */
  216. X    int silent;    /* be quiet, just return a status */
  217. X    int erase;    /* DV: honor erase/kill characters */
  218. X    int lower;    /* map chars to lower case */
  219. X    int upper;    /* map chars to upper case */
  220. X};
  221. X
  222. Xtypedef struct flag_type FLAG;
  223. X
  224. !STUFFY!FUNK!
  225. echo Extracting MANIFEST
  226. sed >MANIFEST <<'!STUFFY!FUNK!' -e 's/X//'
  227. XAfter all the grabchars kits are run you should have the following files:
  228. X
  229. XFilename        Kit Description
  230. X--------        --- -----------
  231. XConfig                   1 configure grabchars
  232. XMANIFEST                 2 Packing list
  233. XMakefile.dist            1 Config makes Makefile from this
  234. XREADME                   1 general idea of all things grabby
  235. XTODO                     1 some thoughts on improvements
  236. Xdemo                     2 test/familiarize with grabchars
  237. Xglobals.c                2 global vars
  238. Xgrabchars.1              1 man page
  239. Xgrabchars.c              1 main program
  240. Xgrabchars.h              2 defines
  241. Xsys.c                    1 system calls
  242. Xweb/README               1 README for the two types of script exmaples
  243. Xweb/gensource            1 called by mkmenu
  244. Xweb/mkmenu               1 use to generate menu-oriented csh scripts
  245. Xweb/script.template      1 example script
  246. !STUFFY!FUNK!
  247. echo ""
  248. echo "End of kit 2 (of 2)"
  249. cat /dev/null >kit2isdone
  250. run=''
  251. config=''
  252. for iskit in 1 2; do
  253.     if test -f kit${iskit}isdone; then
  254.     run="$run $iskit"
  255.     else
  256.     todo="$todo $iskit"
  257.     fi
  258. done
  259. case $todo in
  260.     '')
  261.     echo "You have run all your kits.  Please read README and then type Config."
  262.     chmod 755 Config
  263.     ;;
  264.     *)  echo "You have run$run."
  265.     echo "You still need to run$todo."
  266.     ;;
  267. esac
  268. : Someone might mail this, so...
  269. exit
  270.  
  271.