From 3238f124b81e53762e5c2e021630de20bdb7cbd9 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 10 Apr 2016 03:01:37 +0200 Subject: ape: move compatibility libc.h to lib9 directory and incooperate needed functions for ape/mp (wip) --- sys/src/ape/lib/9/argv0.c | 3 + sys/src/ape/lib/9/libc.h | 153 ++++++++++++++++++++++++++++ sys/src/ape/lib/9/mkfile | 28 +++++- sys/src/ape/lib/9/setmalloctag.c | 4 +- sys/src/ape/lib/9/setrealloctag.c | 6 ++ sys/src/ape/lib/draw/colors.c | 203 -------------------------------------- sys/src/ape/lib/draw/libc.h | 137 ------------------------- sys/src/ape/lib/draw/mkfile | 5 +- 8 files changed, 196 insertions(+), 343 deletions(-) create mode 100644 sys/src/ape/lib/9/argv0.c create mode 100644 sys/src/ape/lib/9/libc.h create mode 100644 sys/src/ape/lib/9/setrealloctag.c delete mode 100644 sys/src/ape/lib/draw/colors.c delete mode 100644 sys/src/ape/lib/draw/libc.h (limited to 'sys') diff --git a/sys/src/ape/lib/9/argv0.c b/sys/src/ape/lib/9/argv0.c new file mode 100644 index 000000000..c2b466bbf --- /dev/null +++ b/sys/src/ape/lib/9/argv0.c @@ -0,0 +1,3 @@ +#include + +char *argv0; diff --git a/sys/src/ape/lib/9/libc.h b/sys/src/ape/lib/9/libc.h new file mode 100644 index 000000000..6ec1580c2 --- /dev/null +++ b/sys/src/ape/lib/9/libc.h @@ -0,0 +1,153 @@ +#define _LOCK_EXTENSION +#define _QLOCK_EXTENSION +#define _BSD_EXTENSION +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) + +typedef +struct Qid +{ + uvlong path; + ulong vers; + uchar type; +} Qid; + +typedef +struct Dir { + /* system-modified data */ + ushort type; /* server type */ + uint dev; /* server subtype */ + /* file data */ + Qid qid; /* unique id from server */ + ulong mode; /* permissions */ + ulong atime; /* last read time */ + ulong mtime; /* last write time */ + vlong length; /* file length: see */ + char *name; /* last element of path */ + char *uid; /* owner name */ + char *gid; /* group name */ + char *muid; /* last modifier name */ +} Dir; + +uint _convM2D(uchar*, uint, Dir*, char*); +uint _convD2M(Dir*, uchar*, uint); +Dir *_dirstat(char*); +int _dirwstat(char*, Dir*); +Dir *_dirfstat(int); +int _dirfwstat(int, Dir*); +long _dirread(int, Dir**); +long _dirreadall(int, Dir**); +void _nulldir(Dir*); +uint _sizeD2M(Dir*); + +typedef +struct Waitmsg +{ + int pid; /* of loved one */ + unsigned long time[3]; /* of loved one & descendants */ + char *msg; +} Waitmsg; + + +extern int _AWAIT(char*, int); +extern int _ALARM(unsigned long); +extern int _BIND(const char*, const char*, int); +extern int _CHDIR(const char*); +extern int _CLOSE(int); +extern int _CREATE(char*, int, unsigned long); +extern int _DUP(int, int); +extern int _ERRSTR(char*, unsigned int); +extern int _EXEC(char*, char*[]); +extern void _EXITS(char *); +extern int _FD2PATH(int, char*, int); +extern int _FAUTH(int, char*); +extern int _FSESSION(int, char*, int); +extern int _FSTAT(int, unsigned char*, int); +extern int _FWSTAT(int, unsigned char*, int); +extern int _MOUNT(int, int, const char*, int, const char*); +extern int _NOTED(int); +extern int _NOTIFY(int(*)(void*, char*)); +extern int _OPEN(const char*, int); +extern int _PIPE(int*); +extern long _PREAD(int, void*, long, long long); +extern long _PWRITE(int, void*, long, long long); +extern long _READ(int, void*, long); +extern int _REMOVE(const char*); +extern void* _RENDEZVOUS(void*, void*); +extern int _RFORK(int); +extern void* _SEGATTACH(int, char*, void*, unsigned long); +extern void* _SEGBRK(void*, void*); +extern int _SEGDETACH(void*); +extern int _SEGFLUSH(void*, unsigned long); +extern int _SEGFREE(void*, unsigned long); +extern long long _SEEK(int, long long, int); +extern int _SLEEP(long); +extern int _STAT(const char*, unsigned char*, int); +extern Waitmsg* _WAIT(void); +extern long _WRITE(int, const void*, long); +extern int _WSTAT(const char*, unsigned char*, int); +extern void* _MALLOCZ(int, int); +extern int _WERRSTR(char*, ...); +extern long _READN(int, void*, long); +extern int _IOUNIT(int); +extern vlong _NSEC(void); + +#define dirstat _dirstat +#define dirfstat _dirfstat + +#define OREAD 0 +#define OWRITE 1 +#define ORDWR 2 +#define OCEXEC 32 + +#define AREAD 4 +#define AWRITE 2 +#define AEXEC 1 +#define AEXIST 0 + +#define _exits(s) _exit(s && *(char*)s ? 1 : 0) +#define exits(s) exit(s && *(char*)s ? 1 : 0) + +#define create(file, omode, perm) open(file, (omode) |O_CREAT | O_TRUNC, perm) +#define seek(fd, off, dir) lseek(fd, off, dir) + +#define readn _READN +#define pread _PREAD +#define pwrite _PWRITE +#define mallocz _MALLOCZ +#define nsec _NSEC +#define iounit _IOUNIT + +#define postnote(who,pid,note) kill(pid,SIGTERM) +#define atnotify(func,in) + +#define ERRMAX 128 + +extern void setmalloctag(void*, uintptr_t); +extern void setrealloctag(void*, uintptr_t); +extern uintptr_t getcallerpc(void*); + +extern int dec16(uchar *, int, char *, int); +extern int enc16(char *, int, uchar *, int); +extern int dec32(uchar *, int, char *, int); +extern int enc32(char *, int, uchar *, int); +extern int dec64(uchar *, int, char *, int); +extern int enc64(char *, int, uchar *, int); + +extern int tokenize(char*, char**, int); +extern void sysfatal(char*, ...); +extern ulong truerand(void); /* uses /dev/random */ diff --git a/sys/src/ape/lib/9/mkfile b/sys/src/ape/lib/9/mkfile index c040695df..cc3e5b9b8 100644 --- a/sys/src/ape/lib/9/mkfile +++ b/sys/src/ape/lib/9/mkfile @@ -2,7 +2,8 @@ APE=/sys/src/ape <$APE/config LIB=/$objtype/lib/ape/lib9.a -OFILES=errstr.$O\ +OFILES=argv0.$O\ + errstr.$O\ bind.$O\ getcallerpc.$O\ getfcr.$O\ @@ -14,6 +15,13 @@ OFILES=errstr.$O\ segflush.$O\ segfree.$O\ setmalloctag.$O\ + setrealloctag.$O\ + sysfatal.$O\ + tokenize.$O\ + truerand.$O\ + u16.$O\ + u32.$O\ + u64.$O\ unmount.$O\ + void -setmalloctag(void*, unsigned long) +setmalloctag(void*, uintptr_t) { } diff --git a/sys/src/ape/lib/9/setrealloctag.c b/sys/src/ape/lib/9/setrealloctag.c new file mode 100644 index 000000000..4574b739c --- /dev/null +++ b/sys/src/ape/lib/9/setrealloctag.c @@ -0,0 +1,6 @@ +#include + +void +setrealloctag(void*, uintptr_t) +{ +} diff --git a/sys/src/ape/lib/draw/colors.c b/sys/src/ape/lib/draw/colors.c deleted file mode 100644 index 2f668cdc3..000000000 --- a/sys/src/ape/lib/draw/colors.c +++ /dev/null @@ -1,203 +0,0 @@ -#include -#include -#include -#include - -char *argv0; - -static void -_sysfatalimpl(char *fmt, va_list arg) -{ - char buf[1024]; - - vseprint(buf, buf+sizeof(buf), fmt, arg); - if(argv0) - fprint(2, "%s: %s\n", argv0, buf); - else - fprint(2, "%s\n", buf); - exits(buf); -} - -void (*_sysfatal)(char *fmt, va_list arg) = _sysfatalimpl; - -void -sysfatal(char *fmt, ...) -{ - va_list arg; - - va_start(arg, fmt); - (*_sysfatal)(fmt, arg); - va_end(arg); -} - -int nbit, npix; -Image *pixel; -Rectangle crect[256]; - -Image *color[256]; - -void -eresized(int new) -{ - int x, y, i, n, nx, ny; - Rectangle r, b; - - if(new && getwindow(display, Refnone) < 0){ - fprint(2, "colors: can't reattach to window: %r\n"); - exits("resized"); - } - if(screen->depth > 8){ - n = 256; - nx = 16; - }else{ - n = 1<depth; - nx = 1<<(screen->depth/2); - } - - ny = n/nx; - draw(screen, screen->r, display->white, nil, ZP); - r = insetrect(screen->r, 5); - r.min.y+=20; - b.max.y=r.min.y; - for(i=n-1, y=0; y!=ny; y++){ - b.min.y=b.max.y; - b.max.y=r.min.y+(r.max.y-r.min.y)*(y+1)/ny; - b.max.x=r.min.x; - for(x=0; x!=nx; x++, --i){ - b.min.x=b.max.x; - b.max.x=r.min.x+(r.max.x-r.min.x)*(x+1)/nx; - crect[i]=insetrect(b, 1); - draw(screen, crect[i], color[i], nil, ZP); - } - } - flushimage(display, 1); -} - -char *buttons[] = -{ - "exit", - 0 -}; - -ulong -grey(int i) -{ - if(i < 0) - return grey(0); - if(i > 255) - return grey(255); - return (i<<16)+(i<<8)+i; -} - -Menu menu = -{ - buttons -}; - -int -dither[16] = { - 0, 8, 2, 10, - 12, 4, 14, 6, - 3, 11, 1, 9, - 15, 7, 13, 5 -}; - -void -main(int argc, char *argv[]) -{ - Point p; - Mouse m; - int i, j, k, l, n, ramp, prev; - char buf[100]; - char *fmt; - Image *dark; - ulong rgb; - - ramp = 0; - - fmt = "index %3d r %3lud g %3lud b %3lud 0x%.8luX "; -/* - ARGBEGIN{ - default: - goto Usage; - case 'x': - fmt = "index %2luX r %3luX g %3luX b %3luX 0x%.8luX "; - break; - case 'r': - ramp = 1; - break; - }ARGEND -*/ - argv0 = argv[0]; - if(argc != 1){ - Usage: - fprint(2, "Usage: %s [-rx]\n", argv0); - exits("usage"); - } - - if(initdraw(nil, nil, "colors") < 0) - sysfatal("initdraw failed: %r"); - einit(Emouse); - - for(i=0; i<256; i++){ - if(ramp){ - if(screen->chan == CMAP8){ - /* dither the fine grey */ - j = i-(i%17); - dark = allocimage(display, Rect(0,0,1,1), screen->chan, 1, (grey(j)<<8)+0xFF); - color[i] = allocimage(display, Rect(0,0,4,4), screen->chan, 1, (grey(j+17)<<8)+0xFF); - for(j=0; j<16; j++){ - k = j%4; - l = j/4; - if(dither[j] > (i%17)) - draw(color[i], Rect(k, l, k+1, l+1), dark, nil, ZP); - } - freeimage(dark); - }else - color[i] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, (grey(i)<<8)+0xFF); - }else - color[i] = allocimage(display, Rect(0,0,1,1), screen->chan, 1, (cmap2rgb(i)<<8)+0xFF); - if(color[i] == nil) - sysfatal("can't allocate image: %r"); - } - eresized(0); - prev = -1; - for(;;){ - m = emouse(); - switch(m.buttons){ - case 1: - while(m.buttons){ - if(screen->depth > 8) - n = 256; - else - n = 1<depth; - for(i=0; i!=n; i++) - if(i!=prev && ptinrect(m.xy, crect[i])){ - if(ramp) - rgb = grey(i); - else - rgb = cmap2rgb(i); - sprint(buf, fmt, - i, - (rgb>>16)&0xFF, - (rgb>>8)&0xFF, - rgb&0xFF, - (rgb<<8) | 0xFF); - p = addpt(screen->r.min, Pt(2,2)); - draw(screen, Rpt(p, addpt(p, stringsize(font, buf))), display->white, nil, p); - string(screen, p, display->black, ZP, font, buf); - prev=i; - break; - } - m = emouse(); - } - break; - - case 4: - switch(emenuhit(3, &m, &menu)){ - case 0: - exits(0); - } - } - } -} diff --git a/sys/src/ape/lib/draw/libc.h b/sys/src/ape/lib/draw/libc.h deleted file mode 100644 index f6c5e97a2..000000000 --- a/sys/src/ape/lib/draw/libc.h +++ /dev/null @@ -1,137 +0,0 @@ -#define _LOCK_EXTENSION -#define _QLOCK_EXTENSION -#define _BSD_EXTENSION -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef -struct Qid -{ - uvlong path; - ulong vers; - uchar type; -} Qid; - -typedef -struct Dir { - /* system-modified data */ - ushort type; /* server type */ - uint dev; /* server subtype */ - /* file data */ - Qid qid; /* unique id from server */ - ulong mode; /* permissions */ - ulong atime; /* last read time */ - ulong mtime; /* last write time */ - vlong length; /* file length: see */ - char *name; /* last element of path */ - char *uid; /* owner name */ - char *gid; /* group name */ - char *muid; /* last modifier name */ -} Dir; - -uint _convM2D(uchar*, uint, Dir*, char*); -uint _convD2M(Dir*, uchar*, uint); -Dir *_dirstat(char*); -int _dirwstat(char*, Dir*); -Dir *_dirfstat(int); -int _dirfwstat(int, Dir*); -long _dirread(int, Dir**); -long _dirreadall(int, Dir**); -void _nulldir(Dir*); -uint _sizeD2M(Dir*); - -typedef -struct Waitmsg -{ - int pid; /* of loved one */ - unsigned long time[3]; /* of loved one & descendants */ - char *msg; -} Waitmsg; - - -extern int _AWAIT(char*, int); -extern int _ALARM(unsigned long); -extern int _BIND(const char*, const char*, int); -extern int _CHDIR(const char*); -extern int _CLOSE(int); -extern int _CREATE(char*, int, unsigned long); -extern int _DUP(int, int); -extern int _ERRSTR(char*, unsigned int); -extern int _EXEC(char*, char*[]); -extern void _EXITS(char *); -extern int _FD2PATH(int, char*, int); -extern int _FAUTH(int, char*); -extern int _FSESSION(int, char*, int); -extern int _FSTAT(int, unsigned char*, int); -extern int _FWSTAT(int, unsigned char*, int); -extern int _MOUNT(int, int, const char*, int, const char*); -extern int _NOTED(int); -extern int _NOTIFY(int(*)(void*, char*)); -extern int _OPEN(const char*, int); -extern int _PIPE(int*); -extern long _PREAD(int, void*, long, long long); -extern long _PWRITE(int, void*, long, long long); -extern long _READ(int, void*, long); -extern int _REMOVE(const char*); -extern void* _RENDEZVOUS(void*, void*); -extern int _RFORK(int); -extern void* _SEGATTACH(int, char*, void*, unsigned long); -extern void* _SEGBRK(void*, void*); -extern int _SEGDETACH(void*); -extern int _SEGFLUSH(void*, unsigned long); -extern int _SEGFREE(void*, unsigned long); -extern long long _SEEK(int, long long, int); -extern int _SLEEP(long); -extern int _STAT(const char*, unsigned char*, int); -extern Waitmsg* _WAIT(void); -extern long _WRITE(int, const void*, long); -extern int _WSTAT(const char*, unsigned char*, int); -extern void *_MALLOCZ(int, int); -extern int _WERRSTR(char*, ...); -extern long _READN(int, void*, long); -extern int _IOUNIT(int); - -#define dirstat _dirstat -#define dirfstat _dirfstat - -#define OREAD 0 -#define OWRITE 1 -#define ORDWR 2 -#define OCEXEC 32 - -#define AREAD 4 -#define AWRITE 2 -#define AEXEC 1 -#define AEXIST 0 - -#define open _OPEN -#define close _CLOSE -#define read _READ -#define write _WRITE -#define _exits(s) _exit(s && *(char*)s ? 1 : 0) -#define exits(s) exit(s && *(char*)s ? 1 : 0) -#define create _CREATE -#define pread _PREAD -#define readn _READN -#define mallocz _MALLOCZ -#define iounit _IOUNIT - -/* assume being called as in event.c */ -#define postnote(x, pid, msg) kill(pid, SIGTERM) -#define atnotify(x, y) signal(SIGTERM, ekill) - -#define ERRMAX 128 - -extern void setmalloctag(void*, ulong); -extern ulong getcallerpc(void*); diff --git a/sys/src/ape/lib/draw/mkfile b/sys/src/ape/lib/draw/mkfile index 08b27d61f..9a635d614 100644 --- a/sys/src/ape/lib/draw/mkfile +++ b/sys/src/ape/lib/draw/mkfile @@ -70,10 +70,13 @@ UPDATE=\