76 lines
1.3 KiB
C
76 lines
1.3 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]);
|
|
srvinit();
|
|
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(threadcreate(dictthread, nil, 16384) < 0)
|
|
die("can't create dictionary worker");
|
|
imthread(nil);
|
|
}
|