summaryrefslogtreecommitdiff
path: root/dviware/dvi2qms/qmsdev.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/dvi2qms/qmsdev.c
Initial commit
Diffstat (limited to 'dviware/dvi2qms/qmsdev.c')
-rw-r--r--dviware/dvi2qms/qmsdev.c145
1 files changed, 145 insertions, 0 deletions
diff --git a/dviware/dvi2qms/qmsdev.c b/dviware/dvi2qms/qmsdev.c
new file mode 100644
index 0000000000..4c6afde8c7
--- /dev/null
+++ b/dviware/dvi2qms/qmsdev.c
@@ -0,0 +1,145 @@
+/* qmsdev.c The qms output driver for dviqms program.
+ * Copyright 1985 Massachusetts Institute of Technology.
+ * Author: cjl@oz
+ */
+
+#include <stdio.h>
+#include "dev.h"
+
+#define DEV_DPI 300 /* Device dots per inch */
+#define DEV_XOFFSET 300
+#define DEV_YOFFSET 300
+
+FILE *dev_out;
+long dev_h,dev_v;
+unsigned long dev_options;
+char dev_hex[] = "0123456789ABCDEF";
+
+dev_setc(ch,xsize)
+ unsigned long ch;
+ int xsize;
+{
+ if (ch < '\040' || ch == '^' || ch == '\177') {
+ putc('^',dev_out);
+ putc('$',dev_out);
+ putc(dev_hex[(ch >> 4) & 017],dev_out);
+ putc(dev_hex[ch & 017],dev_out);
+ } else putc(ch,dev_out);
+ dev_h += xsize;
+}
+
+dev_position(x,y)
+ long x,y;
+{
+ if (dev_h != x) fprintf(dev_out,"^IH%04.4d",(dev_h = x) + DEV_XOFFSET);
+ if (dev_v != y) fprintf(dev_out,"^IV%04.4d",(dev_v = y) + DEV_YOFFSET);
+}
+
+dev_draw_box(h,w)
+ long h,w;
+{
+ fprintf(dev_out,"^JR-%04.4d^LS%04.4d%04.4d",h,w,h);
+ dev_v -= h;
+ dev_h += w;
+}
+
+dev_eop()
+{
+ fprintf(dev_out,"^G^-\f");
+ fflush(dev_out);
+ fprintf(dev_out,"^IH%04.4d^IV%04.4d",DEV_XOFFSET,DEV_YOFFSET);
+ dev_h = dev_v = 0;
+}
+
+#define QUIC_ON "\r^PY^-\r"
+#define QUIC_OFF "\r^-^PN^-\r"
+#define DEFAULT_FONT "^IS%05.5d^-"
+#define DELETE_FONTS "^DFEA^G^-"
+#define CLEAR_OVERLAYS "^DOC^Z^-"
+#define SYNTAX "^ISYNTAX%1.1d%1.1d%1.1d%1.1d%1.1d^-"
+#define PORTRAIT "^IOP^-"
+#define LANDSCAPE "^IOL^-"
+#define V_MARGINS "^IMV%04.4d%04.4d^-"
+#define H_MARGINS "^IMH%04.4d%04.4d^-"
+#define CHAR_SP "^IC%04.4d^-"
+#define LINE_SP "^IL%04.4d^-"
+
+hard_init()
+{
+ fprintf(dev_out,QUIC_ON); /* Turn on QUIC */
+ fprintf(dev_out,DELETE_FONTS); /* Delete all downloaded fonts */
+ fprintf(dev_out,CLEAR_OVERLAYS); /* Clear all overlays */
+ fprintf(dev_out,DEFAULT_FONT,10); /* Select the font I like */
+ soft_init();
+}
+
+soft_init()
+{
+ fprintf(dev_out,QUIC_ON); /* Turn on QUIC */
+ fprintf(dev_out,SYNTAX,0,0,0,1,0); /* Ensure correct SYNTAX */
+ if (dev_options & DEV_INIT_LANDSCAPE) {
+ fprintf(dev_out,LANDSCAPE); /* Landscape page orientation */
+ fprintf(dev_out,V_MARGINS,0,2550); /* Vertical margins */
+ fprintf(dev_out,H_MARGINS,0,4200); /* Horizontal margins */
+ } else {
+ fprintf(dev_out,PORTRAIT); /* Portrait page orientation */
+ fprintf(dev_out,V_MARGINS,0,4200); /* Vertical margins */
+ fprintf(dev_out,H_MARGINS,0,2550); /* Horizontal margins */
+ }
+ fprintf(dev_out,CHAR_SP,0); /* Turn off char spacing */
+ fprintf(dev_out,LINE_SP,0); /* Turn off line spacing */
+ page_init();
+}
+
+page_init()
+{
+ fprintf(dev_out,"^IH%04.4d^IV%04.4d",DEV_XOFFSET,DEV_YOFFSET);
+ dev_h = dev_v = 0;
+}
+
+dev_init(f,options,dpi)
+ FILE *f;
+ unsigned long options;
+ long *dpi;
+{
+ dev_out = f;
+ *dpi = DEV_DPI;
+ dev_options = options;
+ hard_init();
+}
+
+dev_term()
+{
+ fprintf(dev_out,QUIC_OFF);
+ fflush(dev_out);
+}
+
+
+dev_print_log(f)
+ FILE *f;
+{
+ register int ch;
+
+ if (dev_h || dev_v) putc('\f',dev_out);
+ fprintf(dev_out,V_MARGINS,100,3300); /* Vertical margins */
+ fprintf(dev_out,H_MARGINS,100,2550); /* Horizontal margins */
+ fprintf(dev_out,DEFAULT_FONT,10); /* Select the font I like */
+ fprintf(dev_out,"^IH%04.4d^IV%04.4d",100,100);
+ fprintf(dev_out,QUIC_OFF);
+ while (!ferror(f) && (ch = getc(f)) != EOF) {
+ if (ch == '\n') putc('\r',dev_out);
+ if (ch == '^') putc(ch,dev_out);
+ putc(ch,dev_out);
+ }
+ putc('\f',dev_out);
+ fflush(dev_out);
+ fprintf(dev_out,QUIC_ON);
+}
+
+dev_special(nchars,f)
+ int nchars;
+ FILE *f;
+{
+ while (nchars-- > 0) putc(getc(f),dev_out);
+ soft_init();
+}