ref: a03388e2a74912510f3c78f0c72f622e59364dde
parent: 12a71134893f718065e83ec1ece8e5ddff90eb34
author: glenda <glenda@kingship>
date: Tue Aug 15 02:00:19 EDT 2023
stuff
--- /dev/null
+++ b/beep.c
@@ -1,0 +1,61 @@
+// produce waveform for a "beep"
+#include <u.h>
+#include <libc.h>
+
+void
+usage(void)
+{
+ fprint(2, "usage: %s [-f hz] [-d decay] [-l samples] [-s slide] [-v volume]\n", argv0);
+ exits("usage");
+}
+
+void
+main(int argc, char **argv)
+{
+ char *buffer;
+ short s;
+ int i;
+ double hz = 440;
+ double decay = 0.9998;
+ int samples = 11025;
+ double slide = 1.0001;
+ double volume = 0.33;
+ double *table;
+
+ ARGBEGIN{
+ case 'f':
+ hz = atof(EARGF(usage()));
+ break;
+ case 'd':
+ decay = atof(EARGF(usage()));
+ break;
+ case 'l':
+ samples = atoi(EARGF(usage()));
+ break;
+ case 's':
+ slide = atof(EARGF(usage()));
+ break;
+ case 'v':
+ volume = atof(EARGF(usage()))/100.0;
+ break;
+ default:
+ usage();
+ }ARGEND
+
+ volume = volume < 0? 0: volume > 1? 1: volume;
+
+ table = malloc(6283 * sizeof(double));
+ for (i = 0; i < 6283; i++) {
+ table[i] = cos(i/1000.0);
+ }
+
+ buffer = malloc(samples * 4);
+
+ for (i = 0; i < samples; i++) {
+ s = table[(int)(fmod(((double)i/44100*2*PI*(hz-pow(slide,i))),6.283)*1000.0)] * 32767 * volume * pow(decay,i);
+ buffer[i*4+0] = buffer[i*4+2] = s & 0xFF;
+ buffer[i*4+1] = buffer[i*4+3] = (s >> 8) & 0xFF;
+ }
+
+ write(1, buffer, samples * 4);
+}
--- /dev/null
+++ b/edges.c
@@ -1,0 +1,47 @@
+/*
+ * find and draw edges in images to produce coloring pages
+ * ex:
+ * png -t < image.png | edges | topng > imageedges.png
+ */
+#include <u.h>
+#include <libc.h>
+#include <draw.h>
+#include <memdraw.h>
+
+void main() {
+ Memimage *i;
+ Memimage *o;
+ int x, y, c;
+ int nchan;
+ int width;
+ int height;
+
+ i = readmemimage(0);
+ o = allocmemimage(i->r, strtochan("k8"));
+ memfillcolor(o, DBlack);
+ nchan = i->nchan;
+ width = Dx(i->r);
+ height = Dy(i->r);
+ for (y = 1; y < (height-1); y++)
+ for (x = 1; x < (width-1); x++)
+ for (c = 0; c < nchan; c++) {
+ *(byteaddr(o, Pt(x, y))) += (255 - (
+ (*(byteaddr(i, Pt(x-1, y-1))+c))*(-1)
+ + (*(byteaddr(i, Pt(x-1, y+0))+c))*(-2)
+ + (*(byteaddr(i, Pt(x-1, y+1))+c))*(-1)
+ + (*(byteaddr(i, Pt(x+1, y-1))+c))*(1)
+ + (*(byteaddr(i, Pt(x+1, y+0))+c))*(2)
+ + (*(byteaddr(i, Pt(x+1, y+1))+c))*(1)
+ + (*(byteaddr(i, Pt(x-1, y-1))+c))*(-1)
+ + (*(byteaddr(i, Pt(x+0, y-1))+c))*(-2)
+ + (*(byteaddr(i, Pt(x+1, y-1))+c))*(-1)
+ + (*(byteaddr(i, Pt(x-1, y+1))+c))*(1)
+ + (*(byteaddr(i, Pt(x+0, y+1))+c))*(2)
+ + (*(byteaddr(i, Pt(x+1, y+1))+c))*(1)
+ ))/nchan;
+ }
+ freememimage(i);
+ writememimage(1, o);
+ freememimage(o);
+}
+
--- /dev/null
+++ b/flip.c
@@ -1,0 +1,174 @@
+#include <u.h>
+#include <libc.h>
+
+Rune runes[][2] = {
+ {L'a', L'ɐ'},
+ {L'b', L'q'},
+ {L'c', L'ɔ'},
+ {L'd', L'p'},
+ {L'e', L'ǝ'},
+ {L'f', L'ɟ'},
+ {L'g', L'ƃ'},
+ {L'h', L'ɥ'},
+ {L'i', L'ᴉ'},
+ {L'j', L'ɾ'},
+ {L'k', L'ʞ'},
+ {L'l', L'˥'},
+ {L'm', L'ɯ'},
+ {L'n', L'u'},
+ {L'o', L'o'},
+ {L'p', L'd'},
+ {L'q', L'b'},
+ {L'r', L'ɹ'},
+ {L's', L's'},
+ {L't', L'ʇ'},
+ {L'u', L'n'},
+ {L'v', L'ʌ'},
+ {L'w', L'ʍ'},
+ {L'x', L'x'},
+ {L'y', L'ʎ'},
+ {L'z', L'z'},
+ {L'A', L'∀'},
+ {L'B', L'q'},
+ {L'C', L'Ɔ'},
+ {L'D', L'p'},
+ {L'E', L'Ǝ'},
+ {L'F', L'Ⅎ'},
+ {L'G', L'פ'},
+ {L'H', L'H'},
+ {L'I', L'I'},
+ {L'J', L'ſ'},
+ {L'K', L'ʞ'},
+ {L'L', L'˥'},
+ {L'M', L'W'},
+ {L'N', L'N'},
+ {L'O', L'O'},
+ {L'P', L'Ԁ'},
+ {L'Q', L'Q'},
+ {L'R', L'ʁ'},
+ {L'S', L'S'},
+ {L'T', L'┴'},
+ {L'U', L'∩'},
+ {L'V', L'Λ'},
+ {L'W', L'M'},
+ {L'X', L'X'},
+ {L'Y', L'⅄'},
+ {L'Z', L'Z'},
+ {L'\'', ','},
+ {L'"', L','},
+ {L',', L'\''},
+ {L'.', L'˙'},
+ {L'!', L'¡'},
+ {L'?', L'¿'},
+ {L'_', L'‾'},
+ {L'1', L'Ɩ'},
+ {L'2', L'ᄅ'},
+ {L'3', L'Ɛ'},
+ {L'4', L'ㄣ'},
+ {L'5', L'ϛ'},
+ {L'6', L'9'},
+ {L'7', L'ㄥ'},
+ {L'8', L'8'},
+ {L'9', L'6'},
+ {L'0', L'0'},
+ {L'ɐ', L'a'},
+ {L'ɔ', L'c'},
+ {L'ǝ', L'e'},
+ {L'ɟ', L'f'},
+ {L'ƃ', L'g'},
+ {L'ɥ', L'h'},
+ {L'ᴉ', L'i'},
+ {L'ɾ', L'j'},
+ {L'ʞ', L'k'},
+ {L'˥', L'l'},
+ {L'ɯ', L'm'},
+ {L'ʁ', L'r'},
+ {L'ʇ', L't'},
+ {L'ʌ', L'v'},
+ {L'ʍ', L'w'},
+ {L'ʎ', L'y'},
+ {L'∀', L'A'},
+ {L'Ɔ', L'C'},
+ {L'Ǝ', L'E'},
+ {L'Ⅎ', L'F'},
+ {L'פ', L'G'},
+ {L'ſ', L'J'},
+ {L'Ԁ', L'P'},
+ {L'┴', L'T'},
+ {L'∩', L'U'},
+ {L'Λ', L'V'},
+ {L'⅄', L'Y'},
+ {L'˙', L'.'},
+ {L'¡', L'!'},
+ {L'¿', L'?'},
+ {L'‾', L'_'},
+ {L'Ɩ', L'1'},
+ {L'ᄅ', L'2'},
+ {L'Ɛ', L'3'},
+ {L'ㄣ', L'4'},
+ {L'ϛ', L'5'},
+ {L'ㄥ', L'7'},
+ {L'(', L')'},
+ {L')', L'('},
+ {L'[', L']'},
+ {L']', L'['},
+ {L'<', L'>'},
+ {L'>', L'<'},
+ {0, 0},
+};
+
+Rune
+flip(Rune in){
+ int i = 0;
+
+ while(runes[i][0]){
+ if(runes[i][0] == in)
+ return runes[i][1];
+ i++;
+ }
+
+ return in;
+}
+
+void
+main(int argc, char **argv){
+ Rune rune;
+ char buf[8192 + UTFmax];
+ char *ptr;
+ Rune out[8192 + UTFmax];
+ int r, i, j, l;
+
+ while((r = read(0, buf, sizeof buf - UTFmax)) != 0) {
+ if (r < 0)
+ sysfatal("read: %r");
+
+ buf[r] = '\0';
+
+ ptr = buf;
+ while(r > 0){
+ while(*ptr == ' ' || *ptr == ' '){
+ print("%c", *ptr++);
+ r--;
+ }
+
+ l = strcspn(ptr, "\r\n");
+ j = utfnlen(ptr, l);
+ out[j--] = L'\0';
+ while(j >= 0){
+ i = chartorune(&rune, ptr);
+ if(i == 1 && rune == Runeerror)
+ sysfatal("invalid utf-8");
+ r -= i;
+ ptr += i;
+ rune = flip(rune);
+ out[j--] = rune;
+ }
+
+ print("%S", out);
+ while(*ptr == '\r' || *ptr == '\n'){
+ print("%c", *ptr++);
+ r--;
+ }
+ }
+ }
+}
--- /dev/null
+++ b/iching.c
@@ -1,0 +1,54 @@
+#include <u.h>
+#include <libc.h>
+
+void
+main() {
+ int fd;
+ int i, j;
+ uchar bits[3];
+ int lines[6];
+ int linesproc[6];
+ long value;
+ char bytes[3];
+ uchar table[64] = { 2, 23, 8, 20, 16, 35, 45, 12,
+ 15, 52, 39, 53, 62, 56, 31, 33,
+ 7, 4, 29, 59, 40, 64, 47, 6,
+ 46, 18, 48, 57, 32, 50, 28, 44,
+ 24, 27, 3, 42, 51, 21, 17, 25,
+ 36, 22, 63, 37, 55, 30, 49, 13,
+ 19, 41, 60, 61, 54, 38, 58, 10,
+ 11, 26, 5, 9, 34, 14, 43, 1 };
+ Rune first;
+ Rune changed;
+
+ fd = open("/dev/random", OREAD);
+ if (fd < 0)
+ sysfatal("open");
+
+ value = 0;
+ for (i = 0; i < 6; i++) {
+ if (readn(fd, bits, 3) != 3)
+ sysfatal("read");
+
+ lines[i] = 0;
+ for (j = 0; j < 3; j++)
+ lines[i] += bits[j] & 1? 2: 3;
+ print("%d ", lines[i]);
+ linesproc[i] = lines[i] & 1;
+ value += linesproc[i] == 1? 1 << (5 - i): 0;
+ }
+ print("\n");
+ value = 0x4DC0 - 1 + table[value];
+ first = value;
+
+ value = 0;
+ for (i = 0; i < 6; i++) {
+ if ((lines[i] % 3) == 0)
+ linesproc[i] = linesproc[i] == 1? 0: 1;
+ value += linesproc[i] == 1? 1 << (5 - i): 0;
+ }
+ value = 0x4DC0 - 1 + table[value];
+ changed = value;
+
+ print("%C %C\n", first, changed);
+}