home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1150 < prev    next >
Encoding:
Internet Message Format  |  1990-12-28  |  39.3 KB

  1. From: pjc@pcbox.UUCP (Paul J. Condie)
  2. Newsgroups: alt.sources
  3. Subject: menu(1)  part 8 of 11
  4. Message-ID: <430@pcbox.UUCP>
  5. Date: 6 Apr 90 17:55:24 GMT
  6.  
  7.  
  8. #!/bin/sh
  9. # this is part 8 of a multipart archive
  10. # do not concatenate these parts, unpack them in order with /bin/sh
  11. # file utilities.d/libgeti.d/GetInput.c continued
  12. #
  13. CurArch=8
  14. if test ! -r s2_seq_.tmp
  15. then echo "Please unpack part 1 first!"
  16.      exit 1; fi
  17. ( read Scheck
  18.   if test "$Scheck" != $CurArch
  19.   then echo "Please unpack part $Scheck next!"
  20.        exit 1;
  21.   else exit 0; fi
  22. ) < s2_seq_.tmp || exit 1
  23. echo "x - Continuing file utilities.d/libgeti.d/GetInput.c"
  24. sed 's/^X//' << 'SHAR_EOF' >> utilities.d/libgeti.d/GetInput.c
  25. X                /*
  26. X                **  Toggle between typeover/insert mode.
  27. X                */
  28. X                insertmode = (insertmode) ? FALSE : TRUE;
  29. X                break;
  30. X
  31. X               case KEY_SAVE:
  32. X                           ScrnFile(win, LINES, COLS) ;
  33. X                           clearok(win, TRUE) ;
  34. X                           wmove(win, row, col) ;
  35. X                           break;
  36. X
  37. X               case KEY_PRINT:
  38. X                              ScrnPrnt(win, LINES, COLS, fldErrRow) ;
  39. X                              clearok(win, TRUE);
  40. X                              wmove(win, row, col) ;
  41. X                              continue ;
  42. X
  43. X                    case KEY_BACKSPACE:
  44. X                        if (col > colStart) 
  45. X                    {
  46. X                               wattrset(win, fldAttrib) ;
  47. X                               mvwaddch(win, rowStart, --col, ' ') ;
  48. X                               wattrset(win, 0) ;
  49. X                               wmove(win, rowStart, col) ;
  50. X                        } 
  51. X                    else
  52. X                               BELL;
  53. X                        break ;
  54. X
  55. X                    case KEY_RETURN:
  56. X                    case KEY_ENTER:
  57. X               case KEY_DOWN:
  58. X               case KEY_UP:
  59. X               case KEY_TAB:
  60. X               case KEY_BTAB:
  61. X               case KEY_ACCEPT:
  62. X                /*
  63. X                **    bug fix - 9/26/86 pjc
  64. X                **    if (col == colend) byteskeyed was not 
  65. X                **    being counted.
  66. X                **    Determine number of bytes keyed by user.
  67. X                */
  68. X                    bytesKeyed = 0;
  69. X                    for (i = 0; i < strlen (charKeyed); i++)
  70. X                           if (charKeyed[i] == 'Y')
  71. X                              bytesKeyed++;
  72. X
  73. X                        if (fldCharType == SET  ||  fldCharType == MENU)
  74. X                    {
  75. X                               col = colEnd ;
  76. X                               wmove(win, rowStart, col) ;
  77. X                               notFinished = FALSE ;
  78. X                               break ;
  79. X                        } 
  80. X
  81. X                       if (col == colEnd) 
  82. X                       {
  83. X                              notFinished = FALSE ;
  84. X                              break ;
  85. X                           } 
  86. X
  87. X                      if (initFld) 
  88. X                  {
  89. X                                 col = colEnd - 1 ;
  90. X                                 while (*(charKeyed+col-colStart) != 'Y')
  91. X                                    col--;
  92. X                                 wmove(win, rowStart, col) ;
  93. X                          }
  94. X
  95. X                        colMove = colStart ;
  96. X                        bytesKeyed = 0 ;
  97. X                        while (colMove < colEnd) 
  98. X                        {
  99. X                               if (*(charKeyed+colMove-colStart)=='Y')
  100. X                           {
  101. X                                  col = colMove ;
  102. X                                  bytesKeyed++;
  103. X                               }
  104. X                               colMove++;
  105. X                        }
  106. X                        while (*(charKeyed + ++col - colStart) == 'M')
  107. X                               ;
  108. X                        wmove(win, rowStart, col) ;
  109. X
  110. X                        if (bytesKeyed == 0 && mustEnter) 
  111. X                        {
  112. X                               BELL;
  113. X                    CLEARROW (fldErrRow);
  114. X                    wattrOn (stdscr, A_REVERSE|A_BOLD);
  115. X                              mvwaddstr(stdscr, 
  116. X        ((fldErrRow%100) == fldErrRow) ? fldErrRow : fldErrRow/100, 
  117. X        ((fldErrRow%100) == fldErrRow) ? 0 : fldErrRow%100, 
  118. X                        "This is a must enter field.") ;
  119. X                    wattrOff (stdscr);
  120. X                               wmove(win, rowStart, colStart) ;
  121. X                               break ;
  122. X                        } 
  123. X
  124. X                       if (fldMin > 0  && bytesKeyed > 0 && 
  125. X                    bytesKeyed < fldMin)
  126. X                       {
  127. X        
  128. X                               BELL;
  129. X                    CLEARROW (fldErrRow);
  130. X                    wattrOn (stdscr, A_REVERSE|A_BOLD);
  131. X                               mvwprintw(stdscr, fldErrRow, 1,
  132. X                             "The minimum length for this field is: %d keyed %d",
  133. X                                      fldMin, bytesKeyed) ;
  134. X                    wattrOff (stdscr);
  135. X                               wmove(win, rowStart, col) ;
  136. X                               break ;
  137. X                       }
  138. X
  139. X                        if (fldAdjust != NOFILL)
  140. X                               AdjField(win, rowStart, colStart, 
  141. X                        fldAttrib, fldAdjust, colEnd, 
  142. X                        charKeyed) ;
  143. X
  144. X                        notFinished = FALSE ;
  145. X                        break ;
  146. X
  147. X                    default:
  148. X                /* check for control character */
  149. X                        if (ch < 32  ||  ch > 127) 
  150. X                        {
  151. X                               int   ch1 ;
  152. X
  153. X
  154. X                               notFinished = FALSE ;
  155. X                               wmove(win, rowStart, colEnd) ;
  156. X                               controlKey = ch ;
  157. X                    break;
  158. X                        } 
  159. X
  160. X                       if (fldCharType == SET) 
  161. X                       {
  162. X                      if (fldType == CHAR)
  163. X                      {
  164. X                             /*  pjc - 7/87
  165. X                             **  match ch to the first char 
  166. X                        **  in set values
  167. X                             */
  168. X                             int    rc;  /* return code */
  169. X
  170. X                             Fld->strVal[0] = ch;
  171. X                             Fld->strVal[1] = '\0';
  172. X                                   rc = FindSet(Fld, fldRange, 
  173. X                            fldLength, fldType);
  174. X                             setNumb = rc == -1 ? ++setNumb : rc;
  175. X                      }
  176. X                      else
  177. X                             setNumb++;
  178. X
  179. X                              ShowSet(win, rowStart, colStart, 
  180. X                        fldAttrib, fldRange, fldLength, 
  181. X                        &setNumb, colEnd, charKeyed, 
  182. X                        origAttr) ;
  183. X                              wmove(win, rowStart, colStart);
  184. X                    break;
  185. X                       }
  186. X
  187. X                if (fldCharType == MENU)
  188. X                {
  189. X                    junk = popmenu (menuid);
  190. X                    setNumb = junk >= 1 ? junk-1 : setNumb;
  191. X                    strcpy (Fld->strVal, menu[setNumb]);
  192. X                              ShowSet(win, rowStart, colStart, 
  193. X                        fldAttrib, fldRange, fldLength, 
  194. X                        &setNumb, colEnd, charKeyed, 
  195. X                        origAttr) ;
  196. X                              wmove(win, rowStart, colStart);
  197. X                    touchwin (stdscr);
  198. X                    touchwin (win);
  199. X                    break;
  200. X                }
  201. X
  202. X                      if (col == colEnd)
  203. X                           BELL;
  204. X                       else
  205. X                           notFinished = ShowChar (win, rowStart, 
  206. X                        colStart, fldAttrib, fldMask, 
  207. X                        fldRange, fldLength, 
  208. X                        fldCharType, fldDispRow, 
  209. X                        fldType, keyStream, fldErrRow,
  210. X                        charKeyed,colEnd, &ch,origAttr);
  211. X                       break ;
  212. X
  213. X            }  /* end switch */
  214. X        } while (notFinished) ;
  215. X
  216. X              if ( controlKey  &&  bytesKeyed == 0)
  217. X              {
  218. X                 ReDispFld(win, rowStart, colStart, -1, fldMask, 
  219. X                fldRange, fldLength, fldCharType, fldType, 
  220. X                fldStr, colEnd, charKeyed, setNumb, 
  221. X                origAttr) ;
  222. X                 break ;
  223. X              } 
  224. X              else 
  225. X                 if ( IsFldOk(win, rowStart, colStart, Fld, fldMask, 
  226. X                    fldRange, fldLength, fldCharType, fldType, 
  227. X                    mustEnter, fldErrRow, fldDispRow, colEnd, 
  228. X                    fldStr, charKeyed, setNumb, origAttr) )
  229. X                        break ;
  230. X                 else         
  231. X             {
  232. X                        notFinished = TRUE ;
  233. X                        continue ;
  234. X                 }
  235. X
  236. X    }  /* end  while (TRUE) */
  237. X
  238. X       free(fldStr) ;
  239. X       free(charKeyed) ;
  240. X
  241. X       return (ch);
  242. X}
  243. SHAR_EOF
  244. echo "File utilities.d/libgeti.d/GetInput.c is complete"
  245. chmod 0444 utilities.d/libgeti.d/GetInput.c || echo "restore of utilities.d/libgeti.d/GetInput.c fails"
  246. echo "x - extracting utilities.d/libgeti.d/GetSetLen.c (Text)"
  247. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/GetSetLen.c &&
  248. Xstatic char Sccsid[] = "@(#)GetSetLen.c    1.3   DeltaDate 1/22/90   ExtrDate 1/22/90";
  249. X
  250. X/*
  251. X**  GetSetLen()
  252. X**    Determines the length of the longest element in the set (range).
  253. X**    ex. "HI,LOW,MEDIUM" returns (6) as the longest length.
  254. X**    This information is used to determine how much memory I need to allocate
  255. X**    to hold the element.  Does not include a null terminator.
  256. X**
  257. X**  RETURNS:
  258. X**        length of the longest element in set.
  259. X*/
  260. X
  261. X#include    "GetInput.h"
  262. X
  263. XGetSetLen(fldRange)
  264. X    char        *fldRange ;    /* range of valid values for output */
  265. X{
  266. X    int    len,
  267. X        fldLength ;
  268. X    char    *fldWrk ;
  269. X
  270. X
  271. X    fldLength = 0 ;
  272. X
  273. X    fldWrk = fldRange ;
  274. X
  275. X    while (*fldWrk != '\0') {
  276. X
  277. X        len = 0 ;
  278. X
  279. X        while (*fldWrk != ','  &&  *fldWrk != '\0') {
  280. X            len++ ;        /* length of this element */
  281. X            fldWrk++ ;    /* fldRange without this element */
  282. X        }
  283. X
  284. X        if (len > fldLength)    /* is this element longer ? */
  285. X            fldLength = len ;
  286. X
  287. X        /* set pointer to next element in set */
  288. X        while (*fldWrk == ','  ||   *fldWrk == ' ')
  289. X            fldWrk++ ;
  290. X    }
  291. X
  292. X    return (fldLength) ;
  293. X}
  294. SHAR_EOF
  295. chmod 0444 utilities.d/libgeti.d/GetSetLen.c || echo "restore of utilities.d/libgeti.d/GetSetLen.c fails"
  296. echo "x - extracting utilities.d/libgeti.d/InitGetI.c (Text)"
  297. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/InitGetI.c &&
  298. X#ifndef LINT
  299. Xstatic char Sccsid[] = "%W%   DeltaDate %G%   ExtrDate %H%";
  300. X#endif
  301. X
  302. X/*
  303. X**  InitGetI()
  304. X**        All this does is define some global variables for the keys
  305. X**        used in GetInput(3) and assign some default values.
  306. X*/
  307. X
  308. X#include    <curses.h>
  309. X#include    "GetInput.h"
  310. X
  311. Xint    KeyReturn = '\r';
  312. Xint    KeyDown = 10;        /* ^j */
  313. Xint    KeyUp = 11;        /* ^k */
  314. Xint    KeyTab = '\t';
  315. Xint    KeyBTab = -1;
  316. Xint    KeyAccept = 1;        /* ^a */
  317. X
  318. Xint    KeyBeg = 2;
  319. Xint    KeyEnd = 5;
  320. Xint      KeyRight = 12;        /* ^l */
  321. Xint      KeyLeft = 8;        /* ^h */
  322. Xint      KeyBackspace = '\b';    /* \b */
  323. Xint      KeyEOL = 4;        /* ^d */
  324. Xint      KeyDL = 3;        /* ^c */
  325. Xint      KeyDC = 24;        /* ^x */
  326. Xint      KeyIC = 20;        /* ^t */
  327. X
  328. Xint      KeyHelp = '?';
  329. Xint    KeyTOC = 20;        /* ^t */
  330. Xint      KeyRedraw = 18;        /* ^r */
  331. Xint      KeySave = 6;        /* ^f */
  332. Xint      KeyPrint = 16;        /* ^p */
  333. Xint      KeyCancel = 27;        /* esc */
  334. X
  335. X
  336. Xvoid
  337. XInitGetI()
  338. X{
  339. X/*
  340. X    char  *tName, *lName, *getenv() ;
  341. X
  342. X       lName = longname() ;
  343. X       tName = getenv("TERM") ;
  344. X
  345. X       if (strcmp(tName, "5425")  ==  0)
  346. X              Load5425 () ;
  347. X       else
  348. X        if (strcmp (tName, "sun") == 0)
  349. X            LoadSun ();
  350. X        else
  351. X                  LoadAnsi() ;
  352. X*/
  353. X}
  354. SHAR_EOF
  355. chmod 0644 utilities.d/libgeti.d/InitGetI.c || echo "restore of utilities.d/libgeti.d/InitGetI.c fails"
  356. echo "x - extracting utilities.d/libgeti.d/IsDate.c (Text)"
  357. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/IsDate.c &&
  358. Xstatic char Sccsid[] = "@(#)IsDate.c    1.1   DeltaDate 8/30/87   ExtrDate 1/22/90";
  359. X#include <stdio.h>
  360. X#include <time.h>
  361. X#include "GetInput.h"
  362. X
  363. XIsDate (str, mask)
  364. X    char    *str ;
  365. X    char    *mask ;
  366. X{
  367. X    char    cmdstr[5] ;
  368. X    int    year, month, day ;
  369. X    static int    century = 0 ;
  370. X    long    clock ;
  371. X
  372. X    struct tm *localtime(), *Tm ;
  373. X
  374. X    if (century == 0) {
  375. X
  376. X        clock = time((long *) 0) ;
  377. X        Tm = localtime (&clock) ;
  378. X        century = 1900 ;
  379. X        if (Tm->tm_year > 100)
  380. X            century += (Tm->tm_year / 100) * 100 ;
  381. X
  382. X    }
  383. X
  384. X    if (mask == NULL) {
  385. X
  386. X        cmdstr[0] = *str++ ;
  387. X        cmdstr[1] = *str++ ;
  388. X        cmdstr[2] = '\0' ;
  389. X        month = atoi (cmdstr) ;
  390. X
  391. X        cmdstr[0] = *str++ ;
  392. X        cmdstr[1] = *str++ ;
  393. X        cmdstr[2] = '\0' ;
  394. X        day = atoi (cmdstr) ;
  395. X
  396. X        cmdstr[0] = *str++ ;
  397. X        cmdstr[1] = *str++ ;
  398. X        cmdstr[2] = '\0' ;
  399. X        year = atoi (cmdstr)  +  century ;
  400. X
  401. X    } else {
  402. X
  403. X        while ( *mask != '\0' ) {
  404. X
  405. X            while ( *mask != 'M' && *mask != 'D' && *mask != 'Y' )
  406. X                mask++ ;
  407. X
  408. X            switch (*mask) {
  409. X                case 'M':
  410. X                    cmdstr[0] = *str++ ;
  411. X                    cmdstr[1] = *str++ ;
  412. X                    cmdstr[2] = '\0' ;
  413. X                    month = atoi (cmdstr) ;
  414. X                    mask += 2 ;
  415. X                    break ;
  416. X                case 'D':
  417. X                    cmdstr[0] = *str++ ;
  418. X                    cmdstr[1] = *str++ ;
  419. X                    cmdstr[2] = '\0' ;
  420. X                    day = atoi (cmdstr) ;
  421. X                    mask += 2 ;
  422. X                    break ;
  423. X                case 'Y':
  424. X                    cmdstr[0] = *str++ ;
  425. X                    cmdstr[1] = *str++ ;
  426. X                    mask += 2 ;
  427. X                    if (*mask == 'Y') {
  428. X                        cmdstr[2] = *str++ ;
  429. X                        cmdstr[3] = *str++ ;
  430. X                        cmdstr[4] = '\0' ;
  431. X                        year = atoi (cmdstr) ;
  432. X                        mask += 2 ;
  433. X                    } else {
  434. X                        cmdstr[2] = '\0' ;
  435. X                        year = atoi (cmdstr) + century ;
  436. X                    }
  437. X                    break ;
  438. X            }
  439. X        }
  440. X    }
  441. X    return (valid_date (year, month, day)) ;
  442. X}
  443. X
  444. X
  445. SHAR_EOF
  446. chmod 0444 utilities.d/libgeti.d/IsDate.c || echo "restore of utilities.d/libgeti.d/IsDate.c fails"
  447. echo "x - extracting utilities.d/libgeti.d/IsFldOk.c (Text)"
  448. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/IsFldOk.c &&
  449. Xstatic char Sccsid[] = "@(#)IsFldOk.c    1.3   DeltaDate 1/22/90   ExtrDate 1/22/90";
  450. X
  451. X#include     <curses.h>
  452. X#include     <ctype.h>
  453. X#include     "GetInput.h"
  454. X
  455. X
  456. XIsFldOk (win, row, colStart, Fld, fldMask, fldRange, fldLength, fldCharType, 
  457. X    fldType, mustEnter, fldErrRow, fldDispRow, colEnd, fldStr, charKeyed, 
  458. X    setNumb, origAttr)
  459. X
  460. X    WINDOW          *win ;          /* Window                */
  461. X    int           row ;
  462. X    int           colStart ;
  463. X    FldUnPointer    Fld ;        /* Pointer to union for field     */
  464. X    char          *fldMask ;      /* mask for character string      */
  465. X    char          *fldRange ;     /* range of valid values for output */
  466. X    unsigned     fldLength ;     /* Maximum length of output       */
  467. X    char          fldCharType ;  /* type of character           */
  468. X    char          fldType ;   /* type of field         */
  469. X    int           mustEnter ; /* must enter - boolean   */
  470. X    int           fldErrRow ; /* where to display error message   */
  471. X    int           fldDispRow ;   /* where to display help message    */
  472. X    int           colEnd ; /* last character to display      */
  473. X    char          *fldStr ;   /* field string             */
  474. X    char          charKeyed[] ;  /* characters in the field keyed    */
  475. X    int           setNumb ;   /* for SET & MENU      */
  476. X    int           origAttr[] ;   /* origianl attributes for this fld */
  477. X{
  478. X       int       colLast, col ;
  479. X       double  atof() ;
  480. X       char      *fldWrk ;
  481. X
  482. X
  483. X   getyx(win, row, col) ;
  484. X   colLast = col - 1 ;
  485. X
  486. X   col = colStart ;
  487. X
  488. X   fldWrk = fldStr ;
  489. X
  490. X   while (col < colEnd) 
  491. X   {
  492. X
  493. X      if (charKeyed [col - colStart] == 'Y')
  494. X         *fldWrk++ = mvwinch(win, row, col) & A_CHARTEXT ;
  495. X      col++;
  496. X   }
  497. X
  498. X   *fldWrk = '\0' ;
  499. X
  500. X   switch (fldType) 
  501. X   
  502. X{
  503. X   case CHAR:
  504. X   case DATE:
  505. X   case TIME:
  506. X      strcpy (Fld->strVal, fldStr) ;
  507. X      break ;
  508. X
  509. X   case INT:
  510. X      *Fld->intVal = atoi(fldStr) ;
  511. X      break ;
  512. X
  513. X   case SHORT:
  514. X      *Fld->shortVal = atoi(fldStr) ;
  515. X      break ;
  516. X
  517. X   case LONG:
  518. X      *Fld->longVal = atoi(fldStr) ;
  519. X      break ;
  520. X
  521. X   case FLOAT:
  522. X      *Fld->floatVal = atof(fldStr) ;
  523. X      break ;
  524. X
  525. X   case DOUBLE:
  526. X   case MONEY:
  527. X      *Fld->doubleVal = atof(fldStr) ;
  528. X      break ;
  529. X   }
  530. X
  531. X   if (fldStr == NULL  &&  !mustEnter)
  532. X      return(1) ;
  533. X
  534. X    if (fldCharType == DATE  &&
  535. X           ((mustEnter && !IsDate (fldStr, fldMask)) ||
  536. X           (!mustEnter && strcmp(fldStr, "000000") != 0  &&
  537. X            strcmp(fldStr, "      ") != 0  &&
  538. X            fldStr[0] != '\0' &&
  539. X            !IsDate (fldStr, fldMask)))) 
  540. X        {
  541. X              BELL;
  542. X        CLEARROW (fldErrRow);
  543. X        wattrOn (stdscr, A_REVERSE|A_BOLD);
  544. X              mvwaddstr (stdscr,
  545. X            ((fldErrRow%100) == fldErrRow) ? fldErrRow : fldErrRow/100, 
  546. X            ((fldErrRow%100) == fldErrRow) ? 0 : fldErrRow%100, 
  547. X            "Invalid Date") ;
  548. X        wattrOff (stdscr);
  549. X              wmove (win, row, colStart) ;
  550. X              return (0) ;
  551. X       }
  552. X
  553. X       if (fldCharType == TIME  &&
  554. X           ((mustEnter && !IsTime (fldStr, fldMask)) ||
  555. X           (!mustEnter && strcmp(fldStr, "000000") != 0  &&
  556. X           strcmp(fldStr, "      ") != 0  &&
  557. X           fldStr[0] != '\0' &&
  558. X           !IsTime (fldStr, fldMask)))) 
  559. X    {
  560. X              BELL;
  561. X        CLEARROW (fldErrRow);
  562. X        wattrOn (stdscr, A_REVERSE|A_BOLD);
  563. X              mvwaddstr (stdscr,
  564. X            ((fldErrRow%100) == fldErrRow) ? fldErrRow : fldErrRow/100, 
  565. X            ((fldErrRow%100) == fldErrRow) ? 0 : fldErrRow%100, 
  566. X            "Invalid Time") ;
  567. X        wattrOff (stdscr);
  568. X              wmove (win, row, colStart) ;
  569. X              return (0) ;
  570. X       }
  571. X
  572. X       if (fldCharType == STATE  &&  !IsState (fldStr)) 
  573. X    {
  574. X              BELL;
  575. X        CLEARROW (fldErrRow);
  576. X        wattrOn (stdscr, A_REVERSE|A_BOLD);
  577. X              mvwaddstr (stdscr,
  578. X            ((fldErrRow%100) == fldErrRow) ? fldErrRow : fldErrRow/100, 
  579. X            ((fldErrRow%100) == fldErrRow) ? 0 : fldErrRow%100, 
  580. X            "Invalid State") ;
  581. X        wattrOff (stdscr);
  582. X              wmove (win, row, colStart) ;
  583. X              return (0) ;
  584. X       }
  585. X
  586. X       if (fldCharType == SET   ||  fldCharType == MENU  ||   fldRange == NULL)
  587. X    {
  588. X              ReDispFld(win, row, colStart, -1, fldMask, fldRange, fldLength, 
  589. X                fldCharType, fldType, fldStr, colEnd, charKeyed,
  590. X                setNumb, origAttr) ;
  591. X              return (1) ;
  592. X       }
  593. X
  594. X       if ( IsRange(Fld, fldLength, fldType, fldRange) ) 
  595. X    {
  596. X              ReDispFld(win, row, colStart, -1, fldMask, fldRange, fldLength, 
  597. X                fldCharType, fldType, fldStr, colEnd, charKeyed,
  598. X                setNumb, origAttr) ;
  599. X              return (1) ;
  600. X       } 
  601. X    else 
  602. X    {
  603. X              getyx (win, row, col) ;
  604. X              BELL;
  605. X        CLEARROW (fldErrRow);
  606. X        wattrOn (stdscr, A_REVERSE|A_BOLD);
  607. X              mvwprintw (stdscr,
  608. X            ((fldErrRow%100) == fldErrRow) ? fldErrRow : fldErrRow/100, 
  609. X            ((fldErrRow%100) == fldErrRow) ? 0 : fldErrRow%100, 
  610. X            "[%s] Valid Ranges are: %s", fldStr, fldRange) ;
  611. X        wattrOff (stdscr);
  612. X              wmove (win, row, colLast) ;
  613. X
  614. X       }
  615. X
  616. X       return(0) ;
  617. X
  618. X}
  619. SHAR_EOF
  620. chmod 0444 utilities.d/libgeti.d/IsFldOk.c || echo "restore of utilities.d/libgeti.d/IsFldOk.c fails"
  621. echo "x - extracting utilities.d/libgeti.d/IsMask.c (Text)"
  622. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/IsMask.c &&
  623. Xstatic char Sccsid[] = "@(#)IsMask.c    1.2   DeltaDate 1/22/90   ExtrDate 1/22/90";
  624. X
  625. X/*
  626. X**  IsMask ()
  627. X**    Determines whether a given character is a mask format character based
  628. X**    upon the field type.
  629. X**  RETURNS:
  630. X**    TRUE    character is a mask format character
  631. X**    FALSE    this character allows data input
  632. X*/
  633. X
  634. X#include    "GetInput.h"
  635. X
  636. XIsMask (fldCharType, maskChar)
  637. X    char    fldCharType ;
  638. X    char    maskChar ;
  639. X{
  640. X
  641. X    if ( fldCharType  == maskChar)
  642. X        return (0) ;
  643. X    else     if (fldCharType  == ALPHANUM  &&
  644. X           (maskChar == ALPHANUM  || maskChar == ALPHA  ||
  645. X            maskChar == NUMERIC  || maskChar == UPPER  ||
  646. X            maskChar == UPPER_AN  || maskChar == HEX) )
  647. X            return (0) ;
  648. X    else     if (fldCharType  == DATE  &&
  649. X           (maskChar == 'D' || maskChar == 'M' || maskChar == 'Y'))
  650. X            return (0) ;
  651. X    else     if (fldCharType  == TIME  &&
  652. X           (maskChar == 'I' || maskChar == 'H' || maskChar == 'M'||
  653. X            maskChar == 'S' || maskChar == 'T'))
  654. X            return (0) ;
  655. X    else
  656. X        return (1) ;
  657. X}
  658. X
  659. X
  660. SHAR_EOF
  661. chmod 0444 utilities.d/libgeti.d/IsMask.c || echo "restore of utilities.d/libgeti.d/IsMask.c fails"
  662. echo "x - extracting utilities.d/libgeti.d/IsRange.c (Text)"
  663. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/IsRange.c &&
  664. Xstatic char Sccsid[] = "@(#)IsRange.c    1.1   DeltaDate 8/30/87   ExtrDate 1/22/90";
  665. X#include <curses.h>
  666. X#include <ctype.h>
  667. X#include <string.h>
  668. X#include "GetInput.h"
  669. X
  670. X#ifndef TRUE
  671. X# define TRUE    1
  672. X# define FALSE     0
  673. X#endif
  674. X
  675. X#define FROM     0
  676. X#define TO       1
  677. X
  678. XIsRange (Fld, fldLength, fldType, fldRange)
  679. X
  680. XFldUnPointer   Fld ;
  681. Xunsigned int   fldLength ;
  682. Xchar  fldType ;
  683. Xchar  *fldRange ;
  684. X{
  685. X   char        *wrk, *wrkAlloc ;
  686. X   char      *malloc() ;
  687. X   int       testInt, t1, t2, INTFLAG;
  688. X   long      testLong ;
  689. X   float     testFloat ;
  690. X   double       testDouble ;
  691. X   int       fromTo ;
  692. X   int       fromOk ;
  693. X   int       success ;
  694. X   int       retCode ;
  695. X   double       atof() ;
  696. X
  697. X
  698. X   wrkAlloc   = malloc (fldLength + 1) ;
  699. X
  700. X   fromTo = FROM ;
  701. X   success = fromOk = FALSE ;
  702. X
  703. X   while (TRUE) 
  704. X   {
  705. X      wrk = wrkAlloc ;
  706. X
  707. X/*
  708. X**     Get a range value to test on.
  709. X*/
  710. X      do
  711. X      {
  712. X         *wrk++ = *fldRange++;
  713. X      } while (*fldRange != '\0' && *fldRange != ',' && *fldRange != '-') ;
  714. X
  715. X      *wrk = '\0' ;
  716. X      wrk = wrkAlloc ;
  717. X
  718. X      switch (fldType) 
  719. X      {
  720. X
  721. X      case CHAR:
  722. X/*
  723. X**    bug fix - 9/24/86 pjc
  724. X**    range = "1-12" double digit could not handle
  725. X*/
  726. X     INTFLAG = sscanf (wrk, "%d", &t2);
  727. X     if (INTFLAG)   INTFLAG = sscanf (Fld->strVal, "%d", &t1);
  728. X     if (INTFLAG)
  729. X     {
  730. X        retCode = t1 - t2;
  731. X     }
  732. X     else
  733. X        retCode = strcmp (Fld->strVal, wrk);
  734. X         if (retCode == 0 || (fromOk == TRUE  &&  fromTo == TO  && retCode < 0))
  735. X            success = TRUE ;
  736. X         else 
  737. X            if (fromTo == FROM  &&  retCode > 0)
  738. X               fromOk = TRUE ;
  739. X         break ;
  740. X
  741. X      case INT:
  742. X         testInt = atoi (wrk) ;
  743. X         if (*Fld->intVal == testInt  ||
  744. X             (fromOk == TRUE  &&  fromTo == TO &&
  745. X             *Fld->intVal < testInt) )
  746. X            success = TRUE ;
  747. X         else if (fromTo == FROM  &&
  748. X             *Fld->intVal > testInt)
  749. X            fromOk = TRUE ;
  750. X         break ;
  751. X
  752. X      case LONG:
  753. X         testLong = atol (wrk) ;
  754. X         if (*Fld->longVal == testLong  ||
  755. X             (fromOk == TRUE  &&  fromTo == TO &&
  756. X             *Fld->longVal < testLong) )
  757. X            success = TRUE ;
  758. X         else if (fromTo == FROM  &&
  759. X             *Fld->longVal > testLong)
  760. X            fromOk = TRUE ;
  761. X         break ;
  762. X
  763. X      case FLOAT:
  764. X         testFloat = atof (wrk) ;
  765. X         if (*Fld->floatVal == testFloat  ||
  766. X             (fromOk == TRUE  &&  fromTo == TO &&
  767. X             *Fld->floatVal < testFloat) )
  768. X            success = TRUE ;
  769. X         else if (fromTo == FROM  &&
  770. X             *Fld->floatVal > testFloat)
  771. X            fromOk = TRUE ;
  772. X         break ;
  773. X
  774. X      case DOUBLE:
  775. X      case MONEY:
  776. X         testDouble = atof (wrk) ;
  777. X         if (*Fld->doubleVal == testDouble  ||
  778. X             (fromOk == TRUE  &&  fromTo == TO &&
  779. X             *Fld->doubleVal < testDouble))
  780. X            success = TRUE ;
  781. X         else if (fromTo == FROM  &&
  782. X             *Fld->doubleVal > testDouble)
  783. X            fromOk = TRUE ;
  784. X         break ;
  785. X      }
  786. X
  787. X      if (success)
  788. X         break ;
  789. X
  790. X      /*
  791. X      **
  792. X      ** Skip to next valid range check
  793. X      **
  794. X      */
  795. X      while (TRUE) 
  796. X      {
  797. X         if (*fldRange == '\0')
  798. X            break ;
  799. X         else 
  800. X            if (*fldRange == '-')
  801. X               fromTo = TO ;
  802. X            else 
  803. X               if (*fldRange == ',') 
  804. X              {
  805. X                  fromOk = FALSE ;
  806. X                  fromTo = FROM ;
  807. X               }
  808. X
  809. X         if (isprint (*fldRange)  && *fldRange != ' ' &&
  810. X             *fldRange != ','  &&  *fldRange != '-')
  811. X            break ;
  812. X
  813. X         fldRange++;
  814. X      }
  815. X
  816. X      if (*fldRange == '\0')
  817. X         break ;
  818. X
  819. X   }
  820. X
  821. X   free (wrkAlloc) ;
  822. X
  823. X   if (success)
  824. X      return (TRUE) ;
  825. X   else
  826. X      return (FALSE) ;
  827. X}
  828. X
  829. X
  830. SHAR_EOF
  831. chmod 0444 utilities.d/libgeti.d/IsRange.c || echo "restore of utilities.d/libgeti.d/IsRange.c fails"
  832. echo "x - extracting utilities.d/libgeti.d/IsState.c (Text)"
  833. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/IsState.c &&
  834. Xstatic char Sccsid[] = "@(#)IsState.c    1.1   DeltaDate 8/30/87   ExtrDate 1/22/90";
  835. X#include <string.h>
  836. X
  837. X#define MAXSTATES 50
  838. X
  839. XIsState (str)
  840. X    char str[] ;
  841. X{
  842. X    int    retCode, count ;
  843. X
  844. X    static char *states[] = {
  845. X        "AK", "AL", "AR", "AZ", "CA", "CO", "CT", "DE", "FL", "GA",
  846. X        "HI", "IA", "ID", "IL", "IN", "KS", "KY", "LA", "MA", "MD",
  847. X        "ME", "MI", "MN", "MO", "MS", "MT", "NC", "ND", "NE", "NH", 
  848. X        "NJ", "NM", "NV", "NY", "OH", "OK", "OR", "PA", "RI", "SC",
  849. X        "SD", "TN", "TX", "UT", "VA", "VT", "WA", "WI", "WV", "WY"
  850. X    } ;
  851. X
  852. X
  853. X    count = 0 ;
  854. X
  855. X    while (count < MAXSTATES) {
  856. X
  857. X        retCode = strcmp (str, states[count++]) ;
  858. X
  859. X        if (retCode == 0)
  860. X            return (1) ;
  861. X
  862. X        if (retCode < 0)
  863. X            return (0) ;
  864. X    
  865. X    }
  866. X
  867. X    return (0) ;
  868. X}
  869. X
  870. X
  871. SHAR_EOF
  872. chmod 0444 utilities.d/libgeti.d/IsState.c || echo "restore of utilities.d/libgeti.d/IsState.c fails"
  873. echo "x - extracting utilities.d/libgeti.d/IsTime.c (Text)"
  874. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/IsTime.c &&
  875. Xstatic char Sccsid[] = "@(#)IsTime.c    1.1   DeltaDate 8/30/87   ExtrDate 1/22/90";
  876. X#include <stdio.h>
  877. X#include "GetInput.h"
  878. X
  879. XIsTime(str, mask)
  880. X    char    *str ;
  881. X    char    *mask ;
  882. X{
  883. X    char    cmdstr[5] ;
  884. X    int    i ;
  885. X
  886. X    if (mask == NULL) {
  887. X
  888. X        cmdstr[0] = *str++ ;
  889. X        cmdstr[1] = *str++ ;
  890. X        cmdstr[2] = '\0' ;
  891. X        i = atoi (cmdstr) ;
  892. X        if(i < 0  || i > 12)
  893. X            return(0) ;
  894. X
  895. X        cmdstr[0] = *str++ ;
  896. X        cmdstr[1] = *str++ ;
  897. X        cmdstr[2] = '\0' ;
  898. X        i = atoi (cmdstr) ;
  899. X        if(i < 1  || i > 59)
  900. X            return(0) ;
  901. X
  902. X        cmdstr[0] = *str++ ;
  903. X        cmdstr[1] = *str++ ;
  904. X        cmdstr[2] = '\0' ;
  905. X        i = atoi (cmdstr) ;
  906. X        if(i < 1  || i > 59)
  907. X            return(0) ;
  908. X
  909. X    } else {
  910. X
  911. X        while ( *mask != '\0' ) {
  912. X
  913. X            while ( *mask != 'I' && *mask != 'H' && *mask != 'M' &&
  914. X                    *mask != 'S' && *mask != 'T')
  915. X                mask++ ;
  916. X
  917. X            switch (*mask) {
  918. X                case 'H':
  919. X                    cmdstr[0] = *str++ ;
  920. X                    cmdstr[1] = *str++ ;
  921. X                    cmdstr[2] = '\0' ;
  922. X                    i = atoi (cmdstr) ;
  923. X                    if(i < 1  ||  i > 12)
  924. X                        return(0) ;
  925. X                    mask += 2 ;
  926. X                    break ;
  927. X                case 'M':
  928. X                case 'S':
  929. X                    cmdstr[0] = *str++ ;
  930. X                    cmdstr[1] = *str++ ;
  931. X                    cmdstr[2] = '\0' ;
  932. X                    i = atoi (cmdstr) ;
  933. X                    if(i < 0  ||  i > 59)
  934. X                        return(0) ;
  935. X                    mask += 2 ;
  936. X                    break ;
  937. X                case 'T':
  938. X                    cmdstr[0] = *str++ ;
  939. X                    cmdstr[1] = *str++ ;
  940. X                    cmdstr[2] = '\0' ;
  941. X                    i = atoi (cmdstr) ;
  942. X                    if(i < 0  ||  i > 99)
  943. X                        return(0) ;
  944. X                    mask += 2 ;
  945. X                    break ;
  946. X                case 'I':
  947. X                    cmdstr[0] = *str++ ;
  948. X                    cmdstr[1] = *str++ ;
  949. X                    cmdstr[2] = '\0' ;
  950. X                    i = atoi (cmdstr) ;
  951. X                    if(i < 0  ||  i > 23)
  952. X                        return(0) ;
  953. X                    mask += 2 ;
  954. X                    break ;
  955. X            }
  956. X        }
  957. X    }
  958. X    return(1) ;
  959. X}
  960. SHAR_EOF
  961. chmod 0444 utilities.d/libgeti.d/IsTime.c || echo "restore of utilities.d/libgeti.d/IsTime.c fails"
  962. echo "x - extracting utilities.d/libgeti.d/ReDispFld.c (Text)"
  963. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/ReDispFld.c &&
  964. Xstatic char Sccsid[] = "@(#)ReDispFld.c    1.3   DeltaDate 1/22/90   ExtrDate 1/22/90";
  965. X#include <curses.h>
  966. X#include "GetInput.h"
  967. X#include <ctype.h>
  968. X
  969. XReDispFld (win, rowStart, colStart, fldAttrib, fldMask, fldRange, fldLength, 
  970. X    fldCharType, fldType, fldStr, colEnd, charKeyed, setNumb, 
  971. X    origAttr)
  972. X    WINDOW          *win ;          /* Window                */
  973. X    int           rowStart ;
  974. X    int           colStart ;
  975. X    int           fldAttrib ;     /* field attribute             */
  976. X    char          *fldMask ;      /* mask for character string      */
  977. X    char          *fldRange ;     /* allowable range for field      */
  978. X    unsigned    fldLength ;     /* Maximum length of output       */
  979. X    char          fldCharType ;      /* type of character           */
  980. X    char          fldType ;       /* type of field         */
  981. Xchar  *fldStr ;   /* the field without the mask chars */
  982. Xint   colEnd ; /* last column for display  */
  983. Xchar  charKeyed[] ;  /* characters keyed */
  984. Xint   setNumb ;   /* for SET & MENU */
  985. Xint   origAttr[] ;   /* original attributes for field */
  986. X{
  987. X   int   col ;
  988. X
  989. X   char  *fldWrk ;
  990. X
  991. X   if (fldCharType == SET  ||  fldCharType == MENU )
  992. X      ShowSet(win, rowStart, colStart, -1, fldRange, fldLength, &setNumb, colEnd, charKeyed, origAttr) ;
  993. X   else {
  994. X      if (fldAttrib != -1)
  995. X         wattrset(win, fldAttrib) ;
  996. X      col = colStart ;
  997. X      wmove(win, rowStart, col) ;
  998. X      fldWrk = fldStr ;
  999. X
  1000. X      if (fldAttrib == -1   &&  fldType ==  MONEY) {
  1001. X         int   decimalFound, decimalPlaces ;
  1002. X
  1003. X         decimalFound =  FALSE ;
  1004. X         decimalPlaces = 0 ;
  1005. X
  1006. X         while (*fldWrk != '\0') {
  1007. X            if (*fldWrk == '.')
  1008. X               decimalFound = TRUE ;
  1009. X            else if (decimalFound)
  1010. X               decimalPlaces++;
  1011. X            fldWrk++;
  1012. X         }
  1013. X         if (!decimalFound)
  1014. X            strcat(fldStr, ".00") ;
  1015. X         else if (decimalFound  &&  decimalPlaces < 2) {
  1016. X            if (decimalPlaces == 0)
  1017. X               strcat(fldStr, "00") ;
  1018. X            else if (decimalPlaces == 1)
  1019. X               strcat(fldStr, "0") ;
  1020. X         }
  1021. X
  1022. X         fldWrk = fldStr ;
  1023. X      }
  1024. X
  1025. X      while (col < colEnd  &&  *fldWrk != '\0') {
  1026. X         if (fldAttrib == -1)
  1027. X            wattrset(win, origAttr[col - colStart] ) ;
  1028. X         if (charKeyed [col - colStart] == 'M')
  1029. X            mvwaddch(win, rowStart, col, *(fldMask + col - colStart) ) ;
  1030. X         else
  1031. X            mvwaddch(win, rowStart, col, *fldWrk++) ;
  1032. X         col++;
  1033. X      };
  1034. X
  1035. X      if (strlen(fldStr) < fldLength) {
  1036. X         int   bytesFill ;
  1037. X
  1038. X         bytesFill = fldLength - strlen(fldStr) ;
  1039. X         while (bytesFill) {
  1040. X            if (fldAttrib == -1)
  1041. X               wattrset(win, origAttr[col - colStart]);
  1042. X            if (charKeyed [col - colStart] != 'M') {
  1043. X               bytesFill--;
  1044. X               mvwaddch(win, rowStart, col++, ' ') ;
  1045. X            } else {
  1046. X               mvwaddch(win, rowStart, col, *(fldMask + col - colStart) ) ;
  1047. X               col++;
  1048. X            }
  1049. X         }
  1050. X      }
  1051. X
  1052. X      while (col < colEnd) 
  1053. X      {
  1054. X         if (charKeyed [col - colStart] != 'M')
  1055. X            mvwaddch(win, rowStart, col, ' ') ;
  1056. X         else
  1057. X            mvwaddch(win, rowStart, col, *(fldMask + col - colStart) ) ;
  1058. X         col++;
  1059. X      }
  1060. X
  1061. X      wattrset(win, 0) ;
  1062. X   }
  1063. X
  1064. X    return(0) ;
  1065. X}
  1066. SHAR_EOF
  1067. chmod 0444 utilities.d/libgeti.d/ReDispFld.c || echo "restore of utilities.d/libgeti.d/ReDispFld.c fails"
  1068. echo "x - extracting utilities.d/libgeti.d/RingMenu.c (Text)"
  1069. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/RingMenu.c &&
  1070. X#ifndef LINT
  1071. Xstatic char Sccsid[] = "@(#)RingMenu.c    1.3   DeltaDate 2/3/90   ExtrDate 2/3/90";
  1072. X#endif
  1073. X
  1074. X/***********************************************************************
  1075. X#############################################################################
  1076. X# This software/documentation is the proprietary trade secret and property  #
  1077. X# of Pacific Bell.  Receipt or possession of it does not convey any rights  #
  1078. X# to divulge, reproduce, use or allow others to use it without the specific #
  1079. X# written authorization of Pacific Bell.  Use must conform strictly to        #
  1080. X# the license agreement between user and Pacific Bell.                #
  1081. X#############################################################################
  1082. X
  1083. X    Program: RingMenu.c
  1084. X    Purpose: To display a Ring Menu, and prompt for option.
  1085. X         Options are to be selected with first capital
  1086. X         letter match, or use the cursor position key
  1087. X         to move to the right option and depress RETURN.
  1088. X         Help message for current option is always displayed
  1089. X         the line below the option line.
  1090. X
  1091. X    Synopsis: RingMenu (win, line, opt, title, opt_table )
  1092. X            WINDOW    *win;            /* curses screen
  1093. X            unsigned short    line ;        /* line option on
  1094. X            unsigned short    opt ;        /* default option pos
  1095. X            char    *title;            /* menu title
  1096. X            char    *opt_table[][2];    /* option table
  1097. X                            /*  name and description
  1098. X    Return: 1 - MAXOPTIONS
  1099. X
  1100. X    Author: Sam Lok
  1101. X    Date Written: March, 1989.
  1102. X    Installation: Pacific Bell
  1103. X    Modification History:
  1104. X    [Plx log name of programmer, date and description]
  1105. X
  1106. X***********************************************************************/
  1107. X
  1108. X#include <curses.h>
  1109. X#include <term.h>
  1110. X#include "GetInput.h"
  1111. X#include "keys.h"
  1112. X
  1113. X#define    MSGLINE        23
  1114. X#define    MAXOPTIONS    20
  1115. Xstruct ring                /* the ring */
  1116. X{
  1117. X    short    column ;        /* column position */
  1118. X    short    page ;            /* page number */
  1119. X} menu[MAXOPTIONS] ;
  1120. Xshort    Noptions ;            /* total number of options */
  1121. X
  1122. XRingMenu (win, line, opt, title, opt_table )
  1123. X    WINDOW    *win;
  1124. X    char    *opt_table[][2] ;
  1125. X    char    *title ;
  1126. X    unsigned short    line, opt ;
  1127. X{
  1128. X    register short    i, ii, ch ;
  1129. X
  1130. X    /*
  1131. X     * Initializations
  1132. X     */
  1133. X    putp( cursor_invisible ) ;    /* turn off cursor if possible */
  1134. X    for ( i=0;            /* count # option */
  1135. X          *opt_table[i]!=NULL && i<MAXOPTIONS;
  1136. X          i++ )
  1137. X        ;
  1138. X    Noptions = i;
  1139. X
  1140. X    /* initialize ring menu */
  1141. X    /*
  1142. X     * first option
  1143. X     */
  1144. X    if ( title != NULL )
  1145. X        menu[0].column = strlen( title ) + 2 ;
  1146. X    else
  1147. X        menu[0].column = 0 ;
  1148. X    menu[0].page = 1 ;
  1149. X    /*
  1150. X     * beyond the 1st option
  1151. X     */
  1152. X    for ( i=1; i<Noptions ; i++ )
  1153. X    {
  1154. X        menu[i].page = menu[i-1].page ;
  1155. X        menu[i].column = menu[i-1].column
  1156. X                + strlen( opt_table[i-1][0] ) + 2 ;
  1157. X        /*
  1158. X         * about to roll off the right edge?
  1159. X         */
  1160. X        if ( menu[i].column+strlen( opt_table[i][0] ) > COLS ||
  1161. X             ( i < Noptions-1 &&
  1162. X               menu[i].column+strlen( opt_table[i][0] )+5 > COLS ) )
  1163. X        {
  1164. X            menu[i].page++ ;    /* bump a page */
  1165. X            if ( title != NULL )    /* and wrap around */
  1166. X                menu[i].column = strlen( title ) + 7 ;
  1167. X            else
  1168. X                menu[i].column = 5 ;
  1169. X        }
  1170. X    }
  1171. X
  1172. X    i = ( opt<=Noptions && opt>0 ) ? opt-1 : 0 ;    /* set highlight */
  1173. X
  1174. X    /*
  1175. X     * The LOOP
  1176. X     */
  1177. X    while ( TRUE )
  1178. X    {
  1179. X        _showring( win, line, title, i, opt_table ) ;
  1180. X        ch = wgetch( win ) ;        /* get input */
  1181. X
  1182. X        if ( ch == KeyBackspace )    ch = KEY_BACKSPACE ;
  1183. X        if ( ch == KeyHelp )        ch = KEY_HELP ;
  1184. X        if ( ch == KeyRedraw )        ch = KEY_REFRESH ;
  1185. X        if ( ch == KeyPrint )        ch = KEY_PRINT ;
  1186. X
  1187. X        switch (ch)
  1188. X        {
  1189. X         case KEY_UP:
  1190. X        case KEY_LEFT:
  1191. X        case KEY_CTLK:
  1192. X        case KEY_CTLH:
  1193. X         case KEY_BACKSPACE:
  1194. X         case KEY_BTAB:
  1195. X            if ( --i < 0 )
  1196. X                i = Noptions - 1 ;
  1197. X            break ;
  1198. X
  1199. X         case KEY_DOWN:
  1200. X        case KEY_RIGHT:
  1201. X        case KEY_CTLJ:
  1202. X        case KEY_CTLL:
  1203. X         case ' ':
  1204. X         case KEY_TAB:
  1205. X            if ( ++i >= Noptions )
  1206. X                i = 0 ;
  1207. X                break ;
  1208. X
  1209. X        case KEY_RETURN:
  1210. X        case KEY_ENTER:
  1211. X            _wclrring( win, line ) ;
  1212. X            putp( cursor_visible ) ;
  1213. X            return( i+1 ) ;
  1214. X            break ;
  1215. X
  1216. X        case KEY_HELP:
  1217. X            /*
  1218. X            ShowHelp( GENERAL, SPECIALKEYS, MSGLINE ) ;
  1219. X            */
  1220. X            break ;
  1221. X
  1222. X        case KEY_REFRESH:
  1223. X            clearok( win, TRUE ) ;
  1224. X            break ;
  1225. X            
  1226. X        case KEY_PRINT:
  1227. X                    ScrnPrnt(win, LINES, COLS, MSGLINE) ;
  1228. X                    clearok(win, TRUE ) ;
  1229. X            break ;
  1230. X            
  1231. X        default:
  1232. X            for ( ii=0; ii<=Noptions-1; ii++ )
  1233. X            {
  1234. X                /* upper char match */
  1235. X                if ( strchr( opt_table[ii][0], toupper(ch) ) != NULL )
  1236. X                {
  1237. X                    _wclrring( win, line ) ;
  1238. X                    putp( cursor_visible ) ;
  1239. X                        return ( ii+1 );
  1240. X                }
  1241. X            }
  1242. X            flash() ;
  1243. X                break;
  1244. X        }
  1245. X    }
  1246. X}
  1247. X
  1248. X/*
  1249. X * _wclrring:  Erase the ring menu from screen
  1250. X */
  1251. X_wclrring( win, line )
  1252. X    WINDOW    *win ;
  1253. X    short    line ;
  1254. X{
  1255. X    wmove( win, line, 0 ) ; wclrtoeol( win ) ;
  1256. X    wmove( win, line+1, 0 ) ; wclrtoeol( win ) ;
  1257. X}
  1258. X
  1259. X/*
  1260. X * _showring: Display one lineful of RingMenu depending on the page
  1261. X *          current option is on.
  1262. X */
  1263. X_showring( win, line, title, opt, opt_table )
  1264. X    WINDOW    *win ;
  1265. X    short     line, opt ;
  1266. X    char    *title, *opt_table[][2] ;
  1267. X{
  1268. X    register short    i ;
  1269. X
  1270. X    wmove( win, line, 0 ) ;            /* go there */
  1271. X    if ( title != NULL )            /* title? */
  1272. X        wprintw( win, "%s  ", title ) ;
  1273. X    if ( menu[opt].page != 1 )        /* not 1st page? */
  1274. X        waddstr( win, "...  " ) ;
  1275. X        
  1276. X    /*
  1277. X     * show options
  1278. X     */
  1279. X    for ( i=0; i<Noptions && menu[i].page<=menu[opt].page; i++ )
  1280. X        if ( menu[i].page == menu[opt].page )    /* same page? */
  1281. X        {
  1282. X            if ( i == opt )        /* need highlight? */
  1283. X                wattrset( win, A_REVERSE );
  1284. X            waddstr( win, opt_table[i][0] );
  1285. X            wattrset( win, A_NORMAL ) ;
  1286. X            waddstr( win, "  " ) ;
  1287. X        }
  1288. X
  1289. X    if ( menu[opt].page < menu[Noptions-1].page )    /* not last page? */
  1290. X        waddstr( win, "..." ) ;
  1291. X    wclrtoeol( win ) ;
  1292. X
  1293. X    /*
  1294. X     * show description
  1295. X     */
  1296. X    wmove( win, line+1, 0 ) ;
  1297. X    wclrtoeol( win ) ;
  1298. X    mvwprintw( win, line+1,menu[0].column, "%s", opt_table[opt][1] ) ;
  1299. X
  1300. X    /*
  1301. X     * fix cursor
  1302. X     */
  1303. X    if ( menu[0].column >= 2 )
  1304. X        wmove(win, line, menu[0].column-2 );    /* before 1st option */
  1305. X    else
  1306. X        /* behind the last option */
  1307. X        wmove(win, line, menu[i-1].column+strlen(opt_table[i-1][0])+2 ) ;
  1308. X
  1309. X    wrefresh( win );
  1310. X}
  1311. SHAR_EOF
  1312. chmod 0444 utilities.d/libgeti.d/RingMenu.c || echo "restore of utilities.d/libgeti.d/RingMenu.c fails"
  1313. echo "x - extracting utilities.d/libgeti.d/ScrnOut.c (Text)"
  1314. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/ScrnOut.c &&
  1315. Xstatic char Sccsid[] = "@(#)ScrnOut.c    1.2   DeltaDate 1/22/90   ExtrDate 1/22/90";
  1316. X
  1317. X#include    <curses.h>
  1318. X#include    "GetInput.h"
  1319. X
  1320. XScrnOut(win, y, x, fpout)
  1321. X    WINDOW    *win ;
  1322. X    int    y, x ;
  1323. X    FILE    *fpout ;
  1324. X{
  1325. X    int    xx, yy ;
  1326. X
  1327. X    for(yy = 0 ; yy < y ; yy++) {
  1328. X        for(xx = 0 ; xx < x ; xx++)
  1329. X            fputc( mvwinch( win, yy, xx ) & A_CHARTEXT, fpout) ;
  1330. X        fputc( '\n', fpout ) ;
  1331. X    }
  1332. X
  1333. X    return( 0 ) ;
  1334. X}
  1335. X
  1336. X
  1337. X
  1338. XScrnPrnt(win, y, x, msgLine)
  1339. X    WINDOW    *win ;
  1340. X    int    y, x ;
  1341. X    int    msgLine ;
  1342. X{
  1343. X    FILE    *fp ;
  1344. X
  1345. X    BELL;
  1346. X    mvaddstr(msgLine, 0, "Printing Screen ") ;
  1347. X    wattrOn(stdscr, A_BLINK) ;
  1348. X    addstr("...") ;
  1349. X    wattrOff(stdscr) ;
  1350. X    refresh() ;
  1351. X    BELL;
  1352. X
  1353. X    if( (fp = popen("lp -s", "w")) == NULL )
  1354. X        return(1) ;
  1355. X
  1356. X    ScrnOut(win, y, x, fp) ;
  1357. X
  1358. X    pclose(fp) ;
  1359. X
  1360. X    move(msgLine, 0) ;
  1361. X    clrtoeol() ;
  1362. X    refresh() ;
  1363. X
  1364. X    return(0) ;
  1365. X}
  1366. X
  1367. X
  1368. X
  1369. XScrnFile(win, y, x)
  1370. X    WINDOW    *win ;
  1371. X    int    y, x ;
  1372. X{
  1373. X    WINDOW    *twin ;
  1374. X    FILE    *fp ;
  1375. X    char    cmdstr[17] ;
  1376. X    union     FldUnion Fld ;
  1377. X
  1378. X    twin = newwin(LINES, COLS, 0, 0) ;
  1379. X    mvwaddstr(twin, 10, 0, "File Name: ") ;
  1380. X    BELL;
  1381. X    cmdstr[0] = '\0' ;
  1382. X    Fld.strVal = cmdstr ;
  1383. X    GetInput (twin, 10, 11, &Fld, A_REVERSE, NOMASK, NORANGE, 16, 0, 
  1384. X        ALPHANUM, NOFILL, CHAR, AUTONEXT, NOMUST, LINES-1, LINES-1, 
  1385. X        "Enter the name of the file that will contain the image of the screen.", 
  1386. X        NULL, NULL) ;
  1387. X
  1388. X    if(cmdstr[0] == '\0')
  1389. X        return(1) ;
  1390. X
  1391. X    if( (fp = fopen(cmdstr, "w")) == NULL )
  1392. X        return(1) ;
  1393. X
  1394. X    ScrnOut(win, y, x, fp) ;
  1395. X
  1396. X    fclose(fp) ;
  1397. X
  1398. X    delwin(twin) ;
  1399. X
  1400. X    return(0) ;
  1401. X}
  1402. SHAR_EOF
  1403. chmod 0444 utilities.d/libgeti.d/ScrnOut.c || echo "restore of utilities.d/libgeti.d/ScrnOut.c fails"
  1404. echo "x - extracting utilities.d/libgeti.d/ShowChar.c (Text)"
  1405. sed 's/^X//' << 'SHAR_EOF' > utilities.d/libgeti.d/ShowChar.c &&
  1406. X#ifndef LINT
  1407. Xstatic char Sccsid[] = "@(#)ShowChar.c    1.3   DeltaDate 1/22/90   ExtrDate 1/22/90";
  1408. X#endif
  1409. X
  1410. X/*
  1411. X**  ShowChar()
  1412. X**    Validate character against the mask and convert to upper is neccessary.
  1413. X**    Display char to screen.
  1414. X*/
  1415. X
  1416. X#include     <curses.h>
  1417. X#include     <ctype.h>
  1418. X#include     "GetInput.h"
  1419. X
  1420. Xextern int    insertmode;
  1421. X
  1422. XShowChar (win, rowStart, colStart, fldAttrib, fldMask, fldRange, fldLength, 
  1423. X    fldCharType, fldDispRow, fldType, keyStream, fldErrRow, charKeyed, 
  1424. X    colEnd, ch, origAttr)
  1425. X
  1426. X    WINDOW          *win ;          /* Window                */
  1427. X    int           rowStart ;
  1428. X    int           colStart ;
  1429. X    int           fldAttrib ;     /* Curses attribute         */
  1430. X    char          *fldMask ;      /* mask for character string      */
  1431. X    char          *fldRange ;     /* allowable range for field      */
  1432. X    unsigned    fldLength ;     /* Maximum length of output       */
  1433. X    char          fldCharType;    /* type of character           */
  1434. X    int           fldDispRow ;       /* where to display help message    */
  1435. X    char          fldType ;       /* type of field         */
  1436. X    int           keyStream ;     /* if TRUE then the function will
  1437. X                              exit when the last character is
  1438. X                              keyed           */
  1439. X    int           fldErrRow ;     /* where to display error message   */
  1440. X    char          *charKeyed ;       /* characters keyed array      */
  1441. X    int           colEnd ;     /* column start of field */
  1442. X    int           *ch ;         /* contains character keyed or being
  1443. X                              moved */
  1444. X    int           origAttr[] ;       /* original attributes for field */
  1445. X{
  1446. X    int        row ;       /* working row field */
  1447. X       int           col ;       /* working column field */
  1448. X       char          charType ;
  1449. X       char          cmdstr[16] ;
  1450. X    int        junk;
  1451. X
  1452. X
  1453. X       getyx(win, row, col) ;
  1454. X
  1455. X       if (fldCharType == STATE  || fldMask == NULL)
  1456. X              charType = fldCharType ;
  1457. X       else 
  1458. X              if (fldCharType == DATE  ||  fldCharType == TIME)
  1459. X                 charType = NUMERIC ;
  1460. X              else
  1461. X                 charType = *(fldMask + col - colStart) ;
  1462. X
  1463. X       switch (charType) 
  1464. X       {
  1465. X          case HEX:
  1466. X              break ;
  1467. X
  1468. X          case ALPHA:
  1469. X              if (isalpha(*ch)) 
  1470. X        {
  1471. X            if (insertmode)
  1472. X            {
  1473. X                junk = doinsert (win, row, col, colStart, 
  1474. X                        colEnd, charKeyed, fldMask,
  1475. X                        fldCharType, fldType, rowStart,
  1476. X                        fldAttrib, fldRange, fldLength,
  1477. X                        fldErrRow, origAttr);
  1478. X                if (junk != 0)
  1479. X                    break;
  1480. X            }
  1481. X                 wattrset(win, fldAttrib) ;
  1482. X                 waddch(win, *ch) ;
  1483. X                 wattrset(win, 0) ;
  1484. X                 *(charKeyed + col - colStart) = 'Y' ;
  1485. X              } 
  1486. X        else 
  1487. X        {
  1488. X            CLEARROW (fldErrRow);
  1489. X            wattrOn (stdscr, A_REVERSE|A_BOLD);
  1490. X                 mvwaddstr(stdscr,
  1491. X        ((fldErrRow%100) == fldErrRow) ? fldErrRow : fldErrRow/100, 
  1492. X        ((fldErrRow%100) == fldErrRow) ? 0 : fldErrRow%100, 
  1493. X                "Only alpha characters allowed.") ;
  1494. X            wattrOff (stdscr);
  1495. X                 wmove(win, rowStart, col) ;
  1496. X                 BELL;
  1497. X              }
  1498. X              break ;
  1499. X
  1500. X          case ALPHANUM:
  1501. X          case UPPER_AN:
  1502. X          case STATE:
  1503. X              if (isprint(*ch)) 
  1504. X              {
  1505. X            if (insertmode)
  1506. X            {
  1507. X                junk = doinsert (win, row, col, colStart, 
  1508. X                        colEnd, charKeyed, fldMask,
  1509. X                        fldCharType, fldType, rowStart,
  1510. X                        fldAttrib, fldRange, fldLength,
  1511. X                        fldErrRow, origAttr);
  1512. X                if (junk != 0)
  1513. X                    break;
  1514. X            }
  1515. X
  1516. X                 if (charType == UPPER_AN  ||  charType == STATE)
  1517. X                        *ch = toupper(*ch);
  1518. X                 wattrset(win, fldAttrib) ;
  1519. X                 waddch(win, *ch) ;
  1520. X                 wattrset(win, 0) ;
  1521. X                 *(charKeyed + col - colStart) = 'Y' ;
  1522. X              } 
  1523. X              else 
  1524. X              {
  1525. X            CLEARROW (fldErrRow);
  1526. X            wattrOn (stdscr, A_REVERSE|A_BOLD);
  1527. X                 mvwaddstr(stdscr,
  1528. SHAR_EOF
  1529. echo "End of part 8"
  1530. echo "File utilities.d/libgeti.d/ShowChar.c is continued in part 9"
  1531. echo "9" > s2_seq_.tmp
  1532. exit 0
  1533.