shithub: weu

Download patch

ref: 9635fb9d97bf57897f14e5832197b20087c0fde2
author: qwx <qwx@sciops.net>
date: Mon May 27 19:39:39 EDT 2019

initial import

--- /dev/null
+++ b/al.c
@@ -1,0 +1,107 @@
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+
+enum{
+	Mchr = 0x20,
+	Msca = 0x40,
+	Matk = 0x60,
+	Msus = 0x80,
+	Mwav = 0xe0,
+	Cchr = Mchr + 3,
+	Csca = Msca + 3,
+	Catk = Matk + 3,
+	Csus = Msus + 3,
+	Cwav = Mwav + 3,
+	FreqL = 0xa0,
+	FreqH = 0xb0
+};
+uchar inst[] = {Mchr, Cchr, Msca, Csca, Matk, Catk, Msus, Csus, Mwav, Cwav};
+uchar *out;
+Biobuf *bf, *of;
+
+#define	PBIT16(p,v)	(p)[0]=(v);(p)[1]=(v)>>8
+
+u8int
+get8(void)
+{
+	u8int v;
+
+	if(Bread(bf, &v, 1) != 1)
+		sysfatal("get8: short read: %r");
+	return v;
+}
+
+u16int
+get16(void)
+{
+	u8int v;
+
+	v = get8();
+	return get8()<<8 | v;
+}
+
+u32int
+get32(void)
+{
+	u16int v;
+
+	v = get16();
+	return get16()<<16 | v;
+}
+
+void
+main(int argc, char **argv)
+{
+	int n, fd;
+	u8int *i, *p, v, blk;
+
+	fd = 0;
+	if(argc > 1){
+		fd = open(argv[1], OREAD);
+		if(fd < 0)
+			sysfatal("open: %r");
+	}
+	bf = Bfdopen(fd, OREAD);
+	of = Bfdopen(1, OWRITE);
+	if(bf == nil || of == nil)
+		sysfatal("Bfdopen: %r");
+	n = get32();
+	out = mallocz(2 + 4 * (nelem(inst) + n*2 + 1 + 1), 1);
+	p = out + 2;
+	*p++ = 0x01;
+	*p++ = 0x20;
+	p += 2;
+	get16();
+	i = inst;
+	while(i < inst+nelem(inst)){
+		*p++ = *i++;
+		*p++ = get8();
+		p += 2;
+	}
+	Bseek(bf, 6, 1);
+	blk = (get8() & 7) << 2 | 0x20;
+	while(n--){
+		v = get8();
+		if(v == 0){
+			*p = FreqH;
+			p += 2;
+			PBIT16(p, 1);
+			p += 2;
+		}else{
+			*p++ = FreqL;
+			*p++ = v;
+			p += 2;
+			*p++ = FreqH;
+			*p++ = blk;
+			PBIT16(p, 1);
+			p += 2;
+		}
+	}
+	*p++ = FreqH;
+	p += 3;
+	n = p-out - 2;
+	PBIT16(out, n);
+	Bwrite(of, out, p-out);
+	exits(nil);
+}
--- /dev/null
+++ b/imf.c
@@ -1,0 +1,27 @@
+#include <u.h>
+#include <libc.h>
+
+void
+main(int argc, char **argv)
+{
+	int n, m, fd;
+	uchar buf[65536], wse[4] = {0x01, 0x20, 0, 0};
+
+	fd = 0;
+	if(argc > 1){
+		fd = open(argv[1], OREAD);
+		if(fd < 0)
+			sysfatal("open: %r");
+	}
+	if(read(fd, buf, 2) != 2)
+		sysfatal("short read: %r");
+	m = buf[1]<<8 | buf[0];
+	if(m & 3)
+		sysfatal("invalid imf size");
+	write(1, wse, sizeof wse);
+	while(n = read(fd, buf, m > sizeof buf ? sizeof buf : m), n > 0){
+		write(1, buf, n);
+		m -= n;
+	}
+	exits(nil);
+}
--- /dev/null
+++ b/mkfile
@@ -1,0 +1,12 @@
+</$objtype/mkfile
+
+TARG=\
+	al\
+	imf\
+	wpic\
+
+OFILES=
+HFILES=
+
+</sys/src/cmd/mkmany
+BIN=$home/bin/$objtype
--- /dev/null
+++ b/sod.pal
@@ -1,0 +1,257 @@
+pal 256
+0x000000
+0x0000aa
+0x00aa00
+0x00aaaa
+0xaa0000
+0xaa00aa
+0xaa5500
+0xaaaaaa
+0x555555
+0x5555ff
+0x55ff55
+0x55ffff
+0xff5555
+0xff55ff
+0xffff55
+0xffffff
+0xeeeeee
+0xdedede
+0xd2d2d2
+0xc2c2c2
+0xb6b6b6
+0xaaaaaa
+0x999999
+0x8d8d8d
+0x7d7d7d
+0x717171
+0x656565
+0x555555
+0x484848
+0x383838
+0x2c2c2c
+0x202020
+0xff0000
+0xee0000
+0xe20000
+0xd60000
+0xca0000
+0xbe0000
+0xb20000
+0xa50000
+0x990000
+0x890000
+0x7d0000
+0x710000
+0x650000
+0x590000
+0x4c0000
+0x400000
+0xffdada
+0xffbaba
+0xff9d9d
+0xff7d7d
+0xff5d5d
+0xff4040
+0xff2020
+0xff0000
+0xffaa5d
+0xff9940
+0xff8920
+0xff7900
+0xe66d00
+0xce6100
+0xb65500
+0x9d4c00
+0xffffda
+0xffffba
+0xffff9d
+0xffff7d
+0xfffa5d
+0xfff640
+0xfff620
+0xfff600
+0xe6da00
+0xcec600
+0xb6ae00
+0x9d9d00
+0x858500
+0x716d00
+0x595500
+0x404000
+0xd2ff5d
+0xc6ff40
+0xb6ff20
+0xa1ff00
+0x91e600
+0x81ce00
+0x75b600
+0x619d00
+0xdaffda
+0xbeffba
+0x9dff9d
+0x81ff7d
+0x61ff5d
+0x40ff40
+0x20ff20
+0x00ff00
+0x00ff00
+0x00ee00
+0x00e200
+0x00d600
+0x04ca00
+0x04be00
+0x04b200
+0x04a500
+0x049900
+0x048900
+0x047d00
+0x047100
+0x046500
+0x045900
+0x044c00
+0x044000
+0xdaffff
+0xbaffff
+0x9dffff
+0x7dfffa
+0x5dffff
+0x40ffff
+0x20ffff
+0x00ffff
+0x00e6e6
+0x00cece
+0x00b6b6
+0x009d9d
+0x008585
+0x007171
+0x005959
+0x004040
+0x5dbeff
+0x40b2ff
+0x20aaff
+0x009dff
+0x008de6
+0x007dce
+0x006db6
+0x005d9d
+0xdadaff
+0xbabeff
+0x9d9dff
+0x7d81ff
+0x5d61ff
+0x4040ff
+0x2024ff
+0x0004ff
+0x0000ff
+0x0000ee
+0x0000e2
+0x0000d6
+0x0000ca
+0x0000be
+0x0000b2
+0x0000a5
+0x000099
+0x000089
+0x00007d
+0x000071
+0x000065
+0x000059
+0x00004c
+0x000040
+0x282828
+0xffe234
+0xffd624
+0xffce18
+0xffc208
+0xffb600
+0x003800
+0x002800
+0x9900e6
+0x8100ce
+0x7500b6
+0x61009d
+0x500085
+0x440071
+0x340059
+0x280040
+0xffdaff
+0xffbaff
+0xff9dff
+0xff7dff
+0xff5dff
+0xff40ff
+0xff20ff
+0xff00ff
+0xe200e6
+0xca00ce
+0xb600b6
+0x9d009d
+0x850085
+0x6d0071
+0x590059
+0x400040
+0xffeade
+0xffe2d2
+0xffdac6
+0xffd6be
+0xffceb2
+0xffc6a5
+0xffbe9d
+0xffba91
+0xffb281
+0xffa571
+0xff9d61
+0xf2955d
+0xea8d59
+0xde8955
+0xd28150
+0xca7d4c
+0xbe7948
+0xb67144
+0xaa6940
+0xa1653c
+0x9d6138
+0x915d34
+0x895930
+0x81502c
+0x754c28
+0x6d4824
+0x5d4020
+0x553c1c
+0x483818
+0x403018
+0x382c14
+0x28200c
+0x610065
+0x006565
+0x006161
+0x00001c
+0x00002c
+0x302410
+0x480048
+0x500050
+0x000034
+0x1c1c1c
+0x4c4c4c
+0x5d5d5d
+0x404040
+0x303030
+0x343434
+0xdaf6f6
+0xbaeaea
+0x9ddede
+0x75caca
+0x48c2c2
+0x20b6b6
+0x20b2b2
+0x00a5a5
+0x009999
+0x008d8d
+0x008585
+0x007d7d
+0x007979
+0x007575
+0x007171
+0x006d6d
+0x990089
--- /dev/null
+++ b/wl3d.pal
@@ -1,0 +1,257 @@
+pal 256
+0x000000
+0x0000aa
+0x00aa00
+0x00aaaa
+0xaa0000
+0xaa00aa
+0xaa5500
+0xaaaaaa
+0x555555
+0x5555ff
+0x55ff55
+0x55ffff
+0xff5555
+0xff55ff
+0xffff55
+0xffffff
+0xeeeeee
+0xdedede
+0xd2d2d2
+0xc2c2c2
+0xb6b6b6
+0xaaaaaa
+0x999999
+0x8d8d8d
+0x7d7d7d
+0x717171
+0x656565
+0x555555
+0x484848
+0x383838
+0x2c2c2c
+0x202020
+0xff0000
+0xee0000
+0xe20000
+0xd60000
+0xca0000
+0xbe0000
+0xb20000
+0xa50000
+0x990000
+0x890000
+0x7d0000
+0x710000
+0x650000
+0x590000
+0x4c0000
+0x400000
+0xffdada
+0xffbaba
+0xff9d9d
+0xff7d7d
+0xff5d5d
+0xff4040
+0xff2020
+0xff0000
+0xffaa5d
+0xff9940
+0xff8920
+0xff7900
+0xe66d00
+0xce6100
+0xb65500
+0x9d4c00
+0xffffda
+0xffffba
+0xffff9d
+0xffff7d
+0xfffa5d
+0xfff640
+0xfff620
+0xfff600
+0xe6da00
+0xcec600
+0xb6ae00
+0x9d9d00
+0x858500
+0x716d00
+0x595500
+0x404000
+0xd2ff5d
+0xc6ff40
+0xb6ff20
+0xa1ff00
+0x91e600
+0x81ce00
+0x75b600
+0x619d00
+0xdaffda
+0xbeffba
+0x9dff9d
+0x81ff7d
+0x61ff5d
+0x40ff40
+0x20ff20
+0x00ff00
+0x00ff00
+0x00ee00
+0x00e200
+0x00d600
+0x04ca00
+0x04be00
+0x04b200
+0x04a500
+0x049900
+0x048900
+0x047d00
+0x047100
+0x046500
+0x045900
+0x044c00
+0x044000
+0xdaffff
+0xbaffff
+0x9dffff
+0x7dfffa
+0x5dffff
+0x40ffff
+0x20ffff
+0x00ffff
+0x00e6e6
+0x00cece
+0x00b6b6
+0x009d9d
+0x008585
+0x007171
+0x005959
+0x004040
+0x5dbeff
+0x40b2ff
+0x20aaff
+0x009dff
+0x008de6
+0x007dce
+0x006db6
+0x005d9d
+0xdadaff
+0xbabeff
+0x9d9dff
+0x7d81ff
+0x5d61ff
+0x4040ff
+0x2024ff
+0x0004ff
+0x0000ff
+0x0000ee
+0x0000e2
+0x0000d6
+0x0000ca
+0x0000be
+0x0000b2
+0x0000a5
+0x000099
+0x000089
+0x00007d
+0x000071
+0x000065
+0x000059
+0x00004c
+0x000040
+0x282828
+0xffe234
+0xffd624
+0xffce18
+0xffc208
+0xffb600
+0xb620ff
+0xaa00ff
+0x9900e6
+0x8100ce
+0x7500b6
+0x61009d
+0x500085
+0x440071
+0x340059
+0x280040
+0xffdaff
+0xffbaff
+0xff9dff
+0xff7dff
+0xff5dff
+0xff40ff
+0xff20ff
+0xff00ff
+0xe200e6
+0xca00ce
+0xb600b6
+0x9d009d
+0x850085
+0x6d0071
+0x590059
+0x400040
+0xffeade
+0xffe2d2
+0xffdac6
+0xffd6be
+0xffceb2
+0xffc6a5
+0xffbe9d
+0xffba91
+0xffb281
+0xffa571
+0xff9d61
+0xf2955d
+0xea8d59
+0xde8955
+0xd28150
+0xca7d4c
+0xbe7948
+0xb67144
+0xaa6940
+0xa1653c
+0x9d6138
+0x915d34
+0x895930
+0x81502c
+0x754c28
+0x6d4824
+0x5d4020
+0x553c1c
+0x483818
+0x403018
+0x382c14
+0x28200c
+0x610065
+0x006565
+0x006161
+0x00001c
+0x00002c
+0x302410
+0x480048
+0x500050
+0x000034
+0x1c1c1c
+0x4c4c4c
+0x5d5d5d
+0x404040
+0x303030
+0x343434
+0xdaf6f6
+0xbaeaea
+0x9ddede
+0x75caca
+0x48c2c2
+0x20b6b6
+0x20b2b2
+0x00a5a5
+0x009999
+0x008d8d
+0x008585
+0x007d7d
+0x007979
+0x007575
+0x007171
+0x006d6d
+0x990089
--- /dev/null
+++ b/wpic.c
@@ -1,0 +1,216 @@
+#include <u.h>
+#include <libc.h>
+#include <bio.h>
+#include <draw.h>
+
+u32int pal[256] = {
+	0x000000, 0x0000aa, 0x00aa00, 0x00aaaa, 0xaa0000, 0xaa00aa, 0xaa5500,
+	0xaaaaaa, 0x555555, 0x5555ff, 0x55ff55, 0x55ffff, 0xff5555, 0xff55ff,
+	0xffff55, 0xffffff, 0xeeeeee, 0xdedede, 0xd2d2d2, 0xc2c2c2, 0xb6b6b6,
+	0xaaaaaa, 0x999999, 0x8d8d8d, 0x7d7d7d, 0x717171, 0x656565, 0x555555,
+	0x484848, 0x383838, 0x2c2c2c, 0x202020, 0xff0000, 0xee0000, 0xe20000,
+	0xd60000, 0xca0000, 0xbe0000, 0xb20000, 0xa50000, 0x990000, 0x890000,
+	0x7d0000, 0x710000, 0x650000, 0x590000, 0x4c0000, 0x400000, 0xffdada,
+	0xffbaba, 0xff9d9d, 0xff7d7d, 0xff5d5d, 0xff4040, 0xff2020, 0xff0000,
+	0xffaa5d, 0xff9940, 0xff8920, 0xff7900, 0xe66d00, 0xce6100, 0xb65500,
+	0x9d4c00, 0xffffda, 0xffffba, 0xffff9d, 0xffff7d, 0xfffa5d, 0xfff640,
+	0xfff620, 0xfff600, 0xe6da00, 0xcec600, 0xb6ae00, 0x9d9d00, 0x858500,
+	0x716d00, 0x595500, 0x404000, 0xd2ff5d, 0xc6ff40, 0xb6ff20, 0xa1ff00,
+	0x91e600, 0x81ce00, 0x75b600, 0x619d00, 0xdaffda, 0xbeffba, 0x9dff9d,
+	0x81ff7d, 0x61ff5d, 0x40ff40, 0x20ff20, 0x00ff00, 0x00ff00, 0x00ee00,
+	0x00e200, 0x00d600, 0x04ca00, 0x04be00, 0x04b200, 0x04a500, 0x049900,
+	0x048900, 0x047d00, 0x047100, 0x046500, 0x045900, 0x044c00, 0x044000,
+	0xdaffff, 0xbaffff, 0x9dffff, 0x7dfffa, 0x5dffff, 0x40ffff, 0x20ffff,
+	0x00ffff, 0x00e6e6, 0x00cece, 0x00b6b6, 0x009d9d, 0x008585, 0x007171,
+	0x005959, 0x004040, 0x5dbeff, 0x40b2ff, 0x20aaff, 0x009dff, 0x008de6,
+	0x007dce, 0x006db6, 0x005d9d, 0xdadaff, 0xbabeff, 0x9d9dff, 0x7d81ff,
+	0x5d61ff, 0x4040ff, 0x2024ff, 0x0004ff, 0x0000ff, 0x0000ee, 0x0000e2,
+	0x0000d6, 0x0000ca, 0x0000be, 0x0000b2, 0x0000a5, 0x000099, 0x000089,
+	0x00007d, 0x000071, 0x000065, 0x000059, 0x00004c, 0x000040, 0x282828,
+	0xffe234, 0xffd624, 0xffce18, 0xffc208, 0xffb600, 0xb620ff, 0xaa00ff,
+	0x9900e6, 0x8100ce, 0x7500b6, 0x61009d, 0x500085, 0x440071, 0x340059,
+	0x280040, 0xffdaff, 0xffbaff, 0xff9dff, 0xff7dff, 0xff5dff, 0xff40ff,
+	0xff20ff, 0xff00ff, 0xe200e6, 0xca00ce, 0xb600b6, 0x9d009d, 0x850085,
+	0x6d0071, 0x590059, 0x400040, 0xffeade, 0xffe2d2, 0xffdac6, 0xffd6be,
+	0xffceb2, 0xffc6a5, 0xffbe9d, 0xffba91, 0xffb281, 0xffa571, 0xff9d61,
+	0xf2955d, 0xea8d59, 0xde8955, 0xd28150, 0xca7d4c, 0xbe7948, 0xb67144,
+	0xaa6940, 0xa1653c, 0x9d6138, 0x915d34, 0x895930, 0x81502c, 0x754c28,
+	0x6d4824, 0x5d4020, 0x553c1c, 0x483818, 0x403018, 0x382c14, 0x28200c,
+	0x610065, 0x006565, 0x006161, 0x00001c, 0x00002c, 0x302410, 0x480048,
+	0x500050, 0x000034, 0x1c1c1c, 0x4c4c4c, 0x5d5d5d, 0x404040, 0x303030,
+	0x343434, 0xdaf6f6, 0xbaeaea, 0x9ddede, 0x75caca, 0x48c2c2, 0x20b6b6,
+	0x20b2b2, 0x00a5a5, 0x009999, 0x008d8d, 0x008585, 0x007d7d, 0x007979,
+	0x007575, 0x007171, 0x006d6d, 0x990089
+};
+u32int bg = 0x777777;
+int dx = 64, dy = 64;
+int wall, sprite;
+Biobuf *bi, *bo;
+int fd;
+
+#define	GBIT16(p)	((p)[0]|((p)[1]<<8))
+
+void
+put24(u32int v)
+{
+	uchar u[3];
+
+	u[0] = v;
+	u[1] = v>>8;
+	u[2] = v>>16;
+	Bwrite(bo, u, 3);
+}
+
+void
+wrwall(uchar *s)
+{
+	int n;
+	uchar *p, *e;
+
+	n = dx * dy;
+	e = s + dy;
+	while(s < e){
+		p = s + n;
+		while(s < p){
+			put24(pal[*s]);
+			s += dy;
+		}
+		s -= n - 1;
+	}
+}
+
+void
+wrspr(uchar *s)
+{
+	int n, m, lx, rx;
+	u32int u[64*64], *p, *qp, *e;
+	uchar *c, *d, *qs;
+
+	p = u;
+	while(p < u + nelem(u))
+		*p++ = bg;
+	c = s;
+	lx = GBIT16(c), c+=2;
+	rx = GBIT16(c), c+=2;
+	p = u + lx;
+	e = u + rx;
+	while(p <= e){
+		d = s + GBIT16(c), c+=2;
+		n = GBIT16(d) / 2, d+=2;
+		while(n != 0){
+			qs = s + (s16int)GBIT16(d), d+=2;
+			m = GBIT16(d) / 2, d+=2;
+			qs += m;
+			qp = p + 64 * m;
+			n -= m;
+			while(n-- > 0){
+				*qp = pal[*qs++];
+				qp += 64;
+			}
+			n = GBIT16(d) / 2, d+=2;
+		}
+		p++;
+	}
+	p = u;
+	while(p < u + nelem(u))
+		put24(*p++);
+}
+
+void
+wrvga(uchar *s)
+{
+	int n;
+	uchar *e;
+
+	n = dx * dy / 4;
+	e = s + n;
+	while(s < e){
+		put24(pal[s[0]]);
+		put24(pal[s[n]]);
+		put24(pal[s[n*2]]);
+		put24(pal[s[n*3]]);
+		s++;
+	}
+}
+
+static vlong
+bsize(void)
+{
+	vlong n;
+	Dir *d;
+
+	d = dirfstat(Bfildes(bi));
+	if(d == nil)
+		sysfatal("bstat: %r");
+	n = d->length;
+	free(d);
+	return n;
+}
+
+void
+getpal(char *f)
+{
+	int i;
+	uchar u[4];
+	Biobuf *b;
+
+	if((b = Bopen(f, OREAD)) == nil)
+		sysfatal("getpal: %r");
+	for(i=0; i<256; i++){
+		if(Bread(b, u, 3) != 3)
+			sysfatal("getpal: palette too short: %r");
+		pal[i] = u[2]<<16 | u[1]<<8 | u[0];
+	}
+	Bterm(b);
+}
+
+void
+usage(void)
+{
+	fprint(2, "usage: %s [-sw] [-b bg] [-p pal] [-x dx] [-y dy] [pic]\n", argv0);
+	exits("usage");
+}
+
+void
+main(int argc, char **argv)
+{
+	int n;
+	char c[9];
+	uchar *s;
+
+	ARGBEGIN{
+	case 'b': bg = strtoul(EARGF(usage()), nil, 0); break;
+	case 'p': getpal(EARGF(usage())); break;
+	case 's': sprite++; break;
+	case 'w': wall++; break;
+	case 'x': dx = strtoul(EARGF(usage()), nil, 0); break;
+	case 'y': dy = strtoul(EARGF(usage()), nil, 0); break;
+	default:
+		usage();
+	}ARGEND
+	if(*argv != nil){
+		fd = open(*argv, OREAD);
+		if(fd < 0)
+			sysfatal("open: %r");
+	}
+	bi = Bfdopen(fd, OREAD);
+	bo = Bfdopen(1, OWRITE);
+	if(bi == nil || bo == nil)
+		sysfatal("Bfdopen: %r");
+	n = sprite ? bsize() : dx * dy;
+	s = mallocz(n, 1);
+	if(s == nil)
+		sysfatal("mallocz: %r");
+	if(Bread(bi, s, n) != n)
+		sysfatal("Bread: short read");
+	Bprint(bo, "%11s %11d %11d %11d %11d ",
+		chantostr(c, RGB24), 0, 0, dx, dy);
+	if(wall)
+		wrwall(s);
+	else if(sprite)
+		wrspr(s);
+	else
+		wrvga(s);
+	free(s);
+	exits(nil);
+}