ref: 3238f124b81e53762e5c2e021630de20bdb7cbd9
parent: ea6910b70680cd8a0d77e413f116e758c07997a5
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Apr 9 23:01:37 EDT 2016
ape: move compatibility libc.h to lib9 directory and incooperate needed functions for ape/mp (wip)
--- /dev/null
+++ b/sys/src/ape/lib/9/argv0.c
@@ -1,0 +1,3 @@
+#include <lib9.h>
+
+char *argv0;
--- /dev/null
+++ b/sys/src/ape/lib/9/libc.h
@@ -1,0 +1,153 @@
+#define _LOCK_EXTENSION
+#define _QLOCK_EXTENSION
+#define _BSD_EXTENSION
+#include <stdint.h>
+#include <sys/types.h>
+#include <lock.h>
+#include <qlock.h>
+#include <lib9.h>
+#include <stdlib.h>
+#include <string.h>
+#include <bsd.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <assert.h>
+#include <utf.h>
+#include <fmt.h>
+#include <signal.h>
+
+#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 <u.h> */
+ 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 */
--- a/sys/src/ape/lib/9/mkfile
+++ b/sys/src/ape/lib/9/mkfile
@@ -2,7 +2,8 @@
<$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 @@
segflush.$O\
segfree.$O\
setmalloctag.$O\
+ setrealloctag.$O\
+ sysfatal.$O\
+ tokenize.$O\
+ truerand.$O\
+ u16.$O\
+ u32.$O\
+ u64.$O\
unmount.$O\
</sys/src/cmd/mksyslib
@@ -28,3 +36,21 @@
%.$O: $objtype/%.c
$CC $CFLAGS $prereq
+
+sysfatal.$O: ../../../libc/9sys/sysfatal.c
+ $CC $CFLAGS -I. ../../../libc/9sys/sysfatal.c
+
+tokenize.$O: ../../../libc/port/tokenize.c
+ $CC $CFLAGS -I. ../../../libc/port/tokenize.c
+
+truerand.$O: ../../../libc/9sys/truerand.c
+ $CC $CFLAGS -I. ../../../libc/9sys/truerand.c
+
+u16.$O: ../../../libc/port/u16.c
+ $CC $CFLAGS -I. ../../../libc/port/u16.c
+
+u32.$O: ../../../libc/port/u32.c
+ $CC $CFLAGS -I. ../../../libc/port/u32.c
+
+u64.$O: ../../../libc/port/u64.c
+ $CC $CFLAGS -I. ../../../libc/port/u64.c
--- a/sys/src/ape/lib/9/setmalloctag.c
+++ b/sys/src/ape/lib/9/setmalloctag.c
@@ -1,4 +1,6 @@
+#include <stdint.h>
+
void
-setmalloctag(void*, unsigned long)
+setmalloctag(void*, uintptr_t)
{
}
--- /dev/null
+++ b/sys/src/ape/lib/9/setrealloctag.c
@@ -1,0 +1,6 @@
+#include <stdint.h>
+
+void
+setrealloctag(void*, uintptr_t)
+{
+}
--- a/sys/src/ape/lib/draw/colors.c
+++ /dev/null
@@ -1,203 +1,0 @@
-#include <u.h>
-#include <libc.h>
-#include <draw.h>
-#include <event.h>
-
-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<<screen->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<<screen->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);
- }
- }
- }
-}
--- a/sys/src/ape/lib/draw/libc.h
+++ /dev/null
@@ -1,137 +1,0 @@
-#define _LOCK_EXTENSION
-#define _QLOCK_EXTENSION
-#define _BSD_EXTENSION
-#include <sys/types.h>
-#include <lock.h>
-#include <qlock.h>
-#include <lib9.h>
-#include <stdlib.h>
-#include <string.h>
-#include <bsd.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <assert.h>
-#include <utf.h>
-#include <fmt.h>
-#include <signal.h>
-
-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 <u.h> */
- 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*);
--- a/sys/src/ape/lib/draw/mkfile
+++ b/sys/src/ape/lib/draw/mkfile
@@ -70,10 +70,13 @@
</sys/src/cmd/mksyslib
-CFLAGS=-c $CFLAGS -D_POSIX_SOURCE -D_PLAN9_SOURCE -I.
+CFLAGS=-c $CFLAGS -D_POSIX_SOURCE -D_PLAN9_SOURCE -I../9
%.$O: /sys/src/libdraw/%.c
$CC $CFLAGS /sys/src/libdraw/$stem.c
+
+colors.$O: /sys/src/cmd/colors.c
+ $CC $CFLAGS /sys/src/cmd/colors.c
$O.colors: colors.$O
$LD -o $target colors.$O