LCOV - code coverage report
Current view: top level - dev/ic - pcdisplay_chars.c (source / functions) Hit Total Coverage
Test: 6.4 Lines: 0 18 0.0 %
Date: 2018-10-19 03:25:38 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* $OpenBSD: pcdisplay_chars.c,v 1.5 2010/08/28 12:48:14 miod Exp $ */
       2             : /* $NetBSD: pcdisplay_chars.c,v 1.5 2000/06/08 07:01:19 cgd Exp $ */
       3             : 
       4             : /*
       5             :  * Copyright (c) 1998
       6             :  *      Matthias Drochner.  All rights reserved.
       7             :  *
       8             :  * Redistribution and use in source and binary forms, with or without
       9             :  * modification, are permitted provided that the following conditions
      10             :  * are met:
      11             :  * 1. Redistributions of source code must retain the above copyright
      12             :  *    notice, this list of conditions and the following disclaimer.
      13             :  * 2. Redistributions in binary form must reproduce the above copyright
      14             :  *    notice, this list of conditions and the following disclaimer in the
      15             :  *    documentation and/or other materials provided with the distribution.
      16             :  *
      17             :  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
      18             :  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
      19             :  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
      20             :  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
      21             :  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
      22             :  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
      23             :  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      24             :  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
      25             :  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
      26             :  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
      27             :  *
      28             :  */
      29             : 
      30             : #include <sys/param.h>
      31             : #include <sys/systm.h>
      32             : #include <sys/device.h>
      33             : #include <machine/bus.h>
      34             : 
      35             : #include <dev/ic/mc6845reg.h>
      36             : #include <dev/ic/pcdisplayvar.h>
      37             : 
      38             : #include <dev/wscons/unicode.h>
      39             : 
      40             : #define CONTROL 1 /* XXX smiley */
      41             : #define NOTPRINTABLE 4 /* diamond XXX watch out - not in ISO part! */
      42             : 
      43             : static const u_char isomappings[128] = {
      44             :         CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL,
      45             :         CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL,
      46             :         CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL,
      47             :         CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL, CONTROL,
      48             :         0xff, /* 0x00a0 NO-BREAK SPACE */
      49             :         0xad, /* 0x00a1 INVERTED EXCLAMATION MARK */
      50             :         0x9b, /* 0x00a2 CENT SIGN */
      51             :         0x9c, /* 0x00a3 POUND SIGN */
      52             :         NOTPRINTABLE, /* 0x00a4 CURRENCY SIGN */
      53             :         0x9d, /* 0x00a5 YEN SIGN */
      54             :         0x7c, /* 0x00a6 BROKEN BAR */
      55             :         0x15, /* 0x00a7 SECTION SIGN */
      56             :         NOTPRINTABLE, /* 0x00a8 DIAERESIS */
      57             :         NOTPRINTABLE, /* 0x00a9 COPYRIGHT SIGN */
      58             :         0xa6, /* 0x00aa FEMININE ORDINAL INDICATOR */
      59             :         0xae, /* 0x00ab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
      60             :         0xaa, /* 0x00ac NOT SIGN */
      61             :         0xc4, /* 0x00ad SOFT HYPHEN */
      62             :         NOTPRINTABLE, /* 0x00ae REGISTERED SIGN */
      63             :         NOTPRINTABLE, /* 0x00af MACRON */
      64             :         0xf8, /* 0x00b0 DEGREE SIGN */
      65             :         0xf1, /* 0x00b1 PLUS-MINUS SIGN */
      66             :         0xfd, /* 0x00b2 SUPERSCRIPT TWO */
      67             :         NOTPRINTABLE, /* 0x00b3 SUPERSCRIPT THREE */
      68             :         0x27, /* 0x00b4 ACUTE ACCENT */
      69             :         0xe6, /* 0x00b5 MICRO SIGN */
      70             :         0x14, /* 0x00b6 PILCROW SIGN */
      71             :         0xfa, /* 0x00b7 MIDDLE DOT */
      72             :         NOTPRINTABLE, /* 0x00b8 CEDILLA */
      73             :         NOTPRINTABLE, /* 0x00b9 SUPERSCRIPT ONE */
      74             :         0xa7, /* 0x00ba MASCULINE ORDINAL INDICATOR */
      75             :         0xaf, /* 0x00bb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
      76             :         0xac, /* 0x00bc VULGAR FRACTION ONE QUARTER */
      77             :         0xab, /* 0x00bd VULGAR FRACTION ONE HALF */
      78             :         NOTPRINTABLE, /* 0x00be VULGAR FRACTION THREE QUARTERS */
      79             :         0xa8, /* 0x00bf INVERTED QUESTION MARK */
      80             :         NOTPRINTABLE, /* 0x00c0 LATIN CAPITAL LETTER A WITH GRAVE */
      81             :         NOTPRINTABLE, /* 0x00c1 LATIN CAPITAL LETTER A WITH ACUTE */
      82             :         NOTPRINTABLE, /* 0x00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
      83             :         NOTPRINTABLE, /* 0x00c3 LATIN CAPITAL LETTER A WITH TILDE */
      84             :         0x8e, /* 0x00c4 LATIN CAPITAL LETTER A WITH DIAERESIS */
      85             :         0x8f, /* 0x00c5 LATIN CAPITAL LETTER A WITH RING ABOVE */
      86             :         0x92, /* 0x00c6 LATIN CAPITAL LIGATURE AE */
      87             :         0x80, /* 0x00c7 LATIN CAPITAL LETTER C WITH CEDILLA */
      88             :         NOTPRINTABLE, /* 0x00c8 LATIN CAPITAL LETTER E WITH GRAVE */
      89             :         0x90, /* 0x00c9 LATIN CAPITAL LETTER E WITH ACUTE */
      90             :         NOTPRINTABLE, /* 0x00ca LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
      91             :         NOTPRINTABLE, /* 0x00cb LATIN CAPITAL LETTER E WITH DIAERESIS */
      92             :         NOTPRINTABLE, /* 0x00cc LATIN CAPITAL LETTER I WITH GRAVE */
      93             :         NOTPRINTABLE, /* 0x00cd LATIN CAPITAL LETTER I WITH ACUTE */
      94             :         NOTPRINTABLE, /* 0x00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
      95             :         NOTPRINTABLE, /* 0x00cf LATIN CAPITAL LETTER I WITH DIAERESIS */
      96             :         NOTPRINTABLE, /* 0x00d0 LATIN CAPITAL LETTER ETH */
      97             :         0xa5, /* 0x00d1 LATIN CAPITAL LETTER N WITH TILDE */
      98             :         NOTPRINTABLE, /* 0x00d2 LATIN CAPITAL LETTER O WITH GRAVE */
      99             :         NOTPRINTABLE, /* 0x00d3 LATIN CAPITAL LETTER O WITH ACUTE */
     100             :         NOTPRINTABLE, /* 0x00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
     101             :         NOTPRINTABLE, /* 0x00d5 LATIN CAPITAL LETTER O WITH TILDE */
     102             :         0x99, /* 0x00d6 LATIN CAPITAL LETTER O WITH DIAERESIS */
     103             :         NOTPRINTABLE, /* 0x00d7 MULTIPLICATION SIGN */
     104             :         NOTPRINTABLE, /* 0x00d8 LATIN CAPITAL LETTER O WITH STROKE */
     105             :         NOTPRINTABLE, /* 0x00d9 LATIN CAPITAL LETTER U WITH GRAVE */
     106             :         NOTPRINTABLE, /* 0x00da LATIN CAPITAL LETTER U WITH ACUTE */
     107             :         NOTPRINTABLE, /* 0x00db LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
     108             :         0x9a, /* 0x00dc LATIN CAPITAL LETTER U WITH DIAERESIS */
     109             :         NOTPRINTABLE, /* 0x00dd LATIN CAPITAL LETTER Y WITH ACUTE */
     110             :         NOTPRINTABLE, /* 0x00de LATIN CAPITAL LETTER THORN */
     111             :         0xe1, /* 0x00df LATIN SMALL LETTER SHARP S */
     112             :         0x85, /* 0x00e0 LATIN SMALL LETTER A WITH GRAVE */
     113             :         0xa0, /* 0x00e1 LATIN SMALL LETTER A WITH ACUTE */
     114             :         0x83, /* 0x00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX */
     115             :         NOTPRINTABLE, /* 0x00e3 LATIN SMALL LETTER A WITH TILDE */
     116             :         0x84, /* 0x00e4 LATIN SMALL LETTER A WITH DIAERESIS */
     117             :         0x86, /* 0x00e5 LATIN SMALL LETTER A WITH RING ABOVE */
     118             :         0x91, /* 0x00e6 LATIN SMALL LIGATURE AE */
     119             :         0x87, /* 0x00e7 LATIN SMALL LETTER C WITH CEDILLA */
     120             :         0x8a, /* 0x00e8 LATIN SMALL LETTER E WITH GRAVE */
     121             :         0x82, /* 0x00e9 LATIN SMALL LETTER E WITH ACUTE */
     122             :         0x88, /* 0x00ea LATIN SMALL LETTER E WITH CIRCUMFLEX */
     123             :         0x89, /* 0x00eb LATIN SMALL LETTER E WITH DIAERESIS */
     124             :         0x8d, /* 0x00ec LATIN SMALL LETTER I WITH GRAVE */
     125             :         0xa1, /* 0x00ed LATIN SMALL LETTER I WITH ACUTE */
     126             :         0x8c, /* 0x00ee LATIN SMALL LETTER I WITH CIRCUMFLEX */
     127             :         0x8b, /* 0x00ef LATIN SMALL LETTER I WITH DIAERESIS */
     128             :         NOTPRINTABLE, /* 0x00f0 LATIN SMALL LETTER ETH */
     129             :         0xa4, /* 0x00f1 LATIN SMALL LETTER N WITH TILDE */
     130             :         0x95, /* 0x00f2 LATIN SMALL LETTER O WITH GRAVE */
     131             :         0xa2, /* 0x00f3 LATIN SMALL LETTER O WITH ACUTE */
     132             :         0x93, /* 0x00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX */
     133             :         NOTPRINTABLE, /* 0x00f5 LATIN SMALL LETTER O WITH TILDE */
     134             :         0x94, /* 0x00f6 LATIN SMALL LETTER O WITH DIAERESIS */
     135             :         0xf6, /* 0x00f7 DIVISION SIGN */
     136             :         NOTPRINTABLE, /* 0x00f8 LATIN SMALL LETTER O WITH STROKE */
     137             :         0x97, /* 0x00f9 LATIN SMALL LETTER U WITH GRAVE */
     138             :         0xa3, /* 0x00fa LATIN SMALL LETTER U WITH ACUTE */
     139             :         0x96, /* 0x00fb LATIN SMALL LETTER U WITH CIRCUMFLEX */
     140             :         0x81, /* 0x00fc LATIN SMALL LETTER U WITH DIAERESIS */
     141             :         NOTPRINTABLE, /* 0x00fd LATIN SMALL LETTER Y WITH ACUTE */
     142             :         NOTPRINTABLE, /* 0x00fe LATIN SMALL LETTER THORN */
     143             :         0x98, /* 0x00ff LATIN SMALL LETTER Y WITH DIAERESIS */
     144             : };
     145             : 
     146             : static const struct {
     147             :         u_int16_t uni;
     148             :         u_char ibm;
     149             : } unimappings[] = {
     150             :         {0x0192, 0x9f}, /* LATIN SMALL LETTER F WITH HOOK */
     151             :         {0x0393, 0xe2}, /* GREEK CAPITAL LETTER GAMMA */
     152             :         {0x0398, 0xe9}, /* GREEK CAPITAL LETTER THETA */
     153             :         {0x03a3, 0xe4}, /* GREEK CAPITAL LETTER SIGMA */
     154             :         {0x03a6, 0xe8}, /* GREEK CAPITAL LETTER PHI */
     155             :         {0x03a9, 0xea}, /* GREEK CAPITAL LETTER OMEGA */
     156             :         {0x03b1, 0xe0}, /* GREEK SMALL LETTER ALPHA */
     157             :         {0x03b2, 0xe1}, /* GREEK SMALL LETTER BETA */
     158             :         {0x03b4, 0xeb}, /* GREEK SMALL LETTER DELTA */
     159             :         {0x03b5, 0xee}, /* GREEK SMALL LETTER EPSILON */
     160             :         {0x03c0, 0xe3}, /* GREEK SMALL LETTER PI */
     161             :         {0x03c3, 0xe5}, /* GREEK SMALL LETTER SIGMA */
     162             :         {0x03c4, 0xe7}, /* GREEK SMALL LETTER TAU */
     163             :         {0x03c6, 0xed}, /* GREEK SMALL LETTER PHI */
     164             :         {0x2022, 0x07}, /* BULLET */
     165             :         {0x203c, 0x13}, /* DOUBLE EXCLAMATION MARK */
     166             :         {0x207f, 0xfc}, /* SUPERSCRIPT LATIN SMALL LETTER N */
     167             :         {0x20a7, 0x9e}, /* PESETA SIGN */
     168             :         {0x2190, 0x1b}, /* LEFTWARDS ARROW */
     169             :         {0x2191, 0x18}, /* UPWARDS ARROW */
     170             :         {0x2192, 0x1a}, /* RIGHTWARDS ARROW */
     171             :         {0x2193, 0x19}, /* DOWNWARDS ARROW */
     172             :         {0x2194, 0x1d}, /* LEFT RIGHT ARROW */
     173             :         {0x2195, 0x12}, /* UP DOWN ARROW */
     174             :         {0x21a8, 0x17}, /* UP DOWN ARROW WITH BASE */
     175             :         {0x2212, 0x2d}, /* MINUS SIGN XXX move to more general place */
     176             :         {0x2215, 0x2f}, /* DIVISION SLASH XXX move to more general place */
     177             :         {0x2219, 0xf9}, /* BULLET OPERATOR */
     178             :         {0x221a, 0xfb}, /* SQUARE ROOT */
     179             :         {0x221e, 0xec}, /* INFINITY */
     180             :         {0x2229, 0xef}, /* INTERSECTION */
     181             :         {0x2248, 0xf7}, /* ALMOST EQUAL TO */
     182             :         {0x2261, 0xf0}, /* IDENTICAL TO */
     183             :         {0x2264, 0xf3}, /* LESS-THAN OR EQUAL TO */
     184             :         {0x2265, 0xf2}, /* GREATER-THAN OR EQUAL TO */
     185             :         {0x2302, 0x7f}, /* HOUSE */
     186             :         {0x2310, 0xa9}, /* REVERSED NOT SIGN */
     187             :         {0x2320, 0xf4}, /* TOP HALF INTEGRAL */
     188             :         {0x2321, 0xf5}, /* BOTTOM HALF INTEGRAL */
     189             :         {0x2500, 0xc4}, /* BOX DRAWINGS LIGHT HORIZONTAL */
     190             :         {0x2502, 0xb3}, /* BOX DRAWINGS LIGHT VERTICAL */
     191             :         {0x250c, 0xda}, /* BOX DRAWINGS LIGHT DOWN AND RIGHT */
     192             :         {0x2510, 0xbf}, /* BOX DRAWINGS LIGHT DOWN AND LEFT */
     193             :         {0x2514, 0xc0}, /* BOX DRAWINGS LIGHT UP AND RIGHT */
     194             :         {0x2518, 0xd9}, /* BOX DRAWINGS LIGHT UP AND LEFT */
     195             :         {0x251c, 0xc3}, /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
     196             :         {0x2524, 0xb4}, /* BOX DRAWINGS LIGHT VERTICAL AND LEFT */
     197             :         {0x252c, 0xc2}, /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
     198             :         {0x2534, 0xc1}, /* BOX DRAWINGS LIGHT UP AND HORIZONTAL */
     199             :         {0x253c, 0xc5}, /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
     200             :         {0x2550, 0xcd}, /* BOX DRAWINGS DOUBLE HORIZONTAL */
     201             :         {0x2551, 0xba}, /* BOX DRAWINGS DOUBLE VERTICAL */
     202             :         {0x2552, 0xd5}, /* BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE */
     203             :         {0x2553, 0xd6}, /* BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE */
     204             :         {0x2554, 0xc9}, /* BOX DRAWINGS DOUBLE DOWN AND RIGHT */
     205             :         {0x2555, 0xb8}, /* BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE */
     206             :         {0x2556, 0xb7}, /* BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE */
     207             :         {0x2557, 0xbb}, /* BOW DRAWINGS DOUBLE DOWN AND LEFT */
     208             :         {0x2558, 0xd4}, /* BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE */
     209             :         {0x2559, 0xd3}, /* BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE */
     210             :         {0x255a, 0xc8}, /* BOX DRAWINGS DOUBLE UP AND RIGHT */
     211             :         {0x255b, 0xbe}, /* BOX DRAWINGS UP SINGLE AND LEFT DOUBLE */
     212             :         {0x255c, 0xbd}, /* BOX DRAWINGS UP DOUBLE AND LEFT SINGLE */
     213             :         {0x255d, 0xbc}, /* BOX DRAWINGS DOUBLE UP AND LEFT */
     214             :         {0x255e, 0xc6}, /* BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE */
     215             :         {0x255f, 0xc7}, /* BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE */
     216             :         {0x2560, 0xcc}, /* BOX DRAWINGS DOUBLE VERTICAL AND RIGHT */
     217             :         {0x2561, 0xb4}, /* BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE */
     218             :         {0x2562, 0xb5}, /* BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE */
     219             :         {0x2563, 0xb9}, /* BOX DRAWINGS DOUBLE VERTICAL AND LEFT */
     220             :         {0x2564, 0xd1}, /* BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE */
     221             :         {0x2565, 0xd2}, /* BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE */
     222             :         {0x2566, 0xcb}, /* BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL */
     223             :         {0x2567, 0xcf}, /* BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE */
     224             :         {0x2568, 0xd0}, /* BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE */
     225             :         {0x2569, 0xca}, /* BOX DRAWINGS DOUBLE UP AND HORIZONTAL */
     226             :         {0x256a, 0xd8}, /* BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE */
     227             :         {0x256b, 0xd7}, /* BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE */
     228             :         {0x256c, 0xce}, /* BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL */
     229             :         {0x2580, 0xdf}, /* UPPER HALF BLOCK */
     230             :         {0x2584, 0xdc}, /* LOWER HALF BLOCK */
     231             :         {0x2588, 0xdb}, /* FULL BLOCK */
     232             :         {0x258c, 0xdd}, /* LEFT HALF BLOCK */
     233             :         {0x2590, 0xde}, /* RIGHT HALF BLOCK */
     234             :         {0x2591, 0xb0}, /* LIGHT SHADE */
     235             :         {0x2592, 0xb1}, /* MEDIUM SHADE */
     236             :         {0x2593, 0xb2}, /* DARK SHADE */
     237             :         {0x25a0, 0xfe}, /* BLACK SQUARE */
     238             :         {0x25ac, 0x16}, /* BLACK RECTANGLE */
     239             :         {0x25b2, 0x1e}, /* BLACK UP-POINTING TRIANGLE */
     240             :         {0x25ba, 0x10}, /* BLACK RIGHT-POINTING POINTER */
     241             :         {0x25bc, 0x1f}, /* BLACK DOWN-POINTING TRIANGLE */
     242             :         {0x25c4, 0x11}, /* BLACK LEFT-POINTING POINTER */
     243             :         {0x25c6, 0x04}, /* BLACK DIAMOND */
     244             :         {0x25cb, 0x09}, /* WHITE CIRCLE */
     245             :         {0x25d8, 0x08}, /* INVERSE BULLET */
     246             :         {0x25d9, 0x0a}, /* INVERSE WHITE CIRCLE */
     247             :         {0x263a, 0x01}, /* WHITE SMILING FACE */
     248             :         {0x263b, 0x02}, /* BLACK SMILING FACE */
     249             :         {0x263c, 0x0f}, /* WHITE SUN WITH RAYS */
     250             :         {0x2640, 0x0c}, /* FEMALE SIGN */
     251             :         {0x2642, 0x0b}, /* MALE SIGN */
     252             :         {0x2660, 0x06}, /* BLACK SPADE SUIT */
     253             :         {0x2663, 0x05}, /* BLACK CLUB SUIT */
     254             :         {0x2665, 0x03}, /* BLACK HEART SUIT */
     255             :         {0x2666, 0x04}, /* BLACK DIAMOND SUIT */
     256             :         {0x266a, 0x0d}, /* EIGHTH NOTE */
     257             :         {0x266b, 0x0e}, /* BEAMED EIGHTH NOTES */
     258             : };
     259             : 
     260             : static const struct {
     261             :         u_int16_t uni;
     262             :         u_char ibm;
     263             :         int quality;
     264             : } replacements[] = {
     265             :         {0x00af, 0x2d, 3}, /* MACRON -> - */
     266             :         {0x221f, 0xc0, 3}, /* RIGHT ANGLE -> light up and right */
     267             :         {0x222a, 0x55, 3}, /* UNION -> U */
     268             :         {0x223c, 0x7e, 3}, /* TILDE OPERATOR -> ~ */
     269             :         {0x2308, 0xda, 3}, /* LEFT CEILING -> light down and right */
     270             :         {0x2309, 0xbf, 3}, /* RIGHT CEILING -> light down and left */
     271             :         {0x230a, 0xc0, 3}, /* LEFT FLOOR -> light up and right */
     272             :         {0x230b, 0xd9, 3}, /* RIGHT FLOOR -> light up and left */
     273             :         {0x2329, 0x3c, 3}, /* LEFT-POINTING ANGLE BRACKET -> < */
     274             :         {0x232a, 0x3e, 3}, /* RIGHT-POINTING ANGLE BRACKET -> > */
     275             :         {_e003U, 0x2d, 3}, /* scan 5 -> - */
     276             :         {_e005U, 0x5f, 3}, /* scan 9 -> _ */
     277             :         {_e00bU, 0x7b, 3}, /* braceleftmid -> { */
     278             :         {_e00cU, 0x7d, 3}, /* bracerightmid -> } */
     279             :         {_e00fU, 0xd9, 3}, /* mirrored not sign? -> light up and left */
     280             :         {0x00d7, 0x78, 2}, /* MULTIPLICATION SIGN -> x */
     281             :         {0x00d8, 0xe9, 2}, /* LATIN CAPITAL LETTER O WITH STROKE -> Theta */
     282             :         {0x00f8, 0xed, 2}, /* LATIN SMALL LETTER O WITH STROKE -> phi */
     283             :         {0x03a0, 0xe3, 2}, /* GREEK CAPITAL LETTER PI -> pi */
     284             :         {0x03a5, 0x59, 2}, /* GREEK CAPITAL LETTER UPSILON -> Y */
     285             :         {0x03b3, 0x59, 2}, /* GREEK SMALL LETTER GAMMA -> Y */
     286             :         {0x03b8, 0xe9, 2}, /* GREEK SMALL LETTER THETA -> Theta */
     287             :         {0x03bd, 0x76, 2}, /* GREEK SMALL LETTER NU -> v */
     288             :         {0x03c9, 0x77, 2}, /* GREEK SMALL LETTER OMEGA -> w */
     289             :         {0x20ac, 0x45, 2}, /* EURO SIGN -> E */
     290             :         {_e002U, 0x2d, 2}, /* scan 3 -> - */
     291             :         {_e004U, 0x2d, 2}, /* scan 7 -> - */
     292             :         {_e007U, 0xda, 2}, /* bracelefttp -> light down and right */
     293             :         {_e008U, 0xc0, 2}, /* braceleftbt -> light up and right */
     294             :         {_e009U, 0xbf, 2}, /* bracerighttp -> light down and left */
     295             :         {_e00aU, 0xd9, 2}, /* bracerighrbt -> light up and left */
     296             :         {_e00dU, 0x3c, 2}, /* inverted angle? -> < */
     297             :         {_e00eU, 0x3c, 2}, /* angle? -> < */
     298             :         {_e00fU, 0xd9, 2}, /* mirrored not sign? -> light up and left */
     299             :         {0x00a9, 0x63, 1}, /* COPYRIGHT SIGN -> c */
     300             :         {0x00ae, 0x72, 1}, /* REGISTERED SIGN -> r */
     301             :         {0x00b3, 0x33, 1}, /* SUPERSCRIPT THREE -> 3 */
     302             :         {0x00b9, 0x39, 1}, /* SUPERSCRIPT ONE -> 1 */
     303             :         {0x00c0, 0x41, 1}, /* LATIN CAPITAL LETTER A WITH GRAVE -> A */
     304             :         {0x00c1, 0x41, 1}, /* LATIN CAPITAL LETTER A WITH ACUTE -> A */
     305             :         {0x00c2, 0x41, 1}, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX -> A */
     306             :         {0x00c3, 0x41, 1}, /* LATIN CAPITAL LETTER A WITH TILDE -> A */
     307             :         {0x00c8, 0x45, 1}, /* LATIN CAPITAL LETTER E WITH GRAVE -> E */
     308             :         {0x00ca, 0x45, 1}, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX -> E */
     309             :         {0x00cb, 0x45, 1}, /* LATIN CAPITAL LETTER E WITH DIAERESIS -> E */
     310             :         {0x00cc, 0x49, 1}, /* LATIN CAPITAL LETTER I WITH GRAVE -> I */
     311             :         {0x00cd, 0x49, 1}, /* LATIN CAPITAL LETTER I WITH ACUTE -> I */
     312             :         {0x00ce, 0x49, 1}, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX -> I */
     313             :         {0x00cf, 0x49, 1}, /* LATIN CAPITAL LETTER I WITH DIAERESIS -> I */
     314             :         {0x00d0, 0x44, 1}, /* LATIN CAPITAL LETTER ETH -> D */
     315             :         {0x00d2, 0x4f, 1}, /* LATIN CAPITAL LETTER O WITH GRAVE -> O */
     316             :         {0x00d3, 0x4f, 1}, /* LATIN CAPITAL LETTER O WITH ACUTE -> O */
     317             :         {0x00d4, 0x4f, 1}, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX -> O */
     318             :         {0x00d5, 0x4f, 1}, /* LATIN CAPITAL LETTER O WITH TILDE -> O */
     319             :         {0x00d9, 0x55, 1}, /* LATIN CAPITAL LETTER U WITH GRAVE -> U */
     320             :         {0x00da, 0x55, 1}, /* LATIN CAPITAL LETTER U WITH ACUTE -> U */
     321             :         {0x00db, 0x55, 1}, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX -> U */
     322             :         {0x00dd, 0x59, 1}, /* LATIN CAPITAL LETTER Y WITH ACUTE -> Y */
     323             :         {0x00e3, 0x61, 1}, /* LATIN SMALL LETTER A WITH TILDE -> a */
     324             :         {0x00f5, 0x6f, 1}, /* LATIN SMALL LETTER O WITH TILDE -> o */
     325             :         {0x00fd, 0x79, 1}, /* LATIN SMALL LETTER Y WITH ACUTE -> y */
     326             : };
     327             : 
     328             : int
     329           0 : pcdisplay_mapchar(void *id, int uni, unsigned int *index)
     330             : {
     331             :         u_int i;
     332             : 
     333           0 :         if (uni < 128) {
     334           0 :                 *index = uni;
     335           0 :                 return (5);
     336           0 :         } else if ((uni < 256) && (isomappings[uni - 128] != NOTPRINTABLE)) {
     337           0 :                 *index = isomappings[uni - 128];
     338           0 :                 return (5);
     339             :         }
     340             : 
     341           0 :         for (i = 0; i < sizeof(unimappings) / sizeof(unimappings[0]); i++)
     342           0 :                 if (uni == unimappings[i].uni) {
     343           0 :                         *index = unimappings[i].ibm;
     344           0 :                         return (5);
     345             :                 }
     346             : 
     347           0 :         for (i = 0; i < sizeof(replacements) / sizeof(replacements[0]); i++)
     348           0 :                 if (uni == replacements[i].uni) {
     349           0 :                         *index = replacements[i].ibm;
     350           0 :                         return (replacements[i].quality);
     351             :                 }
     352             : 
     353           0 :         *index = NOTPRINTABLE;
     354           0 :         return (0);
     355           0 : }

Generated by: LCOV version 1.13