You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

205 lines
3.2 KiB

  1. /*
  2. * libcucul Unicode canvas library
  3. * libcaca ASCII-Art library
  4. * Copyright (c) 2006 Sam Hocevar <sam@zoy.org>
  5. * All Rights Reserved
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the Do What The Fuck You Want To
  9. * Public License, Version 2, as published by Sam Hocevar. See
  10. * http://sam.zoy.org/wtfpl/COPYING for more details.
  11. */
  12. /** \file kernel.c
  13. * \version \$Id$
  14. * \author Sam Hocevar <sam@zoy.org>
  15. * \brief Kernel features
  16. *
  17. * This file contains replacement functions for the standard C library
  18. * that must be used when building libcucul and libcaca into a kernel.
  19. */
  20. #include "config.h"
  21. #ifdef __KERNEL__
  22. /* Our memory mapping */
  23. static uint32_t *freemem = (uint32_t*) 0x00200000;
  24. /* Multiboot kernel entry point */
  25. void cmain(unsigned long int magic, unsigned long int addr)
  26. {
  27. char *argv[] = { NULL };
  28. int argc = 0;
  29. main(argc, argv);
  30. }
  31. /* stdlib.h functions */
  32. void *malloc(size_t size)
  33. {
  34. uint32_t *p = freemem;
  35. size = (size + 0x7) / 4;
  36. *p = size;
  37. freemem += size + 1;
  38. return p + 1;
  39. }
  40. void free(void *ptr)
  41. {
  42. return;
  43. }
  44. void *realloc(void *ptr, size_t size)
  45. {
  46. uint32_t oldsize = ((uint32_t *)ptr)[-1];
  47. void *p;
  48. if(oldsize >= size)
  49. return ptr;
  50. p = malloc(size);
  51. memcpy(p, ptr, oldsize);
  52. return p;
  53. }
  54. char *getenv(const char *name)
  55. {
  56. return NULL;
  57. }
  58. int rand(void)
  59. {
  60. static int seed = 0x68743284;
  61. seed = (seed * 0x7f32ba17) ^ 0xf893a735;
  62. return seed % RAND_MAX;
  63. }
  64. int abs(int j)
  65. {
  66. if(j < 0)
  67. return -j;
  68. return j;
  69. }
  70. void exit(int status)
  71. {
  72. /* FIXME: reboot? */
  73. while(1);
  74. }
  75. /* string.h functions */
  76. void *memset(void *s, int c, size_t n)
  77. {
  78. uint8_t *ptr = s;
  79. while(n--)
  80. *ptr++ = c;
  81. return s;
  82. }
  83. void *memcpy(void *dest, const void *src, size_t n)
  84. {
  85. uint8_t *destptr = dest;
  86. uint8_t const *srcptr = src;
  87. while(n--)
  88. *destptr++ = *srcptr++;
  89. return dest;
  90. }
  91. size_t strlen(const char *s)
  92. {
  93. int len = 0;
  94. while(*s++)
  95. len++;
  96. return len;
  97. }
  98. int strcasecmp(const char *s1, const char *s2)
  99. {
  100. /* FIXME */
  101. return -1;
  102. }
  103. /* stdarg.h functions */
  104. int vsnprintf(char *str, size_t size, const char *format, va_list ap)
  105. {
  106. /* FIXME */
  107. return 0;
  108. }
  109. /* stdio.h functions */
  110. FILE *fopen(const char *path, const char *mode)
  111. {
  112. /* FIXME */
  113. return NULL;
  114. }
  115. int feof(FILE *stream)
  116. {
  117. /* FIXME */
  118. return 0;
  119. }
  120. char *fgets(char *s, int size, FILE *stream)
  121. {
  122. /* FIXME */
  123. return NULL;
  124. }
  125. int fclose(FILE *fp)
  126. {
  127. /* FIXME */
  128. return 0;
  129. }
  130. int printf(const char *format, ...)
  131. {
  132. /* FIXME */
  133. return 0;
  134. }
  135. int sprintf(char *str, const char *format, ...)
  136. {
  137. /* FIXME */
  138. return 0;
  139. }
  140. int sscanf(const char *str, const char *format, ...)
  141. {
  142. /* FIXME */
  143. return 0;
  144. }
  145. /* unistd.h functions */
  146. void usleep(unsigned long usec)
  147. {
  148. /* FIXME */
  149. return;
  150. }
  151. /* time.h functions */
  152. int gettimeofday(struct timeval *tv, struct timezone *tz)
  153. {
  154. static int usec = 0;
  155. static int sec = 0;
  156. /* FIXME */
  157. usec += 10000;
  158. if(usec > 1000000)
  159. {
  160. sec++;
  161. usec -= 1000000;
  162. }
  163. tv->tv_sec = sec;
  164. tv->tv_usec = usec;
  165. return 0;
  166. }
  167. #endif /* __KERNEL__ */