Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP2:GA
xiterm
fbiterm-enhance.dif
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File fbiterm-enhance.dif of Package xiterm
--- unix/fbiterm/src/fb_true24.c-dist 2004-04-01 17:29:53.941573163 +0200 +++ unix/fbiterm/src/fb_true24.c 2004-04-01 19:45:32.966421735 +0200 @@ -95,21 +95,43 @@ fb_true24_set_rendition (int bold, int b void fb_true24_draw_char (unsigned char *dst, int offset, - unsigned char *bits, int width, int height) + unsigned char *bits, int cell_width, + const xCharInfo *info, + const TermFont *base) { int x, y; + int height; + unsigned int *dst24; + + /**** FIXME **** + * this shouldn't work on some architectures because of word boundary!! + */ + + height = (int)base->ascent - (int)info->ascent; + for (y = 0; y < height; y++) { + for (x = 0; x < cell_width; x++) { + dst24 = (unsigned int *) (dst + offset + 3 * x); + *dst24 = bgcmap; + } + dst += pIterm->fb->line_length; + } + + height = info->ascent + info->descent; for (y = 0; y < height; y++) { - unsigned long c1, c2, c3, c4, c, cc; + unsigned int c1, c2, c3, c4, c, cc; c1 = (*bits++ & 0x000000ff); c2 = (*bits++ & 0x000000ff); c3 = (*bits++ & 0x000000ff); c4 = (*bits++ & 0x000000ff); c = cc = (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; - for (x = 0; x < width; x++) + for (x = 0; x < info->leftSideBearing; x++) { + dst24 = (unsigned int *) (dst + offset + 3 * x); + *dst24 = bgcmap; + } + for (; x < info->rightSideBearing; x++) { - unsigned long *dst24; - dst24 = (unsigned long *) (dst + offset + 3 * x); + dst24 = (unsigned int *) (dst + offset + 3 * x); if ((pIterm->underline || pIterm->blink) && (height - y < 2)) *(dst24) = fgcmap; @@ -134,8 +156,20 @@ fb_true24_draw_char (unsigned char *dst, } c <<= 1; } + for (; x < cell_width; x++) { + dst24 = (unsigned int *) (dst + offset + 3 * x); + *dst24 = bgcmap; + } dst += pIterm->fb->line_length; } + height = base->descent - info->descent; + for (y = 0; y < height; y++) { + for (x = 0; x < cell_width; x++) { + dst24 = (unsigned int *) (dst + offset + 3 * x); + *dst24 = bgcmap; + } + dst += pIterm->fb->line_length; + } return; } @@ -147,6 +181,8 @@ fb_true24_draw_text (int col, int row, c unsigned char *bits; char *dst; mbstate_t ps; + const xCharInfo *cinfo; + const TermFont *base; if (pIterm->lock) return; @@ -184,21 +220,25 @@ fb_true24_draw_text (int col, int row, c if (len == 1 && mbstring[i] < 0x7f) { codepoint = (int) (mbstring[i] & 0x000000ff); - bits = get_glyph (pIterm->asc_font, codepoint, &height); + base = pIterm->asc_font; + bits = get_glyph2 (pIterm->asc_font, codepoint, &height, &cinfo); w = pIterm->asc_font->cell_width; } else { mbrtowc (&wc, (char *) &mbstring[i], len, 0); - bits = get_glyph (pIterm->mb_font, wc, &height); + base = pIterm->mb_font; + bits = get_glyph2 (pIterm->mb_font, wc, &height, &cinfo); wlen = wcwidth (wc); w = pIterm->asc_font->cell_width * (wlen > 0 ? wlen : 1); } } + else + break; i += len; dst = (char *) (pIterm->fb->buf + starty); - fb_true24_draw_char (dst, startx, bits, w, height); + fb_true24_draw_char (dst, startx, bits, w, cinfo, base); startx += (3 * w); } return; --- unix/fbiterm/src/fbiterm.c-dist 2004-04-01 15:37:49.000000000 +0200 +++ unix/fbiterm/src/fbiterm.c 2004-04-02 13:08:32.023077503 +0200 @@ -51,11 +51,12 @@ catchSignal () static void iterm_usage (void) { - fprintf (stdout, "Usage: iterm [ -a <fontfile> ] [ -m <fontfile> ] [ -v ]\n\ + fprintf (stdout, "Usage: fbiterm [-a <fontfile>] [-m <fontfile>] [-v] [-s <fontsize>] [cmds...]\n\ \n\ options:\n\ -a <fontfile>\tascii text font\n\ -m <fontfile>\tunicode text font\n\ + -s\t\tspecify the font size (12,14,16,24)\n\ -v\t\tprint version information and exit\n\ -h\t\tthis help message\n"); @@ -67,6 +68,8 @@ main (int argc, char *argv[]) { unsigned char buf[BUFSIZ + 1], *ascfontname, *mbfontname; int i; + int fontsize = 0; + char **prog_args; setlocale (LC_ALL, ""); @@ -90,23 +93,23 @@ main (int argc, char *argv[]) exit (1); } - ascfontname = DefaultAsc; - mbfontname = DefaultMB; - while ((i = getopt (argc, argv, "a:m:hv")) != EOF) + ascfontname = NULL; + mbfontname = NULL; + while ((i = getopt (argc, argv, "a:m:hvs:")) != EOF) switch (i) { case 'a': if (optarg != NULL) ascfontname = optarg; else - ascfontname = DefaultAsc; + ascfontname = NULL; break; case 'm': if (optarg != NULL) mbfontname = optarg; else - mbfontname = DefaultMB; + mbfontname = NULL; break; case 'v': @@ -114,18 +117,37 @@ main (int argc, char *argv[]) exit (0); break; + case 's': + fontsize = atoi(optarg); + break; + case 'h': default: iterm_usage (); break; } - if (optind < argc) - iterm_usage (); + prog_args = NULL; + if (optind < argc) { + int i, j, num_args = argc - optind; + prog_args = malloc(sizeof(char*) * (num_args + 1)); + if (! prog_args) { + fprintf(stderr, "can't malloc args\n"); + exit(1); + } + for (i = 0, j = optind; j < argc; i++, j++) + prog_args[i] = argv[j]; + prog_args[i] = NULL; + } /* initialize font/framebuffer/terminal/VT/input */ - if (InitFont (ascfontname, mbfontname) < 0) - exitFbiterm (FONT_ERROR_EXIT); + if (fontsize) { + if (InitFontWithSize (fontsize) < 0) + exitFbiterm (FONT_ERROR_EXIT); + } else { + if (InitFont (ascfontname, mbfontname) < 0) + exitFbiterm (FONT_ERROR_EXIT); + } if (InitTerm () < 0) exitFbiterm (TERM_ERROR_EXIT); @@ -135,7 +157,7 @@ main (int argc, char *argv[]) exitFbiterm (FB_ERROR_EXIT); pIterm->fbInitialized = 1; - if (InitVt () < 0) + if (InitVt (prog_args) < 0) exitFbiterm (VT_ERROR_EXIT); if (InitInput () < 0) --- unix/fbiterm/src/fbiterm.h-dist 2004-04-01 17:09:59.294149629 +0200 +++ unix/fbiterm/src/fbiterm.h 2004-04-01 19:37:44.106428870 +0200 @@ -53,10 +53,6 @@ #define FB_ENV "FRAMEBUFFER" #define FB_DEFDEV "/dev/fb0" -#define DefaultAsc "/usr/lib/X11/fonts/misc/8x16.pcf.gz" -#define DefaultMB "/usr/lib/X11/fonts/misc/unifont.pcf.gz" -#define DefaultFont "/usr/local/share/iterm/fonts/8x16.pcf.gz" - enum ITERM_RETCODE { ITERM_REPLACEFONT = 1, @@ -89,6 +85,8 @@ typedef struct _TermFont FontRec *frec; /* FontRec structure (defined by X11) */ int cell_width; /* cell width per character */ int cell_height; /* cell height per character */ + int ascent; + int descent; } TermFont; @@ -137,9 +135,10 @@ Iterm; /* function prototypes */ int InitFont (char *ascfont, char *mbfont); +int InitFontWithSize (int fontsize); int InitFb (); int InitTerm (); -int InitVt (); +int InitVt (char **prog_args); int InitInput (void); void exitFbiterm (int exitcode); @@ -193,7 +192,8 @@ extern void VTCore_set_direction (); extern int wcwidth (wint_t __c) __THROW; - extern unsigned char *get_glyph (); +// extern unsigned char *get_glyph (); + extern unsigned char *get_glyph2 (); extern Iterm *pIterm; #endif /* __ITERM_H__ */ --- unix/fbiterm/src/fb_true8.c-dist 2004-04-01 17:29:15.207340311 +0200 +++ unix/fbiterm/src/fb_true8.c 2004-04-01 19:38:11.825162859 +0200 @@ -84,23 +84,37 @@ fb_true8_set_rendition (int bold, int bl void fb_true8_draw_char (unsigned char *dst, int offset, - unsigned char *bits, int width, int height) + unsigned char *bits, int cell_width, + const xCharInfo *info, + const TermFont *base) { int x, y; + int height; + unsigned char *dst8; + height = (int)base->ascent - (int)info->ascent; + for (y = 0; y < height; y++) { + dst8 = (unsigned char *) (dst + offset); + for (x = 0; x < cell_width; x++) + *dst8++ = (char) bgcmap; + dst += pIterm->fb->line_length; + } + + height = info->ascent + info->descent; for (y = 0; y < height; y++) { - unsigned long c1, c2, c3, c4, c, cc; + unsigned int c1, c2, c3, c4, c, cc; c1 = (*bits++ & 0x000000ff); c2 = (*bits++ & 0x000000ff); c3 = (*bits++ & 0x000000ff); c4 = (*bits++ & 0x000000ff); c = cc = (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; - for (x = 0; x < width; x++) + dst8 = (unsigned char *) (dst + offset); + for (x = 0; x < info->leftSideBearing; x++) { + *dst8++ = (char) bgcmap; + } + for (; x < info->rightSideBearing; x++, dst8++) { - unsigned char *dst8; - dst8 = (unsigned char *) (dst + offset + x); - if (pIterm->underline && (height - y < 2)) *(dst8) = fgcmap; else @@ -122,8 +136,17 @@ fb_true8_draw_char (unsigned char *dst, } c <<= 1; } + for (; x < cell_width; x++) + *dst8++ = (char) bgcmap; dst += pIterm->fb->line_length; } + height = base->descent - info->descent; + for (y = 0; y < height; y++) { + dst8 = (unsigned char *) (dst + offset); + for (x = 0; x < cell_width; x++) + *dst8++ = (char) bgcmap; + dst += pIterm->fb->line_length; + } return; } @@ -135,6 +158,8 @@ fb_true8_draw_text (int col, int row, ch unsigned char *bits; char *dst; mbstate_t ps; + const xCharInfo *cinfo; + const TermFont *base; if (pIterm->lock) return; @@ -172,21 +197,25 @@ fb_true8_draw_text (int col, int row, ch if (len == 1 && mbstring[i] < 0x7f) { codepoint = (int) (mbstring[i] & 0x000000ff); - bits = get_glyph (pIterm->asc_font, codepoint, &height); + base = pIterm->asc_font; + bits = get_glyph2 (pIterm->asc_font, codepoint, &height, &cinfo); w = pIterm->asc_font->cell_width; } else { mbrtowc (&wc, (char *) &mbstring[i], len, 0); - bits = get_glyph (pIterm->mb_font, wc, &height); + base = pIterm->mb_font; + bits = get_glyph2 (pIterm->mb_font, wc, &height, &cinfo); wlen = wcwidth (wc); w = pIterm->asc_font->cell_width * (wlen > 0 ? wlen : 1); } } + else + break; i += len; dst = (char *) (pIterm->fb->buf + starty); - fb_true8_draw_char (dst, startx, bits, w, height); + fb_true8_draw_char (dst, startx, bits, w, cinfo, base); startx += w; } return; --- unix/fbiterm/src/font_stubs.c-dist 2004-04-01 17:28:58.374150309 +0200 +++ unix/fbiterm/src/font_stubs.c 2004-04-01 17:29:03.051091740 +0200 @@ -22,14 +22,6 @@ init_fs_handlers () { } void -ceil () -{ -} -void -floor () -{ -} -void ClientSignal () { } --- unix/fbiterm/src/fb_true32.c-dist 2004-04-01 19:33:49.233517488 +0200 +++ unix/fbiterm/src/fb_true32.c 2004-04-01 19:37:34.718551031 +0200 @@ -96,22 +96,37 @@ fb_true32_set_rendition (int bold, int b void fb_true32_draw_char (unsigned char *dst, int offset, - unsigned char *bits, int width, int height) + unsigned char *bits, int cell_width, + const xCharInfo *info, + const TermFont *base) { int x, y; + int height; + unsigned int *dst32; + + height = (int)base->ascent - (int)info->ascent; + for (y = 0; y < height; y++) { + dst32 = (unsigned int *) (dst + offset); + for (x = 0; x < cell_width; x++) + *dst32++ = bgcmap; + dst += pIterm->fb->line_length; + } + + height = (int)info->ascent + (int)info->descent; for (y = 0; y < height; y++) { - unsigned long c1, c2, c3, c4, c, cc; + unsigned int c1, c2, c3, c4, c, cc; c1 = (*bits++ & 0x000000ff); c2 = (*bits++ & 0x000000ff); c3 = (*bits++ & 0x000000ff); c4 = (*bits++ & 0x000000ff); c = cc = (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; - for (x = 0; x < width; x++) + dst32 = (unsigned int *) (dst + offset); + for (x = 0; x < info->leftSideBearing; x++) { + *dst32++ = bgcmap; + } + for (; x < info->rightSideBearing; x++, dst32++) { - unsigned int *dst32; - dst32 = (unsigned int *) (dst + offset + 4 * x); - if ((pIterm->underline || pIterm->blink) && (height - y < 2)) *(dst32) = fgcmap; else @@ -135,8 +150,17 @@ fb_true32_draw_char (unsigned char *dst, } c <<= 1; } + for (; x < cell_width; x++) + *dst32++ = bgcmap; dst += pIterm->fb->line_length; } + height = (int)base->descent - (int)info->descent; + for (y = 0; y < height; y++) { + dst32 = (unsigned int *) (dst + offset); + for (x = 0; x < cell_width; x++) + *dst32++ = bgcmap; + dst += pIterm->fb->line_length; + } return; } @@ -148,6 +172,8 @@ fb_true32_draw_text (int col, int row, c unsigned char *bits; char *dst; mbstate_t ps; + const xCharInfo *cinfo; + const TermFont *base; if (pIterm->lock) return; @@ -185,21 +211,25 @@ fb_true32_draw_text (int col, int row, c if (len == 1 && mbstring[i] < 0x7f) { codepoint = (int) (mbstring[i] & 0x000000ff); - bits = get_glyph (pIterm->asc_font, codepoint, &height); + base = pIterm->asc_font; + bits = get_glyph2 (pIterm->asc_font, codepoint, &height, &cinfo); w = pIterm->asc_font->cell_width; } else { mbrtowc (&wc, (char *) &mbstring[i], len, 0); - bits = get_glyph (pIterm->mb_font, wc, &height); + base = pIterm->mb_font; + bits = get_glyph2 (pIterm->mb_font, wc, &height, &cinfo); wlen = wcwidth (wc); w = pIterm->asc_font->cell_width * (wlen > 0 ? wlen : 1); } } + else + break; i += len; dst = (char *) (pIterm->fb->buf + starty); - fb_true32_draw_char (dst, startx, bits, w, height); + fb_true32_draw_char (dst, startx, bits, w, cinfo, base); startx += (4 * w); } return; --- unix/fbiterm/src/font.c-dist 2004-04-01 16:41:37.508753260 +0200 +++ unix/fbiterm/src/font.c 2004-04-01 19:39:57.556260303 +0200 @@ -114,14 +114,14 @@ get_glyph_codepoint (TermFont * fs, int } unsigned char * -get_glyph (TermFont * fs, int codepoint, unsigned int *height) +get_glyph2 (TermFont * fs, int codepoint, unsigned int *height, const xCharInfo **metricp) { unsigned short firstCol, lastCol, firstRow, lastRow; unsigned short col, row, numCols, numRows; unsigned int can_num, codep; int r, c, n; unsigned char *bits; - xCharInfo *metric; + const xCharInfo *metric; BitmapFontPtr bp = (BitmapFontPtr) (fs->frec->fontPrivate); CharInfoPtr cp = (CharInfoPtr) (bp->metrics); @@ -139,6 +139,7 @@ get_glyph (TermFont * fs, int codepoint, bits = dp->bits; metric = &(dp->metrics); *height = (metric->ascent + metric->descent); + *metricp = metric; can_num = codep = get_glyph_codepoint (fs, codepoint); @@ -160,14 +161,28 @@ get_glyph (TermFont * fs, int codepoint, bits = cp[n].bits; metric = &(cp[n].metrics); *height = (metric->ascent + metric->descent); + *metricp = metric; } return bits; } } +#if 0 + fprintf(stderr, "code:%x, left=%d,right=%d,wid=%d,asc=%d,dsc=%d\n", + codepoint, metric->leftSideBearing, metric->rightSideBearing, metric->characterWidth, metric->ascent, metric->descent); +#endif return bits; } +#if 0 +unsigned char * +get_glyph (TermFont * fs, int codepoint, unsigned int *height) +{ + xCharInfo *dummy; + return get_glyph2(fs, codepoint, height, &dummy); +} +#endif + /* load font */ TermFont * load_font (char *input_filename) @@ -228,6 +243,8 @@ load_font (char *input_filename) pFs->cell_width = font->info.maxbounds.characterWidth; pFs->cell_height = font->info.maxbounds.ascent + font->info.maxbounds.descent; + pFs->ascent = font->info.maxbounds.ascent; + pFs->descent = font->info.maxbounds.descent; #ifdef STRICT_DEF /* check terminal font */ @@ -265,9 +282,113 @@ load_font (char *input_filename) return pFs; } +static char *ascii_fonts10[] = { + "/usr/share/fonts/misc/h10.pcf.gz", + "/usr/lib/X11/fonts/misc/h10.pcf.gz", + NULL +}; +static char *mb_fonts10[] = { + "/usr/share/fonts/misc/b10.pcf.gz", + "/usr/share/fonts/misc/f10.pcf.gz", + "/usr/lib/X11/fonts/misc/b10.pcf.gz", + "/usr/lib/X11/fonts/misc/f10.pcf.gz", + NULL +}; + +static char *ascii_fonts12[] = { + "/usr/share/fonts/misc/6x12.pcf.gz", + "/usr/share/fonts/misc/h12.pcf.gz", + "/usr/lib/X11/fonts/misc/6x12.pcf.gz", + "/usr/lib/X11/fonts/misc/h12.pcf.gz", + NULL +}; +static char *mb_fonts12[] = { + "/usr/share/fonts/misc/b12.pcf.gz", + "/usr/share/fonts/misc/f12.pcf.gz", + "/usr/lib/X11/fonts/misc/b12.pcf.gz", + "/usr/lib/X11/fonts/misc/f12.pcf.gz", + NULL +}; + +static char *ascii_fonts14[] = { + "/usr/share/fonts/misc/7x14.pcf.gz", + "/usr/share/fonts/misc/h14.pcf.gz", + "/usr/lib/X11/fonts/misc/7x14.pcf.gz", + "/usr/lib/X11/fonts/misc/h14.pcf.gz", + NULL +}; +static char *mb_fonts14[] = { + "/usr/share/fonts/misc/b14.pcf.gz", + "/usr/share/fonts/misc/f14.pcf.gz", + "/usr/lib/X11/fonts/misc/b14.pcf.gz", + "/usr/lib/X11/fonts/misc/f14.pcf.gz", + NULL +}; + +static char *ascii_fonts16[] = { + "/usr/share/fonts/misc/8x16.pcf.gz", + "/usr/share/fonts/misc/h16.pcf.gz", + "/usr/lib/X11/fonts/misc/8x16.pcf.gz", + "/usr/lib/X11/fonts/misc/h16.pcf.gz", + "/usr/share/fbiterm/fonts/8x16.pcf.gz", + NULL +}; +static char *mb_fonts16[] = { + "/usr/share/fonts/misc/unifont.pcf.gz", + "/usr/share/fonts/misc/b16.pcf.gz", + "/usr/share/fonts/misc/f16.pcf.gz", + "/usr/lib/X11/fonts/misc/unifont.pcf.gz", + "/usr/lib/X11/fonts/misc/b16.pcf.gz", + "/usr/lib/X11/fonts/misc/f16.pcf.gz", + "/usr/share/fbiterm/fonts/b16.pcf.gz", + NULL +}; + +static char *ascii_fonts24[] = { + "/usr/share/fonts/misc/12x24.pcf.gz", + "/usr/share/fonts/misc/h24.pcf.gz", + "/usr/lib/X11/fonts/misc/12x24.pcf.gz", + "/usr/lib/X11/fonts/misc/h24.pcf.gz", + NULL +}; +static char *mb_fonts24[] = { + "/usr/share/fonts/misc/b24.pcf.gz", + "/usr/share/fonts/misc/f24.pcf.gz", + "/usr/lib/X11/fonts/misc/b24.pcf.gz", + "/usr/lib/X11/fonts/misc/f24.pcf.gz", + NULL +}; + +struct font_list { + int size; + char **ascii_fonts; + char **mb_fonts; +}; + +static struct font_list font_lists[] = { + { 10, ascii_fonts10, mb_fonts10 }, + { 12, ascii_fonts12, mb_fonts12 }, + { 14, ascii_fonts14, mb_fonts14 }, + { 16, ascii_fonts16, mb_fonts16 }, + { 24, ascii_fonts24, mb_fonts24 }, + { 0, }, +}; + + +static char *search_font(char **list) +{ + struct stat sbuf; + for (; *list; list++) { + if (! stat(*list, &sbuf)) + return *list; + } + return NULL; +} + /* Load X font */ -int -InitFont (char *ascfontfile, char *mbfontfile) +static int +do_init_font(char *ascfontfile, char *mbfontfile, + char **ascii_fonts, char **mb_fonts) { struct stat sbuf; int rc = 0; @@ -275,32 +374,24 @@ InitFont (char *ascfontfile, char *mbfon char *mbfname = mbfontfile; /* check mbfont first */ - if (stat (mbfname, &sbuf) < 0) - { - if (stat (DefaultMB, &sbuf) < 0) - { - if (stat (DefaultAsc, &sbuf) < 0) - { - if (stat (DefaultFont, &sbuf) < 0) - { - fprintf (stderr, "font file not found.\n"); - return -1; - } - else - { - mbfname = DefaultFont; - rc |= ITERM_REPLACEFONT; - } - } - else - { - mbfname = DefaultAsc; - rc |= ITERM_REPLACEFONT; - } - } - else - mbfname = DefaultMB; + if (! mbfname || stat (mbfname, &sbuf) < 0) { + mbfname = search_font(mb_fonts); + if (! mbfname) { + mbfname = search_font(ascii_fonts); + if (! mbfname) { + fprintf (stderr, "font file not found.\n"); + return -1; + } + rc |= ITERM_REPLACEFONT; } + } + if (! ascfname || stat (ascfname, &sbuf) < 0) { + ascfname = search_font(ascii_fonts); + if (! ascfname) { + fprintf (stderr, "font file not found.\n"); + return -1; + } + } pIterm->mb_font = (TermFont *) load_font (mbfname); if (pIterm->mb_font == NULL) @@ -309,23 +400,6 @@ InitFont (char *ascfontfile, char *mbfon return -1; } - /* check ascii font */ - if (stat (ascfname, &sbuf) < 0) - { - if (stat (DefaultAsc, &sbuf) < 0) - { - if (stat (DefaultFont, &sbuf) < 0) - { - fprintf (stderr, "ascii font file not found.\n"); - return -1; - } - else - ascfname = DefaultFont; - } - else - ascfname = DefaultAsc; - } - if (!strcmp (ascfname, mbfname)) pIterm->asc_font = pIterm->mb_font; else @@ -365,3 +439,26 @@ InitFont (char *ascfontfile, char *mbfon max (pIterm->asc_font->cell_height, pIterm->mb_font->cell_height); return rc; } + +/* + */ + +int +InitFont (char *ascfontfile, char *mbfontfile) +{ + /* choose 16pixel fonts */ + return do_init_font(ascfontfile, mbfontfile, ascii_fonts16, mb_fonts16); +} + +int +InitFontWithSize (int fontsize) +{ + struct font_list *l; + + for (l = font_lists; l->size; l++) { + if (l->size == fontsize) + return do_init_font(NULL, NULL, l->ascii_fonts, l->mb_fonts); + } + fprintf (stderr, "no matching font size found.\n"); + return -1; +} --- unix/fbiterm/src/fb_true16.c-dist 2004-04-01 17:29:39.349875880 +0200 +++ unix/fbiterm/src/fb_true16.c 2004-04-01 19:35:58.979192273 +0200 @@ -94,22 +94,37 @@ fb_true16_set_rendition (int bold, int b void fb_true16_draw_char (unsigned char *dst, int offset, - unsigned char *bits, int width, int height) + unsigned char *bits, int cell_width, + const xCharInfo *info, + const TermFont *base) { int x, y; + int height; + unsigned short *dst16; + + height = (int)base->ascent - (int)info->ascent; + for (y = 0; y < height; y++) { + dst16 = (unsigned short *) (dst + offset); + for (x = 0; x < cell_width; x++) + *dst16++ = bgcmap; + dst += pIterm->fb->line_length; + } + + height = (int)info->ascent + (int)info->descent; for (y = 0; y < height; y++) { - unsigned long c1, c2, c3, c4, c, cc; + unsigned int c1, c2, c3, c4, c, cc; c1 = (*bits++ & 0x000000ff); c2 = (*bits++ & 0x000000ff); c3 = (*bits++ & 0x000000ff); c4 = (*bits++ & 0x000000ff); c = cc = (c1 << 24) + (c2 << 16) + (c3 << 8) + c4; - for (x = 0; x < width; x++) + dst16 = (unsigned short *) (dst + offset); + for (x = 0; x < info->leftSideBearing; x++) { + *dst16++ = bgcmap; + } + for (; x < info->rightSideBearing; x++, dst16++) { - unsigned short *dst16; - dst16 = (unsigned short *) (dst + offset + 2 * x); - if ((pIterm->underline || pIterm->blink) && (height - y < 2)) *(dst16) = fgcmap; else @@ -133,8 +148,17 @@ fb_true16_draw_char (unsigned char *dst, } c <<= 1; } + for (; x < cell_width; x++) + *dst16++ = bgcmap; dst += pIterm->fb->line_length; } + height = (int)base->descent - (int)info->descent; + for (y = 0; y < height; y++) { + dst16 = (unsigned short *) (dst + offset); + for (x = 0; x < cell_width; x++) + *dst16++ = bgcmap; + dst += pIterm->fb->line_length; + } return; } @@ -146,6 +170,8 @@ fb_true16_draw_text (int col, int row, c unsigned char *bits; char *dst; mbstate_t ps; + const xCharInfo *cinfo; + const TermFont *base; if (pIterm->lock) return; @@ -183,21 +209,25 @@ fb_true16_draw_text (int col, int row, c if (len == 1 && mbstring[i] < 0x7f) { codepoint = (int) (mbstring[i] & 0x000000ff); - bits = get_glyph (pIterm->asc_font, codepoint, &height); + base = pIterm->asc_font; + bits = get_glyph2 (pIterm->asc_font, codepoint, &height, &cinfo); w = pIterm->asc_font->cell_width; } else { mbrtowc (&wc, (char *) &mbstring[i], len, 0); - bits = get_glyph (pIterm->mb_font, wc, &height); + base = pIterm->mb_font; + bits = get_glyph2 (pIterm->mb_font, wc, &height, &cinfo); wlen = wcwidth (wc); w = pIterm->asc_font->cell_width * (wlen > 0 ? wlen : 1); } } + else + break; i += len; dst = (char *) (pIterm->fb->buf + starty); - fb_true16_draw_char (dst, startx, bits, w, height); + fb_true16_draw_char (dst, startx, bits, w, cinfo, base); startx += (2 * w); } return; --- unix/fbiterm/src/vt.c-dist 2004-04-01 15:45:10.948683658 +0200 +++ unix/fbiterm/src/vt.c 2004-04-01 16:15:54.931946454 +0200 @@ -14,13 +14,17 @@ /* Initialize Terminal IO */ static TerminalIO * -init_io () +init_io ( char **program_args ) { - char *defaultShell = "/bin/sh"; char *shell; - char *program[] = { defaultShell, NULL }; + char *program[] = { "/bin/sh", NULL }; putenv ("TERM=iterm"); + if (program_args) { + return (TerminalIO *) TtyTerminalIO_new (pIterm->cols, pIterm->rows, + program_args[0], program_args); + } + shell = getenv ("SHELL"); if (shell != NULL && shell[0] != '\0') program[0] = shell; @@ -31,7 +35,7 @@ init_io () /* Initialize VT machine */ int -InitVt () +InitVt (char **prog_args) { /* create screen view object */ pIterm->view = VTScreenView_new (); @@ -43,7 +47,7 @@ InitVt () /* create terminal IO object */ ioctl (0, TIOCSCTTY, 0); - pIterm->tio = init_io (pIterm); + pIterm->tio = init_io (prog_args); if (pIterm->tio == NULL) { fprintf (stderr, "init_io() failed.\n"); --- /dev/null 2004-03-28 01:27:57.000000000 +0100 +++ unix/fbiterm/README.SUSE 2004-04-01 19:51:56.850602203 +0200 @@ -0,0 +1,8 @@ +this version of fbiterm is enhanced to support the following features: + +- run a given command from the command line argument directly and quits +- specify the font size with -s option (10,12,14,16,24 pixels) +- automatic search of supported fonts +- showing GNU unifonts correctly + +as default, 16bit font is used.
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor