| 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 | } |