v06i005: xdvi, Patch7
Dan Heller
argv%turnpike at Sun.COM
Wed Feb 28 20:49:35 AEST 1990
Submitted-by: vojta at 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 at cs.purdue.edu, boaz at neutron.lcs.mit.edu, and
others for fixes and bug reports.
--Paul Vojta, vojta at 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 at 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 at sun.com / argv at 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.
More information about the Comp.sources.x
mailing list