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