Files
strans/main.c

77 lines
1.4 KiB
C

#include "dat.h"
#include "fn.h"
Channel *drawc;
Channel *keyc;
Channel *dictreqc;
Channel *dictresc;
char **fontfiles;
int nfontfiles;
void
usage(void)
{
fprint(2, "usage: strans mapdir fontfile [fontfile ...]\n");
threadexitsall("usage");
}
void
die(char *fmt, ...)
{
va_list ap;
fprint(2, "strans: ");
va_start(ap, fmt);
vfprint(2, fmt, ap);
va_end(ap);
fprint(2, "\n");
threadexitsall("die");
}
void*
emalloc(ulong n)
{
void *p;
p = mallocz(n, 1);
if(p == nil)
die("out of memory");
return p;
}
void*
erealloc(void *p, ulong n)
{
p = realloc(p, n);
if(p == nil)
die("out of memory");
return p;
}
void
threadmain(int argc, char **argv)
{
if(argc < 3 || argc > Maxfonts + 2)
usage();
fontfiles = argv + 2;
nfontfiles = argc - 2;
drawc = chancreate(sizeof(Drawcmd), 4);
keyc = chancreate(sizeof(Keyreq), 0);
dictreqc = chancreate(sizeof(Dictreq), 4);
dictresc = chancreate(sizeof(Dictres), 0);
mapinit(argv[1]);
dictinit(argv[1]);
if(proccreate(drawthread, nil, 16384) < 0)
die("can't create draw worker");
if(proccreate(srvthread, nil, 16384) < 0)
die("can't create server worker");
if(proccreate(ibusthread, nil, 32768) < 0)
die("can't create IBus worker");
if(proccreate(waylandthread, nil, 32768) < 0)
die("can't create Wayland worker");
if(threadcreate(dictthread, nil, 16384) < 0)
die("can't create dictionary worker");
imthread(nil);
}