home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume24 / zsh2.1 / part11 < prev    next >
Text File  |  1991-10-26  |  49KB  |  1,968 lines

  1. Newsgroups: comp.sources.misc
  2. From: pfalstad@phoenix.Princeton.EDU (Paul Falstad)
  3. Subject:  v24i011:  zsh2.1 - The Z shell, Part11/19
  4. Message-ID: <1991Oct26.014900.19444@sparky.imd.sterling.com>
  5. X-Md4-Signature: aa72aea0dc9080f5596b02ad177ca6ce
  6. Date: Sat, 26 Oct 1991 01:49:00 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: pfalstad@phoenix.Princeton.EDU (Paul Falstad)
  10. Posting-number: Volume 24, Issue 11
  11. Archive-name: zsh2.1/part11
  12. Environment: BSD
  13. Supersedes: zsh2.00: Volume 18, Issue 84-98
  14.  
  15. #!/bin/sh
  16. # this is zshar.11 (part 11 of zsh2.1.0)
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file zsh2.1/src/utils.c continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 11; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test ! -f _shar_wnt_.tmp; then
  33.     echo 'x - still skipping zsh2.1/src/utils.c'
  34. else
  35. echo 'x - continuing file zsh2.1/src/utils.c'
  36. sed 's/^X//' << 'SHAR_EOF' >> 'zsh2.1/src/utils.c' &&
  37. XLklist l;VFunc func;
  38. X{
  39. XLklist ret;
  40. XLknode node;
  41. X
  42. X    ret = newlist();
  43. X    for (node = firstnode(l); node; incnode(node))
  44. X        addnode(ret,func(getdata(node)));
  45. X    return ret;
  46. X}
  47. X
  48. Xchar **mkarray(s) /**/
  49. Xchar *s;
  50. X{
  51. Xchar **t = (char **) zalloc((s) ? (2*sizeof s) : (sizeof s));
  52. X
  53. X    if (*t = s)
  54. X        t[1] = NULL;
  55. X    return t;
  56. X}
  57. X
  58. Xvoid feep() /**/
  59. X{
  60. X    if (unset(NOBEEP))
  61. X        write(2,"\07",1);
  62. X}
  63. X
  64. Xvoid freearray(s) /**/
  65. Xchar **s;
  66. X{
  67. Xchar **t = s;
  68. X
  69. X    while (*s)
  70. X        free(*s++);
  71. X    free(t);
  72. X}
  73. X
  74. Xint equalsplit(s,t) /**/
  75. Xchar *s;char **t;
  76. X{
  77. X    for (; *s && *s != '='; s++);
  78. X    if (*s == '=')
  79. X        {
  80. X        *s++ = '\0';
  81. X        *t = s;
  82. X        return 1;
  83. X        }
  84. X    return 0;
  85. X}
  86. X
  87. X/* see if the right side of a list is trivial */
  88. X
  89. Xvoid simplifyright(l) /**/
  90. XList l;
  91. X{
  92. XCmd c;
  93. X
  94. X    if (!l->right)
  95. X        return;
  96. X    if (l->right->right || l->right->left->right ||
  97. X            l->right->left->left->right)
  98. X        return;
  99. X    c = l->left->left->left;
  100. X    if (c->type != SIMPLE || full(c->args) || full(c->redir)
  101. X            || full(c->vars))
  102. X        return;
  103. X    l->right = NULL;
  104. X    return;
  105. X}
  106. X
  107. X/* initialize the ztypes table */
  108. X
  109. Xvoid inittyptab() /**/
  110. X{
  111. Xint t0;
  112. Xchar *s;
  113. X
  114. X    for (t0 = 0; t0 != 256; t0++)
  115. X        typtab[t0] = 0;
  116. X    for (t0 = 0; t0 != 32; t0++)
  117. X        typtab[t0] = typtab[t0+128] = ICNTRL;
  118. X    typtab[127] = ICNTRL;
  119. X    for (t0 = '0'; t0 <= '9'; t0++)
  120. X        typtab[t0] = IDIGIT|IALNUM|IWORD|IIDENT|IUSER;
  121. X    for (t0 = 'a'; t0 <= 'z'; t0++)
  122. X        typtab[t0] = typtab[t0-'a'+'A'] = IALPHA|IALNUM|IIDENT|IUSER|IWORD;
  123. X    for (t0 = 0240; t0 != 0400; t0++)
  124. X        typtab[t0] = IALPHA|IALNUM|IIDENT|IUSER|IWORD;
  125. X    typtab['_'] = IIDENT|IUSER;
  126. X    typtab['-'] = IUSER;
  127. X    typtab[' '] |= IBLANK|INBLANK;
  128. X    typtab['\t'] |= IBLANK|INBLANK;
  129. X    typtab['\n'] |= INBLANK;
  130. X    for (t0 = (int) (unsigned char) ALPOP; t0 <= (int) (unsigned char) Nularg;
  131. X            t0++)
  132. X        typtab[t0] |= ITOK;
  133. X    for (s = ifs; *s; s++)
  134. X        typtab[(int) (unsigned char) *s] |=
  135. X            (*s == '\n') ? ISEP|INBLANK : ISEP|IBLANK|INBLANK;
  136. X    for (s = wordchars; *s; s++)
  137. X        typtab[(int) (unsigned char) *s] |= IWORD;
  138. X    for (s = SPECCHARS; *s; s++)
  139. X        typtab[(int) (unsigned char) *s] |= ISPECIAL;
  140. X}
  141. X
  142. Xchar **arrdup(s) /**/
  143. Xchar **s;
  144. X{
  145. Xchar **x,**y;
  146. X
  147. X    y = x = (char **) ncalloc(sizeof(char *)*(arrlen(s)+1));
  148. X    while (*x++ = strdup(*s++));
  149. X    return y;
  150. X}
  151. X
  152. X/* next few functions stolen (with changes) from Kernighan & Pike */
  153. X/* "The UNIX Programming Environment" (w/o permission) */
  154. X
  155. Xchar *spname (oldname) /**/
  156. Xchar *oldname;
  157. X{
  158. X    char *p,guess[MAXPATHLEN+1],best[MAXPATHLEN+1];
  159. X    static char newname[MAXPATHLEN+1];
  160. X    char *new = newname, *old = oldname;
  161. X
  162. X    for (;;)
  163. X    {
  164. X        while (*old == '/')
  165. X            *new++ = *old++;
  166. X        *new = '\0';
  167. X        if (*old == '\0')
  168. X            return newname;
  169. X        p = guess;
  170. X        for (; *old != '/' && *old != '\0'; old++)
  171. X            if (p < guess+MAXPATHLEN)
  172. X                *p++ = *old;
  173. X        *p = '\0';
  174. X        if (mindist(newname,guess,best) >= 3)
  175. X            return oldname;
  176. X        for (p = best; *new = *p++; )
  177. X            new++;
  178. X    }
  179. X}
  180. X
  181. Xint mindist(dir,guess,best) /**/
  182. Xchar *dir;char *guess;char *best;
  183. X{
  184. X    int d,nd;
  185. X    DIR *dd;
  186. X    struct direct *de;
  187. X
  188. X    if (dir[0] == '\0')
  189. X        dir = ".";
  190. X    d = 100;
  191. X    if (!(dd = opendir(dir)))
  192. X        return d;
  193. X    while (de = readdir(dd))
  194. X    {
  195. X        nd = spdist(de->d_name,guess,strlen(guess)/4+1);
  196. X        if (nd <= d)
  197. X            {
  198. X            strcpy(best,de->d_name);
  199. X            d = nd;
  200. X            if (d == 0)
  201. X                break;
  202. X            }
  203. X    }
  204. X    closedir(dd);
  205. X    return d;
  206. X}
  207. X
  208. Xint spdist(s,t,thresh) /**/
  209. Xchar *s;char *t;int thresh;
  210. X{
  211. Xchar *p,*q;
  212. Xchar *keymap =
  213. X"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
  214. X\t1234567890-=\t\
  215. X\tqwertyuiop[]\t\
  216. X\tasdfghjkl;'\n\t\
  217. X\tzxcvbnm,./\t\t\t\
  218. X\n\n\n\n\n\n\n\n\n\n\n\n\n\n\
  219. X\t!@#$%^&*()_+\t\
  220. X\tQWERTYUIOP{}\t\
  221. X\tASDFGHJKL:\"\n\t\
  222. X\tZXCVBNM<>?\n\n\t\
  223. X\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
  224. X
  225. X    if (!strcmp(s,t))
  226. X        return 0;
  227. X    /* any number of upper/lower mistakes allowed (dist = 1) */
  228. X    for (p = s, q = t; *p && tulower(*p) == tulower(*q); p++,q++);
  229. X    if (!*p && !*q)
  230. X        return 1;
  231. X    if (!thresh)
  232. X        return 200;
  233. X    for (p = s, q = t; *p && *q; p++,q++)
  234. X        if (*p == *q) continue;    /* don't consider "aa" transposed, ash */
  235. X        else if (p[1] == q[0] && q[1] == p[0])  /* transpositions */
  236. X            return spdist(p+2,q+2,thresh-1)+1;
  237. X        else if (p[1] == q[0])    /* missing letter */
  238. X            return spdist(p+1,q+0,thresh-1)+2;
  239. X        else if (p[0] == q[1])    /* missing letter */
  240. X            return spdist(p+0,q+1,thresh-1)+2;
  241. X        else if (*p != *q)
  242. X            break;
  243. X    if ((!*p && strlen(q) == 1) || (!*q && strlen(p) == 1))
  244. X        return 2;
  245. X    for (p = s, q = t; *p && *q; p++,q++)
  246. X        if (p[0] != q[0] && p[1] == q[1])
  247. X            {
  248. X            int t0;
  249. X            char *z;
  250. X
  251. X            /* mistyped letter */
  252. X
  253. X            if (!(z = strchr(keymap,p[0])) || *z == '\n' || *z == '\t')
  254. X                return spdist(p+1,q+1,thresh-1)+1;
  255. X            t0 = z-keymap;
  256. X            if (*q == keymap[t0-15] || *q == keymap[t0-14] ||
  257. X                    *q == keymap[t0-13] ||
  258. X                    *q == keymap[t0-1] || *q == keymap[t0+1] ||
  259. X                    *q == keymap[t0+13] || *q == keymap[t0+14] ||
  260. X                    *q == keymap[t0+15])
  261. X                return spdist(p+1,q+1,thresh-1)+2;
  262. X            return 200;
  263. X            }
  264. X        else if (*p != *q)
  265. X            break;
  266. X    return 200;
  267. X}
  268. X
  269. Xchar *zgetenv(s) /**/
  270. Xchar *s;
  271. X{
  272. Xchar **av,*p,*q;
  273. X
  274. X    for (av = environ; *av; av++)
  275. X        {
  276. X        for (p = *av, q = s; *p && *p != '=' && *q && *p == *q; p++,q++);
  277. X        if (*p == '=' && !*q)
  278. X            return p+1;
  279. X        }
  280. X    return NULL;
  281. X}
  282. X
  283. Xint tulower(c) /**/
  284. Xint c;
  285. X{
  286. X    return (c >= 'A' && c <= 'Z') ? c-'A'+'a' : c;
  287. X}
  288. X
  289. Xint tuupper(c) /**/
  290. Xint c;
  291. X{
  292. X    return (c >= 'a' && c <= 'z') ? c-'a'+'A' : c;
  293. X}
  294. X
  295. X#ifdef SYSV
  296. X#include <sys/utsname.h>
  297. X
  298. Xint gethostname(nameptr, maxlength)
  299. Xchar *nameptr;
  300. Xint maxlength;
  301. X{
  302. Xstruct utsname *name;
  303. Xint result;
  304. X
  305. X    result = uname(name);
  306. X    if (result >= 0) {
  307. X        strcpy(nameptr,name->sysname);
  308. X        return 0;
  309. X    } else return -1;
  310. X}
  311. X#endif
  312. SHAR_EOF
  313. echo 'File zsh2.1/src/utils.c is complete' &&
  314. chmod 0644 zsh2.1/src/utils.c ||
  315. echo 'restore of zsh2.1/src/utils.c failed'
  316. Wc_c="`wc -c < 'zsh2.1/src/utils.c'`"
  317. test 30675 -eq "$Wc_c" ||
  318.     echo 'zsh2.1/src/utils.c: original size 30675, current size' "$Wc_c"
  319. rm -f _shar_wnt_.tmp
  320. fi
  321. # ============= zsh2.1/src/watch.c ==============
  322. if test -f 'zsh2.1/src/watch.c' -a X"$1" != X"-c"; then
  323.     echo 'x - skipping zsh2.1/src/watch.c (File already exists)'
  324.     rm -f _shar_wnt_.tmp
  325. else
  326. > _shar_wnt_.tmp
  327. echo 'x - extracting zsh2.1/src/watch.c (Text)'
  328. sed 's/^X//' << 'SHAR_EOF' > 'zsh2.1/src/watch.c' &&
  329. X/*
  330. X
  331. X    watch.c - login/logout watching
  332. X
  333. X    This file is part of zsh, the Z shell.
  334. X
  335. X    zsh is free software; no one can prevent you from reading the source
  336. X   code, or giving it to someone else.
  337. X
  338. X   This file is copyrighted under the GNU General Public License, which
  339. X   can be found in the file called COPYING.
  340. X
  341. X   Copyright (C) 1990, 1991 Paul Falstad
  342. X
  343. X   zsh is distributed in the hope that it will be useful, but
  344. X   WITHOUT ANY WARRANTY.  No author or distributor accepts
  345. X   responsibility to anyone for the consequences of using it or for
  346. X   whether it serves any particular purpose or works at all, unless he
  347. X   says so in writing.  Refer to the GNU General Public License
  348. X   for full details.
  349. X
  350. X   Everyone is granted permission to copy, modify and redistribute
  351. X   zsh, but only under the conditions described in the GNU General Public
  352. X   License.   A copy of this license is supposed to have been given to you
  353. X   along with zsh so you can know your rights and responsibilities.
  354. X   It should be in a file named COPYING.
  355. X
  356. X   Among other things, the copyright notice and this notice must be
  357. X   preserved on all copies.
  358. X
  359. X*/
  360. X
  361. X#include "zsh.h"
  362. X#include <utmp.h>
  363. X
  364. Xstatic int wtabsz;
  365. Xstruct utmp *wtab;
  366. X
  367. X/* get the time of login/logout for WATCH */
  368. X
  369. Xtime_t getlogtime(u,inout) /**/
  370. Xstruct utmp *u;int inout;
  371. X{
  372. XFILE *in;
  373. Xstruct utmp uu;
  374. Xint first = 1;
  375. X
  376. X    if (inout)
  377. X        return u->ut_time;
  378. X    if (!(in = fopen(WTMP_FILE,"r")))
  379. X        return time(NULL);
  380. X    fseek(in,0,2);
  381. X    do
  382. X        {
  383. X        if (fseek(in,((first) ? -1 : -2)*sizeof(struct utmp),1))
  384. X            {
  385. X            fclose(in);
  386. X            return time(NULL);
  387. X            }
  388. X        first = 0;
  389. X        if (!fread(&uu,sizeof(struct utmp),1,in))
  390. X            {
  391. X            fclose(in);
  392. X            return time(NULL);
  393. X            }
  394. X        if (uu.ut_time < lastwatch)
  395. X            {
  396. X            fclose(in);
  397. X            return time(NULL);
  398. X            }
  399. X        }
  400. X    while (memcmp(&uu,u,sizeof(struct utmp)));
  401. X    do
  402. X        if (!fread(&uu,sizeof(struct utmp),1,in))
  403. X            {
  404. X            fclose(in);
  405. X            return time(NULL);
  406. X            }
  407. X    while (strncmp(uu.ut_line,u->ut_line,8));
  408. X    fclose(in);
  409. X    return uu.ut_time;
  410. X}
  411. X
  412. X/* print a login/logout event */
  413. X
  414. Xvoid watchlog2(inout,u,fmt) /**/
  415. Xint inout;struct utmp *u;char *fmt;
  416. X{
  417. Xchar *p,buf[40],*bf;
  418. Xint i;
  419. Xtime_t timet;
  420. Xstruct tm *tm = NULL;
  421. X
  422. X    while (*fmt)
  423. X        if (*fmt != '%')
  424. X            putchar(*fmt++);
  425. X        else
  426. X            {
  427. X            fmt++;
  428. X            switch(*fmt++)
  429. X                {
  430. X                case 'n':
  431. X                    printf("%.*s",8,u->ut_name);
  432. X                    break;
  433. X                case 'a':
  434. X                    printf("%s",(!inout) ? "logged off" : "logged on");
  435. X                    break;
  436. X                case 'l':
  437. X                    if (u->ut_line[0] == 't')
  438. X                        printf("%.*s",5,u->ut_line+3);
  439. X                    else
  440. X                        printf("%.*s",8,u->ut_line);
  441. X                    break;
  442. X#ifdef UTMP_HOST
  443. X                case 'm':
  444. X                    for (p = u->ut_host,i = 16; i && *p;i--,p++)
  445. X                        {
  446. X                        if (*p == '.' && !idigit(p[1]))
  447. X                            break;
  448. X                        putchar(*p);
  449. X                        }
  450. X                    break;
  451. X                case 'M':
  452. X                    printf("%.*s",16,u->ut_host);
  453. X                    break;
  454. X#endif
  455. X                case 't':
  456. X                case '@':
  457. X                    timet = getlogtime(u,inout);
  458. X                    tm = localtime(&timet);
  459. X                    ztrftime(buf,40,"%l:%M%p",tm);
  460. X                    printf("%s",(*buf == ' ') ? buf+1 : buf);
  461. X                    break;
  462. X                case 'T':
  463. X                    timet = getlogtime(u,inout);
  464. X                    tm = localtime(&timet);
  465. X                    ztrftime(buf,40,"%k:%M",tm);
  466. X                    printf("%s",buf);
  467. X                    break;
  468. X                case 'w':
  469. X                    timet = getlogtime(u,inout);
  470. X                    tm = localtime(&timet);
  471. X                    ztrftime(buf,40,"%a %e",tm);
  472. X                    printf("%s",buf);
  473. X                    break;
  474. X                case 'W':
  475. X                    timet = getlogtime(u,inout);
  476. X                    tm = localtime(&timet);
  477. X                    ztrftime(buf,40,"%m/%d/%y",tm);
  478. X                    printf("%s",buf);
  479. X                    break;
  480. X                case 'D':
  481. X                    timet = getlogtime(u,inout);
  482. X                    tm = localtime(&timet);
  483. X                    ztrftime(buf,40,"%y-%m-%d",tm);
  484. X                    printf("%s",buf);
  485. X                    break;
  486. X                case '%':
  487. X                    putchar('%');
  488. X                    break;
  489. X                case 'S':
  490. X                    bf = buf;
  491. X                    if (tgetstr("so",&bf))
  492. X                        fputs(buf,stdout);
  493. X                    break;
  494. X                case 's':
  495. X                    bf = buf;
  496. X                    if (tgetstr("se",&bf))
  497. X                        fputs(buf,stdout);
  498. X                    break;
  499. X                case 'B':
  500. X                    bf = buf;
  501. X                    if (tgetstr("md",&bf))
  502. X                        fputs(buf,stdout);
  503. X                    break;
  504. X                case 'b':
  505. X                    bf = buf;
  506. X                    if (tgetstr("me",&bf))
  507. X                        fputs(buf,stdout);
  508. X                    break;
  509. X                case 'U':
  510. X                    bf = buf;
  511. X                    if (tgetstr("us",&bf))
  512. X                        fputs(buf,stdout);
  513. X                    break;
  514. X                case 'u':
  515. X                    bf = buf;
  516. X                    if (tgetstr("ue",&bf))
  517. X                        fputs(buf,stdout);
  518. X                    break;
  519. X                default:
  520. X                    putchar('%');
  521. X                    putchar(fmt[-1]);
  522. X                    break;
  523. X                }
  524. X            }
  525. X    putchar('\n');
  526. X}
  527. X
  528. X/* check the List for login/logouts */
  529. X
  530. Xvoid watchlog(inout,u,w,fmt) /**/
  531. Xint inout;struct utmp *u;char **w;char *fmt;
  532. X{
  533. Xchar *v,*vv,sav;
  534. Xint bad;
  535. X
  536. X    if (*w && !strcmp(*w,"all"))
  537. X        {
  538. X        watchlog2(inout,u,fmt);
  539. X        return;
  540. X        }
  541. X    for (; *w; w++)
  542. X        {
  543. X        bad = 0;
  544. X        v = *w;
  545. X        if (*v != '@' && *v != '%')
  546. X            {
  547. X            for (vv = v; *vv && *vv != '@' && *vv != '%'; vv++);
  548. X            sav = *vv;
  549. X            *vv = '\0';
  550. X            if (strncmp(u->ut_name,v,8))
  551. X                bad = 1;
  552. X            *vv = sav;
  553. X            v = vv;
  554. X            }
  555. X        for (;;)
  556. X            if (*v == '%')
  557. X                {
  558. X                for (vv = ++v; *vv && *vv != '@'; vv++);
  559. X                sav = *vv;
  560. X                *vv = '\0';
  561. X                if (strncmp(u->ut_line,v,8))
  562. X                    bad = 1;
  563. X                *vv = sav;
  564. X                v = vv;
  565. X                }
  566. X#ifdef UTMP_HOST
  567. X            else if (*v == '@')
  568. X                {
  569. X                for (vv = ++v; *vv && *vv != '%'; vv++);
  570. X                sav = *vv;
  571. X                *vv = '\0';
  572. X                if (strncmp(u->ut_host,v,strlen(v)))
  573. X                    bad = 1;
  574. X                *vv = sav;
  575. X                v = vv;
  576. X                }
  577. X#endif
  578. X            else
  579. X                break;
  580. X        if (!bad)
  581. X            {
  582. X            watchlog2(inout,u,fmt);
  583. X            return;
  584. X            }
  585. X        }
  586. X}
  587. X
  588. X/* compare 2 utmp entries */
  589. X
  590. Xint ucmp(u,v) /**/
  591. Xstruct utmp *u;struct utmp *v;
  592. X{
  593. X    if (u->ut_time == v->ut_time)
  594. X        return strncmp(u->ut_line,v->ut_line,8);
  595. X    return u->ut_time - v->ut_time;
  596. X}
  597. X
  598. X/* initialize the user List */
  599. X
  600. Xvoid readwtab() /**/
  601. X{
  602. Xstruct utmp *uptr;
  603. Xint wtabmax = 32;
  604. XFILE *in;
  605. X
  606. X    wtabsz = 0;
  607. X    uptr = wtab = (struct utmp *) zalloc(wtabmax*sizeof(struct utmp));
  608. X    in = fopen(UTMP_FILE,"r");
  609. X    while (fread(uptr,sizeof(struct utmp),1,in))
  610. X#ifdef USER_PROCESS
  611. X        if (uptr->ut_type == USER_PROCESS)
  612. X#else
  613. X        if (uptr->ut_name[0])
  614. X#endif
  615. X            {
  616. X            uptr++;
  617. X            if (++wtabsz == wtabmax)
  618. X                uptr = (wtab = (struct utmp *) realloc((vptr) wtab,(wtabmax*=2)*
  619. X                    sizeof(struct utmp)))+wtabsz;
  620. X            }
  621. X    fclose(in);
  622. X    if (wtabsz)
  623. X        qsort(wtab,wtabsz,sizeof(struct utmp),ucmp);
  624. X}
  625. X
  626. X/* check for login/logout events; executed before each prompt
  627. X    if WATCH is set */
  628. X
  629. Xvoid dowatch() /**/
  630. X{
  631. Xchar **s = watch;
  632. Xchar *fmt = (watchfmt) ? watchfmt : DEFWATCHFMT;
  633. XFILE *in;
  634. Xint utabsz = 0,utabmax = wtabsz+4,uct,wct;
  635. Xstruct utmp *utab,*uptr,*wptr;
  636. X
  637. X    holdintr();
  638. X    if (!fmt)
  639. X        fmt = "%n has %a %l from %m.";
  640. X    if (!wtab)
  641. X        {
  642. X        readwtab();
  643. X        noholdintr();
  644. X        return;
  645. X        }
  646. X    uptr = utab = (struct utmp *) zalloc(utabmax*sizeof(struct utmp));
  647. X    if (!(in = fopen(UTMP_FILE,"r")))
  648. X        {
  649. X        free(utab);
  650. X        return;
  651. X        }
  652. X    while (fread(uptr,sizeof *uptr,1,in))
  653. X#ifdef USER_PROCESS
  654. X        if (uptr->ut_type == USER_PROCESS)
  655. X#else
  656. X        if (uptr->ut_name[0])
  657. X#endif
  658. X            {
  659. X            uptr++;
  660. X            if (++utabsz == utabmax)
  661. X                uptr = (utab = (struct utmp *) realloc((vptr) utab,(utabmax*=2)*
  662. X                    sizeof(struct utmp)))+utabsz;
  663. X            }
  664. X    fclose(in);
  665. X    noholdintr();
  666. X    if (errflag)
  667. X        {
  668. X        free(utab);
  669. X        return;
  670. X        }
  671. X    if (utabsz)
  672. X        qsort(utab,utabsz,sizeof(struct utmp),ucmp);
  673. X
  674. X    wct = wtabsz; uct = utabsz;
  675. X    uptr = utab; wptr = wtab;
  676. X    if (errflag)
  677. X        {
  678. X        free(utab);
  679. X        return;
  680. X        }
  681. X    while ((uct || wct) && !errflag)
  682. X        if (!uct || (wct && ucmp(uptr,wptr) > 0))
  683. X            wct--,watchlog(0,wptr++,s,fmt);
  684. X        else if (!wct || (uct && ucmp(uptr,wptr) < 0))
  685. X            uct--,watchlog(1,uptr++,s,fmt);
  686. X        else
  687. X            uptr++,wptr++,wct--,uct--;
  688. X    free(wtab);
  689. X    wtab = utab;
  690. X    wtabsz = utabsz;
  691. X    fflush(stdout);
  692. X}
  693. X
  694. Xint bin_log(nam,argv,ops,func) /**/
  695. Xchar *nam;char **argv;char *ops;int func;
  696. X{
  697. X    if (!watch)
  698. X        return 1;
  699. X    if (wtab)
  700. X        free(wtab);
  701. X    wtab = (struct utmp *) zalloc(1);
  702. X    wtabsz = 0;
  703. X    dowatch();
  704. X    return 0;
  705. X}
  706. X
  707. SHAR_EOF
  708. chmod 0644 zsh2.1/src/watch.c ||
  709. echo 'restore of zsh2.1/src/watch.c failed'
  710. Wc_c="`wc -c < 'zsh2.1/src/watch.c'`"
  711. test 7508 -eq "$Wc_c" ||
  712.     echo 'zsh2.1/src/watch.c: original size 7508, current size' "$Wc_c"
  713. rm -f _shar_wnt_.tmp
  714. fi
  715. # ============= zsh2.1/src/zle.h ==============
  716. if test -f 'zsh2.1/src/zle.h' -a X"$1" != X"-c"; then
  717.     echo 'x - skipping zsh2.1/src/zle.h (File already exists)'
  718.     rm -f _shar_wnt_.tmp
  719. else
  720. > _shar_wnt_.tmp
  721. echo 'x - extracting zsh2.1/src/zle.h (Text)'
  722. sed 's/^X//' << 'SHAR_EOF' > 'zsh2.1/src/zle.h' &&
  723. X/*
  724. X
  725. X    zle.h - header file for line editor
  726. X
  727. X    This file is part of zsh, the Z shell.
  728. X
  729. X    zsh is free software; no one can prevent you from reading the source
  730. X   code, or giving it to someone else.
  731. X
  732. X   This file is copyrighted under the GNU General Public License, which
  733. X   can be found in the file called COPYING.
  734. X
  735. X   Copyright (C) 1990, 1991 Paul Falstad
  736. X
  737. X   zsh is distributed in the hope that it will be useful, but
  738. X   WITHOUT ANY WARRANTY.  No author or distributor accepts
  739. X   responsibility to anyone for the consequences of using it or for
  740. X   whether it serves any particular purpose or works at all, unless he
  741. X   says so in writing.  Refer to the GNU General Public License
  742. X   for full details.
  743. X
  744. X   Everyone is granted permission to copy, modify and redistribute
  745. X   zsh, but only under the conditions described in the GNU General Public
  746. X   License.   A copy of this license is supposed to have been given to you
  747. X   along with zsh so you can know your rights and responsibilities.
  748. X   It should be in a file named COPYING.
  749. X
  750. X   Among other things, the copyright notice and this notice must be
  751. X   preserved on all copies.
  752. X
  753. X*/
  754. X
  755. X#ifdef ZLEGLOBALS
  756. X#define ZLEXTERN
  757. X#else
  758. X#define ZLEXTERN extern
  759. X#endif
  760. X
  761. X#ifdef ZLE
  762. X
  763. X/* cursor position */
  764. XZLEXTERN int cs;
  765. X
  766. X/* line length */
  767. XZLEXTERN int ll;
  768. X
  769. X/* size of line buffer */
  770. XZLEXTERN int linesz;
  771. X
  772. X/* location of mark */
  773. XZLEXTERN int mark;
  774. X
  775. X/* last character pressed */
  776. XZLEXTERN int c;
  777. X
  778. X/* the z_ binding id for this key */
  779. XZLEXTERN int bindk;
  780. X
  781. X/* command argument */
  782. XZLEXTERN int mult;
  783. X
  784. X/* insert mode/overwrite mode flag */
  785. XZLEXTERN int insmode;
  786. X
  787. X/* cost of last update */
  788. XZLEXTERN int cost;
  789. X
  790. X/* flags associated with last command */
  791. XZLEXTERN int lastcmd;
  792. X
  793. X/* column position before last LINEMOVE movement */
  794. XZLEXTERN int lastcol;
  795. X
  796. X/* != 0 if we're getting a vi range */
  797. XZLEXTERN int virangeflag;
  798. X
  799. X#endif
  800. X
  801. X/* last named command done */
  802. XZLEXTERN int lastnamed;
  803. X
  804. X/* != 0 if we're done editing */
  805. XZLEXTERN int done;
  806. X
  807. X/* length of prompt on screen */
  808. XZLEXTERN int pptlen;
  809. X
  810. X/* current history line number */
  811. XZLEXTERN int histline;
  812. X
  813. XZLEXTERN int eofsent;
  814. X
  815. X/* != 0 if we need to call resetvideo() */
  816. XZLEXTERN int resetneeded;
  817. X
  818. X/* != 0 if the line editor is active */
  819. XZLEXTERN int zleactive;
  820. X
  821. X/* the line buffer */
  822. XZLEXTERN char *line;
  823. X
  824. X/* the cut buffer */
  825. XZLEXTERN char *cutbuf;
  826. X
  827. X/* prompt and rprompt */
  828. XZLEXTERN char *pmpt, *pmpt2;
  829. X
  830. X/* the last line in the history (the current one) */
  831. XZLEXTERN char *curhistline;
  832. X
  833. X/* the status line */
  834. XZLEXTERN char *statusline;
  835. X
  836. X/*
  837. X    the current history line and cursor position for the top line
  838. X    on the buffer stack
  839. X*/
  840. X
  841. XZLEXTERN int stackhist,stackcs;
  842. X
  843. X/* != 0 if we are in the middle of a menu completion */
  844. XZLEXTERN int menucmp;
  845. X
  846. X/* != 0 if we are making undo records */
  847. XZLEXTERN int undoing;
  848. X
  849. X/* last vi change buffer */
  850. XZLEXTERN int vichgbufsz,vichgbufptr,vichgflag;
  851. XZLEXTERN char *vichgbuf;
  852. X
  853. XZLEXTERN int viinsbegin;
  854. X
  855. Xtypedef void bindfunc DCLPROTO((void));
  856. Xtypedef bindfunc *F;
  857. X
  858. Xstruct key {
  859. X    int func;            /* function code for this key */
  860. X    char *str;            /* string corresponding to this key,
  861. X                                if func = z_sequenceleadin                 */
  862. X    int len;                /* length of string */
  863. X    };
  864. Xstruct zlecmd {
  865. X    char *name;            /* name of function */
  866. X    F func;                /* handler function */
  867. X    int flags;
  868. X    };
  869. X
  870. X/* undo event */
  871. X
  872. Xstruct undoent {
  873. X    int pref;        /* number of initial chars unchanged */
  874. X    int suff;        /* number of trailing chars unchanged */
  875. X    int len;            /* length of changed chars */
  876. X    int cs;            /* cursor pos before change */
  877. X    char *change;    /* NOT null terminated */
  878. X    };
  879. X
  880. X#define UNDOCT 64
  881. X
  882. Xstruct undoent undos[UNDOCT];
  883. X
  884. X/* the line before last mod (for undo purposes) */
  885. XZLEXTERN char *lastline;
  886. X
  887. X/* buffer specified with "x */
  888. XZLEXTERN int vibufspec;
  889. X
  890. XZLEXTERN int undoct,lastcs;
  891. X
  892. XZLEXTERN char *visrchstr;
  893. XZLEXTERN int visrchsense;
  894. X
  895. X#define ZLE_MOVEMENT       1
  896. X#define ZLE_MENUCMP       2
  897. X#define ZLE_UNDO           4
  898. X#define ZLE_YANK          8
  899. X#define ZLE_LINEMOVE      16
  900. X#define ZLE_ARG           32
  901. X#define ZLE_NAMEDBUFFER 128
  902. X#define ZLE_KILL        (64|ZLE_NAMEDBUFFER)
  903. X#define ZLE_HISTSEARCH  256
  904. X#define ZLE_NEGARG      512
  905. X
  906. Xtypedef struct key *Key;
  907. X
  908. XZLEXTERN int *bindtab;
  909. Xextern int emacsbind[256];
  910. XZLEXTERN int altbindtab[256],mainbindtab[256];
  911. Xextern int viinsbind[],vicmdbind[];
  912. XZLEXTERN int vimarkcs[27],vimarkline[27];
  913. X
  914. X#define KRINGCT 8
  915. XZLEXTERN char *kring[KRINGCT];
  916. XZLEXTERN int kringnum;
  917. XZLEXTERN char *vibuf[35];
  918. X
  919. XZLEXTERN int zrecall;
  920. X
  921. X#define z_acceptandhold 0
  922. X#define z_acceptandinfernexthistory 1
  923. X#define z_acceptandmenucomplete 2
  924. X#define z_acceptline 3
  925. X#define z_acceptlineanddownhistory 4
  926. X#define z_backwardchar 5
  927. X#define z_backwarddeletechar 6
  928. X#define z_backwarddeleteword 7
  929. X#define z_backwardkillline 8
  930. X#define z_backwardkillword 9
  931. X#define z_backwardword 10
  932. X#define z_beginningofbufferorhistory 11
  933. X#define z_beginningofhistory 12
  934. X#define z_beginningofline 13
  935. X#define z_beginningoflinehist 14
  936. X#define z_capitalizeword 15
  937. X#define z_clearscreen 16
  938. X#define z_completeword 17
  939. X#define z_copyprevword 18
  940. X#define z_copyregionaskill 19
  941. X#define z_deletechar 20
  942. X#define z_deletecharorlist 21
  943. X#define z_deleteword 22
  944. X#define z_digitargument 23
  945. X#define z_downcaseword 24
  946. X#define z_downhistory 25
  947. X#define z_downlineorhistory 26
  948. X#define z_endofbufferorhistory 27
  949. X#define z_endofhistory 28
  950. X#define z_endofline 29
  951. X#define z_endoflinehist 30
  952. X#define z_exchangepointandmark 31
  953. X#define z_executelastnamedcmd 32
  954. X#define z_executenamedcmd 33
  955. X#define z_expandhistory 34
  956. X#define z_expandorcomplete 35
  957. X#define z_expandword 36
  958. X#define z_forwardchar 37
  959. X#define z_forwardword 38
  960. X#define z_getline 39
  961. X#define z_gosmacstransposechars 40
  962. X#define z_historyincrementalsearchbackward 41
  963. X#define z_historyincrementalsearchforward 42
  964. X#define z_historysearchbackward 43
  965. X#define z_historysearchforward 44
  966. X#define z_infernexthistory 45
  967. X#define z_insertlastword 46
  968. X#define z_killbuffer 47
  969. X#define z_killline 48
  970. X#define z_killregion 49
  971. X#define z_killwholeline 50
  972. X#define z_listchoices 51
  973. X#define z_listexpand 52
  974. X#define z_magicspace 53
  975. X#define z_menucompleteword 54
  976. X#define z_menuexpandorcomplete 55
  977. X#define z_overwritemode 56
  978. X#define z_pushline 57
  979. X#define z_quotedinsert 58
  980. X#define z_quoteline 59
  981. X#define z_quoteregion 60
  982. X#define z_redisplay 61
  983. X#define z_reversemenucomplete 62
  984. X#define z_runhelp 63
  985. X#define z_selfinsert 64
  986. X#define z_selfinsertunmeta 65
  987. X#define z_sendbreak 66
  988. X#define z_sendstring 67
  989. X#define z_sequenceleadin 68
  990. X#define z_setmarkcommand 69
  991. X#define z_spellword 70
  992. X#define z_toggleliteralhistory 71
  993. X#define z_transposechars 72
  994. X#define z_transposewords 73
  995. X#define z_undefinedkey 74
  996. X#define z_undo 75
  997. X#define z_universalargument 76
  998. X#define z_upcaseword 77
  999. X#define z_uphistory 78
  1000. X#define z_uplineorhistory 79
  1001. X#define z_viaddeol 80
  1002. X#define z_viaddnext 81
  1003. X#define z_vibackwardblankword 82
  1004. X#define z_vibackwardchar 83
  1005. X#define z_vibackwarddeletechar 84
  1006. X#define z_vibeginningofline 85
  1007. X#define z_vicapslockpanic 86
  1008. X#define z_vichange 87
  1009. X#define z_vichangeeol 88
  1010. X#define z_vichangewholeline 89
  1011. X#define z_vicmdmode 90
  1012. X#define z_videlete 91
  1013. X#define z_videletechar 92
  1014. X#define z_vidigitorbeginningofline 93
  1015. X#define z_viendofline 94
  1016. X#define z_vifetchhistory 95
  1017. X#define z_vifindnextchar 96
  1018. X#define z_vifindnextcharskip 97
  1019. X#define z_vifindprevchar 98
  1020. X#define z_vifindprevcharskip 99
  1021. X#define z_vifirstnonblank 100
  1022. X#define z_viforwardblankword 101
  1023. X#define z_viforwardblankwordend 102
  1024. X#define z_viforwardchar 103
  1025. X#define z_viforwardwordend 104
  1026. X#define z_vigotocolumn 105
  1027. X#define z_vigotomark 106
  1028. X#define z_vigotomarkline 107
  1029. X#define z_vihistorysearchbackward 108
  1030. X#define z_vihistorysearchforward 109
  1031. X#define z_viindent 110
  1032. X#define z_viinsert 111
  1033. X#define z_viinsertbol 112
  1034. X#define z_vijoin 113
  1035. X#define z_vimatchbracket 114
  1036. X#define z_viopenlineabove 115
  1037. X#define z_viopenlinebelow 116
  1038. X#define z_vioperswapcases 117
  1039. X#define z_viputafter 118
  1040. X#define z_virepeatchange 119
  1041. X#define z_virepeatfind 120
  1042. X#define z_virepeatsearch 121
  1043. X#define z_vireplace 122
  1044. X#define z_vireplacechars 123
  1045. X#define z_virevrepeatfind 124
  1046. X#define z_virevrepeatsearch 125
  1047. X#define z_visetbuffer 126
  1048. X#define z_visetmark 127
  1049. X#define z_visubstitute 128
  1050. X#define z_viswapcase 129
  1051. X#define z_viundochange 130
  1052. X#define z_viunindent 131
  1053. X#define z_viyank 132
  1054. X#define z_viyankeol 133
  1055. X#define z_whichcommand 134
  1056. X#define z_yank 135
  1057. X#define z_yankpop 136
  1058. X#define z_emacsbackwardword 137
  1059. X#define z_emacsforwardword 138
  1060. X#define z_killword 139
  1061. X#define z_vikillline 140
  1062. X#define z_vibackwardkillword 141
  1063. X#define z_expandcmdpath 142
  1064. X#define z_negargument 143
  1065. X#define ZLECMDCOUNT 144
  1066. X
  1067. Xextern struct zlecmd zlecmds[];
  1068. X
  1069. SHAR_EOF
  1070. chmod 0644 zsh2.1/src/zle.h ||
  1071. echo 'restore of zsh2.1/src/zle.h failed'
  1072. Wc_c="`wc -c < 'zsh2.1/src/zle.h'`"
  1073. test 8481 -eq "$Wc_c" ||
  1074.     echo 'zsh2.1/src/zle.h: original size 8481, current size' "$Wc_c"
  1075. rm -f _shar_wnt_.tmp
  1076. fi
  1077. # ============= zsh2.1/src/zle_bindings.c ==============
  1078. if test -f 'zsh2.1/src/zle_bindings.c' -a X"$1" != X"-c"; then
  1079.     echo 'x - skipping zsh2.1/src/zle_bindings.c (File already exists)'
  1080.     rm -f _shar_wnt_.tmp
  1081. else
  1082. > _shar_wnt_.tmp
  1083. echo 'x - extracting zsh2.1/src/zle_bindings.c (Text)'
  1084. sed 's/^X//' << 'SHAR_EOF' > 'zsh2.1/src/zle_bindings.c' &&
  1085. X/*
  1086. X
  1087. X    zle_bindings.c - commands and keymaps
  1088. X
  1089. X    This file is part of zsh, the Z shell.
  1090. X
  1091. X    zsh is free software; no one can prevent you from reading the source
  1092. X   code, or giving it to someone else.
  1093. X
  1094. X   This file is copyrighted under the GNU General Public License, which
  1095. X   can be found in the file called COPYING.
  1096. X
  1097. X   Copyright (C) 1990, 1991 Paul Falstad
  1098. X
  1099. X   zsh is distributed in the hope that it will be useful, but
  1100. X   WITHOUT ANY WARRANTY.  No author or distributor accepts
  1101. X   responsibility to anyone for the consequences of using it or for
  1102. X   whether it serves any particular purpose or works at all, unless he
  1103. X   says so in writing.  Refer to the GNU General Public License
  1104. X   for full details.
  1105. X
  1106. X   Everyone is granted permission to copy, modify and redistribute
  1107. X   zsh, but only under the conditions described in the GNU General Public
  1108. X   License.   A copy of this license is supposed to have been given to you
  1109. X   along with zsh so you can know your rights and responsibilities.
  1110. X   It should be in a file named COPYING.
  1111. X
  1112. X   Among other things, the copyright notice and this notice must be
  1113. X   preserved on all copies.
  1114. X
  1115. X*/
  1116. X
  1117. X#define ZLE
  1118. X#include "zsh.h"
  1119. X
  1120. X
  1121. Xstruct zlecmd zlecmds[] = {
  1122. X"accept-and-hold",acceptandhold,0,
  1123. X"accept-and-infer-next-history",acceptandinfernexthistory,0,
  1124. X"accept-and-menu-complete", acceptandmenucomplete, ZLE_MENUCMP,
  1125. X"accept-line",acceptline,0,
  1126. X"accept-line-and-down-history",acceptlineanddownhistory,0,
  1127. X"backward-char",backwardchar,ZLE_MOVEMENT,
  1128. X"backward-delete-char",backwarddeletechar,0,
  1129. X"backward-delete-word",backwarddeleteword,0,
  1130. X"backward-kill-line",backwardkillline,ZLE_KILL,
  1131. X"backward-kill-word",backwardkillword,ZLE_KILL,
  1132. X"backward-word",backwardword,ZLE_MOVEMENT,
  1133. X"beginning-of-buffer-or-history",beginningofbufferorhistory,ZLE_MOVEMENT,
  1134. X"beginning-of-history",beginningofhistory,0,
  1135. X"beginning-of-line",beginningofline,ZLE_MOVEMENT,
  1136. X"beginning-of-line-hist",beginningoflinehist,ZLE_MOVEMENT,
  1137. X"capitalize-word",capitalizeword,0,
  1138. X"clear-screen",clearscreen,0,
  1139. X"complete-word",completeword,ZLE_MENUCMP,
  1140. X"copy-prev-word",copyprevword,0,
  1141. X"copy-region-as-kill",copyregionaskill,ZLE_KILL,
  1142. X"delete-char",deletechar,0,
  1143. X"delete-char-or-list",deletecharorlist,ZLE_MENUCMP,
  1144. X"delete-word",deleteword,0,
  1145. X"digit-argument",digitargument,ZLE_ARG,
  1146. X"down-case-word",downcaseword,0,
  1147. X"down-history",downhistory,0,
  1148. X"down-line-or-history",downlineorhistory,ZLE_MOVEMENT|ZLE_LINEMOVE,
  1149. X"end-of-buffer-or-history",endofbufferorhistory,ZLE_MOVEMENT,
  1150. X"end-of-history",endofhistory,0,
  1151. X"end-of-line",endofline,ZLE_MOVEMENT,
  1152. X"end-of-line-hist",endoflinehist,ZLE_MOVEMENT,
  1153. X"exchange-point-and-mark",exchangepointandmark,ZLE_MOVEMENT,
  1154. X"execute-last-named-cmd",NULL,0,
  1155. X"execute-named-cmd",NULL,0,
  1156. X"expand-history",expandhistory,0,
  1157. X"expand-or-complete",expandorcomplete,ZLE_MENUCMP,
  1158. X"expand-word",expandword,0,
  1159. X"forward-char",forwardchar,ZLE_MOVEMENT,
  1160. X"forward-word",forwardword,ZLE_MOVEMENT,
  1161. X"get-line",getline,0,
  1162. X"gosmacs-transpose-chars",gosmacstransposechars,0,
  1163. X"history-incremental-search-backward",historyincrementalsearchbackward,0,
  1164. X"history-incremental-search-forward",historyincrementalsearchforward,0,
  1165. X"history-search-backward",historysearchbackward,ZLE_HISTSEARCH,
  1166. X"history-search-forward",historysearchforward,ZLE_HISTSEARCH,
  1167. X"infer-next-history",infernexthistory,0,
  1168. X"insert-last-word",insertlastword,0,
  1169. X"kill-buffer",killbuffer,ZLE_KILL,
  1170. X"kill-line",killline,ZLE_KILL,
  1171. X"kill-region",killregion,ZLE_KILL,
  1172. X"kill-whole-line",killwholeline,ZLE_KILL,
  1173. X"list-choices",listchoices,0,
  1174. X"list-expand",listexpand,ZLE_MENUCMP,
  1175. X"magic-space",magicspace,0,
  1176. X"menu-complete",menucompleteword,ZLE_MENUCMP,
  1177. X"menu-expand-or-complete",menuexpandorcomplete,ZLE_MENUCMP,
  1178. X"overwrite-mode",overwritemode,0,
  1179. X"push-line",pushline,0,
  1180. X"quoted-insert",quotedinsert,0,
  1181. X"quote-line",quoteline,0,
  1182. X"quote-region",quoteregion,0,
  1183. X"redisplay",redisplay,0,
  1184. X"reverse-menu-complete",reversemenucomplete,ZLE_MENUCMP,
  1185. X"run-help",processcmd,0,
  1186. X"self-insert",selfinsert,0,
  1187. X"self-insert-unmeta",selfinsertunmeta,0,
  1188. X"send-break",sendbreak,0,
  1189. X"send-string",sendstring,0,
  1190. X"",NULL,0,
  1191. X"set-mark-command",setmarkcommand,0,
  1192. X"spell-word",spellword,0,
  1193. X"toggle-literal-history",toggleliteralhistory,0,
  1194. X"transpose-chars",transposechars,0,
  1195. X"transpose-words",transposewords,0,
  1196. X"undefined-key",undefinedkey,0,
  1197. X"undo",undo,ZLE_UNDO,
  1198. X"universal-argument",universalargument,ZLE_ARG,
  1199. X"up-case-word",upcaseword,0,
  1200. X"up-history",uphistory,0,
  1201. X"up-line-or-history",uplineorhistory,ZLE_LINEMOVE|ZLE_MOVEMENT,
  1202. X"vi-add-eol",viaddeol,0,
  1203. X"vi-add-next",viaddnext,0,
  1204. X"vi-backward-blank-word",vibackwardblankword,ZLE_MOVEMENT,
  1205. X"vi-backward-char",vibackwardchar,ZLE_MOVEMENT,
  1206. X"vi-backward-delete-char",vibackwarddeletechar,ZLE_KILL,
  1207. X"vi-beginning-of-line",vibeginningofline,ZLE_MOVEMENT,
  1208. X"vi-caps-lock-panic",vicapslockpanic,0,
  1209. X"vi-change",vichange,0,
  1210. X"vi-change-eol",vichangeeol,0,
  1211. X"vi-change-whole-line",vichangewholeline,0,
  1212. X"vi-cmd-mode",vicmdmode,0,
  1213. X"vi-delete",videlete,ZLE_KILL,
  1214. X"vi-delete-char",videletechar,ZLE_KILL,
  1215. X"vi-digit-or-beginning-of-line",NULL,0,
  1216. X"vi-end-of-line",viendofline,ZLE_MOVEMENT,
  1217. X"vi-fetch-history",vifetchhistory,0,
  1218. X"vi-find-next-char",vifindnextchar,ZLE_MOVEMENT,
  1219. X"vi-find-next-char-skip",vifindnextcharskip,ZLE_MOVEMENT,
  1220. X"vi-find-prev-char",vifindprevchar,ZLE_MOVEMENT,
  1221. X"vi-find-prev-char-skip",vifindprevcharskip,ZLE_MOVEMENT,
  1222. X"vi-first-non-blank",vifirstnonblank,ZLE_MOVEMENT,
  1223. X"vi-forward-blank-word",viforwardblankword,ZLE_MOVEMENT,
  1224. X"vi-forward-blank-word-end",viforwardblankwordend,ZLE_MOVEMENT,
  1225. X"vi-forward-char",viforwardchar,ZLE_MOVEMENT,
  1226. X"vi-forward-word-end",viforwardwordend,ZLE_MOVEMENT,
  1227. X"vi-goto-column",vigotocolumn,ZLE_MOVEMENT,
  1228. X"vi-goto-mark",vigotomark,ZLE_MOVEMENT,
  1229. X"vi-goto-mark-line",vigotomarkline,ZLE_MOVEMENT,
  1230. X"vi-history-search-backward",vihistorysearchbackward,0,
  1231. X"vi-history-search-forward",vihistorysearchforward,0,
  1232. X"vi-indent",viindent,0,
  1233. X"vi-insert",viinsert,0,
  1234. X"vi-insert-bol",viinsertbol,0,
  1235. X"vi-join",vijoin,0,
  1236. X"vi-match-bracket",vimatchbracket,ZLE_MOVEMENT,
  1237. X"vi-open-line-above",viopenlineabove,0,
  1238. X"vi-open-line-below",viopenlinebelow,0,
  1239. X"vi-oper-swap-case",vioperswapcase,0,
  1240. X"vi-put-after",viputafter,ZLE_YANK,
  1241. X"vi-repeat-change",virepeatchange,0,
  1242. X"vi-repeat-find",virepeatfind,ZLE_MOVEMENT,
  1243. X"vi-repeat-search",virepeatsearch,ZLE_MOVEMENT,
  1244. X"vi-replace",vireplace,0,
  1245. X"vi-replace-chars",vireplacechars,0,
  1246. X"vi-rev-repeat-find",virevrepeatfind,ZLE_MOVEMENT,
  1247. X"vi-rev-repeat-search",virevrepeatsearch,ZLE_MOVEMENT,
  1248. X"vi-set-buffer",visetbuffer,0,
  1249. X"vi-set-mark",visetmark,0,
  1250. X"vi-substitute",visubstitute,0,
  1251. X"vi-swap-case",viswapcase,0,
  1252. X"vi-undo-change",undo,0,
  1253. X"vi-unindent",viunindent,0,
  1254. X"vi-yank",viyank,0,
  1255. X"vi-yank-eol",viyankeol,0,
  1256. X"which-command",processcmd,0,
  1257. X"yank",yank,ZLE_YANK|ZLE_NAMEDBUFFER,
  1258. X"yank-pop",yankpop,ZLE_YANK,
  1259. X"emacs-forward-word",emacsforwardword,ZLE_MOVEMENT,
  1260. X"emacs-backward-word",emacsbackwardword,ZLE_MOVEMENT,
  1261. X"kill-word",killword,ZLE_KILL,
  1262. X"vi-kill-line",vikillline,0,
  1263. X"vi-backward-delete-word",vibackwardkillword,0,
  1264. X"expand-cmd-path",expandcmdpath,0,
  1265. X"neg-argument",negargument,ZLE_NEGARG,
  1266. X"",NULL,0
  1267. X};
  1268. X
  1269. Xint emacsbind[256] = {
  1270. X/* ^@ */ z_setmarkcommand,
  1271. X/* ^A */ z_beginningofline,
  1272. X/* ^B */ z_backwardchar,
  1273. X/* ^C */ z_sendbreak,
  1274. X/* ^D */ z_deletecharorlist,
  1275. X/* ^E */ z_endofline,
  1276. X/* ^F */ z_forwardchar,
  1277. X/* ^G */ z_undefinedkey,
  1278. X/* ^H */ z_backwarddeletechar,
  1279. X/* ^I */ z_expandorcomplete,
  1280. X/* ^J */ z_acceptline,
  1281. X/* ^K */ z_killline,
  1282. X/* ^L */ z_clearscreen,
  1283. X/* ^M */ z_acceptline,
  1284. X/* ^N */ z_downlineorhistory,
  1285. X/* ^O */ z_acceptlineanddownhistory,
  1286. X/* ^P */ z_uplineorhistory,
  1287. X/* ^Q */ z_pushline,
  1288. X/* ^R */ z_historyincrementalsearchbackward,
  1289. X/* ^S */ z_historyincrementalsearchforward,
  1290. X/* ^T */ z_transposechars,
  1291. X/* ^U */ z_killwholeline,
  1292. X/* ^V */ z_quotedinsert,
  1293. X/* ^W */ z_backwardkillword,
  1294. X/* ^X */ z_sequenceleadin,
  1295. X/* ^Y */ z_yank,
  1296. X/* ^Z */ z_undefinedkey,
  1297. X/* ^[ */ z_sequenceleadin,
  1298. X/* ^\ */ z_undefinedkey,
  1299. X/* ^] */ z_undefinedkey,
  1300. X/* ^^ */ z_undefinedkey,
  1301. X/* ^_ */ z_undo,
  1302. X/*   */ z_selfinsert,
  1303. X/* ! */ z_selfinsert,
  1304. X/* " */ z_selfinsert,
  1305. X/* # */ z_selfinsert,
  1306. X/* $ */ z_selfinsert,
  1307. X/* % */ z_selfinsert,
  1308. X/* & */ z_selfinsert,
  1309. X/* ' */ z_selfinsert,
  1310. X/* ( */ z_selfinsert,
  1311. X/* ) */ z_selfinsert,
  1312. X/* * */ z_selfinsert,
  1313. X/* + */ z_selfinsert,
  1314. X/* , */ z_selfinsert,
  1315. X/* - */ z_selfinsert,
  1316. X/* . */ z_selfinsert,
  1317. X/* / */ z_selfinsert,
  1318. X/* 0 */ z_selfinsert,
  1319. X/* 1 */ z_selfinsert,
  1320. X/* 2 */ z_selfinsert,
  1321. X/* 3 */ z_selfinsert,
  1322. X/* 4 */ z_selfinsert,
  1323. X/* 5 */ z_selfinsert,
  1324. X/* 6 */ z_selfinsert,
  1325. X/* 7 */ z_selfinsert,
  1326. X/* 8 */ z_selfinsert,
  1327. X/* 9 */ z_selfinsert,
  1328. X/* : */ z_selfinsert,
  1329. X/* ; */ z_selfinsert,
  1330. X/* < */ z_selfinsert,
  1331. X/* = */ z_selfinsert,
  1332. X/* > */ z_selfinsert,
  1333. X/* ? */ z_selfinsert,
  1334. X/* @ */ z_selfinsert,
  1335. X/* A */ z_selfinsert,
  1336. X/* B */ z_selfinsert,
  1337. X/* C */ z_selfinsert,
  1338. X/* D */ z_selfinsert,
  1339. X/* E */ z_selfinsert,
  1340. X/* F */ z_selfinsert,
  1341. X/* G */ z_selfinsert,
  1342. X/* H */ z_selfinsert,
  1343. X/* I */ z_selfinsert,
  1344. X/* J */ z_selfinsert,
  1345. X/* K */ z_selfinsert,
  1346. X/* L */ z_selfinsert,
  1347. X/* M */ z_selfinsert,
  1348. X/* N */ z_selfinsert,
  1349. X/* O */ z_selfinsert,
  1350. X/* P */ z_selfinsert,
  1351. X/* Q */ z_selfinsert,
  1352. X/* R */ z_selfinsert,
  1353. X/* S */ z_selfinsert,
  1354. X/* T */ z_selfinsert,
  1355. X/* U */ z_selfinsert,
  1356. X/* V */ z_selfinsert,
  1357. X/* W */ z_selfinsert,
  1358. X/* X */ z_selfinsert,
  1359. X/* Y */ z_selfinsert,
  1360. X/* Z */ z_selfinsert,
  1361. X/* [ */ z_selfinsert,
  1362. X/* \ */ z_selfinsert,
  1363. X/* ] */ z_selfinsert,
  1364. X/* ^ */ z_selfinsert,
  1365. X/* _ */ z_selfinsert,
  1366. X/* ` */ z_selfinsert,
  1367. X/* a */ z_selfinsert,
  1368. X/* b */ z_selfinsert,
  1369. X/* c */ z_selfinsert,
  1370. X/* d */ z_selfinsert,
  1371. X/* e */ z_selfinsert,
  1372. X/* f */ z_selfinsert,
  1373. X/* g */ z_selfinsert,
  1374. X/* h */ z_selfinsert,
  1375. X/* i */ z_selfinsert,
  1376. X/* j */ z_selfinsert,
  1377. X/* k */ z_selfinsert,
  1378. X/* l */ z_selfinsert,
  1379. X/* m */ z_selfinsert,
  1380. X/* n */ z_selfinsert,
  1381. X/* o */ z_selfinsert,
  1382. X/* p */ z_selfinsert,
  1383. X/* q */ z_selfinsert,
  1384. X/* r */ z_selfinsert,
  1385. X/* s */ z_selfinsert,
  1386. X/* t */ z_selfinsert,
  1387. X/* u */ z_selfinsert,
  1388. X/* v */ z_selfinsert,
  1389. X/* w */ z_selfinsert,
  1390. X/* x */ z_selfinsert,
  1391. X/* y */ z_selfinsert,
  1392. X/* z */ z_selfinsert,
  1393. X/* { */ z_selfinsert,
  1394. X/* | */ z_selfinsert,
  1395. X/* } */ z_selfinsert,
  1396. X/* ~ */ z_selfinsert,
  1397. X/* ^? */ z_backwarddeletechar,
  1398. X/* M-^@ */ z_undefinedkey,
  1399. X/* M-^A */ z_undefinedkey,
  1400. X/* M-^B */ z_undefinedkey,
  1401. X/* M-^C */ z_undefinedkey,
  1402. X/* M-^D */ z_listchoices,
  1403. X/* M-^E */ z_undefinedkey,
  1404. X/* M-^F */ z_undefinedkey,
  1405. X/* M-^G */ z_undefinedkey,
  1406. X/* M-^H */ z_backwardkillword,
  1407. X/* M-^I */ z_selfinsertunmeta,
  1408. X/* M-^J */ z_selfinsertunmeta,
  1409. X/* M-^K */ z_undefinedkey,
  1410. X/* M-^L */ z_clearscreen,
  1411. X/* M-^M */ z_selfinsertunmeta,
  1412. X/* M-^N */ z_undefinedkey,
  1413. X/* M-^O */ z_undefinedkey,
  1414. X/* M-^P */ z_undefinedkey,
  1415. X/* M-^Q */ z_undefinedkey,
  1416. X/* M-^R */ z_undefinedkey,
  1417. X/* M-^S */ z_undefinedkey,
  1418. X/* M-^T */ z_undefinedkey,
  1419. X/* M-^U */ z_undefinedkey,
  1420. X/* M-^V */ z_undefinedkey,
  1421. X/* M-^W */ z_undefinedkey,
  1422. X/* M-^X */ z_undefinedkey,
  1423. X/* M-^Y */ z_undefinedkey,
  1424. X/* M-^Z */ z_undefinedkey,
  1425. X/* M-^[ */ z_undefinedkey,
  1426. X/* M-^\ */ z_undefinedkey,
  1427. X/* M-^] */ z_undefinedkey,
  1428. X/* M-^^ */ z_undefinedkey,
  1429. X/* M-^_ */ z_copyprevword,
  1430. X/* M-  */ z_expandhistory,
  1431. X/* M-! */ z_expandhistory,
  1432. X/* M-" */ z_quoteregion,
  1433. X/* M-# */ z_undefinedkey,
  1434. X/* M-$ */ z_spellword,
  1435. X/* M-% */ z_undefinedkey,
  1436. X/* M-& */ z_undefinedkey,
  1437. X/* M-' */ z_quoteline,
  1438. X/* M-( */ z_undefinedkey,
  1439. X/* M-) */ z_undefinedkey,
  1440. X/* M-* */ z_undefinedkey,
  1441. X/* M-+ */ z_undefinedkey,
  1442. X/* M-, */ z_undefinedkey,
  1443. X/* M-- */ z_negargument,
  1444. X/* M-. */ z_insertlastword,
  1445. X/* M-/ */ z_undefinedkey,
  1446. X/* M-0 */ z_digitargument,
  1447. X/* M-1 */ z_digitargument,
  1448. X/* M-2 */ z_digitargument,
  1449. X/* M-3 */ z_digitargument,
  1450. X/* M-4 */ z_digitargument,
  1451. X/* M-5 */ z_digitargument,
  1452. X/* M-6 */ z_digitargument,
  1453. X/* M-7 */ z_digitargument,
  1454. X/* M-8 */ z_digitargument,
  1455. X/* M-9 */ z_digitargument,
  1456. X/* M-: */ z_undefinedkey,
  1457. X/* M-; */ z_undefinedkey,
  1458. X/* M-< */ z_beginningofbufferorhistory,
  1459. X/* M-= */ z_undefinedkey,
  1460. X/* M-> */ z_endofbufferorhistory,
  1461. X/* M-? */ z_whichcommand,
  1462. X/* M-@ */ z_undefinedkey,
  1463. X/* M-A */ z_acceptandhold,
  1464. X/* M-B */ z_backwardword,
  1465. X/* M-C */ z_capitalizeword,
  1466. X/* M-D */ z_deleteword,
  1467. X/* M-E */ z_undefinedkey,
  1468. X/* M-F */ z_forwardword,
  1469. X/* M-G */ z_getline,
  1470. X/* M-H */ z_runhelp,
  1471. X/* M-I */ z_undefinedkey,
  1472. X/* M-J */ z_undefinedkey,
  1473. X/* M-K */ z_undefinedkey,
  1474. X/* M-L */ z_downcaseword,
  1475. X/* M-M */ z_undefinedkey,
  1476. X/* M-N */ z_historysearchforward,
  1477. X/* M-O */ z_undefinedkey,
  1478. X/* M-P */ z_historysearchbackward,
  1479. X/* M-Q */ z_pushline,
  1480. X/* M-R */ z_toggleliteralhistory,
  1481. X/* M-S */ z_spellword,
  1482. X/* M-T */ z_transposewords,
  1483. X/* M-U */ z_upcaseword,
  1484. X/* M-V */ z_undefinedkey,
  1485. X/* M-W */ z_copyregionaskill,
  1486. X/* M-X */ z_undefinedkey,
  1487. X/* M-Y */ z_undefinedkey,
  1488. X/* M-Z */ z_undefinedkey,
  1489. X/* M-[ */ z_sequenceleadin,
  1490. X/* M-\ */ z_undefinedkey,
  1491. X/* M-] */ z_undefinedkey,
  1492. X/* M-^ */ z_undefinedkey,
  1493. X/* M-_ */ z_insertlastword,
  1494. X/* M-` */ z_undefinedkey,
  1495. X/* M-a */ z_acceptandhold,
  1496. X/* M-b */ z_backwardword,
  1497. X/* M-c */ z_capitalizeword,
  1498. X/* M-d */ z_deleteword,
  1499. X/* M-e */ z_undefinedkey,
  1500. X/* M-f */ z_forwardword,
  1501. X/* M-g */ z_getline,
  1502. X/* M-h */ z_runhelp,
  1503. X/* M-i */ z_undefinedkey,
  1504. X/* M-j */ z_undefinedkey,
  1505. X/* M-k */ z_undefinedkey,
  1506. X/* M-l */ z_downcaseword,
  1507. X/* M-m */ z_undefinedkey,
  1508. X/* M-n */ z_historysearchforward,
  1509. X/* M-o */ z_undefinedkey,
  1510. X/* M-p */ z_historysearchbackward,
  1511. X/* M-q */ z_pushline,
  1512. X/* M-r */ z_toggleliteralhistory,
  1513. X/* M-s */ z_spellword,
  1514. X/* M-t */ z_transposewords,
  1515. X/* M-u */ z_upcaseword,
  1516. X/* M-v */ z_undefinedkey,
  1517. X/* M-w */ z_copyregionaskill,
  1518. X/* M-x */ z_executenamedcmd,
  1519. X/* M-y */ z_yankpop,
  1520. X/* M-z */ z_executelastnamedcmd,
  1521. X/* M-{ */ z_undefinedkey,
  1522. X/* M-| */ z_vigotocolumn,
  1523. X/* M-} */ z_undefinedkey,
  1524. X/* M-~ */ z_undefinedkey,
  1525. X/* M-^? */ z_backwardkillword,
  1526. X};
  1527. X
  1528. Xint viinsbind[32] = {
  1529. X/* ^@ */ z_undefinedkey,
  1530. X/* ^A */ z_selfinsert,
  1531. X/* ^B */ z_selfinsert,
  1532. X/* ^C */ z_sendbreak,
  1533. X/* ^D */ z_listchoices,
  1534. X/* ^E */ z_selfinsert,
  1535. X/* ^F */ z_selfinsert,
  1536. X/* ^G */ z_selfinsert,
  1537. X/* ^H */ z_vibackwarddeletechar,
  1538. X/* ^I */ z_expandorcomplete,
  1539. X/* ^J */ z_acceptline,
  1540. X/* ^K */ z_killline,
  1541. X/* ^L */ z_clearscreen,
  1542. X/* ^M */ z_acceptline,
  1543. X/* ^N */ z_selfinsert,
  1544. X/* ^O */ z_selfinsert,
  1545. X/* ^P */ z_selfinsert,
  1546. X/* ^Q */ z_selfinsert,
  1547. X/* ^R */ z_redisplay,
  1548. X/* ^S */ z_selfinsert,
  1549. X/* ^T */ z_selfinsert,
  1550. X/* ^U */ z_vikillline,
  1551. X/* ^V */ z_quotedinsert,
  1552. X/* ^W */ z_vibackwardkillword,
  1553. X/* ^X */ z_selfinsert,
  1554. X/* ^Y */ z_selfinsert,
  1555. X/* ^Z */ z_selfinsert,
  1556. X/* ^[ */ z_vicmdmode,
  1557. X/* ^\ */ z_selfinsert,
  1558. X/* ^] */ z_selfinsert,
  1559. X/* ^^ */ z_selfinsert,
  1560. X/* ^_ */ z_selfinsert,
  1561. X};
  1562. X
  1563. Xint vicmdbind[128] = {
  1564. X/* ^@ */ z_undefinedkey,
  1565. X/* ^A */ z_beginningofline,
  1566. X/* ^B */ z_undefinedkey,
  1567. X/* ^C */ z_sendbreak,
  1568. X/* ^D */ z_listchoices,
  1569. X/* ^E */ z_endofline,
  1570. X/* ^F */ z_undefinedkey,
  1571. X/* ^G */ z_listexpand,
  1572. X/* ^H */ z_backwarddeletechar,
  1573. X/* ^I */ z_completeword,
  1574. X/* ^J */ z_acceptline,
  1575. X/* ^K */ z_killline,
  1576. X/* ^L */ z_clearscreen,
  1577. X/* ^M */ z_acceptline,
  1578. X/* ^N */ z_downhistory,
  1579. X/* ^O */ z_undefinedkey,
  1580. X/* ^P */ z_uphistory,
  1581. X/* ^Q */ z_undefinedkey,
  1582. X/* ^R */ z_redisplay,
  1583. X/* ^S */ z_undefinedkey,
  1584. X/* ^T */ z_undefinedkey,
  1585. X/* ^U */ z_killbuffer,
  1586. X/* ^V */ z_undefinedkey,
  1587. X/* ^W */ z_backwardkillword,
  1588. X/* ^X */ z_expandorcomplete,
  1589. X/* ^Y */ z_undefinedkey,
  1590. X/* ^Z */ z_undefinedkey,
  1591. X/* ^[ */ z_sequenceleadin,
  1592. X/* ^\ */ z_undefinedkey,
  1593. X/* ^] */ z_undefinedkey,
  1594. X/* ^^ */ z_undefinedkey,
  1595. X/* ^_ */ z_undefinedkey,
  1596. X/*   */ z_viforwardchar,
  1597. X/* ! */ z_undefinedkey,
  1598. X/* " */ z_visetbuffer,
  1599. X/* # */ z_undefinedkey,
  1600. X/* $ */ z_viendofline,
  1601. X/* % */ z_vimatchbracket,
  1602. X/* & */ z_undefinedkey,
  1603. X/* ' */ z_vigotomarkline,
  1604. X/* ( */ z_undefinedkey,
  1605. X/* ) */ z_undefinedkey,
  1606. X/* * */ z_undefinedkey,
  1607. X/* + */ z_downlineorhistory,
  1608. X/* , */ z_virevrepeatfind,
  1609. X/* - */ z_uplineorhistory,
  1610. X/* . */ z_virepeatchange,
  1611. X/* / */ z_vihistorysearchbackward,
  1612. X/* 0 */ z_vidigitorbeginningofline,
  1613. X/* 1 */ z_digitargument,
  1614. X/* 2 */ z_digitargument,
  1615. X/* 3 */ z_digitargument,
  1616. X/* 4 */ z_digitargument,
  1617. X/* 5 */ z_digitargument,
  1618. X/* 6 */ z_digitargument,
  1619. X/* 7 */ z_digitargument,
  1620. X/* 8 */ z_digitargument,
  1621. X/* 9 */ z_digitargument,
  1622. X/* : */ z_undefinedkey,
  1623. X/* ; */ z_virepeatfind,
  1624. X/* < */ z_viunindent,
  1625. X/* = */ z_listchoices,
  1626. X/* > */ z_viindent,
  1627. X/* ? */ z_vihistorysearchforward,
  1628. X/* @ */ z_undefinedkey,
  1629. X/* A */ z_viaddeol,
  1630. X/* B */ z_vibackwardblankword,
  1631. X/* C */ z_vichangeeol,
  1632. X/* D */ z_killline,
  1633. X/* E */ z_viforwardblankwordend,
  1634. X/* F */ z_vifindprevchar,
  1635. X/* G */ z_vifetchhistory,
  1636. X/* H */ z_vicapslockpanic,
  1637. X/* I */ z_viinsertbol,
  1638. X/* J */ z_historysearchforward,
  1639. X/* K */ z_historysearchbackward,
  1640. X/* L */ z_undefinedkey,
  1641. X/* M */ z_undefinedkey,
  1642. X/* N */ z_virevrepeatsearch,
  1643. X/* O */ z_viopenlineabove,
  1644. X/* P */ z_yank,
  1645. X/* Q */ z_undefinedkey,
  1646. X/* R */ z_vireplace,
  1647. X/* S */ z_vichangewholeline,
  1648. X/* T */ z_vifindprevcharskip,
  1649. X/* U */ z_undefinedkey,
  1650. X/* V */ z_undefinedkey,
  1651. X/* W */ z_viforwardblankword,
  1652. X/* X */ z_vibackwarddeletechar,
  1653. X/* Y */ z_viyankeol,
  1654. X/* Z */ z_undefinedkey,
  1655. X/* [ */ z_undefinedkey,
  1656. X/* \ */ z_completeword,
  1657. X/* ] */ z_undefinedkey,
  1658. X/* ^ */ z_vifirstnonblank,
  1659. X/* _ */ z_undefinedkey,
  1660. X/* ` */ z_vigotomark,
  1661. X/* a */ z_viaddnext,
  1662. X/* b */ z_backwardword,
  1663. X/* c */ z_vichange,
  1664. X/* d */ z_videlete,
  1665. X/* e */ z_viforwardwordend,
  1666. X/* f */ z_vifindnextchar,
  1667. X/* g */ z_undefinedkey,
  1668. X/* h */ z_vibackwardchar,
  1669. X/* i */ z_viinsert,
  1670. X/* j */ z_downlineorhistory,
  1671. X/* k */ z_uplineorhistory,
  1672. X/* l */ z_viforwardchar,
  1673. X/* m */ z_visetmark,
  1674. X/* n */ z_virepeatsearch,
  1675. X/* o */ z_viopenlinebelow,
  1676. X/* p */ z_viputafter,
  1677. X/* q */ z_undefinedkey,
  1678. X/* r */ z_vireplacechars,
  1679. X/* s */ z_vichangewholeline,
  1680. X/* t */ z_vifindnextcharskip,
  1681. X/* u */ z_undo,
  1682. X/* v */ z_undefinedkey,
  1683. X/* w */ z_forwardword,
  1684. X/* x */ z_videletechar,
  1685. X/* y */ z_viyank,
  1686. X/* z */ z_undefinedkey,
  1687. X/* { */ z_undefinedkey,
  1688. X/* | */ z_vigotocolumn,
  1689. X/* } */ z_undefinedkey,
  1690. X/* ~ */ z_viswapcase,
  1691. X/* ^? */ z_backwarddeletechar,
  1692. X};
  1693. X
  1694. SHAR_EOF
  1695. chmod 0644 zsh2.1/src/zle_bindings.c ||
  1696. echo 'restore of zsh2.1/src/zle_bindings.c failed'
  1697. Wc_c="`wc -c < 'zsh2.1/src/zle_bindings.c'`"
  1698. test 17489 -eq "$Wc_c" ||
  1699.     echo 'zsh2.1/src/zle_bindings.c: original size 17489, current size' "$Wc_c"
  1700. rm -f _shar_wnt_.tmp
  1701. fi
  1702. # ============= zsh2.1/src/zle_main.c ==============
  1703. if test -f 'zsh2.1/src/zle_main.c' -a X"$1" != X"-c"; then
  1704.     echo 'x - skipping zsh2.1/src/zle_main.c (File already exists)'
  1705.     rm -f _shar_wnt_.tmp
  1706. else
  1707. > _shar_wnt_.tmp
  1708. echo 'x - extracting zsh2.1/src/zle_main.c (Text)'
  1709. sed 's/^X//' << 'SHAR_EOF' > 'zsh2.1/src/zle_main.c' &&
  1710. X/*
  1711. X
  1712. X    zle_main.c - main routines for line editor
  1713. X
  1714. X    This file is part of zsh, the Z shell.
  1715. X
  1716. X    zsh is free software; no one can prevent you from reading the source
  1717. X   code, or giving it to someone else.
  1718. X
  1719. X   This file is copyrighted under the GNU General Public License, which
  1720. X   can be found in the file called COPYING.
  1721. X
  1722. X   Copyright (C) 1990, 1991 Paul Falstad
  1723. X
  1724. X   zsh is distributed in the hope that it will be useful, but
  1725. X   WITHOUT ANY WARRANTY.  No author or distributor accepts
  1726. X   responsibility to anyone for the consequences of using it or for
  1727. X   whether it serves any particular purpose or works at all, unless he
  1728. X   says so in writing.  Refer to the GNU General Public License
  1729. X   for full details.
  1730. X
  1731. X   Everyone is granted permission to copy, modify and redistribute
  1732. X   zsh, but only under the conditions described in the GNU General Public
  1733. X   License.   A copy of this license is supposed to have been given to you
  1734. X   along with zsh so you can know your rights and responsibilities.
  1735. X   It should be in a file named COPYING.
  1736. X
  1737. X   Among other things, the copyright notice and this notice must be
  1738. X   preserved on all copies.
  1739. X
  1740. X*/
  1741. X
  1742. X#define ZLEGLOBALS
  1743. X#define ZLE
  1744. X#include "zsh.h"
  1745. X#include <sys/types.h>
  1746. X#include <sys/ioctl.h>
  1747. X#include <sys/errno.h>
  1748. X
  1749. Xstatic Key cky;
  1750. X
  1751. X/* set up terminal */
  1752. X
  1753. Xvoid setterm() /**/
  1754. X{
  1755. Xstruct ttyinfo ti;
  1756. Xlong val;
  1757. X
  1758. X#ifdef CLOBBERS_TYPEAHEAD
  1759. X#ifdef FIONREAD
  1760. X    ioctl(SHTTY, FIONREAD, &val);
  1761. X    if (val) return;
  1762. X#endif
  1763. X#endif
  1764. X    inittty();
  1765. X    ti = shttyinfo;
  1766. X#ifdef TERMIOS
  1767. X    ti.termios.c_lflag &= ~(ICANON|ECHO);
  1768. X    ti.termios.c_cc[VQUIT] =
  1769. X#ifdef VDISCARD
  1770. X        ti.termios.c_cc[VDISCARD] = 
  1771. X#endif
  1772. X#ifdef VSUSP
  1773. X        ti.termios.c_cc[VSUSP] =
  1774. X#endif
  1775. X#ifdef VDSUSP
  1776. X        ti.termios.c_cc[VDSUSP] =
  1777. X#endif
  1778. X        0;
  1779. X    ti.termios.c_cc[VMIN] = 1;
  1780. X    ti.termios.c_cc[VTIME] = 0;
  1781. X    ti.termios.c_iflag &= ~(INLCR|ICRNL);
  1782. X#else
  1783. X#ifdef TERMIO
  1784. X    ti.termio.c_lflag &= ~(ICANON|ECHO);
  1785. X    ti.termio.c_cc[VQUIT] =
  1786. X        0;
  1787. X    ti.termio.c_cc[VMIN] = 1;
  1788. X    ti.termio.c_cc[VTIME] = 0;
  1789. X    ti.termio.c_iflag &= ~(INLCR|ICRNL);
  1790. X#else
  1791. X    ti.sgttyb.sg_flags = (ti.sgttyb.sg_flags | CBREAK) & ~ECHO;
  1792. X    ti.tchars.t_quitc =
  1793. X        ti.ltchars.t_suspc =
  1794. X        ti.ltchars.t_dsuspc = ti.ltchars.t_lnextc = -1;
  1795. X#endif
  1796. X#endif
  1797. X#ifdef TTY_NEEDS_DRAINING
  1798. X    drainoutput();
  1799. X#endif
  1800. X    settyinfo(&ti);
  1801. X}
  1802. X
  1803. Xvoid unsetterm() /**/
  1804. X{
  1805. X    settyinfo(&shttyinfo);
  1806. X}
  1807. X
  1808. Xstatic char *kungetbuf;
  1809. Xstatic int kungetct,kungetsz;
  1810. X
  1811. Xvoid ungetkey(ch) /**/
  1812. Xint ch;
  1813. X{
  1814. X    if (kungetct == kungetsz)
  1815. X        kungetbuf = realloc(kungetbuf,kungetsz *= 2);
  1816. X    kungetbuf[kungetct++] = ch;
  1817. X}
  1818. X
  1819. Xvoid ungetkeys(s,len) /**/
  1820. Xchar *s;int len;
  1821. X{
  1822. X    s += len;
  1823. X    while (len--)
  1824. X        ungetkey(*--s);
  1825. X}
  1826. X
  1827. Xunsigned int getkey(tmok) /**/
  1828. Xint tmok;
  1829. X{
  1830. Xchar cc;
  1831. Xunsigned int ret;
  1832. X
  1833. X    if (kungetct)
  1834. X        ret = (unsigned int) (unsigned char) kungetbuf[--kungetct];
  1835. X    else {
  1836. X        while (read(0,&cc,1) != 1)
  1837. X            if (errno == EINTR) {
  1838. X                if (!errflag)
  1839. X                    continue;
  1840. X                errflag = 0;
  1841. X                if (tmok)
  1842. X                    return -1;
  1843. X                return 3;
  1844. X            } else if (errno == EWOULDBLOCK) {
  1845. X                fcntl(0,F_SETFL,0);
  1846. X            } else {
  1847. X                zerr("error on TTY read: %e",NULL,errno);
  1848. X                exit(1);
  1849. X            }
  1850. X        ret = (unsigned int) (unsigned char) cc;
  1851. X    }
  1852. X    if (vichgflag) {
  1853. X        if (vichgbufptr == vichgbufsz)
  1854. X            vichgbuf = realloc(vichgbuf,vichgbufsz *= 2);
  1855. X        vichgbuf[vichgbufptr++] = ret;
  1856. X    }
  1857. X    return ret;
  1858. X}
  1859. X
  1860. X/* read a line */
  1861. X
  1862. Xchar *zleread(ppt,ppt2,plen) /**/
  1863. Xchar *ppt;char *ppt2;int plen;
  1864. X{
  1865. Xint z;
  1866. Xlong costmult;
  1867. Xstruct timeval tv;
  1868. Xfd_set foofd;
  1869. Xchar *s;
  1870. X
  1871. X    tv.tv_sec = 0;
  1872. X    fflush(stdout);
  1873. X    fflush(stderr);
  1874. X    intr();
  1875. X    costmult = 3840000L/((baud) ? baud : 2400);
  1876. X    insmode = 1; eofsent = 0; resetneeded =0 ;
  1877. X    pmpt = ppt;
  1878. X    pmpt2 = ppt2;
  1879. X    permalloc();
  1880. X    histline = curhist;
  1881. X    pptlen = plen;
  1882. X    resetneeded = 1;
  1883. X    FD_ZERO(&foofd);
  1884. X    zleactive = 1;
  1885. X    undoing = 1;
  1886. X    line = zalloc(linesz = 256);
  1887. X    *line = '\0';
  1888. X    virangeflag = lastcmd = done = cs = ll = mark = 0;
  1889. X    curhistline = NULL;
  1890. X    mult = 1;
  1891. X    vibufspec = 0;
  1892. X    bindtab = mainbindtab;
  1893. X    vichgflag = 0;
  1894. X    viinsbegin = 0;
  1895. X    statusline = NULL;
  1896. X    if (s = getnode(bufstack))
  1897. X        {
  1898. X        setline(s);
  1899. X        free(s);
  1900. X        if (stackcs != -1)
  1901. X            {
  1902. X            cs = stackcs;
  1903. X            stackcs = -1;
  1904. X            if (cs > ll)
  1905. X                cs = ll;
  1906. X            }
  1907. X        if (stackhist != -1)
  1908. X            {
  1909. X            histline = stackhist;
  1910. X            stackhist = -1;
  1911. X            }
  1912. X        }
  1913. X    initundo();
  1914. X    if (unset(NOPROMPTCLOBBER))
  1915. X        putchar('\r');
  1916. X    if (tmout)
  1917. X        alarm(tmout);
  1918. X    if (zrecall) {
  1919. X        zrecall = 0;
  1920. X        uphistory();
  1921. X    }
  1922. X    refresh();
  1923. X    errflag = 0;
  1924. X    while (!done && !errflag)
  1925. X        {
  1926. X        struct zlecmd *zc;
  1927. X        
  1928. X        statusline = NULL;
  1929. X        bindk = getkeycmd();
  1930. X        if (c == 4 && !ll)
  1931. X            {
  1932. X            eofsent = 1;
  1933. X            break;
  1934. X            }
  1935. X        if (bindk != -1)
  1936. X            {
  1937. X            zc = zlecmds+bindk;
  1938. X            if (!(lastcmd & ZLE_ARG))
  1939. X                mult = 1;
  1940. X            if ((lastcmd & ZLE_UNDO) != (zc->flags & ZLE_UNDO) && undoing)
  1941. X                addundo();
  1942. X            if (menucmp && !(zc->flags & ZLE_MENUCMP))
  1943. X                freemenu();
  1944. X            if (zc->func)
  1945. X                (zc->func)();
  1946. X            lastcmd = zc->flags;
  1947. X            if (!(lastcmd & ZLE_UNDO)) addundo();
  1948. X            }
  1949. X        else
  1950. X            {
  1951. X            errflag = 1;
  1952. X            break;
  1953. X            }
  1954. SHAR_EOF
  1955. true || echo 'restore of zsh2.1/src/zle_main.c failed'
  1956. fi
  1957. echo 'End of zsh2.1.0 part 11'
  1958. echo 'File zsh2.1/src/zle_main.c is continued in part 12'
  1959. echo 12 > _shar_seq_.tmp
  1960. exit 0
  1961.  
  1962. exit 0 # Just in case...
  1963. -- 
  1964. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1965. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1966. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1967. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1968.