@modplayjs/fmt-prowizard 0.0.0-stage → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +42 -2
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +7 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/prowiz.d.ts +44 -0
  7. package/dist/prowiz.d.ts.map +1 -0
  8. package/dist/prowiz.js +157 -0
  9. package/dist/prowiz.js.map +1 -0
  10. package/dist/ptktable.d.ts +5 -0
  11. package/dist/ptktable.d.ts.map +1 -0
  12. package/dist/ptktable.js +49 -0
  13. package/dist/ptktable.js.map +1 -0
  14. package/dist/pw-ac1d.d.ts +4 -0
  15. package/dist/pw-ac1d.d.ts.map +1 -0
  16. package/dist/pw-ac1d.js +133 -0
  17. package/dist/pw-ac1d.js.map +1 -0
  18. package/dist/pw-di.d.ts +4 -0
  19. package/dist/pw-di.d.ts.map +1 -0
  20. package/dist/pw-di.js +177 -0
  21. package/dist/pw-di.js.map +1 -0
  22. package/dist/pw-eureka.d.ts +4 -0
  23. package/dist/pw-eureka.d.ts.map +1 -0
  24. package/dist/pw-eureka.js +171 -0
  25. package/dist/pw-eureka.js.map +1 -0
  26. package/dist/pw-fcm.d.ts +4 -0
  27. package/dist/pw-fcm.d.ts.map +1 -0
  28. package/dist/pw-fcm.js +102 -0
  29. package/dist/pw-fcm.js.map +1 -0
  30. package/dist/pw-fuchs.d.ts +4 -0
  31. package/dist/pw-fuchs.d.ts.map +1 -0
  32. package/dist/pw-fuchs.js +139 -0
  33. package/dist/pw-fuchs.js.map +1 -0
  34. package/dist/pw-heatseek.d.ts +4 -0
  35. package/dist/pw-heatseek.d.ts.map +1 -0
  36. package/dist/pw-heatseek.js +197 -0
  37. package/dist/pw-heatseek.js.map +1 -0
  38. package/dist/pw-hrt.d.ts +4 -0
  39. package/dist/pw-hrt.d.ts.map +1 -0
  40. package/dist/pw-hrt.js +104 -0
  41. package/dist/pw-hrt.js.map +1 -0
  42. package/dist/pw-ksm.d.ts +4 -0
  43. package/dist/pw-ksm.d.ts.map +1 -0
  44. package/dist/pw-ksm.js +212 -0
  45. package/dist/pw-ksm.js.map +1 -0
  46. package/dist/pw-mp.d.ts +6 -0
  47. package/dist/pw-mp.d.ts.map +1 -0
  48. package/dist/pw-mp.js +171 -0
  49. package/dist/pw-mp.js.map +1 -0
  50. package/dist/pw-np12.d.ts +6 -0
  51. package/dist/pw-np12.d.ts.map +1 -0
  52. package/dist/pw-np12.js +234 -0
  53. package/dist/pw-np12.js.map +1 -0
  54. package/dist/pw-np3.d.ts +4 -0
  55. package/dist/pw-np3.d.ts.map +1 -0
  56. package/dist/pw-np3.js +218 -0
  57. package/dist/pw-np3.js.map +1 -0
  58. package/dist/pw-p40.d.ts +4 -0
  59. package/dist/pw-p40.d.ts.map +1 -0
  60. package/dist/pw-p40.js +221 -0
  61. package/dist/pw-p40.js.map +1 -0
  62. package/dist/pw-plugin.d.ts +8 -0
  63. package/dist/pw-plugin.d.ts.map +1 -0
  64. package/dist/pw-plugin.js +27 -0
  65. package/dist/pw-plugin.js.map +1 -0
  66. package/dist/pw-pp.d.ts +8 -0
  67. package/dist/pw-pp.d.ts.map +1 -0
  68. package/dist/pw-pp.js +341 -0
  69. package/dist/pw-pp.js.map +1 -0
  70. package/dist/pw-skyt.d.ts +4 -0
  71. package/dist/pw-skyt.d.ts.map +1 -0
  72. package/dist/pw-skyt.js +116 -0
  73. package/dist/pw-skyt.js.map +1 -0
  74. package/dist/pw-starpack.d.ts +4 -0
  75. package/dist/pw-starpack.d.ts.map +1 -0
  76. package/dist/pw-starpack.js +253 -0
  77. package/dist/pw-starpack.js.map +1 -0
  78. package/dist/pw-theplayer.d.ts +6 -0
  79. package/dist/pw-theplayer.d.ts.map +1 -0
  80. package/dist/pw-theplayer.js +367 -0
  81. package/dist/pw-theplayer.js.map +1 -0
  82. package/dist/pw-tp1.d.ts +4 -0
  83. package/dist/pw-tp1.d.ts.map +1 -0
  84. package/dist/pw-tp1.js +162 -0
  85. package/dist/pw-tp1.js.map +1 -0
  86. package/dist/pw-tp3.d.ts +6 -0
  87. package/dist/pw-tp3.d.ts.map +1 -0
  88. package/dist/pw-tp3.js +217 -0
  89. package/dist/pw-tp3.js.map +1 -0
  90. package/dist/pw-unic.d.ts +8 -0
  91. package/dist/pw-unic.d.ts.map +1 -0
  92. package/dist/pw-unic.js +285 -0
  93. package/dist/pw-unic.js.map +1 -0
  94. package/dist/pw-unic2.d.ts +4 -0
  95. package/dist/pw-unic2.d.ts.map +1 -0
  96. package/dist/pw-unic2.js +173 -0
  97. package/dist/pw-unic2.js.map +1 -0
  98. package/dist/pw-wn.d.ts +4 -0
  99. package/dist/pw-wn.d.ts.map +1 -0
  100. package/dist/pw-wn.js +82 -0
  101. package/dist/pw-wn.js.map +1 -0
  102. package/dist/pw-xann.d.ts +4 -0
  103. package/dist/pw-xann.d.ts.map +1 -0
  104. package/dist/pw-xann.js +220 -0
  105. package/dist/pw-xann.js.map +1 -0
  106. package/dist/pw-zen.d.ts +4 -0
  107. package/dist/pw-zen.d.ts.map +1 -0
  108. package/dist/pw-zen.js +162 -0
  109. package/dist/pw-zen.js.map +1 -0
  110. package/package.json +49 -4
package/dist/pw-tp3.js ADDED
@@ -0,0 +1,217 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/tp3.c (Tracker Packer v2 + v3,
4
+ // shared depack_tp23 :34-214, test_tp23 :216-277).
5
+ import { ptkTable, ptkIsValidNote } from './ptktable.js';
6
+ import { readmem16b, moveData, writeZero, pwReadTitle } from './prowiz.js';
7
+ const PW_MOD_MAGIC = 0x4d2e4b2e; // 'M.K.'
8
+ function put8(out, b) { out.push(b & 0xff); }
9
+ function put16b(out, v) { out.push((v >> 8) & 0xff, v & 0xff); }
10
+ function put32b(out, v) {
11
+ out.push((v >>> 24) & 0xff, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff);
12
+ }
13
+ /** depack_tp23 (tp3.c:34-214). ver = 2 or 3. */
14
+ function depackTp23(data, start, ver) {
15
+ let pos = start;
16
+ const out = [];
17
+ const u8 = () => data[pos++] ?? 0;
18
+ const u16 = () => { const v = readmem16b(data, pos); pos += 2; return v; };
19
+ pos += 8; // hio_seek(in, 8, SEEK_CUR) — skip magic
20
+ // title (tp3.c:41): move 20 bytes verbatim
21
+ for (let i = 0; i < 20; i++)
22
+ out.push(data[pos++] ?? 0);
23
+ const nins = u16() >> 3; // number of samples
24
+ // Sample headers (tp3.c:45-58)
25
+ let ssize = 0;
26
+ for (let i = 0; i < nins; i++) {
27
+ writeZero(out, 22); // sample name
28
+ const c3 = u8(); // finetune
29
+ const c4 = u8(); // volume
30
+ const size = u16();
31
+ ssize += size * 2;
32
+ put16b(out, size);
33
+ put8(out, c3);
34
+ put8(out, c4);
35
+ put16b(out, u16()); // loop start
36
+ put16b(out, u16()); // loop size
37
+ }
38
+ // Pad to 31 (tp3.c:60-66): zeros with a 0x01 loop-size flag.
39
+ {
40
+ const pad = new Array(30).fill(0);
41
+ pad[29] = 0x01;
42
+ for (let i = nins; i < 31; i++)
43
+ out.push(...pad);
44
+ }
45
+ // Sequence length (tp3.c:69-78): one skipped byte, then the length.
46
+ u8();
47
+ const len = u8();
48
+ if (len >= 128)
49
+ throw new Error('tp23: sequence too long');
50
+ put8(out, len);
51
+ put8(out, 0x7f); // ntk byte
52
+ // Pattern numbers (tp3.c:80-88): u16 track numbers / 8.
53
+ const pnum = [];
54
+ let npat = 0;
55
+ for (let i = 0; i < len; i++) {
56
+ const p = u16() >> 3;
57
+ pnum.push(p);
58
+ if (p > npat)
59
+ npat = p;
60
+ }
61
+ if (npat >= 128)
62
+ throw new Error('tp23: too many patterns');
63
+ // Track addresses (tp3.c:91-101): (npat+1) patterns × 4.
64
+ const trkOfs = [];
65
+ for (let i = 0; i <= npat; i++) {
66
+ const row = [];
67
+ for (let j = 0; j < 4; j++)
68
+ row.push(u16());
69
+ trkOfs.push(row);
70
+ }
71
+ // Pattern list + magic (tp3.c:104-106)
72
+ for (let i = 0; i < 128; i++)
73
+ put8(out, pnum[i]);
74
+ put32b(out, PW_MOD_MAGIC);
75
+ // pat_ofs = hio_tell + 2 (tp3.c:108) — after the magic we just wrote;
76
+ // the C file pointer sits after pnum+magic reads, +2 skips a size field.
77
+ const patOfs = pos + 2;
78
+ // Pattern data (tp3.c:111-205)
79
+ const pdata = new Uint8Array(1024);
80
+ let maxTrkOfs = 0;
81
+ for (let i = 0; i <= npat; i++) {
82
+ pdata.fill(0);
83
+ for (let j = 0; j < 4; j++) {
84
+ pos = patOfs + trkOfs[i][j];
85
+ for (let k = 0; k >= 0 && k < 64; k++) {
86
+ const p = k * 16 + j * 4;
87
+ const c1 = u8();
88
+ if ((c1 & 0xc0) === 0xc0) {
89
+ // Blank rows (tp3.c:126-129)
90
+ k += 0x100 - c1 - 1;
91
+ continue;
92
+ }
93
+ if ((c1 & 0xc0) === 0x80) {
94
+ // Effect-only row (tp3.c:131-155)
95
+ const c2 = u8();
96
+ let fxt = ver === 2 ? (c1 >> 2) & 0x0f : (c1 >> 1) & 0x0f;
97
+ let fxp = c2;
98
+ if (fxt === 0x05 || fxt === 0x06 || fxt === 0x0a) {
99
+ if (fxp > 0x80)
100
+ fxp = 0x100 - fxp;
101
+ else if (fxp <= 0x80)
102
+ fxp = (fxp << 4) & 0xf0;
103
+ }
104
+ if (fxt === 0x08)
105
+ fxt = 0x00;
106
+ pdata[p + 2] = fxt;
107
+ pdata[p + 3] = fxp;
108
+ continue;
109
+ }
110
+ const c2 = u8();
111
+ const ins = ((c2 >> 4) & 0x0f) | ((c1 >> 2) & 0x10);
112
+ let note;
113
+ if (ver === 2) {
114
+ note = (c1 & 0xfe) >> 1;
115
+ }
116
+ else {
117
+ if ((c1 & 0x40) === 0x40)
118
+ note = 0x7f - c1;
119
+ else
120
+ note = c1 & 0x3f;
121
+ }
122
+ if (!ptkIsValidNote(note))
123
+ throw new Error('tp23: invalid note');
124
+ const fxt = c2 & 0x0f;
125
+ if (fxt === 0x00) {
126
+ // No effect: 3-byte cell (tp3.c:150-158/166-174)
127
+ pdata[p] = (ins & 0xf0) | ptkTable[note][0];
128
+ pdata[p + 1] = ptkTable[note][1];
129
+ pdata[p + 2] = ver === 2 ? ((ins << 4) & 0xf0) | 0 : (ins << 4) & 0xf0;
130
+ continue;
131
+ }
132
+ const c3 = u8();
133
+ let fxtV = fxt;
134
+ if (fxtV === 0x08)
135
+ fxtV = 0x00;
136
+ let fxp = c3;
137
+ if (fxtV === 0x05 || fxtV === 0x06 || fxtV === 0x0a) {
138
+ if (fxp > 0x80)
139
+ fxp = 0x100 - fxp;
140
+ else if (fxp <= 0x80)
141
+ fxp = (fxp << 4) & 0xf0;
142
+ }
143
+ pdata[p] = (ins & 0xf0) | ptkTable[note][0];
144
+ pdata[p + 1] = ptkTable[note][1];
145
+ pdata[p + 2] = ((ins << 4) & 0xf0) | fxtV;
146
+ pdata[p + 3] = fxp;
147
+ }
148
+ if (pos > maxTrkOfs)
149
+ maxTrkOfs = pos;
150
+ }
151
+ for (let k = 0; k < 1024; k++)
152
+ out.push(pdata[k]);
153
+ }
154
+ // Sample data (tp3.c:210-214): v3 pads max_trk_ofs to even.
155
+ if (ver > 2 && (maxTrkOfs & 0x01) !== 0)
156
+ maxTrkOfs += 1;
157
+ moveData(data, maxTrkOfs, out, ssize);
158
+ return Uint8Array.from(out);
159
+ }
160
+ /** test_tp23 (tp3.c:216-277). */
161
+ function testTp23(data, start, magic) {
162
+ const s = data.length - start;
163
+ if (s < 1024)
164
+ return 1024 - s;
165
+ for (let i = 0; i < 8; i++) {
166
+ if (data[start + i] !== magic.charCodeAt(i))
167
+ return -1;
168
+ }
169
+ // Number of samples (tp3.c:226-230)
170
+ let nins = readmem16b(data, start + 28);
171
+ if (nins === 0 || (nins & 0x07) !== 0 || nins >> 3 > 31)
172
+ return -1;
173
+ nins >>= 3;
174
+ for (let i = 0; i < nins; i++) {
175
+ const d = start + i * 8;
176
+ if (data[d + 30] > 0x0f)
177
+ return -1; // finetunes
178
+ if (data[d + 31] > 0x40)
179
+ return -1; // volumes
180
+ }
181
+ // Sample sizes (tp3.c:236-255)
182
+ let ssize = 0;
183
+ for (let i = 0; i < nins; i++) {
184
+ const d = start + i * 8;
185
+ const l = readmem16b(data, d + 32) << 1;
186
+ const lstart = readmem16b(data, d + 34) << 1;
187
+ const lsize = readmem16b(data, d + 36) << 1;
188
+ if (l > 0xffff || lstart > 0xffff || lsize > 0xffff)
189
+ return -1;
190
+ if (lstart + lsize > l + 2)
191
+ return -1;
192
+ if (lstart !== 0 && lsize === 0)
193
+ return -1;
194
+ ssize += l;
195
+ }
196
+ if (ssize <= 4)
197
+ return -1;
198
+ // Pattern list size (tp3.c:258-262)
199
+ const npat = data[start + nins * 8 + 31];
200
+ if (npat === 0 || npat > 128)
201
+ return -1;
202
+ pwReadTitle(data.subarray(start + 8), 20);
203
+ return 0;
204
+ }
205
+ /** pw_tp3: "Tracker Packer v3" (magic CPLX_TP3). */
206
+ export const pwTp3 = {
207
+ name: 'Tracker Packer v3',
208
+ test: (data, start) => testTp23(data, start, 'CPLX_TP3'),
209
+ depack: (data, start) => depackTp23(data, start, 3),
210
+ };
211
+ /** pw_tp2: "Tracker Packer v2" (magic MEXX_TP2). */
212
+ export const pwTp2 = {
213
+ name: 'Tracker Packer v2',
214
+ test: (data, start) => testTp23(data, start, 'MEXX_TP2'),
215
+ depack: (data, start) => depackTp23(data, start, 2),
216
+ };
217
+ //# sourceMappingURL=pw-tp3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-tp3.js","sourceRoot":"","sources":["../src/pw-tp3.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,sDAAsD;AACtD,2EAA2E;AAC3E,mDAAmD;AAEnD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AAE1F,MAAM,YAAY,GAAG,UAAU,CAAC,CAAC,SAAS;AAE1C,SAAS,IAAI,CAAC,GAAa,EAAE,CAAS,IAAU,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACrE,SAAS,MAAM,CAAC,GAAa,EAAE,CAAS,IAAU,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxF,SAAS,MAAM,CAAC,GAAa,EAAE,CAAS;IACtC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,gDAAgD;AAChD,SAAS,UAAU,CAAC,IAAgB,EAAE,KAAa,EAAE,GAAW;IAC9D,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3E,GAAG,IAAI,CAAC,CAAC,CAAC,yCAAyC;IAEnD,2CAA2C;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,oBAAoB;IAE7C,+BAA+B;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc;QAClC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW;QAC5B,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,SAAS;QAC1B,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC;QACnB,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACd,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACd,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa;QACjC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,YAAY;IAClC,CAAC;IAED,6DAA6D;IAC7D,CAAC;QACC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1C,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,oEAAoE;IACpE,EAAE,EAAE,CAAC;IACL,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC;IACjB,IAAI,GAAG,IAAI,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACf,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW;IAE5B,wDAAwD;IACxD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,IAAI,IAAI,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAE5D,yDAAyD;IACzD,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,uCAAuC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAE1B,sEAAsE;IACtE,yEAAyE;IACzE,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;IAEvB,+BAA+B;IAC/B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzB,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBACzB,6BAA6B;oBAC7B,CAAC,IAAI,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;oBACpB,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBACzB,kCAAkC;oBAClC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;oBAChB,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;oBAC1D,IAAI,GAAG,GAAG,EAAE,CAAC;oBACb,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;wBACjD,IAAI,GAAG,GAAG,IAAI;4BAAE,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;6BAC7B,IAAI,GAAG,IAAI,IAAI;4BAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;oBAChD,CAAC;oBACD,IAAI,GAAG,KAAK,IAAI;wBAAE,GAAG,GAAG,IAAI,CAAC;oBAC7B,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;oBACnB,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;oBACnB,SAAS;gBACX,CAAC;gBACD,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAEpD,IAAI,IAAY,CAAC;gBACjB,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;oBACd,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI;wBAAE,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;;wBACtC,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC;gBACxB,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBAEjE,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;gBACtB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBACjB,iDAAiD;oBACjD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC;oBAC7C,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC;oBAClC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;oBACvE,SAAS;gBACX,CAAC;gBAED,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;gBAChB,IAAI,IAAI,GAAG,GAAG,CAAC;gBACf,IAAI,IAAI,KAAK,IAAI;oBAAE,IAAI,GAAG,IAAI,CAAC;gBAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBACpD,IAAI,GAAG,GAAG,IAAI;wBAAE,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC;yBAC7B,IAAI,GAAG,IAAI,IAAI;wBAAE,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;gBAChD,CAAC;gBACD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC;gBAC7C,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC,CAAC;gBAClC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC1C,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YACrB,CAAC;YACD,IAAI,GAAG,GAAG,SAAS;gBAAE,SAAS,GAAG,GAAG,CAAC;QACvC,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACrD,CAAC;IAED,4DAA4D;IAC5D,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAAE,SAAS,IAAI,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAEtC,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED,iCAAiC;AACjC,SAAS,QAAQ,CAAC,IAAgB,EAAE,KAAa,EAAE,KAAa;IAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IAC9B,IAAI,CAAC,GAAG,IAAI;QAAE,OAAO,IAAI,GAAG,CAAC,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,oCAAoC;IACpC,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;IACxC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,CAAC;IAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAE,GAAG,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY;QACjD,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAE,GAAG,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU;IACjD,CAAC;IAED,+BAA+B;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,GAAG,MAAM,IAAI,MAAM,GAAG,MAAM,IAAI,KAAK,GAAG,MAAM;YAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,IAAI,MAAM,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IACD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IAE1B,oCAAoC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAE,CAAC;IAC1C,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG;QAAE,OAAO,CAAC,CAAC,CAAC;IAExC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE1C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,oDAAoD;AACpD,MAAM,CAAC,MAAM,KAAK,GAAa;IAC7B,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC;IACxD,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;CACpD,CAAC;AAEF,oDAAoD;AACpD,MAAM,CAAC,MAAM,KAAK,GAAa;IAC7B,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC;IACxD,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;CACpD,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_unic_id: "UNIC Tracker". */
3
+ export declare const pwUnicId: PwFormat;
4
+ /** pw_unic_noid: "UNIC Tracker noid". */
5
+ export declare const pwUnicNoid: PwFormat;
6
+ /** pw_unic_emptyid: "UNIC Tracker id0". */
7
+ export declare const pwUnicEmptyId: PwFormat;
8
+ //# sourceMappingURL=pw-unic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-unic.d.ts","sourceRoot":"","sources":["../src/pw-unic.ts"],"names":[],"mappings":"AAOA,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAwQ9E,kCAAkC;AAClC,eAAO,MAAM,QAAQ,EAAE,QAItB,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,UAAU,EAAE,QAIxB,CAAC;AAEF,2CAA2C;AAC3C,eAAO,MAAM,aAAa,EAAE,QAI3B,CAAC"}
@@ -0,0 +1,285 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/prowizard/unic.c (Unic Tracker, id/noid/
4
+ // emptyid variants share depack_unic :40-152; tests :154-398) and unic2.c
5
+ // (Unic Tracker 2).
6
+ import { ptkTable, ptkIsValidNote } from './ptktable.js';
7
+ import { readmem16b, readmem32b, moveData } from './prowiz.js';
8
+ const MAGIC_M_K_ = 0x4d2e4b2e; // 'M.K.'
9
+ const MAGIC_UNIC = 0x554e4943; // 'UNIC'
10
+ const MAGIC_0000 = 0x00000000;
11
+ function put8(out, b) { out.push(b & 0xff); }
12
+ function put16b(out, v) { out.push((v >> 8) & 0xff, v & 0xff); }
13
+ function put32b(out, v) {
14
+ out.push((v >>> 24) & 0xff, (v >> 16) & 0xff, (v >> 8) & 0xff, v & 0xff);
15
+ }
16
+ /** depack_unic (unic.c:40-152) — shared by id / noid / emptyid variants. */
17
+ function depackUnic(data, start) {
18
+ let pos = start;
19
+ const out = [];
20
+ const u8 = () => data[pos++] ?? 0;
21
+ const u16 = () => { const v = readmem16b(data, pos); pos += 2; return v; };
22
+ // title (unic.c:44): move 20 bytes verbatim
23
+ for (let i = 0; i < 20; i++)
24
+ out.push(data[pos++] ?? 0);
25
+ // Sample headers (unic.c:47-86): 22-byte name moved, 2 zeros, then
26
+ // finetune-from-loop-word, size, skip, fine, vol, loop with doubling.
27
+ let ssize = 0;
28
+ for (let i = 0; i < 31; i++) {
29
+ // sample name (unic.c:48)
30
+ for (let k = 0; k < 20; k++)
31
+ out.push(data[pos++] ?? 0);
32
+ put8(out, 0);
33
+ put8(out, 0);
34
+ // fine on? (unic.c:51-62)
35
+ const c1 = u8();
36
+ const c2 = u8();
37
+ const j = (c1 << 8) + c2;
38
+ let fine = 0;
39
+ if (j !== 0) {
40
+ fine = j < 256 ? 0x10 - c2 : 0x100 - c2;
41
+ }
42
+ // smp size (unic.c:65-67)
43
+ const len = u16();
44
+ put16b(out, len);
45
+ ssize += len * 2;
46
+ u8(); // skip
47
+ put8(out, fine); // fine
48
+ put8(out, u8()); // vol
49
+ let lstart = u16(); // loop start
50
+ const lsize = u16(); // loop size
51
+ // unic.c:77-81: loop start in bytes when it fits
52
+ if (lstart * 2 + lsize <= len && lstart !== 0) {
53
+ lstart <<= 1;
54
+ }
55
+ put16b(out, lstart);
56
+ put16b(out, lsize);
57
+ }
58
+ const npat = u8();
59
+ put8(out, npat); // number of patterns
60
+ put8(out, 0x7f); // noisetracker byte
61
+ u8(); // skip
62
+ // Pattern table (unic.c:91-93)
63
+ const tmp = [];
64
+ for (let i = 0; i < 128; i++)
65
+ tmp.push(u8());
66
+ for (let i = 0; i < 128; i++)
67
+ put8(out, tmp[i]);
68
+ // Highest pattern number (unic.c:95-99)
69
+ let max = 0;
70
+ for (let i = 0; i < 128; i++) {
71
+ if (tmp[i] > max)
72
+ max = tmp[i];
73
+ }
74
+ max++;
75
+ put32b(out, 0x4d2e4b2e);
76
+ // UNIC ID handling (unic.c:102-108): seek 1080; read32b ADVANCES the C
77
+ // file pointer to 1084. If the id is nonzero and not M.K./UNIC, rewind 4
78
+ // (pattern data starts at the id itself).
79
+ pos = start + 1084; // read32b advanced past the id
80
+ const id = readmem32b(data, start + 1080);
81
+ if (id !== 0 && id !== MAGIC_M_K_ && id !== MAGIC_UNIC) {
82
+ pos = start + 1080;
83
+ }
84
+ // Pattern data (unic.c:111-146): 3-byte cells.
85
+ for (let i = 0; i < max; i++) {
86
+ for (let j = 0; j < 256; j++) {
87
+ const c1 = u8();
88
+ const c2 = u8();
89
+ const c3 = u8();
90
+ if (pos > data.length + 1)
91
+ throw new Error('unic: read error');
92
+ const ins = ((c1 >> 2) & 0x10) | ((c2 >> 4) & 0x0f);
93
+ const note = c1 & 0x3f;
94
+ if (!ptkIsValidNote(note))
95
+ throw new Error('unic: invalid note');
96
+ const fxt = c2 & 0x0f;
97
+ let fxp = c3;
98
+ if (fxt === 0x0d) {
99
+ // pattern break: BCD-ish decimal → hex nybbles (unic.c:133-137)
100
+ const tens = Math.trunc(fxp / 10);
101
+ const ones = fxp % 10;
102
+ fxp = 16 * tens + ones;
103
+ }
104
+ out.push((ins & 0xf0) | ptkTable[note][0]);
105
+ out.push(ptkTable[note][1]);
106
+ out.push(((ins << 4) & 0xf0) | fxt);
107
+ out.push(fxp);
108
+ }
109
+ }
110
+ // Sample data (unic.c:149-152)
111
+ moveData(data, pos, out, ssize);
112
+ return Uint8Array.from(out);
113
+ }
114
+ /** check_instruments (unic.c:154-204). Returns max non-empty sample index+1. */
115
+ function checkInstruments(data, start) {
116
+ let ssize = 0;
117
+ let maxIns = 0;
118
+ for (let i = 0; i < 31; i++) {
119
+ const d = start + i * 30;
120
+ const len = readmem16b(data, d + 42) << 1;
121
+ const lstart = readmem16b(data, d + 46) << 1;
122
+ const lsize = readmem16b(data, d + 48) << 1;
123
+ const fine = readmem16b(data, d + 40);
124
+ ssize += len;
125
+ if (lsize !== 0 && len + 2 < lstart + lsize)
126
+ return -1;
127
+ if (len > 0xffff || lstart > 0xffff || lsize > 0xffff)
128
+ return -1;
129
+ if (data[d + 45] > 0x40)
130
+ return -1;
131
+ if ((fine !== 0 && len === 0) || (fine > 8 && fine < 247))
132
+ return -1;
133
+ if (lstart !== 0 && lsize <= 2)
134
+ return -1;
135
+ if (data[d + 45] !== 0 && len === 0)
136
+ return -1;
137
+ if (len !== 0)
138
+ maxIns = i + 1;
139
+ }
140
+ if (ssize <= 2)
141
+ return -1;
142
+ return maxIns;
143
+ }
144
+ /** check_pattern_list_size (unic.c:206-235). Returns psize (<<8) or -1. */
145
+ function checkPatternListSize(data, start) {
146
+ const len = data[start + 950];
147
+ if (len === 0 || len > 127)
148
+ return -1;
149
+ let psize = 0;
150
+ let i = 0;
151
+ for (; i < len; i++) {
152
+ const x = data[start + 952 + i];
153
+ if (x > 127)
154
+ return -1;
155
+ if (x > psize)
156
+ psize = x;
157
+ }
158
+ for (; i !== 128; i++) {
159
+ if (data[start + 952 + i] !== 0)
160
+ return -1;
161
+ }
162
+ psize++;
163
+ psize <<= 8;
164
+ return psize;
165
+ }
166
+ /** check_pattern (unic.c:237-272). */
167
+ function checkPattern(data, s, psize, maxIns, offset) {
168
+ if (s < offset + psize * 3 + 2)
169
+ return offset + psize * 3 + 2 - s;
170
+ for (let i = 0; i < psize; i++) {
171
+ const d = offset + i * 3;
172
+ if (data[d] > 0x74)
173
+ return -1;
174
+ if ((data[d] & 0x3f) > 0x24)
175
+ return -1;
176
+ if ((data[d + 1] & 0x0f) === 0x0c && data[d + 2] > 0x40)
177
+ return -1;
178
+ if ((data[d + 1] & 0x0f) === 0x0b && data[d + 2] > 0x7f)
179
+ return -1;
180
+ if ((data[d + 1] & 0x0f) === 0x0d && data[d + 2] > 0x40)
181
+ return -1;
182
+ const ins = ((data[d] >> 2) & 0x30) | ((data[d + 1] >> 4) & 0x0f);
183
+ if (ins > maxIns)
184
+ return -1;
185
+ }
186
+ return 0;
187
+ }
188
+ /** test_unic_id (unic.c:274-322). */
189
+ function testUnicId(data, start) {
190
+ const s = data.length - start;
191
+ if (s < 1084)
192
+ return 1084 - s;
193
+ if (readmem32b(data, start + 1080) !== MAGIC_M_K_)
194
+ return -1;
195
+ let ssize = 0;
196
+ for (let i = 0; i < 31; i++) {
197
+ const d = start + i * 30;
198
+ const size = readmem16b(data, d + 42) << 1;
199
+ ssize += size;
200
+ const end = (readmem16b(data, d + 46) + readmem16b(data, d + 48)) << 1;
201
+ if (size + 2 < end)
202
+ return -1;
203
+ }
204
+ if (ssize <= 2)
205
+ return -1;
206
+ for (let i = 0; i < 31; i++) {
207
+ const d = start + i * 30;
208
+ const fine = (data[d + 40] << 24) >> 24; // int8
209
+ if (fine < -8 || fine > 7)
210
+ return -1;
211
+ if (data[d + 44] !== 0 || data[d + 45] > 0x40)
212
+ return -1;
213
+ }
214
+ const psize = checkPatternListSize(data, start);
215
+ if (psize < 0)
216
+ return -1;
217
+ if (s < psize * 3 + 1084)
218
+ return psize * 3 + 1084 - s;
219
+ for (let i = 0; i < psize; i++) {
220
+ if (data[start + 1084 + i * 3] > 0x74)
221
+ return -1;
222
+ }
223
+ return 0;
224
+ }
225
+ /** test_unic_emptyid (unic.c:324-351) — ID = $00000000. */
226
+ function testUnicEmptyId(data, start) {
227
+ const s = data.length - start;
228
+ if (s < 1084)
229
+ return 1084 - s;
230
+ if (readmem32b(data, start + 1080) !== MAGIC_0000)
231
+ return -1;
232
+ const maxIns = checkInstruments(data, start);
233
+ if (maxIns < 0)
234
+ return -1;
235
+ const psize = checkPatternListSize(data, start);
236
+ if (psize < 0)
237
+ return -1;
238
+ const r = checkPattern(data, s, psize, maxIns, start + 1084);
239
+ if (r < 0)
240
+ return r;
241
+ return 0;
242
+ }
243
+ /** test_unic_noid (unic.c:353-394). */
244
+ function testUnicNoid(data, start) {
245
+ const s = data.length - start;
246
+ if (s < 1084)
247
+ return 1084 - s;
248
+ if (readmem32b(data, start + 1080) === MAGIC_0000)
249
+ return -1;
250
+ const maxIns = checkInstruments(data, start);
251
+ if (maxIns < 0)
252
+ return -1;
253
+ const psize = checkPatternListSize(data, start);
254
+ if (psize < 0)
255
+ return -1;
256
+ const r = checkPattern(data, s, psize, maxIns, start + 1080);
257
+ if (r < 0)
258
+ return r;
259
+ // Title coherence (unic.c:384-390)
260
+ for (let i = 0; i < 20; i++) {
261
+ const c = data[start + i];
262
+ if ((c !== 0 && c < 32) || c > 180)
263
+ return -1;
264
+ }
265
+ return 0;
266
+ }
267
+ /** pw_unic_id: "UNIC Tracker". */
268
+ export const pwUnicId = {
269
+ name: 'UNIC Tracker',
270
+ test: testUnicId,
271
+ depack: depackUnic,
272
+ };
273
+ /** pw_unic_noid: "UNIC Tracker noid". */
274
+ export const pwUnicNoid = {
275
+ name: 'UNIC Tracker noid',
276
+ test: testUnicNoid,
277
+ depack: depackUnic,
278
+ };
279
+ /** pw_unic_emptyid: "UNIC Tracker id0". */
280
+ export const pwUnicEmptyId = {
281
+ name: 'UNIC Tracker id0',
282
+ test: testUnicEmptyId,
283
+ depack: depackUnic,
284
+ };
285
+ //# sourceMappingURL=pw-unic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-unic.js","sourceRoot":"","sources":["../src/pw-unic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type PwFormat } from './prowiz.js';
2
+ /** pw_unic2: "Unic Tracker 2". */
3
+ export declare const pwUnic2: PwFormat;
4
+ //# sourceMappingURL=pw-unic2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pw-unic2.d.ts","sourceRoot":"","sources":["../src/pw-unic2.ts"],"names":[],"mappings":"AAMA,OAAO,EAA4D,KAAK,QAAQ,EAAE,MAAM,aAAa,CAAC;AAsKtG,kCAAkC;AAClC,eAAO,MAAM,OAAO,EAAE,QAIrB,CAAC"}