v11i060: xdvi, Patch11, Part02/02
Paul Vojta
vojta at math.berkeley.edu
Wed Feb 13 18:10:26 AEST 1991
Submitted-by: vojta at math.berkeley.edu (Paul Vojta)
Posting-number: Volume 11, Issue 60
Archive-name: xdvi/patch11.02
Patch-To: xdvi: Volume 3, Issues 37-39
Patch-To: xdvi: Volume 4, Issue 44 (xdvi, Patch4)
Patch-To: xdvi: Volume 4, Issue 96 (xdvi, dvi previewer, Patch5)
Patch-To: xdvi: Volume 5, Issue 35 (xdvi, dvi previewer, patch 6, part 1/2)
Patch-To: xdvi: Volume 5, Issue 36 (xdvi, dvi previewer, patch 6, part 2/2)
Patch-To: xdvi: Volume 6, Issue 5 (xdvi, Patch7)
Patch-To: xdvi: Volume 6, Issue 49 (xdvi, dvi previewer, patch 8)
Patch-To: xdvi: Volume 7, Issue 52 (xdvi, dvi previewer, patch 9, part 1/2)
Patch-To: xdvi: Volume 7, Issue 53 (xdvi, dvi previewer, patch 9, part 2/2)
Patch-To: xdvi: Volume 10, Issue 9 (xdvi, patch10, part01/02)
Patch-To: xdvi: Volume 10, Issue 10 (xdvi, patch10, part02/02)
-- cut here --
diff -cr old/pxl_open.c new/pxl_open.c
*** old/pxl_open.c Sun Oct 21 14:47:37 1990
--- new/pxl_open.c Sat Feb 2 16:28:32 1991
***************
*** 1,5 ****
/*
! * pxl_open.c(font, font_ret, mag, mag_ret, factor, name)
* Find and open gf, pk, or pxl files in the given path, having the given
* name and magnification. It tries gf files first, followed by pk and pxl
* files. The path variable should be of the form path1:path2:...:pathn,
--- 1,5 ----
/*
! * pxl_open.c(font, font_ret, mag, mag_ret, name)
* Find and open gf, pk, or pxl files in the given path, having the given
* name and magnification. It tries gf files first, followed by pk and pxl
* files. The path variable should be of the form path1:path2:...:pathn,
***************
*** 11,23 ****
* and if it fails then the procedure will try changing the point size
* as well. If all of the above fails, then alt_font will be tried.
*
* If the file is found, then a file pointer is returned, and the following
* values are set:
* *font_ret a pointer to a string containing the font name (if
* different from the font requested).
* *mag_ret the actual magnification found.
- * *factor the ratio of the point sizes of the requested font
- * and the font actually found (or 1.0 if altfont is used).
* *name a pointer to a string containing the file name
*
* If the file is not found, then the return value is NULL.
--- 11,30 ----
* and if it fails then the procedure will try changing the point size
* as well. If all of the above fails, then alt_font will be tried.
*
+ * If the variable SEARCH_SUBDIRECTORIES is set, then the environment
+ * variable TEXFONTS_SUBDIR and the #define variable DEFAULT_SUBDIR_PATH
+ * will be enabled, as well as ``*'' and ``**'' specifiers. The
+ * SUBDIR_PATH things will be appended to the end of the usual path, with
+ * a `*' at the end of each component. The `*' means that subdirectories
+ * will be searched up to one level; `**' means that subdirectories
+ * will be recursively searched to any level. Neither specifier may be
+ * preceded by a `%' specifier (after the most recent colon).
+ *
* If the file is found, then a file pointer is returned, and the following
* values are set:
* *font_ret a pointer to a string containing the font name (if
* different from the font requested).
* *mag_ret the actual magnification found.
* *name a pointer to a string containing the file name
*
* If the file is not found, then the return value is NULL.
***************
*** 49,65 ****
static char *font_path;
static char *default_font_path = DEFAULT_FONT_PATH;
static int *sizes, *sizend;
static char default_size_list[] = DEFAULT_FONT_SIZES;
#ifdef sun
char *sprintf();
#endif
! char *malloc(), *getenv();
double atof();
static void
get_sizes(size_list, spp)
char *size_list;
int **spp;
--- 56,306 ----
static char *font_path;
static char *default_font_path = DEFAULT_FONT_PATH;
+ #ifdef SEARCH_SUBDIRECTORIES
+ static char default_subdir_path[] = DEFAULT_SUBDIR_PATH;
+ #endif
static int *sizes, *sizend;
static char default_size_list[] = DEFAULT_FONT_SIZES;
+ #define FILENAMESIZE 512
+
#ifdef sun
char *sprintf();
#endif
! char *xmalloc(), *getenv();
double atof();
+ void exit();
+ #ifdef SEARCH_SUBDIRECTORIES
+ /* We will need some system include files to deal with directories. */
+ /* <sys/types.h> was included by xdvi.h. */
+ #include <sys/stat.h>
+
+ static int is_dir ();
+
+ #if defined(SYSV) || defined(_POSIX_SOURCE)
+ #include <dirent.h>
+ typedef struct dirent *directory_entry_type;
+ #else
+ #include <sys/dir.h>
+ typedef struct direct *directory_entry_type;
+ #endif
+
+ /* Declare the routine to get the current working directory. */
+
+ #ifdef HAVE_GETWD
+ extern char *getwd ();
+ #define getcwd(b, len) ((b) ? getwd (b) : getwd (xmalloc (len, "getwd")))
+ #else
+ #ifdef ANSI
+ extern char *getcwd (char *, int);
+ #else
+ extern char *getcwd ();
+ #endif /* not ANSI */
+ #endif /* not HAVE_GETWD */
+
+ char *cwd;
+
+ /* The following is a data structure containing the precomputed names of
+ subdirectories to be recursively searched. */
+
+ static struct subdir_entry {
+ char *name; /* partial string */
+ char *index; /* reference point in {,default_}font_path */
+ struct subdir_entry *next; /* link in list */
+ }
+ *subdir_head = NULL,
+ *next_subdir;
+
+ #ifndef S_ISDIR
+ #define S_ISDIR(m) ((m & S_IFMT) == S_IFDIR)
+ #endif
+
+ /* Return true if FN is a directory or a symlink to a directory,
+ false if not. */
+
+ static int
+ is_dir (fn)
+ char *fn;
+ {
+ struct stat stats;
+
+ return stat (fn, &stats) == 0 && S_ISDIR (stats.st_mode);
+ }
+
+ /*
+ * Compute extra length of subdirectory entries, including a star for each.
+ */
+
+ static int
+ extra_len(str1, str2)
+ char *str1, *str2;
+ {
+ int bias = 0;
+ char *p = str1;
+ char *q;
+
+ do {
+ q = index(p, PATH_SEP);
+ if (q == NULL) q = p + strlen(p);
+ if (q == p) {
+ if (str2 != NULL) {
+ bias += extra_len(str2, (char *) NULL);
+ str2 = NULL;
+ }
+ }
+ else ++bias; /* don't forget the star */
+ p = q + 1;
+ }
+ while (p[-1] != '\0');
+ return bias + p - str1;
+ }
+
+ /*
+ * Add the specifiers (and double stars) for the given strings (user
+ * string, plus default string) to the destination string.
+ */
+
static void
+ add_subdir_paths(dst, dst_first, src, src_default)
+ char *dst, *dst_first, *src, *src_default;
+ {
+ char *q;
+
+ do {
+ q = index(src, PATH_SEP);
+ if (q == NULL) q = src + strlen(src);
+ if (q == src) {
+ if (src_default != NULL) {
+ add_subdir_paths(dst, dst_first, src_default, (char *)NULL);
+ dst += strlen(dst);
+ src_default = NULL;
+ }
+ }
+ else {
+ if (dst != dst_first) *dst++ = PATH_SEP;
+ bcopy(src, dst, q - src);
+ dst += q - src;
+ *dst++ = '*';
+ }
+ src = q + 1;
+ }
+ while (src[-1] != '\0');
+ *dst = '\0';
+ }
+
+ /*
+ * Make a subdirectory entry.
+ */
+
+ static struct subdir_entry *
+ make_subdir_entry(index, name)
+ char *index, *name;
+ {
+ struct subdir_entry *new_entry;
+ static struct subdir_entry **subdir_tail = &subdir_head;
+
+ *subdir_tail = new_entry = (struct subdir_entry *)
+ xmalloc(sizeof(struct subdir_entry), "subdirectory list entry");
+ subdir_tail = &(new_entry->next);
+ new_entry->name = strcpy(xmalloc(strlen(name) + 1,
+ "subdirectory entry string"), name);
+ new_entry->index = index;
+ new_entry->next = NULL;
+ return new_entry;
+ }
+
+ /*
+ * Create the subdirectory linked list for the given initial string
+ */
+
+ static void
+ add_subdirs(str, len, recurs)
+ char *str;
+ int len;
+ Boolean recurs;
+ {
+ int len1 = len;
+ char temp[FILENAMESIZE];
+ struct subdir_entry *next_subdir;
+ DIR *dir;
+ directory_entry_type e;
+
+ bcopy(str, temp, len);
+ if (len > 0 && temp[len - 1] != '/') temp[len1++] = '/';
+ temp[len1] = '\0';
+ next_subdir = make_subdir_entry(str, temp + len);
+ do {
+ /* By changing directories, we save a bunch of string
+ concatenations (and make the pathnames the kernel looks up
+ shorter). */
+ Strcpy(temp + len, next_subdir->name);
+ if (chdir (temp) != 0) continue;
+
+ dir = opendir (".");
+ if (dir == NULL) continue;
+
+ len1 = strlen(temp);
+ if (len1 == 0 || temp[len1 - 1] != '/') temp[len1++] = '/';
+ while ((e = readdir (dir)) != NULL)
+ {
+ if (is_dir (e->d_name) && strcmp (e->d_name, ".") != 0
+ && strcmp (e->d_name, "..") != 0)
+ {
+ Strcpy(temp + len1, e->d_name);
+ (void) make_subdir_entry(str, temp + len);
+ }
+ }
+ (void) closedir (dir);
+
+
+ /* Change back to the current directory, in case the path
+ contains relative directory names. */
+ if (chdir (cwd) != 0) {
+ perror (cwd);
+ exit (errno);
+ }
+ }
+ while (recurs && (next_subdir = next_subdir->next) != NULL);
+ }
+
+ /*
+ * Recursively figure out the subdirectory tree and precompute the
+ * list of subdirectories to search.
+ */
+
+ static void
+ compute_subdir_paths(fp, fp_default)
+ char *fp, *fp_default;
+ {
+ char *star_loc = NULL;
+ char *endp;
+
+ do {
+ if (star_loc == NULL) {
+ star_loc = index(fp, '*');
+ if (star_loc == NULL) star_loc = fp + strlen(fp);
+ }
+ endp = index(fp, PATH_SEP);
+ if (endp == NULL) endp = fp + strlen(fp);
+ if (endp == fp) {
+ if (fp_default != NULL) {
+ compute_subdir_paths(fp_default, (char *) NULL);
+ fp_default = NULL;
+ }
+ }
+ else if (star_loc < endp) {
+ add_subdirs(fp, star_loc - fp, star_loc[1] == '*');
+ star_loc = NULL;
+ }
+ fp = endp + 1;
+ }
+ while (fp[-1] != '\0');
+ }
+ #endif /* SEARCH_SUBDIRECTORIES */
+
+ static void
get_sizes(size_list, spp)
char *size_list;
int **spp;
***************
*** 79,90 ****
int *sp, *sp1, *sp2;
unsigned int n;
char *p;
! if ((font_path = getenv("XDVIFONTS")) == NULL) {
font_path = default_font_path;
default_font_path = NULL;
}
size_list = getenv("XDVISIZES");
n = 1; /* count number of sizes */
if (size_list == NULL || *size_list == PATH_SEP)
--- 320,360 ----
int *sp, *sp1, *sp2;
unsigned int n;
char *p;
+ #ifdef SEARCH_SUBDIRECTORIES
+ char *q;
+ #endif
! if ((font_path = getenv("XDVIFONTS")) == NULL
! && (font_path = getenv("TEXFONTS")) == NULL) {
font_path = default_font_path;
default_font_path = NULL;
}
+ #ifdef SEARCH_SUBDIRECTORIES
+ p = getenv ("TEXFONTS_SUBDIR");
+ if (p == NULL) p = "";
+ q = xmalloc((unsigned) strlen(font_path)
+ + extra_len(p, default_subdir_path) + 1,
+ "initializing font searching");
+ Strcpy(q, font_path);
+ add_subdir_paths(q + strlen(q), q, p, default_subdir_path);
+ font_path = q;
+
+ /* Unfortunately, we can't look in the environment for the current
+ directory, because if we are running under a program (let's say
+ Emacs), the PWD variable might have been set by Emacs' parent
+ to the current directory at the time Emacs was invoked. This
+ is not necessarily the same directory the user expects to be
+ in. So, we must always call getcwd(3) or getwd(3), even though
+ they are slow and prone to hang in networked installations. */
+ cwd = getcwd ((char *) NULL, FILENAMESIZE + 2);
+ if (cwd == NULL) {
+ perror ("getcwd");
+ exit (errno);
+ }
+ compute_subdir_paths(font_path, default_font_path);
+ #endif
+
size_list = getenv("XDVISIZES");
n = 1; /* count number of sizes */
if (size_list == NULL || *size_list == PATH_SEP)
***************
*** 92,98 ****
++n;
if (size_list != NULL)
for (p = size_list; (p = index(p, PATH_SEP)) != NULL; ++p) ++n;
! sizes = (int *) malloc(n * sizeof(int));
sizend = sizes + n;
sp = sizes; /* get the actual sizes */
if (size_list == NULL || *size_list == PATH_SEP)
--- 362,368 ----
++n;
if (size_list != NULL)
for (p = size_list; (p = index(p, PATH_SEP)) != NULL; ++p) ++n;
! sizes = (int *) xmalloc(n * sizeof(int), "size list");
sizend = sizes + n;
sp = sizes; /* get the actual sizes */
if (size_list == NULL || *size_list == PATH_SEP)
***************
*** 122,128 ****
int count;
{
char *p = path,
! nm[128],
*n = nm,
c;
Boolean f_used = False;
--- 392,398 ----
int count;
{
char *p = path,
! nm[FILENAMESIZE],
*n = nm,
c;
Boolean f_used = False;
***************
*** 129,134 ****
--- 399,418 ----
Boolean p_used = False;
FILE *f;
+ #ifdef SEARCH_SUBDIRECTORIES
+ if (next_subdir != NULL && next_subdir->index == p) {
+ int len = index(p, '*') - p;
+
+ bcopy(p, n, len);
+ p += len;
+ n += len;
+ Strcpy(n, next_subdir->name);
+ n += strlen(n);
+ ++p;
+ if (*p == '*') ++p;
+ if (*p != '/') *n++ = '/';
+ }
+ #endif
for (;;) {
c = *p++;
if (c==PATH_SEP || c=='\0') {
***************
*** 168,174 ****
f = fopen(nm, OPEN_MODE);
}
if (f != NULL) {
! *name = malloc((unsigned) (n - nm + 1));
Strcpy(*name, nm);
}
return f;
--- 452,458 ----
f = fopen(nm, OPEN_MODE);
}
if (f != NULL) {
! *name = xmalloc((unsigned) (n - nm + 1), "font file name");
Strcpy(*name, nm);
}
return f;
***************
*** 185,191 ****
char **name;
char *font_path, *default_font_path;
{
! char *p;
FILE *f;
int pkmag = (pxlmag + 2) / 5;
--- 469,475 ----
char **name;
char *font_path, *default_font_path;
{
! char *p = font_path;
FILE *f;
int pkmag = (pxlmag + 2) / 5;
***************
*** 192,201 ****
/*
* loop over paths
*/
! for (p = font_path;; ++p) {
int count = 0;
! if (*p == ':' || *p == '\0') {
if (default_font_path != NULL &&
(f = try_size(font, pxlmag, name, default_font_path,
(char *) NULL)) != NULL)
--- 476,488 ----
/*
* loop over paths
*/
! #ifdef SEARCH_SUBDIRECTORIES
! next_subdir = subdir_head;
! #endif
! for (;;) {
int count = 0;
! if (*p == PATH_SEP || *p == '\0') {
if (default_font_path != NULL &&
(f = try_size(font, pxlmag, name, default_font_path,
(char *) NULL)) != NULL)
***************
*** 215,222 ****
--- 502,516 ----
(f = formatted_open(p, font, "pxl", pxlmag, name, count++))
!= NULL)
return f;
+ #ifdef SEARCH_SUBDIRECTORIES
+ if (next_subdir != NULL && next_subdir->index == p) {
+ next_subdir = next_subdir->next;
+ if (next_subdir != NULL && next_subdir->index == p) continue;
+ }
+ #endif
p = index(p, PATH_SEP);
if (p == NULL) break;
+ ++p;
}
return NULL;
}
***************
*** 234,251 ****
{
FILE *f;
int *p1, *p2, pxlmag;
/*
* Loop over sizes. Try actual size first, then closest sizes.
*/
pxlmag = mag + 0.5;
! if ((f = try_size(font, *mag_ret = pxlmag, name, font_path,
default_font_path)) != NULL)
return f;
if (pxlmag < mag) ++pxlmag; else --pxlmag;
! if ((f = try_size(font, *mag_ret = pxlmag, name, font_path,
default_font_path)) != NULL)
return f;
for (p2 = sizes; p2 < sizend; ++p2) if (*p2 >= mag) break;
p1 = p2;
for (;;) {
--- 528,562 ----
{
FILE *f;
int *p1, *p2, pxlmag;
+ char *path_to_use = font_path;
/*
* Loop over sizes. Try actual size first, then closest sizes.
+ If the pathname is absolutely or explicitly relative, don't
+ use the usual paths to search for it; just look for it in the
+ directory specified.
*/
pxlmag = mag + 0.5;
!
! #ifndef VMS
! if (*font == '/') path_to_use = "/";
! else if (*font == '.' && (*(font + 1) == '/'
! || (*(font + 1) == '.' && *(font + 2) == '/')))
! path_to_use = ".";
! #endif
!
! if ((f = try_size(font, *mag_ret = pxlmag, name, path_to_use,
default_font_path)) != NULL)
return f;
+
+ /* Try at one away from the size we just tried, to account
+ for rounding error. */
if (pxlmag < mag) ++pxlmag; else --pxlmag;
! if ((f = try_size(font, *mag_ret = pxlmag, name, path_to_use,
default_font_path)) != NULL)
return f;
+
+ /* Now try at all the sizes. */
for (p2 = sizes; p2 < sizend; ++p2) if (*p2 >= mag) break;
p1 = p2;
for (;;) {
***************
*** 256,262 ****
else if (p2 >= sizend || mag * mag <= p1[-1] * *p2)
pxlmag = *--p1;
else pxlmag = *p2++;
! if ((f = try_size(font, *mag_ret = pxlmag, name, font_path,
default_font_path)) != NULL)
return f;
}
--- 567,573 ----
else if (p2 >= sizend || mag * mag <= p1[-1] * *p2)
pxlmag = *--p1;
else pxlmag = *p2++;
! if ((f = try_size(font, *mag_ret = pxlmag, name, path_to_use,
default_font_path)) != NULL)
return f;
}
***************
*** 263,273 ****
}
FILE *
! pxl_open(font, font_ret, mag, mag_ret, factor, name)
char *font, **font_ret;
float mag;
int *mag_ret;
- float *factor;
char **name;
{
FILE *f;
--- 574,583 ----
}
FILE *
! pxl_open(font, font_ret, mag, mag_ret, name)
char *font, **font_ret;
float mag;
int *mag_ret;
char **name;
{
FILE *f;
***************
*** 274,280 ****
int actual_pt, low_pt, high_pt, trial_pt;
char fn[50], *fnend;
- *factor = 1.0;
f = pre_pxl_open(font, mag, mag_ret, name);
if (f != NULL) {
*font_ret = NULL;
--- 584,589 ----
***************
*** 297,304 ****
Sprintf(fnend, "%d", trial_pt);
f = pre_pxl_open(fn, mag * actual_pt / trial_pt, mag_ret, name);
if (f != NULL) {
! *font_ret = strcpy(malloc((unsigned) strlen(fn) + 1), fn);
! *factor = (float) actual_pt / trial_pt;
return f;
}
}
--- 606,613 ----
Sprintf(fnend, "%d", trial_pt);
f = pre_pxl_open(fn, mag * actual_pt / trial_pt, mag_ret, name);
if (f != NULL) {
! *font_ret = strcpy(xmalloc((unsigned) strlen(fn) + 1,
! "name of font used"), fn);
return f;
}
}
***************
*** 307,313 ****
*font_ret = alt_font;
f = pre_pxl_open(alt_font, mag, mag_ret, name);
if (f != NULL)
! *font_ret = strcpy(malloc((unsigned) strlen(alt_font) + 1),
alt_font);
}
return f;
--- 616,623 ----
*font_ret = alt_font;
f = pre_pxl_open(alt_font, mag, mag_ret, name);
if (f != NULL)
! *font_ret = strcpy(xmalloc((unsigned) strlen(alt_font) + 1,
! "name of font used"),
alt_font);
}
return f;
diff -cr old/tpic.c new/tpic.c
*** old/tpic.c Sun Oct 21 14:47:54 1990
--- new/tpic.c Fri Dec 7 16:54:30 1990
***************
*** 410,415 ****
else if (strcmp(command, "sh") == 0) shade_last();
else if (strcmp(command, "wh") == 0) whiten_last();
else if (strcmp(command, "bk") == 0) blacken_last();
! else if (spec_warn_now)
Fprintf(stderr, "%s: special \"%s\" not implemented\n", prog, orig_cp);
}
--- 410,415 ----
else if (strcmp(command, "sh") == 0) shade_last();
else if (strcmp(command, "wh") == 0) whiten_last();
else if (strcmp(command, "bk") == 0) blacken_last();
! else if (!hush_spec_now)
Fprintf(stderr, "%s: special \"%s\" not implemented\n", prog, orig_cp);
}
diff -cr old/xdvi.c new/xdvi.c
*** old/xdvi.c Sun Oct 21 14:49:08 1990
--- new/xdvi.c Mon Feb 4 13:05:55 1991
***************
*** 116,121 ****
--- 116,145 ----
#define DPY DISP,
static Screen *SCRN;
static Cursor redraw_cursor, ready_cursor;
+
+ #ifdef VMS
+ /*
+ * Magnifying glass cursor
+ *
+ * Developed by Tom Sawyer, April 1990
+ * Contibuted by Hunter Goatley, January 1991
+ *
+ */
+
+ #define mag_glass_width 16
+ #define mag_glass_height 16
+ #define mag_glass_x_hot 6
+ #define mag_glass_y_hot 6
+ static char mag_glass_bits[] = {
+ 0xf8, 0x03, 0x0c, 0x06, 0xe2, 0x09, 0x13, 0x1a, 0x01, 0x14, 0x01, 0x14,
+ 0x01, 0x10, 0x01, 0x10, 0x01, 0x10, 0x03, 0x10, 0x02, 0x18, 0x0c, 0x34,
+ 0xf8, 0x6f, 0x00, 0xd8, 0x00, 0xb0, 0x00, 0xe0
+ };
+ #include <decw$cursor.h> /* Include the DECWindows cursor symbols */
+ static int DECWCursorFont; /* Space for the DECWindows cursor font */
+ static Pixmap MagnifyPixmap; /* Pixmap to hold our special mag-glass */
+ #endif /* VMS */
+
#define SetCursor(x) XDefineCursor(DISP, WINDOW(mane), x)
#define ClearPage(wr) XClearWindow(DISP, WINDOW(wr));
#define ClearArea(win, x, y, w, h) XClearArea(DISP, win, x, y, w, h, False)
***************
*** 160,166 ****
int offset_x, offset_y;
int unshrunk_paper_w, unshrunk_paper_h;
int unshrunk_page_w, unshrunk_page_h;
! Boolean spec_warn = True;
static char *paper = DEFAULT_PAPER;
static char *sidemargin, *topmargin;
static char *xoffset, *yoffset;
--- 184,191 ----
int offset_x, offset_y;
int unshrunk_paper_w, unshrunk_paper_h;
int unshrunk_page_w, unshrunk_page_h;
! Boolean hush_spec = False;
! Boolean hush_chars = False;
static char *paper = DEFAULT_PAPER;
static char *sidemargin, *topmargin;
static char *xoffset, *yoffset;
***************
*** 309,320 ****
{"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},
! {"Prev", "prev", 'p', 600},
! {"Page-5", "prev5", 5 << 8 | 'p', 650},
! {"Page-10", "prev10", 10 << 8 | 'p', 700},
};
static void handle_command();
--- 334,345 ----
{"Shrink2", "sh2", 2 << 8 | 's', 200},
{"Shrink3", "sh3", 3 << 8 | 's', 250},
{"Shrink4", "sh4", 4 << 8 | 's', 300},
! {"Page-10", "prev10", 10 << 8 | 'p', 400},
! {"Page-5", "prev5", 5 << 8 | 'p', 450},
! {"Prev", "prev", 'p', 500},
! {"Next", "next", 'n', 600},
! {"Page+5", "next5", 5 << 8 | 'n', 650},
! {"Page+10", "next10", 10 << 8 | 'n', 700},
};
static void handle_command();
***************
*** 415,421 ****
char *sprintf();
#endif
- char *malloc();
double atof();
void exit();
--- 440,445 ----
***************
*** 1192,1197 ****
--- 1216,1224 ----
case 'q':
case '\003': /* control-C */
case '\004': /* control-D */
+ #ifdef VMS
+ case '\032': /* control-Z */
+ #endif
exit(0);
case 'n':
case 'f':
***************
*** 1362,1368 ****
if (0 <= next_page && next_page < total_pages) {
if (current_page != next_page) {
current_page = next_page;
! spec_warn_now = spec_warn;
if (!keep_flag) home(False);
}
canit = True;
--- 1389,1395 ----
if (0 <= next_page && next_page < total_pages) {
if (current_page != next_page) {
current_page = next_page;
! hush_spec_now = hush_spec;
if (!keep_flag) home(False);
}
canit = True;
***************
*** 1629,1635 ****
}
else {
draw_page();
! spec_warn_now = False;
}
}
--- 1656,1662 ----
}
else {
draw_page();
! hush_spec_now = True;
}
}
***************
*** 1746,1756 ****
#ifndef VMS
#ifdef BUTTONS
Fputs("\
! Usage: xdvi [+[<page>]] [-s <shrink>] [-S <density>] [-p <pixels>] [-l] [-sw]\n\
[-expert] [-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
! [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>] [-rv]\
! \n\
! [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>]\n\
[-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
[-cr <color>]\n\
[-bw <width>] [-geometry <geometry>] [-icongeometry <geometry>]\n\
--- 1773,1783 ----
#ifndef VMS
#ifdef BUTTONS
Fputs("\
! Usage: xdvi [+[<page>]] [-s <shrink>] [-S <density>] [-p <pixels>] [-l] [-rv]\n\
[-expert] [-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
! [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>]\n\
! [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>] [-keep]\n\
! [-hushspecials] [-hushchars] [-hush]\n\
[-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
[-cr <color>]\n\
[-bw <width>] [-geometry <geometry>] [-icongeometry <geometry>]\n\
***************
*** 1758,1768 ****
stderr);
#else /* !BUTTONS */
Fputs("\
! Usage: xdvi [+[<page>]] [-s <shrink>] [-S <density>] [-p <pixels>] [-l] [-sw]\n\
[-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
! [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>] [-rv]\
! \n\
! [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>]\n\
[-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
[-cr <color>]\n\
[-bw <width>] [-geometry <geometry>] [-icongeometry <geometry>]\n\
--- 1785,1795 ----
stderr);
#else /* !BUTTONS */
Fputs("\
! Usage: xdvi [+[<page>]] [-s <shrink>] [-S <density>] [-p <pixels>] [-l] [-rv]\n\
[-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
! [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>]\n\
! [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>] [-keep]\n\
! [-hushspecials] [-hushchars] [-hush]\n\
[-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
[-cr <color>]\n\
[-bw <width>] [-geometry <geometry>] [-icongeometry <geometry>]\n\
***************
*** 1771,1795 ****
#endif /* BUTTONS */
#else /* VMS */
Fputs("\
! Usage: xdvi [+[<page>]] [-s <shrink>] [-density <%>] [-p <pixels>] [-l] [-sw]\n\
[-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
! [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>] [-rv]\
\n", stderr);
Fputs("\
! [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>]\n\
[-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
[-cr <color>]\n\
[-bw <width>] [-geometry <geometry>] [-icongeometry <geometry>]\n\
! [-iconic] [-display <host:display>] [-copy] [-thorough] dvi_file\n",
stderr);
#endif /* VMS */
#else /* X10 */
Fputs("\
! Usage: xdvi [+[<page>]] [-s <shrink>] [-S <density>] [-p <pixels>] [-l] [-sw]\n\
[-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
! [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>] [-rv]\
! \n\
! [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>]\n\
[-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
[-cr <color>]\n\
[-bw <width>] [-geometry <geometry> | =<geometry>]\n\
--- 1798,1823 ----
#endif /* BUTTONS */
#else /* VMS */
Fputs("\
! Usage: xdvi [+[<page>]] [-s <shrink>] [-density <%>] [-p <pixels>] [-l] [-rv]\n\
[-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
! [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>]\
\n", stderr);
Fputs("\
! [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>] [-keep]\n\
! [-hushspecials] [-hushchars] [-hush]\n\
[-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
[-cr <color>]\n\
[-bw <width>] [-geometry <geometry>] [-icongeometry <geometry>]\n\
! [-iconic] [-display <host::display>] [-copy] [-thorough] dvi_file\n",
stderr);
#endif /* VMS */
#else /* X10 */
Fputs("\
! Usage: xdvi [+[<page>]] [-s <shrink>] [-S <density>] [-p <pixels>] [-l]\n\
[-paper <papertype>] [-mgs[n] <size>] [-altfont <font>]\n\
! [-margins <dimen>] [-sidemargin <dimen>] [-topmargin <dimen>]\n\
! [-offsets <dimen>] [-xoffset <dimen>] [-yoffset <dimen>] [-keep]\n\
! [-hushspecials] [-hushchars] [-hush]\n\
[-fg <color>] [-bg <color>] [-hl <color>] [-bd <color>] \
[-cr <color>]\n\
[-bw <width>] [-geometry <geometry> | =<geometry>]\n\
***************
*** 1838,1845 ****
{"-altfont", ".altFont", XrmoptionSepArg, (caddr_t) NULL},
{"-l", ".listFonts", XrmoptionNoArg, (caddr_t) "on"},
{"+l", ".listFonts", XrmoptionNoArg, (caddr_t) "off"},
! {"-sw", ".specialWarn", XrmoptionNoArg, (caddr_t) "on"},
! {"+sw", ".specialWarn", XrmoptionNoArg, (caddr_t) "off"},
{"-fg", ".foreground", XrmoptionSepArg, (caddr_t) NULL},
{"-foreground", ".foreground", XrmoptionSepArg, (caddr_t) NULL},
{"-bg", ".background", XrmoptionSepArg, (caddr_t) NULL},
--- 1866,1877 ----
{"-altfont", ".altFont", XrmoptionSepArg, (caddr_t) NULL},
{"-l", ".listFonts", XrmoptionNoArg, (caddr_t) "on"},
{"+l", ".listFonts", XrmoptionNoArg, (caddr_t) "off"},
! {"-hushspecials", ".hushSpecials", XrmoptionNoArg, (caddr_t) "on"},
! {"+hushspecials", ".hushSpecials", XrmoptionNoArg, (caddr_t) "off"},
! {"-hushchars", ".hushLostChars", XrmoptionNoArg, (caddr_t) "on"},
! {"+hushchars", ".hushLostChars", XrmoptionNoArg, (caddr_t) "off"},
! {"-hush", ".Hush", XrmoptionNoArg, (caddr_t) "on"},
! {"+hush", ".Hush", XrmoptionNoArg, (caddr_t) "off"},
{"-fg", ".foreground", XrmoptionSepArg, (caddr_t) NULL},
{"-foreground", ".foreground", XrmoptionSepArg, (caddr_t) NULL},
{"-bg", ".background", XrmoptionSepArg, (caddr_t) NULL},
***************
*** 1847,1852 ****
--- 1879,1886 ----
{"-hl", ".highlight", XrmoptionSepArg, (caddr_t) NULL},
{"-cr", ".cursorColor", XrmoptionSepArg, (caddr_t) NULL},
{"-icongeometry",".iconGeometry",XrmoptionSepArg, (caddr_t) NULL},
+ {"-keep", ".keepPosition",XrmoptionNoArg, (caddr_t) "on"},
+ {"+keep", ".keepPosition",XrmoptionNoArg, (caddr_t) "off"},
{"-copy", ".copy", XrmoptionNoArg, (caddr_t) "on"},
{"+copy", ".copy", XrmoptionNoArg, (caddr_t) "off"},
{"-thorough", ".thorough", XrmoptionNoArg, (caddr_t) "on"},
***************
*** 1888,1895 ****
(Cardinal) &list_fonts, XtRBoolean, (caddr_t) &list_fonts},
{"reverseVideo", "ReverseVideo", XtRBoolean, sizeof(Boolean),
(Cardinal) &reverse, XtRBoolean, (caddr_t) &reverse},
! {"specialWarn", "SpecialWarn", XtRBoolean, sizeof(Boolean),
! (Cardinal) &spec_warn, XtRBoolean, (caddr_t) &spec_warn},
{"foreground", "Foreground", XtRPixel, sizeof(Pixel),
(Cardinal)&fore_Pixel, XtRPixel, (caddr_t) &fore_Pixel},
{"foreground", "Foreground", XtRString, sizeof(char *),
--- 1922,1931 ----
(Cardinal) &list_fonts, XtRBoolean, (caddr_t) &list_fonts},
{"reverseVideo", "ReverseVideo", XtRBoolean, sizeof(Boolean),
(Cardinal) &reverse, XtRBoolean, (caddr_t) &reverse},
! {"hushSpecials", "Hush", XtRBoolean, sizeof(Boolean),
! (Cardinal) &hush_spec, XtRBoolean, (caddr_t) &hush_spec},
! {"hushLostChars", "Hush", XtRBoolean, sizeof(Boolean),
! (Cardinal) &hush_chars, XtRBoolean, (caddr_t) &hush_chars},
{"foreground", "Foreground", XtRPixel, sizeof(Pixel),
(Cardinal)&fore_Pixel, XtRPixel, (caddr_t) &fore_Pixel},
{"foreground", "Foreground", XtRString, sizeof(char *),
***************
*** 1912,1917 ****
--- 1948,1955 ----
(Cardinal)&curs_color, XtRString, NULL},
{"iconGeometry", "IconGeometry", XtRString, sizeof(char *),
(Cardinal)&icon_geometry, XtRString, NULL},
+ {"keepPosition", "KeepPosition", XtRBoolean, sizeof(Boolean),
+ (Cardinal)&keep_flag, XtRBoolean, (caddr_t) &keep_flag},
{"copy", "Copy", XtRBoolean, sizeof(Boolean),
(Cardinal)©, XtRBoolean, (caddr_t) ©},
{"thorough", "Thorough", XtRBoolean, sizeof(Boolean),
***************
*** 1953,1958 ****
--- 1991,1997 ----
static char *geometry;
static char *margins;
static char *offsets;
+ static Boolean hush;
#ifndef X10
static Boolean iconic = False;
***************
*** 2012,2019 ****
{"+l", "listFonts", FalseArg, BooleanArg, 1,(caddr_t) &list_fonts},
{"-rv", NULL, TrueArg, BooleanArg, 2, (caddr_t) &reverse},
{"+rv", "reverseVideo", FalseArg, BooleanArg, 1,(caddr_t) &reverse},
! {"-sw", NULL, TrueArg, BooleanArg, 2, (caddr_t) &spec_warn},
! {"+sw", "specialWarn", FalseArg, BooleanArg, 1,(caddr_t) &spec_warn},
{"-bw", NULL, SepArg, NumberArg, 2, (caddr_t) &bwidth},
{"-borderwidth", "borderWidth", SepArg, NumberArg, 1, (caddr_t) &bwidth},
{"-fg", NULL, SepArg, StringArg, 2, (caddr_t) &fore_color},
--- 2051,2062 ----
{"+l", "listFonts", FalseArg, BooleanArg, 1,(caddr_t) &list_fonts},
{"-rv", NULL, TrueArg, BooleanArg, 2, (caddr_t) &reverse},
{"+rv", "reverseVideo", FalseArg, BooleanArg, 1,(caddr_t) &reverse},
! {"-hush", NULL, TrueArg, BooleanArg, 6, (caddr_t) &hush},
! {"+hush", "Hush", FalseArg, BooleanArg, 5,(caddr_t) &hush},
! {"-hushspecials", NULL, TrueArg, BooleanArg, 2, (caddr_t) &hush_spec},
! {"+hushspecials", "hushSpecials", FalseArg, BooleanArg, 1,(caddr_t) &hush_spec},
! {"-hushchars", NULL, TrueArg, BooleanArg, 2, (caddr_t) &hush_chars},
! {"+hushchars", "hushLostChars", FalseArg, BooleanArg, 1,(caddr_t) &hush_chars},
{"-bw", NULL, SepArg, NumberArg, 2, (caddr_t) &bwidth},
{"-borderwidth", "borderWidth", SepArg, NumberArg, 1, (caddr_t) &bwidth},
{"-fg", NULL, SepArg, StringArg, 2, (caddr_t) &fore_color},
***************
*** 2032,2037 ****
--- 2075,2082 ----
{"-icongeometry","iconGeometry",StickyArg, StringArg, 1,(caddr_t) &icon_geometry},
{"-iconic", NULL, TrueArg, BooleanArg, 2, (caddr_t) &iconic},
{"+iconic", "iconic", FalseArg, BooleanArg, 1,(caddr_t) &iconic},
+ {"-keep", NULL, TrueArg, BooleanArg, 2, (caddr_t) &keep_flag},
+ {"+keep", "keepPosition", FalseArg, BooleanArg, 1,(caddr_t) &keep_flag},
{"-copy", NULL, TrueArg, BooleanArg, 2, (caddr_t) ©},
{"+copy", "copy", FalseArg, BooleanArg, 1,(caddr_t) ©},
{"-thorough", NULL, TrueArg, BooleanArg, 2, (caddr_t) &thorough},
***************
*** 2061,2069 ****
char **argvend = argv + argc;
char *optstring;
caddr_t addr;
! struct option *opt, *candidate;
! int len1, len2, matchlen, i;
for (arg = argv + 1; arg < argvend; ++arg) {
len1 = strlen(*arg);
candidate = NULL;
--- 2106,2117 ----
char **argvend = argv + argc;
char *optstring;
caddr_t addr;
! struct option *opt, *lastopt, *candidate;
! int len1, len2, matchlen;
+ /*
+ * Step 1. Process command line options.
+ */
for (arg = argv + 1; arg < argvend; ++arg) {
len1 = strlen(*arg);
candidate = NULL;
***************
*** 2120,2128 ****
case StringArg: *((char **) addr) = optstring; break;
case NumberArg: *((int *) addr) = atoi(optstring); break;
}
! for (i = candidate->classcount; i > 0; --i)
! (candidate++)->resource = NULL;
}
#ifndef X10
if ((DISP = XOpenDisplay(display)) == NULL)
--- 2168,2202 ----
case StringArg: *((char **) addr) = optstring; break;
case NumberArg: *((int *) addr) = atoi(optstring); break;
}
! /* flag it for subsequent processing */
! candidate->resource = (char *) candidate;
}
+ /*
+ * Step 2. Propagate classes for command line arguments. Backwards.
+ */
+ for (opt = options + XtNumber(options) - 1; opt >= options; --opt)
+ if (opt->resource == (char *) opt) {
+ addr = opt->address;
+ lastopt = opt + opt->classcount;
+ for (candidate = opt; candidate < lastopt; ++candidate) {
+ if (candidate->resource != NULL) {
+ switch (opt->argtype) {
+ case BooleanArg:
+ *((Boolean *) candidate->address) =
+ *((Boolean *) addr);
+ break;
+ case StringArg:
+ *((char **) candidate->address) =
+ *((char **) addr);
+ break;
+ case NumberArg:
+ *((int *) candidate->address) = *((int *) addr);
+ break;
+ }
+ candidate->resource = NULL;
+ }
+ }
+ }
#ifndef X10
if ((DISP = XOpenDisplay(display)) == NULL)
***************
*** 2132,2137 ****
--- 2206,2214 ----
if (XOpenDisplay(display) == NULL)
oops("Can't open display");
#endif
+ /*
+ * Step 3. Handle resources (including classes).
+ */
for (opt = options; opt < options + XtNumber(options); ++opt)
if (opt->resource &&
#ifndef X10
***************
*** 2140,2161 ****
#else
(optstring = XGetDefault(DPY prog, opt->resource)))
#endif
! switch (opt->argtype) {
! case StringArg:
! *((char **) opt->address) = optstring;
! break;
! case NumberArg:
! *((int *) opt->address) = atoi(optstring);
! break;
! case BooleanArg:
! *((Boolean *) opt->address) =
! (strcmp(optstring, "on") == 0);
}
-
- if (!sidemargin) sidemargin = margins;
- if (!topmargin) topmargin = margins;
- if (!xoffset) xoffset = offsets;
- if (!yoffset) yoffset = offsets;
}
#endif /* TOOLKIT */
--- 2217,2237 ----
#else
(optstring = XGetDefault(DPY prog, opt->resource)))
#endif
! {
! lastopt = opt + opt->classcount;
! for (candidate = opt; candidate < lastopt; ++candidate)
! if (candidate->resource != NULL) switch (opt->argtype) {
! case StringArg:
! *((char **) candidate->address) = optstring;
! break;
! case NumberArg:
! *((int *) candidate->address) = atoi(optstring);
! break;
! case BooleanArg:
! *((Boolean *) candidate->address) =
! (strcmp(optstring, "on") == 0);
! }
}
}
#endif /* TOOLKIT */
***************
*** 2382,2389 ****
--- 2458,2478 ----
highGC = MakeGC(GXcopy, hl_Pixel, back_Pixel);
}
+ #ifndef VMS
ready_cursor = XCreateFontCursor(DISP, XC_cross);
redraw_cursor = XCreateFontCursor(DISP, XC_watch);
+ #else
+ DECWCursorFont = XLoadFont(DISP, "DECW$CURSOR");
+ XSetFont(DISP, foreGC, DECWCursorFont);
+ redraw_cursor = XCreateGlyphCursor(DISP, DECWCursorFont, DECWCursorFont,
+ decw$c_wait_cursor, decw$c_wait_cursor + 1,
+ &fore_color, &back_color);
+ MagnifyPixmap = XCreateBitmapFromData (DISP, RootWindowOfScreen(SCRN),
+ mag_glass_bits, mag_glass_width, mag_glass_height);
+ ready_cursor = XCreatePixmapCursor(DISP, MagnifyPixmap, MagnifyPixmap,
+ &back_color, &fore_color, mag_glass_x_hot, mag_glass_y_hot);
+ #endif /* VMS */
+
if (!curs_color)
cr_Pixel = high_color ? hl_Pixel : fore_Pixel;
{
***************
*** 2637,2643 ****
#endif /* X10 */
do_pages();
! #ifdef lint
! return 0;
! #endif
}
--- 2726,2730 ----
#endif /* X10 */
do_pages();
! /* NOTREACHED */
}
diff -cr old/xdvi.h new/xdvi.h
*** old/xdvi.h Sun Oct 21 14:49:17 1990
--- new/xdvi.h Tue Jan 15 15:17:41 1991
***************
*** 135,141 ****
extern int maxstack;
extern int n_fonts_left; /* for LRU management of fonts */
extern time_t dvi_time; /* last mod. time for dvi file */
- extern char *font_path;
extern int page_w, page_h;
/*
--- 135,140 ----
***************
*** 145,153 ****
extern long *page_offset;
/*
! * Mechanism for reducing repeated warning about specials.
*/
! extern Boolean spec_warn, spec_warn_now;
/*
--- 144,153 ----
extern long *page_offset;
/*
! * Mechanism for reducing repeated warning about specials, lost characters, etc.
*/
! extern Boolean hush_spec, hush_spec_now;
! extern Boolean hush_chars;
/*
***************
*** 202,208 ****
struct font *next; /* link to next font info block */
int TeXnumber; /* font number (in DVI file) */
int scale; /* scaled size in SPELL units */
- float factor; /* multiply char. widths by this */
char *fontname; /* PXL file name */
short size; /* dots per 5 inches */
FILE *file; /* open PXL file or NULL */
--- 202,207 ----
diff -cr old/xdvi_man.sed new/xdvi_man.sed
*** old/xdvi_man.sed Sun Oct 21 14:49:31 1990
--- new/xdvi_man.sed Sat Feb 2 16:20:39 1991
***************
*** 9,19 ****
.B xdvi
.nh
[+[\fIpage\fP]] [\-s \fIshrink\fP] [\-S \fIdensity\fP] [\-p \fIpixels\fP] [\-l]
! [\-sw] [\-paper \fIpapertype\fP] [\-mgs[\fIn\fP] \fIsize\fP]
! [\-altfont \fIfont\fP]
[\-margins \fIdimen\fP] [\-sidemargin \fIdimen\fP] [\-topmargin \fIdimen\fP]
[\-offsets \fIdimen\fP] [\-xoffset \fIdimen\fP] [\-yoffset \fIdimen\fP]
! [\-rv] [\-fg \fIcolor\fP] [\-bg \fIcolor\fP]
[\-hl \fIcolor\fP] [\-bd \fIcolor\fP] [\-cr \fIcolor\fP] [\-bw \fIwidth\fP]
#ifx11
[\-geometry \fIgeometry\fP] [\-icongeometry \fIgeometry\fP] [\-iconic]
--- 9,19 ----
.B xdvi
.nh
[+[\fIpage\fP]] [\-s \fIshrink\fP] [\-S \fIdensity\fP] [\-p \fIpixels\fP] [\-l]
! [\-paper \fIpapertype\fP] [\-mgs[\fIn\fP] \fIsize\fP]
! [\-hushspecials] [-hushchars] [-hush] [\-altfont \fIfont\fP]
[\-margins \fIdimen\fP] [\-sidemargin \fIdimen\fP] [\-topmargin \fIdimen\fP]
[\-offsets \fIdimen\fP] [\-xoffset \fIdimen\fP] [\-yoffset \fIdimen\fP]
! [\-keep] [\-rv] [\-fg \fIcolor\fP] [\-bg \fIcolor\fP]
[\-hl \fIcolor\fP] [\-bd \fIcolor\fP] [\-cr \fIcolor\fP] [\-bw \fIwidth\fP]
#ifx11
[\-geometry \fIgeometry\fP] [\-icongeometry \fIgeometry\fP] [\-iconic]
***************
*** 94,105 ****
(%%dot%%listFonts)
Causes the names of the fonts used to be listed.
.TP
! .B \-sw
! (%%dot%%specialWarn)
! Causes \fIxdvi\fR to warn the user when it encounters a \\special string
! which it cannot process. This option is on by default; to turn it off,
! use \fB+sw\fR.
.TP
.B \-rv
(%%dot%%reverseVideo)
Causes the page to be displayed with white characters on a
--- 94,113 ----
(%%dot%%listFonts)
Causes the names of the fonts used to be listed.
.TP
! .B \-hushspecials
! (%%dot%%hushSpecials)
! Causes \fIxdvi\fR to suppress warnings about \\special strings
! which it cannot process.
.TP
+ .B \-hushchars
+ (%%dot%%hushLostChars)
+ Causes \fIxdvi\fR to suppress warnings about references to characters which
+ are not defined in the font.
+ .TP
+ .B \-hush
+ (%%dot%%Hush)
+ Causes \fIxdvi\fR to suppress all suppressable warnings.
+ .TP
.B \-rv
(%%dot%%reverseVideo)
Causes the page to be displayed with white characters on a
***************
*** 159,169 ****
Always use the \fIcopy\fR operation when writing characters to the display.
This option may be necessary for correct operation on a color display, but
overstrike characters will be incorrect.
#ifbuttons
.TP
.B \-expert
(.expert)
! Prevent the buttons from appearing.
#endif
.TP
.BI \-margins " dimen"
--- 167,182 ----
Always use the \fIcopy\fR operation when writing characters to the display.
This option may be necessary for correct operation on a color display, but
overstrike characters will be incorrect.
+ .TP
+ .B \-keep
+ (.keepPosition)
+ Sets a flag to indicate that \fIxdvi\fR should not move to the home position
+ when moving to a new page. See also the `k' keystroke.
#ifbuttons
.TP
.B \-expert
(.expert)
! Prevent the buttons from appearing. See also the `x' keystroke.
#endif
.TP
.BI \-margins " dimen"
***************
*** 345,359 ****
of the same file while running \fIxdvi\fR only once.
.TP
.B k
! Normally when \fIxdvi\fR switches pages it moves to the home position as well.
The `k' keystroke toggles a `keep-position' flag which, when set, will keep
the same position when moving between pages. Also `0k' and `1k' clear and
! set this flag, respectively.
#ifbuttons
.TP
.B x
Toggles expert mode (in which the buttons do not appear). Also `0x' and `1x'
! clear and reset this mode, respectively.
#endif
.SH MOUSE ACTIONS
If the shrink factor is set to any number other than one, then clicking
--- 358,372 ----
of the same file while running \fIxdvi\fR only once.
.TP
.B k
! Normally when \fIxdvi\fR switches pages, it moves to the home position as well.
The `k' keystroke toggles a `keep-position' flag which, when set, will keep
the same position when moving between pages. Also `0k' and `1k' clear and
! set this flag, respectively. See also the \fB\-keep\fR option.
#ifbuttons
.TP
.B x
Toggles expert mode (in which the buttons do not appear). Also `0x' and `1x'
! clear and reset this mode, respectively. See also the \fB\-expert\fR option.
#endif
.SH MOUSE ACTIONS
If the shrink factor is set to any number other than one, then clicking
***************
*** 388,393 ****
--- 401,423 ----
If the font cannot be found at all, then \fIxdvi\fR will try to vary the point
size of the font (within a certain range), and if this fails, then it will
use the font specified as the alternate font (cf. \fB-altfont\fR).
+ .PP
+ For compatibility with TeX, you may also use ``TEXFONTS'' in place of
+ ``XDVIFONTS'', although in that case the variable should not include any
+ ``%'' specifiers.
+ #ifsubdir
+ .PP
+ You can also enable recursive searching in the font path by using the ``*''
+ and ``**'' specifiers. At this point in the path, \fIxdvi\fR will recursively
+ search subdirectories of the given directory in order to find font files.
+ A single asterisk limits the search to one level; a double asterisk will search
+ through an arbitrary number of levels. Also, the variable TEXFONTS_SUBDIR
+ can be used to give a colon-separated list of directories to recursively search.
+ This is equivalent to including the specifiers with a ``*'' after each; the
+ usual conventions regarding extra colons applies here, too, relative to a
+ default subdirectory path. Asterisks may not be preceded by a ``%'' specifier
+ in any path component.
+ #endif
.PP
The ``XDVISIZES'' variable must be set to indicate which sizes of fonts are
available. It should consists of a list of numbers separated by colons. If
--
Dan Heller
------------------------------------------------
O'Reilly && Associates Zyrcom Inc
Senior Writer President
argv at ora.com argv at zipcode.com
More information about the Comp.sources.x
mailing list