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

Annotation of src/usr.bin/vim/digraph.c, Revision 1.1

1.1     ! downsj      1: /* $OpenBSD$   */
        !             2: /* vi:set ts=4 sw=4:
        !             3:  *
        !             4:  * VIM - Vi IMproved       by Bram Moolenaar
        !             5:  *
        !             6:  * Do ":help uganda"  in Vim to read copying and usage conditions.
        !             7:  * Do ":help credits" in Vim to see a list of people who contributed.
        !             8:  */
        !             9:
        !            10: /*
        !            11:  * digraph.c: code for digraphs
        !            12:  */
        !            13:
        !            14: #include "vim.h"
        !            15: #include "globals.h"
        !            16: #include "proto.h"
        !            17: #include "option.h"
        !            18:
        !            19: #ifdef DIGRAPHS
        !            20:
        !            21: static int getexactdigraph __ARGS((int, int, int));
        !            22: static void printdigraph __ARGS((char_u *));
        !            23:
        !            24: static char_u  (*digraphnew)[3];           /* pointer to added digraphs */
        !            25: static int     digraphcount = 0;           /* number of added digraphs */
        !            26:
        !            27: #if defined(MSDOS) || defined(WIN32) || defined(OS2)
        !            28: char_u digraphdefault[][3] =       /* standard MSDOS digraphs */
        !            29:       {{'C', ',', 128},    /* ~@ (SAS C can't handle the real char) */
        !            30:        {'u', '"', 129},    /*  */
        !            31:        {'e', '\'', 130},   /*  */
        !            32:        {'a', '^', 131},    /*  */
        !            33:        {'a', '"', 132},    /*  */
        !            34:        {'a', '`', 133},    /*  */
        !            35:        {'a', '@', 134},    /*  */
        !            36:        {'c', ',', 135},    /* ~G (SAS C can't handle the real char) */
        !            37:        {'e', '^', 136},    /* ~H (SAS C can't handle the real char) */
        !            38:        {'e', '"', 137},    /*  */
        !            39:        {'e', '`', 138},    /*  */
        !            40:        {'i', '"', 139},    /*  */
        !            41:        {'i', '^', 140},    /*  */
        !            42:        {'i', '`', 141},    /*  */
        !            43:        {'A', '"', 142},    /*  */
        !            44:        {'A', '@', 143},    /*  */
        !            45:        {'E', '\'', 144},   /*  */
        !            46:        {'a', 'e', 145},    /*  */
        !            47:        {'A', 'E', 146},    /*  */
        !            48:        {'o', '^', 147},    /*  */
        !            49:        {'o', '"', 148},    /*  */
        !            50:        {'o', '`', 149},    /*  */
        !            51:        {'u', '^', 150},    /*  */
        !            52:        {'u', '`', 151},    /*  */
        !            53:        {'y', '"', 152},    /*  */
        !            54:        {'O', '"', 153},    /*  */
        !            55:        {'U', '"', 154},    /*  */
        !            56:        {'c', '|', 155},    /*  */
        !            57:        {'$', '$', 156},    /*  */
        !            58:        {'Y', '-', 157},    /* ~] (SAS C can't handle the real char) */
        !            59:        {'P', 't', 158},    /*  */
        !            60:        {'f', 'f', 159},    /*  */
        !            61:        {'a', '\'', 160},   /*  */
        !            62:        {'i', '\'', 161},   /*  */
        !            63:        {'o', '\'', 162},   /*  */
        !            64:        {'u', '\'', 163},   /* xx (SAS C can't handle the real char) */
        !            65:        {'n', '~', 164},    /*  */
        !            66:        {'N', '~', 165},    /*  */
        !            67:        {'a', 'a', 166},    /*  */
        !            68:        {'o', 'o', 167},    /*  */
        !            69:        {'~', '?', 168},    /*  */
        !            70:        {'-', 'a', 169},    /*  */
        !            71:        {'a', '-', 170},    /*  */
        !            72:        {'1', '2', 171},    /*  */
        !            73:        {'1', '4', 172},    /*  */
        !            74:        {'~', '!', 173},    /*  */
        !            75:        {'<', '<', 174},    /*  */
        !            76:        {'>', '>', 175},    /*  */
        !            77:
        !            78:        {'s', 's', 225},    /*  */
        !            79:        {'j', 'u', 230},    /*  */
        !            80:        {'o', '/', 237},    /*  */
        !            81:        {'+', '-', 241},    /*  */
        !            82:        {'>', '=', 242},    /*  */
        !            83:        {'<', '=', 243},    /*  */
        !            84:        {':', '-', 246},    /*  */
        !            85:        {'~', '~', 247},    /*  */
        !            86:        {'~', 'o', 248},    /*  */
        !            87:        {'2', '2', 253},    /*  */
        !            88:        {NUL, NUL, NUL}
        !            89:        };
        !            90:
        !            91: #else  /* !MSDOS && !WIN32 */
        !            92: # ifdef MINT
        !            93: char_u digraphdefault[][3] =       /* standard ATARI digraphs */
        !            94:       {{'C', ',', 128},    /* ~@ */
        !            95:        {'u', '"', 129},    /*  */
        !            96:        {'e', '\'', 130},   /*  */
        !            97:        {'a', '^', 131},    /*  */
        !            98:        {'a', '"', 132},    /*  */
        !            99:        {'a', '`', 133},    /*  */
        !           100:        {'a', '@', 134},    /*  */
        !           101:        {'c', ',', 135},    /* ~G */
        !           102:        {'e', '^', 136},    /* ~H */
        !           103:        {'e', '"', 137},    /*  */
        !           104:        {'e', '`', 138},    /*  */
        !           105:        {'i', '"', 139},    /*  */
        !           106:        {'i', '^', 140},    /*  */
        !           107:        {'i', '`', 141},    /*  */
        !           108:        {'A', '"', 142},    /*  */
        !           109:        {'A', '@', 143},    /*  */
        !           110:        {'E', '\'', 144},   /*  */
        !           111:        {'a', 'e', 145},    /*  */
        !           112:        {'A', 'E', 146},    /*  */
        !           113:        {'o', '^', 147},    /*  */
        !           114:        {'o', '"', 148},    /*  */
        !           115:        {'o', '`', 149},    /*  */
        !           116:        {'u', '^', 150},    /*  */
        !           117:        {'u', '`', 151},    /*  */
        !           118:        {'y', '"', 152},    /*  */
        !           119:        {'O', '"', 153},    /*  */
        !           120:        {'U', '"', 154},    /*  */
        !           121:        {'c', '|', 155},    /*  */
        !           122:        {'$', '$', 156},    /*  */
        !           123:        {'Y', '-', 157},    /* ~] */
        !           124:        {'s', 's', 158},    /*  */
        !           125:        {'f', 'f', 159},    /*  */
        !           126:        {'a', '\'', 160},   /*  */
        !           127:        {'i', '\'', 161},   /*  */
        !           128:        {'o', '\'', 162},   /*  */
        !           129:        {'u', '\'', 163},   /*  */
        !           130:        {'n', '~', 164},    /*  */
        !           131:        {'N', '~', 165},    /*  */
        !           132:        {'a', 'a', 166},    /*  */
        !           133:        {'o', 'o', 167},    /*  */
        !           134:        {'~', '?', 168},    /*  */
        !           135:        {'-', 'a', 169},    /*  */
        !           136:        {'a', '-', 170},    /*  */
        !           137:        {'1', '2', 171},    /*  */
        !           138:        {'1', '4', 172},    /*  */
        !           139:        {'~', '!', 173},    /*  */
        !           140:        {'<', '<', 174},    /*  */
        !           141:        {'>', '>', 175},    /*  */
        !           142:        {'j', 'u', 230},    /*  */
        !           143:        {'o', '/', 237},    /*  */
        !           144:        {'+', '-', 241},    /*  */
        !           145:        {'>', '=', 242},    /*  */
        !           146:        {'<', '=', 243},    /*  */
        !           147:        {':', '-', 246},    /*  */
        !           148:        {'~', '~', 247},    /*  */
        !           149:        {'~', 'o', 248},    /*  */
        !           150:        {'2', '2', 253},    /*  */
        !           151:        {NUL, NUL, NUL}
        !           152:        };
        !           153:
        !           154: # else /* !MINT */
        !           155: #  ifdef _INCLUDE_HPUX_SOURCE
        !           156:
        !           157: char_u digraphdefault[][3] =       /* default HPUX digraphs */
        !           158:       {{'A', '`', 161},    /*  */
        !           159:        {'A', '^', 162},    /*  */
        !           160:        {'E', '`', 163},    /*  */
        !           161:        {'E', '^', 164},    /*  */
        !           162:        {'E', '"', 165},    /*  */
        !           163:        {'I', '^', 166},    /*  */
        !           164:        {'I', '"', 167},    /*  */
        !           165:        {'\'', '\'', 168},  /*  */
        !           166:        {'`', '`', 169},    /*  */
        !           167:        {'^', '^', 170},    /*  */
        !           168:        {'"', '"', 171},    /*  */
        !           169:        {'~', '~', 172},    /*  */
        !           170:        {'U', '`', 173},    /*  */
        !           171:        {'U', '^', 174},    /*  */
        !           172:        {'L', '=', 175},    /*  */
        !           173:        {'~', '_', 176},    /*  */
        !           174:        {'Y', '\'', 177},   /*  */
        !           175:        {'y', '\'', 178},   /*  */
        !           176:        {'~', 'o', 179},    /*  */
        !           177:        {'C', ',', 180},    /*  */
        !           178:        {'c', ',', 181},    /*  */
        !           179:        {'N', '~', 182},    /*  */
        !           180:        {'n', '~', 183},    /*  */
        !           181:        {'~', '!', 184},    /*  */
        !           182:        {'~', '?', 185},    /*  */
        !           183:        {'o', 'x', 186},    /*  */
        !           184:        {'L', '-', 187},    /*  */
        !           185:        {'Y', '=', 188},    /*  */
        !           186:        {'p', 'p', 189},    /*  */
        !           187:        {'f', 'l', 190},    /*  */
        !           188:        {'c', '|', 191},    /*  */
        !           189:        {'a', '^', 192},    /*  */
        !           190:        {'e', '^', 193},    /*  */
        !           191:        {'o', '^', 194},    /*  */
        !           192:        {'u', '^', 195},    /*  */
        !           193:        {'a', '\'', 196},   /*  */
        !           194:        {'e', '\'', 197},   /*  */
        !           195:        {'o', '\'', 198},   /*  */
        !           196:        {'u', '\'', 199},   /*  */
        !           197:        {'a', '`', 200},    /*  */
        !           198:        {'e', '`', 201},    /*  */
        !           199:        {'o', '`', 202},    /*  */
        !           200:        {'u', '`', 203},    /*  */
        !           201:        {'a', '"', 204},    /*  */
        !           202:        {'e', '"', 205},    /*  */
        !           203:        {'o', '"', 206},    /*  */
        !           204:        {'u', '"', 207},    /*  */
        !           205:        {'A', 'o', 208},    /*  */
        !           206:        {'i', '^', 209},    /*  */
        !           207:        {'O', '/', 210},    /*  */
        !           208:        {'A', 'E', 211},    /*  */
        !           209:        {'a', 'o', 212},    /*  */
        !           210:        {'i', '\'', 213},   /*  */
        !           211:        {'o', '/', 214},    /*  */
        !           212:        {'a', 'e', 215},    /*  */
        !           213:        {'A', '"', 216},    /*  */
        !           214:        {'i', '`', 217},    /*  */
        !           215:        {'O', '"', 218},    /*  */
        !           216:        {'U', '"', 219},    /*  */
        !           217:        {'E', '\'', 220},   /*  */
        !           218:        {'i', '"', 221},    /*  */
        !           219:        {'s', 's', 222},    /*  */
        !           220:        {'O', '^', 223},    /*  */
        !           221:        {'A', '\'', 224},   /*  */
        !           222:        {'A', '~', 225},    /*  */
        !           223:        {'a', '~', 226},    /*  */
        !           224:        {'D', '-', 227},    /*  */
        !           225:        {'d', '-', 228},    /*  */
        !           226:        {'I', '\'', 229},   /*  */
        !           227:        {'I', '`', 230},    /*  */
        !           228:        {'O', '\'', 231},   /*  */
        !           229:        {'O', '`', 232},    /*  */
        !           230:        {'O', '~', 233},    /*  */
        !           231:        {'o', '~', 234},    /*  */
        !           232:        {'S', '~', 235},    /*  */
        !           233:        {'s', '~', 236},    /*  */
        !           234:        {'U', '\'', 237},   /*  */
        !           235:        {'Y', '"', 238},    /*  */
        !           236:        {'y', '"', 239},    /*  */
        !           237:        {'p', '-', 240},    /*  */
        !           238:        {'p', '~', 241},    /*  */
        !           239:        {'~', '.', 242},    /*  */
        !           240:        {'j', 'u', 243},    /*  */
        !           241:        {'P', 'p', 244},    /*  */
        !           242:        {'3', '4', 245},    /*  */
        !           243:        {'-', '-', 246},    /*  */
        !           244:        {'1', '4', 247},    /*  */
        !           245:        {'1', '2', 248},    /*  */
        !           246:        {'a', '_', 249},    /*  */
        !           247:        {'o', '_', 250},    /*  */
        !           248:        {'<', '<', 251},    /*  */
        !           249:        {'x', 'x', 252},    /*  */
        !           250:        {'>', '>', 253},    /*  */
        !           251:        {'+', '-', 254},    /*  */
        !           252:        {'n', 'u', 255},    /* (char excluded, is EOF on some systems */
        !           253:        {NUL, NUL, NUL}
        !           254:        };
        !           255:
        !           256: #  else    /* _INCLUDE_HPUX_SOURCE */
        !           257:
        !           258: char_u digraphdefault[][3] =       /* standard ISO digraphs */
        !           259:       {{'~', '!', 161},    /*  */
        !           260:        {'c', '|', 162},    /*  */
        !           261:        {'$', '$', 163},    /*  */
        !           262:        {'o', 'x', 164},    /*  */
        !           263:        {'Y', '-', 165},    /*  */
        !           264:        {'|', '|', 166},    /*  */
        !           265:        {'p', 'a', 167},    /*  */
        !           266:        {'"', '"', 168},    /*  */
        !           267:        {'c', 'O', 169},    /*  */
        !           268:        {'a', '-', 170},    /*  */
        !           269:        {'<', '<', 171},    /*  */
        !           270:        {'-', ',', 172},    /*  */
        !           271:        {'-', '-', 173},    /*  */
        !           272:        {'r', 'O', 174},    /*  */
        !           273:        {'-', '=', 175},    /*  */
        !           274:        {'~', 'o', 176},    /*  */
        !           275:        {'+', '-', 177},    /*  */
        !           276:        {'2', '2', 178},    /*  */
        !           277:        {'3', '3', 179},    /*  */
        !           278:        {'\'', '\'', 180},  /*  */
        !           279:        {'j', 'u', 181},    /*  */
        !           280:        {'p', 'p', 182},    /*  */
        !           281:        {'~', '.', 183},    /*  */
        !           282:        {',', ',', 184},    /*  */
        !           283:        {'1', '1', 185},    /*  */
        !           284:        {'o', '-', 186},    /*  */
        !           285:        {'>', '>', 187},    /*  */
        !           286:        {'1', '4', 188},    /*  */
        !           287:        {'1', '2', 189},    /*  */
        !           288:        {'3', '4', 190},    /*  */
        !           289:        {'~', '?', 191},    /*  */
        !           290:        {'A', '`', 192},    /*  */
        !           291:        {'A', '\'', 193},   /*  */
        !           292:        {'A', '^', 194},    /*  */
        !           293:        {'A', '~', 195},    /*  */
        !           294:        {'A', '"', 196},    /*  */
        !           295:        {'A', '@', 197},    /*  */
        !           296:        {'A', 'E', 198},    /*  */
        !           297:        {'C', ',', 199},    /*  */
        !           298:        {'E', '`', 200},    /*  */
        !           299:        {'E', '\'', 201},   /*  */
        !           300:        {'E', '^', 202},    /*  */
        !           301:        {'E', '"', 203},    /*  */
        !           302:        {'I', '`', 204},    /*  */
        !           303:        {'I', '\'', 205},   /*  */
        !           304:        {'I', '^', 206},    /*  */
        !           305:        {'I', '"', 207},    /*  */
        !           306:        {'D', '-', 208},    /*  */
        !           307:        {'N', '~', 209},    /*  */
        !           308:        {'O', '`', 210},    /*  */
        !           309:        {'O', '\'', 211},   /*  */
        !           310:        {'O', '^', 212},    /*  */
        !           311:        {'O', '~', 213},    /*  */
        !           312:        {'O', '"', 214},    /*  */
        !           313:        {'/', '\\', 215},   /*  */
        !           314:        {'O', '/', 216},    /*  */
        !           315:        {'U', '`', 217},    /*  */
        !           316:        {'U', '\'', 218},   /*  */
        !           317:        {'U', '^', 219},    /*  */
        !           318:        {'U', '"', 220},    /*  */
        !           319:        {'Y', '\'', 221},   /*  */
        !           320:        {'I', 'p', 222},    /*  */
        !           321:        {'s', 's', 223},    /*  */
        !           322:        {'a', '`', 224},    /*  */
        !           323:        {'a', '\'', 225},   /*  */
        !           324:        {'a', '^', 226},    /*  */
        !           325:        {'a', '~', 227},    /*  */
        !           326:        {'a', '"', 228},    /*  */
        !           327:        {'a', '@', 229},    /*  */
        !           328:        {'a', 'e', 230},    /*  */
        !           329:        {'c', ',', 231},    /*  */
        !           330:        {'e', '`', 232},    /*  */
        !           331:        {'e', '\'', 233},   /*  */
        !           332:        {'e', '^', 234},    /*  */
        !           333:        {'e', '"', 235},    /*  */
        !           334:        {'i', '`', 236},    /*  */
        !           335:        {'i', '\'', 237},   /*  */
        !           336:        {'i', '^', 238},    /*  */
        !           337:        {'i', '"', 239},    /*  */
        !           338:        {'d', '-', 240},    /*  */
        !           339:        {'n', '~', 241},    /*  */
        !           340:        {'o', '`', 242},    /*  */
        !           341:        {'o', '\'', 243},   /*  */
        !           342:        {'o', '^', 244},    /*  */
        !           343:        {'o', '~', 245},    /*  */
        !           344:        {'o', '"', 246},    /*  */
        !           345:        {':', '-', 247},    /*  */
        !           346:        {'o', '/', 248},    /*  */
        !           347:        {'u', '`', 249},    /*  */
        !           348:        {'u', '\'', 250},   /*  */
        !           349:        {'u', '^', 251},    /*  */
        !           350:        {'u', '"', 252},    /*  */
        !           351:        {'y', '\'', 253},   /*  */
        !           352:        {'i', 'p', 254},    /*  */
        !           353:        {'y', '"', 255},    /* (char excluded, is EOF on some systems */
        !           354:        {NUL, NUL, NUL}
        !           355:        };
        !           356:
        !           357: #  endif   /* _INCLUDE_HPUX_SOURCE */
        !           358: # endif    /* !MINT */
        !           359: #endif /* !MSDOS && !WIN32 */
        !           360:
        !           361: /*
        !           362:  * handle digraphs after typing a character
        !           363:  */
        !           364:    int
        !           365: do_digraph(c)
        !           366:    int     c;
        !           367: {
        !           368:    static int  backspaced;     /* character before K_BS */
        !           369:    static int  lastchar;       /* last typed character */
        !           370:
        !           371:    if (c == -1)                /* init values */
        !           372:    {
        !           373:        backspaced = -1;
        !           374:    }
        !           375:    else if (p_dg)
        !           376:    {
        !           377:        if (backspaced >= 0)
        !           378:            c = getdigraph(backspaced, c, FALSE);
        !           379:        backspaced = -1;
        !           380:        if ((c == K_BS || c == Ctrl('H')) && lastchar >= 0)
        !           381:            backspaced = lastchar;
        !           382:    }
        !           383:    lastchar = c;
        !           384:    return c;
        !           385: }
        !           386:
        !           387: /*
        !           388:  * lookup the pair char1, char2 in the digraph tables
        !           389:  * if no match, return char2
        !           390:  */
        !           391:    static int
        !           392: getexactdigraph(char1, char2, meta)
        !           393:    int char1;
        !           394:    int char2;
        !           395:    int meta;
        !           396: {
        !           397:    int     i;
        !           398:    int     retval;
        !           399:
        !           400:    if (IS_SPECIAL(char1) || IS_SPECIAL(char2))
        !           401:        return char2;
        !           402:    retval = 0;
        !           403:    for (i = 0; ; ++i)          /* search added digraphs first */
        !           404:    {
        !           405:        if (i == digraphcount)  /* end of added table, search defaults */
        !           406:        {
        !           407:            for (i = 0; digraphdefault[i][0] != 0; ++i)
        !           408:                if (digraphdefault[i][0] == char1 && digraphdefault[i][1] == char2)
        !           409:                {
        !           410:                    retval = digraphdefault[i][2];
        !           411:                    break;
        !           412:                }
        !           413:            break;
        !           414:        }
        !           415:        if (digraphnew[i][0] == char1 && digraphnew[i][1] == char2)
        !           416:        {
        !           417:            retval = digraphnew[i][2];
        !           418:            break;
        !           419:        }
        !           420:    }
        !           421:
        !           422:    if (retval == 0)            /* digraph deleted or not found */
        !           423:    {
        !           424:        if (char1 == ' ' && meta)       /* <space> <char> --> meta-char */
        !           425:            return (char2 | 0x80);
        !           426:        return char2;
        !           427:    }
        !           428:    return retval;
        !           429: }
        !           430:
        !           431: /*
        !           432:  * Get digraph.
        !           433:  * Allow for both char1-char2 and char2-char1
        !           434:  */
        !           435:    int
        !           436: getdigraph(char1, char2, meta)
        !           437:    int char1;
        !           438:    int char2;
        !           439:    int meta;
        !           440: {
        !           441:    int     retval;
        !           442:
        !           443:    if (((retval = getexactdigraph(char1, char2, meta)) == char2) &&
        !           444:                                                           (char1 != char2) &&
        !           445:                    ((retval = getexactdigraph(char2, char1, meta)) == char1))
        !           446:        return char2;
        !           447:    return retval;
        !           448: }
        !           449:
        !           450: /*
        !           451:  * put the digraphs in the argument string in the digraph table
        !           452:  * format: {c1}{c2} char {c1}{c2} char ...
        !           453:  */
        !           454:    void
        !           455: putdigraph(str)
        !           456:    char_u *str;
        !           457: {
        !           458:    int     char1, char2, n;
        !           459:    char_u  (*newtab)[3];
        !           460:    int     i;
        !           461:
        !           462:    while (*str)
        !           463:    {
        !           464:        str = skipwhite(str);
        !           465:        if ((char1 = *str++) == 0 || (char2 = *str++) == 0)
        !           466:            return;
        !           467:        if (char1 == ESC || char2 == ESC)
        !           468:        {
        !           469:            EMSG("Escape not allowed in digraph");
        !           470:            return;
        !           471:        }
        !           472:        str = skipwhite(str);
        !           473:        if (!isdigit(*str))
        !           474:        {
        !           475:            emsg(e_number);
        !           476:            return;
        !           477:        }
        !           478:        n = getdigits(&str);
        !           479:        if (digraphnew)     /* search the table for existing entry */
        !           480:        {
        !           481:            for (i = 0; i < digraphcount; ++i)
        !           482:                if (digraphnew[i][0] == char1 && digraphnew[i][1] == char2)
        !           483:                {
        !           484:                    digraphnew[i][2] = n;
        !           485:                    break;
        !           486:                }
        !           487:            if (i < digraphcount)
        !           488:                continue;
        !           489:        }
        !           490:        newtab = (char_u (*)[3])alloc(digraphcount * 3 + 3);
        !           491:        if (newtab)
        !           492:        {
        !           493:            vim_memmove((char *)newtab, (char *)digraphnew,
        !           494:                                                  (size_t)(digraphcount * 3));
        !           495:            vim_free(digraphnew);
        !           496:            digraphnew = newtab;
        !           497:            digraphnew[digraphcount][0] = char1;
        !           498:            digraphnew[digraphcount][1] = char2;
        !           499:            digraphnew[digraphcount][2] = n;
        !           500:            ++digraphcount;
        !           501:        }
        !           502:    }
        !           503: }
        !           504:
        !           505:    void
        !           506: listdigraphs()
        !           507: {
        !           508:    int     i;
        !           509:
        !           510:    msg_outchar('\n');
        !           511:    printdigraph(NULL);
        !           512:    for (i = 0; digraphdefault[i][0] && !got_int; ++i)
        !           513:    {
        !           514:        if (getexactdigraph(digraphdefault[i][0], digraphdefault[i][1],
        !           515:                                               FALSE) == digraphdefault[i][2])
        !           516:            printdigraph(digraphdefault[i]);
        !           517:        mch_breakcheck();
        !           518:    }
        !           519:    for (i = 0; i < digraphcount && !got_int; ++i)
        !           520:    {
        !           521:        printdigraph(digraphnew[i]);
        !           522:        mch_breakcheck();
        !           523:    }
        !           524:    must_redraw = CLEAR;    /* clear screen, because some digraphs may be wrong,
        !           525:                             * in which case we messed up NextScreen */
        !           526: }
        !           527:
        !           528:    static void
        !           529: printdigraph(p)
        !           530:    char_u *p;
        !           531: {
        !           532:    char_u      buf[9];
        !           533:    static int  len;
        !           534:
        !           535:    if (p == NULL)
        !           536:        len = 0;
        !           537:    else if (p[2] != 0)
        !           538:    {
        !           539:        if (len > Columns - 11)
        !           540:        {
        !           541:            msg_outchar('\n');
        !           542:            len = 0;
        !           543:        }
        !           544:        if (len)
        !           545:            MSG_OUTSTR("   ");
        !           546:        sprintf((char *)buf, "%c%c %c %3d", p[0], p[1], p[2], p[2]);
        !           547:        msg_outstr(buf);
        !           548:        len += 11;
        !           549:    }
        !           550: }
        !           551:
        !           552: #endif /* DIGRAPHS */