home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume16 / ecu3 / part15 < prev    next >
Internet Message Format  |  1991-01-06  |  57KB

  1. From: wht@n4hgf.uucp (Warren Tucker)
  2. Newsgroups: comp.sources.misc
  3. Subject: v16i039:  ECU async comm package rev 3.0, Part15/35
  4. Message-ID: <1991Jan6.052220.28027@sparky.IMD.Sterling.COM>
  5. Date: 6 Jan 91 05:22:20 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7. X-Checksum-Snefru: 03d6364f 1dbdfcce 75671310 11a90ed2
  8.  
  9. Submitted-by: wht@n4hgf.uucp (Warren Tucker)
  10. Posting-number: Volume 16, Issue 39
  11. Archive-name: ecu3/part15
  12.  
  13. ---- Cut Here and feed the following to sh ----
  14. #!/bin/sh
  15. # This is part 15 of ecu3
  16. if touch 2>&1 | fgrep 'amc' > /dev/null
  17.  then TOUCH=touch
  18.  else TOUCH=true
  19. fi
  20. # ============= regexp.c ==============
  21. echo 'x - extracting regexp.c (Text)'
  22. sed 's/^X//' << 'SHAR_EOF' > 'regexp.c' &&
  23. X/*+-------------------------------------------------------------------------
  24. X    regexp.c -- regular expression functions made sane
  25. X--------------------------------------------------------------------------*/
  26. X/*+:EDITS:*/
  27. X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
  28. X
  29. X#include <stdio.h>
  30. X#include "stdio_lint.h"
  31. X#include "lint_args.h"
  32. X#include "ecuerror.h"
  33. X#include "esd.h"
  34. X#include "var.h"
  35. X#include <setjmp.h>
  36. X
  37. X#define    CBRA    2
  38. X#define    CCHR    4
  39. X#define    CDOT    8
  40. X#define    CCL    12
  41. X#define    CDOL    20
  42. X#define    CCEOF    22
  43. X#define    CKET    24
  44. X#define    CBACK    36
  45. X
  46. X#define    STAR    01
  47. X#define    RNGE    03
  48. X
  49. X#define    NBRA    9
  50. X
  51. X#define    PLACE(c)    ep[c >> 3] |= bittab[c & 07]
  52. X#define    ISTHERE(c)    (ep[c >> 3] & bittab[c & 07])
  53. X
  54. Xvoid getrnge();
  55. X
  56. Xextern int proctrace;
  57. Xextern int proc_level;
  58. X
  59. Xchar *braslist[NBRA];
  60. Xchar *braelist[NBRA];
  61. Xint nbra,ebra;
  62. Xchar *match_start,*match_end,*locs;
  63. Xint sed;
  64. Xint nodelim;
  65. Xint circf;
  66. Xint low;
  67. Xint size;
  68. X
  69. Xchar bittab[] = { 1,2,4,8,16,32,64,128 };
  70. X
  71. Xjmp_buf    compile_error_jmpbuf;
  72. X
  73. Xvoid
  74. Xcompile(pattern,ep,endbuf,seof)
  75. Xregister char *ep;
  76. Xchar *pattern,*endbuf;
  77. X{
  78. X    register char *sp = pattern;
  79. X    register c;
  80. X    register eof = seof;
  81. X    char *lastep = pattern;
  82. X    int cclcnt;
  83. X    char bracket[NBRA],*bracketp;
  84. X    int closed;
  85. X    char neg;
  86. X    int lc;
  87. X    int i,cflg;
  88. X
  89. X    lastep = 0;
  90. X    if((c = *sp++) == eof || c == '\n')
  91. X    {
  92. X        if(c == '\n')
  93. X        {
  94. X            --sp;
  95. X            nodelim = 1;
  96. X        }
  97. X        if(*ep == 0 && !sed)
  98. X            longjmp(compile_error_jmpbuf,41);
  99. X        return;
  100. X    }
  101. X    bracketp = bracket;
  102. X    circf = closed = nbra = ebra = 0;
  103. X    if(c == '^')
  104. X        circf++;
  105. X    else
  106. X        --sp;
  107. X    while(1)
  108. X    {
  109. X        if(ep >= endbuf)
  110. X            longjmp(compile_error_jmpbuf,50);
  111. X        c = *sp++;
  112. X        if(c != '*' && ((c != '\\') || (*sp != '{')))
  113. X            lastep = ep;
  114. X        if(c == eof)
  115. X        {
  116. X            *ep++ = CCEOF;
  117. X            return;
  118. X        }
  119. X        switch(c)
  120. X        {
  121. X
  122. X        case '.':
  123. X            *ep++ = CDOT;
  124. X            continue;
  125. X
  126. X        case '\n':
  127. X            if(!sed)
  128. X            {
  129. X                --sp;
  130. X                *ep++ = CCEOF;
  131. X                nodelim = 1;
  132. X                return;
  133. X            }
  134. X            else longjmp(compile_error_jmpbuf,36);
  135. X        case '*':
  136. X            if(lastep==0 || *lastep==CBRA || *lastep==CKET)
  137. X                goto defchar;
  138. X            *lastep |= STAR;
  139. X            continue;
  140. X
  141. X        case '$':
  142. X            if(*sp != eof && *sp != '\n')
  143. X                goto defchar;
  144. X            *ep++ = CDOL;
  145. X            continue;
  146. X
  147. X        case '[':
  148. X            if(&ep[17] >= endbuf)
  149. X                longjmp(compile_error_jmpbuf,50);
  150. X
  151. X            *ep++ = CCL;
  152. X            lc = 0;
  153. X            for(i = 0; i < 16; i++)
  154. X                ep[i] = 0;
  155. X
  156. X            neg = 0;
  157. X            if((c = *sp++) == '^')
  158. X            {
  159. X                neg = 1;
  160. X                c = *sp++;
  161. X            }
  162. X
  163. X            do 
  164. X            {
  165. X                if(c == '\0' || c == '\n')
  166. X                    longjmp(compile_error_jmpbuf,49);
  167. X                if(c == '-' && lc != 0)
  168. X                {
  169. X                    if((c = *sp++) == ']')
  170. X                    {
  171. X                        PLACE('-');
  172. X                        break;
  173. X                    }
  174. X                    while(lc < c)
  175. X                    {
  176. X                        PLACE(lc);
  177. X                        lc++;
  178. X                    }
  179. X                }
  180. X                if(c == '\\')
  181. X                {
  182. X                    switch(c = *sp++)
  183. X                    {
  184. X                    case 'n':
  185. X                        c = '\n';
  186. X                        break;
  187. X                    }
  188. X                }
  189. X                lc = c;
  190. X                PLACE(c);
  191. X            } while((c = *sp++) != ']');
  192. X            if(neg)
  193. X            {
  194. X                for(cclcnt = 0; cclcnt < 16; cclcnt++)
  195. X                    ep[cclcnt] ^= -1;
  196. X                ep[0] &= 0376;
  197. X            }
  198. X
  199. X            ep += 16;
  200. X
  201. X            continue;
  202. X
  203. X        case '\\':
  204. X            switch(c = *sp++)
  205. X            {
  206. X
  207. X            case '(':
  208. X                if(nbra >= NBRA)
  209. X                    longjmp(compile_error_jmpbuf,43);
  210. X                *bracketp++ = nbra;
  211. X                *ep++ = CBRA;
  212. X                *ep++ = nbra++;
  213. X                continue;
  214. X
  215. X            case ')':
  216. X                if(bracketp <= bracket || ++ebra != nbra)
  217. X                    longjmp(compile_error_jmpbuf,42);
  218. X                *ep++ = CKET;
  219. X                *ep++ = *--bracketp;
  220. X                closed++;
  221. X                continue;
  222. X
  223. X            case '{':
  224. X                if(lastep == (char *) (0))
  225. X                    goto defchar;
  226. X                *lastep |= RNGE;
  227. X                cflg = 0;
  228. Xnlim:
  229. X                c = *sp++;
  230. X                i = 0;
  231. X                do 
  232. X                {
  233. X                    if('0' <= c && c <= '9')
  234. X                        i = 10 * i + c - '0';
  235. X                    else
  236. X                        longjmp(compile_error_jmpbuf,16);
  237. X                } while(((c = *sp++) != '\\') && (c != ','));
  238. X                if(i >= 255)
  239. X                    longjmp(compile_error_jmpbuf,11);
  240. X                *ep++ = i;
  241. X                if(c == ',')
  242. X                {
  243. X                    if(cflg++)
  244. X                        longjmp(compile_error_jmpbuf,44);
  245. X                    if((c = *sp++) == '\\')
  246. X                        *ep++ = 255;
  247. X                    else 
  248. X                    {
  249. X                        --sp;
  250. X                        goto nlim;
  251. X                        /* get 2'nd number */
  252. X                    }
  253. X                }
  254. X                if(*sp++ != '}')
  255. X                    longjmp(compile_error_jmpbuf,45);
  256. X                if(!cflg)    /* one number */
  257. X                    *ep++ = i;
  258. X                else if((ep[-1] & 0377) < (ep[-2] & 0377))
  259. X                    longjmp(compile_error_jmpbuf,46);
  260. X                continue;
  261. X
  262. X            case '\n':
  263. X                longjmp(compile_error_jmpbuf,36);
  264. X
  265. X            case 'n':
  266. X                c = '\n';
  267. X                goto defchar;
  268. X
  269. X            default:
  270. X                if(c >= '1' && c <= '9')
  271. X                {
  272. X                    if((c -= '1') >= closed)
  273. X                        longjmp(compile_error_jmpbuf,25);
  274. X                    *ep++ = CBACK;
  275. X                    *ep++ = c;
  276. X                    continue;
  277. X                }
  278. X            }
  279. X            /* Drop through to default to use \ to turn off special chars */
  280. X
  281. Xdefchar:
  282. X        default:
  283. X            lastep = ep;
  284. X            *ep++ = CCHR;
  285. X            *ep++ = c;
  286. X        }
  287. X    }
  288. X}
  289. X
  290. Xstep(p1,p2)
  291. Xregister char *p1,*p2;
  292. X{
  293. X    register c;
  294. X
  295. X    if(circf)
  296. X    {
  297. X        match_start = p1;
  298. X        return(advance(p1,p2));
  299. X    }
  300. X    /* fast check for first character */
  301. X    if(*p2==CCHR)
  302. X    {
  303. X        c = p2[1];
  304. X        do 
  305. X        {
  306. X            if(*p1 != c)
  307. X                continue;
  308. X            if(advance(p1,p2))
  309. X            {
  310. X                match_start = p1;
  311. X                return(1);
  312. X            }
  313. X        } while(*p1++);
  314. X        return(0);
  315. X    }
  316. X    /* regular algorithm */
  317. X    do 
  318. X    {
  319. X        if(advance(p1,p2))
  320. X        {
  321. X            match_start = p1;
  322. X            return(1);
  323. X        }
  324. X    } while(*p1++);
  325. X    return(0);
  326. X}
  327. X
  328. Xadvance(lp,ep)
  329. Xregister char *lp,*ep;
  330. X{
  331. X    register char *curlp;
  332. X    char c;
  333. X    char *bbeg;
  334. X    int ct;
  335. X
  336. X    while(1)
  337. X        switch(*ep++)
  338. X        {
  339. X
  340. X        case CCHR:
  341. X            if(*ep++ == *lp++)
  342. X                continue;
  343. X            return(0);
  344. X
  345. X        case CDOT:
  346. X            if(*lp++)
  347. X                continue;
  348. X            return(0);
  349. X
  350. X        case CDOL:
  351. X            if(*lp==0)
  352. X                continue;
  353. X            return(0);
  354. X
  355. X        case CCEOF:
  356. X            match_end = lp;
  357. X            return(1);
  358. X
  359. X        case CCL:
  360. X            c = *lp++ & 0177;
  361. X            if(ISTHERE(c))
  362. X            {
  363. X                ep += 16;
  364. X                continue;
  365. X            }
  366. X            return(0);
  367. X        case CBRA:
  368. X            braslist[*ep++] = lp;
  369. X            continue;
  370. X
  371. X        case CKET:
  372. X            braelist[*ep++] = lp;
  373. X            continue;
  374. X
  375. X        case CCHR|RNGE:
  376. X            c = *ep++;
  377. X            getrnge(ep);
  378. X            while(low--)
  379. X                if(*lp++ != c)
  380. X                    return(0);
  381. X            curlp = lp;
  382. X            while(size--)
  383. X                if(*lp++ != c)
  384. X                    break;
  385. X            if(size < 0)
  386. X                lp++;
  387. X            ep += 2;
  388. X            goto star;
  389. X
  390. X        case CDOT|RNGE:
  391. X            getrnge(ep);
  392. X            while(low--)
  393. X                if(*lp++ == '\0')
  394. X                    return(0);
  395. X            curlp = lp;
  396. X            while(size--)
  397. X                if(*lp++ == '\0')
  398. X                    break;
  399. X            if(size < 0)
  400. X                lp++;
  401. X            ep += 2;
  402. X            goto star;
  403. X
  404. X        case CCL|RNGE:
  405. X            getrnge(ep + 16);
  406. X            while(low--)
  407. X            {
  408. X                c = *lp++ & 0177;
  409. X                if(!ISTHERE(c))
  410. X                    return(0);
  411. X            }
  412. X            curlp = lp;
  413. X            while(size--)
  414. X            {
  415. X                c = *lp++ & 0177;
  416. X                if(!ISTHERE(c))
  417. X                    break;
  418. X            }
  419. X            if(size < 0)
  420. X                lp++;
  421. X            ep += 18;        /* 16 + 2 */
  422. X            goto star;
  423. X
  424. X        case CBACK:
  425. X            bbeg = braslist[*ep];
  426. X            ct = braelist[*ep++] - bbeg;
  427. X
  428. X            if(ecmp(bbeg,lp,ct))
  429. X            {
  430. X                lp += ct;
  431. X                continue;
  432. X            }
  433. X            return(0);
  434. X
  435. X        case CBACK|STAR:
  436. X            bbeg = braslist[*ep];
  437. X            ct = braelist[*ep++] - bbeg;
  438. X            curlp = lp;
  439. X            while(ecmp(bbeg,lp,ct))
  440. X                lp += ct;
  441. X
  442. X            while(lp >= curlp)
  443. X            {
  444. X                if(advance(lp,ep))    return(1);
  445. X                lp -= ct;
  446. X            }
  447. X            return(0);
  448. X
  449. X
  450. X        case CDOT|STAR:
  451. X            curlp = lp;
  452. X            while(*lp++);
  453. X            goto star;
  454. X
  455. X        case CCHR|STAR:
  456. X            curlp = lp;
  457. X            while(*lp++ == *ep);
  458. X            ep++;
  459. X            goto star;
  460. X
  461. X        case CCL|STAR:
  462. X            curlp = lp;
  463. X            do 
  464. X            {
  465. X                c = *lp++ & 0177;
  466. X            } while(ISTHERE(c));
  467. X            ep += 16;
  468. X            goto star;
  469. X
  470. Xstar:
  471. X            do 
  472. X            {
  473. X                if(--lp == locs)
  474. X                    break;
  475. X                if(advance(lp,ep))
  476. X                    return(1);
  477. X            } while(lp > curlp);
  478. X            return(0);
  479. X
  480. X        }
  481. X}
  482. X
  483. Xvoid
  484. Xgetrnge(regexp)
  485. Xregister char *regexp;
  486. X{
  487. X    low = *regexp++ & 0377;
  488. X    size = ((*regexp & 0377) == 255) ? 20000 : (*regexp & 0377) - low;
  489. X}
  490. X
  491. Xecmp(a,b,count)
  492. Xregister char *a,*b;
  493. Xregister count;
  494. X{
  495. X    while(count--)
  496. X        if(*a++ != *b++)
  497. X            return(0);
  498. X    return(1);
  499. X}
  500. X
  501. X/*+-------------------------------------------------------------------------
  502. X    itmp = regexp_compile(regexp,cmpbuf,cmpbuf_size,emsg)
  503. X
  504. Xreturns 0 if no compile error,
  505. Xelse error occurred (*emsg points to error message text)
  506. X--------------------------------------------------------------------------*/
  507. Xint
  508. Xregexp_compile(regexp,cmpbuf,cmpbuf_size,emsg)
  509. Xchar *regexp;
  510. Xchar *cmpbuf;
  511. Xint cmpbuf_size;
  512. Xchar **emsg;
  513. X{
  514. X    register int itmp;
  515. X    static char errm[40];
  516. X
  517. X    if(itmp = setjmp(compile_error_jmpbuf))
  518. X    {
  519. X        switch(itmp)
  520. X        {
  521. X        case 11:
  522. X            *emsg = "Range endpoint too large";
  523. X            break;
  524. X        case 16:
  525. X            *emsg = "Bad number";
  526. X            break;
  527. X        case 25:
  528. X            *emsg = "\"\\digit\" out of range";
  529. X            break;
  530. X        case 36:
  531. X            *emsg = "Illegal or missing delimiter";
  532. X            break;
  533. X        case 41:
  534. X            *emsg = "No previous regular expression";
  535. X            break;
  536. X        case 42:
  537. X            *emsg = "More \\)'s than \\('s in regular expression";
  538. X            break;
  539. X        case 43:
  540. X            *emsg = "More \\('s than \\)'s in regular expression";
  541. X            break;
  542. X        case 44:
  543. X            *emsg = "More than 2 numbers in \\{ \\}";
  544. X            break;
  545. X        case 45:
  546. X            *emsg = "} expected after \\";
  547. X            break;
  548. X        case 46:
  549. X            *emsg = "First number exceeds second in \\{ \\}";
  550. X            break;
  551. X        case 49:
  552. X            *emsg = "[] imbalance";
  553. X            break;
  554. X        case 50:
  555. X            *emsg = "Regular expression too complex";
  556. X            break;
  557. X        default:
  558. X            sprintf(errm,"Unknown regexp compile error %d",itmp);
  559. X            *emsg = errm;
  560. X            break;
  561. X        }
  562. X        return(itmp);
  563. X    }
  564. X
  565. X    compile(regexp,cmpbuf,cmpbuf + cmpbuf_size,0);
  566. X    return(0);
  567. X}    /* end of regexp_compile */
  568. X
  569. X/*+-------------------------------------------------------------------------
  570. X    regexp_scan(cmpbuf,str_to_search,&match,&matchlen)
  571. Xreturn 1 if string match found, else 0
  572. Xif string matches, match receives pointer to first byte, matchlen = length
  573. Xof matching string
  574. X--------------------------------------------------------------------------*/
  575. Xregexp_scan(cmpbuf,str_to_search,match,matchlen)
  576. Xchar *cmpbuf;
  577. Xchar *str_to_search;
  578. Xchar **match;
  579. Xint *matchlen;
  580. X{
  581. X    register int itmp = step(str_to_search,cmpbuf);
  582. X    if(itmp)
  583. X    {
  584. X        *match = match_start;
  585. X        *matchlen = (int)(match_end - match_start);
  586. X    }
  587. X    return(itmp);
  588. X}    /* end of regexp_scan */
  589. X
  590. X#define CMPBUF_SIZE    256
  591. Xchar cmpbuf[CMPBUF_SIZE];
  592. X
  593. X/*+-------------------------------------------------------------------------
  594. X    regexp_operation(match_str,regexp_str,rtn_value)
  595. X--------------------------------------------------------------------------*/
  596. Xint
  597. Xregexp_operation(match_str,regexp_str,rtn_value)
  598. Xchar *match_str;
  599. Xchar *regexp_str;
  600. Xlong *rtn_value;
  601. X{
  602. Xchar *emsg;
  603. Xchar *match;
  604. Xint matchlen;
  605. X
  606. X    if(regexp_compile(regexp_str,cmpbuf,sizeof(cmpbuf),&emsg))
  607. X    {
  608. X        pprintf("compile 1 error: %s\n",emsg);
  609. X        return(eFATAL_ALREADY);
  610. X    }
  611. X
  612. X    if(regexp_scan(cmpbuf,match_str,&match,&matchlen))
  613. X    {
  614. X        *rtn_value = (long)(match - match_str);
  615. X        iv[0] = (long)matchlen;
  616. X        if(proc_level && proctrace)
  617. X            pprintf("%match set $i00 = %ld\n",iv[0]);
  618. X    }
  619. X    else
  620. X        *rtn_value = -1;
  621. X
  622. X    return(0);
  623. X}    /* end of regexp_operation */
  624. X
  625. X/* vi: set tabstop=4 shiftwidth=4: */
  626. X/* end of regexp.c */
  627. SHAR_EOF
  628. $TOUCH -am 1224224490 'regexp.c' &&
  629. chmod 0644 regexp.c ||
  630. echo 'restore of regexp.c failed'
  631. Wc_c="`wc -c < 'regexp.c'`"
  632. test 10229 -eq "$Wc_c" ||
  633.     echo 'regexp.c: original size 10229, current size' "$Wc_c"
  634. # ============= sysdep.c ==============
  635. echo 'x - extracting sysdep.c (Text)'
  636. sed 's/^X//' << 'SHAR_EOF' > 'sysdep.c' &&
  637. X/*+-------------------------------------------------------------------------
  638. X    sysdep.c -- system dependency aid
  639. X--------------------------------------------------------------------------*/
  640. X/*+:EDITS:*/
  641. X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
  642. X
  643. X#include <stdio.h>
  644. X
  645. Xchar    *defines[] =
  646. X{
  647. X#if defined(M_UNIX)
  648. X    "M_UNIX",
  649. X#undef M_XENIX        /* <---------------------- */
  650. X#endif
  651. X#if defined(M_XENIX)
  652. X    "M_XENIX",
  653. X#endif
  654. X#if defined(M_SYS5)
  655. X    "M_SYS5",
  656. X#endif
  657. X#if defined(M_I386)
  658. X    "M_I386",
  659. X#endif
  660. X#if defined(M_I286)
  661. X    "M_I286",
  662. X#endif
  663. X#if defined(M_I186)
  664. X    "M_I186",
  665. X#endif
  666. X#if defined(M_I8086)
  667. X    "M_I8086",
  668. X#endif
  669. X#if defined(M_I86)
  670. X    "M_I86",
  671. X#endif
  672. X#if defined(pyr)
  673. X    "pyr",
  674. X#endif
  675. X#if defined(i386)
  676. X    "i386",
  677. X#endif
  678. X#if defined(sun)
  679. X    "sun",
  680. X#endif
  681. X#if defined(sun2)
  682. X    "sun2,
  683. X#endif
  684. X#if defined(sun3)
  685. X    "sun3",
  686. X#endif
  687. X#if defined(sun4)
  688. X    "sun4",
  689. X#endif
  690. X#if defined(vax)
  691. X    "vax",
  692. X#endif
  693. X#if defined(pdp11)
  694. X    "pdp11",
  695. X#endif
  696. X#if defined(M_INTERNAT)
  697. X    "M_INTERNAT",
  698. X#endif
  699. X    (char *)0
  700. X};
  701. X
  702. X/*+-------------------------------------------------------------------------
  703. X    pos_in_ztermed_list(test,list)
  704. X--------------------------------------------------------------------------*/
  705. Xint
  706. Xpos_in_ztermed_list(test,list)
  707. Xchar    *test;
  708. Xchar    **list;
  709. X{
  710. X    register int itmp = 0;
  711. X
  712. X    while(*list)
  713. X    {
  714. X        if(!strcmp(*list++,test))
  715. X            return(itmp);
  716. X        itmp++;
  717. X    }
  718. X    return(-1);
  719. X}    /* end of pos_in_ztermed_list */
  720. X
  721. X/*+-------------------------------------------------------------------------
  722. X    main(argc,argv,envp)
  723. X--------------------------------------------------------------------------*/
  724. Xmain(argc,argv,envp)
  725. Xint argc;
  726. Xchar    **argv;
  727. Xchar    **envp;
  728. X{
  729. Xregister int iargv;
  730. Xchar **cpptr;
  731. X
  732. X    for(iargv = 1; iargv < argc; iargv++)
  733. X    {
  734. X        if(*argv[iargv] == '=')
  735. X        {
  736. X            if(pos_in_ztermed_list(argv[iargv] + 1,defines) >= 0)
  737. X                break;
  738. X        }
  739. X    }
  740. X    if(iargv == argc)
  741. X    {
  742. X        fprintf(stderr,"\n\nsysdep: no system match\n\n");
  743. X        fprintf(stderr,"On this system, I recognize:\n");
  744. X        cpptr = defines;
  745. X        while(*cpptr)
  746. X            fprintf(stderr,"    %s\n",*cpptr++);
  747. X        fputs("\n",stderr);
  748. X        exit(1);
  749. X    }
  750. X
  751. X    while(++iargv <argc)
  752. X    {
  753. X        if(*argv[iargv] == '=')
  754. X            break;
  755. X        fputs(argv[iargv],stdout);
  756. X        fputc(' ',stdout);
  757. X    }
  758. X    fputs("\n",stdout);
  759. X    exit(0);
  760. X}    /* end of main */
  761. X
  762. SHAR_EOF
  763. $TOUCH -am 1224224490 'sysdep.c' &&
  764. chmod 0644 sysdep.c ||
  765. echo 'restore of sysdep.c failed'
  766. Wc_c="`wc -c < 'sysdep.c'`"
  767. test 2206 -eq "$Wc_c" ||
  768.     echo 'sysdep.c: original size 2206, current size' "$Wc_c"
  769. # ============= utmpstat.c ==============
  770. echo 'x - extracting utmpstat.c (Text)'
  771. sed 's/^X//' << 'SHAR_EOF' > 'utmpstat.c' &&
  772. X#if defined(SHARE_DEBUG)
  773. X#define LOG_UTMP
  774. X#endif
  775. X/*+-------------------------------------------------------------------------
  776. X    utmpstat.c - utmp status for XENIX/UNIX line
  777. X    wht@n4hgf.Mt-Park.GA.US
  778. X
  779. X  Defined functions:
  780. X    strcmpi(s1,s2)
  781. X    utmp_status(line)
  782. X
  783. X--------------------------------------------------------------------------*/
  784. X/*+:EDITS:*/
  785. X/*:10-16-1990-20:43-wht@n4hgf-add SHARE_DEBUG */
  786. X/*:09-19-1990-19:36-wht@n4hgf-ecu_log_event now gets pid for log from caller */
  787. X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
  788. X
  789. X#include "ecu.h"
  790. X#include "ecuhangup.h"
  791. X#include "utmpstatus.h"
  792. X#include "ecuungetty.h"
  793. X#include "dialprog.h"
  794. X#include <errno.h>
  795. X#include <utmp.h>
  796. X
  797. X#if !defined(ut_name)        /* nobody can keep their mind made up; ... */
  798. X#define ut_name ut_user        /* ... this is getting verry difficult, very old */
  799. X#endif
  800. X
  801. Xextern int errno;
  802. X
  803. Xchar *utmp_file = "/etc/utmp";
  804. Xstruct utmp last_utmp;
  805. X
  806. X/*+-------------------------------------------------------------------------
  807. X    strcmpi(s1,s2) - case-insensitive strcmp
  808. XIn here rather than ecuutil.c since other executables besides ecu
  809. Xuses this module and strcmpi needed there too 
  810. X--------------------------------------------------------------------------*/
  811. Xint
  812. Xstrcmpi(s1,s2)
  813. Xregister char *s1;
  814. Xregister char *s2;
  815. X{
  816. Xregister char c1,c2;
  817. X
  818. X    for ( ; *s1 ; s1++, s2++)
  819. X    {
  820. X        if(isupper(*s1))
  821. X            c1 = tolower(*s1);
  822. X        else
  823. X            c1 = *s1;
  824. X        if(isupper(*s2))
  825. X            c2 = tolower(*s2);
  826. X        else
  827. X            c2 = *s2;
  828. X        if(c1 != c2)
  829. X            break;
  830. X    }
  831. X    return (*s1 - *s2);
  832. X}    /* end of strcmpi */
  833. X
  834. X/*+-------------------------------------------------------------------------
  835. X    utmp_status(line) - check line status in utmp
  836. X'line' is "/dev/ttyxx"-style
  837. Xreturns US_ value and global utmp struct last_utmp;
  838. X--------------------------------------------------------------------------*/
  839. Xint
  840. Xutmp_status(line)
  841. Xchar *line;
  842. X{
  843. Xregister ufd;
  844. Xregister itmp;
  845. Xregister status = US_NOTFOUND;
  846. X#if defined(LOG_UTMP)
  847. Xchar logstr[128];
  848. X#endif
  849. X
  850. X/*
  851. X * crock/bozo alert: 
  852. X * ut_name ain't but EIGHT characters long, but
  853. X * EIGHT characters are often stored, so ya don't get no null
  854. X * ut_id ain't but FOUR characters long, but
  855. X * FOUR characters are routinely stored, so ya don't get no null
  856. X */
  857. Xchar namecopy[sizeof(last_utmp.ut_name) + 1];
  858. Xchar idcopy[sizeof(last_utmp.ut_id) + 1];
  859. X
  860. X    if((ufd = open(utmp_file,O_RDONLY,755)) < 0)
  861. X    {
  862. X        perror(utmp_file);
  863. X        hangup(HANGUP_LINE_OPEN_ERROR);
  864. X    }
  865. X
  866. X    while(read(ufd,(char *)&last_utmp,sizeof(last_utmp)) > 0)
  867. X    {
  868. X        strncpy(namecopy,last_utmp.ut_name,sizeof(last_utmp.ut_name));
  869. X        namecopy[sizeof(namecopy) - 1] = 0;
  870. X
  871. X        strncpy(idcopy,last_utmp.ut_id,sizeof(last_utmp.ut_id));
  872. X        idcopy[sizeof(idcopy) - 1] = 0;
  873. X
  874. X#if defined(M_UNIX)
  875. X        if((!strncmp(namecopy,"uugetty",7) ||
  876. X         !strncmp(namecopy,"getty",5)) &&
  877. X         (ulindex(idcopy,line + 8) == (strlen(idcopy) - 2)))
  878. X        {
  879. X            if(itmp = line_locked(line))
  880. X                status = US_DIALOUT;
  881. X            else
  882. X                status = US_LOGIN;
  883. X            break;
  884. X        }
  885. X        else if((!strcmpi(last_utmp.ut_line,line + 5)) &&
  886. X            (!kill(last_utmp.ut_pid,0) || (errno != ESRCH)))
  887. X        {
  888. X            status = US_LOGGEDIN;
  889. X            break;
  890. X        }
  891. X#else
  892. X        if((!strcmpi(last_utmp.ut_line,line + 5)) &&
  893. X            (!kill(last_utmp.ut_pid,0) || (errno != ESRCH)))
  894. X        {
  895. X            if(!strcmp(last_utmp.ut_name,"LOGIN"))
  896. X                status = US_LOGIN;
  897. X            else if(!strcmp(last_utmp.ut_name,"DIALOUT"))
  898. X                status = US_DIALOUT;
  899. X            else
  900. X                status = US_LOGGEDIN;
  901. X            break;
  902. X        }
  903. X#endif
  904. X    }
  905. X
  906. X#if defined(LOG_UTMP)
  907. X    if(status == US_NOTFOUND)
  908. X        sprintf(logstr,"UTMP %s: no entry in utmp, status=%d",line,status);
  909. X    else
  910. X    {
  911. X    char *ctime();
  912. X        sprintf(logstr,"UTMP %s:%s:%s:%d:status=%d:%s", 
  913. X            namecopy,idcopy,last_utmp.ut_line,
  914. X            last_utmp.ut_pid,status, ctime(&last_utmp.ut_time));
  915. X        logstr[strlen(logstr) - 1] = 0;    /* kill NL from ctime() */
  916. X    }
  917. X    ecu_log_event(getpid(),logstr);
  918. X#endif
  919. X
  920. X    close(ufd);
  921. X    return(status);
  922. X
  923. X}    /* end of utmp_status */
  924. X
  925. X/* vi: set tabstop=4 shiftwidth=4: */
  926. X/* end of utmpstat.c */
  927. SHAR_EOF
  928. $TOUCH -am 1224224490 'utmpstat.c' &&
  929. chmod 0644 utmpstat.c ||
  930. echo 'restore of utmpstat.c failed'
  931. Wc_c="`wc -c < 'utmpstat.c'`"
  932. test 3906 -eq "$Wc_c" ||
  933.     echo 'utmpstat.c: original size 3906, current size' "$Wc_c"
  934. # ============= var.c ==============
  935. echo 'x - extracting var.c (Text)'
  936. sed 's/^X//' << 'SHAR_EOF' > 'var.c' &&
  937. X/*+-------------------------------------------------------------------------
  938. X    var.c - ecu variable routines
  939. X    wht@n4hgf.Mt-Park.GA.US
  940. X
  941. X  Defined functions:
  942. X    alloc_MKV(name)
  943. X    build_mkvi(param)
  944. X    build_mkvi_primitive(name)
  945. X    build_mkvs(param)
  946. X    build_mkvs_primitive(name,length)
  947. X    pcmd_mkvar(param)
  948. X    find_mkvs(name,ppesd,auto_create)
  949. X    find_mkvi(name,pplong,auto_create)
  950. X    free_mkvi(mkv)
  951. X    free_mkvs(mkv)
  952. X    get_ivptr(param,ppiv,auto_create)
  953. X    get_subscript(param,psubscript)
  954. X    get_svptr(param,ppsv,auto_create)
  955. X    mkv_proc_starting(pcb)
  956. X    mkv_proc_terminating(pcb)
  957. X    var_init()
  958. X
  959. X--------------------------------------------------------------------------*/
  960. X/*+:EDITS:*/
  961. X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
  962. X
  963. X#include "ecu.h"
  964. X#include "esd.h"
  965. X#define VDECL
  966. X#include "var.h"
  967. X#include "proc.h"
  968. X#include "ecukey.h"
  969. X#include "ecuerror.h"
  970. X
  971. Xextern int proc_level;
  972. Xextern int proctrace;
  973. X
  974. Xtypedef union mkvu_type
  975. X{
  976. X    ESD    *sv;
  977. X    long iv;
  978. X} MKVU;
  979. X
  980. Xtypedef struct mkv_type
  981. X{
  982. X    MKVU item;                /* pointer to esd if sv or long if iv */
  983. X    struct mkv_type *next;    /* next MKV in chain; if==NULL, no more in chain */
  984. X    struct mkv_type *prev;    /* previous MKV in chain; if==NULL, top of chain */
  985. X    char *name;                /* name of variable */
  986. X} MKV;
  987. X
  988. XMKV *mkvi_last = (MKV *)0;
  989. XMKV *mkvs_last = (MKV *)0;
  990. X
  991. X/*+-------------------------------------------------------------------------
  992. X    var_init()
  993. X--------------------------------------------------------------------------*/
  994. Xvoid
  995. Xvar_init()
  996. X{
  997. Xregister itmp;
  998. X
  999. X    for(itmp = 0; itmp < SVQUAN; itmp++)
  1000. X    {
  1001. X        if((sv[itmp] = make_esd(SVLEN)) == (ESD *)0)
  1002. X        {
  1003. X            pputs("out of memory\n");
  1004. X            exit(1);
  1005. X        }
  1006. X    }
  1007. X
  1008. X    for(itmp = 0; itmp < IVQUAN; itmp++)
  1009. X        iv[itmp] = 0;
  1010. X
  1011. X}    /* end of var_init */
  1012. X
  1013. X/*+-------------------------------------------------------------------------
  1014. X    alloc_MKV(name)
  1015. X--------------------------------------------------------------------------*/
  1016. XMKV *
  1017. Xalloc_MKV(name)
  1018. Xchar *name;
  1019. X{
  1020. XMKV *mkv;
  1021. X    if(!(mkv = (MKV *)malloc(sizeof(MKV))))
  1022. X        return((MKV *)0);
  1023. X    if(!(mkv->name = malloc(strlen(name) + 1)))
  1024. X    {
  1025. X        free((char *)mkv);
  1026. X        return((MKV *)0);
  1027. X    }
  1028. X    strcpy(mkv->name,name);
  1029. X    mkv->item.iv = 0;
  1030. X    return(mkv);
  1031. X}    /* end of alloc_MKV */
  1032. X
  1033. X/*+-------------------------------------------------------------------------
  1034. X    build_mkvi_primitive(name)
  1035. X--------------------------------------------------------------------------*/
  1036. Xbuild_mkvi_primitive(name)
  1037. Xchar *name;
  1038. X{
  1039. XMKV *mkv;
  1040. X
  1041. X    if((mkv = alloc_MKV(name)) == (MKV *)0)
  1042. X        return(eNoMemory);
  1043. X    if(mkvi_last)
  1044. X        mkvi_last->next = mkv;
  1045. X    mkv->prev = mkvi_last;
  1046. X    mkv->next = (MKV *)0;
  1047. X    mkvi_last = mkv;
  1048. X    return(0);
  1049. X}    /* end of build_mkvi_primitive */
  1050. X
  1051. X/*+-------------------------------------------------------------------------
  1052. X    build_mkvi(param)
  1053. X--------------------------------------------------------------------------*/
  1054. Xbuild_mkvi(param)
  1055. XESD *param;
  1056. X{
  1057. Xregister erc;
  1058. Xchar name[16];
  1059. X
  1060. X    if(erc = get_alphanum_zstr(param,name,sizeof(name)))
  1061. X        return(erc);
  1062. X    return(build_mkvi_primitive(name));
  1063. X
  1064. X}    /* end of build_mkvi */
  1065. X
  1066. X/*+-------------------------------------------------------------------------
  1067. X    build_mkvs_primitive(name,length)
  1068. Xtrusts caller not to exceed 5120 max size
  1069. X--------------------------------------------------------------------------*/
  1070. Xbuild_mkvs_primitive(name,length)
  1071. Xchar *name;
  1072. Xint length;
  1073. X{
  1074. XMKV *mkv;
  1075. XESD *text;
  1076. X
  1077. X    if((text = make_esd((int)length)) == (ESD *)0)
  1078. X        return(eNoMemory);
  1079. X
  1080. X    if((mkv = alloc_MKV(name)) == (MKV *)0)
  1081. X    {
  1082. X        free_esd(text);
  1083. X        return(eNoMemory);
  1084. X    }
  1085. X
  1086. X    mkv->item.sv = text;
  1087. X
  1088. X    if(mkvs_last)
  1089. X        mkvs_last->next = mkv;
  1090. X    mkv->prev = mkvs_last;
  1091. X    mkv->next = (MKV *)0;
  1092. X    mkvs_last = mkv;
  1093. X    return(0);
  1094. X
  1095. X}    /* end of build_mkvs_primitive */
  1096. X
  1097. X/*+-------------------------------------------------------------------------
  1098. X    build_mkvs(param)
  1099. X--------------------------------------------------------------------------*/
  1100. Xbuild_mkvs(param)
  1101. XESD *param;
  1102. X{
  1103. Xregister erc;
  1104. Xchar name[16];
  1105. Xulong length;
  1106. X
  1107. X    if(erc = get_alphanum_zstr(param,name,sizeof(name)))
  1108. X        return(erc);
  1109. X
  1110. X    if(erc = skip_paren(param,1))
  1111. X        return(erc);
  1112. X    if(erc = gint(param,&length))
  1113. X        return(erc);
  1114. X    if(length > 5120)
  1115. X    {
  1116. X        pprintf("max string size is 5120 ... cannot make %lu byte string\n",
  1117. X            length);
  1118. X        return(eFATAL_ALREADY);
  1119. X    }
  1120. X    if(erc = skip_paren(param,0))
  1121. X        return(erc);
  1122. X
  1123. X    return(build_mkvs_primitive(name,(int)length));
  1124. X
  1125. X}    /* end of build_mkvs */
  1126. X
  1127. X/*+-------------------------------------------------------------------------
  1128. X    pcmd_mkvar(param)
  1129. X
  1130. Xmkvar i<name>
  1131. Xmkvar s<name>(<size-int>)
  1132. X--------------------------------------------------------------------------*/
  1133. Xint
  1134. Xpcmd_mkvar(param)
  1135. XESD *param;
  1136. X{
  1137. Xregister erc;
  1138. Xchar vartype;
  1139. X
  1140. X    if(!proc_level)
  1141. X        return(eNotExecutingProc);
  1142. X
  1143. X    do {
  1144. X        if(erc = get_cmd_char(param,&vartype))
  1145. X            return(erc);
  1146. X        if(vartype == '$')
  1147. X        {
  1148. X            if(erc = get_cmd_char(param,&vartype))
  1149. X                return(erc);
  1150. X        }
  1151. X        vartype = to_lower(vartype);
  1152. X        switch(vartype)
  1153. X        {
  1154. X            case 'i':
  1155. X                erc = build_mkvi(param);
  1156. X                break;
  1157. X            case 's':
  1158. X                erc = build_mkvs(param);
  1159. X                break;
  1160. X            default:
  1161. X                return(eIllegalVarType);
  1162. X        }
  1163. X        if(erc)
  1164. X            return(erc);
  1165. X    } while(!skip_comma(param));
  1166. X
  1167. X    if(!end_of_cmd(param))
  1168. X        return(eSyntaxError);
  1169. X
  1170. X    return(0);
  1171. X
  1172. X}    /* end of pcmd_mkvar */
  1173. X
  1174. X/*+-------------------------------------------------------------------------
  1175. X    free_mkvi(mkv)
  1176. X--------------------------------------------------------------------------*/
  1177. Xvoid
  1178. Xfree_mkvi(mkv)
  1179. XMKV *mkv;
  1180. X{
  1181. X    free(mkv->name);
  1182. X    free((char *)mkv);
  1183. X}    /* end of free_mkvi */
  1184. X
  1185. X/*+-------------------------------------------------------------------------
  1186. X    free_mkvs(mkv)
  1187. X--------------------------------------------------------------------------*/
  1188. Xvoid
  1189. Xfree_mkvs(mkv)
  1190. XMKV *mkv;
  1191. X{
  1192. X    free_esd(mkv->item.sv);
  1193. X    free(mkv->name);
  1194. X    free((char *)mkv);
  1195. X}    /* end of free_mkvs */
  1196. X
  1197. X/*+-------------------------------------------------------------------------
  1198. X    mkv_proc_starting(pcb)
  1199. X--------------------------------------------------------------------------*/
  1200. Xvoid
  1201. Xmkv_proc_starting(pcb)
  1202. XPCB *pcb;
  1203. X{
  1204. X    pcb->mkvs_last = (char *)mkvs_last;
  1205. X    pcb->mkvi_last = (char *)mkvi_last;
  1206. X}    /* end of mkv_proc_starting */
  1207. X
  1208. X/*+-------------------------------------------------------------------------
  1209. X    mkv_proc_terminating(pcb)
  1210. X--------------------------------------------------------------------------*/
  1211. Xvoid
  1212. Xmkv_proc_terminating(pcb)
  1213. XPCB *pcb;
  1214. X{
  1215. XMKV *pmkv;
  1216. X
  1217. X    while(mkvi_last != (MKV *)pcb->mkvi_last)
  1218. X    {
  1219. X        pmkv = mkvi_last->prev;
  1220. X        free_mkvi(mkvi_last);
  1221. X        mkvi_last = pmkv;
  1222. X    }
  1223. X    while(mkvs_last != (MKV *)pcb->mkvs_last)
  1224. X    {
  1225. X        pmkv = mkvs_last->prev;
  1226. X        free_mkvs(mkvs_last);
  1227. X        mkvs_last = pmkv;
  1228. X    }
  1229. X
  1230. X}    /* end of mkv_proc_terminating */
  1231. X
  1232. X/*+-------------------------------------------------------------------------
  1233. X    find_mkvs(name,ppesd,auto_create)
  1234. X--------------------------------------------------------------------------*/
  1235. Xint
  1236. Xfind_mkvs(name,ppesd,auto_create)
  1237. Xchar *name;
  1238. XESD **ppesd;
  1239. Xint auto_create;
  1240. X{
  1241. Xint erc;
  1242. XMKV *mkv = mkvs_last;
  1243. X
  1244. X    while(mkv)
  1245. X    {
  1246. X        if(!strcmp(name,mkv->name))
  1247. X        {
  1248. X            *ppesd = mkv->item.sv;
  1249. X            return(0);
  1250. X        }
  1251. X        mkv = mkv->prev;
  1252. X    }
  1253. X
  1254. X    if(auto_create)
  1255. X    {
  1256. X        if(proctrace)
  1257. X            pprintf("creating $s%s(256)\n",name);
  1258. X        if(erc = build_mkvs_primitive(name,256))
  1259. X            return(erc);
  1260. X        *ppesd = mkvs_last->item.sv;
  1261. X        return(0);
  1262. X    }
  1263. X
  1264. X    return(eNoSuchVariable);
  1265. X
  1266. X}    /* end of find_mkvs */
  1267. X
  1268. X/*+-------------------------------------------------------------------------
  1269. X    find_mkvi(name,pplong,auto_create)
  1270. X--------------------------------------------------------------------------*/
  1271. Xint
  1272. Xfind_mkvi(name,pplong,auto_create)
  1273. Xchar *name;
  1274. Xlong **pplong;
  1275. Xint auto_create;
  1276. X{
  1277. Xint erc;
  1278. XMKV *mkv = mkvi_last;
  1279. X
  1280. X    while(mkv)
  1281. X    {
  1282. X        if(!strcmp(name,mkv->name))
  1283. X        {
  1284. X            *pplong = &mkv->item.iv;
  1285. X            return(0);
  1286. X        }
  1287. X        mkv = mkv->prev;
  1288. X    }
  1289. X
  1290. X    if(auto_create)
  1291. X    {
  1292. X        if(proctrace)
  1293. X            pprintf("creating $i%s\n",name);
  1294. X        if(erc = build_mkvi_primitive(name))
  1295. X            return(erc);
  1296. X        *pplong = &mkvi_last->item.iv;
  1297. X        return(0);
  1298. X    }
  1299. X
  1300. X    return(eNoSuchVariable);
  1301. X
  1302. X}    /* end of find_mkvi */
  1303. X
  1304. X/*+-------------------------------------------------------------------------
  1305. X    get_subscript(param,psubscript)
  1306. Xonly called when '[' at pb + index
  1307. X--------------------------------------------------------------------------*/
  1308. Xget_subscript(param,psubscript)
  1309. XESD *param;
  1310. Xulong *psubscript;
  1311. X{
  1312. Xregister erc;
  1313. X
  1314. X    param->index++;
  1315. X    if(erc = gint(param,psubscript))
  1316. X        return(erc);
  1317. X    if(skip_cmd_char(param,']'))
  1318. X        return(eSyntaxError);
  1319. X    return(0);
  1320. X}    /* end of get_subscript */
  1321. X
  1322. X/*+-------------------------------------------------------------------------
  1323. X    get_ivptr(param,ppiv,auto_create)
  1324. Xcalled with index set to $i.....
  1325. X                           ^
  1326. X--------------------------------------------------------------------------*/
  1327. Xget_ivptr(param,ppiv,auto_create)
  1328. XESD *param;
  1329. Xlong **ppiv;
  1330. Xint auto_create;
  1331. X{
  1332. Xregister erc;
  1333. Xulong varnum;
  1334. Xchar name[16];
  1335. X
  1336. X    if(end_of_cmd(param))
  1337. X        return(eSyntaxError);
  1338. X    else if(!get_numeric_value(param,&varnum))
  1339. X        goto TEST_VARNUM;
  1340. X    else if(*(param->pb + param->index) == '[')
  1341. X    {
  1342. X        if(erc = get_subscript(param,&varnum))
  1343. X            return(erc);
  1344. XTEST_VARNUM:
  1345. X        if(varnum >= IVQUAN)
  1346. X            return(eIllegalVarNumber);
  1347. X        *ppiv = &iv[(int)varnum];
  1348. X        return(0);
  1349. X    }
  1350. X    else if(get_alphanum_zstr(param,name,sizeof(name)))
  1351. X        return(eInvalidVarName);
  1352. X
  1353. X    return(find_mkvi(name,ppiv,auto_create));
  1354. X
  1355. X}    /* end of get_ivptr */
  1356. X
  1357. X/*+-------------------------------------------------------------------------
  1358. X    get_svptr(param,ppsv,auto_create)
  1359. Xcalled with index set to $s.....
  1360. X                           ^
  1361. X--------------------------------------------------------------------------*/
  1362. Xget_svptr(param,ppsv,auto_create)
  1363. XESD *param;
  1364. XESD **ppsv;
  1365. Xint auto_create;
  1366. X{
  1367. Xregister erc;
  1368. Xulong varnum;
  1369. Xchar name[16];
  1370. X
  1371. X    if(end_of_cmd(param))
  1372. X        return(eSyntaxError);
  1373. X    else if(!get_numeric_value(param,&varnum))
  1374. X        goto TEST_VARNUM;
  1375. X    else if(*(param->pb + param->index) == '[')
  1376. X    {
  1377. X        if(erc = get_subscript(param,&varnum))
  1378. X            return(erc);
  1379. XTEST_VARNUM:
  1380. X        if(varnum >= SVQUAN)
  1381. X            return(eIllegalVarNumber);
  1382. X        *ppsv = sv[(int)varnum];
  1383. X        return(0);
  1384. X    }
  1385. X    if(get_alphanum_zstr(param,name,sizeof(name)))
  1386. X        return(eInvalidVarName);
  1387. X    return(find_mkvs(name,ppsv,0));
  1388. X
  1389. X}    /* end of get_svptr */
  1390. X
  1391. X/* vi: set tabstop=4 shiftwidth=4: */
  1392. X/* end of var.c */
  1393. SHAR_EOF
  1394. $TOUCH -am 1224224490 'var.c' &&
  1395. chmod 0644 var.c ||
  1396. echo 'restore of var.c failed'
  1397. Wc_c="`wc -c < 'var.c'`"
  1398. test 10027 -eq "$Wc_c" ||
  1399.     echo 'var.c: original size 10027, current size' "$Wc_c"
  1400. # ============= dialprog.h ==============
  1401. echo 'x - extracting dialprog.h (Text)'
  1402. sed 's/^X//' << 'SHAR_EOF' > 'dialprog.h' &&
  1403. X/*+-------------------------------------------------------------------------
  1404. X    dialprog.h - HDB UUCP dialer program return code error codes
  1405. X    wht@n4hgf.Mt-Park.GA.US
  1406. X--------------------------------------------------------------------------*/
  1407. X/*+:EDITS:*/
  1408. X/*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */
  1409. X
  1410. X#define    RC_FAIL        0x80    /* 1 = failed to connect */
  1411. X#define    RCE_NULL    0        /* general purpose or unknown error code */
  1412. X#define    RCE_INUSE    1        /* line in use */
  1413. X#define    RCE_SIG        2        /* signal aborted dialer */
  1414. X#define    RCE_ARGS    3        /* invalid arguments */
  1415. X#define    RCE_PHNO    4        /* invalid phone number */
  1416. X#define    RCE_SPEED    5        /* invalid baud rate -or- bad connect baud */
  1417. X#define    RCE_OPEN    6        /* can't open line */
  1418. X#define    RCE_IOCTL    7        /* ioctl error */
  1419. X#define    RCE_TIMOUT    8        /* timeout */
  1420. X#define    RCE_NOTONE    9        /* no dial tone */
  1421. X#define    RCE_BUSY    13        /* phone is busy */
  1422. X#define    RCE_NOCARR    14        /* no carrier */
  1423. X#define    RCE_ANSWER    15        /* no answer */
  1424. X
  1425. X/* code writing aid */
  1426. X#ifdef NEVER
  1427. X        case RCE_NULL:        /* general purpose or unknown error code */
  1428. X        case RCE_INUSE:        /* line in use */
  1429. X        case RCE_SIG:        /* signal aborted dialer */
  1430. X        case RCE_ARGS:        /* invalid arguments */
  1431. X        case RCE_PHNO:        /* invalid phone number */
  1432. X        case RCE_SPEED:        /* invalid baud rate -or- bad connect baud */
  1433. X        case RCE_OPEN:        /* can't open line */
  1434. X        case RCE_IOCTL:        /* ioctl error */
  1435. X        case RCE_TIMOUT:    /* timeout */
  1436. X        case RCE_NOTONE:    /* no dial tone */
  1437. X        case RCE_BUSY:        /* phone is busy */
  1438. X        case RCE_NOCARR:    /* no carrier */
  1439. X        case RCE_ANSWER:    /* no answer */
  1440. X#endif
  1441. X
  1442. X/* vi: set tabstop=4 shiftwidth=4: */
  1443. X/* end of dialprog.h */
  1444. SHAR_EOF
  1445. $TOUCH -am 1224222690 'dialprog.h' &&
  1446. chmod 0644 dialprog.h ||
  1447. echo 'restore of dialprog.h failed'
  1448. Wc_c="`wc -c < 'dialprog.h'`"
  1449. test 1616 -eq "$Wc_c" ||
  1450.     echo 'dialprog.h: original size 1616, current size' "$Wc_c"
  1451. # ============= dlent.h ==============
  1452. echo 'x - extracting dlent.h (Text)'
  1453. sed 's/^X//' << 'SHAR_EOF' > 'dlent.h' &&
  1454. X/*+-------------------------------------------------------------------------
  1455. X    dlent.h - HDB UUCP Dialers file entry (a la pwent.h)
  1456. X    wht@n4hgf.Mt-Park.GA.US
  1457. X--------------------------------------------------------------------------*/
  1458. X/*+:EDITS:*/
  1459. X/*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */
  1460. X
  1461. Xstruct dlent
  1462. X{
  1463. X    char *name;        /* Dialer name */
  1464. X    char *tlate;    /* translate string */
  1465. X    char *script;    /* expect-respond script */
  1466. X};
  1467. X
  1468. Xstruct dlent *getdlent();
  1469. Xvoid enddlent();
  1470. X
  1471. X/* vi: set tabstop=4 shiftwidth=4: */
  1472. X/* end of dlent.h */
  1473. SHAR_EOF
  1474. $TOUCH -am 1224222690 'dlent.h' &&
  1475. chmod 0644 dlent.h ||
  1476. echo 'restore of dlent.h failed'
  1477. Wc_c="`wc -c < 'dlent.h'`"
  1478. test 545 -eq "$Wc_c" ||
  1479.     echo 'dlent.h: original size 545, current size' "$Wc_c"
  1480. # ============= dvent.h ==============
  1481. echo 'x - extracting dvent.h (Text)'
  1482. sed 's/^X//' << 'SHAR_EOF' > 'dvent.h' &&
  1483. X/*+-------------------------------------------------------------------------
  1484. X    dvent.h - HDB UUCP Devices file entry (a la pwent.h)
  1485. X    wht@n4hgf.Mt-Park.GA.US
  1486. X--------------------------------------------------------------------------*/
  1487. X/*+:EDITS:*/
  1488. X/*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */
  1489. X
  1490. Xstruct dvent
  1491. X{
  1492. X    char *type;        /* ACU or Direct */
  1493. X    char *line;        /* tty  name "ttyxx"-style */
  1494. X    char *dialer;    /* "801" dialer line */
  1495. X    uint low_baud;    /* lowest baud rate */
  1496. X    uint high_baud;    /* highest baud rate */
  1497. X    char *dialprog;    /* dialer program */
  1498. X};
  1499. X
  1500. Xstruct dvent *getdvent();
  1501. Xstruct dvent *getdvbaud();
  1502. Xstruct dvent *getdvline();
  1503. Xvoid enddvent();
  1504. X
  1505. X/* vi: set tabstop=4 shiftwidth=4: */
  1506. X/* end of dvent.h */
  1507. SHAR_EOF
  1508. $TOUCH -am 1224222690 'dvent.h' &&
  1509. chmod 0644 dvent.h ||
  1510. echo 'restore of dvent.h failed'
  1511. Wc_c="`wc -c < 'dvent.h'`"
  1512. test 722 -eq "$Wc_c" ||
  1513.     echo 'dvent.h: original size 722, current size' "$Wc_c"
  1514. # ============= ecu.h ==============
  1515. echo 'x - extracting ecu.h (Text)'
  1516. sed 's/^X//' << 'SHAR_EOF' > 'ecu.h' &&
  1517. X/*+-----------------------------------------------------------------------
  1518. X    ecu.h -- TuckerWare Extended Calling Unit
  1519. X    wht@n4hgf.Mt-Park.GA.US
  1520. X------------------------------------------------------------------------*/
  1521. X/*+:EDITS:*/
  1522. X/*:08-14-1990-20:39-wht@n4hgf-ecu3.00-flush old edit history */
  1523. X
  1524. X#define ECULIBDIR "/usr/local/lib/ecu"
  1525. X
  1526. X#if defined(__STDC__)    /* sigh ... malloc and such types */
  1527. X#define VTYPE void
  1528. X#else
  1529. X#define VTYPE char
  1530. X#endif
  1531. X
  1532. X#if defined(M_UNIX)
  1533. X#undef M_XENIX        /* we don't want this defined in UNIX world */
  1534. X#undef NO_SELECT    /* UNIX select(S) works */
  1535. X#endif
  1536. X
  1537. X#if defined(M_I286) && !defined(NO_SELECT)
  1538. X#define NO_SELECT    /* the last 286 XENIX I saw (2.2.1) had no select */
  1539. X#endif
  1540. X
  1541. X#ifndef ECULIBDIR
  1542. X#define ECULIBDIR "/usr/lib/ecu"
  1543. X#endif
  1544. X
  1545. X#if !defined(STDIO_H_INCLUDED)
  1546. X#include <stdio.h>
  1547. X#endif
  1548. X#include <signal.h>
  1549. X#include <ctype.h>
  1550. X#include <sys/types.h>
  1551. X#include <errno.h>
  1552. X#include <sys/timeb.h>
  1553. X
  1554. X#include <memory.h>
  1555. X#include <sys/stat.h>
  1556. X#include <string.h>
  1557. X#include <fcntl.h>
  1558. X#if !defined(OMIT_TERMIO_REFERENCES)
  1559. X#include <termio.h>
  1560. X#endif
  1561. X
  1562. X#include "ecuhangup.h"
  1563. X#include "ecushm.h"
  1564. X
  1565. X/* already in ecushm.h */
  1566. X/* #if !defined(ushort) */
  1567. X/* #define ushort unsigned short */
  1568. X/* #endif */
  1569. X/* #if !defined(uchar) */
  1570. X/* #define uchar unsigned char */
  1571. X/* #endif */
  1572. X/* #if !defined(uint) */
  1573. X/* #define uint unsigned int */
  1574. X/* #endif */
  1575. X/* #if !defined(ulong) */
  1576. X/* #define ulong unsigned long */
  1577. X/* #endif */
  1578. X
  1579. X#define MALLOC_3X
  1580. X#if defined(MALLOC_3X)
  1581. X#include <malloc.h>
  1582. X#endif
  1583. X
  1584. X/* for better source line utilization, frequent use of 'fprintf' and 'stderr'
  1585. X   warrants the following */
  1586. X#define pf    printf
  1587. X#define    ff    fprintf
  1588. X#define se    stderr
  1589. X#define so    stdout
  1590. X
  1591. X#define DEFAULT_BAUD_RATE    2400
  1592. X#define DEFAULT_PARITY        0        /* 0=none, else 'e' or 'o' */
  1593. X#define TTYIN    0
  1594. X#define TTYOUT  1                /* ditto tty output */
  1595. X#define TTYERR  2                /* ditty tty output error channel */
  1596. X
  1597. X/* xbell codes */
  1598. X#if defined(M_XENIX) || defined(M_UNIX)
  1599. X#define  XBELL_DONE         1        /* octaves or morse 'd' */
  1600. X#define  XBELL_ATTENTION    2        /* morse .-.-.- ATTENTION */
  1601. X#define  XBELL_C            3        /* morse -.-. C */
  1602. X#define  XBELL_3T            4        /* --- really 'o' */
  1603. X#endif
  1604. X
  1605. X/* lopen() and related routines error codes */
  1606. X#define LOPEN_INVALID            -1        /* for invalid tty name */
  1607. X#define LOPEN_UNKPID            -2        /* unknown pid using line */
  1608. X#define LOPEN_LCKERR            -3        /* lock file open error */
  1609. X#define LOPEN_NODEV                -4        /* device does not exist */
  1610. X#define LOPEN_OPNFAIL            -5        /* could not open line */
  1611. X#define LOPEN_ALREADY            -6        /* line already open */
  1612. X#define LOPEN_ENABLED            -7        /* line enabled for login */
  1613. X#define LOPEN_ENABLED_IN_USE    -8        /* line in use by incoming login */
  1614. X#define LOPEN_DIALOUT_IN_USE    -9        /* line in use by another dial out */
  1615. X#define LOPEN_NOPTY                -10        /* pty not supported */
  1616. X
  1617. Xextern int errno;
  1618. Xextern char *sys_errlist[];
  1619. Xextern int sys_nerr;
  1620. X
  1621. X#if defined(DECLARE_LINEVARS_PUBLIC)
  1622. Xchar LLCKname[128];            /* lock file name */
  1623. X#if !defined(OMIT_TERMIO_REFERENCES)
  1624. Xstruct termio Ltermio;        /* attributes for the line to remote */
  1625. X#endif
  1626. Xuchar Lmodem_sreg[20];        /* allow for more later */
  1627. X#else
  1628. Xextern char LLCKname[];
  1629. X#if !defined(OMIT_TERMIO_REFERENCES)
  1630. Xextern struct termio Ltermio;
  1631. X#endif
  1632. Xextern uchar Lmodem_sreg[];
  1633. X#endif
  1634. X/* setcolor variables - see setcolor() */
  1635. Xextern ulong colors_current;
  1636. Xextern ulong colors_normal;
  1637. Xextern ulong colors_success;
  1638. Xextern ulong colors_alert;
  1639. Xextern ulong colors_error;
  1640. Xextern ulong colors_notify;
  1641. X
  1642. Xtypedef struct lrwt /* param to lgets_timeout in eculine.c */
  1643. X{
  1644. X    ulong to1;        /* timeout for 1st character (granularity 20) */
  1645. X    ulong to2;        /* timeout for each next char (granularity 20) */
  1646. X    int raw_flag;    /* !=0, rtn full buffer, ==0, rtn filtered hayes result */
  1647. X    char *buffer;    /* buffer to fill */
  1648. X    int bufsize;    /* size of buffer */
  1649. X    int count;        /* from proc, count rcvd */
  1650. X    char *delim;    /* ending string for lgets_timeout_or_delim */
  1651. X    int echo;        /* echo incdoming chars to screen */
  1652. X}    LRWT;
  1653. X
  1654. X#include "stdio_lint.h"
  1655. X#include "lint_args.h"
  1656. X/* vi: set tabstop=4 shiftwidth=4: */
  1657. SHAR_EOF
  1658. $TOUCH -am 1224222690 'ecu.h' &&
  1659. chmod 0644 ecu.h ||
  1660. echo 'restore of ecu.h failed'
  1661. Wc_c="`wc -c < 'ecu.h'`"
  1662. test 4010 -eq "$Wc_c" ||
  1663.     echo 'ecu.h: original size 4010, current size' "$Wc_c"
  1664. # ============= ecucmd.h ==============
  1665. echo 'x - extracting ecucmd.h (Text)'
  1666. sed 's/^X//' << 'SHAR_EOF' > 'ecucmd.h' &&
  1667. X/*+-------------------------------------------------------------------------
  1668. X    ecucmd.h -- command definitions
  1669. X    wht@n4hgf.Mt-Park.GA.US
  1670. X--------------------------------------------------------------------------*/
  1671. X/*+:EDITS:*/
  1672. X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
  1673. X
  1674. X/* interactive command tokens */
  1675. X
  1676. X#define CTax             1
  1677. X#define CTbaud           2
  1678. X#define CTbn             3
  1679. X#define CTbreak          4
  1680. X#define CTcd             5
  1681. X#define CTclrx           6
  1682. X#define CTda             7
  1683. X#define CTdial           8
  1684. X#define CTdo             9
  1685. X#define CTduplex        10
  1686. X#define CTexit          11
  1687. X#define CTfi            12
  1688. X#define CTfkey          13
  1689. X#define CTgetf          14
  1690. X#define CThangup        15
  1691. X#define CThelp          16
  1692. X#define CTllp           17
  1693. X#define CTloff          18
  1694. X#define CTlog           19
  1695. X#define CTnl            21
  1696. X#define CTnlin          22
  1697. X#define CTnlout         23
  1698. X#define CToa            24
  1699. X#define CTparity        25
  1700. X#define CTpcmd          26
  1701. X#define CTpid           27
  1702. X#define CTplog          28
  1703. X#define CTptrace        29
  1704. X#define CTputf          30
  1705. X#define CTpwd           31
  1706. X#define CTredial        32
  1707. X#define CTrev           33
  1708. X#define CTrk            34
  1709. X#define CTrs            35
  1710. X#define CTrtscts        36
  1711. X#define CTrx            37
  1712. X#define CTry            38
  1713. X#define CTrz            39
  1714. X#define CTsdname        40
  1715. X#define CTsgr           41
  1716. X#define CTsk            43
  1717. X#define CTss            44
  1718. X#define CTstat          45
  1719. X#define CTsx            46
  1720. X#define CTsy            47
  1721. X#define CTsz            48
  1722. X#define CTtime          50
  1723. X#define CTts            51
  1724. X#define CTtty           52
  1725. X#define CTxa            53
  1726. X#define CTxlog          54
  1727. X#define CTxon           55
  1728. X#if    defined(ESIO_IN_USE)
  1729. X#define CTesio          56
  1730. X#endif
  1731. X
  1732. X#define CTdummy1       120
  1733. X#define CTdummy2       121
  1734. X#define CTdummy3       122
  1735. X#define CTdummy4       123
  1736. X
  1737. X#define TOKEN_QUAN    128        /* for help package */
  1738. X
  1739. Xtypedef int (*PFI)();
  1740. X
  1741. X#if defined(HELPGEN)
  1742. X#define Z {;}
  1743. X#else
  1744. X#define Z ;
  1745. X#endif
  1746. X
  1747. Xint pcmd_baud() Z
  1748. Xint pcmd_break() Z
  1749. Xint pcmd_cd() Z
  1750. Xint pcmd_clrx() Z
  1751. Xint pcmd_cls() Z
  1752. Xint pcmd_color() Z
  1753. Xint pcmd_continue() Z
  1754. Xint pcmd_cursor() Z
  1755. Xint pcmd_delline() Z
  1756. Xint pcmd_dial() Z
  1757. Xint pcmd_do() Z
  1758. Xint pcmd_duplex() Z
  1759. Xint pcmd_echo() Z
  1760. Xint pcmd_eeol() Z
  1761. Xint pcmd_else() Z
  1762. X#if    defined(ESIO_IN_USE)
  1763. Xint pcmd_esio() Z
  1764. X#endif
  1765. Xint pcmd_exit() Z
  1766. Xint pcmd_expresp() Z
  1767. Xint pcmd_getf() Z
  1768. Xint pcmd_fchmod() Z
  1769. Xint pcmd_fclose() Z
  1770. Xint pcmd_fgetc() Z
  1771. Xint pcmd_fgets() Z
  1772. Xint pcmd_fkey() Z
  1773. Xint pcmd_flush() Z
  1774. Xint pcmd_fopen() Z
  1775. Xint pcmd_fputc() Z
  1776. Xint pcmd_fputs() Z
  1777. Xint pcmd_fread() Z
  1778. Xint pcmd_fseek() Z
  1779. Xint pcmd_fdel() Z
  1780. Xint pcmd_fwrite() Z
  1781. Xint pcmd_gosub() Z
  1782. Xint pcmd_gosubb() Z
  1783. Xint pcmd_goto() Z
  1784. Xint pcmd_gotob() Z
  1785. Xint pcmd_hangup() Z
  1786. Xint pcmd_hexdump() Z
  1787. Xint pcmd_home() Z
  1788. Xint pcmd_icolor() Z
  1789. Xint pcmd_insline() Z
  1790. Xint pcmd_ifge() Z
  1791. Xint pcmd_ifgt() Z
  1792. Xint pcmd_ifi() Z
  1793. Xint pcmd_ifle() Z
  1794. Xint pcmd_iflt() Z
  1795. Xint pcmd_ifnz() Z
  1796. Xint pcmd_ifs() Z
  1797. Xint pcmd_ifz() Z
  1798. Xint pcmd_lbreak() Z
  1799. Xint pcmd_lgets() Z
  1800. Xint pcmd_logevent() Z
  1801. Xint pcmd_lookfor() Z
  1802. X/* int pcmd_mkdir() Z */
  1803. Xint pcmd_mkvar() Z
  1804. Xint pcmd_nap() Z
  1805. Xint pcmd_parity() Z
  1806. Xint pcmd_pclose() Z
  1807. Xint pcmd_plog() Z
  1808. Xint pcmd_popen() Z
  1809. Xint pcmd_prompt() Z
  1810. Xint pcmd_ptrace() Z
  1811. Xint pcmd_putf() Z
  1812. Xint pcmd_return() Z
  1813. Xint pcmd_rk() Z
  1814. Xint pcmd_rname() Z
  1815. Xint pcmd_rs() Z
  1816. Xint pcmd_rx() Z
  1817. Xint pcmd_ry() Z
  1818. Xint pcmd_rz() Z
  1819. Xint pcmd_scrdump() Z
  1820. Xint pcmd_send() Z
  1821. Xint pcmd_set() Z
  1822. Xint pcmd_sk() Z
  1823. Xint pcmd_ss() Z
  1824. Xint pcmd_sx() Z
  1825. Xint pcmd_sy() Z
  1826. Xint pcmd_system() Z
  1827. Xint pcmd_sz() Z
  1828. Xint pcmd_vidcolor() Z
  1829. Xint pcmd_vidnorm() Z
  1830. Xint pcmd_vidrev() Z
  1831. Xint pcmd_whilei() Z
  1832. Xint pcmd_whiles() Z
  1833. Xint pcmd_xon() Z
  1834. X
  1835. X/* command classification */
  1836. X#define ccG  1    /* general command */
  1837. X#define ccC  2    /* comm command */
  1838. X#define ccT  3    /* transfer command */
  1839. X#define ccP  4    /* procedure-related command */
  1840. X
  1841. Xtypedef struct p_cmd
  1842. X{ 
  1843. X    char *cmd;        /* command string */
  1844. X    short min;        /* min chars for match (0 if not interactive) */
  1845. X    short token;    /* command number (if interactive) */
  1846. X    char *descr;    /* command description (if interactive) */
  1847. X    PFI proc;        /* procedure cmd handler (or 0) */
  1848. X    short cmdclass;    /* cc{C,G,P,X} or 0 (for help processor) */
  1849. X}    P_CMD;
  1850. X
  1851. X#if !defined(DECLARE_P_CMD)
  1852. X#if defined(NEED_P_CMD)
  1853. Xextern P_CMD icmd_cmds[];
  1854. X#endif
  1855. X#else
  1856. XP_CMD icmd_cmds[] =
  1857. X{
  1858. X    { "ax",        2,CTax,        "ascii char to hex/oct/dec",    0,            ccG},
  1859. X    { "baud",    2,CTbaud,    "set/display line baud rate",    pcmd_baud,    ccC},
  1860. X    { "bn",        2,CTbn,        "all console event alarm",        0,            ccG},
  1861. X    { "break",    2,CTbreak,    "send break to remote",            pcmd_break,    ccC},
  1862. X    { "cd",        2,CTcd,        "change current directory",        pcmd_cd,    ccG},
  1863. X    { "clrx",    2,CTclrx,    "simulate XON from remote",        pcmd_clrx,    ccC},
  1864. X    { "cls",    0,0,        "",                                pcmd_cls,    0  },
  1865. X    { "color",    0,0,        "",                                pcmd_color,    0  },
  1866. X    { "continue",0,0,        "",                                pcmd_continue,0 },
  1867. X    { "cursor",    0,0,        "",                                pcmd_cursor, 0  },
  1868. X    { "da",        2,CTda,        "decimal to ascii char",        0,          ccG},
  1869. X    { "dial",    1,CTdial,    "dial remote destination",        pcmd_dial,  ccC},
  1870. X    { "delline",0,0,        "",                                pcmd_delline,0  },
  1871. X    { "do",        2,CTdo,        "perform procedure",            pcmd_do,    ccP},
  1872. X    { "duplex",    2,CTduplex,    "set/display duplex",            pcmd_duplex,ccC},
  1873. X    { "echo",    0,0,        "",                                pcmd_echo,   0  },
  1874. X    { "eeol",    0,0,        "",                                pcmd_eeol,   0  },
  1875. X    { "else",    0,0,        "",                                pcmd_else,   0  },
  1876. X#if    defined(ESIO_IN_USE)
  1877. X    { "esio",    2,CTesio,    "ESIO/FAS driver control",        pcmd_esio,    ccC},
  1878. X#endif
  1879. X    { "exit",    2,CTexit,    "hang up, exit program",        pcmd_exit,  ccG},
  1880. X    { "expresp",0,0,        "",                                pcmd_expresp,0  },
  1881. X    { "fchmod",    0,0,        "",                                pcmd_fchmod, 0  },
  1882. X    { "fclose",    0,0,        "",                                pcmd_fclose, 0  },
  1883. X    { "fdel",    0,0,        "",                                pcmd_fdel,   0  },
  1884. X    { "fgetc",    0,0,        "",                                pcmd_fgetc,  0  },
  1885. X    { "fgets",    0,0,        "",                                pcmd_fgets,  0  },
  1886. X    { "fi",        2,CTfi,        "send text file to line",        0,          ccG},
  1887. X    { "fkey",    2,CTfkey,    "function key definition",        pcmd_fkey,  ccG},
  1888. X    { "flush",    0,0,        "",                                pcmd_flush,  0  },
  1889. X    { "fopen",    0,0,        "",                                pcmd_fopen,  0  },
  1890. X    { "fputc",    0,0,        "",                                pcmd_fputc,  0  },
  1891. X    { "fputs",    0,0,        "",                                pcmd_fputs,  0  },
  1892. X    { "fread",    0,0,        "",                                pcmd_fread,  0  },
  1893. X    { "fseek",    0,0,        "",                                pcmd_fseek,  0  },
  1894. X    { "fwrite",    0,0,        "",                                pcmd_fwrite, 0  },
  1895. X    { "getf",    0,0,        "",                                pcmd_getf,   0  },
  1896. X    { "gosub",    0,0,        "",                                pcmd_gosub,  0  },
  1897. X    { "gosubb",    0,0,        "",                                pcmd_gosubb, 0  },
  1898. X    { "goto",    0,0,        "",                                pcmd_goto,   0  },
  1899. X    { "gotob",    0,0,        "",                                pcmd_gotob,  0  },
  1900. X    { "hangup",    2,CThangup,    "hang up modem",                pcmd_hangup,ccC},
  1901. X    { "help",    2,CThelp,    "invoke help",                    0,          ccG},
  1902. X    { "hexdump",0,0,        "",                                pcmd_hexdump,0  },
  1903. X    { "home",    0,0,        "",                                pcmd_home,   0  },
  1904. X    { "icolor",    0,0,        "",                                pcmd_icolor, 0  },
  1905. X    { "ifge",    0,0,        "",                                pcmd_ifge,   0  },
  1906. X    { "ifgt",    0,0,        "",                                pcmd_ifgt,   0  },
  1907. X    { "ifi",    0,0,        "",                                pcmd_ifi,    0  },
  1908. X    { "ifle",    0,0,        "",                                pcmd_ifle,   0  },
  1909. X    { "iflt",    0,0,        "",                                pcmd_iflt,   0  },
  1910. X    { "ifnz",    0,0,        "",                                pcmd_ifnz,   0  },
  1911. X    { "ifs",    0,0,        "",                                pcmd_ifs,    0  },
  1912. X    { "ifz",    0,0,        "",                                pcmd_ifz,    0  },
  1913. X    { "insline",0,0,        "",                                pcmd_insline,0  },
  1914. X    { "lbreak",    0,0,        "",                                pcmd_lbreak, 0  },
  1915. X    { "llp",    2,CTllp,    "set session log to /dev/lp",    0,          ccG},
  1916. X    { "lgets",    0,0,        "",                                pcmd_lgets,  0  },
  1917. X    { "loff",    3,CTloff,    "turn off session logging",        0,          ccG},
  1918. X    { "log",    3,CTlog,    "session logging control",        0,          ccG},
  1919. X    { "logevent",0,0,        "",                                pcmd_logevent,0 },
  1920. X    { "lookfor",0,0,        "",                                pcmd_lookfor,0  },
  1921. X/*    { "mkdir",    3,CTmkdir,    "mkdir <dirname>",                pcmd_mkdir, ccG}, */
  1922. X    { "mkvar",    0,0,        "",                                pcmd_mkvar,  0  },
  1923. X    { "nap",    0,0,        "",                                pcmd_nap,    0  },
  1924. X    { "nl",        2,CTnl,        "display CR/LF mapping",        0,          ccC},
  1925. X    { "nlin",    3,CTnlin,    "set receive CR/LF mapping",    0,          ccC},
  1926. X    { "nlout",    3,CTnlout,    "set transmit CR/LF mapping",    0,          ccC},
  1927. X    { "oa",        2,CToa,        "octal to ascii char",            0,          ccG},
  1928. X    { "parity",    3,CTparity,    "set/display line parity",        pcmd_parity, ccC},
  1929. X    { "pclose",    0,0,        "",                                pcmd_pclose, 0  },
  1930. X    { "pcmd",    2,CTpcmd,    "execute a procedure command",    0,          ccP},
  1931. X    { "pid",    2,CTpid,    "display process ids",            0,          ccG},
  1932. X    { "plog",    2,CTplog,    "control procedure logging",    pcmd_plog,   ccP},
  1933. X    { "popen",    0,0,        "",                                pcmd_popen,  0  },
  1934. X    { "prompt",    0,0,        "",                                pcmd_prompt, 0  },
  1935. X    { "ptrace",    2,CTptrace,    "control procedure trace",        pcmd_ptrace,ccP},
  1936. X    { "putf",    0,0,        "",                                pcmd_putf,   0  },
  1937. X    { "pwd",    2,CTpwd,    "print working directory",        0,          ccG},
  1938. X    { "redial",    3,CTredial,    "redial last number",            0,          ccC},
  1939. X    { "return",    0,0,        "",                                pcmd_return, 0  },
  1940. X    { "rev",    3,CTrev,    "ecu revision/make date",        0,          ccG},
  1941. X    { "rk",        2,CTrk,        "receive via C-Kermit",            pcmd_rk,    ccT},
  1942. X    { "rname",    0,0,        "",                                pcmd_rname,  0  },
  1943. X    { "rs",        2,CTrs,        "receive via SEAlink",            pcmd_rs,    ccT},
  1944. X    { "rtscts",    3,CTrtscts,    "control RTS/CTS flow control",    0,          ccC},
  1945. X    { "rx",        2,CTrx,        "receive via XMODEM/CRC",        pcmd_rx,    ccT},
  1946. X    { "ry",        2,CTry,        "receive via YMODEM Batch",        pcmd_ry,    ccT},
  1947. X    { "rz",        2,CTrz,        "receive via ZMODEM/CRC32",        pcmd_rz,    ccT},
  1948. X    { "scrdump",0,0,        "",                                pcmd_scrdump,0  },
  1949. X    { "sdname",    3,CTsdname,    "select screen dump name",        0,          ccC},
  1950. X    { "send",    0,0,        "",                                pcmd_send,   0  },
  1951. X    { "set",    0,0,        "",                                pcmd_set,    0  },
  1952. X    { "sgr",    2,CTsgr,    "send command/get response",    0,          ccC},
  1953. X    { "sk",        2,CTsk,        "send via C-Kermit",            pcmd_sk,    ccT},
  1954. X    { "ss",        2,CTss,        "send via SEAlink",                pcmd_ss,    ccT},
  1955. X    { "stat",    2,CTstat,    "general status",                0,          ccG},
  1956. X    { "sx",        2,CTsx,        "send via XMODEM/CRC",            pcmd_sx,    ccT},
  1957. X    { "sy",        2,CTsy,        "send via YMODEM Batch",        pcmd_sy,    ccT},
  1958. X    { "system",    0,CTsy,        "",                                pcmd_system, 0  },
  1959. X    { "sz",        2,CTsz,        "send via ZMODEM/CRC32",        pcmd_sz,    ccT},
  1960. X    { "time",    2,CTtime,    "time of day",                    0,          ccG},
  1961. X    { "ts",        2,CTts,        "termio display",                0,          ccC},
  1962. X    { "tty",    2,CTtty,    "console tty name",                0,          ccG},
  1963. X    { "vidcolor",0,0,        "",                                pcmd_vidcolor,0 },
  1964. X    { "vidnorm",0,0,        "",                                pcmd_vidnorm,0  },
  1965. X    { "vidrev",    0,0,        "",                                pcmd_vidrev, 0  },
  1966. X    { "whilei",    0,0,        "",                                pcmd_whilei, 0  },
  1967. X    { "whiles",    0,0,        "",                                pcmd_whiles, 0  },
  1968. X    { "xa",        2,CTxa,        "hex to ascii char",            0,          ccG},
  1969. X    { "xlog",    2,CTxlog,    "protocol packet logging",        0,          ccT},
  1970. X    { "xon",    2,CTxon,    "control xon/xoff flow control",pcmd_xon,   ccC},
  1971. X/* these cmds are interecepted by special code in ecucmd.h and appear
  1972. X * here only so they will be picked up by the help system.
  1973. X */
  1974. X    { "!",        1,CTdummy1,    "execute shell (tty)",            0,          ccG},
  1975. X    { "$",        1,CTdummy2,    "execute shell (comm line)",    0,          ccG},
  1976. X    { "-",        1,CTdummy3,    "execute program",                0,          ccG},
  1977. X    { "?",        1,CTdummy4,    "get help",                        0,          ccG},
  1978. X    { "",        0,-1,"",0,0 }    /* list ends with token value of -1 */
  1979. X};
  1980. X#endif
  1981. X
  1982. X/* end of ecucmd.h */
  1983. X/* vi: set tabstop=4 shiftwidth=4: */
  1984. SHAR_EOF
  1985. $TOUCH -am 1224223090 'ecucmd.h' &&
  1986. chmod 0644 ecucmd.h ||
  1987. echo 'restore of ecucmd.h failed'
  1988. Wc_c="`wc -c < 'ecucmd.h'`"
  1989. test 11044 -eq "$Wc_c" ||
  1990.     echo 'ecucmd.h: original size 11044, current size' "$Wc_c"
  1991. # ============= ecuerror.h ==============
  1992. echo 'x - extracting ecuerror.h (Text)'
  1993. sed 's/^X//' << 'SHAR_EOF' > 'ecuerror.h' &&
  1994. X/*+-------------------------------------------------------------------------
  1995. X    ecuerror.h
  1996. X    wht@n4hgf.Mt-Park.GA.US
  1997. X
  1998. Xe_... values must not be changed without careful looking through code
  1999. Xerror numbers should be <= 0x7FFF to avoid problems with M_I286 versions
  2000. X--------------------------------------------------------------------------*/
  2001. X/*+:EDITS:*/
  2002. X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
  2003. X
  2004. X#define e_USER                0x1000    /* user error differentiation */
  2005. X
  2006. X/* warning errors - do not stop proc execution */
  2007. X#define e_WARNING            0x3000
  2008. X#define eProcEmpty            0x3001  /* empty procedure */
  2009. X#define eWARNING_ALREADY    0x3002  /* warning already printed */
  2010. X#define eConnectFailed        0x3003    /* failed to connect */
  2011. X#define eNoSwitches            0x3004    /* no switch(es) to command */
  2012. X
  2013. X/* fatal errors - stop proc execution */
  2014. X#define e_FATAL                0x4000
  2015. X#define eIllegalCommand        0x4003  /* invalid command */
  2016. X#define eNoMemory            0x4004  /* no more memory available */
  2017. X#define eSyntaxError        0x4005  /* syntax error */
  2018. X#define eIllegalVarNumber    0x4006  /* variable number is invalid or out of range */
  2019. X#define eIllegalVarType        0x4007  /* unrecognized variable type */
  2020. X#define eNotInteger            0x4008  /* integer expected and not found */
  2021. X#define eFATAL_ALREADY        0x4011  /* fatal to proc, info already printed */
  2022. X#define eCONINT                0x4012  /* abort due to interrupt */
  2023. X#define eInvalidFunction    0x4013  /* invalid function name */
  2024. X#define eMissingLeftParen    0x4014  /* did not find expected left paren */
  2025. X#define eMissingRightParen    0x4015  /* did not find expected right paren */
  2026. X#define eCommaExpected        0x4016  /* expected comma not found */
  2027. X#define eProcStackTooDeep    0x4017  /* procedure stack depth exceeded */
  2028. X#define eInvalidRelOp        0x4018  /* invalid relational operator */
  2029. X#define eInvalidIntOp        0x4019  /* invalid integer operator */
  2030. X#define eInvalidStrOp        0x4020  /* invalid string operator */
  2031. X#define eNotExecutingProc    0x4022  /* not executing DO at this time */
  2032. X#define eInvalidLabel        0x4023  /* invalid label */
  2033. X#define eInternalLogicError    0x4025  /* internal logic error ... whoops */
  2034. X#define eEOF                0x4026  /* end of file or read error */
  2035. X#define eBufferTooSmall        0x4027  /* string too long */
  2036. X#define eNoParameter        0x4028  /* expected parameter not found */
  2037. X#define eBadParameter        0x4029  /* bad parameter */
  2038. X#define eInvalidHexNumber    0x402A    /* invalid hexadecimal digit */
  2039. X#define eInvalidDecNumber    0x402B    /* invalid decimal digit */
  2040. X#define eInvalidOctNumber    0x402C    /* invalid octal digit */
  2041. X#define eInteractiveCmd        0x402E    /* interactive command */
  2042. X#define eNoLineAttached        0x402F    /* no line (modem) attached */
  2043. X#define eBadFileNumber        0x4030    /* file number out of range */
  2044. X#define eNotImplemented        0x4031    /* not implemented */
  2045. X#define eDuplicateMatch        0x4032    /* more than one condition matches */
  2046. X#define eColonExpected        0x4033  /* expected colon not found */
  2047. X#define eLabelInvalidHere    0x4034  /* label not allowed on this statement */
  2048. X#define eNoCloseFrame        0x4035  /* missing '}' for '{' */
  2049. X#define eNoFrame            0x4036  /* missing command or command group after 'while' or 'if' */
  2050. X#define eMissingCommand        0x4037  /* expected command not found */
  2051. X#define eBreakCommand        0x4038  /* 'break' outside 'while' */
  2052. X#define eContinueCommand    0x4039  /* 'continue' outside 'while' */
  2053. X#define eElseCommand        0x403A  /* 'else' without matching 'if' */
  2054. X#define eInvalidVarName        0x403B  /* invalid variable name */
  2055. X#define eNoSuchVariable        0x403C  /* variable by this name not defined */
  2056. X#define eInvalidLogicOp        0x403D  /* invalid logical operator */
  2057. X#define eExpectRespondFail    0x403E  /* expect-respond failed */
  2058. X
  2059. X/* DO attention getter */
  2060. X#define e_ProcAttn            0x7000
  2061. X#define eProcAttn_GOTO        0x7000  /* GOTO detected */
  2062. X#define eProcAttn_GOTOB        0x7001  /* GOTOB detected */
  2063. X#define eProcAttn_RETURN    0x7002  /* RETURN detected */
  2064. X#define eProcAttn_ESCAPE    0x7003  /* ESCAPE detected */
  2065. X#define eProcAttn_Interrupt    0x7004  /* procedure interrupted */
  2066. X
  2067. SHAR_EOF
  2068. $TOUCH -am 1224222890 'ecuerror.h' &&
  2069. chmod 0644 ecuerror.h ||
  2070. echo 'restore of ecuerror.h failed'
  2071. Wc_c="`wc -c < 'ecuerror.h'`"
  2072. test 3939 -eq "$Wc_c" ||
  2073.     echo 'ecuerror.h: original size 3939, current size' "$Wc_c"
  2074. # ============= ecufkey.h ==============
  2075. echo 'x - extracting ecufkey.h (Text)'
  2076. sed 's/^X//' << 'SHAR_EOF' > 'ecufkey.h' &&
  2077. X/*+-------------------------------------------------------------------------
  2078. X    ecufkey.h -- AT XENIX/UNIX function key phrases
  2079. X    wht@n4hgf.Mt-Park.GA.US
  2080. X--------------------------------------------------------------------------*/
  2081. X/*+:EDITS:*/
  2082. X/*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
  2083. X
  2084. X/*
  2085. X * indices to key mapping tables
  2086. X *
  2087. X * these are close to being magic numbers - don't change w/o looking
  2088. X * at KDEk_to_XF in ecutty.c
  2089. X */
  2090. X#define KDEk_F1        0
  2091. X#define KDEk_F2        1
  2092. X#define KDEk_F3        2
  2093. X#define KDEk_F4        3
  2094. X#define KDEk_F5        4
  2095. X#define KDEk_F6        5
  2096. X#define KDEk_F7        6
  2097. X#define KDEk_F8        7
  2098. X#define KDEk_F9        8
  2099. X#define KDEk_F10    9
  2100. X#define KDEk_F11    10
  2101. X#define KDEk_F12    11
  2102. X#define KDEk_CUU    12
  2103. X#define KDEk_CUD    13
  2104. X#define KDEk_CUL    14
  2105. X#define KDEk_CUR    15
  2106. X#define KDEk_CU5    16
  2107. X#define KDEk_PGUP    17
  2108. X#define KDEk_PGDN    18
  2109. X#define KDEk_END    19
  2110. X#define KDEk_INS    20
  2111. X#define KDEk_BKTAB    21
  2112. X#define KDEk_HOME    22
  2113. X
  2114. X#define KDE_COUNT    23
  2115. X
  2116. X#define KDE_LOGICAL_MAX        12
  2117. X#define KDE_OUTSTR_MAX        10
  2118. X
  2119. X#define KDEt_NAME        1
  2120. X#define KDEt_ENTRY        2
  2121. X#define KDEt_COMMENT    3
  2122. X#define KDEt_EOF        4
  2123. X
  2124. Xtypedef struct kde
  2125. X{
  2126. X    char logical[KDE_LOGICAL_MAX];
  2127. X    uchar KDEt;
  2128. X    char count;
  2129. X    char str[KDE_OUTSTR_MAX];
  2130. X}    KDE;
  2131. X
  2132. X/* when an count is not a count but an action: */
  2133. X#define KACT_COMMAND            -1
  2134. X#define KACT_LOCAL_SHELL        -2
  2135. X#define KACT_REDISPLAY            -3
  2136. X
  2137. Xtypedef struct XF_KDE_NAME
  2138. X{
  2139. X    uchar xf;
  2140. X    char kde;
  2141. X    char *name;
  2142. X}    XF_KDE_NAME;
  2143. X
  2144. X/* vi: set tabstop=4 shiftwidth=4: */
  2145. X/* end of ecufkey.h */
  2146. SHAR_EOF
  2147. $TOUCH -am 1224222890 'ecufkey.h' &&
  2148. chmod 0644 ecufkey.h ||
  2149. echo 'restore of ecufkey.h failed'
  2150. Wc_c="`wc -c < 'ecufkey.h'`"
  2151. test 1457 -eq "$Wc_c" ||
  2152.     echo 'ecufkey.h: original size 1457, current size' "$Wc_c"
  2153. true || echo 'restore of ecufork.h failed'
  2154. echo End of part 15, continue with part 16
  2155. exit 0
  2156. --------------------------------------------------------------------
  2157. Warren Tucker, TuckerWare emory!n4hgf!wht or wht@n4hgf.Mt-Park.GA.US
  2158. Hacker Extraordinaire  d' async PADs,  pods,  proteins and protocols
  2159.  
  2160. exit 0 # Just in case...
  2161. -- 
  2162. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  2163. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  2164. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  2165. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  2166.