Return to BSD News archive
Received: by minnie.vk1xwt.ampr.org with NNTP id AA6799 ; Fri, 15 Jan 93 10:35:33 EST Xref: sserve comp.unix.bsd:9972 alt.sources:4993 Path: sserve!manuel.anu.edu.au!munnari.oz.au!sgiblab!darwin.sura.net!paladin.american.edu!news.univie.ac.at!hp4at!mcsun!Germany.EU.net!hcshh!hm From: hm@hcshh.hcs.de (Hellmuth Michaelis) Newsgroups: comp.unix.bsd,alt.sources Subject: [386BSD] pcvt 2.00 - VT220 console driver (part 11/11) Summary: 386BSD 0.1 VT220 console device driver source code Keywords: 386BSD console driver VT220 Message-ID: <1627@hcshh.hcs.de> Date: 15 Jan 93 13:03:22 GMT Followup-To: comp.unix.bsd Organization: HCS GmbH, Hamburg, Europe Lines: 1985 Submitted-by: hm@hcshh.hcs.de (Hellmuth Michaelis) Archive-name: pcvt-2.00/part11 ---- Cut Here and unpack ---- #!/bin/sh # This is part 11 of pcvt-2.00 if touch 2>&1 | fgrep '[-amc]' > /dev/null then TOUCH=touch else TOUCH=true fi # ============= pcvt_sup.c ============== if test X"$1" != X"-c" -a -f 'pcvt_sup.c'; then echo "File already exists: skipping 'pcvt_sup.c'" else echo "x - extracting pcvt_sup.c (Text)" sed 's/^X//' << 'SHAR_EOF' > pcvt_sup.c && X/* X * Copyright (c) 1992, 1993 Hellmuth Michaelis, Brian Dunford-Shore, X * Joerg Wunsch and Scott Turner. X * X * All rights reserved. X * X * This code is derived from software contributed to Berkeley by X * William Jolitz and Don Ahn. X * X * This driver is contributed to the 386BSD operating system. X * X * Redistribution and use in source and binary forms, with or without X * modification, are permitted provided that the following conditions X * are met: X * 1. Redistributions of source code must retain the above copyright X * notice, this list of conditions and the following disclaimer. X * 2. Redistributions in binary form must reproduce the above copyright X * notice, this list of conditions and the following disclaimer in the X * documentation and/or other materials provided with the distribution. X * 3. All advertising materials mentioning features or use of this software X * must display the following acknowledgement: X * This product includes software contributed to 386BSD and developed X * by Hellmuth Michaelis, Brian Dunford-Shore, Joerg Wunsch X * and Scott Turner. X * 4. Neither the name of the developers nor the names "386BSD" and "pcvt" X * may be used to endorse or promote products derived from this software X * without specific prior written permission. X * X * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR X * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. X * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, X * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT X * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, X * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY X * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT X * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF X * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. X */ X X/* X * @(#)pcvt_sup.c 2.00 (contributed to 386BSD) X * Last Edit-Date: [Thu Jan 14 12:43:50 1993] X */ X X/*---------------------------------------------------------------------------* X * X * pcvt_sup.c VT220 Driver Support Routines X * --------------------------------------------- X * X * written by Hellmuth Michaelis, hm@hcshh.hcs.de and X * Brian H. Dunford-Shore, brian@morpheus.wustl.edu X * X * -hm splitting pccons_out.c X * -hm screeninfo ioctl X * -hm ioctl cursorshape changed X * -hm ansi function prototypes X * -hm protecting character generator ram from sysload display X * -hm masking minor driver number X * -hm integration of scotty's window size changes X * -hm color palette enhancements from joerg X * -hm sending SIGWINCH on window size changes X * -hm integrating joerg's screensaver X * X *---------------------------------------------------------------------------*/ X X#include "pcvt_hdr.h" /* global include */ X Xstatic void vid_cursor ( struct cursorshape *data ); Xstatic void vgasetfontattr ( struct vgafontattr *data ); Xstatic void vgagetfontattr ( struct vgafontattr *data ); Xstatic void vgaloadchar ( struct vgaloadchar *data ); Xstatic void vid_getscreen ( struct screeninfo *data, dev_t dev ); Xstatic void vid_setscreen ( struct screeninfo *data, dev_t dev ); Xstatic void set_screen_size ( struct video_state *svsp, int size ); Xstatic void select_vga_charset ( int vga_charset ); Xstatic void setchargen ( void ); Xstatic void resetchargen ( void ); Xstatic void vgareadpel ( struct vgapel *data, dev_t dev ); Xstatic void vgawritepel ( struct vgapel *data, dev_t dev ); X X#ifdef PCVT_SCREENSAVER Xstatic void pcvt_set_scrnsv_tmo ( int timeout ); X Xstatic u_short *savedscreen = (u_short *)0; /* ptr to screen contents */ Xstatic size_t scrnsv_size = (size_t)-1; /* size of saved image */ Xstatic unsigned scrnsv_timeout = 0; /* initially off */ Xstatic int scrnsv_active = 0; /* active flag */ X X#ifdef HAS_PRETTY_SCREENSAVER Xstatic u_short *scrnsv_current = (u_short *)0; /* attention char ptr */ X#endif /* HAS_PRETTY_SCREENSAVER */ X X#endif /* PCVT_SCREENSAVER */ X X#ifdef PALETTE_FLICKER Xstatic void vga_screen_off(void) Xstatic void vga_screen_on(void) X#endif PALETTE_FLICKER X X/*---------------------------------------------------------------------------* X * execute vga ioctls X *---------------------------------------------------------------------------*/ Xint vgaioctl(dev_t dev, int cmd, caddr_t data, int flag) X{ X switch(cmd) X { X case VGACURSOR: X vid_cursor((struct cursorshape *)data); X break; X X case VGALOADCHAR: X if((adaptor_type != VGA_ADAPTOR) && X (adaptor_type != EGA_ADAPTOR)) X return -1; X vgaloadchar((struct vgaloadchar *)data); X break; X X case VGASETFONTATTR: X if((adaptor_type != VGA_ADAPTOR) && X (adaptor_type != EGA_ADAPTOR)) X return -1; X#ifdef PCVT_SCREENSAVER X pcvt_scrnsv_reset(); X#endif X vgasetfontattr((struct vgafontattr *)data); X break; X X case VGAGETFONTATTR: X if((adaptor_type != VGA_ADAPTOR) && X (adaptor_type != EGA_ADAPTOR)) X return -1; X vgagetfontattr((struct vgafontattr *)data); X break; X X case VGASETSCREEN: X#ifdef PCVT_SCREENSAVER X pcvt_scrnsv_reset(); X#endif X vid_setscreen((struct screeninfo *)data, dev); X break; X X case VGAGETSCREEN: X vid_getscreen((struct screeninfo *)data, dev); X break; X X case VGAREADPEL: X if(adaptor_type != VGA_ADAPTOR) X return -1; X vgareadpel((struct vgapel *)data, dev); X break; X X case VGAWRITEPEL: X if(adaptor_type != VGA_ADAPTOR) X return -1; X vgawritepel((struct vgapel *)data, dev); X break; X X#ifdef PCVT_SCREENSAVER X case VGASCREENSAVER: X pcvt_set_scrnsv_tmo(*(int *)data); X pcvt_scrnsv_reset(); X break; X#endif X X default: X return -1; X } X return 0; X} X X/*---------------------------------------------------------------------------* X * video ioctl - set cursor appearence X *---------------------------------------------------------------------------*/ Xstatic void vid_cursor(struct cursorshape *data) X{ X int screen; X int start; X int end; X int line_height; X int character_set; X X screen = data->screen_no; /* for which virtual screen, -1 for current */ X X if(screen == -1) /* current ? */ X screen = current_video_screen; X else if(screen > totalscreens - 1) X screen = totalscreens - 1; X else if(screen < 0) X screen = 0; X X character_set = vs[screen].vga_charset; X character_set = (character_set < 0) ? 0 : X ((character_set < totalfonts) ? character_set : totalfonts-1); X X line_height = vgacs[character_set].char_scanlines & 0x0F; X X start = (data->start < 0) ? 0 : X ((data->start > line_height) ? line_height : data->start); X X end = (data->end < 0) ? 0 : X ((data->end > line_height) ? line_height : data->end); X X vs[screen].cursor_start = start; X vs[screen].cursor_end = end; X X if(screen == current_video_screen) X { X outb(addr_6845,M6845_CURSTART); /* cursor start reg */ X outb(addr_6845+1,start); X outb(addr_6845,M6845_CUREND); /* cursor end reg */ X outb(addr_6845+1,end); X } X} X X/*---------------------------------------------------------------------------* X * ega/vga ioctl - set font attributes X *---------------------------------------------------------------------------*/ Xstatic void vgasetfontattr(struct vgafontattr *data) X{ X register int i; X int vga_character_set; X int lines_per_character; X int totscanlines; X int size; X X vga_character_set = data->character_set; X vga_character_set = (vga_character_set < 0) ? 0 : X ((vga_character_set < totalfonts) ? X vga_character_set : totalfonts-1); X X vgacs[vga_character_set].loaded = data->font_loaded; X X if(data->character_scanlines <= 7) X vgacs[vga_character_set].char_scanlines = data->character_scanlines; X else X vgacs[vga_character_set].char_scanlines = data->character_scanlines | 0x40; X X if(adaptor_type == EGA_ADAPTOR) X { X if(vgacs[vga_character_set].char_scanlines & 0x40) X { X vgacs[vga_character_set].char_scanlines = X (vgacs[vga_character_set].char_scanlines > 0x4D) ? X 0x4D : vgacs[vga_character_set].char_scanlines; X } X else X { X vgacs[vga_character_set].char_scanlines = X (vgacs[vga_character_set].char_scanlines > 7) ? X 7 : vgacs[vga_character_set].char_scanlines; X } X vgacs[vga_character_set].scr_scanlines = X (data->screen_scanlines > 0x5D) ? X 0x5D : data->screen_scanlines; X } X else X { X /* Limit Characters to 16 scanlines doubled */ X vgacs[vga_character_set].char_scanlines = X vgacs[vga_character_set].char_scanlines & 0x4F; X vgacs[vga_character_set].scr_scanlines = X (data->screen_scanlines > 0x8F) ? X 0x8F : data->screen_scanlines; X } X X lines_per_character = (int)(0x0F & vgacs[vga_character_set].char_scanlines)+1; X X totscanlines = 0x101 + (int)vgacs[vga_character_set].scr_scanlines; X X size = data->screen_size; X X if(adaptor_type == EGA_ADAPTOR) X { X switch(size) X { X case SIZ_25x80: /* This case is always OK */ X break; X X case SIZ_35x80: X if(totscanlines/lines_per_character >= 35) X size = SIZ_35x80; X else X size = SIZ_25x80; X break; X X case SIZ_43x80: X default: X if(totscanlines/lines_per_character >= 43) X size = SIZ_43x80; X else if(totscanlines/lines_per_character >= 35) X size = SIZ_35x80; X else X size = SIZ_25x80; X break; X } X } X else X { X switch(size) X { X case SIZ_25x80: /* This case is always OK */ X break; X X case SIZ_28x80: X if(totscanlines/lines_per_character >= 28) X size = SIZ_28x80; X else X size = SIZ_25x80; X break; X X case SIZ_40x80: X if(totscanlines/lines_per_character >= 40) X size = SIZ_40x80; X else if(totscanlines/lines_per_character >= 28) X size = SIZ_28x80; X else X size = SIZ_25x80; X break; X X case SIZ_50x80: X default: X if(totscanlines/lines_per_character >= 50) X size = SIZ_50x80; X else if(totscanlines/lines_per_character >= 40) X size = SIZ_40x80; X else if(totscanlines/lines_per_character >= 28) X size = SIZ_28x80; X else X size = SIZ_25x80; X break; X } X } X X vgacs[vga_character_set].screen_size = size; X X for (i = 0;i < NSCREENS;i++) X { X if(vga_character_set == vs[i].vga_charset) X set_charset(&(vs[i]),vga_character_set); X } X vgapage(current_video_screen); X} X X/*---------------------------------------------------------------------------* X * ega/vga ioctl - get font attributes X *---------------------------------------------------------------------------*/ Xstatic void vgagetfontattr(struct vgafontattr *data) X{ X int vga_character_set; X X vga_character_set = data->character_set; X vga_character_set = (vga_character_set < 0) ? 0 : X ((vga_character_set < (int)totalfonts) ? vga_character_set : (int)(totalfonts-1)); X X data->character_set = (int)vga_character_set; X X data->font_loaded = (int)vgacs[vga_character_set].loaded; X X data->character_scanlines = (int)vgacs[vga_character_set].char_scanlines; X X data->screen_scanlines = (int)vgacs[vga_character_set].scr_scanlines; X X data->screen_size = (int)vgacs[vga_character_set].screen_size; X} X X/*---------------------------------------------------------------------------* X * ega/vga ioctl - load a character shape into character set X *---------------------------------------------------------------------------*/ Xstatic void vgaloadchar(data) Xstruct vgaloadchar *data; X{ X int vga_character_set; X int character; X int lines_per_character; X X vga_character_set = data->character_set; X vga_character_set = (vga_character_set < 0) ? 0 : X ((vga_character_set < (int)totalfonts) ? vga_character_set : (int)(totalfonts-1)); X X character = (data->character < 0) ? 0 : X ((data->character > 255) ? 255 : data->character); X X lines_per_character = (int)data->character_scanlines; X lines_per_character = (lines_per_character < 0) ? 0 : X ((lines_per_character > 32) ? 32 : lines_per_character); X X loadchar(vga_character_set,character,lines_per_character,data->char_table); X} X X/*---------------------------------------------------------------------------* X * video ioctl - get screen information X *---------------------------------------------------------------------------*/ Xstatic void vid_getscreen(struct screeninfo *data, dev_t dev) X{ X int device = (minor(dev) & MINORMASK); X data->adaptor_type = adaptor_type; /* video adapter installed */ X data->totalfonts = totalfonts; /* no of downloadble fonts */ X data->totalscreens = totalscreens; /* no of virtual screens */ X data->screen_no = device; /* this screen number */ X data->current_screen = current_video_screen; /* displayed screen no */ X data->screen_size = vgacs[(vs[device].vga_charset)].screen_size; /* screen size */ X data->pure_vt_mode = vs[device].vt_pure_mode; /* pure VT mode or HP/VT mode */ X} X X/*---------------------------------------------------------------------------* X * video ioctl - set screen information X *---------------------------------------------------------------------------*/ Xstatic void vid_setscreen(struct screeninfo *data, dev_t dev) X{ X if(data->current_screen == -1) X vgapage(minor(dev) & MINORMASK); X else X vgapage(data->current_screen); X X if(data->screen_size != -1) X { X if((data->screen_size == SIZ_25x80) || X (data->screen_size == SIZ_28x80) || X (data->screen_size == SIZ_35x80) || X (data->screen_size == SIZ_40x80) || X (data->screen_size == SIZ_43x80) || X (data->screen_size == SIZ_50x80)) X { X if(data->screen_no == -1) X set_screen_size(vsp, data->screen_size); X else X set_screen_size(&vs[(minor(dev) & MINORMASK)], data->screen_size); X } X } X X if(data->pure_vt_mode != -1) X { X if((data->pure_vt_mode == M_HPVT) || X (data->pure_vt_mode == M_PUREVT)) X { X if(data->screen_no == -1) X set_emulation_mode(vsp, data->pure_vt_mode); X else X set_emulation_mode(&vs[(minor(dev) & MINORMASK)], data->pure_vt_mode); X } X } X} X X/*---------------------------------------------------------------------------* X * set screen size/resolution for a virtual screen X *---------------------------------------------------------------------------*/ Xstatic void set_screen_size(struct video_state *svsp, int size) X{ X int i; X X for(i = 0; i < totalfonts; i++) X { X if(vgacs[i].screen_size == size) X { X set_charset(svsp, i); X X fillw(user_attr | ' ', svsp->Crtat, COL * SCR_MAXROW); X clr_parms(svsp); /* escape parameter init */ X svsp->state = STATE_INIT; /* initial state */ X svsp->col = 0; /* init row */ X svsp->row = 0; /* init col */ X svsp->crtat = svsp->Crtat; /* cursor address init */ X svsp->scr_beg = svsp->Crtat; /* start of scrolling region */ X svsp->row_beg = 0; /* start of scrolling region */ X svsp->sc_flag = 0; /* invalidate saved cursor position */ X svsp->transparent = 0; /* disable control code processing */ X X /* Update tty to reflect screen size */ X svsp->vs_tty->t_winsize.ws_row = svsp->screen_rowsize; X svsp->vs_tty->t_winsize.ws_col = 80; X svsp->vs_tty->t_winsize.ws_xpixel = 640; X svsp->vs_tty->t_winsize.ws_ypixel = 480; X X if(svsp->vt_pure_mode == M_HPVT) X { X svsp->vs_tty->t_winsize.ws_row = X svsp->screen_rows = svsp->screen_rowsize - 3; X svsp->maxrow = svsp->screen_rows - 1; X X if(svsp->labels_on) X { X if(svsp->which_fkl == SYS_FKL) X sw_sfkl(svsp); X else if(svsp->which_fkl == USR_FKL) X sw_ufkl(svsp); X } X } X else if(svsp->vt_pure_mode == M_PUREVT) X { X svsp->vs_tty->t_winsize.ws_row = X svsp->screen_rows = svsp->screen_rowsize; X svsp->maxrow = svsp->screen_rows - 1; X } X X#ifdef SIGNAL_WINCH X pgsignal(svsp->vs_tty->t_pgrp, SIGWINCH, 1); X#endif /* SIGNAL_WINCH */ X X if(svsp == vsp) /* update cursor position if on current screen */ X { X outb(addr_6845, M6845_CURSORH); /* select high register */ X outb(addr_6845+1, (svsp->crtat - Crtat) >> 8); X outb(addr_6845, M6845_CURSORL); /* select low register */ X outb(addr_6845+1, (svsp->crtat - Crtat)); X } X break; X } X } X} X X/*---------------------------------------------------------------------------* X * VGA ioctl - read DAC palette entry X *---------------------------------------------------------------------------*/ Xstatic void vgareadpel(struct vgapel *data, dev_t dev) X{ X register unsigned vpage = minor(dev) & MINORMASK; X register unsigned idx = data->idx; X X if(idx >= NVGAPEL) X return; /* no such entry */ X X /* do not read VGA palette directly, use saved values */ X data->r = vs[vpage].palette[idx].r; X data->g = vs[vpage].palette[idx].g; X data->b = vs[vpage].palette[idx].b; X} X X/*---------------------------------------------------------------------------* X * VGA ioctl - write DAC palette entry X *---------------------------------------------------------------------------*/ Xstatic void vgawritepel(struct vgapel *data, dev_t dev) X{ X register unsigned vpage = minor(dev) & MINORMASK; X register unsigned idx = data->idx; X X if(idx >= NVGAPEL) X return; /* no such entry */ X X /* first, update saved values for this video screen */ X vs[vpage].palette[idx].r = data->r; X vs[vpage].palette[idx].g = data->g; X vs[vpage].palette[idx].b = data->b; X X /* if this happens on active screen, update VGA DAC, too */ X if(vpage == current_video_screen) X vgapaletteio(idx, &vs[vpage].palette[idx], 1); X} X X/*---------------------------------------------------------------------------* X * VGA physical IO - read/write one palette entry X *---------------------------------------------------------------------------*/ Xvoid vgapaletteio(unsigned idx, struct rgb *val, int writeit) X{ X X#ifdef PALETTE_FLICKER X vga_screen_off(); X#endif /* PALETTE_FLICKER */ X X if(writeit) X { X outb(VGA_DAC + 2, idx); X#ifdef WAIT_RETRACE X wait_retrace(); X#endif X outb(VGA_DAC + 3, val->r & VGA_PMSK); X#ifdef WAIT_RETRACE X wait_retrace(); X#endif X outb(VGA_DAC + 3, val->g & VGA_PMSK); X#ifdef WAIT_RETRACE X wait_retrace(); X#endif X outb(VGA_DAC + 3, val->b & VGA_PMSK); X } X else /* read it */ X { X outb(VGA_DAC + 1, idx); X#ifdef WAIT_RETRACE X wait_retrace(); X#endif X val->r = inb(VGA_DAC + 3) & VGA_PMSK; X#ifdef WAIT_RETRACE X wait_retrace(); X#endif X val->g = inb(VGA_DAC + 3) & VGA_PMSK; X#ifdef WAIT_RETRACE X wait_retrace(); X#endif X val->b = inb(VGA_DAC + 3) & VGA_PMSK; X } X X#ifdef PALETTE_FLICKER X vga_screen_on(); X#endif /* PALETTE_FLICKER */ X X} X X/*---------------------------------------------------------------------------* X * display load averages in last line (taken from tty.c) X *---------------------------------------------------------------------------*/ Xvoid average(int a) X{ X register int tmp, i; X static volatile u_char buffer[] = X "System Load: 1min: 0.00 5min: 0.00 15min: 0.00"; X X#ifdef PCVT_SCREENSAVER X if((vs[0].vt_pure_mode == M_HPVT) && (vs[0].labels_on) && X (chargen_access == 0) && (scrnsv_active == 0)) X#else X if((vs[0].vt_pure_mode == M_HPVT) && (vs[0].labels_on) && X (chargen_access == 0)) X#endif X { X i = 18; X tmp = (averunnable[0] * 100 + FSCALE / 2) >> FSHIFT; X buffer[i++] = (((tmp/100)/10) == 0) ? ' ' : ((tmp/100)/10) + '0'; X buffer[i++] = ((tmp/100)%10) + '0'; X buffer[i++] = '.'; X buffer[i++] = ((tmp%100)/10) + '0'; X buffer[i++] = ((tmp%100)%10) + '0'; X i += 6; X tmp = (averunnable[1] * 100 + FSCALE / 2) >> FSHIFT; X buffer[i++] = (((tmp/100)/10) == 0) ? ' ' : ((tmp/100)/10) + '0'; X buffer[i++] = ((tmp/100)%10) + '0'; X buffer[i++] = '.'; X buffer[i++] = ((tmp%100)/10) + '0'; X buffer[i++] = ((tmp%100)%10) + '0'; X i += 7; X tmp = (averunnable[2] * 100 + FSCALE / 2) >> FSHIFT; X buffer[i++] = (((tmp/100)/10) == 0) ? ' ' : ((tmp/100)/10) + '0'; X buffer[i++] = ((tmp/100)%10) + '0'; X buffer[i++] = '.'; X buffer[i++] = ((tmp%100)/10) + '0'; X buffer[i++] = ((tmp%100)%10) + '0'; X buffer[i] = '\0'; X X for(i = 0; buffer[i]; i++) X { X *((Crtat+((vs[0].screen_rows+2)*COL))+i) = X user_attr | buffer[i]; X } X } X if(a == 0) X timeout(average, 0, hz/5); X} X X/*---------------------------------------------------------------------------* X * set character set for virtual screen X *---------------------------------------------------------------------------*/ Xvoid set_charset(struct video_state *svsp, int curvgacs) X{ X static int sizetab[] = { 25, 28, 35, 40, 43, 50 }; X X if((curvgacs < 0) || (curvgacs > (NVGAFONTS-1))) X return; X X svsp->vga_charset = curvgacs; X X select_vga_charset(curvgacs); X X svsp->screen_rowsize = sizetab[(vgacs[curvgacs].screen_size)]; X X if( svsp->labels_on && svsp->vt_pure_mode != M_PUREVT) X svsp->screen_rows = svsp->screen_rowsize-3; X else X svsp->screen_rows = svsp->screen_rowsize; X X /* Clip scrolling region */ X if(svsp->maxrow > svsp->screen_rows-1) X svsp->maxrow = svsp->screen_rows-1; X X /* Clip cursor pos */ X if((svsp->crtat - svsp->Crtat) > (svsp->maxrow * COL)) X svsp->crtat = svsp->Crtat+(svsp->maxrow * COL); X} X X/*---------------------------------------------------------------------------* X * select a vga character set X *---------------------------------------------------------------------------*/ Xstatic void select_vga_charset(int vga_charset) X{ X int first, second; X int fflag = 0; X int sflag = 0; X u_char cmap = 0; X X static u_char cmaptaba[] = X {0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13}; X X static u_char cmaptabb[] = X {0x00, 0x04, 0x08, 0x0c, 0x20, 0x24, 0x28, 0x2c}; X X if((adaptor_type != EGA_ADAPTOR) && (adaptor_type != VGA_ADAPTOR)) X return; X X if((vga_charset < 0) || (vga_charset >= totalfonts)) X return; X X if(!vgacs[vga_charset].loaded) X return; X X /*-------------------------------------------------------------- X find the the first and second charset of a given resolution. X the first is used for lower 256 and the second (if any) is X used for the upper 256 entries of a complete 512 entry ega/ X vga charset. X --------------------------------------------------------------*/ X X for(first = 0; first < totalfonts; first++) X { X if(!vgacs[first].loaded) X continue; X if(vgacs[first].screen_size != vgacs[vga_charset].screen_size) X continue; X if(vgacs[first].char_scanlines != vgacs[vga_charset].char_scanlines) X continue; X if(vgacs[first].scr_scanlines != vgacs[vga_charset].scr_scanlines) X continue; X fflag = 1; X break; X } X X if(fflag != 1) X return; X X for(second = first+1; second < totalfonts; second++) X { X if(!vgacs[second].loaded) X continue; X if(vgacs[second].screen_size != vgacs[vga_charset].screen_size) X continue; X if(vgacs[second].char_scanlines != vgacs[vga_charset].char_scanlines) X continue; X if(vgacs[second].scr_scanlines != vgacs[vga_charset].scr_scanlines) X continue; X sflag = 1; X break; X } X X cmap = cmaptaba[first]; X if(sflag) X { X cmap |= cmaptabb[second]; X vgacs[first].secondloaded = second; X } X else X { X vgacs[first].secondloaded = 0; /* cs 0 can never become a 2nd ! */ X } X X outb(0x3c4, 0x03); /* character map select register */ X outb(0x3c5, cmap); X X outb(0x3d4, 0x09); /* max scan line reg */ X X outb(0x3d5, vgacs[first].char_scanlines); /* scanlines/char */ X X outb(0x3d4, 0x12); /* vert display enable end */ X X outb(0x3d5, vgacs[first].scr_scanlines); /* low byte of scr scanlines */ X} X X/*---------------------------------------------------------------------------* X * switch vga-card to load a character set X *---------------------------------------------------------------------------*/ Xstatic void setchargen() X{ X chargen_access = 1; /* flag we are accessing the chargen ram */ X X /* program sequencer to access character generator */ X X outb(0x3c4, 0x00); X outb(0x3c5, 0x01); /* synchronous reset */ X X outb(0x3c4, 0x02); X outb(0x3c5, 0x04); /* write to map 2 */ X X outb(0x3c4, 0x04); X outb(0x3c5, 0x07); /* sequential addressing */ X X outb(0x3c4, 0x00); X outb(0x3c5, 0x03); /* clear synchronous reset */ X X /* program graphics controller to access character generator */ X X outb(0x3ce, 0x04); X outb(0x3cf, 0x02); /* select map 2 for cpu reads */ X X outb(0x3ce, 0x05); X outb(0x3cf, 0x00); /* disable odd-even addressing */ X X outb(0x3ce, 0x06); X outb(0x3cf, 0x00); /* map starts at 0xA000 */ X} X X/*---------------------------------------------------------------------------* X * switch back vga-card to normal operation X *---------------------------------------------------------------------------*/ Xstatic void resetchargen() X{ X /* program sequencer to access video ram */ X X outb(0x3c4, 0x00); X outb(0x3c5, 0x01); /* synchronous reset */ X X outb(0x3c4, 0x02); X outb(0x3c5, 0x03); /* write to map 0 & 1 */ X X outb(0x3c4, 0x04); X outb(0x3c5, 0x03); /* odd-even addressing */ X X outb(0x3c4, 0x00); X outb(0x3c5, 0x03); /* clear synchronous reset */ X X /* program graphics controller to access character generator */ X X outb(0x3ce, 0x04); X outb(0x3cf, 0x00); /* select map 0 for cpu reads */ X X outb(0x3ce, 0x05); X outb(0x3cf, 0x10); /* enable odd-even addressing */ X X outb(0x3ce, 0x06); X outb(0x3cf, 0x0e); /* map starts at 0xb800 */ X X chargen_access = 0; /* flag we are NOT accessing the chargen ram */ X} X X#ifdef WAIT_RETRACE X/*---------------------------------------------------------------------------* X * wait for being in a retrace time window X * NOTE: this is __VERY__ bad programming practice in this environment !! X *---------------------------------------------------------------------------*/ X Xstatic void wait_retrace(void) X{ X if(color) X { X while(!(inb(0x3da) & 0x01)) X ; X } X else X { X while(!(inb(0x3ba) & 0x01)) X ; X } X} X X#endif /* WAIT_RETRACE */ X X#ifdef PALETTE_FLICKER X X/*---------------------------------------------------------------------------* X * switch screen off (VGA only) X *---------------------------------------------------------------------------*/ Xstatic void vga_screen_off(void) X{ X unsigned char old; X X outb(0x3c4, 0x00); X outb(0x3c5, 0x01); /* synchronous reset */ X X outb(0x3c4, 0x01); /* clocking mode reg */ X old = inb(0x3c5); /* get current value */ X X outb(0x3c4, 0x01); /* clocking mode reg */ X outb(0x3c5, (old | 0x20)); /* screen off bit on */ X X outb(0x3c4, 0x00); X outb(0x3c5, 0x03); /* clear synchronous reset */ X} X X/*---------------------------------------------------------------------------* X * switch screen back on (VGA only) X *---------------------------------------------------------------------------*/ Xstatic void vga_screen_on(void) X{ X unsigned char old; X X outb(0x3c4, 0x00); X outb(0x3c5, 0x01); /* synchronous reset */ X X outb(0x3c4, 0x01); /* clocking mode reg */ X old = inb(0x3c5); /* get current value */ X X outb(0x3c4, 0x01); /* clocking mode reg */ X outb(0x3c5, (old & ~0x20)); /* screen off bit off */ X X outb(0x3c4, 0x00); X outb(0x3c5, 0x03); /* clear synchronous reset */ X} X X#endif /* PALETTE_FLICKER */ X X/*---------------------------------------------------------------------------* X * load a char into ega/vga character generator ram X *---------------------------------------------------------------------------*/ Xvoid Xloadchar(int fontset, int character, int char_scanlines, u_char *char_table) X{ X unsigned char *d = (unsigned char *)Crtat; X int j, k; X X /* Character sets are at (+(0xA0000): X 0 1 2 3 4 5 6 7 X 0x0000 0x4000 0x8000 0xC000 0x2000 0x6000 0xA000 0xE000 X X */ X X static int charset_offset[8] = { 0x0000, 0x4000, 0x8000, 0xC000, X 0x2000, 0x6000, 0xA000, 0xE000 }; X X switch(adaptor_type) X { X case EGA_ADAPTOR: X fontset = (fontset > 3) ? 3 : fontset; X break; X X case VGA_ADAPTOR: X fontset = (fontset > 7) ? 7 : fontset; X break; X X default: X return; X } X X d -= (0xB8000 - 0xA0000); /* Point to 0xA0000 */ X d += charset_offset[fontset]; /* Load into Character set n */ X d += (character * 32); /* 32 bytes per character */ X X setchargen(); /* access chargen ram */ X X for(j = k = 0; j < char_scanlines; j++) /* x bit high characters */ X { X *d = char_table[k]; X d++; X k++; X } X for(; j < 32; j++) /* Up to 32 bytes per character image */ X { X *d = 0x00; X d++; X } X X resetchargen(); /* access video ram */ X} X X/*---------------------------------------------------------------------------* X * switch to vga video page n (0 ... NSCREENS-1) X *---------------------------------------------------------------------------*/ Xvoid vgapage(int n) X{ X u_short addr; X X switch(adaptor_type) X { X case CGA_ADAPTOR: X addr = (n * 0x800); X break; X X case EGA_ADAPTOR: X case VGA_ADAPTOR: X addr = (n * SCR_MAXROW * COL); X break; X X case HGC_ADAPTOR: X addr = (n * 0x80)+0x0A; X break; X X case MDA_ADAPTOR: X default: X return; X break; /* ! NEVER REACHED ! */ X } X X if((n >= 0) && (n < totalscreens)) X { X /* set new display start address */ X X switch(adaptor_type) X { X case CGA_ADAPTOR: X case EGA_ADAPTOR: X case VGA_ADAPTOR: X /* start addr high */ X outb(addr_6845,(unsigned char)0x0c); X outb(addr_6845+1,(unsigned char)(addr >> 8)); X X /* start addr low */ X outb(addr_6845,(unsigned char)0x0d); X outb(addr_6845+1,(unsigned char)addr); X break; X X case HGC_ADAPTOR: X /* Supposed to work */ X outb(0x3B8,(unsigned char)addr); X break; X X default: X return; X } X X /* global pointers */ X X current_video_screen = n; X X pcconsp = &pccons[n]; X X vsp = &vs[n]; X X outb(addr_6845, M6845_CURSORH); /* select high register */ X outb(addr_6845+1, (vsp->crtat - Crtat) >> 8); X outb(addr_6845, M6845_CURSORL); /* select low register */ X outb(addr_6845+1, (vsp->crtat - Crtat)); X X select_vga_charset(vsp->vga_charset); X X outb(addr_6845, M6845_CURSTART); /* select high register */ X outb(addr_6845+1, vsp->cursor_start); X outb(addr_6845, M6845_CUREND); /* select low register */ X outb(addr_6845+1, vsp->cursor_end); X X if(adaptor_type == VGA_ADAPTOR) { X /* switch VGA DAC palette entries */ X unsigned i; X X for(i = 0; i < NVGAPEL; i++) X vgapaletteio(i, &vsp->palette[i], 1); X } X X update_led(); /* update led's */ X } X} X X/*---------------------------------------------------------------------------* X * see if ega or vga X *---------------------------------------------------------------------------*/ Xint egavga_test() X{ X unsigned char *d = (unsigned char *)Crtat; X unsigned char testzone[8]; X static unsigned char teststring[] = "386BSD"; X int i; X int returnvalue, samevalue; X X d -= (0xB8000 - 0xA0000); /* Point to 0xA0000 */ X d += 0x4000; /* Scribble on character set 1 */ X X setchargen(); /* Set to read/write character sets */ X X for(i = 0; i < 6; ++i) X testzone[i] = d[i]; X X for(i = 0; i < 6; ++i) X d[i] = teststring[i]; X X returnvalue = 1; X X for(i = 0; i < 6; ++i) X { X if(d[i] != teststring[i]) X { X returnvalue = 0; X break; X } X } X X if(returnvalue) X { X resetchargen(); /* Back to display memory */ X samevalue = 1; X X for(i = 0; i < 6; ++i) X { X if(d[i] != teststring[i]) X { X samevalue = 0; X break; X } X } X X setchargen(); /* Set to read/write character sets */ X returnvalue = (samevalue) ? 0 : 1; X } X X for(i = 0; i < 6; ++i) X d[i] = testzone[i]; X X resetchargen(); X return returnvalue; X} X X/*---------------------------------------------------------------------------* X * test if it is a vga X *---------------------------------------------------------------------------*/ X X#define CURSOR_ON_BIT 0x20 /* cursor on/off on vga */ X Xint vga_test() X{ X u_char old, new, check; X X outb(addr_6845,M6845_CURSTART); /* cursor start reg */ X old = inb(addr_6845+1); /* get current value */ X X new = old | CURSOR_ON_BIT; /* set cursor on by setting bit 5 on */ X X DELAY(1); X X outb(addr_6845,M6845_CURSTART); /* cursor start reg */ X outb(addr_6845+1,new); /* cursor should be on now */ X X DELAY(1); X X outb(addr_6845,M6845_CURSTART); /* cursor start reg */ X check = inb(addr_6845+1); /* get current value */ X X if(check != new) X { X outb(addr_6845,M6845_CURSTART); /* cursor start reg */ X outb(addr_6845+1,old); /* failsafe */ X return(0); /* must be ega */ X } X X new = old & ~CURSOR_ON_BIT; /* set cursor off by setting bit 5 off */ X X outb(addr_6845,M6845_CURSTART); /* cursor start reg */ X outb(addr_6845+1,new); /* cursor should be off now */ X X DELAY(1); X X outb(addr_6845,M6845_CURSTART); /* cursor start reg */ X check = inb(addr_6845+1); /* get current value */ X X if(check != new) X { X outb(addr_6845,M6845_CURSTART); /* cursor start reg */ X outb(addr_6845+1,old); /* failsafe */ X return(0); /* must be ega */ X } X X DELAY(1); X X outb(addr_6845,M6845_CURSTART); /* cursor start reg */ X outb(addr_6845+1,old); /* failsafe */ X X return(1); /* vga */ X} X X/*---------------------------------------------------------------------------* X * convert upper/lower sixel font array to vga font array X *---------------------------------------------------------------------------*/ Xvoid sixel_vga(struct sixels *sixelp, u_char *vgachar) X{ X register int i, j; X register int shift; X register u_char mask; X X for(j = 0; j < 16; j++) X vgachar[j] = 0; X X mask = 0x01; X for(j = 0; j < 6; j++) X { X for(i = 0, shift = 7; i < 8; i++, shift--) X vgachar[j] |= ((((sixelp->upper[i]) & mask) >> j) << shift); X mask <<= 1; X } X X mask = 0x01; X for(j = 0; j < 4; j++) X { X for(i = 0, shift = 7; i < 8; i++, shift--) X vgachar[j+6] |= ((((sixelp->lower[i]) & mask) >>j) << shift); X mask <<= 1; X } X} X X/*---------------------------------------------------------------------------* X * Expand 8x10 EGA/VGA characters to 8x16 EGA/VGA characters X *---------------------------------------------------------------------------*/ Xvoid vga10_vga16(unsigned char *invga, unsigned char *outvga) X{ X register int i,j; X X /* X * Keep the top and bottom scanlines the same and double every scan X * line in between. X */ X X outvga[0] = invga[0]; X outvga[1] = invga[1]; X outvga[14] = invga[8]; X outvga[15] = invga[9]; X X for(i = j = 2;i < 8 && j < 14;i++,j += 2) X { X outvga[j] = invga[i]; X outvga[j+1] = invga[i]; X } X} X X/*---------------------------------------------------------------------------* X * Expand 8x10 EGA/VGA characters to 8x14 EGA/VGA characters X *---------------------------------------------------------------------------*/ Xvoid vga10_vga14(unsigned char *invga, unsigned char *outvga) X{ X register int i; X X /* X * Double the top two and bottom two scanlines and copy everything X * in between. X */ X X outvga[0] = invga[0]; X outvga[1] = invga[0]; X outvga[2] = invga[1]; X outvga[3] = invga[1]; X outvga[10] = invga[8]; X outvga[11] = invga[8]; X outvga[12] = invga[9]; X outvga[13] = invga[9]; X X for(i = 2;i < 8;i++) X outvga[i+2] = invga[i]; X} X X/*---------------------------------------------------------------------------* X * Expand 8x10 EGA/VGA characters to 8x10 EGA/VGA characters X *---------------------------------------------------------------------------*/ Xvoid vga10_vga10(unsigned char *invga, unsigned char *outvga) X{ X register int i; X X for(i = 0;i < 10;i++) X outvga[i] = invga[i]; X} X X/*---------------------------------------------------------------------------* X * Contract 8x10 EGA/VGA characters to 8x8 EGA/VGA characters X *---------------------------------------------------------------------------*/ Xvoid vga10_vga8(unsigned char *invga, unsigned char *outvga) X{ X /* Skip scanlines 3 and 7 */ X X outvga[0] = invga[0]; X outvga[1] = invga[1]; X outvga[2] = invga[2]; X outvga[3] = invga[4]; X outvga[4] = invga[5]; X outvga[5] = invga[6]; X outvga[6] = invga[8]; X outvga[7] = invga[9]; X} X X/*---------------------------------------------------------------------------* X * force a vga card to behave like an ega for debugging X *---------------------------------------------------------------------------*/ X#ifdef FORCE_EGA Xforce_ega() X{ X unsigned char vgareg; X X if(adaptor_type == VGA_ADAPTOR) X { X adaptor_type = EGA_ADAPTOR; X totalfonts = 4; X vgareg = inb(0x3CC); /* Miscellaneous Output Register */ X vgareg |= 128; /* Set 350 scanline mode */ X vgareg &= ~64; X outb(0x3C2,vgareg); X } X} X#endif /* FORCE_EGA */ X X/*---------------------------------------------------------------------------* X * disconnect attribute bit 3 from generating intensity X * (and use it for a second character set !) X *---------------------------------------------------------------------------*/ Xvoid set_2ndcharset() X{ X if(color) /* prepare to access index register ! */ X inb(0x3da); X else X inb(0x3ba); X X outb(0x3c0, (0x12|0x20)); /* select color plane enable reg */ X /* caution: set ATC access bit ! */ X outb(0x3c0, 0x07); /* disable plane 3 */ X} X X#ifdef PCVT_SCREENSAVER X#ifdef HAS_PRETTY_SCREENSAVER Xstatic u_short Xgetrand(void) X{ X /* some kinda random number */ X /* had a look into the system library... */ X extern struct timeval time; /* time-of-day register */ X static unsigned long seed = 1; X register u_short res = (u_short)seed; X seed = seed * 1103515245L + time.tv_sec; X return res; X} X Xstatic void Xscrnsv_blink(void) X{ X static struct rgb blink_rgb[8] = X { X {63, 63, 63}, /* white */ X {0, 63, 42}, /* pale green */ X {63, 63, 0}, /* yellow */ X {63, 21, 63}, /* violet */ X {42, 63, 0}, /* yellow-green */ X {63, 42, 0}, /* amber */ X {63, 42, 42}, /* rose */ X {21, 42, 42} /* cyan */ X }; X register u_short r = getrand(); X unsigned pos = (r % (scrnsv_size / 2)); X X *scrnsv_current = /* (0 << 8) + */ ' '; X scrnsv_current = vsp->Crtat + pos; X *scrnsv_current = (7 /* LIGHTGRAY */ << 8) + '*'; X if(adaptor_type == VGA_ADAPTOR) X vgapaletteio(7 /* LIGHTGRAY */, &blink_rgb[(r >> 4) & 7], 1); X timeout((caddr_t)scrnsv_blink, 0, hz); X} X X#endif /* defined HAS_PRETTY_SCREENSAVER */ X X Xstatic void Xpcvt_set_scrnsv_tmo(int timeout) X{ X pcvt_scrnsv_reset(); /* sanity */ X scrnsv_timeout = timeout; X if(timeout == 0 && savedscreen) X { X /* release buffer when screen saver turned off */ X free(savedscreen, M_TEMP); X savedscreen = (u_short *)0; X } X} X Xstatic void Xscrnsv_timedout(void) X{ X /* this function is called by timeout() */ X X /* X * due to some undefined problems with video adaptor RAM X * access timing, the following has been splitted into X * two pieces called subsequently with a time difference X * of 100 millisec X */ X X if(++scrnsv_active == 1) X { X register size_t s; X /* X * first, allocate a buffer X * do only if none allocated yet or another size required X * this reduces malloc() overhead by avoiding successive X * calls to malloc() and free() if they would have requested X * the same buffer X */ X s = sizeof(u_short) * vsp->screen_rowsize * X /* XXX vsp->screen_colsize; */ 80; X if(savedscreen == (u_short *)0 || s != scrnsv_size) X { X /* really need to allocate */ X if(savedscreen) X free(savedscreen, M_TEMP); X scrnsv_size = s; X if((savedscreen = X (u_short *)malloc(s, M_TEMP, M_NOWAIT)) X == (u_short *)0) X { X /* X * didn't get the buffer memory, X * turn off screen saver X */ X scrnsv_timeout = scrnsv_active = 0; X return; X } X } X /* save current screen */ X bcopy(vsp->Crtat, savedscreen, scrnsv_size); X X /* on VGA's, make sure palette is set to blank screen */ X if(adaptor_type == VGA_ADAPTOR) X { X struct rgb black = {0, 0, 0}; X vgapaletteio(0 /* BLACK */, &black, 1); X } X /* prepare for next time... */ X timeout((caddr_t)scrnsv_timedout /* me! */, 0, hz / 10); X } X else X { X /* second call, now blank the screen */ X /* fill screen with blanks */ X fillw(/* (BLACK<<8) + */ ' ', vsp->Crtat, scrnsv_size / 2); X#ifdef HAS_PRETTY_SCREENSAVER X scrnsv_current = vsp->Crtat; X timeout((caddr_t)scrnsv_blink, 0, hz); X#endif X } X} X X/* INTERFACE */ Xvoid Xpcvt_scrnsv_reset(void) X{ X register int x; X X /* X * don't bother: untimeout will not complain if there's actually X * no timeout set for this function X */ X X untimeout((caddr_t)scrnsv_timedout, 0); X X#ifdef HAS_PRETTY_SCREENSAVER X untimeout((caddr_t)scrnsv_blink, 0); X#endif X X if(scrnsv_active) X { X x = splhigh(); X bcopy(savedscreen, vsp->Crtat, scrnsv_size); X if(adaptor_type == VGA_ADAPTOR) X { X /* back up VGA palette info */ X vgapaletteio(0 /* BLACK */, &vsp->palette[0], 1); X X#ifdef HAS_PRETTY_SCREENSAVER X vgapaletteio(7 /* LIGHTGRAY */, &vsp->palette[7], 1); X#endif X } X scrnsv_active = 0; X splx(x); X } X if(scrnsv_timeout) X { X /* mark next timeout */ X timeout((caddr_t)scrnsv_timedout, 0, scrnsv_timeout * hz); X } X} X X#endif /* defined PCVT_SCREENSAVER */ X X X/* ------------------------- E O F ------------------------------------------*/ SHAR_EOF $TOUCH -am 0114130693 pcvt_sup.c && chmod 0660 pcvt_sup.c || echo "restore of pcvt_sup.c failed" set `wc -c pcvt_sup.c`;Wc_c=$1 if test "$Wc_c" != "40075"; then echo original size 40075, current size $Wc_c fi fi # ============= pcvt_tbl.h ============== if test X"$1" != X"-c" -a -f 'pcvt_tbl.h'; then echo "File already exists: skipping 'pcvt_tbl.h'" else echo "x - extracting pcvt_tbl.h (Text)" sed 's/^X//' << 'SHAR_EOF' > pcvt_tbl.h && X/* X * Copyright (c) 1992, 1993 Hellmuth Michaelis X * X * All rights reserved. X * X * This driver is contributed to the 386BSD operating system. X * X * Redistribution and use in source and binary forms, with or without X * modification, are permitted provided that the following conditions X * are met: X * 1. Redistributions of source code must retain the above copyright X * notice, this list of conditions and the following disclaimer. X * 2. Redistributions in binary form must reproduce the above copyright X * notice, this list of conditions and the following disclaimer in the X * documentation and/or other materials provided with the distribution. X * 3. All advertising materials mentioning features or use of this software X * must display the following acknowledgement: X * This product includes software contributed to 386BSD and developed X * by Hellmuth Michaelis X * 4. Neither the name of the developers nor the names "386BSD" and "pcvt" X * may be used to endorse or promote products derived from this software X * without specific prior written permission. X * X * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR X * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES X * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. X * IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT, X * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT X * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, X * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY X * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT X * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF X * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. X */ X X/* X * @(#)pcvt_tbl.h 2.00 (contributed to 386BSD) X * Last Edit-Date: [Sun Jan 3 15:04:28 1993] X */ X X/*---------------------------------------------------------------------------* X * X * pcvt_tbl.h VT220 Driver Character Set Conversion Tables X * ------------------------------------------------------------ X * X * written by Hellmuth Michaelis, hm@hcshh.hcs.de X * X * -hm splitting off pccons_out.c X * -hm default tables for pure mda/hcg/cga X * X * in pcvt_out.c, hooks are provided for the following charactersets: X * X * HAVECS_BRITISH X * HAVECS_ASCII X * HAVECS_FINNISH X * HAVECS_NORWEGIANDANISH X * HAVECS_SWEDISH X * HAVECS_GERMAN X * HAVECS_FRENCHCANADA X * HAVECS_FRENCH X * HAVECS_ITALIAN X * HAVECS_SPANISH X * HAVECS_SPECIAL X * HAVECS_ALTERNATEROM1 X * HAVECS_ALTERNATEROM2 X * HAVECS_ROMAN8 X * HAVECS_DUTCH X * HAVECS_SUPPLEMENTAL X * HAVECS_SWISS X * HAVECS_TECHNICAL X * HAVECS_ISOLATIN X * X * to add support for a new charcterset, you have to provide the X * table named "cs_<charset>",define the according "HAVECS_<CHARSET>" X * and recompile everything. ref: pcvt_out.c, vt_designate() X * X *---------------------------------------------------------------------------*/ X X/*===========================================================================* X * DEFAULT TABLES FOR MDA/HCG/CGA X *===========================================================================*/ X X/*---------------------------------------------------------------------------* X * ASCII Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSD_ASCII Xu_short csd_ascii[CSSIZE] = { X/* 20 */ 0x20 | CSL, 0x21 | CSL, 0x22 | CSL, 0x23 | CSL, X/* 24 */ 0x24 | CSL, 0x25 | CSL, 0x26 | CSL, 0x27 | CSL, X/* 28 */ 0x28 | CSL, 0x29 | CSL, 0x2A | CSL, 0x2B | CSL, X/* 2C */ 0x2C | CSL, 0x2D | CSL, 0x2E | CSL, 0x2F | CSL, X X/* 30 */ 0x30 | CSL, 0x31 | CSL, 0x32 | CSL, 0x33 | CSL, X/* 34 */ 0x34 | CSL, 0x35 | CSL, 0x36 | CSL, 0x37 | CSL, X/* 38 */ 0x38 | CSL, 0x39 | CSL, 0x3A | CSL, 0x3B | CSL, X/* 3C */ 0x3C | CSL, 0x3D | CSL, 0x3E | CSL, 0x3F | CSL, X X/* 40 */ 0x40 | CSL, 0x41 | CSL, 0x42 | CSL, 0x43 | CSL, X/* 44 */ 0x44 | CSL, 0x45 | CSL, 0x46 | CSL, 0x47 | CSL, X/* 48 */ 0x48 | CSL, 0x49 | CSL, 0x4A | CSL, 0x4B | CSL, X/* 4C */ 0x4C | CSL, 0x4D | CSL, 0x4E | CSL, 0x4F | CSL, X X/* 50 */ 0x50 | CSL, 0x51 | CSL, 0x52 | CSL, 0x53 | CSL, X/* 54 */ 0x54 | CSL, 0x55 | CSL, 0x56 | CSL, 0x57 | CSL, X/* 58 */ 0x58 | CSL, 0x59 | CSL, 0x5A | CSL, 0x5B | CSL, X/* 5C */ 0x5C | CSL, 0x5D | CSL, 0x5E | CSL, 0x5F | CSL, X X/* 60 */ 0x60 | CSL, 0x61 | CSL, 0x62 | CSL, 0x63 | CSL, X/* 64 */ 0x64 | CSL, 0x65 | CSL, 0x66 | CSL, 0x67 | CSL, X/* 68 */ 0x68 | CSL, 0x69 | CSL, 0x6A | CSL, 0x6B | CSL, X/* 6C */ 0x6C | CSL, 0x6D | CSL, 0x6E | CSL, 0x6F | CSL, X X/* 70 */ 0x70 | CSL, 0x71 | CSL, 0x72 | CSL, 0x73 | CSL, X/* 74 */ 0x74 | CSL, 0x75 | CSL, 0x76 | CSL, 0x77 | CSL, X/* 78 */ 0x78 | CSL, 0x79 | CSL, 0x7A | CSL, 0x7B | CSL, X/* 7C */ 0x7C | CSL, 0x7D | CSL, 0x7E | CSL, 0x7F | CSL, X}; X X/*---------------------------------------------------------------------------* X * DEC Supplemental Graphic Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSD_SUPPLEMENTAL Xu_short csd_supplemental[CSSIZE] = { X/* 20 */ 0x20 | CSL, 0xAD | CSL, 0x9B | CSL, 0x9C | CSL, X/* 24 */ 0x20 | CSL, 0x9D | CSL, 0x20 | CSL, 0x20 | CSL, X/* 28 */ 0x20 | CSL, 0x20 | CSL, 0xA6 | CSL, 0xAE | CSL, X/* 2C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X X/* 30 */ 0xF8 | CSL, 0xF1 | CSL, 0xFD | CSL, 0x20 | CSL, X/* 34 */ 0x20 | CSL, 0xE6 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 38 */ 0x20 | CSL, 0x20 | CSL, 0xA7 | CSL, 0xAF | CSL, X/* 3C */ 0xAC | CSL, 0xAB | CSL, 0x20 | CSL, 0xA8 | CSL, X X/* 40 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 44 */ 0x8E | CSL, 0x8F | CSL, 0x92 | CSL, 0x80 | CSL, X/* 48 */ 0x20 | CSL, 0x90 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 4C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL, X X/* 50 */ 0x20 | CSL, 0xA5 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 54 */ 0x20 | CSL, 0x20 | CSL, 0x99 | CSL, 0x20 | CSL, X/* 58 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 5C */ 0x9A | CSL, 0x20 | CSL, 0x20 | CSL, 0xE1 | CSL, X X/* 60 */ 0x85 | CSL, 0xA0 | CSL, 0x83 | CSL, 0x20 | CSL, X/* 64 */ 0x84 | CSL, 0x86 | CSL, 0x91 | CSL, 0x87 | CSL, X/* 68 */ 0x8A | CSL, 0x82 | CSL, 0x88 | CSL, 0x89 | CSL, X/* 6C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL, X X/* 70 */ 0x20 | CSL, 0xA4 | CSL, 0x95 | CSL, 0xA2 | CSL, X/* 74 */ 0x93 | CSL, 0x20 | CSL, 0x94 | CSL, 0x20 | CSL, X/* 78 */ 0x20 | CSL, 0x97 | CSL, 0xA3 | CSL, 0x96 | CSL, X/* 7C */ 0x81 | CSL, 0x98 | CSL, 0x20 | CSL, 0x20 | CSL X}; X X/*---------------------------------------------------------------------------* X * DEC Special Graphic Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSD_SPECIAL Xu_short csd_special[CSSIZE] = { X/* 20 */ 0x20 | CSL, 0x21 | CSL, 0x22 | CSL, 0x23 | CSL, X/* 24 */ 0x24 | CSL, 0x25 | CSL, 0x26 | CSL, 0x27 | CSL, X/* 28 */ 0x28 | CSL, 0x29 | CSL, 0x2A | CSL, 0x2B | CSL, X/* 2C */ 0x2C | CSL, 0x2D | CSL, 0x2E | CSL, 0x2F | CSL, X X/* 30 */ 0x30 | CSL, 0x31 | CSL, 0x32 | CSL, 0x33 | CSL, X/* 34 */ 0x34 | CSL, 0x35 | CSL, 0x36 | CSL, 0x37 | CSL, X/* 38 */ 0x38 | CSL, 0x39 | CSL, 0x3A | CSL, 0x3B | CSL, X/* 3C */ 0x3C | CSL, 0x3D | CSL, 0x3E | CSL, 0x3F | CSL, X X/* 40 */ 0x40 | CSL, 0x41 | CSL, 0x42 | CSL, 0x43 | CSL, X/* 44 */ 0x44 | CSL, 0x45 | CSL, 0x46 | CSL, 0x47 | CSL, X/* 48 */ 0x48 | CSL, 0x49 | CSL, 0x4A | CSL, 0x4B | CSL, X/* 4C */ 0x4C | CSL, 0x4D | CSL, 0x4E | CSL, 0x4F | CSL, X X/* 50 */ 0x50 | CSL, 0x51 | CSL, 0x52 | CSL, 0x53 | CSL, X/* 54 */ 0x54 | CSL, 0x55 | CSL, 0x56 | CSL, 0x57 | CSL, X/* 58 */ 0x58 | CSL, 0x59 | CSL, 0x5A | CSL, 0x5B | CSL, X/* 5C */ 0x5C | CSL, 0x5D | CSL, 0x5E | CSL, 0x20 | CSL, X X/* 60 */ 0x20 | CSL, 0xB0 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 64 */ 0x20 | CSL, 0x20 | CSL, 0xF8 | CSL, 0xF1 | CSL, X/* 68 */ 0x20 | CSL, 0x20 | CSL, 0xD9 | CSL, 0xBF | CSL, X/* 6C */ 0xDA | CSL, 0xC0 | CSL, 0xC5 | CSL, 0x20 | CSL, X X/* 70 */ 0x20 | CSL, 0xC4 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 74 */ 0xC3 | CSL, 0xB4 | CSL, 0xC1 | CSL, 0xC2 | CSL, X/* 78 */ 0xB3 | CSL, 0xF3 | CSL, 0xF2 | CSL, 0xE3 | CSL, X/* 7C */ 0x20 | CSL, 0x9C | CSL, 0x20 | CSL, 0x20 | CSL X}; X X/*---------------------------------------------------------------------------* X * DEC Technical Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSD_TECHNICAL Xu_short csd_technical[CSSIZE] = { X/* 20 */ 0xFE | CSH, 0xFB | CSL, 0xDA | CSL, 0xC4 | CSL, X/* 24 */ 0xF4 | CSL, 0xF5 | CSL, 0xB3 | CSL, 0xDA | CSL, X/* 28 */ 0xC0 | CSL, 0xBF | CSL, 0xD9 | CSL, 0x20 | CSL, X/* 2C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X X/* 30 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 34 */ 0x20 | CSL, 0xAA | CSL, 0xA9 | CSL, 0x3E | CSL, X/* 38 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 3C */ 0xF3 | CSL, 0x20 | CSL, 0xF2 | CSL, 0x20 | CSL, X X/* 40 */ 0x20 | CSL, 0x20 | CSL, 0xEC | CSL, 0xF6 | CSL, X/* 44 */ 0x20 | CSL, 0x20 | CSL, 0xE8 | CSL, 0xE2 | CSL, X/* 48 */ 0x20 | CSL, 0xF7 | CSL, 0xE9 | CSL, 0x78 | CSL, X/* 4C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0xF0 | CSL, X X/* 50 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0xE4 | CSL, X/* 54 */ 0x20 | CSL, 0x20 | CSL, 0xFB | CSL, 0xEA | CSL, X/* 58 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 5C */ 0xEF | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X X/* 60 */ 0xAA | CSL, 0xE0 | CSL, 0xE1 | CSL, 0x20 | CSL, X/* 64 */ 0xEB | CSL, 0x20 | CSL, 0xED | CSL, 0x59 | CSL, X/* 68 */ 0x20 | CSL, 0x20 | CSL, 0xE9 | CSL, 0x20 | CSL, X/* 6C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X X/* 70 */ 0xE3 | CSL, 0x20 | CSL, 0x20 | CSL, 0xE5 | CSL, X/* 74 */ 0xE7 | CSL, 0x20 | CSL, 0x9F | CSL, 0x20 | CSL, X/* 78 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 7C */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL X}; X X/*---------------------------------------------------------------------------* X * ISO Latin-1 Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSD_ISOLATIN Xu_short csd_isolatin[CSSIZE] = { X/* 20 */ 0x20 | CSL, 0xAD | CSL, 0x9B | CSL, 0x9C | CSL, X/* 24 */ 0x20 | CSL, 0x9D | CSL, 0x7C | CSL, 0x20 | CSL, X/* 28 */ 0x22 | CSL, 0x20 | CSL, 0xA6 | CSL, 0xAE | CSL, X/* 2C */ 0xAA | CSL, 0x2D | CSL, 0x20 | CSL, 0x2D | CSL, X X/* 30 */ 0xF8 | CSL, 0xF1 | CSL, 0xFD | CSL, 0x20 | CSL, X/* 34 */ 0x27 | CSL, 0xE6 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 38 */ 0x20 | CSL, 0x20 | CSL, 0xA7 | CSL, 0xAF | CSL, X/* 3C */ 0xAC | CSL, 0xAB | CSL, 0x20 | CSL, 0xA8 | CSL, X X/* 40 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 44 */ 0x8E | CSL, 0x8F | CSL, 0x92 | CSL, 0x80 | CSL, X/* 48 */ 0x20 | CSL, 0x90 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 4C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL, X X/* 50 */ 0x20 | CSL, 0xA5 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 54 */ 0x20 | CSL, 0x20 | CSL, 0x99 | CSL, 0x78 | CSL, X/* 58 */ 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, 0x20 | CSL, X/* 5C */ 0x9A | CSL, 0x20 | CSL, 0x20 | CSL, 0xE1 | CSL, X X/* 60 */ 0x85 | CSL, 0xA0 | CSL, 0x83 | CSL, 0x20 | CSL, X/* 64 */ 0x84 | CSL, 0x86 | CSL, 0x91 | CSL, 0x87 | CSL, X/* 68 */ 0x8A | CSL, 0x82 | CSL, 0x88 | CSL, 0x89 | CSL, X/* 6C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL, X X/* 70 */ 0x20 | CSL, 0xA4 | CSL, 0x95 | CSL, 0xA2 | CSL, X/* 74 */ 0x93 | CSL, 0x20 | CSL, 0x94 | CSL, 0xF6 | CSL, X/* 78 */ 0x20 | CSL, 0x97 | CSL, 0xA3 | CSL, 0x96 | CSL, X/* 7C */ 0x81 | CSL, 0x20 | CSL, 0x20 | CSL, 0x98 | CSL X}; X X/*===========================================================================* X * EXTENDED TABLES FOR EGA/VGA X *===========================================================================*/ X X/*---------------------------------------------------------------------------* X * ASCII Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSE_ASCII Xu_short cse_ascii[CSSIZE] = { X/* 20 */ 0x20 | CSL, 0x21 | CSL, 0x22 | CSL, 0x23 | CSL, X/* 24 */ 0x24 | CSL, 0x25 | CSL, 0x26 | CSL, 0x27 | CSL, X/* 28 */ 0x28 | CSL, 0x29 | CSL, 0x2A | CSL, 0x2B | CSL, X/* 2C */ 0x2C | CSL, 0x2D | CSL, 0x2E | CSL, 0x2F | CSL, X X/* 30 */ 0x30 | CSL, 0x31 | CSL, 0x32 | CSL, 0x33 | CSL, X/* 34 */ 0x34 | CSL, 0x35 | CSL, 0x36 | CSL, 0x37 | CSL, X/* 38 */ 0x38 | CSL, 0x39 | CSL, 0x3A | CSL, 0x3B | CSL, X/* 3C */ 0x3C | CSL, 0x3D | CSL, 0x3E | CSL, 0x3F | CSL, X X/* 40 */ 0x40 | CSL, 0x41 | CSL, 0x42 | CSL, 0x43 | CSL, X/* 44 */ 0x44 | CSL, 0x45 | CSL, 0x46 | CSL, 0x47 | CSL, X/* 48 */ 0x48 | CSL, 0x49 | CSL, 0x4A | CSL, 0x4B | CSL, X/* 4C */ 0x4C | CSL, 0x4D | CSL, 0x4E | CSL, 0x4F | CSL, X X/* 50 */ 0x50 | CSL, 0x51 | CSL, 0x52 | CSL, 0x53 | CSL, X/* 54 */ 0x54 | CSL, 0x55 | CSL, 0x56 | CSL, 0x57 | CSL, X/* 58 */ 0x58 | CSL, 0x59 | CSL, 0x5A | CSL, 0x5B | CSL, X/* 5C */ 0x5C | CSL, 0x5D | CSL, 0x5E | CSL, 0x5F | CSL, X X/* 60 */ 0x60 | CSL, 0x61 | CSL, 0x62 | CSL, 0x63 | CSL, X/* 64 */ 0x64 | CSL, 0x65 | CSL, 0x66 | CSL, 0x67 | CSL, X/* 68 */ 0x68 | CSL, 0x69 | CSL, 0x6A | CSL, 0x6B | CSL, X/* 6C */ 0x6C | CSL, 0x6D | CSL, 0x6E | CSL, 0x6F | CSL, X X/* 70 */ 0x70 | CSL, 0x71 | CSL, 0x72 | CSL, 0x73 | CSL, X/* 74 */ 0x74 | CSL, 0x75 | CSL, 0x76 | CSL, 0x77 | CSL, X/* 78 */ 0x78 | CSL, 0x79 | CSL, 0x7A | CSL, 0x7B | CSL, X/* 7C */ 0x7C | CSL, 0x7D | CSL, 0x7E | CSL, 0xB0 | CSL, X}; X X/*---------------------------------------------------------------------------* X * DEC Supplemental Graphic Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSE_SUPPLEMENTAL Xu_short cse_supplemental[CSSIZE] = { X/* 20 */ 0x20 | CSL, 0xAD | CSL, 0x9B | CSL, 0x9C | CSL, X/* 24 */ 0x9F | CSH, 0x67 | CSH, 0x9F | CSH, 0x15 | CSL, X/* 28 */ 0x9D | CSH, 0x9C | CSH, 0xA6 | CSL, 0xAE | CSL, X/* 2C */ 0x9F | CSH, 0x9F | CSH, 0x9F | CSH, 0x9F | CSH, X X/* 30 */ 0xF8 | CSL, 0xF1 | CSL, 0xFD | CSL, 0x9B | CSH, X/* 34 */ 0x9F | CSH, 0xE6 | CSL, 0x14 | CSL, 0x99 | CSH, X/* 38 */ 0x9F | CSH, 0x98 | CSH, 0xA7 | CSL, 0xAF | CSL, X/* 3C */ 0xAC | CSL, 0xAB | CSL, 0x9F | CSH, 0xA8 | CSL, X X/* 40 */ 0x97 | CSH, 0x96 | CSH, 0x95 | CSH, 0x94 | CSH, X/* 44 */ 0x8E | CSL, 0x8F | CSL, 0x92 | CSL, 0x80 | CSL, X/* 48 */ 0x93 | CSH, 0x90 | CSL, 0x92 | CSH, 0x91 | CSH, X/* 4C */ 0x90 | CSH, 0x8F | CSH, 0x8E | CSH, 0x8D | CSH, X X/* 50 */ 0x9F | CSH, 0xA5 | CSL, 0x8C | CSH, 0x8B | CSH, X/* 54 */ 0x8A | CSH, 0x89 | CSH, 0x99 | CSL, 0x88 | CSH, X/* 58 */ 0x87 | CSH, 0x86 | CSH, 0x85 | CSH, 0x84 | CSH, X/* 5C */ 0x9A | CSL, 0x83 | CSH, 0x9F | CSH, 0xE1 | CSL, X X/* 60 */ 0x85 | CSL, 0xA0 | CSL, 0x83 | CSL, 0x82 | CSH, X/* 64 */ 0x84 | CSL, 0x86 | CSL, 0x91 | CSL, 0x87 | CSL, X/* 68 */ 0x8A | CSL, 0x82 | CSL, 0x88 | CSL, 0x89 | CSL, X/* 6C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL, X X/* 70 */ 0x9F | CSH, 0xA4 | CSL, 0x95 | CSL, 0xA2 | CSL, X/* 74 */ 0x93 | CSL, 0x81 | CSH, 0x94 | CSL, 0x80 | CSH, X/* 78 */ 0x7F | CSH, 0x97 | CSL, 0xA3 | CSL, 0x96 | CSL, X/* 7C */ 0x81 | CSL, 0x98 | CSL, 0x9F | CSH, 0x20 | CSL X}; X X/*---------------------------------------------------------------------------* X * DEC Special Graphic Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSE_SPECIAL Xu_short cse_special[CSSIZE] = { X/* 20 */ 0x20 | CSL, 0x21 | CSL, 0x22 | CSL, 0x23 | CSL, X/* 24 */ 0x24 | CSL, 0x25 | CSL, 0x26 | CSL, 0x27 | CSL, X/* 28 */ 0x28 | CSL, 0x29 | CSL, 0x2A | CSL, 0x2B | CSL, X/* 2C */ 0x2C | CSL, 0x2D | CSL, 0x2E | CSL, 0x2F | CSL, X X/* 30 */ 0x30 | CSL, 0x31 | CSL, 0x32 | CSL, 0x33 | CSL, X/* 34 */ 0x34 | CSL, 0x35 | CSL, 0x36 | CSL, 0x37 | CSL, X/* 38 */ 0x38 | CSL, 0x39 | CSL, 0x3A | CSL, 0x3B | CSL, X/* 3C */ 0x3C | CSL, 0x3D | CSL, 0x3E | CSL, 0x3F | CSL, X X/* 40 */ 0x40 | CSL, 0x41 | CSL, 0x42 | CSL, 0x43 | CSL, X/* 44 */ 0x44 | CSL, 0x45 | CSL, 0x46 | CSL, 0x47 | CSL, X/* 48 */ 0x48 | CSL, 0x49 | CSL, 0x4A | CSL, 0x4B | CSL, X/* 4C */ 0x4C | CSL, 0x4D | CSL, 0x4E | CSL, 0x4F | CSL, X X/* 50 */ 0x50 | CSL, 0x51 | CSL, 0x52 | CSL, 0x53 | CSL, X/* 54 */ 0x54 | CSL, 0x55 | CSL, 0x56 | CSL, 0x57 | CSL, X/* 58 */ 0x58 | CSL, 0x59 | CSL, 0x5A | CSL, 0x5B | CSL, X/* 5C */ 0x5C | CSL, 0x5D | CSL, 0x5E | CSL, 0x20 | CSL, X X/* 60 */ 0x04 | CSL, 0xB0 | CSL, 0x09 | CSH, 0x0C | CSH, X/* 64 */ 0x0D | CSH, 0x0A | CSH, 0xF8 | CSL, 0xF1 | CSL, X/* 68 */ 0x00 | CSH, 0x0B | CSH, 0xD9 | CSL, 0xBF | CSL, X/* 6C */ 0xDA | CSL, 0xC0 | CSL, 0xC5 | CSL, 0x7D | CSH, X X/* 70 */ 0x7C | CSH, 0x7B | CSH, 0x7A | CSH, 0x79 | CSH, X/* 74 */ 0xC3 | CSL, 0xB4 | CSL, 0xC1 | CSL, 0xC2 | CSL, X/* 78 */ 0xB3 | CSL, 0xF3 | CSL, 0xF2 | CSL, 0xE3 | CSL, X/* 7C */ 0x78 | CSH, 0x9C | CSL, 0x99 | CSH, 0x20 | CSL X}; X X/*---------------------------------------------------------------------------* X * DEC Technical Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSE_TECHNICAL Xu_short cse_technical[CSSIZE] = { X/* 20 */ 0x20 | CSL, 0x65 | CSH, 0xDA | CSL, 0xC4 | CSL, X/* 24 */ 0xF4 | CSL, 0xF5 | CSL, 0xB3 | CSL, 0xDA | CSL, X/* 28 */ 0xC0 | CSL, 0xBF | CSL, 0xD9 | CSL, 0x61 | CSH, X/* 2C */ 0x62 | CSH, 0x63 | CSH, 0x64 | CSH, 0x5F | CSH, X X/* 30 */ 0x60 | CSH, 0x5E | CSH, 0x5D | CSH, 0x5C | CSH, X/* 34 */ 0x5B | CSH, 0xAA | CSL, 0xA9 | CSL, 0x3E | CSL, X/* 38 */ 0x9F | CSH, 0x9F | CSH, 0x9F | CSH, 0x9F | CSH, X/* 3C */ 0xF3 | CSL, 0x78 | CSH, 0xF2 | CSL, 0x5A | CSH, X X/* 40 */ 0x59 | CSH, 0x58 | CSH, 0xEC | CSL, 0xF6 | CSL, X/* 44 */ 0x57 | CSH, 0x56 | CSH, 0xE8 | CSL, 0xE2 | CSL, X/* 48 */ 0x77 | CSH, 0x55 | CSH, 0x54 | CSH, 0x6E | CSH, X/* 4C */ 0x53 | CSH, 0x52 | CSH, 0x51 | CSH, 0xF0 | CSL, X X/* 50 */ 0x50 | CSH, 0x4F | CSH, 0x9F | CSH, 0xE4 | CSL, X/* 54 */ 0x9F | CSH, 0x9F | CSH, 0xFB | CSL, 0xEA | CSL, X/* 58 */ 0x4E | CSH, 0x4D | CSH, 0x4C | CSH, 0x4B | CSH, X/* 5C */ 0xEF | CSL, 0x4A | CSH, 0x49 | CSH, 0x48 | CSH, X X/* 60 */ 0xAA | CSL, 0xE0 | CSL, 0xE1 | CSL, 0x47 | CSH, X/* 64 */ 0xEB | CSL, 0x46 | CSH, 0xED | CSL, 0x59 | CSL, X/* 68 */ 0x45 | CSH, 0x44 | CSH, 0xE9 | CSL, 0x9E | CSH, X/* 6C */ 0x43 | CSH, 0x9F | CSH, 0x76 | CSL, 0x42 | CSH, X X/* 70 */ 0xE3 | CSL, 0x41 | CSH, 0x40 | CSH, 0xE5 | CSL, X/* 74 */ 0xE7 | CSL, 0x9F | CSH, 0x9F | CSL, 0x66 | CSH, X/* 78 */ 0x68 | CSH, 0x7E | CSH, 0x9A | CSH, 0x1B | CSL, X/* 7C */ 0x18 | CSL, 0x1A | CSL, 0x19 | CSL, 0x20 | CSL X}; X X/*---------------------------------------------------------------------------* X * ISO Latin-1 Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSE_ISOLATIN Xu_short cse_isolatin[CSSIZE] = { X/* 20 */ 0x20 | CSL, 0xAD | CSL, 0x9B | CSL, 0x9C | CSL, X/* 24 */ 0x9D | CSH, 0x9D | CSL, 0x7C | CSL, 0x15 | CSL, X/* 28 */ 0x77 | CSH, 0x9C | CSH, 0xA6 | CSL, 0xAE | CSL, X/* 2C */ 0x76 | CSH, 0x75 | CSH, 0x74 | CSH, 0x73 | CSH, X X/* 30 */ 0xF8 | CSL, 0xF1 | CSL, 0xFD | CSL, 0x9B | CSH, X/* 34 */ 0x72 | CSH, 0xE6 | CSL, 0x14 | CSL, 0x99 | CSH, X/* 38 */ 0x71 | CSH, 0x98 | CSH, 0xA7 | CSL, 0xAF | CSL, X/* 3C */ 0xAC | CSL, 0xAB | CSL, 0x70 | CSH, 0xA8 | CSL, X X/* 40 */ 0x97 | CSH, 0x96 | CSH, 0x95 | CSH, 0x94 | CSH, X/* 44 */ 0x8E | CSL, 0x8F | CSL, 0x92 | CSL, 0x80 | CSL, X/* 48 */ 0x93 | CSH, 0x90 | CSL, 0x92 | CSH, 0x91 | CSH, X/* 4C */ 0x90 | CSH, 0x8F | CSH, 0x8E | CSH, 0x8D | CSH, X X/* 50 */ 0x6F | CSH, 0xA5 | CSL, 0x8C | CSH, 0x8B | CSH, X/* 54 */ 0x8A | CSH, 0x89 | CSH, 0x99 | CSL, 0x6E | CSH, X/* 58 */ 0x87 | CSH, 0x86 | CSH, 0x85 | CSH, 0x84 | CSH, X/* 5C */ 0x9A | CSL, 0x6D | CSH, 0x6C | CSH, 0xE1 | CSL, X X/* 60 */ 0x85 | CSL, 0xA0 | CSL, 0x83 | CSL, 0x82 | CSH, X/* 64 */ 0x84 | CSL, 0x86 | CSL, 0x91 | CSL, 0x87 | CSL, X/* 68 */ 0x8A | CSL, 0x82 | CSL, 0x88 | CSL, 0x89 | CSL, X/* 6C */ 0x8D | CSL, 0xA1 | CSL, 0x8C | CSL, 0x8B | CSL, X X/* 70 */ 0x6B | CSH, 0xA4 | CSL, 0x95 | CSL, 0xA2 | CSL, X/* 74 */ 0x93 | CSL, 0x81 | CSH, 0x94 | CSL, 0xF6 | CSL, X/* 78 */ 0x7F | CSH, 0x97 | CSL, 0xA3 | CSL, 0x96 | CSL, X/* 7C */ 0x81 | CSL, 0x69 | CSL, 0x6A | CSH, 0x98 | CSL X}; X X/*---------------------------------------------------------------------------* X * Downloadable Characterset X *---------------------------------------------------------------------------*/ X#define HAVECSE_DOWNLOADABLE Xu_short cse_downloadable[CSSIZE] = { X/* 20 */ 0xA0 | CSH, 0xA1 | CSH, 0xA2 | CSH, 0xA3 | CSH, X/* 24 */ 0xA4 | CSH, 0xA5 | CSH, 0xA6 | CSH, 0xA7 | CSH, X/* 28 */ 0xA8 | CSH, 0xA9 | CSH, 0xAA | CSH, 0xAB | CSH, X/* 2C */ 0xAC | CSH, 0xAD | CSH, 0xAE | CSH, 0xAF | CSH, X X/* 30 */ 0xB0 | CSH, 0xB1 | CSH, 0xB2 | CSH, 0xB3 | CSH, X/* 34 */ 0xB4 | CSH, 0xB5 | CSH, 0xB6 | CSH, 0xB7 | CSH, X/* 38 */ 0xB8 | CSH, 0xB9 | CSH, 0xBA | CSH, 0xBB | CSH, X/* 3C */ 0xBC | CSH, 0xBD | CSH, 0xBE | CSH, 0xBF | CSH, X X/* 40 */ 0xC0 | CSH, 0xC1 | CSH, 0xC2 | CSH, 0xC3 | CSH, X/* 44 */ 0xC4 | CSH, 0xC5 | CSH, 0xC6 | CSH, 0xC7 | CSH, X/* 48 */ 0xC8 | CSH, 0xC9 | CSH, 0xCA | CSH, 0xCB | CSH, X/* 4C */ 0xCC | CSH, 0xCD | CSH, 0xCE | CSH, 0xCF | CSH, X X/* 50 */ 0xD0 | CSH, 0xD1 | CSH, 0xD2 | CSH, 0xD3 | CSH, X/* 54 */ 0xD4 | CSH, 0xD5 | CSH, 0xD6 | CSH, 0xD7 | CSH, X/* 58 */ 0xD8 | CSH, 0xD9 | CSH, 0xDA | CSH, 0xDB | CSH, X/* 5C */ 0xDC | CSH, 0xDD | CSH, 0xDE | CSH, 0xDF | CSH, X X/* 60 */ 0xE0 | CSH, 0xE1 | CSH, 0xE2 | CSH, 0xE3 | CSH, X/* 64 */ 0xE4 | CSH, 0xE5 | CSH, 0xE6 | CSH, 0xE7 | CSH, X/* 68 */ 0xE8 | CSH, 0xE9 | CSH, 0xEA | CSH, 0xEB | CSH, X/* 6C */ 0xEC | CSH, 0xED | CSH, 0xEE | CSH, 0xEF | CSH, X X/* 70 */ 0xF0 | CSH, 0xF1 | CSH, 0xF2 | CSH, 0xF3 | CSH, X/* 74 */ 0xF4 | CSH, 0xF5 | CSH, 0xF6 | CSH, 0xF7 | CSH, X/* 78 */ 0xF8 | CSH, 0xF9 | CSH, 0xFA | CSH, 0xFB | CSH, X/* 7C */ 0xFC | CSH, 0xFD | CSH, 0xFE | CSH, 0xFF | CSH, X}; X X/* ------------------------- E O F ------------------------------------------*/ SHAR_EOF $TOUCH -am 0114130693 pcvt_tbl.h && chmod 0660 pcvt_tbl.h || echo "restore of pcvt_tbl.h failed" set `wc -c pcvt_tbl.h`;Wc_c=$1 if test "$Wc_c" != "21369"; then echo original size 21369, current size $Wc_c fi fi exit 0 -- hellmuth michaelis HCS Hanseatischer Computerservice GmbH hamburg, europe hm@hcshh.hcs.de tel: +49/40/55903-170 fax: +49/40/5591486