argv%turnpike@Sun.COM (Dan Heller) (02/28/90)
Submitted-by: vojta@guinness.ias.edu (Paul A Vojta) Posting-number: Volume 6, Issue 5 Archive-name: xdvi/patch7 Patch-To: xdvi: Volume 3, Issue 37-39,46,57 Patch-To: xdvi: Volume 4, Issue 44,96 Patch-To: xdvi: Volume 5, Issue 35-36 This is patch 7 for xdvi. It replaces the -pagewidth and -pageheight options with a -paper option which is more convenient to use. Thanks to iis!prl, bingle@cs.purdue.edu, boaz@neutron.lcs.mit.edu, and others for fixes and bug reports. --Paul Vojta, vojta@guinness.ias.edu -- cut here -- diff -cr old/README new/README *** old/README Sun Feb 4 13:09:22 1990 --- new/README Sun Feb 4 12:50:09 1990 *************** *** 42,48 **** the left. For performance reasons, it would be best to set this to coincide with what your server uses. Use the keystroke '^P' to find information in this ! regard. BMSHORT (X11 only; xdvi.c dvi_draw.c gf.c pk.c pxl.c) Store bitmaps in short integers instead of bytes. See MSBITFIRST for other relevant comments. To check --- 42,52 ---- the left. For performance reasons, it would be best to set this to coincide with what your server uses. Use the keystroke '^P' to find information in this ! regard. Generally, you should use MSBITFIRST if and ! only if '^P' reports bitord = 1, and BMSHORT/BMLONG ! (below) should be set to match whatever '^P' reports ! under "Unit =". But, if bitord = byteord, then the ! latter setting should not matter much. BMSHORT (X11 only; xdvi.c dvi_draw.c gf.c pk.c pxl.c) Store bitmaps in short integers instead of bytes. See MSBITFIRST for other relevant comments. To check *************** *** 50,58 **** time xdvi -d 8 file.dvi BMLONG (X11 only; xdvi.c dvi_draw.c gf.c pk.c pxl.c) Store bitmaps in long integers instead of bytes. ! ALTFONT Default font to use if the font named in the dvi file ! cannot be found. Can be set to NULL. By default, it ! is "cmr10". NOTOOL (X11 only; xdvi.c) Compile using raw X calls. BUTTONS (xdvi.c) Put radio buttons on the right side of the window for commonly used commands. --- 54,62 ---- time xdvi -d 8 file.dvi BMLONG (X11 only; xdvi.c dvi_draw.c gf.c pk.c pxl.c) Store bitmaps in long integers instead of bytes. ! ALTFONT (xdvi.c) Default font to use if the font named in the ! dvi file cannot be found. Can be set to NULL. By ! default, it is "cmr10". NOTOOL (X11 only; xdvi.c) Compile using raw X calls. BUTTONS (xdvi.c) Put radio buttons on the right side of the window for commonly used commands. *************** *** 168,172 **** --- 172,178 ---- 19. Added -pagewidth and -pageheight command line options and A4 compilation option. 20. Added a yet more robust font finding algorithm. + -- Patchlevel 7: -- + 21. Replaced -pagewidth and -pageheight options with -paper. Paul Vojta, vojta@math.berkeley.edu diff -cr old/dvi_draw.c new/dvi_draw.c *** old/dvi_draw.c Sun Feb 4 13:09:25 1990 --- new/dvi_draw.c Mon Jan 29 22:48:24 1990 *************** *** 303,309 **** if (ch > maxchar || (g = ¤t_font->glyph[ch])->bitmap.bits == NULL) { if (ch > maxchar || g->addr == 0) ! oops("Character %d not defined in font %s\n", ch, current_font->fontname); open_pxl_file(current_font); Fseek(current_font->file, g->addr, 0); --- 303,309 ---- if (ch > maxchar || (g = ¤t_font->glyph[ch])->bitmap.bits == NULL) { if (ch > maxchar || g->addr == 0) ! oops("Character %d not defined in font %s", ch, current_font->fontname); open_pxl_file(current_font); Fseek(current_font->file, g->addr, 0); *************** *** 361,367 **** close_a_file(); fontp->file = fopen(fontp->filename, OPEN_MODE); if (fontp->file == NULL) ! oops("Font file disappeared: %s\n", fontp->filename); --n_fonts_left; } } --- 361,367 ---- close_a_file(); fontp->file = fopen(fontp->filename, OPEN_MODE); if (fontp->file == NULL) ! oops("Font file disappeared: %s", fontp->filename); --n_fonts_left; } } diff -cr old/dvi_init.c new/dvi_init.c *** old/dvi_init.c Sun Feb 4 13:09:27 1990 --- new/dvi_init.c Sun Dec 10 20:50:19 1989 *************** *** 69,78 **** */ static long last_page_offset; ! #ifndef ANSI_LIB char *sprintf(); ! #endif ! char *malloc(), *strcpy(); FILE *pxl_open(); /* --- 69,79 ---- */ static long last_page_offset; ! #ifdef sun char *sprintf(); ! #endif sun ! ! char *malloc(); FILE *pxl_open(); /* diff -cr old/mksedscript new/mksedscript *** old/mksedscript Sun Feb 4 13:09:30 1990 --- new/mksedscript Sun Feb 4 13:01:47 1990 *************** *** 1,4 **** ! #! /bin/csh unset x10 buttons a4 set noglob foreach x ($argv[3-]) --- 1,4 ---- ! #! /bin/csh -f unset x10 buttons a4 set noglob foreach x ($argv[3-]) *************** *** 16,22 **** if (! $?buttons) echo /^\#ifbuttons/,/^\#/d echo /^\#/d if ($?a4) then ! echo s/%%defaultpagesize%%/8.3 x 11.7 inches (A4 size)/ else echo s/%%defaultpagesize%%/8.5 x 11 inches/ endif --- 16,22 ---- if (! $?buttons) echo /^\#ifbuttons/,/^\#/d echo /^\#/d if ($?a4) then ! echo 's/%%defaultpagesize%%/21 x 29.7 cm (A4 size)/' else echo s/%%defaultpagesize%%/8.5 x 11 inches/ endif diff -cr old/patchlevel.h new/patchlevel.h *** old/patchlevel.h Sun Feb 4 13:09:31 1990 --- new/patchlevel.h Sun Dec 10 21:52:09 1989 *************** *** 1 **** ! #define PATCHLEVEL 6 --- 1 ---- ! #define PATCHLEVEL 7 diff -cr old/pk.c new/pk.c *** old/pk.c Sun Feb 4 13:09:33 1990 --- new/pk.c Mon Jan 29 22:49:58 1990 *************** *** 105,111 **** case PK_NOOP : break; default : ! oops("Unexpected %d in PK file %s\n", PK_flag_byte, fontp->fontname); break; } --- 105,111 ---- case PK_NOOP : break; default : ! oops("Unexpected %d in PK file %s", PK_flag_byte, fontp->fontname); break; } *************** *** 131,140 **** Printf("Reading header for PK pixel file %s\n", fontp->filename); if (one(fontp->file) != PK_PRE) ! oops("File %s lacks preamble command\n", fontp->fontname); if (one(fontp->file) != PK_ID) ! oops("File %s has wrong PK id\n", fontp->fontname); Fseek(fontp->file, (long) one(fontp->file), 1); /* skip comment */ --- 131,140 ---- Printf("Reading header for PK pixel file %s\n", fontp->filename); if (one(fontp->file) != PK_PRE) ! oops("File %s lacks preamble command", fontp->fontname); if (one(fontp->file) != PK_ID) ! oops("File %s has wrong PK id", fontp->fontname); Fseek(fontp->file, (long) one(fontp->file), 1); /* skip comment */ *************** *** 143,149 **** hppp = sfour(fontp->file); vppp = sfour(fontp->file); if( debug && hppp != vppp ) ! oops("Warning: aspect ratio not 1:1 for font %s\n", fontp->fontname); /*fontp->f_scale = (int)((((float) hppp * 72.27) / (float) 65536) + 0.5);*/ /*if (fontp->f_scale == 0) fontp->f_scale = 1000;*/ --- 143,149 ---- hppp = sfour(fontp->file); vppp = sfour(fontp->file); if( debug && hppp != vppp ) ! oops("Warning: aspect ratio not 1:1 for font %s", fontp->fontname); /*fontp->f_scale = (int)((((float) hppp * 72.27) / (float) 65536) + 0.5);*/ /*if (fontp->f_scale == 0) fontp->f_scale = 1000;*/ *************** *** 224,230 **** w = num(fp, n); h = num(fp, n); if (w > 0x7fff || h > 0x7fff) ! oops("Too large character (%d) in file %s\n", ch, fontp->fontname); g->bitmap.w = w; g->bitmap.h = h; } --- 224,230 ---- w = num(fp, n); h = num(fp, n); if (w > 0x7fff || h > 0x7fff) ! oops("Too large character (%d) in file %s", ch, fontp->fontname); g->bitmap.w = w; g->bitmap.h = h; } *************** *** 354,362 **** paint_switch = 1 - paint_switch; } if (cp != ((BMUNIT *) (g->bitmap.bits + bytes_wide * g->bitmap.h))) ! oops("Wrong number of bits stored: char. %d, font %s\n", ch, fontp->fontname); if (rows_left != 0 || h_bit != g->bitmap.w) ! oops("Bad pk file (%s), too many bits\n", fontp->fontname); } } --- 354,362 ---- paint_switch = 1 - paint_switch; } if (cp != ((BMUNIT *) (g->bitmap.bits + bytes_wide * g->bitmap.h))) ! oops("Wrong number of bits stored: char. %d, font %s", ch, fontp->fontname); if (rows_left != 0 || h_bit != g->bitmap.w) ! oops("Bad pk file (%s), too many bits", fontp->fontname); } } diff -cr old/pxl.c new/pxl.c *** old/pxl.c Sun Feb 4 13:09:34 1990 --- new/pxl.c Mon Jan 29 22:50:14 1990 *************** *** 63,69 **** Printf("Reading header for PXL file %s\n", fontp->filename); fontp->read_char = read_char; if (four(fp = fontp->file) != 1001) ! oops("File %s has wrong PXL magic number.\n", fontp->filename); /* seek to trailer info */ Fseek(fp, (long) -5 * 4, 2); (void) four(fp); /* checksum */ --- 63,69 ---- Printf("Reading header for PXL file %s\n", fontp->filename); fontp->read_char = read_char; if (four(fp = fontp->file) != 1001) ! oops("File %s has wrong PXL magic number.", fontp->filename); /* seek to trailer info */ Fseek(fp, (long) -5 * 4, 2); (void) four(fp); /* checksum */ diff -cr old/pxl_open.c new/pxl_open.c *** old/pxl_open.c Sun Feb 4 13:09:36 1990 --- new/pxl_open.c Sun Dec 10 20:50:59 1989 *************** *** 33,40 **** --- 33,53 ---- */ #include <stdio.h> + + #ifndef X10 + #include <X11/Xos.h> /* same as below */ + #else X10 + #ifdef SYSV #include <string.h> + #define index strchr + #define rindex strrchr + #else /* SYSV */ + #include <strings.h> + #endif /* SYSV */ + #endif X10 + #include <errno.h> + extern int errno; #define PATH_SEP ':' #define DEFAULT_TAIL "/%f.%d%p" *************** *** 57,67 **** read_font_index_proc read_GF_index, read_PK_index, read_PXL_index; ! #ifndef ANSI_LIB char *sprintf(); ! #endif ! char *malloc(), *index(), *getenv(); double atof(); #define Strcpy (void) strcpy --- 70,80 ---- read_font_index_proc read_GF_index, read_PK_index, read_PXL_index; ! #ifdef sun char *sprintf(); ! #endif sun + char *malloc(), *getenv(); double atof(); #define Strcpy (void) strcpy diff -cr old/xdvi.c new/xdvi.c *** old/xdvi.c Sun Feb 4 13:09:45 1990 --- new/xdvi.c Sat Feb 3 18:51:25 1990 *************** *** 39,49 **** #endif ALTFONT #ifndef A4 ! #define DEFAULT_PAGE_WIDTH "8.5" ! #define DEFAULT_PAGE_HEIGHT "11" #else A4 ! #define DEFAULT_PAGE_WIDTH "8.3" ! #define DEFAULT_PAGE_HEIGHT "11.7" #endif A4 #if !defined(X10) && !defined(NOTOOL) --- 39,47 ---- #endif ALTFONT #ifndef A4 ! #define DEFAULT_PAPER "us" #else A4 ! #define DEFAULT_PAPER "a4" #endif A4 #if !defined(X10) && !defined(NOTOOL) *************** *** 143,150 **** int density = 40; int pixels_per_inch = 300; int unshrunk_page_w, unshrunk_page_h; ! static char *arg_page_w = DEFAULT_PAGE_WIDTH; ! static char *arg_page_h = DEFAULT_PAGE_HEIGHT; static char *margins, *sidemargin, *topmargin; static Boolean reverse; static Dimension bwidth = 2; --- 141,147 ---- int density = 40; int pixels_per_inch = 300; int unshrunk_page_w, unshrunk_page_h; ! static char *paper = DEFAULT_PAPER; static char *margins, *sidemargin, *topmargin; static Boolean reverse; static Dimension bwidth = 2; *************** *** 187,193 **** #endif X10 int page_w, page_h; - static int screen_w, screen_h; #define clip_w mane.width #define clip_h mane.height static Dimension window_w, window_h; --- 184,189 ---- *************** *** 229,235 **** {XtNbottom, (XtArgVal) XtChainBottom}, {XtNleft, (XtArgVal) XtChainLeft}, {XtNright, (XtArgVal) XtChainRight}, - {XtNresizable, (XtArgVal) True}, #endif BUTTONS {XtNallowHoriz, (XtArgVal) True}, {XtNallowVert, (XtArgVal) True}, --- 225,230 ---- *************** *** 262,271 **** } command_table[] = { {"Quit", "quit", 'q', 50}, ! {"X1 Mag", "sh1", 1 << 8 | 's', 150}, ! {"X2 Mag", "sh2", 2 << 8 | 's', 200}, ! {"X3 Mag", "sh3", 3 << 8 | 's', 250}, ! {"X4 Mag", "sh4", 4 << 8 | 's', 300}, {"Next", "next", 'n', 400}, {"Page+5", "next5", 5 << 8 | 'n', 450}, {"Page+10", "next10", 10 << 8 | 'n', 500}, --- 257,266 ---- } command_table[] = { {"Quit", "quit", 'q', 50}, ! {"Shrink1", "sh1", 1 << 8 | 's', 150}, ! {"Shrink2", "sh2", 2 << 8 | 's', 200}, ! {"Shrink3", "sh3", 3 << 8 | 's', 250}, ! {"Shrink4", "sh4", 4 << 8 | 's', 300}, {"Next", "next", 'n', 400}, {"Page+5", "next5", 5 << 8 | 'n', 450}, {"Page+10", "next10", 10 << 8 | 'n', 500}, *************** *** 287,294 **** {XtNlabel, NULL}, {XtNvertDistance, (XtArgVal) 0}, {XtNfromHoriz, (XtArgVal) NULL}, ! {XtNhorizDistance, (XtArgVal) 9}, ! {XtNwidth, (XtArgVal) 60}, {XtNheight, (XtArgVal) 30}, {XtNtop, (XtArgVal) XtChainTop}, {XtNbottom, (XtArgVal) XtChainTop}, --- 282,289 ---- {XtNlabel, NULL}, {XtNvertDistance, (XtArgVal) 0}, {XtNfromHoriz, (XtArgVal) NULL}, ! {XtNhorizDistance, (XtArgVal) 7}, ! {XtNwidth, (XtArgVal) 64}, {XtNheight, (XtArgVal) 30}, {XtNtop, (XtArgVal) XtChainTop}, {XtNbottom, (XtArgVal) XtChainTop}, *************** *** 307,318 **** {XtNbottom, (XtArgVal) XtChainBottom}, {XtNleft, (XtArgVal) XtChainRight}, {XtNright, (XtArgVal) XtChainRight}, - {XtNresizable, (XtArgVal) True}, }; static Arg strut_args[] = { {XtNfromHoriz, (XtArgVal) NULL}, {XtNwidth, (XtArgVal) 78}, {XtNmappedWhenManaged, (XtArgVal) False}, {XtNborderWidth, (XtArgVal) 0}, {XtNtop, (XtArgVal) XtChainTop}, --- 302,313 ---- {XtNbottom, (XtArgVal) XtChainBottom}, {XtNleft, (XtArgVal) XtChainRight}, {XtNright, (XtArgVal) XtChainRight}, }; static Arg strut_args[] = { {XtNfromHoriz, (XtArgVal) NULL}, {XtNwidth, (XtArgVal) 78}, + {XtNheight, (XtArgVal) 2}, {XtNmappedWhenManaged, (XtArgVal) False}, {XtNborderWidth, (XtArgVal) 0}, {XtNtop, (XtArgVal) XtChainTop}, *************** *** 373,383 **** #endif X10 #endif lint ! #ifndef ANSI_LIB char *sprintf(); ! #endif ! char *malloc(), *index(), *rindex(), *strcpy(), *strcat(); double atof(); /******************************** --- 368,378 ---- #endif X10 #endif lint ! #ifdef sun char *sprintf(); ! #endif sun + char *malloc(); double atof(); /******************************** *************** *** 733,745 **** DarkenArea(x_bar, new_x_bgn, 1, new_x_end - new_x_bgn, BAR_WID); } else { /* this stuff avoids flicker */ ! if (x_bgn <= new_x_bgn) ClearArea(x_bar, x_bgn, 1, new_x_bgn - x_bgn, BAR_WID); ! else DarkenArea(x_bar, new_x_bgn, 1, x_bgn - new_x_bgn, BAR_WID); ! if (new_x_end <= x_end) ClearArea(x_bar, new_x_end, 1, x_end - new_x_end, BAR_WID); ! else DarkenArea(x_bar, x_end, 1, new_x_end - x_end, BAR_WID); } x_bgn = new_x_bgn; --- 728,740 ---- DarkenArea(x_bar, new_x_bgn, 1, new_x_end - new_x_bgn, BAR_WID); } else { /* this stuff avoids flicker */ ! if (x_bgn < new_x_bgn) ClearArea(x_bar, x_bgn, 1, new_x_bgn - x_bgn, BAR_WID); ! else if (x_bgn > new_x_bgn) DarkenArea(x_bar, new_x_bgn, 1, x_bgn - new_x_bgn, BAR_WID); ! if (new_x_end < x_end) ClearArea(x_bar, new_x_end, 1, x_end - new_x_end, BAR_WID); ! else if (new_x_end > x_end) DarkenArea(x_bar, x_end, 1, new_x_end - x_end, BAR_WID); } x_bgn = new_x_bgn; *************** *** 757,769 **** DarkenArea(y_bar, 1, new_y_bgn, BAR_WID, new_y_end - new_y_bgn); } else { /* this stuff avoids flicker */ ! if (y_bgn <= new_y_bgn) ClearArea(y_bar, 1, y_bgn, BAR_WID, new_y_bgn - y_bgn); ! else DarkenArea(y_bar, 1, new_y_bgn, BAR_WID, y_bgn - new_y_bgn); ! if (new_y_end <= y_end) ClearArea(y_bar, 1, new_y_end, BAR_WID, y_end - new_y_end); ! else DarkenArea(y_bar, 1, y_end, BAR_WID, new_y_end - y_end); } y_bgn = new_y_bgn; --- 752,764 ---- DarkenArea(y_bar, 1, new_y_bgn, BAR_WID, new_y_end - new_y_bgn); } else { /* this stuff avoids flicker */ ! if (y_bgn < new_y_bgn) ClearArea(y_bar, 1, y_bgn, BAR_WID, new_y_bgn - y_bgn); ! else if (y_bgn > new_y_bgn) DarkenArea(y_bar, 1, new_y_bgn, BAR_WID, y_bgn - new_y_bgn); ! if (new_y_end < y_end) ClearArea(y_bar, 1, new_y_end, BAR_WID, y_end - new_y_end); ! else if (new_y_end > y_end) DarkenArea(y_bar, 1, y_end, BAR_WID, new_y_end - y_end); } y_bgn = new_y_bgn; *************** *** 1140,1146 **** case '\b': case '\177': /* Del */ /* scroll backward */ ! next_page = current_page - 1; break; case 'g': /* go to absolute page */ --- 1135,1141 ---- case '\b': case '\177': /* Del */ /* scroll backward */ ! next_page = current_page - (arg0 ? number0 : 1); break; case 'g': /* go to absolute page */ *************** *** 1259,1270 **** get_geom(); home(False); XMapWindow(DISP, (Window) mane.win); ! return; #else TOOLKIT reconfig(); home(False); - break; #endif TOOLKIT case 'S': if (!arg0) goto bad; if (number0 < 0) goto bad; --- 1254,1270 ---- get_geom(); home(False); XMapWindow(DISP, (Window) mane.win); ! /* Wait for next event; this will likely be an expose event, ! so we don't redraw the window twice. */ ! { ! XEvent event; ! XPeekEvent(DISP, &event); ! } #else TOOLKIT reconfig(); home(False); #endif TOOLKIT + break; case 'S': if (!arg0) goto bad; if (number0 < 0) goto bad; *************** *** 1459,1473 **** if (XANY(event).window == top_level && (XCONFIG(event).width != window_w || XCONFIG(event).height != window_h)) { ! register Dimension old_window_w = window_w; window_w = XCONFIG(event).width; window_h = XCONFIG(event).height; reconfig(); ! if (old_window_w == 0) home(False); } break; case KeyPress: #ifndef X10 string = trbuf; --- 1459,1482 ---- if (XANY(event).window == top_level && (XCONFIG(event).width != window_w || XCONFIG(event).height != window_h)) { ! register caddr_t old_mane_win = mane.win; window_w = XCONFIG(event).width; window_h = XCONFIG(event).height; reconfig(); ! if (old_mane_win == NULL) home(False); } break; + #ifndef X10 + case MapNotify: /* if running w/o WM */ + if (mane.win == NULL) { + reconfig(); + home(False); + } + break; + #endif X10 + case KeyPress: #ifndef X10 string = trbuf; *************** *** 1657,1665 **** [-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \ [-cr <color>]\n\ [-margins <inches>] [-sidemargin <inches>] [-topmargin <inches>]\n\ ! [-pagewidth <inches>] [-pageheight <inches>] [-mgs[n] <size>]\n\ ! [-altfont <font>] [#<geometry>] [-geometry <geometry>]\n\ ! [-display <host:display>] [-copy] [-thorough] dvi_file\n", stderr); #else X10 fputs("\ Usage: xdvi [+[<page>]] [-s <shrink>] [-S <density>] [-p <pixels>] [-l] [-rv]\n\ --- 1666,1674 ---- [-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \ [-cr <color>]\n\ [-margins <inches>] [-sidemargin <inches>] [-topmargin <inches>]\n\ ! [-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\ ! [#<geometry>] [-geometry <geometry>] [-display <host:display>]\n\ ! [-copy] [-thorough] dvi_file\n", stderr); #else X10 fputs("\ Usage: xdvi [+[<page>]] [-s <shrink>] [-S <density>] [-p <pixels>] [-l] [-rv]\n\ *************** *** 1666,1673 **** [-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \ [-cr <color>]\n\ [-margins <inches>] [-sidemargin <inches>] [-topmargin <inches>]\n\ ! [-pagewidth <inches>] [-pageheight <inches>] [-mgs[n] <size>]\n\ ! [-altfont <font>] [-geometry <geometry> | =<geometry>]\n\ [-display <host:display> | <host:display>] dvi_file\n", stderr); #endif X10 exit(1); --- 1675,1682 ---- [-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \ [-cr <color>]\n\ [-margins <inches>] [-sidemargin <inches>] [-topmargin <inches>]\n\ ! [-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\ ! [-geometry <geometry> | =<geometry>]\n\ [-display <host:display> | <host:display>] dvi_file\n", stderr); #endif X10 exit(1); *************** *** 1735,1744 **** (Cardinal) &sidemargin, XtRString, NULL}, {"topMargin", "Margin", XtRString, sizeof(char *), (Cardinal) &topmargin, XtRString, NULL}, ! {"pageWidth", "PageWidth", XtRString, sizeof(char *), ! (Cardinal) &arg_page_w, XtRString, (caddr_t) DEFAULT_PAGE_WIDTH}, ! {"pageHeight", "PageHeight", XtRString, sizeof(char *), ! (Cardinal) &arg_page_h, XtRString, (caddr_t) DEFAULT_PAGE_HEIGHT}, {"altFont", "AltFont", XtRString, sizeof(char *), (Cardinal) &alt_font, XtRString, (caddr_t) ALTFONT}, {"listFonts", "ListFonts", XtRBoolean, sizeof(Boolean), --- 1744,1751 ---- (Cardinal) &sidemargin, XtRString, NULL}, {"topMargin", "Margin", XtRString, sizeof(char *), (Cardinal) &topmargin, XtRString, NULL}, ! {"paper", "Paper", XtRString, sizeof(char *), ! (Cardinal) &paper, XtRString, (caddr_t) DEFAULT_PAPER}, {"altFont", "AltFont", XtRString, sizeof(char *), (Cardinal) &alt_font, XtRString, (caddr_t) ALTFONT}, {"listFonts", "ListFonts", XtRBoolean, sizeof(Boolean), *************** *** 1855,1862 **** {"-sidemargin", "sideMargin", SepArg, StringArg, (caddr_t) &sidemargin}, {"-topmargin", "topMargin", SepArg, StringArg, (caddr_t) &topmargin}, {"-altfont", "altFont", SepArg, StringArg, (caddr_t) &alt_font}, ! {"-pagewidth", "pageWidth", SepArg, StringArg, (caddr_t) &arg_page_w}, ! {"-pageheight", "pageHeight", SepArg, StringArg, (caddr_t) &arg_page_h}, {"-l", "listFonts", TrueArg, BooleanArg, (caddr_t) &list_fonts}, {"+l", NULL, FalseArg, BooleanArg, (caddr_t) &list_fonts}, {"-rv", "reverseVideo", TrueArg, BooleanArg, (caddr_t) &reverse}, --- 1862,1868 ---- {"-sidemargin", "sideMargin", SepArg, StringArg, (caddr_t) &sidemargin}, {"-topmargin", "topMargin", SepArg, StringArg, (caddr_t) &topmargin}, {"-altfont", "altFont", SepArg, StringArg, (caddr_t) &alt_font}, ! {"-paper", "paper", SepArg, StringArg, (caddr_t) &paper}, {"-l", "listFonts", TrueArg, BooleanArg, (caddr_t) &list_fonts}, {"+l", NULL, FalseArg, BooleanArg, (caddr_t) &list_fonts}, {"-rv", "reverseVideo", TrueArg, BooleanArg, (caddr_t) &reverse}, *************** *** 1968,1978 **** #ifndef X10 if ((DISP = XOpenDisplay(display)) == NULL) ! oops("Can't open display\n"); SCRN = DefaultScreenOfDisplay(DISP); #else X10 if (XOpenDisplay(display) == NULL) ! oops("Can't open display\n"); #endif X10 for (opt = options; opt < options + XtNumber(options); ++opt) if (opt->resource && --- 1974,1984 ---- #ifndef X10 if ((DISP = XOpenDisplay(display)) == NULL) ! oops("Can't open display"); SCRN = DefaultScreenOfDisplay(DISP); #else X10 if (XOpenDisplay(display) == NULL) ! oops("Can't open display"); #endif X10 for (opt = options; opt < options + XtNumber(options); ++opt) if (opt->resource && *************** *** 1997,2002 **** --- 2003,2106 ---- #endif TOOLKIT + static char *paper_types[] = { + "us", "8.5x11", + "usr", "11x8.5", + "legal", "8.5x14", + "foolscap", "13.5x17.0", /* ??? */ + + /* ISO `A' formats, Portrait */ + "a1", "59.4x84.0cm", + "a2", "42.0x59.4cm", + "a3", "29.7x42.0cm", + "a4", "21.0x29.7cm", + "a5", "14.85x21.0cm", + "a6", "10.5x14.85cm", + "a7", "7.42x10.5cm", + + /* ISO `A' formats, Landscape */ + "a1r", "84.0x59.4cm", + "a2r", "59.4x42.0cm", + "a3r", "42.0x29.7cm", + "a4r", "29.7x21.0cm", + "a5r", "21.0x14.85cm", + "a6r", "14.85x10.5cm", + "a7r", "10.5x7.42cm", + + /* ISO `B' formats, Portrait */ + "b1", "70.6x100.0cm", + "b2", "50.0x70.6cm", + "b3", "35.3x50.0cm", + "b4", "25.0x35.3cm", + "b5", "17.6x25.0cm", + "b6", "13.5x17.6cm", + "b7", "8.8x13.5cm", + + /* ISO `B' formats, Landscape */ + "b1r", "100.0x70.6cm", + "b2r", "70.6x50.0cm", + "b3r", "50.0x35.3cm", + "b4r", "35.3x25.0cm", + "b5r", "25.0x17.6cm", + "b6r", "17.6x13.5cm", + "b7r", "13.5x8.8cm", + + /* ISO `C' formats, Portrait */ + "c1", "64.8x91.6cm", + "c2", "45.8x64.8cm", + "c3", "32.4x45.8cm", + "c4", "22.9x32.4cm", + "c5", "16.2x22.9cm", + "c6", "11.46x16.2cm", + "c7", "8.1x11.46cm", + + /* ISO `C' formats, Landscape */ + "c1r", "91.6x64.8cm", + "c2r", "64.8x45.8cm", + "c3r", "45.8x32.4cm", + "c4r", "32.4x22.9cm", + "c5r", "22.9x16.2cm", + "c6r", "16.2x11.46cm", + "c7r", "11.46x8.1cm", + }; + + static Boolean + set_paper_type() { + char temp[21]; + int i; + double factor = 1.0; + char c; + char **p; + char *q; + + if (strlen(paper) > 20) return False; + i = 0; + for (;;) { /* convert to lower case */ + c = paper[i]; + if (c >= 'A' && c <= 'Z') c ^= ('a' ^ 'A'); + temp[i] = c; + if (c == '\0') break; + ++i; + } + /* perform substitutions */ + for (p = paper_types; p < paper_types + XtNumber(paper_types); p += 2) + if (strcmp(temp, *p) == 0) { + (void) strcpy(temp, p[1]); + break; + } + if (i > 2 && strcmp(temp + i - 2, "cm") == 0) { + factor = 1.0 / 2.54; + temp[i - 2] = '\0'; + } + q = index(temp, 'x'); + if (q == NULL) return False; + *q = '\0'; + factor *= pixels_per_inch; + unshrunk_page_w = atof(temp) * factor + 0.5; + unshrunk_page_h = atof(q + 1) * factor + 0.5; + return (unshrunk_page_w != 0 && unshrunk_page_h != 0); + } + /* * main program */ *************** *** 2015,2022 **** --- 2119,2128 ---- char def[32]; int mouspix; Color cdef; + int x_thick, y_thick; #endif X10 #endif TOOLKIT + int screen_w, screen_h; prog = rindex(*argv, '/'); if (prog != NULL) ++prog; else prog = *argv; *************** *** 2055,2062 **** if (margins) home_x = home_y = atof(margins) * pixels_per_inch; if (sidemargin) home_x = atof(sidemargin) * pixels_per_inch; if (topmargin) home_y = atof(topmargin) * pixels_per_inch; ! unshrunk_page_w = atof(arg_page_w) * pixels_per_inch + 0.5; ! unshrunk_page_h = atof(arg_page_h) * pixels_per_inch + 0.5; init_pxl_open(); open_dvi_file(); --- 2161,2167 ---- if (margins) home_x = home_y = atof(margins) * pixels_per_inch; if (sidemargin) home_x = atof(sidemargin) * pixels_per_inch; if (topmargin) home_y = atof(topmargin) * pixels_per_inch; ! if (!set_paper_type()) oops("Don't recognize paper type %s", paper); init_pxl_open(); open_dvi_file(); *************** *** 2228,2250 **** size_hints.x = size_hints.y = 0; if (geometry != NULL) { int flag = XParseGeometry(geometry, &size_hints.x, &size_hints.y, ! &size_hints.width, &size_hints.height); if (flag & (XValue | YValue)) ! size_hints.flags |= USSize | USPosition; if (flag & (WidthValue | HeightValue)) size_hints.flags |= USSize; ! if (flag & XNegative) size_hints.x += screen_w - size_hints.width; ! if (flag & YNegative) size_hints.y += screen_h - size_hints.height; } if (!(size_hints.flags & USSize)) { size_hints.flags |= PSize; - size_hints.width = page_w < screen_w ? page_w : screen_w; - size_hints.height = page_h < screen_h ? page_h : screen_h; } top_level = XCreateSimpleWindow(DISP, RootWindowOfScreen(SCRN), ! size_hints.x, size_hints.y, size_hints.width, size_hints.height, ! bwidth, fore_Pixel, back_Pixel); XSetStandardProperties(DISP, top_level, dvi_name, prog, NULL, argv, argc, &size_hints); --- 2333,2366 ---- size_hints.x = size_hints.y = 0; if (geometry != NULL) { int flag = XParseGeometry(geometry, &size_hints.x, &size_hints.y, ! &window_w, &window_h); if (flag & (XValue | YValue)) ! size_hints.flags |= USPosition; if (flag & (WidthValue | HeightValue)) size_hints.flags |= USSize; ! if (flag & XNegative) size_hints.x += screen_w - window_w; ! if (flag & YNegative) size_hints.y += screen_h - window_h; } if (!(size_hints.flags & USSize)) { + int x_thick = 0; + int y_thick = 0; + if (screen_w < page_w) x_thick = BAR_THICK; + if (screen_h < page_h + x_thick) y_thick = BAR_THICK; + window_w = page_w + y_thick; + if (window_w > screen_w) { + x_thick = BAR_THICK; + window_w = screen_w; + } + window_h = page_h + x_thick; + if (window_h > screen_h) window_h = screen_h; size_hints.flags |= PSize; } + size_hints.width = window_w; + size_hints.height = window_h; top_level = XCreateSimpleWindow(DISP, RootWindowOfScreen(SCRN), ! size_hints.x, size_hints.y, window_w, window_h, bwidth, ! fore_Pixel, back_Pixel); XSetStandardProperties(DISP, top_level, dvi_name, prog, NULL, argv, argc, &size_hints); *************** *** 2331,2338 **** frame.bdrwidth = bwidth; screen_w = DisplayWidth() - 2*bwidth; screen_h = DisplayHeight() - 2*bwidth; ! frame.width = (page_w < screen_w ? page_w : screen_w); ! frame.height = (page_h < screen_h ? page_h : screen_h); frame.border = bdrmap; frame.background = backmap; frame.x = 0; --- 2447,2462 ---- frame.bdrwidth = bwidth; screen_w = DisplayWidth() - 2*bwidth; screen_h = DisplayHeight() - 2*bwidth; ! x_thick = y_thick = 0; ! if (screen_w < page_w) x_thick = BAR_THICK; ! if (screen_h < page_h + x_thick) y_thick = BAR_THICK; ! frame.width = page_w + y_thick; ! if (frame.width > screen_w) { ! x_thick = BAR_THICK; ! frame.width = screen_w; ! } ! frame.height = page_h + x_thick; ! if (frame.height > screen_h) frame.height = screen_h; frame.border = bdrmap; frame.background = backmap; frame.x = 0; diff -cr old/xdvi.h new/xdvi.h *** old/xdvi.h Sun Feb 4 13:09:47 1990 --- new/xdvi.h Sun Dec 10 20:29:55 1989 *************** *** 7,13 **** --- 7,23 ---- #include <X11/Xos.h> /* same as below */ #else X10 #include <sys/types.h> /* for sites without X11 */ + #ifdef SYSV + #include <string.h> + #define index strchr + #define rindex strrchr + #include <fcntl.h> + #else /* SYSV */ + #include <strings.h> + #endif /* SYSV */ + #include <sys/file.h> #endif X10 + #include <setjmp.h> #define OPEN_MODE "r" diff -cr old/xdvi.man.sed new/xdvi.man.sed *** old/xdvi.man.sed Sun Feb 4 13:09:50 1990 --- new/xdvi.man.sed Sun Feb 4 13:28:33 1990 *************** *** 12,19 **** [\-l] [\-rv] [\-fg \fIcolor\fP] [\-bg \fIcolor\fP] [\-hl \fIcolor\fP] [\-bd \fIcolor\fP] [\-cr \fIcolor\fP] [\-margins \fIinches\fP] [\-sidemargin \fIinches\fP] [\-topmargin \fIinches\fP] ! [\-pagewidth \fIinches\fP] [\-pageheight \fIinches\fP] ! [\-mgs[\fIn\fP] \fIsize\fP] [\-altfont \fIfont\fP] #ifx11 [#\fIgeometry\fP] [\-geometry \fIgeometry\fP] [\-display \fIdisplay\fP] [-copy] [-thorough] --- 12,18 ---- [\-l] [\-rv] [\-fg \fIcolor\fP] [\-bg \fIcolor\fP] [\-hl \fIcolor\fP] [\-bd \fIcolor\fP] [\-cr \fIcolor\fP] [\-margins \fIinches\fP] [\-sidemargin \fIinches\fP] [\-topmargin \fIinches\fP] ! [\-paper \fIpapertype\fP] [\-mgs[\fIn\fP] \fIsize\fP] [\-altfont \fIfont\fP] #ifx11 [#\fIgeometry\fP] [\-geometry \fIgeometry\fP] [\-display \fIdisplay\fP] [-copy] [-thorough] *************** *** 156,162 **** still cannot fit in the window, then the page is put in the window such that the top and left margins are hidden, and presumably the upper left-hand corner of the text on the page will be in the upper left-hand corner of the window. ! Otherwise, the text is centered in the window. See also `\fBH\fR' under the KEY\%STROKES section. .TP .BI \-sidemargin " inches" --- 155,161 ---- still cannot fit in the window, then the page is put in the window such that the top and left margins are hidden, and presumably the upper left-hand corner of the text on the page will be in the upper left-hand corner of the window. ! Otherwise, the text is centered in the window. See also `\fBM\fR' under the KEY\%STROKES section. .TP .BI \-sidemargin " inches" *************** *** 167,180 **** (%%dot%%topMargin) Specifies the top and bottom margins (see above). .TP ! .BI \-pagewidth " inches" ! (%%dot%%pageWidth) ! Specifies the width of the printed page. ! .TP ! .BI \-pageheight " inches" ! (%%dot%%pageHeight) ! Specifies the height of the printed page. By default, the page size ! is %%defaultpagesize%%. .TP #ifx11 .BI "\-mgs[n]" " size" --- 166,180 ---- (%%dot%%topMargin) Specifies the top and bottom margins (see above). .TP ! .BI \-paper " papertype" ! (%%dot%%paper) ! Specifies the size of the printed page. This may be of the form ! \fIw\fRx\fIh\fR (or \fIw\fRx\fIh\fRcm), where \fIw\fR is the width in ! inches (or cm) and \fIh\fR is the height in inches (or cm), respectively. ! There are also synonyms which may be used: us (8.5x11), usr (11x8.5), ! legal (8.5x14), foolscap (13.5x17), as well as the ISO sizes a1-a7, ! b1-b7, c1-c7, a1r-a7r (a1-a7 rotated), etc. The default size is ! %%defaultpagesize%%. .TP #ifx11 .BI "\-mgs[n]" " size" dan ----------------------------------------------------------- O'Reilly && Associates argv@sun.com / argv@ora.com 632 Petaluma Ave, Sebastopol, CA 95472 800-338-NUTS, in CA: 800-533-NUTS, FAX 707-829-0104 Opinions expressed reflect those of the author only.