[BACK]Return to mail.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / mg

Annotation of src/usr.bin/mg/mail.c, Revision 1.2

1.2     ! vincent     1: /* $OpenBSD: mail.c,v 1.1 2003/05/05 11:12:07 vincent Exp $ */
1.1       vincent     2: /*
                      3:  * This file is in the public domain.
                      4:  *
                      5:  * Author: Vincent Labrecque, April 2003
                      6:  */
                      7: #include <ctype.h>
                      8:
                      9: #include "def.h"
                     10: #include "kbd.h"
                     11: #include "funmap.h"
                     12:
                     13: #define LIMIT  72
                     14:
                     15: static int      fake_self_insert(int, int);
                     16: static int      mail(int, int);
                     17:
                     18: /* mappings for all "printable" characters ('-' -> '~') */
                     19: static PF mail_fake[] = {
                     20:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     21:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     22:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     23:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     24:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     25:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     26:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     27:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     28:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     29:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     30:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     31:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     32:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     33:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     34:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     35:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     36:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     37:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     38:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     39:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     40:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     41:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     42:        fake_self_insert, fake_self_insert, fake_self_insert, fake_self_insert,
                     43:        fake_self_insert, fake_self_insert, fake_self_insert,
                     44: };
                     45:
                     46: static struct KEYMAPE (1 + IMAPEXT) mailmap = {
                     47:        1,
                     48:        1 + IMAPEXT,
                     49:        rescan,
                     50:        {
                     51:                { ' ', '~', mail_fake, NULL },
                     52:        }
                     53: };
                     54:
                     55: void
                     56: mail_init(void)
                     57: {
                     58:        funmap_add(mail, "mail-mode");
                     59:        maps_add((KEYMAP *)&mailmap, "mail-mode");
                     60: }
                     61:
                     62: static int
                     63: mail(int f, int n)
                     64: {
                     65:        curbp->b_modes[0] = name_mode("fundamental");
                     66:        curbp->b_modes[1] = name_mode("mail-mode");
                     67:        if (curbp->b_modes[1] == NULL) {
                     68:                panic("can't happen");
                     69:                mail_init();
                     70:                curbp->b_modes[1] = name_mode("mail-mode");
                     71:        }
                     72:        curbp->b_nmodes = 1;
1.2     ! vincent    73:        curwp->w_flag |= WFMODE;
1.1       vincent    74:        return (TRUE);
                     75: }
                     76:
                     77: static int
                     78: fake_self_insert(int f, int n)
                     79: {
                     80:        if (curwp->w_doto >= LIMIT - 1) {
                     81:                int save = curwp->w_doto;
                     82:
                     83:                /*
                     84:                 * Find the last word boundary.
                     85:                 */
                     86:                while (curwp->w_doto > 0 &&
                     87:                    !isspace(curwp->w_dotp->l_text[curwp->w_doto - 1]))
                     88:                        curwp->w_doto--;
                     89:                /*
                     90:                 * handle lines without any spaces correctly!
                     91:                 */
                     92:                if (curwp->w_doto == 0 && !isspace(curwp->w_dotp->l_text[0]))
                     93:                        curwp->w_doto = save;
                     94:                newline(FFRAND, 1);
                     95:                gotoeol(0, 1);
                     96:        }
                     97:        selfinsert(f, n);
                     98:        return (TRUE);
                     99: }