annotate cursors/92h.sh @ 0:f0372d3356b4 default tip

initial import
author Yasuri <linuxoverwindows@charliesmp.net>
date Sun, 30 Aug 2026 12:47:10 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
1 #!/bin/sh
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
2 # convert plan 9 cursor definitions in a C file to packed argb cursor_data[] + cursor_metadata[] for swc
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
3 # asage:
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
4 # ./92h.sh 9cursors.c > out.c
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
5 # ./92h.sh 9cursors.c tl t tr l r bl b br > out.c # explicit order/subset
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
6
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
7 infile=${1:-/dev/stdin}
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
8 shift 2>/dev/null || true
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
9
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
10 # remaining args are optional, desired cursor names in output order.
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
11 order="$*"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
12
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
13 awk -v ORDER="$order" '
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
14 function hexval(c) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
15 c = toupper(c)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
16 if (c >= "0" && c <= "9") return c + 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
17 return 10 + index("ABCDEF", c) - 1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
18 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
19 function hex2dec(s, i,n) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
20 sub(/^0[xX]/, "", s)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
21 n = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
22 for (i = 1; i <= length(s); i++)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
23 n = n * 16 + hexval(substr(s, i, 1))
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
24 return n
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
25 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
26 function pow2(n, i,p) { p=1; for(i=0;i<n;i++) p*=2; return p }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
27 function bit16msb(v, col, shift) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
28 shift = 15 - col
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
29 return int(v / P2[shift]) % 2
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
30 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
31 function pix(setb, clrb) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
32 # clr=0,set=0 => transparent
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
33 # clr=1,set=0 => black
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
34 # clr=0,set=1 => white
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
35 # clr=1,set=1 => invert (approximate as white for ARGB cursors)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
36 if (!clrb && !setb) return "0x00000000"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
37 if (clrb && !setb) return "0xff000000"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
38 if (!clrb && setb) return "0xffffffff"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
39 return "0xffffffff"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
40 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
41 function min(a,b){ return (a<b)?a:b }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
42 function max(a,b){ return (a>b)?a:b }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
43
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
44 BEGIN {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
45 # precompute powers of two up to 15
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
46 for (i=0;i<16;i++) P2[i]=pow2(i)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
47
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
48 want_cnt = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
49 if (ORDER != "") {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
50 n = split(ORDER, want, /[[:space:]]+/)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
51 for (i=1;i<=n;i++) if (want[i] != "") { want_cnt++; wantlist[want[i]]=i }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
52 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
53
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
54 in_cursor = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
55 arr = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
56 c1 = c2 = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
57 name_cnt = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
58 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
59
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
60 # start of a cursor block: cursor foo = {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
61 match($0, /^[[:space:]]*Cursor[[:space:]]+[A-Za-z_][A-Za-z0-9_]*[[:space:]]*=/) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
62 # extract the name
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
63 line = $0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
64 sub(/^[[:space:]]*Cursor[[:space:]]+/, "", line)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
65 cur = line
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
66 sub(/[[:space:]]*=.*/, "", cur)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
67
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
68 in_cursor = 1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
69 got_hot = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
70 arr = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
71 c1 = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
72 c2 = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
73 next
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
74 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
75
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
76 # inside cursor: hotspot like {-7, -7}, compute it properly so it offsets,
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
77 in_cursor && !got_hot && match($0, /\{[[:space:]]*-?[0-9]+[[:space:]]*,[[:space:]]*-?[0-9]+[[:space:]]*\}/) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
78 s = substr($0, RSTART+1, RLENGTH-2)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
79 gsub(/[[:space:]]*/, "", s)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
80 split(s, a, ",")
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
81 hx[cur] = a[1] + 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
82 hy[cur] = a[2] + 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
83 got_hot = 1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
84 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
85
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
86 in_cursor {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
87 while (match($0, /0[xX][0-9A-Fa-f]+/)) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
88 tok = substr($0, RSTART, RLENGTH)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
89 val = hex2dec(tok)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
90
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
91 if (arr == 0) arr = 1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
92 if (arr == 1) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
93 clr[cur, c1++] = val
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
94 if (c1 >= 32) arr = 2
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
95 } else {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
96 set[cur, c2++] = val
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
97 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
98
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
99 $0 = substr($0, RSTART + RLENGTH)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
100 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
101 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
102
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
103 # end of cursor block
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
104 in_cursor && /};/ {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
105 in_cursor = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
106
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
107 if (!(seen[cur]++)) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
108 name_cnt++
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
109 names[name_cnt] = cur
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
110 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
111
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
112 if (c1 < 32 || c2 < 32) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
113 warn[cur] = 1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
114 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
115 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
116
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
117 END {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
118 # decide output order
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
119 outn = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
120 if (want_cnt > 0) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
121 for (i=1; i<=want_cnt; i++) out[++outn] = want[i]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
122 } else {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
123 for (i=1; i<=name_cnt; i++) out[++outn] = names[i]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
124 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
125
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
126 print "/* generated from plan 9 cursor data */"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
127 print "#include <stdint.h>"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
128 print "#include <stddef.h>"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
129 print ""
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
130 print "enum {"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
131 for (oi=1; oi<=outn; oi++) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
132 n = out[oi]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
133 if (n == "") continue
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
134 name = toupper(n)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
135 gsub(/[^A-Z0-9]+/, "_", name)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
136 printf "\tNEIN_CURSOR_%s = %d,\n", name, oi-1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
137 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
138 print "};"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
139 print ""
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
140 print "static const uint32_t nein_cursor_data[] = {"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
141
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
142 off = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
143 perline = 0
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
144
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
145 for (oi=1; oi<=outn; oi++) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
146 n = out[oi]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
147 if (n == "") continue
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
148 if (!(seen[n])) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
149 printf "/* WARNING: cursor %s not found */\n", n
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
150 continue
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
151 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
152 if (warn[n]) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
153 printf "/* WARNING: cursor %s looked incomplete (expected 32 clr + 32 set bytes) */\n", n
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
154 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
155
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
156 # build full 16x16 pixels and compute tight bbox
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
157 minx=16; miny=16; maxx=-1; maxy=-1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
158 for (y=0; y<16; y++) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
159 rowc = clr[n,2*y]*256 + clr[n,2*y+1]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
160 rows = set[n,2*y]*256 + set[n,2*y+1]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
161 for (x=0; x<16; x++) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
162 pb = pix(bit16msb(rows,x), bit16msb(rowc,x))
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
163 full[n,y,x] = pb
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
164 if (pb != "0x00000000") {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
165 minx = min(minx, x); maxx = max(maxx, x)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
166 miny = min(miny, y); maxy = max(maxy, y)
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
167 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
168 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
169 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
170
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
171 # if entirely transparent, fall back to 1x1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
172 if (maxx < 0) { minx=0; maxx=0; miny=0; maxy=0 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
173
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
174 w = maxx - minx + 1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
175 h = maxy - miny + 1
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
176
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
177 #offset hostspot
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
178 xhot = -hx[n]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
179 yhot = -hy[n]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
180
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
181 hx2 = xhot - minx
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
182 hy2 = yhot - miny
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
183
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
184 meta_name[oi] = n
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
185 meta_w[oi] = w
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
186 meta_h[oi] = h
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
187 meta_hx[oi] = hx2
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
188 meta_hy[oi] = hy2
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
189 meta_off[oi] = off
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
190
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
191 for (y=miny; y<=maxy; y++) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
192 for (x=minx; x<=maxx; x++) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
193 v = full[n,y,x]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
194 if (perline == 0) printf "\t"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
195 printf "%s,", v
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
196 perline++
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
197 off++
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
198 if (perline >= 6) { printf "\n"; perline = 0 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
199 else printf " "
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
200 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
201 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
202 if (perline != 0) { printf "\n"; perline = 0 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
203 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
204
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
205 print "};"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
206 print ""
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
207 print "struct nein_cursor_meta {"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
208 print "\tuint32_t width, height;"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
209 print "\tint32_t hotspot_x, hotspot_y;"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
210 print "\tsize_t offset;"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
211 print "};"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
212 print ""
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
213 print "static const struct nein_cursor_meta nein_cursor_metadata[] = {"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
214
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
215 for (oi=1; oi<=outn; oi++) {
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
216 n = meta_name[oi]
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
217 if (n == "") continue
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
218 printf "\t{ %d, %d, %d, %d, %d }, /* %s */\n",
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
219 meta_w[oi], meta_h[oi], meta_hx[oi], meta_hy[oi], meta_off[oi], n
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
220 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
221
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
222 print "};"
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
223 }
f0372d3356b4 initial import
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
224 ' "$infile"