/* * fontimage.c * * (code-c-d "ilc" "/usr/src/icon/ipl/packs/loadfunc/") * (find-ilcfile "") * (find-ilcfile "o") * (find-ilcfile "mklib.sh") * (find-ilcfile "argdump.c") * (find-ilcfile "icall.h") * (find-ilcfile "Makefile") * * (find-node "(gcc)Option Summary") * (find-fline "~/C/fontimage.icn") cd ~/C/ gcc -I/usr/src/icon/ipl/packs/loadfunc/ -O -w -c -o fontimage.o fontimage.c /usr/src/icon/ipl/packs/loadfunc/mklib.sh myclib.so fontimage.o */ #include "icall.h" #define foo(mask, pos) (image[pos] = (byte&(mask) ? c1 : c0)) int byteimage(int argc, descriptor *argv) { char image[8], c0, c1, t, byte; if (argc!=2) Fail; switch (IconType(argv[1])) { case 'i' : byte = IntegerVal(argv[1]); break; case 's' : byte = StringAddr(argv[1])[0]; break; default : Fail; } c0 = StringAddr(argv[2])[0]; c1 = StringAddr(argv[2])[1]; foo(128,0); foo(64,1); foo(32,2); foo(16,3); foo(8,4); foo(4,5); foo(2,6); foo(1,7); RetStringN(image, 8); } #define bar(mask, pos) (s[pos]==c1?mask:0) int stringtochar(int argc, descriptor *argv) { char *s, c0, c1, sret[1]; s = StringAddr(argv[1]); c0 = StringAddr(argv[2])[0]; c1 = StringAddr(argv[2])[1]; sret[0] = (char)( bar(128,0) + bar(64,1) + bar(32,2) + bar(16,3) + bar(8,4) + bar(4,5) + bar(2,6) + bar(1,7)); RetStringN(sret, 1); } /* (find-fline "/usr/include/ctype.h") */ #define hexdigits "0123456789ABCDEF" #define hexdigit(n) (hexdigits[(n)&15]) #define xvalue(d) (((d)&0x0F) + ((d)&64 ? 9 : 0)) /* ascii hack */ int stoh(int argc, descriptor *argv) { char sh[32], *s; int n, i; n = StringLen(argv[1]); s = StringAddr(argv[1]); for(i=0; i>4); sh[2*i+1] = hexdigit(s[i]&15); } RetStringN(sh, n*2); } int htos(int argc, descriptor *argv) { char ss[32], *sh; int n, i; n = StringLen(argv[1]) / 2; sh = StringAddr(argv[1]); for(i=0; i