xref: /original-bsd/old/lib2648/motion.c (revision 92d3de31)
1 /*	motion.c	4.1	83/03/09	*/
2 /*
3  * Move the pen to x, y.  We assume we are already in ESCP mode.
4  */
5 
6 #include "2648.h"
7 
8 motion(x, y)
9 {
10 	char lox, loy, hix, hiy;
11 	int delx, dely;
12 
13 	delx = x-_penx; dely = y-_peny;
14 	if (-16 <= delx && delx <= 15 && -16 <= dely && dely <= 15) {
15 		/*
16 		 * Optimization: if within 15 in both directions, can use
17 		 * HP short incremental mode, only 3 bytes.
18 		 */
19 		outchar('j');
20 		outchar(32 + (delx & 31));
21 		outchar(32 + (dely & 31));
22 	} else {
23 		/*
24 		 * Otherwise must use binary absolute mode, 5 bytes.
25 		 * We never use ascii mode or binary incremental, since
26 		 * those both take many more bytes.
27 		 */
28 		outchar('i');
29 		outchar(32+ ((x>>5) & 31));
30 		outchar(32+ (x&31));
31 		outchar(32+ ((y>>5) & 31));
32 		outchar(32+ (y&31));
33 	}
34 	_penx = x;
35 	_peny = y;
36 }
37