summaryrefslogtreecommitdiff
path: root/dviware/beebe/src/prxbmap.h
blob: 1293ed5a368beb8e9cca33b4429738ee0c24414d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* -*-C-*- prxbmap.h */
/*-->prxbmap*/
/**********************************************************************/
/****************************** prxbmap *******************************/
/**********************************************************************/

void
prxbmap()

{
    register UNSIGN32 *p;
    register INT16 i,j,k,ybottom,ytop;

    /* The Printronix encodes 6 horizontal bits in a single ASCII */
    /* character biased by 64 to make it printable, but requires that */
    /* the bits be reversed.  The following table is indexed by a */
    /* 6-bit pattern (0..63) and was produced automatically by an */
    /* EMACS TECO macro */
    /*  raster	   code as */
    /*  123456 -->  654321 */
    static int remap[] =
	{   /* 1000000 --> 1000000 */
	64,
	/* 1000001 --> 1100000 */  96,
	/* 1000010 --> 1010000 */  80,
	/* 1000011 --> 1110000 */  112,
	/* 1000100 --> 1001000 */  72,
	/* 1000101 --> 1101000 */  104,
	/* 1000110 --> 1011000 */  88,
	/* 1000111 --> 1111000 */  120,
	/* 1001000 --> 1000100 */  68,
	/* 1001001 --> 1100100 */  100,
	/* 1001010 --> 1010100 */  84,
	/* 1001011 --> 1110100 */  116,
	/* 1001100 --> 1001100 */  76,
	/* 1001101 --> 1101100 */  108,
	/* 1001110 --> 1011100 */  92,
	/* 1001111 --> 1111100 */  124,
	/* 1010000 --> 1000010 */  66,
	/* 1010001 --> 1100010 */  98,
	/* 1010010 --> 1010010 */  82,
	/* 1010011 --> 1110010 */  114,
	/* 1010100 --> 1001010 */  74,
	/* 1010101 --> 1101010 */  106,
	/* 1010110 --> 1011010 */  90,
	/* 1010111 --> 1111010 */  122,
	/* 1011000 --> 1000110 */  70,
	/* 1011001 --> 1100110 */  102,
	/* 1011010 --> 1010110 */  86,
	/* 1011011 --> 1110110 */  118,
	/* 1011100 --> 1001110 */  78,
	/* 1011101 --> 1101110 */  110,
	/* 1011110 --> 1011110 */  94,
	/* 1011111 --> 1111110 */  126,
	/* 1100000 --> 1000001 */  65,
	/* 1100001 --> 1100001 */  97,
	/* 1100010 --> 1010001 */  81,
	/* 1100011 --> 1110001 */  113,
	/* 1100100 --> 1001001 */  73,
	/* 1100101 --> 1101001 */  105,
	/* 1100110 --> 1011001 */  89,
	/* 1100111 --> 1111001 */  121,
	/* 1101000 --> 1000101 */  69,
	/* 1101001 --> 1100101 */  101,
	/* 1101010 --> 1010101 */  85,
	/* 1101011 --> 1110101 */  117,
	/* 1101100 --> 1001101 */  77,
	/* 1101101 --> 1101101 */  109,
	/* 1101110 --> 1011101 */  93,
	/* 1101111 --> 1111101 */  125,
	/* 1110000 --> 1000011 */  67,
	/* 1110001 --> 1100011 */  99,
	/* 1110010 --> 1010011 */  83,
	/* 1110011 --> 1110011 */  115,
	/* 1110100 --> 1001011 */  75,
	/* 1110101 --> 1101011 */  107,
	/* 1110110 --> 1011011 */  91,
	/* 1110111 --> 1111011 */  123,
	/* 1111000 --> 1000111 */  71,
	/* 1111001 --> 1100111 */  103,
	/* 1111010 --> 1010111 */  87,
	/* 1111011 --> 1110111 */  119,
	/* 1111100 --> 1001111 */  79,
	/* 1111101 --> 1101111 */  111,
	/* 1111110 --> 1011111 */  95,
	/* 1111111 --> 1111111 */  127
    };

    ytop = YBIT-1;

    k = -1;	    /* find bottom non-zero raster */
    for (j = 0; (j < ytop) && (k < 0); ++j) /* loop over raster lines */
    {
	p = BITMAP(j,XBIT-1);
	for (k = XBIT - 1; ((k >= 0) && (*p == 0)); --k)
	    --p;		/* trim white space */
    }
    ybottom = MAX(0,j-1);

    putchar('\f');	/* start new page with FF */
    for (j = (INT16)(topmargin*((float)YDPI)); j > 0; --j)
    {				/* supply top margin spacing */
	putchar('\005');	/* Printronix graphics prefix */
	NEWLINE(stdout);
    }
    for (j = ytop; (j >= ybottom) ; --j)    /* loop over raster lines */
    {
	p = BITMAP(j,XBIT-1);
	for (k = XBIT - 1; ((k >= 0) && (*p == 0)); --k)
	    --p;		/* trim white space */
	putchar('\005');	/* Printronix graphics prefix */

	for (i = (5 + (INT16)(leftmargin*((float)XDPI)))/6;
	    (i > 0) && (k >= 0); --i)
	    putchar('\100');/* left margin spacing if line not empty */

	p = BITMAP(j,0);	/* the j-th raster line */

	for (i = 0; i <= k; ++i)/* loop over trimmed raster */
	{ /* use machine-specific coding here for efficiency */
	    putchar(remap[((*p) >> 30) & 077]);
	    putchar(remap[((*p) >> 24) & 077]);
	    putchar(remap[((*p) >> 18) & 077]);
	    putchar(remap[((*p) >> 12) & 077]);
	    putchar(remap[((*p) >>  6) & 077]);
	    putchar(remap[((*p)      ) & 077]);
	    ++p;
	}
	NEWLINE(stdout);
    }
    (void)fflush(stdout);
}