From afa2107355239f4f277b4b1f7365a63ee72a8630 Mon Sep 17 00:00:00 2001 From: Albom Date: Sun, 30 Jan 2011 12:26:40 +0000 Subject: [PATCH] 'Donkey' game src is updated. Could be compiled automatically. git-svn-id: svn://kolibrios.org@1808 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/games/donkey/c_code.c | 9 +- programs/games/donkey/compile.bat | 13 +- programs/games/donkey/string.h | 9 - programs/games/donkey/system/gblib.c | 236 +++++++++++ programs/games/donkey/{ => system}/gblib.h | 9 + programs/games/donkey/system/kolibri.c | 422 +++++++++++++++++++ programs/games/donkey/{ => system}/kolibri.h | 21 +- programs/games/donkey/system/stdlib.c | 33 ++ programs/games/donkey/{ => system}/stdlib.h | 0 programs/games/donkey/system/string.c | 124 ++++++ programs/games/donkey/system/string.h | 15 + 11 files changed, 873 insertions(+), 18 deletions(-) delete mode 100644 programs/games/donkey/string.h create mode 100644 programs/games/donkey/system/gblib.c rename programs/games/donkey/{ => system}/gblib.h (88%) create mode 100644 programs/games/donkey/system/kolibri.c rename programs/games/donkey/{ => system}/kolibri.h (72%) create mode 100644 programs/games/donkey/system/stdlib.c rename programs/games/donkey/{ => system}/stdlib.h (100%) create mode 100644 programs/games/donkey/system/string.c create mode 100644 programs/games/donkey/system/string.h diff --git a/programs/games/donkey/c_code.c b/programs/games/donkey/c_code.c index 40541e3eb..87114a071 100644 --- a/programs/games/donkey/c_code.c +++ b/programs/games/donkey/c_code.c @@ -1,10 +1,9 @@ -#include "kolibri.h" -#include "stdio.h" -#include "stdlib.h" -#include "string.h" +#include "system/kolibri.h" +#include "system/stdlib.h" +#include "system/string.h" -#include "gblib.h" +#include "system/gblib.h" #include "car_01.h" #include "car_02.h" diff --git a/programs/games/donkey/compile.bat b/programs/games/donkey/compile.bat index 41a0526c5..6111249ed 100644 --- a/programs/games/donkey/compile.bat +++ b/programs/games/donkey/compile.bat @@ -1,5 +1,12 @@ -fasm asm_code.asm +del *.o +fasm asm_code.asm asm_code.o gcc -c c_code.c -ld -nostdlib -T kolibri.ld -o donkey.kex asm_code.obj kolibri.o stdlib.o string.o gblib.o c_code.o -objcopy donkey.kex -O binary +gcc -c system/kolibri.c +gcc -c system/stdlib.c +gcc -c system/string.c +gcc -c system/gblib.c +ld -nostdlib -T kolibri.ld -o donkey asm_code.o kolibri.o stdlib.o string.o gblib.o c_code.o +objcopy donkey -O binary +kpack donkey +del *.o pause \ No newline at end of file diff --git a/programs/games/donkey/string.h b/programs/games/donkey/string.h deleted file mode 100644 index dc8862784..000000000 --- a/programs/games/donkey/string.h +++ /dev/null @@ -1,9 +0,0 @@ - -void* memset(void *mem, int c, unsigned size); -void* memcpy(void *dst, const void *src, unsigned size); - -char* strcat(char* strDest, const char* strSource); -int strcmp(const char* string1, const char* string2); -char* strcpy(char *strDest, const char *strSource); -char* strncpy(char *strDest, const char *strSource, unsigned n); -int strlen(const char* string); diff --git a/programs/games/donkey/system/gblib.c b/programs/games/donkey/system/gblib.c new file mode 100644 index 000000000..cba0e34ff --- /dev/null +++ b/programs/games/donkey/system/gblib.c @@ -0,0 +1,236 @@ + +#include "gblib.h" + +//========================= + +void gb_pixel_set(GB_BMP *b, int x, int y, unsigned c) +{ +// поставить точку + +unsigned s; + +if ((x+1 > b->w )||(y+1 > b->h)) + return; + +if ((x < 0)||(y < 0)) + return; + +s = 3*( y*(b->w) + x ); + +*( b -> bmp + s ) = c & 0xff; +*( b -> bmp + s + 1) = (c >> 8) & 0xff; +*( b -> bmp + s + 2) = (c >> 16)& 0xff; + +} + +//========================= + +int gb_pixel_get(GB_BMP *b, int x, int y, unsigned *c) +{ +// получить точку + +unsigned red, green, blue, s; + +if ((x < 0) || (y < 0)) + return 0; + +if ((x+1 > b->w )||(y+1 > b->h)) + return 0; + +s = 3*( y*(b->w) + x ); + +blue = *( b -> bmp + s ); +green = *( b -> bmp + s + 1); +red = *( b -> bmp + s + 2); + +*c = ((red << 16) & 0xff0000) | ((green << 8) & 0xff00) | (blue & 0xff); + +return 1; +} + +//========================= + +void gb_line(GB_BMP *b, int x1, int y1, int x2, int y2, unsigned c) +{ +// линия заданного цвета с использованием +// алгоpитма Брезенхэма + +int t, dist; +int xerr=0, yerr=0, delta_x, delta_y; +int incx, incy; + +// вычисление pасстояния в обоих напpавлениях +delta_x = x2 - x1; +delta_y = y2 - y1; + +// опpеделение напpавления шага, +// шаг вычисляется либо по веpтикальной, либо гоpизонтальной +// линии +if (delta_x > 0) + incx = 1; +else + if (0 == delta_x) + incx = 0; + else + incx = -1; + +if (delta_y > 0) + incy = 1; +else + if ( 0 == delta_y) + incy = 0; + else + incy = -1; + +// опpеделение наибольшего pасстояния +if (delta_x < 0) + delta_x *= -1; +if (delta_y < 0) + delta_y *= -1; + +if (delta_x > delta_y) + dist = delta_x; +else + dist = delta_y; + + +// вычеpчивание линии +for (t = 0; t <= dist+1; t++) + { + gb_pixel_set(b, x1, y1, c); + xerr+=delta_x; + yerr+=delta_y; + + if (xerr > dist) + { + xerr -= dist; + x1 += incx; + } + + if (yerr > dist) + { + yerr -= dist; + y1 += incy; + } + + } +} + +//========================= + +void gb_rect(GB_BMP *b, int x, int y, int w, int h, unsigned c) +{ +// прямоугольник + +gb_line (b, x, y, x+w-1, y, c); +gb_line (b, x, y+h-1, x+w-1, y+h-1, c); +gb_line (b, x, y, x, y+h-1, c); +gb_line (b, x+w-1, y, x+w-1, y+h-1, c); +} + +//========================= + +void gb_circle(GB_BMP *b, int x, int y, int r, unsigned c) +{ + +int _x; +int _y; +int d; + +_x = 0; +_y = r; +d = 3-2*r; +while( _y >= _x) + { + gb_pixel_set(b, _x + x, _y + y, c); + gb_pixel_set(b, _x + x, -_y + y, c); + gb_pixel_set(b, -_x + x, _y + y, c); + gb_pixel_set(b, -_x + x, -_y + y, c); + gb_pixel_set(b, _y + x, _x + y, c); + gb_pixel_set(b, _y + x, -_x + y, c); + gb_pixel_set(b, -_y + x, _x + y, c); + gb_pixel_set(b, -_y + x, -_x + y, c); + if( d<0 ) + d = d+4*_x+6; + else + { + d = d+4*(_x-_y)+10; + _y--; + } + _x++; + } + +} + +//========================= + +void gb_bar(GB_BMP *b, int x, int y, int w, int h, unsigned c) +{ +// закрашенный прямоугольник + +unsigned s; +int i, j; + +if ((x > b->w)||(y > b->h)) + return; + +for (j = 0; j < w; j++) +for (i = 0; i < h; i++) +// gb_pixel_set(b, x+j, y+i, c); + { + s = 3*( (y+i)*(b->w) + x + j ); + + *( b -> bmp + s ) = c & 0xff; + *( b -> bmp + s + 1) = (c >> 8) & 0xff; + *( b -> bmp + s + 2) = (c >> 16)& 0xff; + + } +} + +//========================= + +void gb_image_set(GB_BMP *b_dest, int x_d, int y_d, GB_BMP *b_src, int x_s, int y_s, int w, int h) +{ +// вывод изображения + +int x, y; +unsigned d; + +if ((x_d > b_dest->w)||(y_d > b_dest->h)) + return; + +if ((x_s > b_src->w)||(y_s > b_src->h)) + return; + +for (y = 0; y < h; y++) + for (x = 0; x < w; x++) + if ( gb_pixel_get(b_src, x_s+x, y_s+y, &d) ) + gb_pixel_set(b_dest, x_d+x, y_d+y, d); + + +} + +//========================= + +void gb_image_set_t(GB_BMP *b_dest, int x_d, int y_d, GB_BMP *b_src, int x_s, int y_s, int w, int h, unsigned c) +{ +// вывод изображения с прозрачным цветом + +int x, y; +unsigned d; + +if ((x_d > b_dest->w)||(y_d > b_dest->h)) + return; + +if ((x_s > b_src->w)||(y_s > b_src->h)) + return; + +for (y = 0; y < h; y++) + for (x = 0; x < w; x++) + if ( gb_pixel_get(b_src, x_s+x, y_s+y, &d) ) + if (c != d) + gb_pixel_set(b_dest, x_d+x, y_d+y, d); + + +} + diff --git a/programs/games/donkey/gblib.h b/programs/games/donkey/system/gblib.h similarity index 88% rename from programs/games/donkey/gblib.h rename to programs/games/donkey/system/gblib.h index 6550e5a9a..613828111 100644 --- a/programs/games/donkey/gblib.h +++ b/programs/games/donkey/system/gblib.h @@ -7,10 +7,19 @@ char *bmp __attribute__((packed)); char *alpha __attribute__((packed)); } GB_BMP __attribute__((packed)); + void gb_pixel_set(GB_BMP *b, int x, int y, unsigned c); + int gb_pixel_get(GB_BMP *b, int x, int y, unsigned *c); + void gb_line(GB_BMP *b, int x1, int y1, int x2, int y2, unsigned c); + void gb_rect(GB_BMP *b, int x, int y, int w, int h, unsigned c); + void gb_bar(GB_BMP *b, int x, int y, int w, int h, unsigned c); + +void gb_circle(GB_BMP *b, int x, int y, int r, unsigned c); + void gb_image_set(GB_BMP *b_dest, int x_d, int y_d, GB_BMP *b_src, int x_s, int y_s, int w, int h); + void gb_image_set_t(GB_BMP *b_dest, int x_d, int y_d, GB_BMP *b_src, int x_s, int y_s, int w, int h, unsigned c); diff --git a/programs/games/donkey/system/kolibri.c b/programs/games/donkey/system/kolibri.c new file mode 100644 index 000000000..56328796a --- /dev/null +++ b/programs/games/donkey/system/kolibri.c @@ -0,0 +1,422 @@ + +#include "kolibri.h" +#include "string.h" + + +extern char KOL_PATH[256]; +extern char KOL_PARAM[256]; +extern char KOL_DIR[256]; + + +void kol_exit() +{ +asm ("int $0x40"::"a"(-1)); +} + + +void kol_sleep(unsigned d) +{ +asm ("int $0x40"::"a"(5), "b"(d)); +} + + +void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c) +{ +asm ("nop"::"a"(0), "b"(x*65536+w), "c"(y*65536+h), "d"(c)); +asm ("movl $0xffffff, %esi \n int $0x40"); +} + + +void kol_wnd_move(unsigned x, unsigned y) +{ +asm ("nop"::"a"(67), "b"(x), "c"(y)); +asm ("movl $-1, %edx \n movl $-1, %esi \n int $0x40"); +} + + +void kol_event_mask(unsigned e) +{ +asm ("int $0x40"::"a"(40), "b"(e)); +} + + +unsigned kol_event_wait() +{ +asm ("int $0x40"::"a"(10)); +} + + +unsigned kol_event_wait_time(unsigned time) +{ +asm ("int $0x40"::"a"(23), "b"(time)); +} + + +unsigned kol_event_check() +{ +asm ("int $0x40"::"a"(11)); +} + + +void kol_paint_start() +{ +asm ("int $0x40"::"a"(12), "b"(1)); +} + + +void kol_paint_end() +{ +asm ("int $0x40"::"a"(12), "b"(2)); +} + + +void kol_paint_pixel(unsigned x, unsigned y, unsigned c) +{ +asm ("int $0x40"::"a"(1), "b"(x), "c"(y), "d"(c)); +} + + +void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c) +{ +asm ("int $0x40"::"a"(13), "b"(x*65536+w), "c"(y*65536+h), "d"(c)); +} + + +void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c) +{ +asm ("int $0x40"::"a"(38), "b"(x1*65536+x2), "c"(y1*65536+y2), "d"(c)); +} + + +void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c) +{ +asm ("int $0x40"::"a"(4), "b"(x*65536+y), "c"(c), "d"(s)); +} + + +void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d) +{ +asm ("int $0x40"::"a"(7), "c"(w*65536+h), "d"(x*65536+y), "b"(d)); +} + + +void kol_paint_image_pal(unsigned x, unsigned y, unsigned w, unsigned h, char *d, unsigned *palette) +{ +asm ("nop"::"c"(w*65536+h), "d"(x*65536+y), "b"(d)); +asm ("nop"::"a"(palette)); +asm ("movl %eax, %edi"); +asm ("xor %eax, %eax"); +asm ("movl %eax, %ebp"); +asm ("pushl $8"); +asm ("popl %esi"); +asm ("int $0x40"::"a"(65)); +} + + +unsigned kol_key_get() +{ +asm ("int $0x40"::"a"(2)); +} + + +unsigned kol_key_control() +{ +asm ("int $0x40"::"a"(66), "b"(3)); +} + + +void kol_key_lang_set(unsigned lang) +{ +asm ("int $0x40"::"a"(21), "b"(2), "c"(9), "d"(lang)); +} + + +unsigned kol_key_lang_get() +{ +asm ("int $0x40"::"a"(26), "b"(2), "c"(9)); +} + + +void kol_key_mode_set(unsigned mode) +{ +asm ("int $0x40"::"a"(66), "b"(1), "c"(mode)); +} + + +unsigned kol_key_mode_get() +{ +asm ("int $0x40"::"a"(66), "b"(2)); +} + + +unsigned kol_btn_get() +{ +asm ("int $0x40"::"a"(17)); +} + + +void kol_btn_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned d, unsigned c) +{ +asm ("nop"::"b"(x*65536+w), "c"(y*65536+h), "d"(d)); +asm ("nop"::"a"(c)); +asm ("movl %eax, %esi"); +asm ("int $0x40"::"a"(8)); +} + + +void kol_btn_type(unsigned t) +{ +asm ("int $0x40"::"a"(48), "b"(1), "c"(t)); +} + + +void kol_wnd_caption(char *s) +{ +asm ("int $0x40"::"a"(71), "b"(1), "c"(s)); +} + + +unsigned kol_mouse_pos() +{ +asm ("int $0x40"::"a"(37), "b"(0)); +} + + +unsigned kol_mouse_posw() +{ +asm ("int $0x40"::"a"(37), "b"(1)); +} + + +unsigned kol_mouse_btn() +{ +asm ("int $0x40"::"a"(37), "b"(2)); +} + + +void kol_board_putc(char c) +{ +asm ("int $0x40"::"a"(63), "b"(1), "c"(c)); +} + + +void kol_board_puts(char *s) +{ +unsigned i; +i = 0; +while (*(s+i)) + { + asm ("int $0x40"::"a"(63), "b"(1), "c"(*(s+i))); + i++; + } +} + + +void kol_board_puti(int n) +{ +char c; +int i = 0; +do + { + c = n % 10 + '0'; + asm ("int $0x40"::"a"(63), "b"(1), "c"(c)); + i++; + } + while ((n /= 10) > 0); +} + + +int kol_file_70(kol_struct70 *k) +{ +asm ("int $0x40"::"a"(70), "b"(k)); +} + + +kol_struct_import* kol_cofflib_load(char *name) +{ +asm ("int $0x40"::"a"(68), "b"(19), "c"(name)); +} + + +void* kol_cofflib_procload (kol_struct_import *imp, char *name) +{ +int i; +for (i=0;;i++) + if ( NULL == ((imp+i) -> name)) + break; + else + if ( 0 == strcmp(name, (imp+i)->name) ) + return (imp+i)->data; +return NULL; +} + + +unsigned kol_cofflib_procnum (kol_struct_import *imp) +{ +unsigned i, n; + +for (i=n=0;;i++) + if ( NULL == ((imp+i) -> name)) + break; + else + n++; + +return n; +} + + +void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n) +{ +unsigned i; +*name = 0; + +for (i=0;;i++) + if ( NULL == ((imp+i) -> name)) + break; + else + if ( i == n ) + { + strcpy(name, ((imp+i)->name)); + break; + } + +} + + +unsigned kol_system_cpufreq() +{ +asm ("int $0x40"::"a"(18), "b"(5)); +} + + +unsigned kol_system_mem() +{ +asm ("int $0x40"::"a"(18), "b"(17)); +} + + +unsigned kol_system_memfree() +{ +asm ("int $0x40"::"a"(18), "b"(16)); +} + + +unsigned kol_system_time_get() +{ +asm ("int $0x40"::"a"(3)); +} + + +unsigned kol_system_date_get() +{ +asm ("int $0x40"::"a"(29)); +} + + +unsigned kol_system_end(unsigned param) +{ +asm ("int $0x40"::"a"(18), "b"(9), "c"(param)); +} + + +void kol_path_file2dir(char *dir, char *fname) +{ +unsigned i; +strcpy (dir, fname); +for ( i = strlen(dir);; --i) + if ( '/' == dir[i]) + { + dir[i] = '\0'; + return; + } +} + + +void kol_path_full(char *full, char *fname) +{ +char temp[256]; + +switch (*fname) +{ + +case '/': + strncpy(temp, fname+1, 2); + temp[2]=0; + if ( (!strcmp("rd", temp)) || (!strcmp("hd", temp)) || (!strcmp("cd", temp)) ) + strcpy (full, fname); + break; + +case '.': + break; + +default: + break; + +}; + +} + + + +void kol_screen_wait_rr() +{ +asm ("int $0x40"::"a"(18), "b"(14)); +} + + + +void kol_screen_get_size(unsigned *w, unsigned *h) +{ +unsigned size; +asm ("int $0x40":"=a"(size):"a"(14)); +*w = size / 65536; +*h = size % 65536; +} + + + +unsigned kol_skin_height() +{ +asm ("int $0x40"::"a"(48), "b"(4)); +} + + +unsigned kol_thread_start(unsigned start, unsigned stack) +{ +asm ("int $0x40"::"a"(51), "b"(1), "c"(start), "d"(stack)); +} + + +unsigned kol_time_tick() +{ +asm ("int $0x40"::"a"(26), "b"(9)); +} + + +unsigned kol_sound_speaker(char data[]) +{ +asm ("movl %0, %%esi"::"a"(data)); +asm ("int $0x40"::"a"(55), "b"(55)); +} + + +unsigned kol_process_info(unsigned slot, char buf1k[]) +{ +asm ("int $0x40"::"a"(9), "b"(buf1k), "c"(slot)); +} + + +int kol_process_kill_pid(unsigned process) +{ +asm ("int $0x40"::"a"(18), "b"(18), "c"(process)); +} + +int kol_kill_process(unsigned process) +{ +asm ("int $0x40"::"a"(18), "b"(2), "c"(process)); +} + +void kol_get_kernel_ver(char buff16b[]) +{ +asm ("int $0x40"::"a"(18), "b"(13), "c"(buff16b)); +} diff --git a/programs/games/donkey/kolibri.h b/programs/games/donkey/system/kolibri.h similarity index 72% rename from programs/games/donkey/kolibri.h rename to programs/games/donkey/system/kolibri.h index 0532ab95c..ed9ded54c 100644 --- a/programs/games/donkey/kolibri.h +++ b/programs/games/donkey/system/kolibri.h @@ -25,6 +25,7 @@ unsigned p20 __attribute__((packed)); unsigned p24 __attribute__((packed)); unsigned p28 __attribute__((packed)); unsigned p32[2] __attribute__((packed)); +unsigned p40 __attribute__((packed)); } kol_struct_BDVK __attribute__((packed)); typedef struct @@ -37,6 +38,7 @@ void *data __attribute__((packed)); void kol_exit(); void kol_sleep(unsigned d); void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c); +void kol_wnd_move(unsigned x, unsigned y); void kol_wnd_caption(char *s); void kol_event_mask(unsigned e); unsigned kol_event_wait(); @@ -49,7 +51,13 @@ void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c); void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c); void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c); void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d); +void kol_paint_image_pal(unsigned x, unsigned y, unsigned w, unsigned h, char *d, unsigned *palette); unsigned kol_key_get(); +unsigned kol_key_control(); +void kol_key_lang_set(unsigned lang); +unsigned kol_key_lang_get(); +void kol_key_mode_set(unsigned mode); +unsigned kol_key_mode_get(); void kol_btn_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned d, unsigned c); unsigned kol_btn_get(); void kol_btn_type(unsigned t); @@ -58,16 +66,27 @@ unsigned kol_mouse_posw(); unsigned kol_mouse_btn(); void kol_board_putc(char c); void kol_board_puts(char *s); -unsigned kol_file_70(kol_struct70 *k); +void kol_board_puti(int n); +int kol_file_70(kol_struct70 *k); kol_struct_import* kol_cofflib_load(char *name); void* kol_cofflib_procload (kol_struct_import *imp, char *name); unsigned kol_cofflib_procnum (kol_struct_import *imp); void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n); +unsigned kol_system_end(unsigned param); unsigned kol_system_cpufreq(); unsigned kol_system_mem(); unsigned kol_system_memfree(); unsigned kol_system_time_get(); +unsigned kol_system_date_get(); void kol_path_file2dir(char *dir, char *fname); void kol_path_full(char *full, char *fname); void kol_screen_wait_rr(); +void kol_screen_get_size(unsigned *w, unsigned *h); unsigned kol_skin_height(); +unsigned kol_thread_start(unsigned start, unsigned stack); +unsigned kol_time_tick(); +unsigned kol_sound_speaker(char data[]); +unsigned kol_process_info(unsigned slot, char buf1k[]); +int kol_process_kill_pid(unsigned process); +void kol_get_kernel_ver(char buff16b[]); +int kol_kill_process(unsigned process); diff --git a/programs/games/donkey/system/stdlib.c b/programs/games/donkey/system/stdlib.c new file mode 100644 index 000000000..f52c26327 --- /dev/null +++ b/programs/games/donkey/system/stdlib.c @@ -0,0 +1,33 @@ + +unsigned int seed_o = 0x45168297; + + +void srand (unsigned seed) +{ +seed_o = seed; +} + + +int rand (void) +{ +seed_o = seed_o * 0x15a4e35 + 1; +return(seed_o >> 16); +} + + +void* malloc(unsigned s) +{ +asm ("int $0x40"::"a"(68), "b"(12), "c"(s) ); +} + + +void free(void *p) +{ +asm ("int $0x40"::"a"(68), "b"(13), "c"(p) ); +} + + +void* realloc(void *p, unsigned s) +{ +asm ("int $0x40"::"a"(68), "b"(12), "c"(p), "d"(s) ); +} diff --git a/programs/games/donkey/stdlib.h b/programs/games/donkey/system/stdlib.h similarity index 100% rename from programs/games/donkey/stdlib.h rename to programs/games/donkey/system/stdlib.h diff --git a/programs/games/donkey/system/string.c b/programs/games/donkey/system/string.c new file mode 100644 index 000000000..145b47686 --- /dev/null +++ b/programs/games/donkey/system/string.c @@ -0,0 +1,124 @@ + +#include "string.h" + +void* memset(void *mem, int c, unsigned size) +{ +unsigned i; + +for ( i = 0; i < size; i++ ) + *((char *)mem+i) = (char) c; + +return NULL; +} + + +void* memcpy(void *dst, const void *src, unsigned size) +{ + +unsigned i; + +for ( i = 0; i < size; i++) + *(char *)(dst+i) = *(char *)(src+i); + +return NULL; +} + + +int memcmp(const void* buf1, const void* buf2, int count) +{ +int i; +for (i=0;i*(unsigned char*)buf2) + return 1; + } +return 0; +} + +void strcat(char strDest[], char strSource[]) +{ + +int i, j; + +i = j = 0; +while (strDest[i] != '\0') + i++; + +while ((strDest[i++] = strSource[j++]) != '\0') + ; +} + + +int strcmp(const char* string1, const char* string2) +{ + +while (1) +{ +if (*string1<*string2) + return -1; +if (*string1>*string2) + return 1; + +if (*string1=='\0') + return 0; + +string1++; +string2++; +} + +} + + +void strcpy(char strDest[], const char strSource[]) +{ +unsigned i; + +i = 0; +while ((strDest[i] = strSource[i]) != '\0') + i++; + +} + + +char* strncpy(char *strDest, const char *strSource, unsigned n) +{ +unsigned i; + +if (! n ) + return strDest; + +i = 0; +while ((strDest[i] = strSource[i]) != '\0') + if ( (n-1) == i ) + break; + else + i++; + +return strDest; +} + + +int strlen(const char* string) +{ +int i; + +i=0; +while (*string++) i++; +return i; +} + + + +char* strchr(const char* string, int c) +{ + while (*string) + { + if (*string==c) + return (char*)string; + string++; + } + return (char*)0; +} + diff --git a/programs/games/donkey/system/string.h b/programs/games/donkey/system/string.h new file mode 100644 index 000000000..1ce28e29e --- /dev/null +++ b/programs/games/donkey/system/string.h @@ -0,0 +1,15 @@ + +#ifndef NULL +#define NULL ((void*)0) +#endif + +void* memset(void *mem, int c, unsigned size); +void* memcpy(void *dst, const void *src, unsigned size); +int memcmp(const void* buf1, const void* buf2, int count); + +void strcat(char strDest[], char strSource[]); +int strcmp(const char* string1, const char* string2); +void strcpy(char strDest[], const char strSource[]); +char* strncpy(char *strDest, const char *strSource, unsigned n); +int strlen(const char* string); +char *strchr(const char* string, int c);