lib.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. /*
  10. * functions (possibly) linked in, complete, from libc.
  11. */
  12. /*
  13. * mem routines
  14. */
  15. extern void* memccpy(void*, void*, int, uint32_t);
  16. extern void* memset(void*, int, uint32_t);
  17. extern int memcmp(void*, void*, uint32_t);
  18. extern void* memmove(void*, void*, uint32_t);
  19. extern void* memchr(void*, int, uint32_t);
  20. /*
  21. * string routines
  22. */
  23. extern char* strcat(char*, char*);
  24. extern char* strchr(char*, int);
  25. extern int strcmp(char*, char*);
  26. extern char* strcpy(char*, char*);
  27. extern char* strecpy(char*, char*, char*);
  28. extern char* strncat(char*, char*, long);
  29. extern char* strncpy(char*, char*, long);
  30. extern int strncmp(char*, char*, long);
  31. extern long strlen(char*);
  32. extern char* strrchr(char*, char);
  33. extern char* strstr(char*, char*);
  34. /*
  35. * print routines
  36. */
  37. typedef struct Fmt Fmt;
  38. typedef int (*Fmts)(Fmt*);
  39. struct Fmt{
  40. uchar runes; /* output buffer is runes or chars? */
  41. void *start; /* of buffer */
  42. void *to; /* current place in the buffer */
  43. void *stop; /* end of the buffer; overwritten if flush fails */
  44. int (*flush)(Fmt *); /* called when to == stop */
  45. void *farg; /* to make flush a closure */
  46. int nfmt; /* num chars formatted so far */
  47. va_list args; /* args passed to dofmt */
  48. int r; /* % format Rune */
  49. int width;
  50. int prec;
  51. uint32_t flags;
  52. };
  53. extern int print(char*, ...);
  54. extern char* vseprint(char*, char*, char*, va_list);
  55. extern int sprint(char*, char*, ...);
  56. extern int snprint(char*, int, char*, ...);
  57. extern int fmtinstall(int, int (*)(Fmt*));
  58. extern int fmtstrcpy(Fmt*, char*);
  59. #pragma varargck argpos fmtprint 2
  60. #pragma varargck argpos print 1
  61. #pragma varargck argpos seprint 3
  62. #pragma varargck argpos snprint 3
  63. #pragma varargck argpos sprint 2
  64. #pragma varargck type "H" void*
  65. #pragma varargck type "lld" vlong
  66. #pragma varargck type "llx" vlong
  67. #pragma varargck type "lld" uvlong
  68. #pragma varargck type "llx" uvlong
  69. #pragma varargck type "ld" long
  70. #pragma varargck type "lx" long
  71. #pragma varargck type "ld" ulong
  72. #pragma varargck type "lx" ulong
  73. #pragma varargck type "d" int
  74. #pragma varargck type "x" int
  75. #pragma varargck type "c" int
  76. #pragma varargck type "C" int
  77. #pragma varargck type "d" uint
  78. #pragma varargck type "x" uint
  79. #pragma varargck type "c" uint
  80. #pragma varargck type "C" uint
  81. #pragma varargck type "f" double
  82. #pragma varargck type "e" double
  83. #pragma varargck type "g" double
  84. #pragma varargck type "s" char*
  85. #pragma varargck type "q" char*
  86. #pragma varargck type "S" Rune*
  87. #pragma varargck type "Q" Rune*
  88. #pragma varargck type "r" void
  89. #pragma varargck type "%" void
  90. #pragma varargck type "|" int
  91. #pragma varargck type "p" uintptr
  92. #pragma varargck type "p" void*
  93. #pragma varargck type "lux" void*
  94. #pragma varargck type "E" uchar*
  95. #define PRINTSIZE 256
  96. /*
  97. * one-of-a-kind
  98. */
  99. extern int atoi(char*);
  100. extern uint32_t getcallerpc(void*);
  101. extern long strtol(char*, char**, int);
  102. extern uint32_t strtoul(char*, char**, int);
  103. extern char end[];
  104. #define NAMELEN 28