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
|
include <gset.h>
include <pkg/center1d.h>
include "ecidentify.h"
procedure ec_mark (ec, feature)
pointer ec # ID pointer
int feature
int pix
real x, y
real mx, my, x1, x2, y1, y2, tick, gap
pointer sp, format, label
double smw_c1trand()
define TICK .03 # Tick size in NDC
define GAP .02 # Gap size in NDC
begin
call ggwind (EC_GP(ec), x1, x2, y1, y2)
x = FIT(ec,feature)
if ((x < min (x1, x2)) || (x > max (x1, x2)))
return
pix = smw_c1trand (EC_PL(ec), PIX(ec,feature))
pix = max (1, min (pix, EC_NPTS(ec) - 1))
call smark (sp)
call salloc (format, SZ_LINE, TY_CHAR)
call salloc (label, SZ_LINE, TY_CHAR)
switch (EC_FTYPE(ec)) {
case EMISSION:
y = max (IMDATA(ec,pix), IMDATA(ec,pix+1))
tick = TICK
gap = GAP
call strcpy ("u=180;h=c;v=b;s=0.5", Memc[format], SZ_LINE)
case ABSORPTION:
y = min (IMDATA(ec,pix), IMDATA(ec,pix+1))
tick = -TICK
gap = -GAP
call strcpy ("u=0;h=c;v=t;s=0.5", Memc[format], SZ_LINE)
}
call gctran (EC_GP(ec), x, y, mx, my, 1, 0)
call gctran (EC_GP(ec), mx, my + gap, x1, y1, 0, 1)
call gctran (EC_GP(ec), mx, my + gap + tick, x1, y2, 0, 1)
call gline (EC_GP(ec), x1, y1, x1, y2)
call gctran (EC_GP(ec), mx, my + tick + 2 * gap, x1, y2, 0, 1)
switch (EC_LABELS(ec)) {
case 2:
call sprintf (Memc[label], SZ_LINE, "%d")
call pargi (feature)
call gtext (EC_GP(ec), x1, y2, Memc[label], Memc[format])
case 3:
call sprintf (Memc[label], SZ_LINE, "%0.2f")
call pargd (PIX(ec,feature))
call gtext (EC_GP(ec), x1, y2, Memc[label], Memc[format])
case 4:
if (!IS_INDEFD (USER(ec,feature))) {
call sprintf (Memc[label], SZ_LINE, "%0.4f")
call pargd (USER(ec,feature))
call gtext (EC_GP(ec), x1, y2, Memc[label], Memc[format])
}
}
call sfree (sp)
call gflush (EC_GP(ec))
end
|