X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=sys%2Finclude%2Flibc.h;h=ecc23c3432a290aaff0b6689362d5ca8149ac64f;hb=e934530ee4512f033952e4efa80a80058607b741;hp=d6c49aaeacb4523caecb3a0e82e1420d4254430c;hpb=a9060cc06bee66e12fe16644511f181a4b0cdbd3;p=plan9front.git diff --git a/sys/include/libc.h b/sys/include/libc.h index d6c49aaea..ecc23c343 100644 --- a/sys/include/libc.h +++ b/sys/include/libc.h @@ -41,10 +41,12 @@ extern int tokenize(char*, char**, int); enum { - UTFmax = 3, /* maximum bytes per rune */ + UTFmax = 4, /* maximum bytes per rune */ Runesync = 0x80, /* cannot represent part of a UTF sequence (<) */ Runeself = 0x80, /* rune and UTF sequences are the same (<) */ Runeerror = 0xFFFD, /* decoding error in UTF */ + Runemax = 0x10FFFF, /* 21 bit rune */ + Runemask = 0x1FFFFF, /* bits used by runes (see grep) */ }; /* @@ -95,10 +97,10 @@ extern ulong msize(void*); extern void* mallocalign(ulong, ulong, long, ulong); extern void* calloc(ulong, ulong); extern void* realloc(void*, ulong); -extern void setmalloctag(void*, ulong); -extern void setrealloctag(void*, ulong); -extern ulong getmalloctag(void*); -extern ulong getrealloctag(void*); +extern void setmalloctag(void*, uintptr); +extern void setrealloctag(void*, uintptr); +extern uintptr getmalloctag(void*); +extern uintptr getrealloctag(void*); extern void* malloctopoolblock(void*); /* @@ -177,16 +179,31 @@ extern Rune* runefmtstrflush(Fmt*); #pragma varargck argpos sprint 2 #pragma varargck type "lld" vlong +#pragma varargck type "llo" vlong #pragma varargck type "llx" vlong +#pragma varargck type "llb" vlong #pragma varargck type "lld" uvlong +#pragma varargck type "llo" uvlong #pragma varargck type "llx" uvlong +#pragma varargck type "llb" uvlong #pragma varargck type "ld" long +#pragma varargck type "lo" long #pragma varargck type "lx" long #pragma varargck type "lb" long #pragma varargck type "ld" ulong +#pragma varargck type "lo" ulong #pragma varargck type "lx" ulong #pragma varargck type "lb" ulong +#pragma varargck type "zd" intptr +#pragma varargck type "zo" intptr +#pragma varargck type "zx" intptr +#pragma varargck type "zb" intptr +#pragma varargck type "zd" uintptr +#pragma varargck type "zo" uintptr +#pragma varargck type "zx" uintptr +#pragma varargck type "zb" uintptr #pragma varargck type "d" int +#pragma varargck type "o" int #pragma varargck type "x" int #pragma varargck type "c" int #pragma varargck type "C" int @@ -297,22 +314,44 @@ extern double fmod(double, double); /* * Time-of-day */ +typedef struct Tzone Tzone; +#pragma incomplete Tzone + typedef struct Tm { - int sec; - int min; - int hour; - int mday; - int mon; - int year; - int wday; - int yday; - char zone[4]; - int tzoff; + int nsec; /* nseconds (range 0...1e9) */ + int sec; /* seconds (range 0..60) */ + int min; /* minutes (0..59) */ + int hour; /* hours (0..23) */ + int mday; /* day of the month (1..31) */ + int mon; /* month of the year (0..11) */ + int year; /* year A.D. */ + int wday; /* day of week (0..6, Sunday = 0) */ + int yday; /* day of year (0..365) */ + char zone[16]; /* time zone name */ + int tzoff; /* time zone delta from GMT */ + Tzone *tz; /* time zone associated with this date */ } Tm; +typedef +struct Tmfmt { + char *fmt; + Tm *tm; +} Tmfmt; + +#pragma varargck type "τ" Tmfmt + +extern Tzone* tzload(char *name); +extern Tm* tmnow(Tm*, Tzone*); +extern Tm* tmtime(Tm*, vlong, Tzone*); +extern Tm* tmtimens(Tm*, vlong, int, Tzone*); +extern Tm* tmparse(Tm*, char*, char*, Tzone*, char **ep); +extern vlong tmnorm(Tm*); +extern Tmfmt tmfmt(Tm*, char*); +extern void tmfmtinstall(void); + extern Tm* gmtime(long); extern Tm* localtime(long); extern char* asctime(Tm*); @@ -346,12 +385,24 @@ extern double charstod(int(*)(void*), void*); extern char* cleanname(char*); extern int decrypt(void*, void*, int); extern int encrypt(void*, void*, int); + extern int dec64(uchar*, int, char*, int); extern int enc64(char*, int, uchar*, int); +extern int dec64x(uchar*, int, char*, int, int (*)(int)); +extern int enc64x(char*, int, uchar*, int, int (*)(int)); extern int dec32(uchar*, int, char*, int); extern int enc32(char*, int, uchar*, int); +extern int dec32x(uchar*, int, char*, int, int (*)(int)); +extern int enc32x(char*, int, uchar*, int, int (*)(int)); extern int dec16(uchar*, int, char*, int); extern int enc16(char*, int, uchar*, int); +extern int dec64chr(int); +extern int enc64chr(int); +extern int dec32chr(int); +extern int enc32chr(int); +extern int dec16chr(int); +extern int enc16chr(int); + extern int encodefmt(Fmt*); extern void exits(char*); extern double frexp(double, int*); @@ -418,8 +469,8 @@ typedef struct QLp QLp; struct QLp { int inuse; + int state; QLp *next; - char state; }; typedef @@ -465,7 +516,9 @@ extern void rsleep(Rendez*); /* unlocks r->l, sleeps, locks r->l again */ extern int rwakeup(Rendez*); extern int rwakeupall(Rendez*); extern void** privalloc(void); -extern void privfree(void**); + +extern void procsetname(char*, ...); +#pragma varargck argpos procsetname 1 /* * network dialing @@ -505,6 +558,9 @@ struct NetConnInfo extern NetConnInfo* getnetconninfo(char*, int); extern void freenetconninfo(NetConnInfo*); +extern int idn2utf(char*, char*, int); +extern int utf2idn(char*, char*, int); + /* * system calls * @@ -670,6 +726,7 @@ extern int semacquire(long*, int); extern long semrelease(long*, long); extern int sleep(long); extern int stat(char*, uchar*, int); +extern int tsemacquire(long*, ulong); extern Waitmsg* wait(void); extern int waitpid(void); extern long write(int, void*, long); @@ -691,6 +748,9 @@ extern char* sysname(void); extern void werrstr(char*, ...); #pragma varargck argpos werrstr 1 +extern long ainc(long*); +extern long adec(long*); + extern char *argv0; #define ARGBEGIN for((argv0||(argv0=*argv)),argv++,argc--;\ argv[0] && argv[0][0]=='-' && argv[0][1];\