Commit | Line | Data |
---|---|---|
051b1e55 DF |
1 | /* |
2 | * Copyright (c) 1980 Regents of the University of California. | |
3 | * All rights reserved. The Berkeley software License Agreement | |
4 | * specifies the terms and conditions for redistribution. | |
5 | */ | |
6 | ||
7 | #ifndef lint | |
8 | static char sccsid[] = "@(#)motion.c 5.1 (Berkeley) %G%"; | |
9 | #endif not lint | |
10 | ||
93247bc3 RC |
11 | /* |
12 | * Move the pen to x, y. We assume we are already in ESCP mode. | |
13 | */ | |
14 | ||
15 | #include "2648.h" | |
16 | ||
17 | motion(x, y) | |
18 | { | |
19 | char lox, loy, hix, hiy; | |
20 | int delx, dely; | |
21 | ||
22 | delx = x-_penx; dely = y-_peny; | |
23 | if (-16 <= delx && delx <= 15 && -16 <= dely && dely <= 15) { | |
24 | /* | |
25 | * Optimization: if within 15 in both directions, can use | |
26 | * HP short incremental mode, only 3 bytes. | |
27 | */ | |
28 | outchar('j'); | |
29 | outchar(32 + (delx & 31)); | |
30 | outchar(32 + (dely & 31)); | |
31 | } else { | |
32 | /* | |
33 | * Otherwise must use binary absolute mode, 5 bytes. | |
34 | * We never use ascii mode or binary incremental, since | |
35 | * those both take many more bytes. | |
36 | */ | |
37 | outchar('i'); | |
38 | outchar(32+ ((x>>5) & 31)); | |
39 | outchar(32+ (x&31)); | |
40 | outchar(32+ ((y>>5) & 31)); | |
41 | outchar(32+ (y&31)); | |
42 | } | |
43 | _penx = x; | |
44 | _peny = y; | |
45 | } |