From e08c6968ef2c605591aee94887f16c048e06216c Mon Sep 17 00:00:00 2001 From: turbocat Date: Sun, 2 Jan 2022 12:16:17 +0000 Subject: [PATCH] ktcc: rollback to r9529 git-svn-id: svn://kolibrios.org@9558 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/ktcc/trunk/bin/kos32-tcc | Bin 492128 -> 259304 bytes programs/develop/ktcc/trunk/bin/kos32-tcc.exe | Bin 0 -> 335375 bytes .../develop/ktcc/trunk/bin/lib/box_lib.def | 98 -- programs/develop/ktcc/trunk/bin/lib/crt0.o | Bin 752 -> 1340 bytes programs/develop/ktcc/trunk/bin/lib/libbox.a | Bin 0 -> 7534 bytes .../develop/ktcc/trunk/bin/lib/libbuf2d.a | Bin 0 -> 3586 bytes .../develop/ktcc/trunk/bin/lib/libc.obj.a | Bin 0 -> 84304 bytes programs/develop/ktcc/trunk/bin/lib/libck.a | Bin 0 -> 136922 bytes .../develop/ktcc/trunk/bin/lib/libdialog.a | Bin 0 -> 1458 bytes programs/develop/ktcc/trunk/bin/lib/libgb.a | Bin 0 -> 4130 bytes programs/develop/ktcc/trunk/bin/lib/libhttp.a | Bin 0 -> 3634 bytes programs/develop/ktcc/trunk/bin/lib/libimg.a | Bin 0 -> 2402 bytes .../develop/ktcc/trunk/bin/lib/libinputbox.a | Bin 0 -> 1012 bytes .../develop/ktcc/trunk/bin/lib/libmsgbox.a | Bin 0 -> 2196 bytes .../develop/ktcc/trunk/bin/lib/libnetwork.a | Bin 0 -> 1412 bytes .../ktcc/trunk/bin/lib/librasterworks.a | Bin 0 -> 2634 bytes .../trunk/bin/lib/{libtcc1.a => libtcc.a} | Bin .../develop/ktcc/trunk/bin/lib/msgbox.def | 6 - .../ktcc/trunk/bin/lib/rasterworks.def | 7 - programs/develop/ktcc/trunk/bin/tcc | Bin 0 -> 185896 bytes .../trunk/{bin => kx}/doc/en/Features.txt | 0 .../trunk/{bin => kx}/doc/en/How to use.txt | 0 .../trunk/{bin => kx}/doc/ru/Features.txt | 0 .../ktcc/trunk/{bin => kx}/doc/ru/History.txt | 0 .../trunk/{bin => kx}/doc/ru/How to use.txt | 0 .../ktcc/trunk/{bin => kx}/lib/box.def | 0 .../ktcc/trunk/{bin => kx}/lib/console.def | 0 programs/develop/ktcc/trunk/kx/lib/crt0.o | Bin 0 -> 752 bytes .../ktcc/trunk/{bin => kx}/lib/dialog.def | 1 - .../ktcc/trunk/{bin => kx}/lib/http.def | 0 .../ktcc/trunk/{bin => kx}/lib/img.def | 2 +- .../ktcc/trunk/{bin => kx}/lib/libc.def | 3 - programs/develop/ktcc/trunk/kx/lib/libck.a | Bin 0 -> 130664 bytes .../develop/ktcc/trunk/kx/lib/libcryptal.a | Bin 0 -> 61346 bytes programs/develop/ktcc/trunk/kx/lib/libtcc.a | Bin 0 -> 6644 bytes .../ktcc/trunk/{bin => kx}/lib/mbedtls.def | 0 .../ktcc/trunk/{bin => kx}/lib/network.def | 0 .../develop/ktcc/trunk/kx/src/crt/crt0.asm | 127 +++ .../develop/ktcc/trunk/kx/src/tests/kxtest.c | 18 + .../develop/ktcc/trunk/kx/src/tests/kxtest.sh | 3 + .../develop/ktcc/trunk/lib/boxlib/Makefile | 10 + .../develop/ktcc/trunk/lib/boxlib/boxlib.asm | 230 +++++ .../develop/ktcc/trunk/lib/buf2d/Makefile | 10 + .../develop/ktcc/trunk/lib/buf2d/buf2d.asm | 90 ++ programs/develop/ktcc/trunk/lib/http/Makefile | 11 + .../develop/ktcc/trunk/lib/http/__lib__.asm | 9 + .../develop/ktcc/trunk/lib/http/__lib__.inc | 2 + programs/develop/ktcc/trunk/lib/http/free.asm | 18 + programs/develop/ktcc/trunk/lib/http/get.asm | 18 + programs/develop/ktcc/trunk/lib/http/head.asm | 18 + programs/develop/ktcc/trunk/lib/http/post.asm | 18 + .../develop/ktcc/trunk/lib/http/receive.asm | 18 + programs/develop/ktcc/trunk/lib/http/send.asm | 18 + .../ktcc/trunk/lib/inputbox/InputBox.asm | 18 + .../ktcc/trunk/lib/inputbox/__lib__.asm | 9 + .../ktcc/trunk/lib/inputbox/__lib__.inc | 2 + .../develop/ktcc/trunk/lib/inputbox/make.bat | 5 + .../develop/ktcc/trunk/lib/libimg/Makefile | 9 + .../ktcc/trunk/lib/libimg/loadlibimg.asm | 88 ++ .../ktcc/trunk/lib/libnetwork/Makefile | 7 + .../ktcc/trunk/lib/libnetwork/network.asm | 50 ++ .../ktcc/trunk/lib/librasterworks/__lib__.asm | 9 + .../ktcc/trunk/lib/librasterworks/__lib__.inc | 2 + .../trunk/lib/librasterworks/charsFit.asm | 18 + .../trunk/lib/librasterworks/cntUTF-8.asm | 18 + .../trunk/lib/librasterworks/drawText.asm | 18 + .../ktcc/trunk/lib/librasterworks/make.bat | 7 + .../ktcc/trunk/lib/librasterworks/makefile | 9 + .../trunk/lib/librasterworks/strWidth.asm | 18 + .../develop/ktcc/trunk/lib/msgbox/__lib__.asm | 9 + .../develop/ktcc/trunk/lib/msgbox/__lib__.inc | 2 + .../develop/ktcc/trunk/lib/msgbox/make.bat | 7 + .../develop/ktcc/trunk/lib/msgbox/makefile | 8 + .../ktcc/trunk/lib/msgbox/mb_create.asm | 18 + .../ktcc/trunk/lib/msgbox/mb_reinit.asm | 18 + .../ktcc/trunk/lib/msgbox/mb_setfunctions.asm | 18 + .../develop/ktcc/trunk/lib/proc_lib/Makefile | 7 + .../ktcc/trunk/lib/proc_lib/loadproclib.asm | 39 + .../develop/ktcc/trunk/lib/sample/__lib__.asm | 9 + .../develop/ktcc/trunk/lib/sample/__lib__.inc | 2 + .../develop/ktcc/trunk/lib/sample/howto.txt | 13 + .../develop/ktcc/trunk/lib/sample/make.bat | 5 + .../ktcc/trunk/lib/sample/sample_symbol.asm | 18 + .../trunk/libc.obj/include/clayer/boxlib.h | 63 +- .../trunk/libc.obj/include/clayer/buf2d.h | 68 +- .../trunk/libc.obj/include/clayer/dialog.h | 11 +- .../ktcc/trunk/libc.obj/include/clayer/gb.h | 12 +- .../ktcc/trunk/libc.obj/include/clayer/http.h | 21 +- .../trunk/libc.obj/include/clayer/inputbox.h | 11 +- .../trunk/libc.obj/include/clayer/libimg.h | 38 +- .../trunk/libc.obj/include/clayer/msgbox.h | 14 +- .../trunk/libc.obj/include/clayer/network.h | 15 +- .../libc.obj/include/clayer/rasterworks.h | 12 +- .../ktcc/trunk/libc.obj/include/conio.h | 41 +- .../ktcc/trunk/libc.obj/include/stddef.h | 10 +- .../ktcc/trunk/libc.obj/include/sys/ksys.h | 6 +- .../develop/ktcc/trunk/libc.obj/lib/crt0.o | Bin 0 -> 1340 bytes .../ktcc/trunk/libc.obj/samples/Makefile | 55 +- .../ktcc/trunk/libc.obj/samples/build_all.sh | 38 +- .../trunk/libc.obj/samples/clayer/boxlib.c | 6 +- .../trunk/libc.obj/samples/clayer/dialog.c | 1 + .../trunk/libc.obj/samples/clayer/libimg.c | 11 +- .../ktcc/trunk/libc.obj/samples/defgen.c | 49 - .../trunk/libc.obj/samples/http_tcp_demo.c | 4 + .../ktcc/trunk/libc.obj/samples/string_test.c | 2 +- .../ktcc/trunk/libc.obj/samples/whois.c | 5 +- .../ktcc/trunk/libc.obj/source/crt/crt0.asm | 168 +++- .../ktcc/trunk/libc.obj/source/stdio/conio.c | 44 +- .../ktcc/trunk/libc/KOSfuncs_inc_status.txt | 292 ++++++ programs/develop/ktcc/trunk/libc/Makefile | 33 + programs/develop/ktcc/trunk/libc/build.bat | 71 ++ .../develop/ktcc/trunk/libc/dlfcn/dlfcn.c | 91 ++ programs/develop/ktcc/trunk/libc/fs/dir.c | 108 +++ .../develop/ktcc/trunk/libc/include/assert.h | 19 + .../ktcc/trunk/libc/include/clayer/boxlib.h | 265 ++++++ .../ktcc/trunk/libc/include/clayer/buf2d.h | 83 ++ .../ktcc/trunk/libc/include/clayer/dialog.h | 126 +++ .../ktcc/trunk/libc/include/clayer/gb.h | 19 + .../ktcc/trunk/libc/include/clayer/http.h | 153 ++++ .../ktcc/trunk/libc/include/clayer/inputbox.h | 17 + .../ktcc/trunk/libc/include/clayer/libimg.h | 126 +++ .../ktcc/trunk/libc/include/clayer/msgbox.h | 55 ++ .../trunk/libc/include/clayer/rasterworks.h | 11 + .../develop/ktcc/trunk/libc/include/conio.h | 203 +++++ .../ktcc/trunk/libc/include/cryptal/aes.h | 123 +++ .../ktcc/trunk/libc/include/cryptal/arcfour.h | 30 + .../ktcc/trunk/libc/include/cryptal/base64.h | 27 + .../trunk/libc/include/cryptal/blowfish.h | 32 + .../ktcc/trunk/libc/include/cryptal/des.h | 37 + .../ktcc/trunk/libc/include/cryptal/md2.h | 33 + .../ktcc/trunk/libc/include/cryptal/md5.h | 34 + .../ktcc/trunk/libc/include/cryptal/rot-13.h | 20 + .../ktcc/trunk/libc/include/cryptal/sha1.h | 35 + .../ktcc/trunk/libc/include/cryptal/sha256.h | 34 + .../develop/ktcc/trunk/libc/include/ctype.h | 41 + .../develop/ktcc/trunk/libc/include/dir.h | 35 + .../develop/ktcc/trunk/libc/include/dlfcn.h | 14 + .../develop/ktcc/trunk/libc/include/errno.h | 42 + .../develop/ktcc/trunk/libc/include/float.h | 65 ++ .../develop/ktcc/trunk/libc/include/getopt.h | 9 + .../ktcc/trunk/libc/include/kolibrisys.h | 197 ++++ .../ktcc/trunk/libc/include/kos32sys1.h | 815 +++++++++++++++++ .../develop/ktcc/trunk/libc/include/libgen.h | 7 + .../develop/ktcc/trunk/libc/include/math.h | 55 ++ .../develop/ktcc/trunk/libc/include/memory.h | 8 + .../ktcc/trunk/libc/include/net/network.h | 54 ++ .../ktcc/trunk/libc/include/net/socket.h | 89 ++ .../develop/ktcc/trunk/libc/include/stdarg.h | 75 ++ .../develop/ktcc/trunk/libc/include/stdbool.h | 11 + .../develop/ktcc/trunk/libc/include/stddef.h | 46 + .../develop/ktcc/trunk/libc/include/stdint.h | 1 + .../develop/ktcc/trunk/libc/include/stdio.h | 105 +++ .../develop/ktcc/trunk/libc/include/stdlib.h | 77 ++ .../develop/ktcc/trunk/libc/include/string.h | 36 + .../develop/ktcc/trunk/libc/include/time.h | 29 + .../ktcc/trunk/libc/include/tinygl/gl.h | 838 ++++++++++++++++++ .../ktcc/trunk/libc/include/tinygl/glu.h | 44 + .../ktcc/trunk/libc/include/tinygl/kosgl.h | 28 + .../develop/ktcc/trunk/libc/include/varargs.h | 12 + .../libc/kolibrisys/_ksys_files_acces.asm | 124 +++ .../ktcc/trunk/libc/kolibrisys/backgr.asm | 54 ++ .../ktcc/trunk/libc/kolibrisys/button.asm | 35 + .../ktcc/trunk/libc/kolibrisys/clock.asm | 15 + .../ktcc/trunk/libc/kolibrisys/cofflib.asm | 76 ++ .../ktcc/trunk/libc/kolibrisys/date.asm | 7 + .../trunk/libc/kolibrisys/debug_board.asm | 56 ++ .../ktcc/trunk/libc/kolibrisys/delay.asm | 11 + .../ktcc/trunk/libc/kolibrisys/dga.asm | 34 + .../ktcc/trunk/libc/kolibrisys/draw_bar.asm | 21 + .../ktcc/trunk/libc/kolibrisys/draw_image.asm | 21 + .../trunk/libc/kolibrisys/draw_window.asm | 34 + .../ktcc/trunk/libc/kolibrisys/event.asm | 40 + .../ktcc/trunk/libc/kolibrisys/exit.asm | 8 + .../ktcc/trunk/libc/kolibrisys/ipc.asm | 28 + .../ktcc/trunk/libc/kolibrisys/irq.asm | 119 +++ .../ktcc/trunk/libc/kolibrisys/keyboard.asm | 29 + .../ktcc/trunk/libc/kolibrisys/line.asm | 21 + .../ktcc/trunk/libc/kolibrisys/midi.asm | 21 + .../ktcc/trunk/libc/kolibrisys/mouse.asm | 25 + .../ktcc/trunk/libc/kolibrisys/pci.asm | 138 +++ .../ktcc/trunk/libc/kolibrisys/pixel.asm | 16 + .../ktcc/trunk/libc/kolibrisys/process.asm | 24 + .../ktcc/trunk/libc/kolibrisys/screen.asm | 15 + .../ktcc/trunk/libc/kolibrisys/skin.asm | 13 + .../ktcc/trunk/libc/kolibrisys/sound.asm | 65 ++ .../ktcc/trunk/libc/kolibrisys/thread.asm | 33 + .../trunk/libc/kolibrisys/window_redraw.asm | 11 + .../ktcc/trunk/libc/kolibrisys/write_text.asm | 21 + .../develop/ktcc/trunk/libc/libgen/basename.c | 23 + .../develop/ktcc/trunk/libc/libgen/dirname.c | 67 ++ .../develop/ktcc/trunk/libc/math/acos.asm | 23 + programs/develop/ktcc/trunk/libc/math/asin.c | 6 + .../develop/ktcc/trunk/libc/math/atan.asm | 15 + .../develop/ktcc/trunk/libc/math/atan2.asm | 15 + .../develop/ktcc/trunk/libc/math/ceil.asm | 30 + .../develop/ktcc/trunk/libc/math/ceilf.asm | 30 + programs/develop/ktcc/trunk/libc/math/cos.asm | 14 + programs/develop/ktcc/trunk/libc/math/cosh.c | 6 + programs/develop/ktcc/trunk/libc/math/exp.asm | 60 ++ .../develop/ktcc/trunk/libc/math/fabs.asm | 14 + .../develop/ktcc/trunk/libc/math/fabsf.asm | 14 + .../develop/ktcc/trunk/libc/math/floor.asm | 29 + .../develop/ktcc/trunk/libc/math/floorf.asm | 29 + programs/develop/ktcc/trunk/libc/math/fmod.c | 86 ++ .../develop/ktcc/trunk/libc/math/libtcc1.c | 754 ++++++++++++++++ programs/develop/ktcc/trunk/libc/math/log.asm | 18 + .../develop/ktcc/trunk/libc/math/log10.asm | 18 + programs/develop/ktcc/trunk/libc/math/pow.c | 6 + programs/develop/ktcc/trunk/libc/math/round.c | 9 + .../develop/ktcc/trunk/libc/math/roundl.c | 9 + programs/develop/ktcc/trunk/libc/math/sin.asm | 14 + programs/develop/ktcc/trunk/libc/math/sinh.c | 6 + .../develop/ktcc/trunk/libc/math/sqrt.asm | 14 + .../develop/ktcc/trunk/libc/math/sqrtf.asm | 14 + programs/develop/ktcc/trunk/libc/math/tan.asm | 15 + programs/develop/ktcc/trunk/libc/math/tanh.c | 8 + .../ktcc/trunk/libc/memory/memalloc.asm | 46 + .../ktcc/trunk/libc/memory/watermark.c | 410 +++++++++ programs/develop/ktcc/trunk/libc/net/socket.c | 103 +++ programs/develop/ktcc/trunk/libc/proc32.inc | 301 +++++++ .../ktcc/trunk/libc/public_stdcall.inc | 7 + .../develop/ktcc/trunk/libc/start/start.asm | 220 +++++ .../ktcc/trunk/libc/start/start.old.asm | 143 +++ .../develop/ktcc/trunk/libc/stdio/clearerr.c | 22 + .../develop/ktcc/trunk/libc/stdio/conio.c | 102 +++ .../develop/ktcc/trunk/libc/stdio/debug.c | 13 + .../develop/ktcc/trunk/libc/stdio/fclose.c | 20 + programs/develop/ktcc/trunk/libc/stdio/feof.c | 11 + .../develop/ktcc/trunk/libc/stdio/fflush.c | 9 + .../develop/ktcc/trunk/libc/stdio/fgetc.c | 11 + .../develop/ktcc/trunk/libc/stdio/fgetpos.c | 13 + .../develop/ktcc/trunk/libc/stdio/fgets.c | 34 + .../develop/ktcc/trunk/libc/stdio/fopen.c | 142 +++ .../ktcc/trunk/libc/stdio/format_print.c | 639 +++++++++++++ .../ktcc/trunk/libc/stdio/format_scan.c | 417 +++++++++ .../develop/ktcc/trunk/libc/stdio/fprintf.c | 44 + .../develop/ktcc/trunk/libc/stdio/fputc.c | 10 + .../develop/ktcc/trunk/libc/stdio/fputs.c | 27 + .../develop/ktcc/trunk/libc/stdio/fread.c | 94 ++ .../develop/ktcc/trunk/libc/stdio/fscanf.c | 42 + .../develop/ktcc/trunk/libc/stdio/fseek.c | 19 + .../develop/ktcc/trunk/libc/stdio/fsetpos.c | 18 + .../develop/ktcc/trunk/libc/stdio/ftell.c | 11 + .../develop/ktcc/trunk/libc/stdio/fwrite.c | 83 ++ .../develop/ktcc/trunk/libc/stdio/getchar.c | 6 + programs/develop/ktcc/trunk/libc/stdio/gets.c | 8 + .../develop/ktcc/trunk/libc/stdio/printf.c | 32 + .../develop/ktcc/trunk/libc/stdio/putchar.c | 14 + programs/develop/ktcc/trunk/libc/stdio/puts.c | 11 + .../develop/ktcc/trunk/libc/stdio/rewind.c | 12 + .../develop/ktcc/trunk/libc/stdio/scanf.c | 66 ++ .../develop/ktcc/trunk/libc/stdio/snprintf.c | 15 + .../develop/ktcc/trunk/libc/stdio/sprintf.c | 15 + .../ktcc/trunk/libc/stdio/sprintf_tiny.c | 97 ++ .../develop/ktcc/trunk/libc/stdio/sscanf.c | 46 + .../develop/ktcc/trunk/libc/stdio/ungetc.c | 32 + .../develop/ktcc/trunk/libc/stdio/vsnprintf.c | 14 + .../develop/ktcc/trunk/libc/stdlib/assert.c | 7 + .../develop/ktcc/trunk/libc/stdlib/atoi.c | 21 + .../develop/ktcc/trunk/libc/stdlib/atoib.cpp | 22 + programs/develop/ktcc/trunk/libc/stdlib/div.c | 10 + .../develop/ktcc/trunk/libc/stdlib/exit.c | 11 + .../develop/ktcc/trunk/libc/stdlib/getopt.c | 63 ++ .../develop/ktcc/trunk/libc/stdlib/itoa.c | 26 + .../develop/ktcc/trunk/libc/stdlib/itoab.c | 25 + .../develop/ktcc/trunk/libc/stdlib/random.c | 15 + .../develop/ktcc/trunk/libc/stdlib/strtod.c | 70 ++ .../develop/ktcc/trunk/libc/stdlib/strtol.c | 78 ++ .../develop/ktcc/trunk/libc/stdlib/time.c | 86 ++ .../develop/ktcc/trunk/libc/stdlib/tolower.c | 9 + .../develop/ktcc/trunk/libc/stdlib/toupper.c | 9 + .../develop/ktcc/trunk/libc/string/calloc.c | 13 + programs/develop/ktcc/trunk/libc/string/is.c | 20 + .../develop/ktcc/trunk/libc/string/memchr.c | 12 + .../develop/ktcc/trunk/libc/string/memcmp.c | 17 + .../ktcc/trunk/libc/string/memmove.asm | 53 ++ .../develop/ktcc/trunk/libc/string/memrchr.c | 12 + .../develop/ktcc/trunk/libc/string/memset.asm | 15 + .../develop/ktcc/trunk/libc/string/strcat.c | 10 + .../develop/ktcc/trunk/libc/string/strchr.c | 11 + .../develop/ktcc/trunk/libc/string/strcmp.c | 16 + .../develop/ktcc/trunk/libc/string/strcoll.c | 6 + .../develop/ktcc/trunk/libc/string/strcpy.c | 9 + .../develop/ktcc/trunk/libc/string/strcspn.c | 20 + .../develop/ktcc/trunk/libc/string/strdup.c | 13 + .../develop/ktcc/trunk/libc/string/strerror.c | 105 +++ .../develop/ktcc/trunk/libc/string/strlen.c | 7 + .../develop/ktcc/trunk/libc/string/strnbrk.c | 18 + .../develop/ktcc/trunk/libc/string/strncat.c | 15 + .../develop/ktcc/trunk/libc/string/strncmp.c | 14 + .../develop/ktcc/trunk/libc/string/strncpy.c | 16 + .../develop/ktcc/trunk/libc/string/strrchr.c | 16 + .../develop/ktcc/trunk/libc/string/strrev.c | 14 + .../develop/ktcc/trunk/libc/string/strspn.c | 23 + .../develop/ktcc/trunk/libc/string/strstr.c | 14 + .../develop/ktcc/trunk/libc/string/strtok.c | 25 + .../develop/ktcc/trunk/libc/string/strxfrm.c | 4 + .../develop/ktcc/trunk/libctest/build.bat | 68 ++ programs/develop/ktcc/trunk/libctest/float2.c | 42 + programs/develop/ktcc/trunk/libctest/fscanf.c | 125 +++ .../develop/ktcc/trunk/libctest/memmove.c | 186 ++++ .../develop/ktcc/trunk/libctest/myfile.txt | 5 + .../develop/ktcc/trunk/libctest/nulprintf.c | 20 + .../develop/ktcc/trunk/libctest/print.inc | 28 + programs/develop/ktcc/trunk/libctest/qsort.c | 173 ++++ programs/develop/ktcc/trunk/libctest/rand.inc | 167 ++++ .../develop/ktcc/trunk/libctest/readme.txt | 34 + .../develop/ktcc/trunk/libctest/snprintf.c | 188 ++++ programs/develop/ktcc/trunk/libctest/sscanf.c | 89 ++ programs/develop/ktcc/trunk/libctest/string.c | 147 +++ .../ktcc/trunk/libctest/string_memcpy.c | 56 ++ .../ktcc/trunk/libctest/string_memset.c | 71 ++ .../ktcc/trunk/libctest/string_strchr.c | 60 ++ .../ktcc/trunk/libctest/string_strcspn.c | 36 + .../ktcc/trunk/libctest/string_strstr.c | 57 ++ programs/develop/ktcc/trunk/libctest/strtod.c | 77 ++ .../develop/ktcc/trunk/libctest/strtod_long.c | 21 + .../ktcc/trunk/libctest/strtod_simple.c | 34 + programs/develop/ktcc/trunk/libctest/strtof.c | 44 + programs/develop/ktcc/trunk/libctest/strtol.c | 80 ++ .../develop/ktcc/trunk/libctest/strtold.c | 96 ++ programs/develop/ktcc/trunk/libctest/test.h | 37 + programs/develop/ktcc/trunk/libctest/tgmath.c | 41 + programs/develop/ktcc/trunk/libctest/time.c | 110 +++ .../develop/ktcc/trunk/libctest/traceadr.c | 19 + .../develop/ktcc/trunk/libctest/tstring.c | 357 ++++++++ programs/develop/ktcc/trunk/libctest/udiv.c | 170 ++++ programs/develop/ktcc/trunk/libctest/ungetc.c | 114 +++ .../develop/ktcc/trunk/libctest/ungetc2.c | 39 + .../develop/ktcc/trunk/libctest/wtalloc.c | 131 +++ programs/develop/ktcc/trunk/samples/Makefile | 28 + programs/develop/ktcc/trunk/samples/asm_ex.c | 68 ++ .../develop/ktcc/trunk/samples/build_all.sh | 23 + .../ktcc/trunk/samples/clayer/boxlib.c | 110 +++ .../ktcc/trunk/samples/clayer/dialog.c | 32 + .../ktcc/trunk/samples/clayer/libimg.c | 97 ++ .../ktcc/trunk/samples/clayer/logo.png | Bin 0 -> 52385 bytes .../ktcc/trunk/samples/clayer/msgbox.c | 8 + .../ktcc/trunk/samples/clayer/rasterworks.c | 55 ++ .../develop/ktcc/trunk/samples/consoleio.c | 23 + .../develop/ktcc/trunk/samples/dir_example.c | 41 + programs/develop/ktcc/trunk/samples/dynamic.c | 26 + programs/develop/ktcc/trunk/samples/files.c | 43 + .../develop/ktcc/trunk/samples/getopt_ex.c | 38 + .../develop/ktcc/trunk/samples/graphics.c | 53 ++ .../develop/ktcc/trunk/samples/load_coff.c | 21 + .../ktcc/trunk/samples/net/http_tcp_demo.c | 64 ++ .../develop/ktcc/trunk/samples/net/nslookup.c | 29 + .../ktcc/trunk/samples/net/tcpsrv_demo.c | 38 + .../develop/ktcc/trunk/samples/tinygl/fps.c | 33 + .../develop/ktcc/trunk/samples/tinygl/gears.c | 313 +++++++ .../develop/ktcc/trunk/samples/winbasics.c | 148 ++++ .../ktcc/trunk/source/Makefile.linux32 | 2 +- programs/develop/ktcc/trunk/source/libtcc.c | 24 +- programs/develop/ktcc/trunk/source/tcc.h | 2 +- programs/develop/ktcc/trunk/source/tcckx.c | 9 +- programs/develop/ktcc/trunk/source/tccmeos.c | 6 - 357 files changed, 17300 insertions(+), 456 deletions(-) create mode 100644 programs/develop/ktcc/trunk/bin/kos32-tcc.exe delete mode 100644 programs/develop/ktcc/trunk/bin/lib/box_lib.def create mode 100644 programs/develop/ktcc/trunk/bin/lib/libbox.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libbuf2d.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libc.obj.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libck.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libdialog.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libgb.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libhttp.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libimg.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libinputbox.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libmsgbox.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/libnetwork.a create mode 100644 programs/develop/ktcc/trunk/bin/lib/librasterworks.a rename programs/develop/ktcc/trunk/bin/lib/{libtcc1.a => libtcc.a} (100%) delete mode 100644 programs/develop/ktcc/trunk/bin/lib/msgbox.def delete mode 100644 programs/develop/ktcc/trunk/bin/lib/rasterworks.def create mode 100644 programs/develop/ktcc/trunk/bin/tcc rename programs/develop/ktcc/trunk/{bin => kx}/doc/en/Features.txt (100%) rename programs/develop/ktcc/trunk/{bin => kx}/doc/en/How to use.txt (100%) rename programs/develop/ktcc/trunk/{bin => kx}/doc/ru/Features.txt (100%) rename programs/develop/ktcc/trunk/{bin => kx}/doc/ru/History.txt (100%) rename programs/develop/ktcc/trunk/{bin => kx}/doc/ru/How to use.txt (100%) rename programs/develop/ktcc/trunk/{bin => kx}/lib/box.def (100%) rename programs/develop/ktcc/trunk/{bin => kx}/lib/console.def (100%) create mode 100644 programs/develop/ktcc/trunk/kx/lib/crt0.o rename programs/develop/ktcc/trunk/{bin => kx}/lib/dialog.def (88%) rename programs/develop/ktcc/trunk/{bin => kx}/lib/http.def (100%) rename programs/develop/ktcc/trunk/{bin => kx}/lib/img.def (87%) rename programs/develop/ktcc/trunk/{bin => kx}/lib/libc.def (97%) create mode 100644 programs/develop/ktcc/trunk/kx/lib/libck.a create mode 100644 programs/develop/ktcc/trunk/kx/lib/libcryptal.a create mode 100644 programs/develop/ktcc/trunk/kx/lib/libtcc.a rename programs/develop/ktcc/trunk/{bin => kx}/lib/mbedtls.def (100%) rename programs/develop/ktcc/trunk/{bin => kx}/lib/network.def (100%) create mode 100644 programs/develop/ktcc/trunk/kx/src/crt/crt0.asm create mode 100644 programs/develop/ktcc/trunk/kx/src/tests/kxtest.c create mode 100644 programs/develop/ktcc/trunk/kx/src/tests/kxtest.sh create mode 100644 programs/develop/ktcc/trunk/lib/boxlib/Makefile create mode 100644 programs/develop/ktcc/trunk/lib/boxlib/boxlib.asm create mode 100644 programs/develop/ktcc/trunk/lib/buf2d/Makefile create mode 100644 programs/develop/ktcc/trunk/lib/buf2d/buf2d.asm create mode 100644 programs/develop/ktcc/trunk/lib/http/Makefile create mode 100644 programs/develop/ktcc/trunk/lib/http/__lib__.asm create mode 100644 programs/develop/ktcc/trunk/lib/http/__lib__.inc create mode 100644 programs/develop/ktcc/trunk/lib/http/free.asm create mode 100644 programs/develop/ktcc/trunk/lib/http/get.asm create mode 100644 programs/develop/ktcc/trunk/lib/http/head.asm create mode 100644 programs/develop/ktcc/trunk/lib/http/post.asm create mode 100644 programs/develop/ktcc/trunk/lib/http/receive.asm create mode 100644 programs/develop/ktcc/trunk/lib/http/send.asm create mode 100644 programs/develop/ktcc/trunk/lib/inputbox/InputBox.asm create mode 100644 programs/develop/ktcc/trunk/lib/inputbox/__lib__.asm create mode 100644 programs/develop/ktcc/trunk/lib/inputbox/__lib__.inc create mode 100644 programs/develop/ktcc/trunk/lib/inputbox/make.bat create mode 100644 programs/develop/ktcc/trunk/lib/libimg/Makefile create mode 100644 programs/develop/ktcc/trunk/lib/libimg/loadlibimg.asm create mode 100644 programs/develop/ktcc/trunk/lib/libnetwork/Makefile create mode 100644 programs/develop/ktcc/trunk/lib/libnetwork/network.asm create mode 100644 programs/develop/ktcc/trunk/lib/librasterworks/__lib__.asm create mode 100644 programs/develop/ktcc/trunk/lib/librasterworks/__lib__.inc create mode 100644 programs/develop/ktcc/trunk/lib/librasterworks/charsFit.asm create mode 100644 programs/develop/ktcc/trunk/lib/librasterworks/cntUTF-8.asm create mode 100644 programs/develop/ktcc/trunk/lib/librasterworks/drawText.asm create mode 100644 programs/develop/ktcc/trunk/lib/librasterworks/make.bat create mode 100644 programs/develop/ktcc/trunk/lib/librasterworks/makefile create mode 100644 programs/develop/ktcc/trunk/lib/librasterworks/strWidth.asm create mode 100644 programs/develop/ktcc/trunk/lib/msgbox/__lib__.asm create mode 100644 programs/develop/ktcc/trunk/lib/msgbox/__lib__.inc create mode 100644 programs/develop/ktcc/trunk/lib/msgbox/make.bat create mode 100644 programs/develop/ktcc/trunk/lib/msgbox/makefile create mode 100644 programs/develop/ktcc/trunk/lib/msgbox/mb_create.asm create mode 100644 programs/develop/ktcc/trunk/lib/msgbox/mb_reinit.asm create mode 100644 programs/develop/ktcc/trunk/lib/msgbox/mb_setfunctions.asm create mode 100644 programs/develop/ktcc/trunk/lib/proc_lib/Makefile create mode 100644 programs/develop/ktcc/trunk/lib/proc_lib/loadproclib.asm create mode 100644 programs/develop/ktcc/trunk/lib/sample/__lib__.asm create mode 100644 programs/develop/ktcc/trunk/lib/sample/__lib__.inc create mode 100644 programs/develop/ktcc/trunk/lib/sample/howto.txt create mode 100644 programs/develop/ktcc/trunk/lib/sample/make.bat create mode 100644 programs/develop/ktcc/trunk/lib/sample/sample_symbol.asm create mode 100644 programs/develop/ktcc/trunk/libc.obj/lib/crt0.o delete mode 100644 programs/develop/ktcc/trunk/libc.obj/samples/defgen.c create mode 100644 programs/develop/ktcc/trunk/libc/KOSfuncs_inc_status.txt create mode 100644 programs/develop/ktcc/trunk/libc/Makefile create mode 100644 programs/develop/ktcc/trunk/libc/build.bat create mode 100644 programs/develop/ktcc/trunk/libc/dlfcn/dlfcn.c create mode 100644 programs/develop/ktcc/trunk/libc/fs/dir.c create mode 100644 programs/develop/ktcc/trunk/libc/include/assert.h create mode 100644 programs/develop/ktcc/trunk/libc/include/clayer/boxlib.h create mode 100644 programs/develop/ktcc/trunk/libc/include/clayer/buf2d.h create mode 100644 programs/develop/ktcc/trunk/libc/include/clayer/dialog.h create mode 100644 programs/develop/ktcc/trunk/libc/include/clayer/gb.h create mode 100644 programs/develop/ktcc/trunk/libc/include/clayer/http.h create mode 100644 programs/develop/ktcc/trunk/libc/include/clayer/inputbox.h create mode 100644 programs/develop/ktcc/trunk/libc/include/clayer/libimg.h create mode 100644 programs/develop/ktcc/trunk/libc/include/clayer/msgbox.h create mode 100644 programs/develop/ktcc/trunk/libc/include/clayer/rasterworks.h create mode 100644 programs/develop/ktcc/trunk/libc/include/conio.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/aes.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/arcfour.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/base64.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/blowfish.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/des.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/md2.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/md5.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/rot-13.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/sha1.h create mode 100644 programs/develop/ktcc/trunk/libc/include/cryptal/sha256.h create mode 100644 programs/develop/ktcc/trunk/libc/include/ctype.h create mode 100644 programs/develop/ktcc/trunk/libc/include/dir.h create mode 100644 programs/develop/ktcc/trunk/libc/include/dlfcn.h create mode 100644 programs/develop/ktcc/trunk/libc/include/errno.h create mode 100644 programs/develop/ktcc/trunk/libc/include/float.h create mode 100644 programs/develop/ktcc/trunk/libc/include/getopt.h create mode 100644 programs/develop/ktcc/trunk/libc/include/kolibrisys.h create mode 100644 programs/develop/ktcc/trunk/libc/include/kos32sys1.h create mode 100644 programs/develop/ktcc/trunk/libc/include/libgen.h create mode 100644 programs/develop/ktcc/trunk/libc/include/math.h create mode 100644 programs/develop/ktcc/trunk/libc/include/memory.h create mode 100644 programs/develop/ktcc/trunk/libc/include/net/network.h create mode 100644 programs/develop/ktcc/trunk/libc/include/net/socket.h create mode 100644 programs/develop/ktcc/trunk/libc/include/stdarg.h create mode 100644 programs/develop/ktcc/trunk/libc/include/stdbool.h create mode 100644 programs/develop/ktcc/trunk/libc/include/stddef.h create mode 100644 programs/develop/ktcc/trunk/libc/include/stdint.h create mode 100644 programs/develop/ktcc/trunk/libc/include/stdio.h create mode 100644 programs/develop/ktcc/trunk/libc/include/stdlib.h create mode 100644 programs/develop/ktcc/trunk/libc/include/string.h create mode 100644 programs/develop/ktcc/trunk/libc/include/time.h create mode 100644 programs/develop/ktcc/trunk/libc/include/tinygl/gl.h create mode 100644 programs/develop/ktcc/trunk/libc/include/tinygl/glu.h create mode 100644 programs/develop/ktcc/trunk/libc/include/tinygl/kosgl.h create mode 100644 programs/develop/ktcc/trunk/libc/include/varargs.h create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/_ksys_files_acces.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/backgr.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/button.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/clock.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/cofflib.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/date.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/debug_board.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/delay.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/dga.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/draw_bar.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/draw_image.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/draw_window.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/event.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/exit.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/ipc.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/irq.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/keyboard.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/line.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/midi.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/mouse.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/pci.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/pixel.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/process.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/screen.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/skin.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/sound.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/thread.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/window_redraw.asm create mode 100644 programs/develop/ktcc/trunk/libc/kolibrisys/write_text.asm create mode 100644 programs/develop/ktcc/trunk/libc/libgen/basename.c create mode 100644 programs/develop/ktcc/trunk/libc/libgen/dirname.c create mode 100644 programs/develop/ktcc/trunk/libc/math/acos.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/asin.c create mode 100644 programs/develop/ktcc/trunk/libc/math/atan.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/atan2.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/ceil.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/ceilf.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/cos.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/cosh.c create mode 100644 programs/develop/ktcc/trunk/libc/math/exp.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/fabs.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/fabsf.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/floor.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/floorf.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/fmod.c create mode 100644 programs/develop/ktcc/trunk/libc/math/libtcc1.c create mode 100644 programs/develop/ktcc/trunk/libc/math/log.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/log10.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/pow.c create mode 100644 programs/develop/ktcc/trunk/libc/math/round.c create mode 100644 programs/develop/ktcc/trunk/libc/math/roundl.c create mode 100644 programs/develop/ktcc/trunk/libc/math/sin.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/sinh.c create mode 100644 programs/develop/ktcc/trunk/libc/math/sqrt.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/sqrtf.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/tan.asm create mode 100644 programs/develop/ktcc/trunk/libc/math/tanh.c create mode 100644 programs/develop/ktcc/trunk/libc/memory/memalloc.asm create mode 100644 programs/develop/ktcc/trunk/libc/memory/watermark.c create mode 100644 programs/develop/ktcc/trunk/libc/net/socket.c create mode 100644 programs/develop/ktcc/trunk/libc/proc32.inc create mode 100644 programs/develop/ktcc/trunk/libc/public_stdcall.inc create mode 100644 programs/develop/ktcc/trunk/libc/start/start.asm create mode 100644 programs/develop/ktcc/trunk/libc/start/start.old.asm create mode 100644 programs/develop/ktcc/trunk/libc/stdio/clearerr.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/conio.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/debug.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fclose.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/feof.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fflush.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fgetc.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fgetpos.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fgets.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fopen.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/format_print.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/format_scan.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fprintf.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fputc.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fputs.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fread.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fscanf.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fseek.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fsetpos.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/ftell.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/fwrite.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/getchar.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/gets.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/printf.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/putchar.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/puts.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/rewind.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/scanf.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/snprintf.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/sprintf.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/sprintf_tiny.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/sscanf.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/ungetc.c create mode 100644 programs/develop/ktcc/trunk/libc/stdio/vsnprintf.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/assert.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/atoi.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/atoib.cpp create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/div.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/exit.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/getopt.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/itoa.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/itoab.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/random.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/strtod.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/strtol.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/time.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/tolower.c create mode 100644 programs/develop/ktcc/trunk/libc/stdlib/toupper.c create mode 100644 programs/develop/ktcc/trunk/libc/string/calloc.c create mode 100644 programs/develop/ktcc/trunk/libc/string/is.c create mode 100644 programs/develop/ktcc/trunk/libc/string/memchr.c create mode 100644 programs/develop/ktcc/trunk/libc/string/memcmp.c create mode 100644 programs/develop/ktcc/trunk/libc/string/memmove.asm create mode 100644 programs/develop/ktcc/trunk/libc/string/memrchr.c create mode 100644 programs/develop/ktcc/trunk/libc/string/memset.asm create mode 100644 programs/develop/ktcc/trunk/libc/string/strcat.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strchr.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strcmp.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strcoll.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strcpy.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strcspn.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strdup.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strerror.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strlen.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strnbrk.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strncat.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strncmp.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strncpy.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strrchr.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strrev.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strspn.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strstr.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strtok.c create mode 100644 programs/develop/ktcc/trunk/libc/string/strxfrm.c create mode 100644 programs/develop/ktcc/trunk/libctest/build.bat create mode 100644 programs/develop/ktcc/trunk/libctest/float2.c create mode 100644 programs/develop/ktcc/trunk/libctest/fscanf.c create mode 100644 programs/develop/ktcc/trunk/libctest/memmove.c create mode 100644 programs/develop/ktcc/trunk/libctest/myfile.txt create mode 100644 programs/develop/ktcc/trunk/libctest/nulprintf.c create mode 100644 programs/develop/ktcc/trunk/libctest/print.inc create mode 100644 programs/develop/ktcc/trunk/libctest/qsort.c create mode 100644 programs/develop/ktcc/trunk/libctest/rand.inc create mode 100644 programs/develop/ktcc/trunk/libctest/readme.txt create mode 100644 programs/develop/ktcc/trunk/libctest/snprintf.c create mode 100644 programs/develop/ktcc/trunk/libctest/sscanf.c create mode 100644 programs/develop/ktcc/trunk/libctest/string.c create mode 100644 programs/develop/ktcc/trunk/libctest/string_memcpy.c create mode 100644 programs/develop/ktcc/trunk/libctest/string_memset.c create mode 100644 programs/develop/ktcc/trunk/libctest/string_strchr.c create mode 100644 programs/develop/ktcc/trunk/libctest/string_strcspn.c create mode 100644 programs/develop/ktcc/trunk/libctest/string_strstr.c create mode 100644 programs/develop/ktcc/trunk/libctest/strtod.c create mode 100644 programs/develop/ktcc/trunk/libctest/strtod_long.c create mode 100644 programs/develop/ktcc/trunk/libctest/strtod_simple.c create mode 100644 programs/develop/ktcc/trunk/libctest/strtof.c create mode 100644 programs/develop/ktcc/trunk/libctest/strtol.c create mode 100644 programs/develop/ktcc/trunk/libctest/strtold.c create mode 100644 programs/develop/ktcc/trunk/libctest/test.h create mode 100644 programs/develop/ktcc/trunk/libctest/tgmath.c create mode 100644 programs/develop/ktcc/trunk/libctest/time.c create mode 100644 programs/develop/ktcc/trunk/libctest/traceadr.c create mode 100644 programs/develop/ktcc/trunk/libctest/tstring.c create mode 100644 programs/develop/ktcc/trunk/libctest/udiv.c create mode 100644 programs/develop/ktcc/trunk/libctest/ungetc.c create mode 100644 programs/develop/ktcc/trunk/libctest/ungetc2.c create mode 100644 programs/develop/ktcc/trunk/libctest/wtalloc.c create mode 100755 programs/develop/ktcc/trunk/samples/Makefile create mode 100644 programs/develop/ktcc/trunk/samples/asm_ex.c create mode 100644 programs/develop/ktcc/trunk/samples/build_all.sh create mode 100644 programs/develop/ktcc/trunk/samples/clayer/boxlib.c create mode 100644 programs/develop/ktcc/trunk/samples/clayer/dialog.c create mode 100755 programs/develop/ktcc/trunk/samples/clayer/libimg.c create mode 100644 programs/develop/ktcc/trunk/samples/clayer/logo.png create mode 100644 programs/develop/ktcc/trunk/samples/clayer/msgbox.c create mode 100644 programs/develop/ktcc/trunk/samples/clayer/rasterworks.c create mode 100644 programs/develop/ktcc/trunk/samples/consoleio.c create mode 100644 programs/develop/ktcc/trunk/samples/dir_example.c create mode 100644 programs/develop/ktcc/trunk/samples/dynamic.c create mode 100644 programs/develop/ktcc/trunk/samples/files.c create mode 100644 programs/develop/ktcc/trunk/samples/getopt_ex.c create mode 100644 programs/develop/ktcc/trunk/samples/graphics.c create mode 100644 programs/develop/ktcc/trunk/samples/load_coff.c create mode 100644 programs/develop/ktcc/trunk/samples/net/http_tcp_demo.c create mode 100644 programs/develop/ktcc/trunk/samples/net/nslookup.c create mode 100644 programs/develop/ktcc/trunk/samples/net/tcpsrv_demo.c create mode 100644 programs/develop/ktcc/trunk/samples/tinygl/fps.c create mode 100644 programs/develop/ktcc/trunk/samples/tinygl/gears.c create mode 100644 programs/develop/ktcc/trunk/samples/winbasics.c diff --git a/programs/develop/ktcc/trunk/bin/kos32-tcc b/programs/develop/ktcc/trunk/bin/kos32-tcc index 5fa83afe5e7354c247241a39376e53333c9cdaff..5596e714a5ce5edbb440f3cba0a697c5bb9e4026 100755 GIT binary patch literal 259304 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 z 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 literal 492128 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

TWILlTaH#(HF}! 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

Mc;0cGaymj{z(KKbMfW#Iv}KjkOI6oF&c*XN{A= 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

7#W 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%0D8#q-=5UQi8PI>= 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 Qxv4ZpV%u@ej%Y3Z2cowN`2YX_ literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/bin/lib/box_lib.def b/programs/develop/ktcc/trunk/bin/lib/box_lib.def deleted file mode 100644 index 1badc805c9..0000000000 --- a/programs/develop/ktcc/trunk/bin/lib/box_lib.def +++ /dev/null @@ -1,98 +0,0 @@ -LIBRARY box_lib.obj - -EXPORTS -edit_box -edit_box_key -edit_box_mouse -edit_box_set_text -version_ed -init_checkbox2 -check_box_draw2 -check_box_mouse2 -version_ch2 -option_box_draw -option_box_mouse -version_op -scrollbar_v_draw -scrollbar_v_mouse -scrollbar_h_draw -scrollbar_h_mouse -version_scrollbar -dbutton_draw -dbutton_mouse -version_dbutton -menu_bar_draw -menu_bar_mouse -menu_bar_activate -version_menu_bar -FileBrowser_draw -FileBrowser_mouse -FileBrowser_key -version_FileBrowser -tl_data_init -tl_data_clear -tl_info_clear -tl_key -tl_mouse -tl_draw -tl_info_undo -tl_info_redo -tl_node_add -tl_node_set_data -tl_node_get_data -tl_node_delete -tl_cur_beg -tl_cur_next -tl_cur_perv -tl_node_close_open -tl_node_lev_inc -tl_node_lev_dec -tl_node_move_up -tl_node_move_down -tl_node_poi_get_info -tl_node_poi_get_next_info -tl_node_poi_get_data -tl_save_mem -tl_load_mem -tl_get_mem_size -version_tree_list -PathShow_prepare -PathShow_draw -version_PathShow -ted_but_sumb_upper -ted_but_sumb_lover -ted_but_convert_by_table -ted_can_save -ted_clear -ted_delete -ted_draw -ted_init -ted_init_scroll_bars -ted_init_syntax_file -ted_is_select -ted_key -ted_mouse -ted_open_file -ted_save_file -ted_text_add -ted_but_select_word -ted_but_cut -ted_but_copy -ted_but_paste -ted_but_undo -ted_but_redo -ted_but_reverse -ted_but_find -ted_but_replace -ted_text_colored -ted_go_to_position -version_text_edit -frame_draw -version_frame -progressbar_draw -progressbar_progress -tooltip_init -tooltip_delete -tooltip_test_show -tooltip_mouse -get_font_size diff --git a/programs/develop/ktcc/trunk/bin/lib/crt0.o b/programs/develop/ktcc/trunk/bin/lib/crt0.o index b857c80565641ceef35a5b36895c6c7327e396d8..598dbd5fcc55a9cee4f36a0c51637eb436c45943 100644 GIT binary patch delta 776 zcmYjPO=uHA6rP#vhE2Lsty&eW1eH{Z5Yi^1wP?^9FIKjViPcJ?6~Ra;LU$DpA<9}X z4uWAt@Sqn@mehk-NUg;sk!la=!JAjHu(B5mB1Nj>o6Ue7*!R7kZ@%{)vp?i_!AGIu zX$g5J=Gpzok7SfCEmK3G?Saqw$qceC z8I7X5hsN@wxnV0&P46SnuN>`Qq)dx4;pCHP$z%s#og1Bw!TAShT_D5 z4{~xTx#oWVDD8s~4KLOdPQO&`f_8IPz|8i8dCQ9|ty~szG_6E!n0Keyi}ZG8sI1%B z1{4sN&6?tVqsJw4l^KMO;wfg%@f|}2HELI08Gcx9)%BU5ST4&6k%`+A5!fYSVG_#0 z0I5MbpftBvLAQ}OKO$PE28ZZ?3IjB&TfFK8UiSK|ySQQ9#U{DM%amiC_I|t*0D-o+UTwHO&RgZJ=-AD^)vt9ue8!gEcj6=iLbpO@OVxuh=7J)bC&-wMw7T+ z1rbyq%NIv;`SHBYqfPMfhYt&UEbyto=K@~{q`<`>|4iVFKnZd@9~9UMNMwXUB0eCn zn_~dX6YgLuj1RUIK!cw)guOWm*c!)6WS&?@$sYM95bs!5$zHNTtOq1abf5K_gttrZ Nqn~PC^sEp;{{V#l-P`~G delta 238 zcmdnP^?`MQf(Qc>0~nZqNeu=z23Cg2dl}UkQzt)VR8zMD3cJ02)N$?wNWtryE#FGm zY?MmaUZ1y7C_UX9_rF8Csb8j}X& VM1^`A$D}ew2 diff --git a/programs/develop/ktcc/trunk/bin/lib/libbox.a b/programs/develop/ktcc/trunk/bin/lib/libbox.a new file mode 100644 index 0000000000000000000000000000000000000000..cf3aa51b7c5b498ce9e652eb2fe7aec3a0ff2d55 GIT binary patch literal 7534 zcmeI0e{38_701`j#k~Y0Qb2JIB}dmkwo-spDpe|iY9WLAM<@=7#F0j+qo$%l27<^R1sO1MK>4FW4pf#s&s0ae&X-H9rs^3GV5GJdh(RUf-}nCxsDEzay=KPMgypsQ9-Q_Q?T`grpr`N zZtC6^CbEGuZqqb%Wx*~WQZi74DcepVqssbxD4L&hv#LkbM)RrGU~Q$;`m&u=O7&Hz ztisx3e!g0lEb4KnJ?ZDF*C*!`_++T5m`(XnoV;5DxIkFiG$MH(PG_spamzd>sT*mz zV+hYj_h{Njd^_;%oL@-O`mzGgPC0?YmyIE*uds*O!@eC+bY(nVqtuz6IjHi~b7s(U z_Ux>ma`i>wGChejCUsMdN7h%E`|8=rV%{EhkB}=Bv-ALS8S7{?3X$}DEJwOYQI+S8 zVpho-PPtXiVA)|gM(v7I{#Z3a&QIGkH#)b-%~aAQbz|+(RV{kSG-!rvDXu{wLGr z;B$#eF~0mL+!1Z_iM?wpe}6mH1hfXOT#S?V(EKipc0P%pbG`Wa1vOUs;|@nF^~c-G znC=5pU$KJwE5(LN$MR?4g5aB{F2+}uN_%2ctCiwCG!qr^(AVh{UubAA&;7Jmk5gM+ z*)+9Kv7e{*-Gzz5Zk)+(8s`5UnA(A-N>9f1WodxxyFJf5$CEnn)YGLW8!$E9x?QzC zOU-HqqT?rPJ5Jq*o#sAO@@j)&onxhG03^BZL+Lwu${1GSQo4pHURTr$6zzC zld#jUv#?9BMc5K-6}Bygv0=Ti1Z)uI!6soL>%_cbEKtEY$9IJJlb=3Ho#3Kw-*j1t&0X~LJoG8~& zGYZ3q*&*U6`3S?k*lhQxq=B<2#Fcd>wyaahgWR9c2Y>!*ztWqMVzEgnrf%eCLaIKu zZBsgy>Z^7t%^$v5iS}r}5_P;~(O72BGUdD3w8&SD{qc7#b?z#L*`n0GCFW@At6SIY zebnZq`x85x{io@iuo1R)2wG$XIbZ1-(WqwBz=tk+ntv%b%| z#JbFSgY_os2dt~CYpj&5()Eh5##tL!x3O+#-O2hOYa?qDYcp#LYa44PYZq%bYY%HL z>ps@~tO-_3x8~ryTGdg?{g7zgge3eC@C)cm$EVT$W$1aqd%-(lG1z_ZKL~9UoJ6@v za1rGe!P6+W3H~0+&4Pb~GM$5o|0bBu#qc{|I#Y$Bcl z(=%e)Ujoy!V)zH(2Eng`>De*u=fLy~8GZ*$&ywLkfax9@{s*{G@GUSsW2U_x2|GP& zhPQ+1o*RA`OwXR-Rxmw-h93vhvuOAUFg=rop9A*@&VlI}HSJSiPh77MoD=*iI1oGs z9vA#`@G-$<@TA}c@NvPv1E-5>;D^Ak2;K!gE%-6;8NqwN zvx57_y;k)lwv|dM;oSJfd*_$C=uJvBN2C+b2&31mb>DMUr*(C@YxRrn#y4JlMQU>S z=woS=&8wP?Z@l;#yzz}Udi}?{uz5$m>uY&%G zEnFsfDX!C_%_x&Q`JqasrNr2c)In*?vE-tBaQEu bZE&KH#%~+S6w8cB&M%|#QxuF3b4vdMe-egs literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/bin/lib/libbuf2d.a b/programs/develop/ktcc/trunk/bin/lib/libbuf2d.a new file mode 100644 index 0000000000000000000000000000000000000000..30a0f85c7f310a072bb4a4a2c160a54971361b17 GIT binary patch literal 3586 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 literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/bin/lib/libck.a b/programs/develop/ktcc/trunk/bin/lib/libck.a new file mode 100644 index 0000000000000000000000000000000000000000..8ce03410102fcd497ea33c50c8e97e2806cdf6eb GIT binary patch literal 136922 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

oIR4P-zr%V!fBQXH8kJC&8m`l4Z)^% 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 literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/bin/lib/libgb.a b/programs/develop/ktcc/trunk/bin/lib/libgb.a new file mode 100644 index 0000000000000000000000000000000000000000..b6680ec90df0c8a9ff1610a2f744ccaf8f2d72c3 GIT binary patch literal 4130 zcmd5n5)5O}ogd`;e9jjg(m1(h?PE3s;r=7fw>;I>*fvF2Zyfz?Yumitw>a3MlxkJV==!()a9_{Sfn&MB zo{?N$1!N8xa;UzGg=!~KII>FXV)VqmEEaL%6^FgKIqLV zS~Yi-3@aGw%>ug`%Cz3;BqwYrUC+2)baoW2`s{Vv%Irmbq9@SfdnE?hBfCAN!LExs$*`$UZV3d^i1ti-mwL5 z4N>nX$*6bEtDy%-rS&!v*hYwX3K`%DEE^YjtlOPp78uo-h*EOwV^k>?iXt>hKnJ@p zP{!#lE-r9v`W6@AfHmI^nNWa?_jHVsCxLef~3)vT!*HI29?RdHicg^?9qxd8^LOXe-1-F{Ek5 zi&IhU5{0VUk`jGGI#w-KpT7|+~YWw z?w;^$-ZuzxwWgzpr3A5zCkhceA0p;qv7T6bumlzwF>DuUY@=0AXyxByKnxdoorq;{ zRE+8I?y4N8RB)rQN=~iARJm-#)D%;EKo*_6*)QCa{}6;zNcvj+x_n$Ss z3H;WiZZ7a6$#xZeHC}*g^!N|Ww}F0xNuQxpzXALKT;o4zJ@H$QH{ms{e+GONrM*(~ zJHh{jAU?kb{H+I+TBG#`z_al&(W+u

+57B>2bB`DLX3G$;$#=lQ;T5*;o@&w_ax zosTive-8RAy6^8RjCZ3a(W$=zx?ju4^HJS@e_0LF`9J%Aa1+~!p`S*+V#v|An*OTk z_0RWxI=@0P8Ir3xD zIE@_q#DQ*H6WcoUXs8>oBgXVY8&a-oBYM#=4u;0! zFeIWIT&{>(--+5>)_xGJ-zN$;h;9ugMR6Lx&C-;V_AV{7GD(v$?PDyOj^69B(`jzL zX6aFS{K?G8(~o1q647*q^lunZPp){KGy3{izv#^KNQJ`+agnKk)9P4W$8&Y zPKv~Jl=7!o^Peif;cs~xCHTu#qoV-`2tZ4_N8De>2P4+*F86QRL2eJY;HU5%d!WTU zxfXZn6_=M>us3`NJIupc(x;c)-{xWk>p++~k^tRm20ScTTE&2$dJB>a09B=cK)~Dt z0=U>DPFMHEAOB&+>TdjZ*`QAR_t~ya{1N*)@xNd@9S2reZ2XZiBmt`9f4vN#GL(j( z>n0Ik0h|Qt>OKZ6V+M%hljBhwmn5iSz}Dtg?F{h6IL&5&Hs_=_-}?D^-sesG{yG#upZ^ k{jJzkfQNWVg8z^S)WhF`K-(k|EP#_hUERlkWy}PB069=0Z~y=R literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/bin/lib/libimg.a b/programs/develop/ktcc/trunk/bin/lib/libimg.a new file mode 100644 index 0000000000000000000000000000000000000000..c5f78061183b4368bab5362a9bf347a8be8e4c7a GIT binary patch literal 2402 zcmd^AO=whC6ux67@nt%N8vn7hBeWWVB#tH$i|adeysZ{E{R zX(;UwXn30}x+#TXDczLRoe&M;kV;L!Y`SW<#ln;k+=zq{`uxtl=O%AJtBdY>;k@&G z_ndp~J?Gvtv-g;3=gz+!>5H|Fg8`~=@EeOAjt{a&CL)B`Dn#gu|4J^Fi-oLRNaI_$ zG?6Zp3XTY3nsmx(dm<|~;30|gR<4}4B(zHFFlSq)qh|9~#j(p(c9u9@G^>^^XL4n? zT`OP4KMg|w|o;S(#JHyu;jDmk-g2~jMY zd6ivnnQq}(l|RzoFDo8DIxwJ0pNV{yJb6463gH6O2#Gea!G!QS)O^2G-D0!o5F;~x zdamK^=={}5j(V5Fwm0X!A!~%pAX`k=`q*v zC&LYL9k2ajG_S|&%Zp)AyAzJr6NIoq%5$UBkDb?knyx#$Q@(372H=ip?K8*Mnt$C5 zzX2-7mKP23&dm2?w;CP!r9@wQU6e5CtMJ`y|!pH z?|bitYpcGyiB2LTj=o1JPDSJOxod6*Qd@1d)t3D9INAFu)k+^S>7#A_ZQy8UPJ5>e zRhB4RR}$}k$cH*}de}P^#nF^?o3wsFW_g0Z!k1eY)*ggsl4}{Y>?LWNuDhLglWRUk zbNhKriN@$ZzK{Gi^R($D*Oq_Y1q&U6hJG^H3t~18J_-30@+IUe$W_Q3WFB%4@*Ctn zuDbef#!R+E@}P2y)an~JU4O<~z^yeDDq zD;bBIE`YUFt(A?(YgO;*_|NOUEy$Rj`aafFIpSZl{+9LktiOXTvhxiDOYWu0H&NZw}B~l&8L8=2Aa!05-b(e7 zV`iZpTWZ@X_Bz(bj_4&Mf8_sP|6{1miwt^+^w9X9N#6PbzdTw`6{bO**(s6wywj#$ zL^~+Clb->hmrNXHIUa%xKPBECScCDZSa20{6pz;Gc(fD^yFPZqkijIKSNpvJOtJKy O|WM+0|-^|WS_b{H_j*mNzRTpnRJP5pg82Fauij@AftbU;ChaDnnu#Sn0 zuan8+({rArg`Fn%bcx_JEr_CMI!U6)PGzIt@IBWJ0>z`CsUOHjhNlghnCqzE_SM0cw>XQT8y_lG6tTBtt{uto{gsVU7W`Y ztf`e~sDHc5xWoRHDDE(~&fgKo>#B&Ys>8pg-@o7(??PU2jC(p3hjhbw#oA`Y8d1OO NUwG&9kW~qAAm8M0V#WXf literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/bin/lib/libmsgbox.a b/programs/develop/ktcc/trunk/bin/lib/libmsgbox.a new file mode 100644 index 0000000000000000000000000000000000000000..a23e5827779de722d0547a74f775b46a7868f69b GIT binary patch literal 2196 zcmds2y>8S%5FY19l(^y=C}1gj9Ct{d2qZ`mrJ#Wd;n;_PL-!-ui_vs@n&lf7qKvl7( zDnC==Cf2cVElXE4yJ55#>^;MiuzCbnhw?En2KInFOTD|m9U%8CT!49K1yI@{_^5`i zy2<@bnIDZGbuu|aD+8@X-4NP3gYVOVegDll@d656=EMo~y3C2U(CacM Nen9Uz&_XpQ{s8s7+RXp} literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/bin/lib/libnetwork.a b/programs/develop/ktcc/trunk/bin/lib/libnetwork.a new file mode 100644 index 0000000000000000000000000000000000000000..200b6f9f588b54650610088d133a6e0870a352a3 GIT binary patch literal 1412 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 z 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

  • Slpw+y=*YU&3?t_?+F|bb-X3ey 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 Xs<$R~u+lJ>(KG+tP318h>i+)#L&|0y literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/bin/doc/en/Features.txt b/programs/develop/ktcc/trunk/kx/doc/en/Features.txt similarity index 100% rename from programs/develop/ktcc/trunk/bin/doc/en/Features.txt rename to programs/develop/ktcc/trunk/kx/doc/en/Features.txt diff --git a/programs/develop/ktcc/trunk/bin/doc/en/How to use.txt b/programs/develop/ktcc/trunk/kx/doc/en/How to use.txt similarity index 100% rename from programs/develop/ktcc/trunk/bin/doc/en/How to use.txt rename to programs/develop/ktcc/trunk/kx/doc/en/How to use.txt diff --git a/programs/develop/ktcc/trunk/bin/doc/ru/Features.txt b/programs/develop/ktcc/trunk/kx/doc/ru/Features.txt similarity index 100% rename from programs/develop/ktcc/trunk/bin/doc/ru/Features.txt rename to programs/develop/ktcc/trunk/kx/doc/ru/Features.txt diff --git a/programs/develop/ktcc/trunk/bin/doc/ru/History.txt b/programs/develop/ktcc/trunk/kx/doc/ru/History.txt similarity index 100% rename from programs/develop/ktcc/trunk/bin/doc/ru/History.txt rename to programs/develop/ktcc/trunk/kx/doc/ru/History.txt diff --git a/programs/develop/ktcc/trunk/bin/doc/ru/How to use.txt b/programs/develop/ktcc/trunk/kx/doc/ru/How to use.txt similarity index 100% rename from programs/develop/ktcc/trunk/bin/doc/ru/How to use.txt rename to programs/develop/ktcc/trunk/kx/doc/ru/How to use.txt diff --git a/programs/develop/ktcc/trunk/bin/lib/box.def b/programs/develop/ktcc/trunk/kx/lib/box.def similarity index 100% rename from programs/develop/ktcc/trunk/bin/lib/box.def rename to programs/develop/ktcc/trunk/kx/lib/box.def diff --git a/programs/develop/ktcc/trunk/bin/lib/console.def b/programs/develop/ktcc/trunk/kx/lib/console.def similarity index 100% rename from programs/develop/ktcc/trunk/bin/lib/console.def rename to programs/develop/ktcc/trunk/kx/lib/console.def diff --git a/programs/develop/ktcc/trunk/kx/lib/crt0.o b/programs/develop/ktcc/trunk/kx/lib/crt0.o new file mode 100644 index 0000000000000000000000000000000000000000..b857c80565641ceef35a5b36895c6c7327e396d8 GIT binary patch literal 752 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 ZTwPlaTHX#n#zP#MVY+qzcwxHs{{p~jV^078 literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/kx/lib/libcryptal.a b/programs/develop/ktcc/trunk/kx/lib/libcryptal.a new file mode 100644 index 0000000000000000000000000000000000000000..59467f1660c8e0ff6c960d98c0fe18f97f6d228b GIT binary patch literal 61346 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 EFX%=VwEzGB literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/kx/lib/libtcc.a b/programs/develop/ktcc/trunk/kx/lib/libtcc.a new file mode 100644 index 0000000000000000000000000000000000000000..77e05da5e8b1232f9ec40bed14c96f5e922a6c9e GIT binary patch literal 6644 zcmd^DVN4vy6`lhU4)@x-rdDGoX?;#<%BATAj7@`7HCB@8kBUw0DBJW$6^uD7s326_ z;o4OkhhAtj8eHXvt44}{SSm?q#0RdT-Dzz)^&AgfS-n{p{H*fZ4@Aq1ITHC+Bd+vudegoBSWCLS#~bVPdl>8V#xkv~&8^2X&Brp`oltPBv%4kJ`$VcEeJn_& z)=(!D)p4TtiFEo{s)HC6kqQzgd}5Vnl|j$8cDA+jG`F_2wzn~I82%@_O^h~+O~d~E zDkk;&49Afjr+L#4LZJ{sYL&g=30s;yxan7740e*BoUV*QshRkAlCPlb!u z2Adz3Jbd|0&F(i}_IrpvG$RrG=N4KinLgQ-X*r5E)1%r<+lh>J$>-dv#{QySZxigl>S5pbStfG2GW3_wI}iWp(`$ppO#%U3*B=YDuL9nGes`l-BmyFv z#o`EfwiAozz_%x$FAxiCd_NQ#e-G{rV^O#LSe(=A1!M7;e6l($AF7VXrs~+=%Zu0k z2qN5k1NQ*cvF$$_;l3*%z8UUK;MorDPl9iwJ46xFcK2Y#zPaG#Q;Ik65d`9xT;8T*%W(zFZ ze_qMXOKYleBKm7`NrJ_mlGgkuR|TIC_RKH_nc(Bj{T{E9i=sbF*#^eCzY;4JnR){Q zG(z;afR<8SlJ6q%XR3*h&j`M#wJ%{t@L_2!O1>oRVX-4SRw2rq8dM_Ks_lCaVp?Fr zm}OMn>8pex0!m2XYewN~M&Wxf8VaL-9ufSaFh3eo48NRZ8IfEZ}(dE1pU? z1S)$ID2Fzi@*CJ-9cj&c+nT?f&jM0m%{XD2#tXc*XW#{6;00q~0}LFFLxr?1B_;$P zQSM)wUW6IKIxnpeX`i3|s0uzJqKF)(JoGU&jc89QyOh9;u+AxgbDn?-h$nzNn3DD+ zJk@c=+ysU01HlJ{JtX;%2l}&jku8Sm_b?fRZ4q=Z<%RP)XFRjAiL%HJ0%1U+| z`*=y%ImwG^<4`by1|jPvr42xGh!$y`B(0tV_ED}B0nb}ng%I#pi2*oa0~hQWS{};* z4gr(wnB-JTsCc|9?4?gWfRz9OD@I?%7JvglWGVXUSZEaK7@7bu@RX9%4oe8To;|4!6;IRIl~LE zXk*^>fJPu;GQJ=zL^+l%#G?aV5sqbZacLpkc|l>BE~q_J94(+O7M*$}3w{*sZ>c^q zKQ^6vJx+ujqm(O7e@NAcl7{A>V1wH)o4lYPxlS7(f1Ne}APoens<-!H z%LX_oUl)To6ud&E76uNG2PCE09fQAfr@&L}n_vJ1Omkg@E2rGKE)2RTF2P_E_u9~@ zGBB`9jUyDr!-uZiQ=J_TJ4p;ViFM-(w!1L9KqZ>ZbJwG|`@gsbVKT?Vb9QlIR&UFG z^_fDxt1lC01U*cR=5FmgUz@Ann2> z=o+_Nu{BuaWfc&s|ykc>E^iQ1t8w!l)`XO*>!0kHn+4whRQZ?jv4L+c`rL5nx?z2}Q{XEr z5rVC()MZLr34y+4I_(x#tqlJ^TL~zz`{@^t`{2ecs@K|QE84%mA+ZW}b){d+6Z9e6 z1pN*z^$q<8^yyqO^!w=V!b=H7{8U^h?1pyHkK;A`dGu=nbQ%8e)CTBE(Dw!CFQ8A) zT}WNJC!@8fPjW=>1zm&1UPenaW$inluWGsh?Fdqk4oI3mi1uHgsTvdgL$q;ZFZoUM zqiA0Q{fwp`N1H&AG;}-YS3nzmzX1I=&?(I?(B2Pc4gCV>-v{VdKv!152F*{^=-;64 z*8aQ&dJmj_PtVVw{TTF1n*Jx+bNF&FbOH1OUtFal(31mAxRF21TuQX++g<<8*T3lv z-VXbhzBlwDxG70@%l_3cE`ytrbQkT9;6k`5dBDF1UcKp8S#bdD$0U2rnhl4)Vdqv`be%i^B4PR*2V*B8i;+vbBTp-fqGXM7E7 zn+L9{2PP{%K%kx)94-fSpBlqQqHxQ + +int main(){ + + char* kx_ext = +#ifndef __KX__ + "not " +#endif + "supported" + ; + + printf("KX extension %s", kx_ext); + + return 0; +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/kx/src/tests/kxtest.sh b/programs/develop/ktcc/trunk/kx/src/tests/kxtest.sh new file mode 100644 index 0000000000..94fb434702 --- /dev/null +++ b/programs/develop/ktcc/trunk/kx/src/tests/kxtest.sh @@ -0,0 +1,3 @@ +#SHS +../../../tcc ../src/tests/kxtest.c -o kxtest -I../../include -llibc +exit \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/lib/boxlib/Makefile b/programs/develop/ktcc/trunk/lib/boxlib/Makefile new file mode 100644 index 0000000000..599c114e04 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/boxlib/Makefile @@ -0,0 +1,10 @@ +all: + fasm boxlib.asm + ar -crs libbox.a boxlib.o + +clean: + rm -f *.a + rm -f *.o + +install: + mv libbox.a ../../bin/lib diff --git a/programs/develop/ktcc/trunk/lib/boxlib/boxlib.asm b/programs/develop/ktcc/trunk/lib/boxlib/boxlib.asm new file mode 100644 index 0000000000..0392ca3853 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/boxlib/boxlib.asm @@ -0,0 +1,230 @@ +; writed by maxcodehack +; adaptation of clayer for ktcc +format elf +use32 ; Tell compiler to use 32 bit instructions +; ELF section +section '.text' executable + + +include '../../../../../proc32.inc' +include '../../../../../macros.inc' +purge section,mov,add,sub + +include '../../../../../dll.inc' + + +public init_boxlib as 'kolibri_boxlib_init' + +proc init_boxlib +local retval dd ? + mov [retval], eax + pusha + mcall 68, 11 + test eax, eax + jnz @f + mov [retval], -1 + jmp exit_init_boxlib +@@: + stdcall dll.Load, @IMPORT + test eax, eax + jz exit_init_boxlib + mov [retval], -1 +exit_init_boxlib: + popa + mov eax, [retval] + ret +endp + +;; Wrapper to handle edit_box_key function for editboxes. +;; Call this baby from C (refer kolibri_editbox.h for details) +public editbox_key_thunk as 'edit_box_key' ; renamed due to ambiguity +;; replaced by siemargl as inline ASM in C wrapper +editbox_key_thunk: + mov eax, [esp+8] + mov [oldebp], ebp ;Save ebp because GCC is crazy for it otherwise. + pop ebp ;Save return address in ebp. Stack top is param now. + ;mov eax, dword [press_key] + call [edit_box_key] ; The pointer we passed should be on the stack already. + push ebp ;push the return address back to stack + mov ebp, [oldebp] + ret +oldebp dd ? + +section '.data' writeable + +@IMPORT: +library lib_boxlib, 'box_lib.obj' + +import lib_boxlib, \ + edit_box_draw, 'edit_box' , \ + edit_box_key, 'edit_box_key' , \ + edit_box_mouse, 'edit_box_mouse', \ + edit_box_set_text, 'edit_box_set_text' , \ + init_checkbox2, 'init_checkbox2' , \ + check_box_draw2, 'check_box_draw2' , \ + check_box_mouse2, 'check_box_mouse2' , \ + option_box_draw, 'option_box_draw' , \ + option_box_mouse, 'option_box_mouse' , \ + scrollbar_v_draw, 'scrollbar_v_draw' , \ + scrollbar_v_mouse, 'scrollbar_v_mouse' , \ + scrollbar_h_draw, 'scrollbar_h_draw' , \ + scrollbar_h_mouse, 'scrollbar_h_mouse' , \ + dynamic_button_draw, 'dbutton_draw' , \ + dynamic_button_mouse, 'dbutton_mouse' , \ + menu_bar_draw, 'menu_bar_draw' , \ + menu_bar_mouse, 'menu_bar_mouse' , \ + menu_bar_activate, 'menu_bar_activate' , \ + fb_draw_panel, 'FileBrowser_draw' , \ + fb_mouse, 'FileBrowser_mouse' , \ + fb_key, 'FileBrowser_key' , \ + tl_data_init, 'tl_data_init' , \ + tl_data_clear, 'tl_data_clear' , \ + tl_info_clear, 'tl_info_clear' , \ + tl_key, 'tl_key' , \ + tl_mouse, 'tl_mouse' , \ + tl_draw, 'tl_draw' , \ + tl_info_undo, 'tl_info_undo' , \ + tl_info_redo, 'tl_info_redo' , \ + tl_node_add, 'tl_node_add' , \ + tl_node_set_data, 'tl_node_set_data' , \ + tl_node_get_data, 'tl_node_get_data' , \ + tl_node_delete, 'tl_node_delete' , \ + tl_cur_beg, 'tl_cur_beg' , \ + tl_cur_next, 'tl_cur_next' , \ + tl_cur_perv, 'tl_cur_perv' , \ + tl_node_close_open, 'tl_node_close_open' , \ + tl_node_lev_inc, 'tl_node_lev_inc' , \ + tl_node_lev_dec, 'tl_node_lev_dec' , \ + tl_node_move_up, 'tl_node_move_up' , \ + tl_node_move_down, 'tl_node_move_down' , \ + tl_node_poi_get_info, 'tl_node_poi_get_info' , \ + tl_node_poi_get_next_info, 'tl_node_poi_get_next_info' , \ + tl_node_poi_get_data, 'tl_node_poi_get_data' , \ + tl_save_mem, 'tl_save_mem' , \ + tl_load_mem, 'tl_load_mem' , \ + tl_get_mem_size, 'tl_get_mem_size' , \ + path_show_prepare, 'PathShow_prepare' , \ + path_show_draw, 'PathShow_draw' , \ + ted_but_sumb_upper, 'ted_but_sumb_upper' , \ + ted_but_sumb_lover, 'ted_but_sumb_lover' , \ + ted_but_convert_by_table, 'ted_but_convert_by_table' , \ + ted_can_save, 'ted_can_save' , \ + ted_clear, 'ted_clear' , \ + ted_delete, 'ted_delete' , \ + ted_draw, 'ted_draw' , \ + ted_init, 'ted_init' , \ + ted_init_scroll_bars, 'ted_init_scroll_bars' , \ + ted_init_syntax_file, 'ted_init_syntax_file' , \ + ted_is_select, 'ted_is_select' , \ + ted_key, 'ted_key' , \ + ted_mouse, 'ted_mouse' , \ + ted_open_file, 'ted_open_file' , \ + ted_save_file, 'ted_save_file' , \ + ted_text_add, 'ted_text_add' , \ + ted_but_select_word, 'ted_but_select_word' , \ + ted_but_cut, 'ted_but_cut' , \ + ted_but_copy, 'ted_but_copy' , \ + ted_but_paste, 'ted_but_paste' , \ + ted_but_undo, 'ted_but_undo' , \ + ted_but_redo, 'ted_but_redo' , \ + ted_but_reverse, 'ted_but_reverse' , \ + ted_but_find, 'ted_but_find' , \ + ted_but_replace, 'ted_but_replace' , \ + ted_text_colored, 'ted_text_colored' , \ + ted_go_to_position, 'ted_go_to_position' , \ + frame_draw, 'frame_draw' , \ + progressbar_draw,'progressbar_draw' , \ + progressbar_progress, 'progressbar_progress' + + +public edit_box_draw as 'edit_box_draw' +;public edit_box_key as 'edit_box_key' + +public edit_box_mouse as 'edit_box_mouse' +public edit_box_set_text as 'edit_box_set_text' + +public check_box_draw2 as 'check_box_draw2' +public check_box_mouse2 as 'check_box_mouse2' +public init_checkbox2 as 'init_checkbox2' + +public progressbar_draw as 'progressbar_draw' +public progressbar_progress as 'progressbar_progress' + +public frame_draw as 'frame_draw' + +public scrollbar_v_draw as 'scrollbar_v_draw' +public scrollbar_v_mouse as 'scrollbar_v_mouse' +public scrollbar_h_draw as 'scrollbar_h_draw' +public scrollbar_h_mouse as 'scrollbar_h_mouse' + +public option_box_draw as 'option_box_draw' +public option_box_mouse as 'option_box_mouse' + +public menu_bar_draw as 'menu_bar_draw' +public menu_bar_mouse as 'menu_bar_mouse' +public menu_bar_activate as 'menu_bar_activate' + +public dynamic_button_draw as 'dynamic_button_draw' +public dynamic_button_mouse as 'dynamic_button_mouse' + +public path_show_prepare as 'path_show_prepare' +public path_show_draw as 'path_show_draw' + +public fb_draw_panel as 'filebrowse_draw' +public fb_mouse as 'filebrowse_mouse' +public fb_key as 'filebrowse_key' + +public ted_but_sumb_upper as 'ted_but_sumb_upper' +public ted_but_sumb_lover as 'ted_but_sumb_lover' +public ted_but_convert_by_table as 'ted_but_convert_by_table' +public ted_can_save as 'ted_can_save' +public ted_clear as 'ted_clear' +public ted_delete as 'ted_delete' +public ted_draw as 'ted_draw' +public ted_init as 'ted_init' +public ted_init_scroll_bars as 'ted_init_scroll_bars' +public ted_init_syntax_file as 'ted_init_syntax_file' +public ted_is_select as 'ted_is_select' +public ted_key as 'ted_key_asm' +public ted_mouse as 'ted_mouse' +public ted_open_file as 'ted_open_file_asm' +public ted_save_file as 'ted_save_file_asm' +public ted_text_add as '_ted_text_add' +public ted_but_select_word as 'ted_but_select_word' +public ted_but_cut as 'ted_but_cut' +public ted_but_copy as 'ted_but_copy' +public ted_but_paste as 'ted_but_paste' +public ted_but_undo as 'ted_but_undo' +public ted_but_redo as 'ted_but_redo' +public ted_but_reverse as 'ted_but_reverse' +public ted_but_find as 'ted_but_find' +public ted_but_replace as 'ted_but_replace' +public ted_text_colored as 'ted_text_colored_asm' +public ted_go_to_position as 'ted_go_to_position' + +public tl_data_init as 'tl_data_init' +public tl_data_clear as 'tl_data_clear' +public tl_info_clear as 'tl_info_clear' +public tl_key as 'tl_key_asm' +public tl_mouse as 'tl_mouse' +public tl_draw as 'tl_draw' +public tl_info_undo as 'tl_info_undo' +public tl_info_redo as 'tl_info_redo' +public tl_node_add as 'tl_node_add' +public tl_node_set_data as 'tl_node_set_data' +public tl_node_get_data as 'tl_node_get_data' +public tl_node_delete as 'tl_node_delete' +public tl_cur_beg as 'tl_cur_beg' +public tl_cur_next as 'tl_cur_next' +public tl_cur_perv as 'tl_cur_perv' +public tl_node_close_open as 'tl_node_close_open' +public tl_node_lev_inc as 'tl_node_lev_inc' +public tl_node_lev_dec as 'tl_node_lev_dec' +public tl_node_move_up as 'tl_node_move_up' +public tl_node_move_down as 'tl_node_move_down' +public tl_node_poi_get_info as 'tl_node_poi_get_info' +public tl_node_poi_get_next_info as 'tl_node_poi_get_next_info' +public tl_node_poi_get_data as 'tl_node_poi_get_data' +public tl_save_mem as 'tl_save_mem_asm' +public tl_load_mem as 'tl_load_mem_asm' +public tl_get_mem_size as 'tl_get_mem_size_asm' diff --git a/programs/develop/ktcc/trunk/lib/buf2d/Makefile b/programs/develop/ktcc/trunk/lib/buf2d/Makefile new file mode 100644 index 0000000000..eee026f811 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/buf2d/Makefile @@ -0,0 +1,10 @@ +all: + fasm buf2d.asm buf2d.o + ar -csr libbuf2d.a buf2d.o + +clean: + rm -f *.a + rm -f *.o + +install: + mv *.a ../../bin/lib diff --git a/programs/develop/ktcc/trunk/lib/buf2d/buf2d.asm b/programs/develop/ktcc/trunk/lib/buf2d/buf2d.asm new file mode 100644 index 0000000000..27a149b0b5 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/buf2d/buf2d.asm @@ -0,0 +1,90 @@ +format elf +use32 ; Tell compiler to use 32 bit instructions + +section '.text' executable + +include '../../../../../proc32.inc' +include '../../../../../macros.inc' +purge section,mov,add,sub + +include '../../../../../dll.inc' + +;public lib_init as 'kolibri_buf2d_init' +;;; Returns 0 on success. -1 on failure. +public init_buf2d as 'kolibri_buf2d_init' + +proc init_buf2d + pusha + mcall 68,11 + stdcall dll.Load, @IMPORT + popa + ret +endp + +section '.data' writeable + +@IMPORT: +library lib_buf2d, 'buf2d.obj' + +import lib_buf2d, \ + libbuf2d_init, 'lib_init' , \ + buf2d_create, 'buf2d_create' , \ + buf2d_clear, 'buf2d_clear' , \ + buf2d_draw, 'buf2d_draw' , \ + buf2d_delete, 'buf2d_delete', \ + buf2d_rotate, 'buf2d_rotate', \ + buf2d_resize, 'buf2d_resize', \ + buf2d_line, 'buf2d_line', \ + buf2d_line_sm, 'buf2d_line_sm', \ + buf2d_rect_by_size, 'buf2d_rect_by_size', \ + buf2d_filled_rect_by_size, 'buf2d_filled_rect_by_size', \ + buf2d_circle, 'buf2d_circle', \ + buf2d_img_hdiv2, 'buf2d_img_hdiv2', \ + buf2d_img_wdiv2, 'buf2d_img_wdiv2', \ + buf2d_conv_24_to_8, 'buf2d_conv_24_to_8', \ + buf2d_conv_24_to_32, 'buf2d_conv_24_to_32', \ + buf2d_bit_blt, 'buf2d_bit_blt', \ + buf2d_bit_blt_transp, 'buf2d_bit_blt_transp', \ + buf2d_bit_blt_alpha, 'buf2d_bit_blt_alpha', \ + buf2d_curve_bezier, 'buf2d_curve_bezier', \ + buf2d_convert_text_matrix, 'buf2d_convert_text_matrix', \ + buf2d_draw_text, 'buf2d_draw_text', \ + buf2d_crop_color, 'buf2d_crop_color', \ + buf2d_offset_h, 'buf2d_offset_h', \ + buf2d_flood_fill, 'buf2d_flood_fill', \ + buf2d_set_pixel, 'buf2d_set_pixel', \ + buf2d_get_pixel, 'buf2d_get_pixel', \ + buf2d_flip_h, 'buf2d_flip_h', \ + buf2d_flip_v, 'buf2d_flip_v', \ + buf2d_filter_dither, 'buf2d_filter_dither' + +public libbuf2d_init as 'libimg_init' +public buf2d_create as 'buf2d_create_asm' +public buf2d_clear as 'buf2d_clear' +public buf2d_draw as 'buf2d_draw' +public buf2d_delete as 'buf2d_delete' +public buf2d_rotate as 'buf2d_rotate' +public buf2d_resize as 'buf2d_resize' +public buf2d_line as 'buf2d_line' +public buf2d_line_sm as 'buf2d_line_sm' +public buf2d_rect_by_size as 'buf2d_rect_by_size' +public buf2d_filled_rect_by_size as 'buf2d_filled_rect_by_size' +public buf2d_circle as 'buf2d_circle' +public buf2d_img_hdiv2 as 'buf2d_img_hdiv2' +public buf2d_img_wdiv2 as 'buf2d_img_wdiv2' +public buf2d_conv_24_to_8 as 'buf2d_conv_24_to_8' +public buf2d_conv_24_to_32 as 'buf2d_conv_24_to_32' +public buf2d_bit_blt as 'buf2d_bit_blt' +public buf2d_bit_blt_transp as 'buf2d_bit_blt_transp' +public buf2d_bit_blt_alpha as 'buf2d_bit_blt_alpha' +public buf2d_curve_bezier as 'buf2d_curve_bezier_asm' +public buf2d_convert_text_matrix as 'buf2d_convert_text_matrix' +public buf2d_draw_text as 'buf2d_draw_text' +public buf2d_crop_color as 'buf2d_crop_color' +public buf2d_offset_h as 'buf2d_offset_h' +public buf2d_flood_fill as 'buf2d_flood_fill' +public buf2d_set_pixel as 'buf2d_set_pixel' +public buf2d_get_pixel as 'buf2d_get_pixel' +public buf2d_flip_h as 'buf2d_flip_h' +public buf2d_flip_v as 'buf2d_flip_v' +public buf2d_filter_dither as 'buf2d_filter_dither' diff --git a/programs/develop/ktcc/trunk/lib/http/Makefile b/programs/develop/ktcc/trunk/lib/http/Makefile new file mode 100644 index 0000000000..8cdf824dac --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/http/Makefile @@ -0,0 +1,11 @@ +FASM = fasm + +OBJS = get.o head.o __lib__.o post.o receive.o send.o free.o + +%.o : %.asm + $(FASM) $< + +all: $(OBJS) + ar -rsc libhttp.a *.o + mv -f libhttp.a ../../bin/lib + rm -f *.o diff --git a/programs/develop/ktcc/trunk/lib/http/__lib__.asm b/programs/develop/ktcc/trunk/lib/http/__lib__.asm new file mode 100644 index 0000000000..eac1985673 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/http/__lib__.asm @@ -0,0 +1,9 @@ +format ELF + +include '__lib__.inc' + +section '.text' + +public lib_name + +lib_name db 0x55, 0xAA, lib_name_str, 0 diff --git a/programs/develop/ktcc/trunk/lib/http/__lib__.inc b/programs/develop/ktcc/trunk/lib/http/__lib__.inc new file mode 100644 index 0000000000..879a487980 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/http/__lib__.inc @@ -0,0 +1,2 @@ +lib_name equ @http.obj +lib_name_str equ '/sys/lib/http.obj' \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/lib/http/free.asm b/programs/develop/ktcc/trunk/lib/http/free.asm new file mode 100644 index 0000000000..77e7ee108e --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/http/free.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ http_free +fun_str equ 'free' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/http/get.asm b/programs/develop/ktcc/trunk/lib/http/get.asm new file mode 100644 index 0000000000..d2a1132553 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/http/get.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ http_get +fun_str equ 'get' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/http/head.asm b/programs/develop/ktcc/trunk/lib/http/head.asm new file mode 100644 index 0000000000..5b7ac8b942 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/http/head.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ http_head +fun_str equ 'head' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/http/post.asm b/programs/develop/ktcc/trunk/lib/http/post.asm new file mode 100644 index 0000000000..cedf139378 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/http/post.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ http_post +fun_str equ 'post' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/http/receive.asm b/programs/develop/ktcc/trunk/lib/http/receive.asm new file mode 100644 index 0000000000..5bc616828c --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/http/receive.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ http_receive +fun_str equ 'receive' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/http/send.asm b/programs/develop/ktcc/trunk/lib/http/send.asm new file mode 100644 index 0000000000..3adfe2bb80 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/http/send.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ http_send +fun_str equ 'send' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/inputbox/InputBox.asm b/programs/develop/ktcc/trunk/lib/inputbox/InputBox.asm new file mode 100644 index 0000000000..deebcffe29 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/inputbox/InputBox.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ InputBox +fun_str equ 'InputBox' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/inputbox/__lib__.asm b/programs/develop/ktcc/trunk/lib/inputbox/__lib__.asm new file mode 100644 index 0000000000..eac1985673 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/inputbox/__lib__.asm @@ -0,0 +1,9 @@ +format ELF + +include '__lib__.inc' + +section '.text' + +public lib_name + +lib_name db 0x55, 0xAA, lib_name_str, 0 diff --git a/programs/develop/ktcc/trunk/lib/inputbox/__lib__.inc b/programs/develop/ktcc/trunk/lib/inputbox/__lib__.inc new file mode 100644 index 0000000000..d87c630bb6 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/inputbox/__lib__.inc @@ -0,0 +1,2 @@ +lib_name equ @inputbox.obj +lib_name_str equ '/sys/lib/inputbox.obj' \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/lib/inputbox/make.bat b/programs/develop/ktcc/trunk/lib/inputbox/make.bat new file mode 100644 index 0000000000..1a12411771 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/inputbox/make.bat @@ -0,0 +1,5 @@ +fasm __lib__.asm +fasm InputBox.asm +kos32-ar -ru libinputbox.a *.o +del *.o +pause \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/lib/libimg/Makefile b/programs/develop/ktcc/trunk/lib/libimg/Makefile new file mode 100644 index 0000000000..25caaa1a7f --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/libimg/Makefile @@ -0,0 +1,9 @@ +all: + fasm loadlibimg.asm + ar -csr libimg.a loadlibimg.o + +install: + mv libimg.a ../../bin/lib/libimg.a + +clean: + rm -f *.o *.a diff --git a/programs/develop/ktcc/trunk/lib/libimg/loadlibimg.asm b/programs/develop/ktcc/trunk/lib/libimg/loadlibimg.asm new file mode 100644 index 0000000000..ad2ddf73b6 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/libimg/loadlibimg.asm @@ -0,0 +1,88 @@ +format elf +use32 ; Tell compiler to use 32 bit instructions + +; ELF section +section '.text' executable + + +include '../../../../../proc32.inc' +include '../../../../../macros.inc' +purge section,mov,add,sub + +include '../../../../../dll.inc' + + +public init_libimg as 'kolibri_libimg_init' +;;; Returns 0 on success. -1 on failure. + +proc init_libimg +local retval dd ? + mov [retval], eax + pusha + mcall 68, 11 + test eax, eax + jnz @f + mov [retval], -1 + jmp exit_init_libimg +@@: + stdcall dll.Load, @IMPORT + test eax, eax + jz exit_init_libimg + mov [retval], -1 +exit_init_libimg: + popa + mov eax, [retval] + ret +endp + +; ELF section +section '.data' writeable + +@IMPORT: +library lib_libimg, 'libimg.obj' + +import lib_libimg, \ + libimg_init, 'lib_init' , \ + img_is_img, 'img_is_img' , \ + img_info, 'img_info' , \ + img_from_file, 'img_from_file', \ + img_to_file, 'img_to_file', \ + img_from_rgb, 'img_from_rgb', \ + img_to_rgb, 'img_to_rgb', \ + img_to_rgb2, 'img_to_rgb2', \ + img_decode, 'img_decode', \ + img_encode, 'img_encode', \ + img_create, 'img_create', \ + img_destroy, 'img_destroy', \ + img_destroy_layer, 'img_destroy_layer', \ + img_count, 'img_count', \ + img_lock_bits, 'img_lock_bits', \ + img_unlock_bits, 'img_unlock_bits', \ + img_flip, 'img_flip', \ + img_flip_layer, 'img_flip_layer', \ + img_rotate, 'img_rotate', \ + img_rotate_layer, 'img_rotate_layer', \ + img_draw, 'img_draw', \ + img_blend, 'img_blend', \ + img_convert, 'img_convert', \ + img_resize_data, 'img_resize_data', \ + img_scale, 'img_scale' + +public libimg_init as 'libimg_init' +public img_to_rgb as 'img_to_rgb' +public img_to_rgb2 as 'img_to_rgb2' +public img_decode as 'img_decode' +public img_encode as 'img_encode' +public img_create as 'img_create' +public img_destroy as 'img_destroy' +public img_destroy_layer as 'img_destroy_layer' +public img_count as 'img_count' +public img_flip as 'img_flip' +public img_flip_layer as 'img_flip_layer' +public img_rotate as 'img_rotate' +public img_rotate_layer as 'img_rotate_layer' +public img_draw as 'img_draw' +public img_blend as 'img_blend' +public img_convert as 'img_convert' +public img_resize_data as 'img_resize_data' +public img_scale as 'img_scale' diff --git a/programs/develop/ktcc/trunk/lib/libnetwork/Makefile b/programs/develop/ktcc/trunk/lib/libnetwork/Makefile new file mode 100644 index 0000000000..688aaa7184 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/libnetwork/Makefile @@ -0,0 +1,7 @@ +all: + fasm network.asm + ar -csr libnetwork.a network.o +clean: + rm -f *.o *.a +install: + cp libnetwork.a ../../bin/lib diff --git a/programs/develop/ktcc/trunk/lib/libnetwork/network.asm b/programs/develop/ktcc/trunk/lib/libnetwork/network.asm new file mode 100644 index 0000000000..58da472707 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/libnetwork/network.asm @@ -0,0 +1,50 @@ +format elf +use32 ; Tell compiler to use 32 bit instructions +; ELF section +section '.text' executable + + +include '../../../../../proc32.inc' +include '../../../../../macros.inc' +purge section,mov,add,sub + +include '../../../../../dll.inc' + + +public lib_init as 'networklib_init' + + +proc lib_init +local retval dd ? + mov [retval], eax + pusha + mcall 68, 11 + test eax, eax + jnz @f + mov [retval], -1 + jmp exit_init_networklib +@@: + stdcall dll.Load, @IMPORT + test eax, eax + jz exit_init_networklib + mov [retval], -1 +exit_init_networklib: + popa + mov eax, [retval] + ret +endp + +section '.data' writeable +@IMPORT: +library networklib, 'network.obj' + +import networklib, \ + inet_addr, 'inet_addr', \ + inet_ntoa, 'inet_ntoa', \ + getaddrinfo, 'getaddrinfo', \ + freeaddrinfo, 'freeaddrinfo' + +public inet_addr as 'inet_addr' +public inet_ntoa as 'inet_ntoa' +public getaddrinfo as 'getaddrinfo' +public freeaddrinfo as 'freeaddrinfo' diff --git a/programs/develop/ktcc/trunk/lib/librasterworks/__lib__.asm b/programs/develop/ktcc/trunk/lib/librasterworks/__lib__.asm new file mode 100644 index 0000000000..eac1985673 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/librasterworks/__lib__.asm @@ -0,0 +1,9 @@ +format ELF + +include '__lib__.inc' + +section '.text' + +public lib_name + +lib_name db 0x55, 0xAA, lib_name_str, 0 diff --git a/programs/develop/ktcc/trunk/lib/librasterworks/__lib__.inc b/programs/develop/ktcc/trunk/lib/librasterworks/__lib__.inc new file mode 100644 index 0000000000..c53f9e5523 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/librasterworks/__lib__.inc @@ -0,0 +1,2 @@ +lib_name equ @RASTERWORKS.OBJ +lib_name_str equ '/sys/lib/RASTERWORKS.OBJ' diff --git a/programs/develop/ktcc/trunk/lib/librasterworks/charsFit.asm b/programs/develop/ktcc/trunk/lib/librasterworks/charsFit.asm new file mode 100644 index 0000000000..97dc8a6a58 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/librasterworks/charsFit.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ charsFit +fun_str equ 'charsFit' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/librasterworks/cntUTF-8.asm b/programs/develop/ktcc/trunk/lib/librasterworks/cntUTF-8.asm new file mode 100644 index 0000000000..6720eac7c0 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/librasterworks/cntUTF-8.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ countUTF8Z +fun_str equ 'cntUTF-8' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/librasterworks/drawText.asm b/programs/develop/ktcc/trunk/lib/librasterworks/drawText.asm new file mode 100644 index 0000000000..9662bc0372 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/librasterworks/drawText.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ drawText +fun_str equ 'drawText' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/librasterworks/make.bat b/programs/develop/ktcc/trunk/lib/librasterworks/make.bat new file mode 100644 index 0000000000..c70d398a69 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/librasterworks/make.bat @@ -0,0 +1,7 @@ +fasm __lib__.asm +fasm mb_create.asm +fasm mb_reinit.asm +fasm mb_setfunctions.asm +kos32-ar -ru libmsgbox.a *.o +del *.o +pause diff --git a/programs/develop/ktcc/trunk/lib/librasterworks/makefile b/programs/develop/ktcc/trunk/lib/librasterworks/makefile new file mode 100644 index 0000000000..078c46ff73 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/librasterworks/makefile @@ -0,0 +1,9 @@ +all: + fasm __lib__.asm + fasm charsFit.asm + fasm cntUTF-8.asm + fasm drawText.asm + fasm strWidth.asm + ar -crs librasterworks.a *.o +clean: + rm -f *.o diff --git a/programs/develop/ktcc/trunk/lib/librasterworks/strWidth.asm b/programs/develop/ktcc/trunk/lib/librasterworks/strWidth.asm new file mode 100644 index 0000000000..81a3d7e553 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/librasterworks/strWidth.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ strWidth +fun_str equ 'strWidth' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/msgbox/__lib__.asm b/programs/develop/ktcc/trunk/lib/msgbox/__lib__.asm new file mode 100644 index 0000000000..eac1985673 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/msgbox/__lib__.asm @@ -0,0 +1,9 @@ +format ELF + +include '__lib__.inc' + +section '.text' + +public lib_name + +lib_name db 0x55, 0xAA, lib_name_str, 0 diff --git a/programs/develop/ktcc/trunk/lib/msgbox/__lib__.inc b/programs/develop/ktcc/trunk/lib/msgbox/__lib__.inc new file mode 100644 index 0000000000..eef5773a7d --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/msgbox/__lib__.inc @@ -0,0 +1,2 @@ +lib_name equ @msgbox.obj +lib_name_str equ '/sys/lib/msgbox.obj' diff --git a/programs/develop/ktcc/trunk/lib/msgbox/make.bat b/programs/develop/ktcc/trunk/lib/msgbox/make.bat new file mode 100644 index 0000000000..c70d398a69 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/msgbox/make.bat @@ -0,0 +1,7 @@ +fasm __lib__.asm +fasm mb_create.asm +fasm mb_reinit.asm +fasm mb_setfunctions.asm +kos32-ar -ru libmsgbox.a *.o +del *.o +pause diff --git a/programs/develop/ktcc/trunk/lib/msgbox/makefile b/programs/develop/ktcc/trunk/lib/msgbox/makefile new file mode 100644 index 0000000000..13ccbefce7 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/msgbox/makefile @@ -0,0 +1,8 @@ +all: + fasm __lib__.asm + fasm mb_create.asm + fasm mb_reinit.asm + fasm mb_setfunctions.asm + kos32-ar -ru libmsgbox.a *.o +clean: + rm -f *.o diff --git a/programs/develop/ktcc/trunk/lib/msgbox/mb_create.asm b/programs/develop/ktcc/trunk/lib/msgbox/mb_create.asm new file mode 100644 index 0000000000..a94f017c9b --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/msgbox/mb_create.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ msgbox_create +fun_str equ 'mb_create' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/msgbox/mb_reinit.asm b/programs/develop/ktcc/trunk/lib/msgbox/mb_reinit.asm new file mode 100644 index 0000000000..2cf8a0db27 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/msgbox/mb_reinit.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ msgbox_reinit +fun_str equ 'mb_reinit' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/msgbox/mb_setfunctions.asm b/programs/develop/ktcc/trunk/lib/msgbox/mb_setfunctions.asm new file mode 100644 index 0000000000..20ae112cbf --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/msgbox/mb_setfunctions.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ msgbox_setfunctions +fun_str equ 'mb_setfunctions' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/lib/proc_lib/Makefile b/programs/develop/ktcc/trunk/lib/proc_lib/Makefile new file mode 100644 index 0000000000..0e373d6650 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/proc_lib/Makefile @@ -0,0 +1,7 @@ +all: + fasm loadproclib.asm + ar -csr libdialog.a loadproclib.o +install: + mv libdialog.a ../../bin/lib +clean: + rm -f *.o *.a diff --git a/programs/develop/ktcc/trunk/lib/proc_lib/loadproclib.asm b/programs/develop/ktcc/trunk/lib/proc_lib/loadproclib.asm new file mode 100644 index 0000000000..d60a8c7842 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/proc_lib/loadproclib.asm @@ -0,0 +1,39 @@ + +format elf +use32 ; Tell compiler to use 32 bit instructions + +section '.text' executable ; Keep this line before includes or GCC messes up call addresses + +include '../../../../../proc32.inc' +include '../../../../../macros.inc' +purge section,mov,add,sub + +include '../../../../../dll.inc' + +public init_proclib as 'kolibri_dialog_init' +;;; Returns 0 on success. -1 on failure. + +proc init_proclib + pusha + mcall 68,11 + stdcall dll.Load, @IMPORT + popa + ret +endp + +section '.data' writeable + +@IMPORT: +library lib_boxlib, 'proc_lib.obj' + +import lib_boxlib, \ + OpenDialog_init, 'OpenDialog_init' , \ + OpenDialog_start, 'OpenDialog_start' , \ + ColorDialog_init, 'ColorDialog_init' , \ + ColorDialog_start, 'ColorDialog_start' + +public OpenDialog_init as 'OpenDialog_init' +public OpenDialog_start as 'OpenDialog_start' + +public ColorDialog_init as 'ColorDialog_init' +public ColorDialog_start as 'ColorDialog_start' diff --git a/programs/develop/ktcc/trunk/lib/sample/__lib__.asm b/programs/develop/ktcc/trunk/lib/sample/__lib__.asm new file mode 100644 index 0000000000..eac1985673 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/sample/__lib__.asm @@ -0,0 +1,9 @@ +format ELF + +include '__lib__.inc' + +section '.text' + +public lib_name + +lib_name db 0x55, 0xAA, lib_name_str, 0 diff --git a/programs/develop/ktcc/trunk/lib/sample/__lib__.inc b/programs/develop/ktcc/trunk/lib/sample/__lib__.inc new file mode 100644 index 0000000000..96b5a49c17 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/sample/__lib__.inc @@ -0,0 +1,2 @@ +lib_name equ @sample.obj +lib_name_str equ '/sys/lib/sample.obj' \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/lib/sample/howto.txt b/programs/develop/ktcc/trunk/lib/sample/howto.txt new file mode 100644 index 0000000000..cfd9ed8851 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/sample/howto.txt @@ -0,0 +1,13 @@ +Create new library wrapper + +1. Redefine lib_name and lib_name_str in __lib__.inc +2. Create file for each symbol, basing on sample_symbol.asm and for each: +2.1. Redefine fun to *your_symbol_name* +2.2. Redefine fun_name to '*your_symbol_name*' (with quotes, this is ASCII string, no trailing zero need) +3. Change make.bat as appropriate + +ACHTUNG: lib_name need to be unique in project, this is why I started it with "@" and put "." into. +ACHTUNG: lib_name_str must be at least 5 symbols long, if is not, fix this adding padding to the path. + +Now you can create header file and declare extern variables pointers-to-functions, and then link your app with -llibname (put .a file in lib folder). +For examples of such header files, look at include/kos/inputbox.h, include/kos/console.h and include/kos/http.h. IMO, first one is the simplest. diff --git a/programs/develop/ktcc/trunk/lib/sample/make.bat b/programs/develop/ktcc/trunk/lib/sample/make.bat new file mode 100644 index 0000000000..4b82311b24 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/sample/make.bat @@ -0,0 +1,5 @@ +fasm __lib__.asm +fasm sample_symbol.asm +kos32-ar -ru libsample.a *.o +del *.o +pause \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/lib/sample/sample_symbol.asm b/programs/develop/ktcc/trunk/lib/sample/sample_symbol.asm new file mode 100644 index 0000000000..613ad69a91 --- /dev/null +++ b/programs/develop/ktcc/trunk/lib/sample/sample_symbol.asm @@ -0,0 +1,18 @@ +format ELF + +include "__lib__.inc" + +fun equ sample_symbol +fun_str equ 'sample_symbol' + +section '.text' + +fun_name db fun_str, 0 + +section '.data' + +extrn lib_name +public fun + +fun dd fun_name +lib dd lib_name diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/boxlib.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/boxlib.h index 9476a2f96d..3162f1b361 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/boxlib.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/boxlib.h @@ -3,12 +3,10 @@ #ifndef KOLIBRI_BOXLIB_H #define KOLIBRI_BOXLIB_H -#include "sys/ksys.h" -#include -#include - typedef unsigned color_t; +extern int kolibri_boxlib_init(void); + /* flags meaning */ #define ed_figure_only 0b1000000000000000 // одни символы #define ed_always_focus 0b100000000000000 // всегда с курсором (фокусом) @@ -68,10 +66,10 @@ typedef struct { uint32_t ar_offset; } __attribute__ ((__packed__)) scrollbar; -extern void __stdcall (*scrollbar_h_draw)(scrollbar*); -extern void __stdcall (*scrollbar_h_mouse)(scrollbar*); -extern void __stdcall (*scrollbar_v_draw)(scrollbar*); -extern void __stdcall (*scrollbar_v_mouse)(scrollbar*); +extern void (*scrollbar_h_draw __attribute__((__stdcall__)))(scrollbar*); +extern void (*scrollbar_h_mouse __attribute__((__stdcall__)))(scrollbar*); +extern void (*scrollbar_v_draw __attribute__((__stdcall__)))(scrollbar*); +extern void (*scrollbar_v_mouse __attribute__((__stdcall__)))(scrollbar*); // CHECKBOX typedef struct { @@ -88,9 +86,9 @@ typedef struct { unsigned int size_of_str; }check_box; -extern void __stdcall (*check_box_draw2)(check_box *); -extern void __stdcall (*check_box_mouse2)(check_box *); -extern void __stdcall (*init_checkbox2)(check_box *); +extern void (*check_box_draw2 __attribute__((__stdcall__)))(check_box *); +extern void (*check_box_mouse2 __attribute__((__stdcall__)))(check_box *); +extern void (*init_checkbox2 __attribute__((__stdcall__)))(check_box *); // DBUTTON typedef struct { @@ -110,8 +108,8 @@ typedef struct { uint32_t click; // clicked - 1, zero it after tested } pict_button; -extern void __stdcall (*dynamic_button_draw)(pict_button *); -extern void __stdcall (*dynamic_button_mouse)(pict_button *); +extern void (*dynamic_button_draw __attribute__((__stdcall__)))(pict_button *); +extern void (*dynamic_button_mouse __attribute__((__stdcall__)))(pict_button *); // EDITBOX @@ -143,20 +141,10 @@ typedef struct edit_box_t { }edit_box; #pragma pack(pop) -extern void __stdcall (*edit_box_draw)(edit_box *) __asm__("edit_box"); -extern void __stdcall (*edit_box_key)(edit_box *, unsigned int key_val); -extern void __stdcall (*edit_box_mouse)(edit_box *); -extern void __stdcall (*edit_box_set_text)(edit_box *, char *); - -void edit_box_key_safe(edit_box *e, ksys_oskey_t ch) { - int a=3; - asm_inline ( - "pushl %2 \n\t" - "call *%1 \n\t" - ::"a"(ch.val), "m"(edit_box_key), "m"(e) - :"memory" - ); -} +extern void (*edit_box_draw __attribute__((__stdcall__)))(edit_box *); +extern void edit_box_key (edit_box *, unsigned int key_val)__attribute__((__stdcall__)); +extern void (*edit_box_mouse __attribute__((__stdcall__)))(edit_box *); +extern void (*edit_box_set_text __attribute__((__stdcall__)))(edit_box *, char *); // FRAME typedef struct { @@ -174,7 +162,7 @@ typedef struct { color_t font_bg_color; }frame; -extern void __stdcall (*frame_draw)(frame *); +extern void (*frame_draw)(frame *); // MENUBAR typedef struct @@ -215,9 +203,9 @@ typedef struct uint32_t get_mouse_flag; } menubar; -extern void __stdcall (*menu_bar_draw)(menubar *); -extern void __stdcall (*menu_bar_mouse)(menubar *); -extern void __stdcall (*menu_bar_activate)(menubar *); +extern void (*menu_bar_draw)(menubar *); +extern void (*menu_bar_mouse)(menubar *); +extern void (*menu_bar_activate)(menubar *); // OPTIONBOX typedef struct option_box_t { @@ -234,8 +222,8 @@ typedef struct option_box_t { uint32_t flags; } __attribute__ ((__packed__)) option_box; -extern void __stdcall (*option_box_draw)(option_box **); -extern void __stdcall (*option_box_mouse)(option_box **); +extern void (*option_box_draw __attribute__((__stdcall__)))(option_box **); +extern void (*option_box_mouse __attribute__((__stdcall__)))(option_box **); // PATHSHOW typedef struct { @@ -252,8 +240,8 @@ typedef struct { uint32_t temp_text_length; } __attribute__ ((__packed__)) pathview; -extern void __stdcall (*path_show_prepare)(pathview *); -extern void __stdcall (*path_show_draw)(pathview *); +extern void (*path_show_prepare __attribute__((__stdcall__)))(pathview *); +extern void (*path_show_draw __attribute__((__stdcall__)))(pathview *); // PROGRESSBAR typedef struct { @@ -270,7 +258,8 @@ typedef struct { unsigned int frame_color; } progressbar; -extern void __stdcall (*progressbar_draw)(progressbar *); -extern void __stdcall (*progressbar_progress)(progressbar *); +extern void (*progressbar_draw __attribute__((__stdcall__)))(progressbar *); +extern void (*progressbar_progress __attribute__((__stdcall__)))(progressbar *); + #endif /* KOLIBRI_BOXLIB_H */ diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/buf2d.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/buf2d.h index cdba64648a..74b986d2b1 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/buf2d.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/buf2d.h @@ -2,8 +2,11 @@ #define KOLIBRI_BUF2D_H #include -#include -#include +/*ToDo + * voxel function + */ + +extern int kolibri_buf2d_init(void); typedef struct { unsigned int *buf_pointer; @@ -13,7 +16,7 @@ typedef struct { unsigned int height; unsigned int bgcolor; uint8_t color_bit; -} __attribute__ ((__packed__))buf2d_struct; +} __attribute__ ((__packed__))buf2d_struct; enum BUF2D_ALGORITM_FILTR { SIERRA_LITE, @@ -30,12 +33,12 @@ enum BUF2D_OPT_CROP { BUF2D_OPT_CROP_RIGHT = 8 }; -extern void __stdcall (*buf2d_create_asm)(buf2d_struct *); -extern void __stdcall (*buf2d_curve_bezier_asm)(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_create_asm __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_curve_bezier_asm __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); buf2d_struct* buf2d_create(uint16_t tlx, uint16_t tly, unsigned int sizex, unsigned int sizey, unsigned int font_bgcolor, uint8_t color_bit) { - buf2d_struct *new_buf2d_struct = (buf2d_struct *)_ksys_alloc(sizeof(buf2d_struct)); + buf2d_struct *new_buf2d_struct = (buf2d_struct *)malloc(sizeof(buf2d_struct)); new_buf2d_struct -> left = tlx; new_buf2d_struct -> top = tly; new_buf2d_struct -> width = sizex; @@ -51,31 +54,30 @@ void buf2d_curve_bezier(buf2d_struct *buf, unsigned int p0_x, unsigned int p0_y, buf2d_curve_bezier_asm(buf, (p0_x<<16)+p0_y, (p1_x<<16)+p1_y, (p2_x<<16)+p2_y, color); } -extern void __stdcall (*buf2d_draw)(buf2d_struct *); -extern void __stdcall (*buf2d_clear)(buf2d_struct *, unsigned int); -extern void __stdcall (*buf2d_delete)(buf2d_struct *); -extern void __stdcall (*buf2d_rotate)(buf2d_struct *, unsigned int); -extern void __stdcall (*buf2d_resize)(buf2d_struct *, unsigned int, unsigned int, unsigned int); -extern void __stdcall (*buf2d_line)(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); -extern void __stdcall (*buf2d_line_sm)(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); -extern void __stdcall (*buf2d_rect_by_size)(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); -extern void __stdcall (*buf2d_filled_rect_by_size)(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); -extern void __stdcall (*buf2d_circle)(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); -extern void __stdcall (*buf2d_img_hdiv2)(buf2d_struct *); -extern void __stdcall (*buf2d_img_wdiv2)(buf2d_struct *); -extern void __stdcall (*buf2d_conv_24_to_8)(buf2d_struct *, unsigned int); -extern void __stdcall (*buf2d_conv_24_to_32)(buf2d_struct *, unsigned int); -extern void __stdcall (*buf2d_bit_blt_transp)(buf2d_struct *, unsigned int, unsigned int, buf2d_struct *); -extern void __stdcall (*buf2d_bit_blt_alpha)(buf2d_struct *, unsigned int, unsigned int, buf2d_struct *); -extern void __stdcall (*buf2d_convert_text_matrix)(buf2d_struct *); -extern void __stdcall (*buf2d_draw_text)(buf2d_struct *, buf2d_struct *, const char *, unsigned int, unsigned int); -extern void __stdcall (*buf2d_crop_color)(buf2d_struct *, unsigned int, unsigned int); -extern void __stdcall (*buf2d_offset_h)(buf2d_struct *, unsigned int, unsigned int, unsigned int); -extern void __stdcall (*buf2d_flood_fill)(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); -extern void __stdcall (*buf2d_set_pixel)(buf2d_struct *, unsigned int, unsigned int, unsigned int); -extern unsigned __stdcall (*buf2d_get_pixel)(buf2d_struct *, unsigned int, unsigned int); -extern void __stdcall (*buf2d_flip_h)(buf2d_struct *); -extern void __stdcall (*buf2d_flip_v)(buf2d_struct *); -extern void __stdcall (*buf2d_filter_dither)(buf2d_struct *, unsigned int); - +extern void (*buf2d_draw __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_clear __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); +extern void (*buf2d_delete __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_rotate __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); +extern void (*buf2d_resize __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_line __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_line_sm __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_rect_by_size __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_filled_rect_by_size __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_circle __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_img_hdiv2 __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_img_wdiv2 __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_conv_24_to_8 __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); +extern void (*buf2d_conv_24_to_32 __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); +extern void (*buf2d_bit_blt_transp __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, buf2d_struct *); +extern void (*buf2d_bit_blt_alpha __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, buf2d_struct *); +extern void (*buf2d_convert_text_matrix __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_draw_text __attribute__((__stdcall__)))(buf2d_struct *, buf2d_struct *, const char *, unsigned int, unsigned int); +extern void (*buf2d_crop_color __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int); +extern void (*buf2d_offset_h __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_flood_fill __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_set_pixel __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int); +extern unsigned int (*buf2d_get_pixel __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int); +extern void (*buf2d_flip_h __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_flip_v __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_filter_dither __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); #endif /* KOLIBRI_BUF2D_H */ diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/dialog.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/dialog.h index 5d81066403..3cb7759e0c 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/dialog.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/dialog.h @@ -2,7 +2,6 @@ #define KOLIBRI_DIALOG_H #include - #define NOT_SUCCESS 0 #define SUCCESS 1 @@ -116,10 +115,12 @@ color_dialog* kolibri_new_color_dialog(unsigned int type, unsigned short tlx, un return new_colordialog; } -extern void __stdcall (*OpenDialog_init)(open_dialog *); -extern void __stdcall (*OpenDialog_start)(open_dialog *); +extern void kolibri_dialog_init(); -extern void __stdcall (*ColorDialog_init)(color_dialog *); -extern void __stdcall (*ColorDialog_start)(color_dialog *); +extern void (*OpenDialog_init __attribute__((__stdcall__)))(open_dialog *); +extern void (*OpenDialog_start __attribute__((__stdcall__)))(open_dialog *); + +extern void (*ColorDialog_init __attribute__((__stdcall__)))(color_dialog *); +extern void (*ColorDialog_start __attribute__((__stdcall__)))(color_dialog *); #endif diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/gb.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/gb.h index 564bbd7d6c..7e0ae75bdb 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/gb.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/gb.h @@ -1,13 +1,11 @@ -#ifndef KOLIBRI_GB_H -#define KOLIBRI_GB_H #pragma pack(push, 1) typedef struct { - int w; - int h; - char *bmp; - char *alpha; +int w; +int h; +char *bmp; +char *alpha; } GB_BMP; #pragma pack(pop) @@ -19,5 +17,3 @@ 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); - -#endif // KOLIBRI_GB_H \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/http.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/http.h index 78b0001c43..ac296576e3 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/http.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/http.h @@ -5,10 +5,11 @@ Adapted for TCC's dynamic API by Magomed Kostoev, 2020 */ -#ifndef KOLIBRI_HTTP_H -#define KOLIBRI_HTTP_H +#ifndef _HTTP_H_ +#define _HTTP_H_ -#include +#define cdecl __attribute__ ((cdecl)) +#define stdcall __attribute__ ((stdcall)) // Bitflags for http_msg.flags // status @@ -79,7 +80,7 @@ typedef struct http_msg_s { Initiates a HTTP connection, using 'GET' method. Returns NULL on error, identifier otherwise. */ -extern http_msg * __stdcall (*http_get)(const char *url, http_msg *identifier, unsigned flags, const char *add_header); +extern http_msg * stdcall (*http_get)(const char *url, http_msg *identifier, unsigned flags, const char *add_header); /* url = pointer to ASCIIZ URL @@ -90,7 +91,7 @@ extern http_msg * __stdcall (*http_get)(const char *url, http_msg *identifier, u Initiate a HTTP connection, using 'HEAD' method. Returns NULL on error, identifier otherwise. */ -extern http_msg * __stdcall (*http_head)(const char *url, http_msg *identifier, unsigned flags, const char *add_header); +extern http_msg * stdcall (*http_head)(const char *url, http_msg *identifier, unsigned flags, const char *add_header); /* url = pointer to ASCIIZ URL @@ -105,7 +106,7 @@ extern http_msg * __stdcall (*http_head)(const char *url, http_msg *identifier, using system function 75, 6. Returns 0 on error, identifier otherwise */ -extern http_msg * __stdcall (*http_post)(const char *url, http_msg *identifier, unsigned flags, const char *add_header, +extern http_msg * stdcall (*http_post)(const char *url, http_msg *identifier, unsigned flags, const char *add_header, const char *content_type, unsigned content_length); /* @@ -127,7 +128,7 @@ extern http_msg * __stdcall (*http_post)(const char *url, http_msg *identifier, In content_length you'll find the length of the content. In content_received, you'll find the number of content bytes already received. */ -extern int __stdcall (*http_receive)(http_msg *identifier); +extern int stdcall (*http_receive)(http_msg *identifier); /* identifier = identifier which one of the previous functions returned @@ -136,17 +137,17 @@ extern int __stdcall (*http_receive)(http_msg *identifier); This procedure can be used to send data to the server (POST) Returns number of bytes sent, -1 on error */ -extern int __stdcall (*http_send)(http_msg *identifier, void *dataptr, unsigned datalength); +extern int stdcall (*http_send)(http_msg *identifier, void *dataptr, unsigned datalength); /* Sometimes the http_receive function receives incomplete data. If you have the same problem then a macro can help you: */ -extern int __stdcall (*http_free)(http_msg *identifier); +extern int stdcall (*http_free)(http_msg *identifier); /* Free unused data */ #define http_long_receive(x) while(http_receive(x)){}; -#endif // KOLIBRI_HTTP_H +#endif // _HTTP_H_ diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/inputbox.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/inputbox.h index 3144341a2d..1b2a6c2041 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/inputbox.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/inputbox.h @@ -5,12 +5,13 @@ Adapted for TCC's dynamic API by Magomed Kostoev, 2020 */ -#ifndef KOLIBRI_INPUTBOX_H -#define KOLIBRI_INPUTBOX_H +#ifndef __KOS__INPUTBOX__H________ +#define __KOS__INPUTBOX__H________ -#include +#define cdecl __attribute__ ((cdecl)) +#define stdcall __attribute__ ((stdcall)) -extern unsigned __stdcall (*InputBox)(void* Buffer, char* Caption, char* Prompt, char* Default, +extern unsigned stdcall (*InputBox)(void* Buffer, char* Caption, char* Prompt, char* Default, unsigned long Flags, unsigned long BufferSize, void* RedrawProc); -#endif // KOLIBRI_INPUTBOX_H +#endif // __KOS__INPUTBOX__H________ diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/libimg.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/libimg.h index 355fd84ba4..3b41978be2 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/libimg.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/libimg.h @@ -6,6 +6,10 @@ #include #include +extern int kolibri_libimg_init(void); + +#define _stdcall __attribute__((__stdcall__)) + //list of format id's #define LIBIMG_FORMAT_BMP 1 #define LIBIMG_FORMAT_ICO 2 @@ -95,23 +99,23 @@ typedef struct{ #define ROTATE_90_CCW ROTATE_270_CW #define ROTATE_270_CCW ROTATE_90_CW -extern Image* __stdcall (*img_decode)(void* file_data, uint32_t size, uint32_t b_color); -extern Image* __stdcall (*img_encode)(Image* img, uint32_t length, uint32_t option); -extern Image* __stdcall (*img_create)(uint32_t width, uint32_t height, uint32_t type); -extern void __stdcall (*img_to_rgb2)(Image* img, void *rgb_data); -extern Image* __stdcall (*img_to_rgb)(Image* img); -extern bool __stdcall (*img_flip)(Image* img, uint32_t flip); -extern bool __stdcall (*img_flip_layer)(Image *img, uint32_t flip); -extern bool __stdcall (*img_rotate)(Image *img, uint32_t rotate); -extern bool __stdcall (*img_rotate_layer)(Image* data, uint32_t rotate); -extern void __stdcall (*img_draw)(Image *img, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t xoff, uint32_t yoff); -extern int32_t __stdcall (*img_count)(Image *img); -extern bool __stdcall (*img_destroy)(Image *img); -extern bool __stdcall (*img_destroy_layer)(Image* img); -extern Image* __stdcall (*img_blend)(Image* dst, Image* src, uint32_t out_x, uint32_t out_y, uint32_t in_x, uint32_t in_y, uint32_t width, uint32_t height); -extern Image* __stdcall (*img_convert)(Image *src, Image *dst, uint32_t dst_type, uint32_t, uint32_t); -extern Image* __stdcall (*img_resize_data)(Image *src, uint32_t width, uint32_t height); -extern Image* __stdcall (*img_scale)(Image* src, uint32_t crop_x, uint32_t crop_y, uint32_t crop_width, uint32_t crop_height, Image* dst, uint32_t scale_type, uint32_t inter, uint32_t new_width, uint32_t new_height); +extern Image* (*img_decode _stdcall)(void* file_data, uint32_t size, uint32_t b_color); +extern Image* (*img_encode _stdcall)(Image* img, uint32_t length, uint32_t option); +extern Image* (*img_create _stdcall)(uint32_t width, uint32_t height, uint32_t type); +extern void (*img_to_rgb2 _stdcall)(Image* img, void *rgb_data); +extern Image* (*img_to_rgb _stdcall)(Image* img); +extern bool (*img_flip _stdcall)(Image* img, uint32_t flip); +extern bool (*img_flip_layer _stdcall)(Image *img, uint32_t flip); +extern bool (*img_rotate _stdcall)(Image *img, uint32_t rotate); +extern bool (*img_rotate_layer _stdcall)(Image* data, uint32_t rotate); +extern void (*img_draw _stdcall)(Image *img, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t xoff, uint32_t yoff); +extern int32_t (*img_count _stdcall)(Image *img); +extern bool (*img_destroy _stdcall)(Image *img); +extern bool (*img_destroy_layer _stdcall)(Image* img); +extern Image* (*img_blend _stdcall)(Image* dst, Image* src, uint32_t out_x, uint32_t out_y, uint32_t in_x, uint32_t in_y, uint32_t width, uint32_t height); +extern Image* (*img_convert _stdcall)(Image *src, Image *dst, uint32_t dst_type, uint32_t, uint32_t); +extern Image* (*img_resize_data _stdcall)(Image *src, uint32_t width, uint32_t height); +extern Image* (*img_scale _stdcall)(Image* src, uint32_t crop_x, uint32_t crop_y, uint32_t crop_width, uint32_t crop_height, Image* dst, uint32_t scale_type, uint32_t inter, uint32_t new_width, uint32_t new_height); void img_fill_color(Image* img, uint32_t width, uint32_t height, uint32_t color){ for (uint32_t i = 0; i < width*height; i++) { diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/msgbox.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/msgbox.h index c08d9be086..b0efe61f69 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/msgbox.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/msgbox.h @@ -1,11 +1,11 @@ #ifndef KOLIBRI_MSGBOX_H #define KOLIBRI_MSGBOX_H - #include #include #include #include + typedef struct { uint8_t retval; // 0 - win closed, 1 to n - button num, also default button on start uint8_t reserv; @@ -16,16 +16,16 @@ typedef struct { typedef void (*msgbox_callback)(void); -extern void __stdcall (*mb_create)(msgbox *, void *thread); // clears callbacks, ! if fix lib, we can return eax as of Fn51 -extern void __stdcall (*mb_setfunctions)(msgbox_callback*); // must be called immediately after create, zero-ended array -extern void __stdcall (*mb_reinit)(msgbox *); // recalc sizes when structure changes, called auto when MsgBoxCreate +extern void (*msgbox_create __attribute__((__stdcall__)))(msgbox *, void *thread); // clears callbacks, ! if fix lib, we can return eax as of Fn51 +extern void (*msgbox_setfunctions __attribute__((__stdcall__)))(msgbox_callback*); // must be called immediately after create, zero-ended array +extern void (*msgbox_reinit __attribute__((__stdcall__)))(msgbox *) ; // recalc sizes when structure changes, called auto when MsgBoxCreate static inline msgbox* kolibri_new_msgbox(char* title, char* text, int def_but, ...) /// text can be multilined by code 13 = "\r" /// def_but - highlighted and used on Enter (if zero - default is [X]), user may use Tabs or Arrows /// last params are buttons text, max 8. last must set as NULL { - va_list vl = 0; + va_list vl=0; va_start(vl, def_but); msgbox* box = calloc(sizeof(msgbox), 1); box->retval = (uint8_t)def_but; @@ -48,8 +48,8 @@ static inline msgbox* kolibri_new_msgbox(char* title, char* text, int def_but, . static inline void kolibri_start_msgbox(msgbox* box, msgbox_callback cb[]) { - mb_create(box, &box->top_stack); - if (cb) mb_setfunctions(cb); + (*msgbox_create)(box, &box->top_stack); + if (cb) (*msgbox_setfunctions)(cb); } #endif diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/network.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/network.h index 0f48e4ba7a..3ac45bdebf 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/network.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/network.h @@ -1,9 +1,11 @@ -#ifndef KOLIBRI_NETWORK_H -#define KOLIBRI_NETWORK_H +#ifndef __NETWORK_H +#define __NETWORK_H #include #include +#define stdcall __attribute__ ((stdcall)) + #define EAI_ADDRFAMILY 1 #define EAI_AGAIN 2 #define EAI_BADFLAGS 3 @@ -46,9 +48,10 @@ struct addrinfo { }; #pragma pack(pop) -extern int __stdcall (*inet_addr)(const char* hostname); -extern char* __stdcall (*inet_ntoa)(int ip_addr); -extern int __stdcall (*getaddrinfo)(const char* hostname, const char* servname, const struct addrinfo* hints, struct addrinfo** res); -extern void __stdcall (*freeaddrinfo)(struct addrinfo* ai); +extern int networklib_init (); +extern int stdcall (*inet_addr)(const char* hostname); +extern char* stdcall (*inet_ntoa)(int ip_addr); +extern int stdcall (*getaddrinfo)(const char* hostname, const char* servname, const struct addrinfo* hints, struct addrinfo** res); +extern void stdcall (*freeaddrinfo)(struct addrinfo* ai); #endif diff --git a/programs/develop/ktcc/trunk/libc.obj/include/clayer/rasterworks.h b/programs/develop/ktcc/trunk/libc.obj/include/clayer/rasterworks.h index 7b842a9fcb..4c0aea79d2 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/clayer/rasterworks.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/clayer/rasterworks.h @@ -1,11 +1,11 @@ #ifndef KOLIBRI_RASTERWORKS_H #define KOLIBRI_RASTERWORKS_H -#include +//extern int kolibri_rasterworks_init(void); -extern void __stdcall (*drawText)(void *canvas, int x, int y, const char *string, int charQuantity, int fontColor, int params); -extern int __stdcall (*countUTF8Z)(const char *string, int byteQuantity) __asm__("cntUTF-8"); -extern int __stdcall (*charsFit)(int areaWidth, int charHeight); -extern int __stdcall (*strWidth)(int charQuantity, int charHeight); +extern void (*drawText __attribute__((__stdcall__)))(void *canvas, int x, int y, const char *string, int charQuantity, int fontColor, int params); +extern int (*countUTF8Z __attribute__((__stdcall__)))(const char *string, int byteQuantity); +extern int (*charsFit __attribute__((__stdcall__)))(int areaWidth, int charHeight); +extern int (*strWidth __attribute__((__stdcall__)))(int charQuantity, int charHeight); -#endif /* KOLIBRI_RASTERWORKS_H */ \ No newline at end of file +#endif /* KOLIBRI_RASTERWORKS_H */ diff --git a/programs/develop/ktcc/trunk/libc.obj/include/conio.h b/programs/develop/ktcc/trunk/libc.obj/include/conio.h index 03fda9a338..92c125d981 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/conio.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/conio.h @@ -11,6 +11,9 @@ Adapted for tcc by Siemargl, 2016 #include +#define cdecl __attribute__ ((cdecl)) +#define stdcall __attribute__ ((stdcall)) + /* console.obj exports the following functions */ @@ -35,25 +38,25 @@ typedef unsigned short word; /* 16-bit unsigned integer */ extern int _FUNC(con_init)(void); extern int _FUNC(con_init_opt)(dword wnd_width, dword wnd_height, dword scr_width, dword scr_height, const char* title); -extern void __stdcall _FUNC((*con_exit))(int bCloseWindow); -extern void __stdcall _FUNC((*con_set_title))(const char* title); -extern void __stdcall _FUNC((*con_write_asciiz))(const char* str); -extern void __stdcall _FUNC((*con_write_string))(const char* str, dword length); -extern int __cdecl _FUNC((*con_printf))(const char* format, ...); -extern dword __stdcall _FUNC((*con_get_flags))(void); -extern dword __stdcall _FUNC((*con_set_flags))(dword new_flags); -extern int __stdcall _FUNC((*con_get_font_height))(void); -extern int __stdcall _FUNC((*con_get_cursor_height))(void); -extern int __stdcall _FUNC((*con_set_cursor_height))(int new_height); -extern int __stdcall _FUNC((*con_getch))(void); -extern word __stdcall _FUNC((*con_getch2))(void); -extern int __stdcall _FUNC((*con_kbhit))(void); -extern char* __stdcall _FUNC((*con_gets))(char* str, int n); -typedef int __stdcall _FUNC(* con_gets2_callback)(int keycode, char** pstr, int* pn, int* ppos); -extern char* __stdcall _FUNC((*con_gets2))(con_gets2_callback callback, char* str, int n); -extern void __stdcall _FUNC((*con_cls))(); -extern void __stdcall _FUNC((*con_get_cursor_pos))(int* px, int* py); -extern void __stdcall _FUNC((*con_set_cursor_pos))(int x, int y); +extern void stdcall _FUNC((*con_exit))(int bCloseWindow); +extern void stdcall _FUNC((*con_set_title))(const char* title); +extern void stdcall _FUNC((*con_write_asciiz))(const char* str); +extern void stdcall _FUNC((*con_write_string))(const char* str, dword length); +extern int cdecl _FUNC((*con_printf))(const char* format, ...); +extern dword stdcall _FUNC((*con_get_flags))(void); +extern dword stdcall _FUNC((*con_set_flags))(dword new_flags); +extern int stdcall _FUNC((*con_get_font_height))(void); +extern int stdcall _FUNC((*con_get_cursor_height))(void); +extern int stdcall _FUNC((*con_set_cursor_height))(int new_height); +extern int stdcall _FUNC((*con_getch))(void); +extern word stdcall _FUNC((*con_getch2))(void); +extern int stdcall _FUNC((*con_kbhit))(void); +extern char* stdcall _FUNC((*con_gets))(char* str, int n); +typedef int (stdcall _FUNC(* con_gets2_callback))(int keycode, char** pstr, int* pn, int* ppos); +extern char* stdcall _FUNC((*con_gets2))(con_gets2_callback callback, char* str, int n); +extern void stdcall _FUNC((*con_cls))(); +extern void stdcall _FUNC((*con_get_cursor_pos))(int* px, int* py); +extern void stdcall _FUNC((*con_set_cursor_pos))(int x, int y); extern int _FUNC(__con_is_load); #endif diff --git a/programs/develop/ktcc/trunk/libc.obj/include/stddef.h b/programs/develop/ktcc/trunk/libc.obj/include/stddef.h index 3de65b8da9..34f3f74ca4 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/stddef.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/stddef.h @@ -34,12 +34,4 @@ typedef uint64_t uintmax_t; #define offsetof(type, field) ((size_t)&((type *)0)->field) -#ifndef __stdcall - #define __stdcall __attribute__((stdcall)) -#endif - -#ifndef __cdecl - #define __cdecl __attribute__((cdecl)) -#endif - -#endif /* _STDDEF_H_ */ +#endif /* _STDDEF_H_ */ \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc.obj/include/sys/ksys.h b/programs/develop/ktcc/trunk/libc.obj/include/sys/ksys.h index 1a9245adba..a107ac94cf 100644 --- a/programs/develop/ktcc/trunk/libc.obj/include/sys/ksys.h +++ b/programs/develop/ktcc/trunk/libc.obj/include/sys/ksys.h @@ -218,8 +218,8 @@ enum KSYS_FILE_ENCODING{ KSYS_FILE_UTF8 = 3 }; -static inline -int __strcmp(const char * s1, const char * s2 ) +static inline +int _ksys_strcmp(const char * s1, const char * s2 ) { while ((*s1) && (*s1 == *s2)){ ++s1; ++s2; } return(*(unsigned char*)s1 - *(unsigned char *)s2); @@ -1163,7 +1163,7 @@ void* _ksys_dlsym(ksys_dll_t *table, const char* fun_name){ if (!(table+i)->func_name){ break; }else{ - if (!__strcmp(fun_name, (table+i)->func_name)){ + if (!_ksys_strcmp(fun_name, (table+i)->func_name)){ return (table+i)->func_ptr; } } diff --git a/programs/develop/ktcc/trunk/libc.obj/lib/crt0.o b/programs/develop/ktcc/trunk/libc.obj/lib/crt0.o new file mode 100644 index 0000000000000000000000000000000000000000..598dbd5fcc55a9cee4f36a0c51637eb436c45943 GIT binary patch literal 1340 zcma)5Ur19?7(a7&!mSH|R3c@azVGe~R}aw#_x#THeZTWN-#O>IH{04> z27`g*%s`A}$0MX&$YvUJI7-aKM7;5JSrX-n!d2SVEsqN?ieN=zR#c?#$yVSk?tx(e zMKjJqg&yg0t2GdD%Ver)IN0a!kwi8os7UoimPBpduB@a45_u`u6(`PM1Gg+$rZ;Kz z+_XaXyO|`ajX(!AQ{1(!eOwj}flGQ;QX;aiBx_)|#eNtTT48vKN#+#;Tut_hb_L3< zjIiSQ{ zWS1eG1QC+Pz6*{9DLQ5FVRs(pc$edSjt@9K;wS^x0O~Uw=Q#=x!*~(LQosT@tCjo5 zIo5H!hX`x`w(`6H{(Y5y_(oy{f0D1;4SB3P-#?MZ$1AJjKHhy9{LlED`1~k=z7u`; zaz3dIPmIt&A0Q3s7#bL^r2{u8sqG7gNtgygl=!nS5(thGzdsPV+Mk7SfUy7_0>S?@ zJTLBT=6r0ZXK*(;!@AM%oeK3?cK8aMTQJ2uu16H%!}~(aNo>F*iUDppJzSIHV2T -#include -#include -#include -#include - -#define ARGC_VALID 3 - -enum ARGV_FILE { - IN = 1, - OUT = 2 -}; - -void show_help(void){ - puts("Usage: defgen [lib.obj] [lib.def]"); -} - -int main(int argc, char** argv){ - - if(argc!=ARGC_VALID){ - show_help(); - return 0; - } - - ksys_dll_t *obj_dll = _ksys_dlopen(argv[IN]); - FILE* outfile = fopen(argv[OUT], "w"); - - if(!obj_dll){ - printf("File '%s' not found!\n", argv[IN]); - return 1; - } - - if(!outfile){ - printf("Unable to create file:'%s'!\n", argv[OUT]); - return 2; - } - - fprintf(outfile, "LIBRARY %s\n\n", basename(argv[IN])); - fputs("EXPORTS\n", outfile); - - int i=0; - while(obj_dll[i].func_name){ - fprintf(outfile,"%s\n", obj_dll[i].func_name); - i++; - } - fclose(outfile); - return 0; -} diff --git a/programs/develop/ktcc/trunk/libc.obj/samples/http_tcp_demo.c b/programs/develop/ktcc/trunk/libc.obj/samples/http_tcp_demo.c index 5423a69818..0b79b38006 100644 --- a/programs/develop/ktcc/trunk/libc.obj/samples/http_tcp_demo.c +++ b/programs/develop/ktcc/trunk/libc.obj/samples/http_tcp_demo.c @@ -3,7 +3,11 @@ #include #include +int errno; + int main() { + networklib_init(); + char *host = "kolibrios.org"; int port = 80; printf("Connecting to %s on port %d\n", host, port); diff --git a/programs/develop/ktcc/trunk/libc.obj/samples/string_test.c b/programs/develop/ktcc/trunk/libc.obj/samples/string_test.c index c4b03cacfa..5bf99c36f2 100644 --- a/programs/develop/ktcc/trunk/libc.obj/samples/string_test.c +++ b/programs/develop/ktcc/trunk/libc.obj/samples/string_test.c @@ -8,7 +8,7 @@ int main(int argc, char** argv){ char hello1[]="Hello, KolibriOS!"; char hello2[20]; memcpy(hello1, hello2, strlen(hello1)); - if(!__strcmp(hello1, hello2)){ + if(!_ksys_strcmp(hello1, hello2)){ printf("memcpy: Successfully!\n"); return 0; } else{ diff --git a/programs/develop/ktcc/trunk/libc.obj/samples/whois.c b/programs/develop/ktcc/trunk/libc.obj/samples/whois.c index fcbb51b96e..5d29a63fdb 100644 --- a/programs/develop/ktcc/trunk/libc.obj/samples/whois.c +++ b/programs/develop/ktcc/trunk/libc.obj/samples/whois.c @@ -5,6 +5,8 @@ https://www.binarytides.com/whois-client-code-in-c-with-linux-sockets/ */ #include +int errno; + #include "sys/ksys.h" #include #include @@ -40,7 +42,8 @@ char* str_copy(char*); int main(int argc , char *argv[]) -{ +{ + networklib_init(); char *domain , *data = NULL; int f_flag=0; diff --git a/programs/develop/ktcc/trunk/libc.obj/source/crt/crt0.asm b/programs/develop/ktcc/trunk/libc.obj/source/crt/crt0.asm index 399a9d69cf..7237073af7 100644 --- a/programs/develop/ktcc/trunk/libc.obj/source/crt/crt0.asm +++ b/programs/develop/ktcc/trunk/libc.obj/source/crt/crt0.asm @@ -1,36 +1,39 @@ -; -; 2021, Edited by Coldy -; -; This module same as original crt0.asm, but cut: -; 1. virtual header block (hparams change to __app_params, hpath change to __app_path) -; 2. init heap of memory - not needed because 68.18 (68.19) init heap implicitly -; (it is does dll.obj) -; 3. loader (he lives in dll.obj) -; - format ELF section '.text' executable public start public start as '_start' - +;extrn mf_init extrn main -;include 'debug2.inc' -include '../../../../../../proc32.inc' -include '../../../../../../macros.inc' -__DEBUG__ = 0 +include '../../../../../proc32.inc' +include '../../../../../macros.inc' +include '../../../../../dll.inc' +;include '../../../../../debug.inc' -__app_params equ 0x1C ; Pointer to program arguments -;__app_path equ 0x20 ; Pointer to program path +;start_: +virtual at 0 + db 'MENUET01' ; 1. Magic number (8 bytes) + dd 0x01 ; 2. Version of executable file + dd start ; 3. Start address +imgsz dd 0x0 ; 4. Size of image + dd 0x100000 ; 5. Size of needed memory + dd 0x100000 ; 6. Pointer to stack +hparams dd 0x0 ; 7. Pointer to program arguments +hpath dd 0x0 ; 8. Pointer to program path +end virtual start: ;DEBUGF 'Start programm\n' + ;init heap of memory + mov eax,68 + mov ebx,11 + int 0x40 mov [argc], 0 - mov eax, [__app_params] + mov eax, [hparams] test eax, eax - jz .without_path + jz .without_path mov eax, path - cmp word ptr eax, 32fh ; '/#3' UTF8 + cmp word ptr eax, 32fh ; '/#3' UTF8 jne .without_path mov word ptr eax, 12fh ; '/#1' fix to CP866 .without_path: @@ -39,21 +42,21 @@ start: ; retrieving parameters mov esi, params xor edx, edx ; dl - (1) (0) - ; dh - (1 , 0 ) + ; dh - (1 , 0 ) mov ecx, 1 ; cl = 1 - ; ch = 0 + ; ch = 0 .parse: lodsb test al, al - jz .run + jz .run test dl, dl jnz .findendparam - ;{ + ;{ cmp al, ' ' - jz .parse ; , + jz .parse ; , mov dl, cl ; cmp al, '"' - jz @f ; + jz @f ; mov dh, ch ; dec esi call push_param @@ -67,9 +70,9 @@ start: .findendparam: test dh, dh - jz @f ; + jz @f ; cmp al, '"' - jz .clear + jz .clear jmp .parse @@: cmp al, ' ' @@ -82,6 +85,7 @@ start: jmp .parse .run: + call load_imports push argv push [argc] call main @@ -89,7 +93,7 @@ start: xor eax,eax dec eax int 0x40 - dd -1 + dd -1 .crash: jmp .exit ;============================ @@ -108,9 +112,101 @@ push_param: inc [argc] .dont_add: ret - - ;============================== + +;============================== +load_imports: +;============================== +;parameters +; none +;description +; imports must be located at end of image (but before BSS sections) +; the address of end of imports (next byte after imports) is located in imgsz +; look at each import from that address up to illegal import +; legal import is such that: +; first pointer points to procedure name +; and is smaller than imgsz +; second pointer points lo library name, starting with 0x55, 0xAA +; and is smaller than imgsz +; each library should be initialized as appropriate, once +; so as library is initialized, its name will be replaced 0x00 + mov ebx, [imgsz] ; byte after imports +.handle_next_import: + sub ebx, 4 ; ebx = pointer to pointer to library name + mov esi, dword[ebx] ; esi = pointer to library name + push ebx + push esi + call load_library ; eax = pointer to library exports + pop esi + pop ebx + test eax, eax + jz .done + sub ebx, 4 ; ebx = pointer to pointer to symbol name + push ebx + stdcall dll.GetProcAddress, eax, dword[ebx] + pop ebx + test eax, eax + jz .fail + mov dword[ebx], eax + jmp .handle_next_import +.done: + ;DEBUGF 1, "Library: %s not loaded!\n", esi + ;mcall -1 + ret +.fail: + ret + +;============================== + +;============================== +load_library: +;============================== +;parameters +; ebx: library name address +;description +; each library should be initialized as appropriate, once +; so as library is initialized, its name will be replaced 0x00 +; and 4 next bytes will be set to address of library + ; first two bytes of library name must be 0x55, 0xAA (is like a magic) + cld ; move esi further, not back + cmp esi, [imgsz] + ja .fail + lodsb ; al = first byte of library name + cmp al, 0x55 + jne .fail + lodsb ; al = second byte of library name + cmp al, 0xAA + jne .fail + lodsb ; al = third byte of library name (0x00 if the library is already loaded) + test al, al + jnz .load + lodsd ; if we here, then third byte is 0x00 => address of library is in next 4 bytes + ; now eax contains address of library + ret +.load: + dec esi ; we checked on 0 before, let's go back + mov eax, 68 + mov ebx, 19 + mov ecx, esi + int 0x40 ; eax = address of exports + mov byte[esi], 0 ; library is loaded, let's place 0 in first byte of name + mov [esi + 1], eax ; now next 4 bytes of library name are replaced by address of library + ; call lib_init + stdcall dll.GetProcAddress, eax, lib_init_str ; eax = address of lib_init + test eax, eax + jz .ret + stdcall dll.Init, eax +.ret: + mov eax, [esi + 1] ; put address of library into eax + ret +.fail: + mov eax, 0 + ret + +;============================== + +lib_init_str db 'lib_init', 0 + public argc as '__argc' public params as '__argv' public path as '__path' @@ -118,10 +214,8 @@ public path as '__path' section '.bss' buf_len = 0x400 max_parameters=0x20 -argc rd 1 -argv rd max_parameters -path rb buf_len -params rb buf_len +argc rd 1 +argv rd max_parameters +path rb buf_len +params rb buf_len -;section '.data' -;include_debug_strings ; ALWAYS present in data section diff --git a/programs/develop/ktcc/trunk/libc.obj/source/stdio/conio.c b/programs/develop/ktcc/trunk/libc.obj/source/stdio/conio.c index 0aa0954817..c99924ecaa 100644 --- a/programs/develop/ktcc/trunk/libc.obj/source/stdio/conio.c +++ b/programs/develop/ktcc/trunk/libc.obj/source/stdio/conio.c @@ -7,25 +7,31 @@ static char* __con_dllname = "/sys/lib/console.obj"; int __con_is_load = 0; -void __stdcall (*__con_init_hidden)(int wnd_width, unsigned wnd_height, int scr_width, int scr_height, const char* title); -void __stdcall (*con_exit)(int); -void __stdcall (*con_set_title)(const char* title); -void __stdcall (*con_write_asciiz)(const char* str); -void __stdcall (*con_write_string)(const char* str, dword length); -int __cdecl (*con_printf)(const char* format, ...); -dword __stdcall (*con_get_flags)(void); -dword __stdcall (*con_set_flags)(dword new_flags); -int __stdcall (*con_get_font_height)(void); -int __stdcall (*con_get_cursor_height)(void); -int __stdcall (*con_set_cursor_height)(int new_height); -int __stdcall (*con_getch)(void); -word __stdcall (*con_getch2)(void); -int __stdcall (*con_kbhit)(void); -char* __stdcall (*con_gets)(char* str, int n); -char* __stdcall (*con_gets2)(con_gets2_callback callback, char* str, int n); -void __stdcall (*con_cls)(); -void __stdcall (*con_get_cursor_pos)(int* px, int* py); -void __stdcall (*con_set_cursor_pos)(int x, int y); +void stdcall (*__con_init_hidden)(int wnd_width, unsigned wnd_height, int scr_width, int scr_height, const char* title); +void stdcall (*con_exit)(int); +void stdcall (*con_set_title)(const char* title); +void stdcall (*con_write_asciiz)(const char* str); +void stdcall (*con_write_string)(const char* str, dword length); +int cdecl (*con_printf)(const char* format, ...); +dword stdcall (*con_get_flags)(void); +dword stdcall (*con_set_flags)(dword new_flags); +int stdcall (*con_get_font_height)(void); +int stdcall (*con_get_cursor_height)(void); +int stdcall (*con_set_cursor_height)(int new_height); +int stdcall (*con_getch)(void); +word stdcall (*con_getch2)(void); +int stdcall (*con_kbhit)(void); +char* stdcall (*con_gets)(char* str, int n); +char* stdcall (*con_gets2)(con_gets2_callback callback, char* str, int n); +void stdcall (*con_cls)(); +void stdcall (*con_get_cursor_pos)(int* px, int* py); +void stdcall (*con_set_cursor_pos)(int x, int y); + +/*static void __con_panic(char* func_name) +{ + debug_printf("In console.obj %s=NULL!\n", func_name); + _ksys_exit(); +}*/ static void __con_lib_link(ksys_dll_t *exp) { diff --git a/programs/develop/ktcc/trunk/libc/KOSfuncs_inc_status.txt b/programs/develop/ktcc/trunk/libc/KOSfuncs_inc_status.txt new file mode 100644 index 0000000000..1f5c6af764 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/KOSfuncs_inc_status.txt @@ -0,0 +1,292 @@ + +; KolibriOS system functions: ++SF_TERMINATE_PROCESS=-1 // kos_exit() ++SF_CREATE_WINDOW=0 ; define and draw the window //sys_create_window() +SF_PUT_PIXEL=1 ; draw pixel to the window ++SF_GET_KEY=2 ; get code of the pressed key +SF_GET_SYS_TIME=3 ++SF_DRAW_TEXT=4 //draw_text_sys() ++SF_SLEEP=5 ; pause process // delay() ++SF_PUT_IMAGE=7 ; draw image to the window //draw_bitmap() ++SF_DEFINE_BUTTON=8 ; define/delete the button ++SF_THREAD_INFO=9 ; information on execution thread // get_proc_info() ++SF_WAIT_EVENT=10 ; wait for event // get_os_event() ++SF_CHECK_EVENT=11 ; check for event and return // check_os_event() +SF_REDRAW=12 ++ SSF_BEGIN_DRAW=1 ++ SSF_END_DRAW=2 ++SF_DRAW_RECT=13 ; draw rectangle to the window // draw_bar() +SF_GET_SCREEN_SIZE=14 ; get screen resolution +SF_BACKGROUND_SET=15 + SSF_SIZE_BG=1 + SSF_PIXEL_BG=2 + SSF_REDRAW_BG=3 + SSF_MODE_BG=4 + SSF_IMAGE_BG=5 + SSF_MAP_BG=6 ; map background image to the address space of the process + SSF_UNMAP_BG=7 + SSF_LAST_DRAW=8 ; get coordinates of the last draw to the background + SSF_REDRAW_RECT=9 ; redraws a rectangular part of the background +SF_RD_TO_FLOPPY=16 ; save ramdisk on the floppy ++SF_GET_BUTTON=17 ; get ID of the pressed button // get_os_button() +SF_SYSTEM=18 + SSF_UNFOCUS_WINDOW=1 ; take focus from the window of the given thread + SSF_TERMINATE_THREAD=2 ; terminate process/thread by the slot number ++ SSF_FOCUS_WINDOW=3 ; give focus to the window of the given thread + SSF_GET_IDLE_COUNT=4 ; get counter of idle cycles per second + SSF_GET_CPU_REQUENCY=5 ; get CPU clock rate + SSF_RD_TO_HDD=6 ; save ramdisk to the file on hard disk + SSF_GET_ACTIVE_WINDOW=7 ; get slot number of the active window + SSF_SPEAKER=8 + SSSF_GET_STATE=1 + SSSF_TOGGLE=2 + SSF_SHUTDOWN=9 ; system shutdown/reboot + SSF_MINIMIZE_WINDOW=10 ; minimize active window + SSF_INFO_DISC_SYS=11 ; get disk subsystem information + SSF_KERNEL_VERSION=13 ; get kernel version + SSF_WAIT_RETRACE=14 ; wait for screen retrace + SSF_CURSOR_CENTER=15 ; center mouse cursor on the screen + SSF_GET_FREE_RAM=16 ; get size of free RAM + SSF_GET_TOTAL_RAM=17 ; get total amount of RAM + SSF_TERMINATE_THREAD_ID=18 ; Terminate process/thread by the ID + SSF_MOUSE_SETTINGS=19 + SSSF_GET_SPEED=0 + SSSF_SET_SPEED=1 + SSSF_GET_SPEEDUP=2 + SSSF_SET_SPEEDUP=3 ; set mouse acceleration + SSSF_SET_POS=4 ; set mouse pointer position + SSSF_SET_BUTTON=5 ; simulate state of mouse buttons + SSSF_GET_DOUBLE_CLICK_DELAY=6 + SSSF_SET_DOUBLE_CLICK_DELAY=7 + SSF_GET_RAM_INFO=20 ; get information on RAM ++ SSF_GET_THREAD_SLOT=21 ; get slot number of process/thread by the ID + SSF_FOREIGN_WINDOW=22 ; operations with window of another thread by slot/ID + SSSF_MINIMIZE=0 + SSSF_MINIMIZE_ID=1 + SSSF_RESTORE=2 + SSSF_RESTORE_ID=3 + SSF_MINIMIZE_ALL=23 + SSF_SET_SCREEN_LIMITS=24 + SSF_WINDOW_BEHAVIOR=25 ; window focus relation with other windows + SSSF_GET_WB=1 + SSSF_SET_WB=2 +SF_MIDI=20 + SSF_RESET=1 + SSF_OUTPUT=2 +SF_SYSTEM_SET=21 + SSF_MPU_MIDI_BASE=1 + SSF_KEYBOARD_LAYOUT=2 + SSF_SYS_LANG=5 + SSF_ACCESS_HD_LBA=11 ; setting of low-level access to HD + SSF_ACCESS_PCI=12 ; setting of low-level access to PCI +SF_SET_TIME_DATE=22 ++SF_WAIT_EVENT_TIMEOUT=23; wait for event with timeout // wait_for_event() +SF_CD=24 + SSF_EJECT_TRAY=4 + SSF_INSERT_TRAY=5 +SF_SCREEN_PUT_IMAGE=25 ; put image on the background layer +SF_SYSTEM_GET=26 + ; Same as SF_SYSTEM_SET, plus: ++ SSF_TIME_COUNT=9 // get_tick_count() ++ SSF_TIME_COUNT_PRO=10 ; get value of the high precision time counter // get_ns_count() +SF_GET_SYS_DATE=29 +SF_CURRENT_FOLDER=30 ++ SSF_SET_CF=1 ; set current folder for the thread // set_current_folder() ++ SSF_GET_CF=2 // get_current_folder() + SSF_ADD_SYS_FOLDER=3 ; install the add.system directory for the kernel +SF_GET_PIXEL_OWNER=34 ; get slot number of the screen pixel owner +SF_GET_PIXEL=35 ; read the screen pixel color +SF_GET_IMAGE=36 ; read the screen area +SF_MOUSE_GET=37 ++ SSF_SCREEN_POSITION=0 // get_mouse_pos(POS_SCREEN) ++ SSF_WINDOW_POSITION=1 // get_mouse_pos(POS_WINDOW) ++ SSF_BUTTON=2 ; states of the mouse buttons //get_mouse_buttons() ++ SSF_BUTTON_EXT=3 ; states and events of the mouse buttons // get_mouse_eventstate() ++ SSF_LOAD_CURSOR=4 ++ SSF_SET_CURSOR=5 ++ SSF_DEL_CURSOR=6 // destroy_cursor() ++ SSF_SCROLL_DATA=7 //get_mouse_wheels() ++SF_DRAW_LINE=38 +SF_BACKGROUND_GET=39 + ;SSF_SIZE_BG=1 + ;SSF_PIXEL_BG=2 + ;SSF_MODE_BG=4 ++SF_SET_EVENTS_MASK=40 ; turn on/off desired events +SF_PORT_IN_OUT=43 ; input/output to a port +SF_SET_PORTS=46 ; reserve/free a group of input/output ports ++SF_DRAW_NUMBER=47 ; draw number to the window // draw_number_sys() +SF_STYLE_SETTINGS=48 + SSF_APPLY=0 ; apply screen settings + SSF_SET_BUTTON_STYLE=1 + SSF_SET_COLORS=2 ++ SSF_GET_COLORS=3 ; get standard window colors // get_system_colors() ++ SSF_GET_SKIN_HEIGHT=4 + SSF_GET_SCREEN_AREA=5 ; get screen working area + SSF_SET_SCREEN_AREA=6 + SSF_GET_SKIN_MARGINS=7 + SSF_SET_SKIN=8 + SSF_GET_FONT_SMOOTH=9 + SSF_SET_FONT_SMOOTH=10 + SSF_GET_FONT_SIZE=11 + SSF_SET_FONT_SIZE=12 +SF_APM=49 +SF_SET_WINDOW_SHAPE=50 ++SF_CREATE_THREAD=51 // start_thread() +SF_CLIPBOARD=54 ++ SSF_GET_SLOT_COUNT=0 ; get the number of slots in the clipboard // kol_clip_num() ++ SSF_READ_CB=1 // kol_clip_get() ++ SSF_WRITE_CB=2 // kol_clip_set() ++ SSF_DEL_SLOT=3 ; delete the last slot in the clipboard // kol_clip_pop() ++ SSF_UNLOCK_BUFFER=4 ; emergency buffer unlock // kol_clip_unlock() +SF_SPEAKER_PLAY=55 +SF_PCI_BIOS=57 +SF_IPC=60 ; Inter Process Communication ++ SSF_SET_AREA=1 ; set area for IPC receiving // ipc_set_area() ++ SSF_SEND_MESSAGE=2 // ipc_send_message() +SF_GET_GRAPHICAL_PARAMS=61 ++ SSF_SCREEN_SIZE=1 // GetScreenSize() + SSF_BITS_PER_PIXEL=2 + SSF_BYTES_PER_LINE=3 +SF_PCI=62 + SSF_GET_VERSION=0 ; get version of PCI-interface + SSF_GET_LAST_BUS=1 ; get number of the last PCI-bus + SSF_GET_ADRR_MODE=2 ; get addressing mode of the PCI configuration space + SSF_READ_BYTE=4 + SSF_READ_WORD=5 + SSF_READ_DWORD=6 + SSF_WRITE_BYTE=8 + SSF_WRITE_WORD=9 + SSF_WRITE_DWORD=10 +SF_BOARD=63 ++ SSF_DEBUG_WRITE=1 // debug_board_write_byte() + SSF_DEBUG_READ=2 +SF_MEMORY_RESIZE=64 ; resize total application memory +SF_PUT_IMAGE_EXT=65 ; draw image with palette to the window +SF_KEYBOARD=66 + SSF_SET_INPUT_MODE=1 + SSF_GET_INPUT_MODE=2 + SSF_GET_CONTROL_KEYS=3; get status of control keys + SSF_SET_SYS_HOTKEY=4 + SSF_DEL_SYS_HOTKEY=5 + SSF_LOCK_INPUT=6 ; block normal input + SSF_UNLOCK_INPUT=7 ; restore normal input +SF_CHANGE_WINDOW=67 ; change position/sizes of the window +SF_SYS_MISC=68 + SSF_GET_TASK_SWITCH_COUNT=0 ++ SSF_SWITCH_TASK=1 //yield() + SSF_PERFORMANCE=2 + SSSF_ALLOW_RDPMC=0 + SSSF_CACHE_STATUS=1 + SSSF_CACHE_ON=2 + SSSF_CACHE_OFF=3 + SSF_READ_MSR=3 + SSF_WRITE_MSR=4 + SSF_HEAP_INIT=11 ++ SSF_MEM_ALLOC=12 // user_alloc() ++ SSF_MEM_FREE=13 // user_free() + SSF_WAIT_SIGNAL=14 ; wait for signal from another program/driver ++ SSF_LOAD_DRIVER=16 // get_service() ++ SSF_CONTROL_DRIVER=17 // call_service() + SSF_LOAD_DLL=19 ++ SSF_MEM_REALLOC=20 //user_realloc() + SSF_LOAD_DRIVER_PE=21 ++ SSF_MEM_OPEN=22 ; open named memory area // shm_open() ++ SSF_MEM_CLOSE=23 // shm_close() + SSF_SET_EXCEPTION_HANDLER=24 + SSF_SET_EXCEPTION_STATE=25 ++ SSF_MEM_FREE_EXT=26 // user_unmap() ++ SSF_LOAD_FILE=27 +SF_DEBUG=69 + SSF_SET_MESSAGE_AREA=0 + SSF_GET_REGISTERS=1 + SSF_SET_REGISTERS=2 + SSF_DETACH=3 + SSF_SUSPEND=4 + SSF_RESUME=5 + SSF_READ_MEMORY=6 + SSF_WRITE_MEMORY=7 + SSF_TERMINATE=8 + SSF_DEFINE_BREAKPOINT=9 +SF_FILE=70 + SSF_READ_FILE=0 + SSF_READ_FOLDER=1 + SSF_CREATE_FILE=2 + SSF_WRITE_FILE=3 + SSF_SET_END=4 + SSF_GET_INFO=5 + SSF_SET_INFO=6 ++ SSF_START_APP=7 + SSF_DELETE=8 + SSF_CREATE_FOLDER=9 +SF_SET_CAPTION=71 +SF_SEND_MESSAGE=72 ++SF_BLITTER=73 //Blit() +SF_NETWORK_GET=74 + SSF_DEVICE_COUNT=255 ; get number of active network devices + SSF_DEVICE_TYPE=0 + SSF_DEVICE_NAME=1 + SSF_RESET_DEVICE=2 + SSF_STOP_DEVICE=3 + SSF_DEVICE_POINER=4 + SSF_TX_PACKET_COUNT=6 + SSF_RX_PACKET_COUNT=7 + SSF_TX_BYTE_COUNT=8 + SSF_RX_BYTE_COUNT=9 + SSF_LINK_STATUS=10 +SF_NETWORK_SOCKET=75 + SSF_OPEN=0 + SSF_CLOSE=1 + SSF_BIND=2 + SSF_LISTEN=3 + SSF_CONNECT=4 + SSF_ACCEPT=5 + SSF_SEND=6 + SSF_RECEIVE=7 + SSF_SET_OPTIONS=8 + SSF_GET_OPTIONS=9 + SSF_GET_PAIR=10 +SF_NETWORK_PROTOCOL=76 + SSF_ETHERNET_READ_MAC=0 + SSF_IP4_PACKETS_SENT=10000h + SSF_IP4_PACKETS_RECEIVED=10001h + SSF_IP4_READ_IP=10002h + SSF_IP4_WRITE_IP=10003h + SSF_IP4_READ_DNS=10004h + SSF_IP4_WRITE_DNS=10005h + SSF_IP4_READ_SUBNET=10006h + SSF_IP4_WRITE_SUBNET=10007h + SSF_IP4_READ_GATEWAY=10008h + SSF_IP4_WRITE_GATEWAY=10009h + SSF_ICMP_PACKETS_SENT=20000h + SSF_ICMP_PACKETS_RECEIVED=20001h + SSF_ICMP_ECHO_REPLY=20003h + SSF_UDP_PACKETS_SENT=30000h + SSF_UDP_PACKETS_RECEIVED=30001h + SSF_TCP_PACKETS_SENT=40000h + SSF_TCP_PACKETS_RECEIVED=40001h + SSF_ARP_PACKETS_SENT=50000h + SSF_ARP_PACKETS_RECEIVED=50001h + SSF_ARP_GET_ENTRY_COUNT=50002h + SSF_ARP_READ_ENTRY=50003h + SSF_ARP_ADD_STATIC_ENTRY=50004h + SSF_ARP_DEL_ENTRY=50005h + SSF_ARP_SEND_ANNOUNCE=50006h + SSF_ARP_CONFLICTS_COUNT=50007h +SF_FUTEX=77 + SSF_CREATE=0 + SSF_DESTROY=1 + SSF_WAIT=2 + SSF_WAKE=3 + +; File system errors: +FSERR_SUCCESS=0 +FSERR_UNSUPPORTED=2 +FSERR_UNKNOWN=3 +FSERR_FILE_NOT_FOUND=5 +FSERR_END_OF_FILE=6 +FSERR_INVALID_BUFFER=7 +FSERR_DISK_FULL=8 +FSERR_FAIL=9 +FSERR_ACCESS_DENIED=10 +FSERR_DEVICE_FAIL=11 +FSERR_OUT_OF_MEMORY=12 diff --git a/programs/develop/ktcc/trunk/libc/Makefile b/programs/develop/ktcc/trunk/libc/Makefile new file mode 100644 index 0000000000..80e3a941ec --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/Makefile @@ -0,0 +1,33 @@ +INCLUDE = include +LIBSFORBUILD = math +LIBNAME = libck.a +CC = ../bin/kos32-tcc +CFLAGS = -I$(INCLUDE) -m32 -nostdinc -nostdlib -DGNUC +DIRS := stdio memory kolibrisys string stdlib math dlfcn libgen fs net + +############################################################## +#files := $(foreach dir,$(DIRS),$(dir)/$(wildcard $(dir)/*)) +asmfiles := $(foreach dir,$(DIRS),$(patsubst %.asm, %.o, $(wildcard $(dir)/*.asm))) +cfiles := $(foreach dir,$(DIRS),$(patsubst %.c, %.o, $(wildcard $(dir)/*.c))) + +.PHONY: clean all + +ifdef windir +doClean = del /F /Q $(subst /,\,$(cfiles)) $(subst /,\,$(asmfiles)) +else +doClean = rm $(cfiles) $(asmfiles) +endif + +all: $(cfiles) $(asmfiles) + ar -rcs $(LIBNAME) $^ + +$(cfiles): $(INCLUDE)/*.h + +$(asmfiles): + fasm $*.asm $*.o + +clean: + $(doClean) + +install: + cp $(LIBNAME) ../bin/lib diff --git a/programs/develop/ktcc/trunk/libc/build.bat b/programs/develop/ktcc/trunk/libc/build.bat new file mode 100644 index 0000000000..5ff4a305ec --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/build.bat @@ -0,0 +1,71 @@ +@echo off +echo #################################################### +echo # Melibc builder # +echo # usage: build [clean] # +echo #################################################### +rem #### CONFIG SECTION #### +set LIBNAME=libck.a +set INCLUDE=include +set CC=kos32-tcc +set CFLAGS=-c -nostdinc -DGNUC -I"%cd%\%INCLUDE%" -Wall +set AR=kos32-ar +set ASM=fasm +set dirs=stdio memory kolibrisys string stdlib math dlfcn libgen fs net +rem #### END OF CONFIG SECTION #### + +set objs= +set target=%1 +if not "%1"=="clean" set target=all + +set INCLUDE="%cd%" +call :Target_%target% + +if ERRORLEVEL 0 goto Exit_OK + +echo Probably at runing has been created error +echo For help send a report... +pause +goto :eof + +:Compile_C +echo compile .c %1 + %CC% %CFLAGS% %1 -o "%~dpn1.o" + if not %errorlevel%==0 goto Error_Failed + set objs=%objs% "%~dpn1.o" +goto :eof + +:Compile_Asm +echo compile .asm %1 + %ASM% %1 "%~dpn1.o" + if not %errorlevel%==0 goto Error_Failed + set objs=%objs% "%~dpn1.o" +goto :eof + +:Target_clean + echo cleaning ... + for %%a in (%dirs%) do del /Q "%%a\*.o" +goto :Exit_OK + +:Target_all + echo building all ... + for %%a in (%dirs%) do ( + for %%f in ("%%a\*.asm") do call :Compile_Asm "%%f" + for %%f in ("%%a\*.c") do call :Compile_C "%%f" + ) + echo calling AR + %AR% -ru %LIBNAME% %objs% + if not %errorlevel%==0 goto Error_Failed +goto Exit_OK + +:Error_Failed +echo error: execution failed +pause +exit 1 + +:Exit_OK +echo #################################################### +echo # All operations has been done... # +echo # For cleaning run this script with param " clean" # +echo #################################################### +pause +exit 0 diff --git a/programs/develop/ktcc/trunk/libc/dlfcn/dlfcn.c b/programs/develop/ktcc/trunk/libc/dlfcn/dlfcn.c new file mode 100644 index 0000000000..c45969e0bf --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/dlfcn/dlfcn.c @@ -0,0 +1,91 @@ +#include + +#include +#include +#include + +typedef struct { + char *name; + void *ptr; +} KosExp; + +typedef struct { + void **importNames; + char * libraryName; +} KosImp; + +static int stdcall dll_Load(KosImp *importTableEntry); + +static const char *__error; + +static int stdcall dll_Load(KosImp *importTableEntry) { + for (; importTableEntry->importNames; importTableEntry++) { + char libPath[256] = "/sys/lib/"; + KosExp *exports = NULL; + void **libImports = importTableEntry->importNames; + + strcat(libPath, importTableEntry->libraryName); + if (!(exports = dlopen(libPath, 0))) { return 1; } + for (; *libImports; libImports++) { + if (!(*libImports = dlsym(exports, *libImports))) { return 1; } + } + } + return 0; +} + +// https://pubs.opengroup.org/onlinepubs/007908799/xsh/dlopen.html +// Current implementation fully ignores "mode" parameter +void *dlopen(const char *name, int mode) { + KosExp *exports = NULL; + + // load library using syscall + asm volatile ("int $0x40":"=a"(exports):"a"(68), "b"(19), "c"(name)); + if (!exports) { + char libPath[256] = "/sys/lib/"; + + strcat(libPath, name); + asm volatile ("int $0x40":"=a"(exports):"a"(68), "b"(19), "c"(libPath)); + if (!exports) { + __error = "Library not found in \"/sys/lib/\" nor current folder"; + return NULL; + } + } + // call anything starting with "lib_" + for (KosExp *export = exports; export->name; export++) { + if (!memcmp(export->name, "lib_", 4)) { + asm volatile ( + "call *%4" :: + "a"(sysmalloc), + "b"(sysfree), + "c"(sysrealloc), + "d"(dll_Load), + "r"(export->ptr)); + } + } + return exports; +} + +// https://pubs.opengroup.org/onlinepubs/007908799/xsh/dlsym.html +void *dlsym(void *handle, const char *name) { + KosExp *exp = handle; + + for (; exp->name; exp++) { + if (!strcmp(exp->name, name)) { + return exp->ptr; + } + } + __error = "Symbol not found"; + return NULL; +} + +// https://pubs.opengroup.org/onlinepubs/007908799/xsh/dlclose.html +int dlclose(void *handle) { + return 0; +} + +// https://pubs.opengroup.org/onlinepubs/007908799/xsh/dlerror.html +char *dlerror(void) { + char *ret = __error ? strdup(__error) : NULL; + __error = NULL; + return ret; +} diff --git a/programs/develop/ktcc/trunk/libc/fs/dir.c b/programs/develop/ktcc/trunk/libc/fs/dir.c new file mode 100644 index 0000000000..fcf5a877fc --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/fs/dir.c @@ -0,0 +1,108 @@ +/* Copyright (C) 2019-2021 Logaev Maxim (turbocat2001), GPLv3 */ + +#include +#include +#include + +#pragma pack(push,1) +typedef struct { + unsigned p00; + unsigned long long p04; + unsigned p12; + unsigned p16; + char p20; + char *p21; +} kol_struct70; +#pragma pack(pop) + +int kol_file_70(kol_struct70 *k) +{ + asm volatile ("int $0x40"::"a"(70), "b"(k)); +} + +bool dir_operations(unsigned char fun_num, char *path) +{ + kol_struct70 inf; + inf.p00 = fun_num; + inf.p04 = 0; + inf.p12 = 0; + inf.p16 = 0; + inf.p20 = 0; + inf.p21 = path; + if(!kol_file_70(&inf)){ + return true; + } + else { + return false; + } +} + +int lsdir(const char* dir, short_file_info **list) +{ + int num_of_file=0; + kol_struct70 inf; + + inf.p00 = 1; + inf.p04 = 0; + inf.p12 = 2; + inf.p16 = (unsigned) malloc(32+inf.p12*560); + inf.p20 = 0; + inf.p21 = (char*)dir; + + if(kol_file_70(&inf)) + { + free((void*)inf.p16); + return FS_ERROR; + } + + num_of_file = *(unsigned*)(inf.p16+8); + inf.p12 = num_of_file; + free((void*)inf.p16); + inf.p16 = (unsigned) malloc(32+inf.p12*560); + *list = (short_file_info*)malloc(num_of_file*sizeof(short_file_info)); + + if(kol_file_70(&inf)) + { + free((void*)inf.p16); + return FS_ERROR; + } + + for(int i=0; i +/*ToDo + * voxel function + */ + +extern int kolibri_buf2d_init(void); + +typedef struct { + unsigned int *buf_pointer; + uint16_t left; + uint16_t top; + unsigned int width; + unsigned int height; + unsigned int bgcolor; + uint8_t color_bit; +} __attribute__ ((__packed__))buf2d_struct; + +enum BUF2D_ALGORITM_FILTR { + SIERRA_LITE, + FLOYD_STEINBERG, + BURKERS, + HEAVYIRON_MOD, + ATKINSON +}; + +enum BUF2D_OPT_CROP { + BUF2D_OPT_CROP_TOP = 1, + BUF2D_OPT_CROP_LEFT = 2, + BUF2D_OPT_CROP_BOTTOM = 4, + BUF2D_OPT_CROP_RIGHT = 8 +}; + +extern void (*buf2d_create_asm __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_curve_bezier_asm __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); + +buf2d_struct* buf2d_create(uint16_t tlx, uint16_t tly, unsigned int sizex, unsigned int sizey, unsigned int font_bgcolor, uint8_t color_bit) +{ + buf2d_struct *new_buf2d_struct = (buf2d_struct *)malloc(sizeof(buf2d_struct)); + new_buf2d_struct -> left = tlx; + new_buf2d_struct -> top = tly; + new_buf2d_struct -> width = sizex; + new_buf2d_struct -> height = sizey; + new_buf2d_struct -> bgcolor = font_bgcolor; + new_buf2d_struct -> color_bit = color_bit; + buf2d_create_asm(new_buf2d_struct); + return new_buf2d_struct; +} + +void buf2d_curve_bezier(buf2d_struct *buf, unsigned int p0_x, unsigned int p0_y, unsigned int p1_x, unsigned int p1_y, unsigned int p2_x, unsigned int p2_y, unsigned int color) +{ + buf2d_curve_bezier_asm(buf, (p0_x<<16)+p0_y, (p1_x<<16)+p1_y, (p2_x<<16)+p2_y, color); +} + +extern void (*buf2d_draw __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_clear __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); +extern void (*buf2d_delete __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_rotate __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); +extern void (*buf2d_resize __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_line __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_line_sm __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_rect_by_size __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_filled_rect_by_size __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_circle __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_img_hdiv2 __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_img_wdiv2 __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_conv_24_to_8 __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); +extern void (*buf2d_conv_24_to_32 __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); +extern void (*buf2d_bit_blt_transp __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, buf2d_struct *); +extern void (*buf2d_bit_blt_alpha __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, buf2d_struct *); +extern void (*buf2d_convert_text_matrix __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_draw_text __attribute__((__stdcall__)))(buf2d_struct *, buf2d_struct *, const char *, unsigned int, unsigned int); +extern void (*buf2d_crop_color __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int); +extern void (*buf2d_offset_h __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_flood_fill __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int, unsigned int); +extern void (*buf2d_set_pixel __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int, unsigned int); +extern unsigned int (*buf2d_get_pixel __attribute__((__stdcall__)))(buf2d_struct *, unsigned int, unsigned int); +extern void (*buf2d_flip_h __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_flip_v __attribute__((__stdcall__)))(buf2d_struct *); +extern void (*buf2d_filter_dither __attribute__((__stdcall__)))(buf2d_struct *, unsigned int); +#endif /* KOLIBRI_BUF2D_H */ diff --git a/programs/develop/ktcc/trunk/libc/include/clayer/dialog.h b/programs/develop/ktcc/trunk/libc/include/clayer/dialog.h new file mode 100644 index 0000000000..3cb7759e0c --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/clayer/dialog.h @@ -0,0 +1,126 @@ +#ifndef KOLIBRI_DIALOG_H +#define KOLIBRI_DIALOG_H + +#include +#define NOT_SUCCESS 0 +#define SUCCESS 1 + +char sz_com_area_name[] = "FFFFFFFF_open_dialog"; +char sz_dir_default_path[] = "/rd/1"; +char sz_start_path[] = "/rd/1/File managers/opendial"; + +char cd_com_area_name[] = "FFFFFFFF_color_dialog"; +char cd_start_path[] = "/rd/1/colrdial"; + +enum open_dialog_mode { + OPEN, + SAVE, + SELECT +}; + +typedef struct { + unsigned int size; + unsigned char end; +}od_filter __attribute__ ((__packed__)); + +typedef struct { + unsigned int mode; + char* procinfo; + char* com_area_name; + unsigned int com_area; + char* opendir_path; + char* dir_default_path; + char* start_path; + void (*draw_window)(); + unsigned int status; + char* openfile_path; + char* filename_area; + od_filter* filter_area; + unsigned short x_size; + unsigned short x_start; + unsigned short y_size; + unsigned short y_start; +}open_dialog __attribute__ ((__packed__)); + + +typedef struct{ + unsigned int type; + char* procinfo; + char* com_area_name; + unsigned int com_area; + char* start_path; + void (*draw_window)(void); + unsigned int status; + unsigned short x_size; + unsigned short x_start; + unsigned short y_size; + unsigned short y_start; + unsigned int color_type; + unsigned int color; +}color_dialog __attribute__ ((__packed__)); + +void fake_on_redraw(void) {} + +open_dialog* kolibri_new_open_dialog(unsigned int mode, unsigned short tlx, unsigned short tly, unsigned short x_size, unsigned short y_size) +{ + open_dialog *new_opendialog = (open_dialog *)malloc(sizeof(open_dialog)); + od_filter *new_od_filter = (od_filter *)malloc(sizeof(od_filter)); + char *plugin_path = (char *)calloc(4096, sizeof(char)); + char *openfile_path = (char *)calloc(4096, sizeof(char)); + char *proc_info = (char *)calloc(1024, sizeof(char)); + char *filename_area = (char *)calloc(256, sizeof(char)); + + new_od_filter -> size = 0; + new_od_filter -> end = 0; + + new_opendialog -> mode = mode; + new_opendialog -> procinfo = proc_info; + new_opendialog -> com_area_name = sz_com_area_name; + new_opendialog -> com_area = 0; + new_opendialog -> opendir_path = plugin_path; + new_opendialog -> dir_default_path = sz_dir_default_path; + new_opendialog -> start_path = sz_start_path; + new_opendialog -> draw_window = &fake_on_redraw; + new_opendialog -> status = 0; + new_opendialog -> openfile_path = openfile_path; + new_opendialog -> filename_area = filename_area; + new_opendialog -> filter_area = new_od_filter; + new_opendialog -> x_size = x_size; + new_opendialog -> x_start = tlx; + new_opendialog -> y_size = y_size; + new_opendialog -> y_start = tly; + return new_opendialog; +} + +void cd_fake_on_redraw(void) {} + +color_dialog* kolibri_new_color_dialog(unsigned int type, unsigned short tlx, unsigned short tly, unsigned short x_size, unsigned short y_size) +{ + color_dialog *new_colordialog = (color_dialog *)malloc(sizeof(color_dialog)); + char *proc_info = (char *)calloc(1024, sizeof(char)); + + new_colordialog -> type = type; + new_colordialog -> procinfo = proc_info; + new_colordialog -> com_area_name = cd_com_area_name; + new_colordialog -> com_area = 0; + new_colordialog -> start_path = cd_start_path; + new_colordialog -> draw_window = &cd_fake_on_redraw; + new_colordialog -> status = 0; + new_colordialog -> x_size = x_size; + new_colordialog -> x_start = tlx; + new_colordialog -> y_size = y_size; + new_colordialog -> y_start = tly; + new_colordialog -> color_type = 0; + new_colordialog -> color = 0; + return new_colordialog; +} + +extern void kolibri_dialog_init(); + +extern void (*OpenDialog_init __attribute__((__stdcall__)))(open_dialog *); +extern void (*OpenDialog_start __attribute__((__stdcall__)))(open_dialog *); + +extern void (*ColorDialog_init __attribute__((__stdcall__)))(color_dialog *); +extern void (*ColorDialog_start __attribute__((__stdcall__)))(color_dialog *); + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/clayer/gb.h b/programs/develop/ktcc/trunk/libc/include/clayer/gb.h new file mode 100644 index 0000000000..7e0ae75bdb --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/clayer/gb.h @@ -0,0 +1,19 @@ + +#pragma pack(push, 1) +typedef struct +{ +int w; +int h; +char *bmp; +char *alpha; +} GB_BMP; +#pragma pack(pop) + +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/develop/ktcc/trunk/libc/include/clayer/http.h b/programs/develop/ktcc/trunk/libc/include/clayer/http.h new file mode 100644 index 0000000000..ac296576e3 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/clayer/http.h @@ -0,0 +1,153 @@ +/* + This is adapded thunk for http.obj sys library + .h is equal to svn:\\programs\develop\libraries\http\http_en.txt + + Adapted for TCC's dynamic API by Magomed Kostoev, 2020 +*/ + +#ifndef _HTTP_H_ +#define _HTTP_H_ + +#define cdecl __attribute__ ((cdecl)) +#define stdcall __attribute__ ((stdcall)) + +// Bitflags for http_msg.flags +// status + +#define HTTP_FLAG_HTTP11 1 << 0 +#define HTTP_FLAG_GOT_HEADER 1 << 1 +#define HTTP_FLAG_GOT_ALL_DATA 1 << 2 +#define HTTP_FLAG_CONTENT_LENGTH 1 << 3 +#define HTTP_FLAG_CHUNKED 1 << 4 +#define HTTP_FLAG_CONNECTED 1 << 5 + +// user options +#define HTTP_FLAG_KEEPALIVE 1 << 8 +#define HTTP_FLAG_STREAM 1 << 9 +#define HTTP_FLAG_REUSE_BUFFER 1 << 10 +#define HTTP_FLAG_BLOCK 1 << 11 + +// error +#define HTTP_FLAG_INVALID_HEADER 1 << 16 +#define HTTP_FLAG_NO_RAM 1 << 17 +#define HTTP_FLAG_SOCKET_ERROR 1 << 18 +#define HTTP_FLAG_TIMEOUT_ERROR 1 << 19 +#define HTTP_FLAG_TRANSFER_FAILED 1 << 20 + +/* +User flags: + +For the flag codes themselves, see http.inc file. + + FLAG_KEEPALIVE will keep the connection open after first GET/POST/.. so you can send a second request on the same TCP session. +In this case, the session must be closed manually when done by using the exported disconnect() function. + + FLAG_STREAM will force receive() to put the received content in a series of fixed size buffers, instead of everything in one big buffer. +This can be used for example to receive an internet radio stream, +but also to download larger files for which it does not make sense to put them completely in RAM first. + + FLAG_REUSE_BUFFER is to be used in combination with FLAG_STREAM and will make receive() function re-use the same buffer. +This, for example, can be used when downloading a file straight to disk. + + FLAG_BLOCK will make receive() function blocking. This is only to be used when receiving one file from a thread that has no other work. +If however, you want to receive multiple files, or do other things in the program mainloop, you should call the receive function periodically. +You may use system function 10 or 23 to wait for network event before calling one or more receive() functions. +*/ + +#pragma pack(push,1) +typedef struct http_msg_s { + unsigned socket; // socket on which the actual transfer happens + unsigned flags; // flags, reflects status of the transfer using bitflags + unsigned write_ptr; // internal use only (where to write new data in buffer) + unsigned buffer_length; // internal use only (number of available bytes in buffer) + unsigned chunk_ptr; // internal use only (where the next chunk begins) + unsigned timestamp; // internal use only (when last data was received) + unsigned status; // HTTP status + unsigned header_length; // length of HTTP header + void * content_ptr; // ptr to content + unsigned content_length; // total length of HTTP content + unsigned content_received; // number of currently received content bytes + char * http_header; +} http_msg; +#pragma pack(pop) + +/* + url = pointer to ASCIIZ URL + identifier = identifier of previously opened connection (keep-alive), or 0 to open a new one. + flags = bit flags (see end of this document). + add_header = pointer to ASCIIZ additional header parameters, or null for none. + Every additional parameter must end with CR LF bytes, including the last line. + Initiates a HTTP connection, using 'GET' method. + Returns NULL on error, identifier otherwise. +*/ +extern http_msg * stdcall (*http_get)(const char *url, http_msg *identifier, unsigned flags, const char *add_header); + +/* + url = pointer to ASCIIZ URL + identifier = identifier of previously opened connection (keep-alive), or 0 to open a new one. + flags = bit flags (see end of this document). + add_header = pointer to ASCIIZ additional header parameters, or null for none. + Every additional parameter must end with CR LF bytes, including the last line. + Initiate a HTTP connection, using 'HEAD' method. + Returns NULL on error, identifier otherwise. +*/ +extern http_msg * stdcall (*http_head)(const char *url, http_msg *identifier, unsigned flags, const char *add_header); + +/* + url = pointer to ASCIIZ URL + identifier = identifier of previously opened connection (keep-alive), or 0 to open a new one. + flags = bit flags (see end of this document). + add_header = pointer to ASCIIZ additional header parameters, or null for none. + Every additional parameter must end with CR LF bytes, including the last line. + content-type = pointer to ASCIIZ string containing content type. + content-length = length of the content (in bytes). + Initiate a HTTP connection, using 'POST' method. + The content itself must be send to the socket (which you can find in the structure), + using system function 75, 6. + Returns 0 on error, identifier otherwise +*/ +extern http_msg * stdcall (*http_post)(const char *url, http_msg *identifier, unsigned flags, const char *add_header, + const char *content_type, unsigned content_length); + +/* + identifier = identifier which one of the previous functions returned + This procedure will handle all incoming data for a connection and place it in the buffer. + As long as the procedure expects more data, -1 is returned and the procedure must be called again. + When transfer is done, the procedure will return 0. + The receive procedure is non-blocking by default, but can be made to block by setting FLAG_BLOCK. + + The HTTP header is placed together with some flags and other attributes in the http_msg structure. + This structure is defined in http.inc (and not copied here because it might still change.) + The identifier used by the functions is actually a pointer to this structure. + In the dword named .flags, the library will set various bit-flags indicating the status of the process. + (When a transfer is done, one should check these bit-flags to find out if the transfer was error-free.) + The HTTP header is placed at the end of this structure. The content is placed in another buffer. + The dword .status contains the status code received from the server (e.g. 200 for OK). + In header_length you'll find the length of the header as soon as it has been received. + In content_ptr you'll find a pointer to the actual content. + In content_length you'll find the length of the content. + In content_received, you'll find the number of content bytes already received. +*/ +extern int stdcall (*http_receive)(http_msg *identifier); + +/* + identifier = identifier which one of the previous functions returned + dataptr = pointer to the data you want to send + datalength = length of the data to send (in bytes) + This procedure can be used to send data to the server (POST) + Returns number of bytes sent, -1 on error +*/ +extern int stdcall (*http_send)(http_msg *identifier, void *dataptr, unsigned datalength); + +/* + Sometimes the http_receive function receives incomplete data. If you have the same problem then a macro can help you: +*/ + +extern int stdcall (*http_free)(http_msg *identifier); +/* + Free unused data +*/ + +#define http_long_receive(x) while(http_receive(x)){}; + +#endif // _HTTP_H_ diff --git a/programs/develop/ktcc/trunk/libc/include/clayer/inputbox.h b/programs/develop/ktcc/trunk/libc/include/clayer/inputbox.h new file mode 100644 index 0000000000..1b2a6c2041 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/clayer/inputbox.h @@ -0,0 +1,17 @@ +/* + This is wrapper for Inputbox.obj sys library + https://board.kolibrios.org/viewtopic.php?f=24&t=3767&sid=fd2ca95b24eec430db0c61d977f5d8ba#p71585 + + Adapted for TCC's dynamic API by Magomed Kostoev, 2020 +*/ + +#ifndef __KOS__INPUTBOX__H________ +#define __KOS__INPUTBOX__H________ + +#define cdecl __attribute__ ((cdecl)) +#define stdcall __attribute__ ((stdcall)) + +extern unsigned stdcall (*InputBox)(void* Buffer, char* Caption, char* Prompt, char* Default, + unsigned long Flags, unsigned long BufferSize, void* RedrawProc); + +#endif // __KOS__INPUTBOX__H________ diff --git a/programs/develop/ktcc/trunk/libc/include/clayer/libimg.h b/programs/develop/ktcc/trunk/libc/include/clayer/libimg.h new file mode 100644 index 0000000000..3b41978be2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/clayer/libimg.h @@ -0,0 +1,126 @@ +/* Written by turbocat2001 (Logaev Maxim) */ + +#ifndef KOLIBRI_LIBIMG_H +#define KOLIBRI_LIBIMG_H + +#include +#include + +extern int kolibri_libimg_init(void); + +#define _stdcall __attribute__((__stdcall__)) + +//list of format id's +#define LIBIMG_FORMAT_BMP 1 +#define LIBIMG_FORMAT_ICO 2 +#define LIBIMG_FORMAT_CUR 3 +#define LIBIMG_FORMAT_GIF 4 +#define LIBIMG_FORMAT_PNG 5 +#define LIBIMG_FORMAT_JPEG 6 +#define LIBIMG_FORMAT_TGA 7 +#define LIBIMG_FORMAT_PCX 8 +#define LIBIMG_FORMAT_XCF 9 +#define LIBIMG_FORMAT_TIFF 10 +#define LIBIMG_FORMAT_PNM 11 +#define LIBIMG_FORMAT_WBMP 12 +#define LIBIMG_FORMAT_XBM 13 +#define LIBIMG_FORMAT_Z80 14 + +#pragma pack(push, 1) +typedef struct{ + uint32_t Checksum; // ((Width ROL 16) OR Height) XOR Data[0] ; ignored so far + uint32_t Width; + uint32_t Height; + uint32_t Next; + uint32_t Previous; + uint32_t Type; // one of Image.bppN + uint32_t* Data; + uint32_t Palette; // used iff Type eq Image.bpp1, Image.bpp2, Image.bpp4 or Image.bpp8i + uint32_t Extended; + uint32_t Flags; // bitfield + uint32_t Delay; // used iff Image.IsAnimated is set in Flags +} Image; +#pragma pack(pop) + +#define IMAGE_BPP8i 1 // indexed +#define IMAGE_BPP24 2 +#define IMAGE_BPP32 3 +#define IMAGE_BPP15 4 +#define IMAGE_BPP16 5 +#define IMAGE_BPP1 6 +#define IMAGE_BPP8g 7 // grayscale +#define IMAGE_BPP2i 8 +#define IMAGE_BPP4i 9 +#define IMAGE_BPP8a 10 + +// scale type +#define LIBIMG_SCALE_NONE 0 +#define LIBIMG_SCALE_INTEGER 1 +#define LIBIMG_SCALE_TILE 2 +#define LIBIMG_SCALE_STRETCH 3 +#define LIBIMG_SCALE_FIT_BOTH LIBIMG_SCALE_STRETCH +#define LIBIMG_SCALE_FIT_MIN 4 +#define LIBIMG_SCALE_FIT_RECT LIBIMG_SCALE_FIT_MIN +#define LIBIMG_SCALE_FIT_WIDTH 5 +#define LIBIMG_SCALE_FIT_HEIGHT 6 +#define LIBIMG_SCALE_FIT_MAX 7 + +// interpolation algorithm +#define LIBIMG_INTER_NONE 0 // use it with LIBIMG_SCALE_INTEGER, LIBIMG_SCALE_TILE, etc +#define LIBIMG_INTER_BILINEAR 1 +#define LIBIMG_INTER_BICUBIC 2 +#define LIBIMG_INTER_LANCZOS 3 +#define LIBIMG_INTER_DEFAULT LIBIMG_INTER_BILINEAR + +//error codes +#define LIBIMG_ERROR_OUT_OF_MEMORY 1 +#define LIBIMG_ERROR_FORMAT 2 +#define LIBIMG_ERROR_CONDITIONS 3 +#define LIBIMG_ERROR_BIT_DEPTH 4 +#define LIBIMG_ERROR_ENCODER 5 +#define LIBIMG_ERROR_SRC_TYPE 6 +#define LIBIMG_ERROR_SCALE 7 +#define LIBIMG_ERROR_INTER 8 +#define LIBIMG_ERROR_NOT_INPLEMENTED 9 +#define LIBIMG_ERROR_INVALID_INPUT 10 + +//encode flags (byte 0x02 of _common option) +#define LIBIMG_ENCODE_STRICT_SPECIFIC 0x01 +#define LIBIMG_ENCODE_STRICT_BIT_DEPTH 0x02 +#define LIBIMG_ENCODE_DELETE_ALPHA 0x08 +#define LIBIMG_ENCODE_FLUSH_ALPHA 0x10 + +#define FLIP_VERTICAL 0x01 +#define FLIP_HORIZONTAL 0x02 + +#define ROTATE_90_CW 0x01 +#define ROTATE_180 0x02 +#define ROTATE_270_CW 0x03 +#define ROTATE_90_CCW ROTATE_270_CW +#define ROTATE_270_CCW ROTATE_90_CW + +extern Image* (*img_decode _stdcall)(void* file_data, uint32_t size, uint32_t b_color); +extern Image* (*img_encode _stdcall)(Image* img, uint32_t length, uint32_t option); +extern Image* (*img_create _stdcall)(uint32_t width, uint32_t height, uint32_t type); +extern void (*img_to_rgb2 _stdcall)(Image* img, void *rgb_data); +extern Image* (*img_to_rgb _stdcall)(Image* img); +extern bool (*img_flip _stdcall)(Image* img, uint32_t flip); +extern bool (*img_flip_layer _stdcall)(Image *img, uint32_t flip); +extern bool (*img_rotate _stdcall)(Image *img, uint32_t rotate); +extern bool (*img_rotate_layer _stdcall)(Image* data, uint32_t rotate); +extern void (*img_draw _stdcall)(Image *img, uint32_t x, uint32_t y, uint32_t w, uint32_t h, uint32_t xoff, uint32_t yoff); +extern int32_t (*img_count _stdcall)(Image *img); +extern bool (*img_destroy _stdcall)(Image *img); +extern bool (*img_destroy_layer _stdcall)(Image* img); +extern Image* (*img_blend _stdcall)(Image* dst, Image* src, uint32_t out_x, uint32_t out_y, uint32_t in_x, uint32_t in_y, uint32_t width, uint32_t height); +extern Image* (*img_convert _stdcall)(Image *src, Image *dst, uint32_t dst_type, uint32_t, uint32_t); +extern Image* (*img_resize_data _stdcall)(Image *src, uint32_t width, uint32_t height); +extern Image* (*img_scale _stdcall)(Image* src, uint32_t crop_x, uint32_t crop_y, uint32_t crop_width, uint32_t crop_height, Image* dst, uint32_t scale_type, uint32_t inter, uint32_t new_width, uint32_t new_height); + +void img_fill_color(Image* img, uint32_t width, uint32_t height, uint32_t color){ + for (uint32_t i = 0; i < width*height; i++) { + img->Data[i] = color; + } +} + +#endif /* KOLIBRI_LIBIMG_H */ diff --git a/programs/develop/ktcc/trunk/libc/include/clayer/msgbox.h b/programs/develop/ktcc/trunk/libc/include/clayer/msgbox.h new file mode 100644 index 0000000000..b0efe61f69 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/clayer/msgbox.h @@ -0,0 +1,55 @@ +#ifndef KOLIBRI_MSGBOX_H +#define KOLIBRI_MSGBOX_H +#include +#include +#include +#include + + +typedef struct { + uint8_t retval; // 0 - win closed, 1 to n - button num, also default button on start + uint8_t reserv; + char texts[2048]; // must be enough ;-) + char msgbox_stack[1024]; + uint32_t top_stack; +}__attribute__((packed)) msgbox; + +typedef void (*msgbox_callback)(void); + +extern void (*msgbox_create __attribute__((__stdcall__)))(msgbox *, void *thread); // clears callbacks, ! if fix lib, we can return eax as of Fn51 +extern void (*msgbox_setfunctions __attribute__((__stdcall__)))(msgbox_callback*); // must be called immediately after create, zero-ended array +extern void (*msgbox_reinit __attribute__((__stdcall__)))(msgbox *) ; // recalc sizes when structure changes, called auto when MsgBoxCreate + +static inline msgbox* kolibri_new_msgbox(char* title, char* text, int def_but, ...) +/// text can be multilined by code 13 = "\r" +/// def_but - highlighted and used on Enter (if zero - default is [X]), user may use Tabs or Arrows +/// last params are buttons text, max 8. last must set as NULL +{ + va_list vl=0; + va_start(vl, def_but); + msgbox* box = calloc(sizeof(msgbox), 1); + box->retval = (uint8_t)def_but; + char *pc = box->texts; + strcpy(pc, title); + pc += strlen(title) + 1; + strcpy(pc, text); + pc += strlen(text) + 1; + char *but_text = va_arg(vl, char*); + while (but_text) + { + strcpy(pc, but_text); + pc += strlen(but_text) + 1; + but_text = va_arg(vl, char*); + } + + va_end(vl); + return box; +} + +static inline void kolibri_start_msgbox(msgbox* box, msgbox_callback cb[]) +{ + (*msgbox_create)(box, &box->top_stack); + if (cb) (*msgbox_setfunctions)(cb); +} + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/clayer/rasterworks.h b/programs/develop/ktcc/trunk/libc/include/clayer/rasterworks.h new file mode 100644 index 0000000000..4c0aea79d2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/clayer/rasterworks.h @@ -0,0 +1,11 @@ +#ifndef KOLIBRI_RASTERWORKS_H +#define KOLIBRI_RASTERWORKS_H + +//extern int kolibri_rasterworks_init(void); + +extern void (*drawText __attribute__((__stdcall__)))(void *canvas, int x, int y, const char *string, int charQuantity, int fontColor, int params); +extern int (*countUTF8Z __attribute__((__stdcall__)))(const char *string, int byteQuantity); +extern int (*charsFit __attribute__((__stdcall__)))(int areaWidth, int charHeight); +extern int (*strWidth __attribute__((__stdcall__)))(int charQuantity, int charHeight); + +#endif /* KOLIBRI_RASTERWORKS_H */ diff --git a/programs/develop/ktcc/trunk/libc/include/conio.h b/programs/develop/ktcc/trunk/libc/include/conio.h new file mode 100644 index 0000000000..5c231bd7af --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/conio.h @@ -0,0 +1,203 @@ +/* + +This is adapded thunk for console.obj sys library +.h is equal to svn:\programs\develop\libraries\console\console_en.txt + +Adapted for tcc by Siemargl, 2016 + +*/ +#ifndef __conio_h +#define __conio_h + +#define cdecl __attribute__ ((cdecl)) +#define stdcall __attribute__ ((stdcall)) + +/* +console.obj exports the following functions +*/ +typedef unsigned int dword; /* 32-bit unsigned integer */ +typedef unsigned short word; /* 16-bit unsigned integer */ + +extern void stdcall (*con_init)(dword wnd_width, dword wnd_height, + dword scr_width, dword scr_height, const char* title); +/* Console initialization. Must be called only once. +wnd_width, wnd_height - width and height (in units of characters) of the visible +region; +scr_width, scr_height - width and height (in units of characters) of console; +Any of these four parameters can be set to -1 (=0xFFFFFFFF) +to use the library's default values; +title - console window's caption. */ + +extern void stdcall (*con_exit)(int bCloseWindow); +/* You should call this funstion at the end of the program. +If bCloseWindow is zero, the string "[Finished]" will be added to the caption of +the window and the console window will remain on the screen until the user +closes it. */ + +extern void stdcall (*con_set_title)(const char* title); +/* Set new window caption. */ + +extern void stdcall (*con_write_asciiz)(const char* str); +/* Display ASCIIZ-string to the console at the current position, shifting +the current position. */ + +extern void stdcall (*con_write_string)(const char* str, dword length); +/* Similar to con_write_asciiz, but length of the string must be given as a +separate parameter */ + +extern int cdecl (*con_printf)(const char* format, ...); +/* Standard "printf" function from ANSI C. */ + +extern dword stdcall (*con_get_flags)(void); +/* Get output flags. */ + +extern dword stdcall (*con_set_flags)(dword new_flags); +/* Set output flags. This function returns previous values. */ + +/* Flags (bitmask): */ +/* text color */ +#define CON_COLOR_BLUE 0x01 +#define CON_COLOR_GREEN 0x02 +#define CON_COLOR_RED 0x04 +#define CON_COLOR_BRIGHT 0x08 +/* background color */ +#define CON_BGR_BLUE 0x10 +#define CON_BGR_GREEN 0x20 +#define CON_BGR_RED 0x40 +#define CON_BGR_BRIGHT 0x80 +/* output controls */ +#define CON_IGNORE_SPECIALS 0x100 +/* if this flag is cleared, function interprets special characters: +10 ('\n') - next line +13 ('\r') - carriage return +8 ('\b') - backspace +9 ('\t') - tab +27 ('\033' = '\x1B') - the beginning of Esc-sequences; +otherwise, these characters will be displayed like ordinary characters. */ +/* Supported Esc-sequences: + Esc[;;m - choice of character attributes: + You can specify one, two or three codes in any order; + 0 = normal mode (white on black) + 1 = bright selection + 5 = bright background + 7 = inverse mode (black on white) + 30 = black characters + 31 = red characters + 32 = green characters + 33 = brown characters + 34 = blue characters + 35 = purple characters + 36 = turqoise characters + 37 = white characters + 40 = black background + 41 = red background + 42 = green background + 43 = brown background + 44 = blue background + 45 = purple background + 46 = turqoise background + 47 = white background + The following sequences appeared in version 5 of library: + Esc[2J - clear screen, move cursor to upper left corner + Esc[;H = Esc[;f - + move cursor to , + Esc[A - move cursor to lines up + Esc[B - move cursor to lines down + Esc[C - move cursor to positions right + Esc[D - move cursor to positions left +*/ +/* signal "console closed"; appeared in version 6; + ignored by con_set_flags */ +#define CON_WINDOW_CLOSED 0x200 +/* The default value for flags = 7. (grey text on black background) */ + +extern int stdcall (*con_get_font_height)(void); +/* Get the height of the font. */ + +extern int stdcall (*con_get_cursor_height)(void); +/* Get the height of the cursor. */ + +extern int stdcall (*con_set_cursor_height)(int new_height); +/* Set the height of the cursor. This function returns previous value. +An attempt to set the value out of the correct interval (from 0 to +font_height-1) is ignored. +Cursor with zero height isn't displayed. +Default value: - 15% from font height. */ + +extern int stdcall (*con_getch)(void); +/* Get one character from the keyboard. + +For normal characters function returns ASCII-code. For extended +characters (eg, Fx, and arrows), first function call returns 0 +and second call returns the extended code (similar to the DOS-function +input). Starting from version 7, after closing the console window, +this function returns 0. */ + +extern word stdcall (*con_getch2)(void); +/* Reads a character from the keyboard. Low byte contains the ASCII-code +(0 for extended characters), high byte - advanced code (like in BIOS +input functions). Starting from version 7, after closing the console +window, this function returns 0. */ + +extern int stdcall (*con_kbhit)(void); +/* Returns 1 if a key was pressed, 0 otherwise. To read pressed keys use +con_getch and con_getch2. Starting from version 6, after closing +the console window, this function returns 1. */ + +extern char* stdcall (*con_gets)(char* str, int n); +/* Reads a string from the keyboard. Reading is interrupted when got +"new line" character, or after reading the (n-1) characters (depending on +what comes first). In the first case the newline is also recorded in the +str. The acquired line is complemented by a null character. +Starting from version 6, the function returns a pointer to the entered +line if reading was successful, and NULL if the console window was closed. */ + +typedef int (stdcall * con_gets2_callback)(int keycode, char** pstr, int* pn, + int* ppos); + +extern char* stdcall (*con_gets2)(con_gets2_callback callback, char* str, int n); +/* Con_gets completely analogous, except that when the user +press unrecognized key, it calls the specified callback-procedure +(which may, for example, handle up / down for history and tab to enter +autocompletion). You should pass to the procedure: key code and three pointers +- to the string, to the maximum length and to the current position. +function may change the contents of string and may change the string +itself (for example, to reallocate memory for increase the limit), +maximum length, and position of the line - pointers are passed for it. +Return value: 0 = line wasn't changed 1 = line changed, you should +remove old string and display new, 2 = line changed, it is necessary +to display it; 3 = immediately exit the function. +Starting from version 6, the function returns a pointer to the entered +line with the successful reading, and NULL if the console window was closed. */ + +extern void stdcall (*con_cls)(); +/* Clear screen and set cursor at upper left corner. */ + + +extern void stdcall (*con_get_cursor_pos)(int* px, int* py); +/* Wrote current (x) coordinate of cursor to *px, and (y) to *py. */ + +extern void stdcall (*con_set_cursor_pos)(int x, int y); +/* Set the cursor position to the specified coordinates. If any of the +parameters beyond the relevant range (from 0 to 1 scr_width- +for x, from 0 to 1 for scr_height-y, scr_width scr_height and were asked if +call con_init), then the corresponding coordinate of the cursor does not change. +*/ + +extern int __console_initdll_status; +/* == 1 if dll loaded */ + +extern dword *con_dll_ver; + +extern int con_init_console_dll(void); +/* load library and link function symbols. returns 1 if error +called automatic in printf, otherwise, see __console_initdll_status +*/ + +extern int con_init_console_dll_param(dword wnd_width, dword wnd_height, + dword scr_width, dword scr_height, const char* title); +/* work as con_init_console_dll, but call con_init with params +*/ + + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/aes.h b/programs/develop/ktcc/trunk/libc/include/cryptal/aes.h new file mode 100644 index 0000000000..25721c8cd3 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/aes.h @@ -0,0 +1,123 @@ +/********************************************************************* +* Filename: aes.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding AES implementation. +*********************************************************************/ + +#ifndef AES_H +#define AES_H + +/*************************** HEADER FILES ***************************/ +#include + +/****************************** MACROS ******************************/ +#define AES_BLOCK_SIZE 16 // AES operates on 16 bytes at a time + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte +typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines + +/*********************** FUNCTION DECLARATIONS **********************/ +/////////////////// +// AES +/////////////////// +// Key setup must be done before any AES en/de-cryption functions can be used. +void aes_key_setup(const BYTE key[], // The key, must be 128, 192, or 256 bits + WORD w[], // Output key schedule to be used later + int keysize); // Bit length of the key, 128, 192, or 256 + +void aes_encrypt(const BYTE in[], // 16 bytes of plaintext + BYTE out[], // 16 bytes of ciphertext + const WORD key[], // From the key setup + int keysize); // Bit length of the key, 128, 192, or 256 + +void aes_decrypt(const BYTE in[], // 16 bytes of ciphertext + BYTE out[], // 16 bytes of plaintext + const WORD key[], // From the key setup + int keysize); // Bit length of the key, 128, 192, or 256 + +/////////////////// +// AES - CBC +/////////////////// +int aes_encrypt_cbc(const BYTE in[], // Plaintext + size_t in_len, // Must be a multiple of AES_BLOCK_SIZE + BYTE out[], // Ciphertext, same length as plaintext + const WORD key[], // From the key setup + int keysize, // Bit length of the key, 128, 192, or 256 + const BYTE iv[]); // IV, must be AES_BLOCK_SIZE bytes long + +// Only output the CBC-MAC of the input. +int aes_encrypt_cbc_mac(const BYTE in[], // plaintext + size_t in_len, // Must be a multiple of AES_BLOCK_SIZE + BYTE out[], // Output MAC + const WORD key[], // From the key setup + int keysize, // Bit length of the key, 128, 192, or 256 + const BYTE iv[]); // IV, must be AES_BLOCK_SIZE bytes long + +/////////////////// +// AES - CTR +/////////////////// +void increment_iv(BYTE iv[], // Must be a multiple of AES_BLOCK_SIZE + int counter_size); // Bytes of the IV used for counting (low end) + +void aes_encrypt_ctr(const BYTE in[], // Plaintext + size_t in_len, // Any byte length + BYTE out[], // Ciphertext, same length as plaintext + const WORD key[], // From the key setup + int keysize, // Bit length of the key, 128, 192, or 256 + const BYTE iv[]); // IV, must be AES_BLOCK_SIZE bytes long + +void aes_decrypt_ctr(const BYTE in[], // Ciphertext + size_t in_len, // Any byte length + BYTE out[], // Plaintext, same length as ciphertext + const WORD key[], // From the key setup + int keysize, // Bit length of the key, 128, 192, or 256 + const BYTE iv[]); // IV, must be AES_BLOCK_SIZE bytes long + +/////////////////// +// AES - CCM +/////////////////// +// Returns True if the input parameters do not violate any constraint. +int aes_encrypt_ccm(const BYTE plaintext[], // IN - Plaintext. + WORD plaintext_len, // IN - Plaintext length. + const BYTE associated_data[], // IN - Associated Data included in authentication, but not encryption. + unsigned short associated_data_len, // IN - Associated Data length in bytes. + const BYTE nonce[], // IN - The Nonce to be used for encryption. + unsigned short nonce_len, // IN - Nonce length in bytes. + BYTE ciphertext[], // OUT - Ciphertext, a concatination of the plaintext and the MAC. + WORD *ciphertext_len, // OUT - The length of the ciphertext, always plaintext_len + mac_len. + WORD mac_len, // IN - The desired length of the MAC, must be 4, 6, 8, 10, 12, 14, or 16. + const BYTE key[], // IN - The AES key for encryption. + int keysize); // IN - The length of the key in bits. Valid values are 128, 192, 256. + +// Returns True if the input parameters do not violate any constraint. +// Use mac_auth to ensure decryption/validation was preformed correctly. +// If authentication does not succeed, the plaintext is zeroed out. To overwride +// this, call with mac_auth = NULL. The proper proceedure is to decrypt with +// authentication enabled (mac_auth != NULL) and make a second call to that +// ignores authentication explicitly if the first call failes. +int aes_decrypt_ccm(const BYTE ciphertext[], // IN - Ciphertext, the concatination of encrypted plaintext and MAC. + WORD ciphertext_len, // IN - Ciphertext length in bytes. + const BYTE assoc[], // IN - The Associated Data, required for authentication. + unsigned short assoc_len, // IN - Associated Data length in bytes. + const BYTE nonce[], // IN - The Nonce to use for decryption, same one as for encryption. + unsigned short nonce_len, // IN - Nonce length in bytes. + BYTE plaintext[], // OUT - The plaintext that was decrypted. Will need to be large enough to hold ciphertext_len - mac_len. + WORD *plaintext_len, // OUT - Length in bytes of the output plaintext, always ciphertext_len - mac_len . + WORD mac_len, // IN - The length of the MAC that was calculated. + int *mac_auth, // OUT - TRUE if authentication succeeded, FALSE if it did not. NULL pointer will ignore the authentication. + const BYTE key[], // IN - The AES key for decryption. + int keysize); // IN - The length of the key in BITS. Valid values are 128, 192, 256. + +/////////////////// +// Test functions +/////////////////// +int aes_test(); +int aes_ecb_test(); +int aes_cbc_test(); +int aes_ctr_test(); +int aes_ccm_test(); + +#endif // AES_H diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/arcfour.h b/programs/develop/ktcc/trunk/libc/include/cryptal/arcfour.h new file mode 100644 index 0000000000..f9f1e87df6 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/arcfour.h @@ -0,0 +1,30 @@ +/********************************************************************* +* Filename: arcfour.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding ARCFOUR implementation. +*********************************************************************/ + +#ifndef ARCFOUR_H +#define ARCFOUR_H + +/*************************** HEADER FILES ***************************/ +#include + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte + +/*********************** FUNCTION DECLARATIONS **********************/ +// Input: state - the state used to generate the keystream +// key - Key to use to initialize the state +// len - length of key in bytes (valid lenth is 1 to 256) +void arcfour_key_setup(BYTE state[], const BYTE key[], int len); + +// Pseudo-Random Generator Algorithm +// Input: state - the state used to generate the keystream +// out - Must be allocated to be of at least "len" length +// len - number of bytes to generate +void arcfour_generate_stream(BYTE state[], BYTE out[], size_t len); + +#endif // ARCFOUR_H diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/base64.h b/programs/develop/ktcc/trunk/libc/include/cryptal/base64.h new file mode 100644 index 0000000000..e35c6c7d9e --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/base64.h @@ -0,0 +1,27 @@ +/********************************************************************* +* Filename: base64.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding Base64 implementation. +*********************************************************************/ + +#ifndef BASE64_H +#define BASE64_H + +/*************************** HEADER FILES ***************************/ +#include + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte + +/*********************** FUNCTION DECLARATIONS **********************/ +// Returns the size of the output. If called with out = NULL, will just return +// the size of what the output would have been (without a terminating NULL). +size_t base64_encode(const BYTE in[], BYTE out[], size_t len, int newline_flag); + +// Returns the size of the output. If called with out = NULL, will just return +// the size of what the output would have been (without a terminating NULL). +size_t base64_decode(const BYTE in[], BYTE out[], size_t len); + +#endif // BASE64_H diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/blowfish.h b/programs/develop/ktcc/trunk/libc/include/cryptal/blowfish.h new file mode 100644 index 0000000000..d8e9d4a6a2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/blowfish.h @@ -0,0 +1,32 @@ +/********************************************************************* +* Filename: blowfish.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding Blowfish implementation. +*********************************************************************/ + +#ifndef BLOWFISH_H +#define BLOWFISH_H + +/*************************** HEADER FILES ***************************/ +#include + +/****************************** MACROS ******************************/ +#define BLOWFISH_BLOCK_SIZE 8 // Blowfish operates on 8 bytes at a time + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte +typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines + +typedef struct { + WORD p[18]; + WORD s[4][256]; +} BLOWFISH_KEY; + +/*********************** FUNCTION DECLARATIONS **********************/ +void blowfish_key_setup(const BYTE user_key[], BLOWFISH_KEY *keystruct, size_t len); +void blowfish_encrypt(const BYTE in[], BYTE out[], const BLOWFISH_KEY *keystruct); +void blowfish_decrypt(const BYTE in[], BYTE out[], const BLOWFISH_KEY *keystruct); + +#endif // BLOWFISH_H diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/des.h b/programs/develop/ktcc/trunk/libc/include/cryptal/des.h new file mode 100644 index 0000000000..1503772a2b --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/des.h @@ -0,0 +1,37 @@ +/********************************************************************* +* Filename: des.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding DES implementation. + Note that encryption and decryption are defined by how + the key setup is performed, the actual en/de-cryption is + performed by the same function. +*********************************************************************/ + +#ifndef DES_H +#define DESH + +/*************************** HEADER FILES ***************************/ +#include + +/****************************** MACROS ******************************/ +#define DES_BLOCK_SIZE 8 // DES operates on 8 bytes at a time + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte +typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines + +typedef enum { + DES_ENCRYPT, + DES_DECRYPT +} DES_MODE; + +/*********************** FUNCTION DECLARATIONS **********************/ +void des_key_setup(const BYTE key[], BYTE schedule[][6], DES_MODE mode); +void des_crypt(const BYTE in[], BYTE out[], const BYTE key[][6]); + +void three_des_key_setup(const BYTE key[], BYTE schedule[][16][6], DES_MODE mode); +void three_des_crypt(const BYTE in[], BYTE out[], const BYTE key[][16][6]); + +#endif // DES_H diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/md2.h b/programs/develop/ktcc/trunk/libc/include/cryptal/md2.h new file mode 100644 index 0000000000..97706af1e2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/md2.h @@ -0,0 +1,33 @@ +/********************************************************************* +* Filename: md2.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding MD2 implementation. +*********************************************************************/ + +#ifndef MD2_H +#define MD2_H + +/*************************** HEADER FILES ***************************/ +#include + +/****************************** MACROS ******************************/ +#define MD2_BLOCK_SIZE 16 + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte + +typedef struct { + BYTE data[16]; + BYTE state[48]; + BYTE checksum[16]; + int len; +} MD2_CTX; + +/*********************** FUNCTION DECLARATIONS **********************/ +void md2_init(MD2_CTX *ctx); +void md2_update(MD2_CTX *ctx, const BYTE data[], size_t len); +void md2_final(MD2_CTX *ctx, BYTE hash[]); // size of hash must be MD2_BLOCK_SIZE + +#endif // MD2_H diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/md5.h b/programs/develop/ktcc/trunk/libc/include/cryptal/md5.h new file mode 100644 index 0000000000..1370387cee --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/md5.h @@ -0,0 +1,34 @@ +/********************************************************************* +* Filename: md5.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding MD5 implementation. +*********************************************************************/ + +#ifndef MD5_H +#define MD5_H + +/*************************** HEADER FILES ***************************/ +#include + +/****************************** MACROS ******************************/ +#define MD5_BLOCK_SIZE 16 // MD5 outputs a 16 byte digest + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte +typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines + +typedef struct { + BYTE data[64]; + WORD datalen; + unsigned long long bitlen; + WORD state[4]; +} MD5_CTX; + +/*********************** FUNCTION DECLARATIONS **********************/ +void md5_init(MD5_CTX *ctx); +void md5_update(MD5_CTX *ctx, const BYTE data[], size_t len); +void md5_final(MD5_CTX *ctx, BYTE hash[]); + +#endif // MD5_H diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/rot-13.h b/programs/develop/ktcc/trunk/libc/include/cryptal/rot-13.h new file mode 100644 index 0000000000..4c581c39a0 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/rot-13.h @@ -0,0 +1,20 @@ +/********************************************************************* +* Filename: rot-13.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding ROT-13 implementation. +*********************************************************************/ + +#ifndef ROT13_H +#define ROT13_H + +/*************************** HEADER FILES ***************************/ +#include + +/*********************** FUNCTION DECLARATIONS **********************/ +// Performs IN PLACE rotation of the input. Assumes input is NULL terminated. +// Preserves each charcter's case. Ignores non alphabetic characters. +void rot13(char str[]); + +#endif // ROT13_H diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/sha1.h b/programs/develop/ktcc/trunk/libc/include/cryptal/sha1.h new file mode 100644 index 0000000000..f32bb7c04d --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/sha1.h @@ -0,0 +1,35 @@ +/********************************************************************* +* Filename: sha1.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding SHA1 implementation. +*********************************************************************/ + +#ifndef SHA1_H +#define SHA1_H + +/*************************** HEADER FILES ***************************/ +#include + +/****************************** MACROS ******************************/ +#define SHA1_BLOCK_SIZE 20 // SHA1 outputs a 20 byte digest + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte +typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines + +typedef struct { + BYTE data[64]; + WORD datalen; + unsigned long long bitlen; + WORD state[5]; + WORD k[4]; +} SHA1_CTX; + +/*********************** FUNCTION DECLARATIONS **********************/ +void sha1_init(SHA1_CTX *ctx); +void sha1_update(SHA1_CTX *ctx, const BYTE data[], size_t len); +void sha1_final(SHA1_CTX *ctx, BYTE hash[]); + +#endif // SHA1_H diff --git a/programs/develop/ktcc/trunk/libc/include/cryptal/sha256.h b/programs/develop/ktcc/trunk/libc/include/cryptal/sha256.h new file mode 100644 index 0000000000..7123a30dd4 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/cryptal/sha256.h @@ -0,0 +1,34 @@ +/********************************************************************* +* Filename: sha256.h +* Author: Brad Conte (brad AT bradconte.com) +* Copyright: +* Disclaimer: This code is presented "as is" without any guarantees. +* Details: Defines the API for the corresponding SHA1 implementation. +*********************************************************************/ + +#ifndef SHA256_H +#define SHA256_H + +/*************************** HEADER FILES ***************************/ +#include + +/****************************** MACROS ******************************/ +#define SHA256_BLOCK_SIZE 32 // SHA256 outputs a 32 byte digest + +/**************************** DATA TYPES ****************************/ +typedef unsigned char BYTE; // 8-bit byte +typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines + +typedef struct { + BYTE data[64]; + WORD datalen; + unsigned long long bitlen; + WORD state[8]; +} SHA256_CTX; + +/*********************** FUNCTION DECLARATIONS **********************/ +void sha256_init(SHA256_CTX *ctx); +void sha256_update(SHA256_CTX *ctx, const BYTE data[], size_t len); +void sha256_final(SHA256_CTX *ctx, BYTE hash[]); + +#endif // SHA256_H diff --git a/programs/develop/ktcc/trunk/libc/include/ctype.h b/programs/develop/ktcc/trunk/libc/include/ctype.h new file mode 100644 index 0000000000..c6fd00cd1a --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/ctype.h @@ -0,0 +1,41 @@ +#ifndef _CTYPE_H +#define _CTYPE_H +/* +** All character classification functions except isascii(). +** Integer argument (c) must be in ASCII range (0-127) for +** dependable answers. +*/ + +#define __ALNUM 1 +#define __ALPHA 2 +#define __CNTRL 4 +#define __DIGIT 8 +#define __GRAPH 16 +#define __LOWER 32 +#define __PRINT 64 +#define __PUNCT 128 +#define __BLANK 256 +#define __UPPER 512 +#define __XDIGIT 1024 + +extern unsigned short __is[129]; + +#define isalnum(c)(__is[c+1] & __ALNUM ) /* 'a'-'z', 'A'-'Z', '0'-'9' */ +#define isalpha(c)(__is[c+1] & __ALPHA ) /* 'a'-'z', 'A'-'Z' */ +#define iscntrl(c)(__is[c+1] & __CNTRL ) /* 0-31, 127 */ +#define isdigit(c)(__is[c+1] & __DIGIT ) /* '0'-'9' */ +#define isgraph(c)(__is[c+1] & __GRAPH ) /* '!'-'~' */ +#define islower(c)(__is[c+1] & __LOWER ) /* 'a'-'z' */ +#define isprint(c)(__is[c+1] & __PRINT ) /* ' '-'~' */ +#define ispunct(c)(__is[c+1] & __PUNCT ) /* !alnum && !cntrl && !space */ +#define isspace(c)(__is[c+1] & __BLANK ) /* HT, LF, VT, FF, CR, ' ' */ +#define isupper(c)(__is[c+1] & __UPPER ) /* 'A'-'Z' */ +#define isxdigit(c)(__is[c+1] & __XDIGIT) /* '0'-'9', 'a'-'f', 'A'-'F' */ + +#define isascii(c) (!((c)&(~0x7f))) +#define toascii(c) ((c)&0x7f) + +extern unsigned char tolower(unsigned char c); +extern unsigned char toupper(unsigned char c); + +#endif \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/include/dir.h b/programs/develop/ktcc/trunk/libc/include/dir.h new file mode 100644 index 0000000000..d4f542cf24 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/dir.h @@ -0,0 +1,35 @@ +#ifndef _DIR_H +#define _DIR_H + +#include + +#define rmfile(obj) rmdir(obj) +#define PATH_MAX 4096 +#define T_FOLDER 16 +#define T_FILE 0 +#define FS_ERROR -1 + +typedef struct { + unsigned type; + char *name; +} short_file_info; + +//Writes information about files in the "dir" folder to an struct array"list". Returns the number of files. +int lsdir(const char* dir, short_file_info **list); + +// Get the path to the working directory(if buf is NULL, then memory will be allocated automatically) +char *getcwd(char *buf, unsigned size); + +// Set path to working directory +void setcwd(const char* cwd); + +// Delete empty folder (returns "true" if successful) +bool rmdir(const char* dir); + +// Delete a file (returns "true" if successful) +bool rmfile(const char* name); + +// Create a foldery (returns "true" if successful) +bool mkdir(const char* dir); + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/dlfcn.h b/programs/develop/ktcc/trunk/libc/include/dlfcn.h new file mode 100644 index 0000000000..019d10ee7a --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/dlfcn.h @@ -0,0 +1,14 @@ +#ifndef _DLFCN_H +#define _DLFCN_H + +#define RTLD_LAZY 0x00001 +#define RTLD_NOW 0x00002 +#define RTLD_GLOBAL 0x00100 +#define RTLD_LOCAL 0 + +int dlclose(void *handle); +char *dlerror(void); +void *dlopen(const char *name, int mode); +void *dlsym(void *restrict handle, const char *restrict name); + +#endif \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/include/errno.h b/programs/develop/ktcc/trunk/libc/include/errno.h new file mode 100644 index 0000000000..5890ae5305 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/errno.h @@ -0,0 +1,42 @@ +#ifndef _ERRNO_H +#define _ERRNO_H + +extern int errno; +/* errors codes from KOS, but minus */ +# define E_SUCCESS (0) +# define E_UNSUPPORTED (-2) +# define E_UNKNOWNFS (-3) +# define E_NOTFOUND (-5) +# define E_EOF (-6) +# define E_INVALIDPTR (-7) +# define E_DISKFULL (-8) +# define E_FSYSERROR (-9) +# define E_ACCESS (-10) +# define E_HARDWARE (-11) +# define E_NOMEM (-12) +/* conversion errors */ +# define ERANGE (-20) +# define EINVAL (-21) +/* program run and pipe errors */ +# define E_NOMEM2 (-30) +# define E_FILEFMT (-31) +# define E_TOOMANY (-32) +# define E_PARAM (-33) +/* socket error codes*/ +#define ENOBUFS 1 +#define EINPROGRESS 2 +#define EOPNOTSUPP 4 +#define EWOULDBLOCK 6 +#define ENOTCONN 9 +#define EALREADY 10 +#define EINVALUE 11 +#define EMSGSIZE 12 +#define ENOMEM 18 +#define EADDRINUSE 20 +#define ECONNREFUSED 61 +#define ECONNRESET 52 +#define EISCONN 56 +#define ETIMEDOUT 60 +#define ECONNABORTED 53 + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/float.h b/programs/develop/ktcc/trunk/libc/include/float.h new file mode 100644 index 0000000000..a2b4ed26a0 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/float.h @@ -0,0 +1,65 @@ +#ifndef _FLOAT_H_ +#define _FLOAT_H_ + +#define FLT_RADIX 2 + +/* IEEE float */ +#define FLT_MANT_DIG 24 +#define FLT_DIG 6 +#define FLT_ROUNDS 1 +#define FLT_EPSILON 1.19209290e-07F +#define FLT_MIN_EXP (-125) +#define FLT_MIN 1.17549435e-38F +#define FLT_MIN_10_EXP (-37) +#define FLT_MAX_EXP 128 +#define FLT_MAX 3.40282347e+38F +#define FLT_MAX_10_EXP 38 + +/* IEEE double */ +#define DBL_MANT_DIG 53 +#define DBL_DIG 15 +#define DBL_EPSILON 2.2204460492503131e-16 +#define DBL_MIN_EXP (-1021) +#define DBL_MIN 2.2250738585072014e-308 +#define DBL_MIN_10_EXP (-307) +#define DBL_MAX_EXP 1024 +#define DBL_MAX 1.7976931348623157e+308 +#define DBL_MAX_10_EXP 308 + +/* horrible intel long double */ +#if defined __i386__ || defined __x86_64__ + +#define LDBL_MANT_DIG 64 +#define LDBL_DIG 18 +#define LDBL_EPSILON 1.08420217248550443401e-19L +#define LDBL_MIN_EXP (-16381) +#define LDBL_MIN 3.36210314311209350626e-4932L +#define LDBL_MIN_10_EXP (-4931) +#define LDBL_MAX_EXP 16384 +#define LDBL_MAX 1.18973149535723176502e+4932L +#define LDBL_MAX_10_EXP 4932 + +#else + +/* same as IEEE double */ +#define LDBL_MANT_DIG 53 +#define LDBL_DIG 15 +#define LDBL_EPSILON 2.2204460492503131e-16 +#define LDBL_MIN_EXP (-1021) +#define LDBL_MIN 2.2250738585072014e-308 +#define LDBL_MIN_10_EXP (-307) +#define LDBL_MAX_EXP 1024 +#define LDBL_MAX 1.7976931348623157e+308 +#define LDBL_MAX_10_EXP 308 + +#endif + +#ifndef NAN +# define NAN (__nan__) +#endif + +#ifndef INFINITY +# define INFINITY (__inf__) +#endif + +#endif /* _FLOAT_H_ */ diff --git a/programs/develop/ktcc/trunk/libc/include/getopt.h b/programs/develop/ktcc/trunk/libc/include/getopt.h new file mode 100644 index 0000000000..d41eaa0568 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/getopt.h @@ -0,0 +1,9 @@ +#ifndef GETOPT_H +#define GETOPT_H + +extern int optind, opterr; +extern char *optarg; + +int getopt(int argc, char *argv[], char *optstring); + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/kolibrisys.h b/programs/develop/ktcc/trunk/libc/include/kolibrisys.h new file mode 100644 index 0000000000..b4a4fd79f8 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/kolibrisys.h @@ -0,0 +1,197 @@ +#ifndef kolibrisys_h +#define kolibrisys_h +/* +#ifdef GNUC +#define stdcall __stdcall +#define cdecl __cdecl +#else +#define stdcall ((__stdcall)) +#define cdecl ((__cdecl)) +#endif +*/ +//#ifdef GNUC +//#define stdcall __stdcall +//#else +#define cdecl __attribute__ ((cdecl)) +#define stdcall __attribute__ ((stdcall)) +//#endif +typedef void* func_ptr; +typedef unsigned int dword; +typedef unsigned char byte; +typedef unsigned short word; + +typedef unsigned int fpos_t; +typedef unsigned int size_t; +#pragma pack(push,1) +struct process_table_entry{ + int cpu_usage; //+0 + int window_pos_info; //+4 + short int reserved1; //+8 + char name[12]; //+10 + int memstart; //+22 + int memused; //+26 + int pid; //+30 + int winx_start; //+34 + int winy_start; //+38 + int winx_size; //+42 + int winy_size; //+46 + short int slot_info; //+50 + short int reserved2; //+52 + int clientx; //+54 + int clienty; //+58 + int clientwidth; //+62 + int clientheight; //+66 + unsigned char window_state;//+70 + char reserved3[1024-71]; //+71 +}; +#pragma pack(pop) + +//----------------------------------------------------------------------------------- +//------------------------KolibriOS system acces to files---------------------------- +//----------------------------------------------------------------------------------- +extern dword stdcall _ksys_get_filesize(char *filename); +extern dword stdcall _ksys_readfile(char *filename,dword pos,dword blocksize,void *data, int *preadbytes); +extern dword stdcall _ksys_rewritefile(char *filename,dword blocksize,void *data); +extern dword stdcall _ksys_appendtofile(char *filename,dword pos,dword blocksize,void *data); +//----------------------------------------------------------------------------------- + +//----------------------Run program--------------------------------------------------- +extern void stdcall _ksys_run_program(char* filename,char* parameters); +//------------------------------------------------------------------------------------ + +//--------------------Debug output--------------------------------------------------- +extern void stdcall _ksys_debug_out(int c); +extern void stdcall debug_out_str(char* str); +//----------------------------------------------------------------------------------- + +//--------------------------Mouse state---------------------------------------------- +extern int stdcall _ksys_GetMouseXY(void); +extern int stdcall _ksys_GetMouseButtonsState(void); +//----------------------------------------------------------------------------------- + +//--------------------------get skin height------------------------------------------ +extern int stdcall _ksys_get_skin_height(void); +//----------------------------------------------------------------------------------- + +//----------------------------background--------------------------------------------- +extern void stdcall _ksys_set_background_size(int xsize,int ysize); +extern void stdcall _ksys_write_background_mem(int pos,int color); +extern void stdcall _ksys_draw_background(void); +extern void stdcall _ksys_set_background_draw_type(int type); +extern void stdcall _ksys_background_blockmove(void* src,int bgr_pos, int count); +//----------------------------------------------------------------------------------- + +//----------------------------functionf for draw window,lines.bar,etc.--------------- +extern void stdcall _ksys_draw_window(int xcoord,int ycoord, int xsize, + int ysize,int workcolor,int type, + int captioncolor,int windowtype,int bordercolor); +extern void stdcall _ksys_window_redraw(int status); +extern int stdcall _ksys_putpixel(int x,int y,int color); +extern void stdcall _ksys_draw_bar(int x, int y, int xsize, int ysize, int color); +extern void stdcall _ksys_line(int x1,int y1,int x2,int y2,int color); +extern void stdcall _ksys_putimage(int x, int y, int xsize, int ysize, void* image); +//----------------------------------------------------------------------------------- + +//--------------------------write text(system fonts 6x9)----------------------------- +extern void stdcall _ksys_write_text(int x,int y,int color,char* text,int len); +//----------------------------------------------------------------------------------- + +//------------------ get screen size and bytes per pixel--------------------------- +extern int stdcall _ksys_get_screen_size(int* x,int* y); +extern void stdcall _ksys_dga_get_resolution(int* xres, int* yres, int* bpp, int* bpscan); +//----------------------------------------------------------------------------------- + +//-------------------------------craete thread--------------------------------------- +extern void* stdcall _ksys_start_thread(void (* func_ptr)(void),int stack_size,int* pid); +//----------------------------------------------------------------------------------- + +//------------------system button(Old function. Better use libGUI functions.)-------- +extern void stdcall _ksys_make_button(int x, int y, int xsize, int ysize, int id, int color); +extern int stdcall _ksys_get_button_id(void); //get state of system button +//------------------------------------------------------------------------------------ + +//----------------------system clock(in 1/100 sec.) and date-------------------------- +extern int stdcall _ksys_get_system_clock(void); +extern int stdcall _ksys_get_date(void); +//------------------------------------------------------------------------------------ + +//-------------------------system delay(in 1/100 sec.)------------------------------- +extern void stdcall _ksys_delay(int m); +//----------------------------------------------------------------------------------- + +//------------------------system events---------------------------------------------- +extern int stdcall _ksys_wait_for_event_infinite(void); +extern int stdcall _ksys_check_for_event(void); +extern int stdcall _ksys_wait_for_event(int time); +extern void stdcall _ksys_set_wanted_events(int ev); +//----------------------------------------------------------------------------------- + +//----------------------------system exit program------------------------------------ +extern void stdcall _ksys_exit(void); +//----------------------------------------------------------------------------------- + +//-----------------------------system IPC send message------------------------------- +extern void stdcall _ksys_send_message(int pid, void* msg, int size); +//----------------------------------------------------------------------------------- + +//---------------------------system work with IRQ from user mode--------------------- +extern void stdcall _ksys_define_receive_area(void* area, int size); +extern int stdcall _ksys_get_irq_owner(int irq); +extern int stdcall _ksys_get_data_read_by_irq(int irq, int* size, void* data); +extern int stdcall _ksys_send_data_to_device(int port, unsigned char val); +extern int stdcall _ksys_receive_data_from_device(int port,unsigned char* data); +extern void stdcall _ksys_program_irq(void* intrtable, int irq); +extern void stdcall _ksys_reserve_irq(int irq); +extern void stdcall _ksys_free_irq(int irq); +//---------------------------------------------------------------------------------- + +//----------------------------system reserve diapason of ports---------------------- +extern int stdcall _ksys_reserve_port_area(int start,int end); +extern int stdcall _ksys_free_port_area(int start,int end); +//---------------------------------------------------------------------------------- + +//-------------functions get key and set keyboard mode------------------------------ +extern int stdcall _ksys_get_key(void); +extern void stdcall _ksys_set_keyboard_mode(int mode); +//---------------------------------------------------------------------------------- + +//--------------simple work with MPU401 sound device--------------------------------- +extern void stdcall _ksys_midi_reset(void); +extern void stdcall _ksys_midi_send(int data); +//----------------------------------------------------------------------------------- + +//--------------------------acces to PCI BUS from user mode--------------------------- +extern int stdcall _ksys_get_pci_version(void); +extern int stdcall _ksys_get_last_pci_bus(void); +extern int stdcall _ksys_get_pci_access_mechanism(void); +extern int stdcall _ksys_pci_read_config_byte(int bus,int dev,int fn,int reg); +extern int stdcall _ksys_pci_read_config_word(int bus,int dev,int fn,int reg); +extern int stdcall _ksys_pci_read_config_dword(int bus,int dev,int fn,int reg); +extern int stdcall _ksys_pci_write_config_byte(int bus,int dev,int fn,int reg,int value); +extern int stdcall _ksys_pci_write_config_word(int bus,int dev,int fn,int reg,int value); +extern int stdcall _ksys_pci_write_config_dword(int bus,int dev,int fn,int reg,int value); +//-------------------------------------------------------------------------------------- + +//------------------------Working with processes-------------------------------------- +extern int stdcall _ksys_get_process_table(struct process_table_entry *proctab,int pid); //if pid=-1 than get info about him. +extern int stdcall _ksys_kill_process(int pid); // if it returns -1 then an error. +//--------------------------------------------------------------------------------- + +//-----------------Old functions for work with sound(Sound Blaster only).--------- +extern void stdcall _ksys_sound_load_block(void* blockptr); +extern void stdcall _ksys_sound_play_block(void); +extern void stdcall _ksys_sound_set_channels(int channels); +extern void stdcall _ksys_sound_set_data_size(int size); +extern void stdcall _ksys_sound_set_frequency(int frequency); +//-------------------------------------------------------------------------------- + +//------------------------------system speaker(integrated speaker)---------------- +extern void stdcall _ksys_sound_speaker_play(void* data); +//-------------------------------------------------------------------------------- + +//------------------function for work with Dinamic Link Librarys(DLL)-------------- +extern dword* stdcall _ksys_cofflib_load(char* name); +extern func_ptr stdcall _ksys_cofflib_getproc(void* exp,char* sz_name); +//--------------------------------------------------------------------------------- + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/kos32sys1.h b/programs/develop/ktcc/trunk/libc/include/kos32sys1.h new file mode 100644 index 0000000000..48e6f9d3dd --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/kos32sys1.h @@ -0,0 +1,815 @@ +#ifndef __KOS_32_SYS_H__ +#define __KOS_32_SYS_H__ + +#include +#include +typedef unsigned int uint32_t; +typedef int int32_t; +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned long long uint64_t; + +#ifdef __cplusplus +extern "C" { +#endif + +#define TYPE_3_BORDER_WIDTH 5 +#define WIN_STATE_MINIMIZED 0x02 +#define WIN_STATE_ROLLED 0x04 +#define POS_SCREEN 0 +#define POS_WINDOW 1 + +#define IPC_NOBUFFER 1 +#define IPC_LOCKED 2 +#define IPC_OVERFLOW 3 +#define IPC_NOPID 4 + +#define SHM_OPEN 0x00 +#define SHM_OPEN_ALWAYS 0x04 +#define SHM_CREATE 0x08 +#define SHM_READ 0x00 +#define SHM_WRITE 0x01 + +// for clipboard funtions +#define CLIP_UTF 0 +#define CLIP_CP866 1 +#define CLIP_CP1251 2 +#define CLIP_TEXT 0 +#define CLIP_IMAGE 1 +#define CLIP_RAW 2 + +//Read/Write data as type (int char, etc.) at address "addr" with offset "offset". eg DATA(int, buff, 8); +#define DATA(type, addr, offset) *((type*)((uint8_t*)addr+offset)) +#define X_W(X, W) ((X<<16)+W) +#define Y_H X_W + +typedef struct { + uint8_t blue; + uint8_t green; + uint8_t red; +}RGB; + +typedef unsigned int color_t; + +typedef union __attribute__((packed)) pos_t +{ + uint32_t val; + struct + { + short x; + short y; + }; +} pos_t; + + +typedef union __attribute__((packed)) oskey_t +{ + uint32_t val; + struct + { + uint8_t state; + uint8_t code; + uint16_t ctrl_key; + }; +} oskey_t; + +typedef struct +{ + unsigned handle; + unsigned io_code; + void *input; + int inp_size; + void *output; + int out_size; +}ioctl_t; + +typedef union +{ + struct + { + void *data; + size_t size; + } x; + unsigned long long raw; +}ufile_t; + +struct kolibri_system_colors { + color_t frame_area; + color_t grab_bar; + color_t grab_bar_button; + color_t grab_button_text; + color_t grab_text; + color_t work_area; + color_t work_button; + color_t work_button_text; + color_t work_text; + color_t work_graph; +}; + + +struct blit_call +{ + int dstx; + int dsty; + int w; + int h; + + int srcx; + int srcy; + int srcw; + int srch; + + void *bitmap; + int stride; +}; + +struct ipc_message +{ + uint32_t pid; // PID of sending thread + uint32_t datalen; // data bytes + char data[0]; // data begin +}; + +struct ipc_buffer +{ + uint32_t lock; // nonzero is locked + uint32_t used; // used bytes in buffer + struct ipc_message data[0]; // data begin +}; + +static inline void begin_draw(void) +{ + __asm__ __volatile__( + "int $0x40" ::"a"(12),"b"(1)); +}; + +static inline +void end_draw(void) +{ + __asm__ __volatile__( + "int $0x40" ::"a"(12),"b"(2)); +}; + +static inline +void sys_create_window(int x, int y, int w, int h, const char *name, + color_t workcolor, uint32_t style) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(0), + "b"((x << 16) | ((w-1) & 0xFFFF)), + "c"((y << 16) | ((h-1) & 0xFFFF)), + "d"((style << 24) | (workcolor & 0xFFFFFF)), + "D"(name), + "S"(0) : "memory"); +}; + +static inline +void sys_change_window(int new_x, int new_y, int new_w, int new_h) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(67), "b"(new_x), "c"(new_y), "d"(new_w),"S"(new_h) + ); +} + + +static inline +void define_button(uint32_t x_w, uint32_t y_h, uint32_t id, uint32_t color) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(8), + "b"(x_w), + "c"(y_h), + "d"(id), + "S"(color)); +}; + +static inline +void draw_line(int xs, int ys, int xe, int ye, color_t color) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(38), "d"(color), + "b"((xs << 16) | xe), + "c"((ys << 16) | ye)); +} + +static inline +void draw_bar(int x, int y, int w, int h, color_t color) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(13), "d"(color), + "b"((x << 16) | w), + "c"((y << 16) | h)); +} + +static inline +void draw_bitmap(void *bitmap, int x, int y, int w, int h) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(7), "b"(bitmap), + "c"((w << 16) | h), + "d"((x << 16) | y)); +} + +static inline +void draw_text_sys(const char *text, int x, int y, int len, color_t color) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(4),"d"(text), + "b"((x << 16) | y), + "S"(len),"c"(color) + :"memory"); +} +static inline +void draw_text_sys_bg(const char *text, int x, int y, int len, color_t color, color_t bg) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(4),"d"(text), + "b"((x << 16) | y), + "S"(len),"c"(color), "D"(bg) + :"memory"); +} + + +static inline +uint32_t get_skin_height(void) +{ + uint32_t height; + + __asm__ __volatile__( + "int $0x40 \n\t" + :"=a"(height) + :"a"(48),"b"(4)); + return height; +}; + +static inline +pos_t get_mouse_pos(int origin) +{ + pos_t val; + + __asm__ __volatile__( + "int $0x40 \n\t" + "rol $16, %%eax" + :"=a"(val) + :"a"(37),"b"(origin)); + return val; +} + +static inline +uint32_t get_mouse_buttons(void) +{ + uint32_t val; + + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(37),"b"(2)); + return val; +}; + +static inline +uint32_t get_mouse_wheels(void) +{ + uint32_t val; + + __asm__ __volatile__( + "int $0x40 \n\t" + :"=a"(val) + :"a"(37),"b"(7)); + return val; +}; + +static inline uint32_t load_cursor(void *path, uint32_t flags) +{ + uint32_t val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(37), "b"(4), "c"(path), "d"(flags)); + return val; +} + +static inline uint32_t set_cursor(uint32_t cursor) +{ + uint32_t old; + __asm__ __volatile__( + "int $0x40" + :"=a"(old) + :"a"(37), "b"(5), "c"(cursor)); + return old; +}; + +static inline int destroy_cursor(uint32_t cursor) +{ + int ret; + __asm__ __volatile__( + "int $0x40" + :"=a"(ret) + :"a"(37), "b"(6), "c"(cursor) + :"memory"); + return ret; +}; + + +static inline +uint32_t wait_for_event(uint32_t time) +{ + uint32_t val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(23), "b"(time)); + return val; +}; + +static inline uint32_t check_os_event() +{ + uint32_t val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(11)); + return val; +}; + +static inline uint32_t get_os_event() +{ + uint32_t val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(10)); + return val; +}; + +static inline +uint32_t get_tick_count(void) +{ + uint32_t val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(26),"b"(9)); + return val; +}; + +static inline +uint64_t get_ns_count(void) +{ + uint64_t val; + __asm__ __volatile__( + "int $0x40" + :"=A"(val) + :"a"(26), "b"(10)); + return val; +}; + +static inline oskey_t get_key(void) +{ + oskey_t val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(2)); + return val; +} + +static inline +uint32_t get_os_button() +{ + uint32_t val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(17)); + return val>>8; +}; + +static inline uint32_t get_service(char *name) +{ + uint32_t retval = 0; + __asm__ __volatile__( + "int $0x40" + :"=a"(retval) + :"a"(68),"b"(16),"c"(name) + :"memory"); + + return retval; +}; + +static inline int call_service(ioctl_t *io) +{ + int retval; + + __asm__ __volatile__( + "int $0x40" + :"=a"(retval) + :"a"(68),"b"(17),"c"(io) + :"memory","cc"); + + return retval; +}; + + +static inline void yield(void) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(68), "b"(1)); +}; + +static inline void delay(uint32_t time) +{ + __asm__ __volatile__( + "int $0x40" + ::"a"(5), "b"(time) + :"memory"); +}; + +static inline +void *user_alloc(size_t size) +{ + void *val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(68),"b"(12),"c"(size)); + return val; +} + +static inline +int user_free(void *mem) +{ + int val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(68),"b"(13),"c"(mem)); + return val; +} + +static inline +void* user_realloc(void *mem, size_t size) +{ + void *val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(68),"b"(20),"c"(size),"d"(mem) + :"memory"); + + return val; +}; + +static inline +int *user_unmap(void *base, size_t offset, size_t size) +{ + int *val; + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(68),"b"(26),"c"(base),"d"(offset),"S"(size)); + return val; +}; + +static inline ufile_t load_file(const char *path) +{ + ufile_t uf; + + __asm__ __volatile__ ( + "int $0x40" + :"=A"(uf.raw) + :"a" (68), "b"(27),"c"(path)); + + return uf; +}; + +static inline int GetScreenSize() +{ + int retval; + + __asm__ __volatile__( + "int $0x40" + :"=a"(retval) + :"a"(61), "b"(1)); + return retval; +} + + +static inline void get_proc_info(char *info) +{ + __asm__ __volatile__( + "int $0x40" + : + :"a"(9), "b"(info), "c"(-1) + :"memory"); +}; + +static inline void Blit(void *bitmap, int dst_x, int dst_y, + int src_x, int src_y, int w, int h, + int src_w, int src_h, int stride) +{ + volatile struct blit_call bc; + + bc.dstx = dst_x; + bc.dsty = dst_y; + bc.w = w; + bc.h = h; + bc.srcx = src_x; + bc.srcy = src_y; + bc.srcw = src_w; + bc.srch = src_h; + bc.stride = stride; + bc.bitmap = bitmap; + + __asm__ __volatile__( + "int $0x40" + ::"a"(73),"b"(0),"c"(&bc.dstx)); +}; + + +// newlib exclusive +#ifndef __TINYC__ +int create_thread(int (*proc)(void *param), void *param, int stack_size); + +void* load_library(const char *name); + +void* get_proc_address(void *handle, const char *proc_name); + +void enumerate_libraries(int (*callback)(void *handle, const char* name, + uint32_t base, uint32_t size, void *user_data), + void *user_data); +#endif + +// May be next section need to be added in newlibc + +enum KOLIBRI_GUI_EVENTS { + KOLIBRI_EVENT_NONE = 0, /* Event queue is empty */ + KOLIBRI_EVENT_REDRAW = 1, /* Window and window elements should be redrawn */ + KOLIBRI_EVENT_KEY = 2, /* A key on the keyboard was pressed */ + KOLIBRI_EVENT_BUTTON = 3, /* A button was clicked with the mouse */ + KOLIBRI_EVENT_DESKTOP = 5, /* Desktop redraw finished */ + KOLIBRI_EVENT_MOUSE = 6, /* Mouse activity (movement, button press) was detected */ + KOLIBRI_EVENT_IPC = 7, /* Interprocess communication notify */ + KOLIBRI_EVENT_NETWORK = 8, /* Network event */ + KOLIBRI_EVENT_DEBUG = 9, /* Debug subsystem event */ + KOLIBRI_EVENT_IRQBEGIN = 16 /* 16..31 IRQ0..IRQ15 interrupt =IRQBEGIN+IRQn */ +}; + + +// copied from /programs/system/shell/system/kolibri.c +// fn's returned -1 as syserror, 1 as error, 0 as OK +static inline +int kol_clip_num() +{ + register uint32_t val; + asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(0)); + return val; +} + +static inline +char* kol_clip_get(int n) +// returned buffer must be freed by user_free() +{ + register char* val; + asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(1), "c"(n)); + return val; +} + +static inline +int kol_clip_set(int n, char buffer[]) +{ + register uint32_t val; + asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(2), "c"(n), "d"(buffer)); + return val; +} + +static inline +int kol_clip_pop() +{ + register uint32_t val; + asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(3)); + return val; +} + +static inline +int kol_clip_unlock() +{ + register uint32_t val; + asm volatile ("int $0x40":"=a"(val):"a"(54), "b"(4)); + return val; +} + +static inline void get_system_colors(struct kolibri_system_colors *color_table) +{ + __asm__ volatile ("int $0x40" + : + :"a"(48),"b"(3),"c"(color_table),"d"(40) + ); + + /* color_table should point to the system color table */ +} + +static inline void debug_board_write_byte(const char ch){ + __asm__ __volatile__( + "int $0x40" + : + :"a"(63), "b"(1), "c"(ch)); +} + + +static inline void draw_number_sys(int32_t number, int x, int y, int len, color_t color){ + register uint32_t fmt; + fmt = len << 16 | 0x80000000; // no leading zeros + width +// fmt = len << 16 | 0x00000000; // leading zeros + width + __asm__ __volatile__( + "int $0x40" + : + :"a"(47), "b"(fmt), "c"(number), "d"((x << 16) | y), "S"(color)); +} + +static inline void draw_number_sys_bg(int32_t number, int x, int y, int len, color_t color, color_t bg){ + register uint32_t fmt; + fmt = len << 16 | 0x80000000; // no leading zeros + width +// fmt = len << 16 | 0x00000000; // leading zeros + width + __asm__ __volatile__( + "int $0x40" + : + :"a"(47), "b"(fmt), "c"(number), "d"((x << 16) | y), "S"(color), "D"(bg)); +} + +static inline +uint32_t get_mouse_eventstate(void) +{ + uint32_t val; + + __asm__ __volatile__( + "int $0x40" + :"=a"(val) + :"a"(37),"b"(3)); + return val; +}; + +static inline +uint32_t set_event_mask(uint32_t mask) +{ + register uint32_t val; + asm volatile ("int $0x40":"=a"(val):"a"(40), "b"(mask)); + return val; +} + +typedef void (*thread_proc)(void*); + +static inline +int start_thread(thread_proc proc, char* stack_top) +{ + register int val; + asm volatile ("int $0x40":"=a"(val):"a"(51), "b"(1), "c"(proc), "d"(stack_top)); + return val; +} + +static inline +void kos_exit() +{ + asm volatile ("int $0x40"::"a"(-1)); +} + +static inline void focus_window(int slot){ + asm volatile ("int $0x40"::"a"(18), "b"(3), "c"(slot)); +} + +static inline int get_thread_slot(int tid){ + register int val; + asm volatile ("int $0x40":"=a"(val):"a"(18), "b"(21), "c"(tid)); + return val; +} + +static inline void set_current_folder(char* dir){ + asm volatile ("int $0x40"::"a"(30), "b"(1), "c"(dir)); +} + +static inline int get_current_folder(char* buf, int bufsize){ + register int val; + asm volatile ("int $0x40":"=a"(val):"a"(30), "b"(2), "c"(buf), "d"(bufsize)); + return val; +} + +static inline +void ipc_set_area(void* buf, int bufsize){ + asm volatile ("int $0x40"::"a"(60), "b"(1), "c"(buf), "d"(bufsize)); +} + +static inline +int ipc_send_message(int pid_reciever, void *data, int datalen) { + register int val; + asm volatile ("int $0x40":"=a"(val):"a"(60), "b"(2), "c"(pid_reciever), "d"(data), "S"(datalen)); + return val; +} + +static inline +void* shm_open(char *shm_name, int msize, int flags, int *retsz){ + register int val, cod; + asm volatile ("int $0x40":"=a"(val),"=d"(cod):"a"(68), "b"(22), "c"(shm_name), "d"(msize), "S"(flags)); + + if(retsz) *retsz = cod; // errcode if NULL or memsize when open + return (void*)val; +} + +static inline +void shm_close(char *shm_name){ + asm volatile ("int $0x40"::"a"(68), "b"(23), "c"(shm_name)); +} + +static inline +int start_app(char *app_name, char *args){ + struct file_op_t + { + uint32_t fn; + uint32_t flags; + char* args; + uint32_t res1, res2; + char zero; + char* app_name __attribute__((packed)); + } file_op; + memset(&file_op, 0, sizeof(file_op)); + file_op.fn = 7; + file_op.args = args; + file_op.app_name = app_name; + + register int val; + asm volatile ("int $0x40":"=a"(val):"a"(70), "b"(&file_op)); + + return val; +} + +// TinyC don't support aliasing of static inline funcs, but support #define :) +#ifndef __TINYC__ +static inline void BeginDraw(void) __attribute__ ((alias ("begin_draw"))); +static inline void EndDraw(void) __attribute__ ((alias ("end_draw"))); +static inline void DrawWindow(int x, int y, int w, int h, const char *name, + color_t workcolor, uint32_t style) + __attribute__ ((alias ("sys_create_window"))); +static inline void DefineButton(void) __attribute__ ((alias ("define_button"))); +static inline void DrawLine(int xs, int ys, int xe, int ye, color_t color) + __attribute__ ((alias ("draw_line"))); +static inline void DrawBar(int x, int y, int w, int h, color_t color) + __attribute__ ((alias ("draw_bar"))); +static inline void DrawBitmap(void *bitmap, int x, int y, int w, int h) + __attribute__ ((alias ("draw_bitmap"))); +static inline uint32_t GetSkinHeight(void) __attribute__ ((alias ("get_skin_height"))); +static inline pos_t GetMousePos(int origin) __attribute__ ((alias ("get_mouse_pos"))); +static inline uint32_t GetMouseButtons(void) __attribute__ ((alias ("get_mouse_buttons"))); +static inline uint32_t GetMouseWheels(void) __attribute__ ((alias ("get_mouse_wheels"))); +static inline uint32_t LoadCursor(void *path, uint32_t flags) __attribute__ ((alias ("load_cursor"))); +static inline uint32_t SetCursor(uint32_t cursor) __attribute__ ((alias ("set_cursor"))); +static inline int DestroyCursor(uint32_t cursor) __attribute__ ((alias ("destroy_cursor"))); +static inline uint32_t GetOsEvent(void) __attribute__ ((alias ("get_os_event"))); +static inline void *UserAlloc(size_t size) __attribute__ ((alias ("user_alloc"))); +static inline int UserFree(void *mem) __attribute__ ((alias ("user_free"))); +static inline void* UserRealloc(void *mem, size_t size) __attribute__ ((alias ("user_realloc"))); +static inline int *UserUnmap(void *base, size_t offset, size_t size) __attribute__ ((alias ("user_unmap"))); +static inline ufile_t LoadFile(const char *path) __attribute__ ((alias ("load_file"))); +static inline void GetProcInfo(char *info) __attribute__ ((alias ("get_proc_info"))); +#else + #define BeginDraw begin_draw + #define EndDraw end_draw + #define DrawWindow sys_create_window + #define DefineButton define_button + #define DrawLine draw_line + #define DrawBar draw_bar + #define DrawBitmap draw_bitmap + #define GetSkinHeight get_skin_height + #define GetMousePos get_mouse_pos + #define GetMouseButtons get_mouse_buttons + #define GetMouseWheels get_mouse_wheels + #define LoadCursor load_cursor + #define SetCursor set_cursor + #define DestroyCursor destroy_cursor + #define GetOsEvent get_os_event + #define UserAlloc user_alloc + #define UserFree user_free + #define UserRealloc user_realloc + #define UserUnmap user_unmap + #define LoadFile load_file + #define GetProcInfo get_proc_info +#endif + +#ifdef __cplusplus +} +#endif + + +#endif + + + + + diff --git a/programs/develop/ktcc/trunk/libc/include/libgen.h b/programs/develop/ktcc/trunk/libc/include/libgen.h new file mode 100644 index 0000000000..af17a911f5 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/libgen.h @@ -0,0 +1,7 @@ +#ifndef __KTCC_LIBGEN_H__ +#define __KTCC_LIBGEN_H__ + +char *basename(char *path); +char *dirname(char *path); + +#endif // __KTCC_LIBGEN_H__ diff --git a/programs/develop/ktcc/trunk/libc/include/math.h b/programs/develop/ktcc/trunk/libc/include/math.h new file mode 100644 index 0000000000..9a0f0ae92f --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/math.h @@ -0,0 +1,55 @@ +/* Copyright (C) 1999 DJ Delorie, see http://www.delorie.com/copyright.html for details */ +/* Copyright (C) 1998 DJ Delorie, see http://www.delorie.com/copyright.html for details */ +/* Copyright (C) 1995 DJ Delorie, see http://www.delorie.com/copyright.html for details */ + +#ifndef _MATH_H +#define _MATH_H + +extern double acos(double _x); +extern double asin(double _x); +extern double atan(double _x); +extern double atan2(double _y, double _x); +extern float ceilf(float); +extern double ceil(double _x); +extern double cos(double _x); +extern double cosh(double _x); +extern double exp(double _x); +extern double exp2(double _x); +extern double fabs(double _x); +extern float fabsf(float); +extern double floor(double _x); +extern float floorf(float); +extern double fmod(double _x, double _y); +extern double frexp(double _x, int *_pexp); +extern double ldexp(double _x, int _exp); +extern double remainder(double, double); +extern double log(double _y); +extern double log10(double _x); +extern double modf(double _x, double *_pint); +extern double pow(double _x, double _y); +extern double sin(double _x); +extern double sinh(double _x); +extern double sqrt(double _x); +extern float sqrtf(float); +extern double tan(double _x); +extern double tanh(double _x); +extern double round(double x); +extern long double roundl (long double x); + +#define M_E 2.7182818284590452354 +#define M_LOG2E 1.4426950408889634074 +#define M_LOG10E 0.43429448190325182765 +#define M_LN2 0.69314718055994530942 +#define M_LN10 2.30258509299404568402 +#define M_PI 3.14159265358979323846 +#define M_PI_2 1.57079632679489661923 +#define M_PI_4 0.78539816339744830962 +#define M_1_PI 0.31830988618379067154 +#define M_2_PI 0.63661977236758134308 +#define M_2_SQRTPI 1.12837916709551257390 +#define M_SQRT2 1.41421356237309504880 +#define M_SQRT1_2 0.70710678118654752440 +#define PI M_PI +#define PI2 M_PI_2 + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/memory.h b/programs/develop/ktcc/trunk/libc/include/memory.h new file mode 100644 index 0000000000..b2b3d5ad1b --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/memory.h @@ -0,0 +1,8 @@ +#ifndef _MEMORY_H +#define _MEMORY_H + +#ifndef _STRING_H + #include +#endif +#endif + diff --git a/programs/develop/ktcc/trunk/libc/include/net/network.h b/programs/develop/ktcc/trunk/libc/include/net/network.h new file mode 100644 index 0000000000..784c22edc8 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/net/network.h @@ -0,0 +1,54 @@ +#ifndef __NETWORK_H +#define __NETWORK_H + +#include + +#define EAI_ADDRFAMILY 1 +#define EAI_AGAIN 2 +#define EAI_BADFLAGS 3 +#define EAI_FAIL 4 +#define EAI_FAMILY 5 +#define EAI_MEMORY 6 +#define EAI_NONAME 8 +#define EAI_SERVICE 9 +#define EAI_SOCKTYPE 10 +#define EAI_BADHINTS 12 +#define EAI_PROTOCOL 13 +#define EAI_OVERFLOW 14 + +// Flags for addrinfo +#define AI_PASSIVE 1 +#define AI_CANONNAME 2 +#define AI_NUMERICHOST 4 +#define AI_NUMERICSERV 8 +#define AI_ADDRCONFIG 0x400 + +#pragma pack(push, 1) +struct ARP_entry{ +unsigned int IP; +unsigned char MAC[6]; +unsigned short status; +unsigned short TTL; +}; +#pragma pack(pop) + +#pragma pack(push, 1) +struct addrinfo { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + int ai_addrlen; + char *ai_canonname; + struct sockaddr *ai_addr; + struct addrinfo *ai_next; +}; +#pragma pack(pop) + +extern int networklib_init (); +extern int (*inet_addr __attribute__ ((stdcall)))(const char* hostname); +extern char* (*inet_ntoa __attribute__ ((stdcall)))(int ip_addr); +extern int (*getaddrinfo __attribute__ ((stdcall)))(const char* hostname, const char* servname, const struct addrinfo* hints, struct addrinfo** res); +extern void (*freeaddrinfo __attribute__ ((stdcall)))(struct addrinfo* ai); + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/net/socket.h b/programs/develop/ktcc/trunk/libc/include/net/socket.h new file mode 100644 index 0000000000..8867fdaa9b --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/net/socket.h @@ -0,0 +1,89 @@ +#ifndef __SOCKET_H +#define __SOCKET_H + +#include +#include + +// Socket Types +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 +#define SOCK_RAW 3 + +// IP protocols +#define IPPROTO_IP 0 +#define IPPROTO_ICMP 1 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 +#define IPPROTO_RAW 255 + +// IP options +#define IP_TTL 2 + +// Address families +#define AF_UNSPEC 0 +#define AF_LOCAL 1 +#define AF_INET 2 +#define AF_INET4 2 // IPv4 +#define AF_INET6 10 // IPv6 + +#define PF_UNSPEC AF_UNSPEC +#define PF_LOCAL AF_LOCAL +#define PF_INET4 AF_INET4 +#define PF_INET6 AF_INET6 + +// internal definition +#define AI_SUPPORTED 0x40F + +// for system function 76 +#define API_ETH (0<<16) +#define API_IPv4 (1<<16) +#define API_ICMP (2<<16) +#define API_UDP (3<<16) +#define API_TCP (4<<16) +#define API_ARP (5<<16) +#define API_PPPOE (6<<16) + +// Socket flags for user calls +#define MSG_NOFLAG 0 +#define MSG_PEEK 0x02 +#define MSG_DONTWAIT 0x40 + +// Socket levels +#define SOL_SOCKET 0xffff + +//Socket options +#define SO_BINDTODEVICE (1<<9) +#define SO_NONBLOCK (1<<31) +#define PORT(X) (X<<8) + +#pragma pack(push,1) +struct sockaddr{ + unsigned short sin_family; + unsigned short sin_port; + unsigned int sin_addr; + unsigned long long sin_zero; +}; +#pragma pack(pop) + +#pragma pack(push,1) +typedef struct{ + unsigned int level; + unsigned int optionname; + unsigned int optlenght; + unsigned char options; +}optstruct; +#pragma pack(pop) + +int socket(int domain, int type, int protocol); +int close(int socket); +int bind(int socket, const struct sockaddr *addres, int addres_len); +int listen(int socket, int backlog); +int connect(int socket, const struct sockaddr* address, int socket_len); +int accept(int socket, const struct sockaddr* address, int address_len); +int send(int socket, const void *message, size_t msg_len, int flag); +int recv(int socket, void *buffer, size_t buff_len, int flag); +int setsockopt(int socket,const optstruct* opt); +int getsockopt(int socket, optstruct* opt); +int socketpair(int *sock1, int *sock2); + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/stdarg.h b/programs/develop/ktcc/trunk/libc/include/stdarg.h new file mode 100644 index 0000000000..06d592b93a --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/stdarg.h @@ -0,0 +1,75 @@ +#ifndef _STDARG_H +#define _STDARG_H + +#ifdef __x86_64__ +#ifndef _WIN64 + +//This should be in sync with the declaration on our lib/libtcc1.c +/* GCC compatible definition of va_list. */ +typedef struct { + unsigned int gp_offset; + unsigned int fp_offset; + union { + unsigned int overflow_offset; + char *overflow_arg_area; + }; + char *reg_save_area; +} __va_list_struct; + +typedef __va_list_struct va_list[1]; + +void __va_start(__va_list_struct *ap, void *fp); +void *__va_arg(__va_list_struct *ap, int arg_type, int size, int align); + +#define va_start(ap, last) __va_start(ap, __builtin_frame_address(0)) +#define va_arg(ap, type) \ + (*(type *)(__va_arg(ap, __builtin_va_arg_types(type), sizeof(type), __alignof__(type)))) +#define va_copy(dest, src) (*(dest) = *(src)) +#define va_end(ap) + +#else /* _WIN64 */ +typedef char *va_list; +#define va_start(ap,last) __builtin_va_start(ap,last) +#define va_arg(ap,type) (ap += 8, sizeof(type)<=8 ? *(type*)ap : **(type**)ap) +#define va_copy(dest, src) ((dest) = (src)) +#define va_end(ap) +#endif + +#elif __arm__ +typedef char *va_list; +#define _tcc_alignof(type) ((int)&((struct {char c;type x;} *)0)->x) +#define _tcc_align(addr,type) (((unsigned)addr + _tcc_alignof(type) - 1) \ + & ~(_tcc_alignof(type) - 1)) +#define va_start(ap,last) ap = ((char *)&(last)) + ((sizeof(last)+3)&~3) +#define va_arg(ap,type) (ap = (void *) ((_tcc_align(ap,type)+sizeof(type)+3) \ + &~3), *(type *)(ap - ((sizeof(type)+3)&~3))) +#define va_copy(dest, src) (dest) = (src) +#define va_end(ap) + +#elif defined(__aarch64__) +typedef struct { + void *__stack; + void *__gr_top; + void *__vr_top; + int __gr_offs; + int __vr_offs; +} va_list; +#define va_start(ap, last) __va_start(ap, last) +#define va_arg(ap, type) __va_arg(ap, type) +#define va_end(ap) +#define va_copy(dest, src) ((dest) = (src)) + +#else /* __i386__ */ +typedef char *va_list; +/* only correct for i386 */ +#define va_start(ap,last) ap = ((char *)&(last)) + ((sizeof(last)+3)&~3) +#define va_arg(ap,type) (ap += (sizeof(type)+3)&~3, *(type *)(ap - ((sizeof(type)+3)&~3))) +#define va_copy(dest, src) (dest) = (src) +#define va_end(ap) +#endif + +/* fix a buggy dependency on GCC in libio.h */ +typedef va_list __gnuc_va_list; +#define _VA_LIST_DEFINED + +#endif /* _STDARG_H */ diff --git a/programs/develop/ktcc/trunk/libc/include/stdbool.h b/programs/develop/ktcc/trunk/libc/include/stdbool.h new file mode 100644 index 0000000000..d2ee446e70 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/stdbool.h @@ -0,0 +1,11 @@ +#ifndef _STDBOOL_H +#define _STDBOOL_H + +/* ISOC99 boolean */ + +#define bool _Bool +#define true 1 +#define false 0 +#define __bool_true_false_are_defined 1 + +#endif /* _STDBOOL_H */ diff --git a/programs/develop/ktcc/trunk/libc/include/stddef.h b/programs/develop/ktcc/trunk/libc/include/stddef.h new file mode 100644 index 0000000000..791ba318cc --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/stddef.h @@ -0,0 +1,46 @@ +#ifndef _STDDEF_H +#define _STDDEF_H + +typedef __SIZE_TYPE__ size_t; +typedef __PTRDIFF_TYPE__ ssize_t; +typedef __WCHAR_TYPE__ wchar_t; +typedef __PTRDIFF_TYPE__ ptrdiff_t; +typedef __PTRDIFF_TYPE__ intptr_t; +typedef __SIZE_TYPE__ uintptr_t; + +#ifndef __int8_t_defined +#define __int8_t_defined +typedef signed char int8_t; +typedef signed short int int16_t; +typedef signed int int32_t; +typedef signed long long int int64_t; +typedef unsigned char uint8_t; +typedef unsigned short int uint16_t; +typedef unsigned int uint32_t; +typedef unsigned long long int uint64_t; +#endif + +#ifndef NULL +#define NULL ((void*)0) +#endif + +#define offsetof(type, field) ((size_t)&((type *)0)->field) + +void *alloca(size_t size); + +#endif + +/* Older glibc require a wint_t from (when requested + by __need_wint_t, as otherwise stddef.h isn't allowed to + define this type). Note that this must be outside the normal + _STDDEF_H guard, so that it works even when we've included the file + already (without requiring wint_t). Some other libs define _WINT_T + if they've already provided that type, so we can use that as guard. + TCC defines __WINT_TYPE__ for us. */ +#if defined (__need_wint_t) +#ifndef _WINT_T +#define _WINT_T +typedef __WINT_TYPE__ wint_t; +#endif +#undef __need_wint_t +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/stdint.h b/programs/develop/ktcc/trunk/libc/include/stdint.h new file mode 100644 index 0000000000..d8dcc0f82d --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/stdint.h @@ -0,0 +1 @@ +#include \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/include/stdio.h b/programs/develop/ktcc/trunk/libc/include/stdio.h new file mode 100644 index 0000000000..5fd83e151d --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/stdio.h @@ -0,0 +1,105 @@ +#ifndef stdio_h +#define stdio_h + +#include "kolibrisys.h" +#include +#include +/* use stdarg.h +typedef char *va_list; +#define _roundsize(n) ( (sizeof(n) + 3) & ~3 ) +#define va_start(ap,v) (ap = (va_list)&v+_roundsize(v)) +#define va_arg(ap,t) ( *(t *)((ap += _roundsize(t)) - _roundsize(t)) ) +#define va_end(ap) (ap = (va_list)0) +*/ +#ifndef NULL +# define NULL ((void*)0) +#endif + +typedef unsigned int fpos_t; // 32bit is not enough! 4Gb limit +typedef unsigned int size_t; + +int format_print(char *dest, size_t maxlen,const char *fmt0, va_list argp); + +typedef struct { + char* buffer; + dword buffersize; + dword filesize; // too small + int filepos; // too small, may be -1 + char* filename; + int mode; + int ungetc_buf; + dword buffer_start; // 1st byte position + dword buffer_end; // points after last buffered data +} FILE; + +#define stderr ((FILE*)3) /* works only for fprintf!!! */ + +#define FILE_OPEN_READ 0 +#define FILE_OPEN_WRITE 1 +#define FILE_OPEN_APPEND 2 +#define FILE_OPEN_TEXT 4 +#define FILE_OPEN_PLUS 8 +#define EOF (-1) +#define BUFSIZ (4096) +#define FILENAME_MAX (0x400) + +extern FILE* fopen(const char* filename, const char *mode); +extern int fclose(FILE* file); +extern int feof(FILE* file); +extern int fflush(FILE* file); +extern int fgetc(FILE* file); +extern int fgetpos(FILE* file,fpos_t* pos); +extern int fsetpos(FILE* file,const fpos_t* pos); +extern int fputc(int c,FILE* file); +extern int fread(void* buffer,int size,int count,FILE* file); +extern int fwrite(void *buffer,int size,int count,FILE* file); +extern long ftell(FILE* file); +#define SEEK_CUR 0 +#define SEEK_END 1 +#define SEEK_SET 2 +extern int fseek(FILE* file,long offset,int origin); +extern void rewind(FILE* file); +extern int cdecl fprintf(FILE* file, const char* format,...); +extern int fscanf(FILE* file,const char* format,...); +extern int ungetc(int c,FILE* file); + +extern int cdecl printf(const char *format,...); + +extern int vsnprintf(char *dest, size_t size,const char *format,va_list ap); +extern int cdecl snprintf(char *dest, size_t size, const char *format,...); +extern int cdecl sprintf(char *dest,const char *format,...); + +#define getc(a) fgetc(a) +#define putc(a, b) fputc(a, b) +char * fgets (char * str, int num, FILE * stream); +int putchar (int ch); +int getchar (void); +int puts (const char * str); +char * gets (char * str); + +typedef int (*virtual_getc)(void *sp, const void *obj); +typedef void (*virtual_ungetc)(void *sp, int c, const void *obj); +int format_scan(const void *src, const char *fmt, va_list argp, virtual_getc vgetc, virtual_ungetc vungetc); +int vscanf ( const char * format, va_list arg ); +int scanf ( const char * format, ...); +int vsscanf ( const char * s, const char * format, va_list arg ); +int sscanf ( const char * s, const char * format, ...); +int vfscanf ( FILE * stream, const char * format, va_list arg ); +int fputs ( const char * str, FILE * file ); +void clearerr ( FILE * stream ); +int ferror ( FILE * stream ); +void perror ( const char * str ); +int vprintf ( const char * format, va_list arg ); +int vsprintf (char * s, const char * format, va_list arg ); +int vfprintf ( FILE * stream, const char * format, va_list arg ); + +//debug +void debug_printf(const char *format,...); + +int tiny_sprintf (char * s, const char * format, ... ); +int tiny_snprintf (char * s, size_t n, const char * format, ... ); +int tiny_vsnprintf (char * s, size_t n, const char * format, va_list args ); +// support %c, %s, %d, %x, %u, %% for 32-bit values only. no width specs, left align +// always zero-ended +#endif + diff --git a/programs/develop/ktcc/trunk/libc/include/stdlib.h b/programs/develop/ktcc/trunk/libc/include/stdlib.h new file mode 100644 index 0000000000..5dc231baf2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/stdlib.h @@ -0,0 +1,77 @@ +#ifndef stdlib_h +#define stdlib_h +#include "kolibrisys.h" + +#define RAND_MAX 65535 +#ifndef NULL +# define NULL ((void*)0) +#endif + +#define abs(i) (((i)<0)?(-(i)):(i)) +#define labs(li) abs(li) + +#define min(a, b) ((a)<(b) ? (a) : (b)) +#define max(a, b) ((a)>(b) ? (a) : (b)) + + +extern int atoib(char *s,int b); +extern int atoi(char *s); +extern char *itoab(unsigned int n,char* s,int b); +extern char *__itoa(int n,char* s); + +// function using KOS syscalls +extern void* stdcall sysmalloc(dword size); +extern void stdcall sysfree(void *pointer); +extern void* stdcall sysrealloc(void* pointer,dword size); +extern void* syscalloc (size_t num, size_t size); + +// suballocator functions +extern void* wtmalloc(size_t size); +extern void wtfree(void *pointer); +extern void* wtrealloc(void* pointer, size_t size); +extern void* wtcalloc (size_t num, size_t size); +extern int wtmalloc_freelist_check(); +extern int wtmalloc_poiner_check(void *ptr); +extern void wtmalloc_freelist_print(); + +#ifdef USESYSALLOC +#define malloc(x) sysmalloc(x) +#define free(x) sysfree(x) +#define realloc(x,y) sysrealloc(x,y) +#define calloc(x,y) syscalloc(x,y) +#else +#define malloc(x) wtmalloc(x) +#define free(x) wtfree(x) +#define realloc(x,y) wtrealloc(x,y) +#define calloc(x,y) wtcalloc(x,y) +#endif + + +extern int rand (void); +extern void srand (unsigned int seed); + +double strtod (const char* str, char** endptr); +long double strtold (const char* str, char** endptr); +float strtof (const char* str, char** endptr); +long int strtol (const char* str, char** endptr, int base); +#define strtoul(s, ep, b) ((unsigned long int)strtol(s, ep, b)) + + +void exit (int status); /* close console if was initialized, also stay window [finished] when status is error < 0 */ +#define abort() exit(-1) + +typedef struct { + int quot; + int rem; +} div_t; + +typedef div_t ldiv_t; + +div_t div (int numer, int denom); +#define ldiv(a, b) div(a, b) +#define atol(a) atoi(a) +#define atof(a) strtod(a, NULL) + + + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/string.h b/programs/develop/ktcc/trunk/libc/include/string.h new file mode 100644 index 0000000000..bd2ad06211 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/string.h @@ -0,0 +1,36 @@ +#ifndef string_h +#define string_h +typedef unsigned int size_t; + + +extern void* memchr(const void*,int,size_t); +extern void* memrchr(const void*,int,size_t); +extern int memcmp(const void*,const void*,size_t); +extern void* memcpy(void*,const void*,size_t); +extern void* memmove(void*,const void*,size_t); +extern void* memset(void*,int,size_t); +extern char* strcat(char*,const char*); +extern char* strchr(const char*,int); +extern int strcmp(const char*,const char*); +extern int strcoll(const char*,const char*); +extern char* strcpy(char*,const char*); +extern size_t strcspn(const char*,const char*); +extern int strlen(const char*); +extern char* strncat(char*,const char*,size_t); +extern int strncmp(const char*,const char*,size_t); +extern char* strncpy(char*,const char*,size_t); +extern char* strpbrk(const char*,const char*); +extern char* strrchr(const char*,int); +extern size_t strspn(const char*,const char*); +extern char* strstr(const char*,const char*); +extern char* strtok(char*,const char*); +extern int strxfrm(char*,const char*,int); +extern char* strdup(const char*); +extern char* strrev(char *p); +char * strerror ( int errnum ); + +#ifndef NULL +# define NULL ((void*)0) +#endif + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/time.h b/programs/develop/ktcc/trunk/libc/include/time.h new file mode 100644 index 0000000000..8904899371 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/time.h @@ -0,0 +1,29 @@ +#ifndef _TIME_H +#define _TIME_H + + +typedef unsigned long int clock_t; +typedef unsigned long int time_t; +#define clock() get_tick_count() +#define CLOCKS_PER_SEC 100 + +struct tm { + int tm_sec; /* seconds after the minute 0-61*/ + int tm_min; /* minutes after the hour 0-59 */ + int tm_hour; /* hours since midnight 0-23 */ + int tm_mday; /* day of the month 1-31 */ + int tm_mon; /* months since January 0-11 */ + int tm_year; /* years since 1900 */ + int tm_wday; /* days since Sunday 0-6 */ + int tm_yday; /* days since January 1 0-365 */ + int tm_isdst; /* Daylight Saving Time flag */ +}; + +time_t mktime (struct tm * timeptr); +time_t time (time_t* timer); +struct tm * localtime (const time_t * timer); /* non-standard! ignore parameter and return just time now, not generate tm_isdst, tm_yday, tm_wday == -1 */ +double difftime (time_t end, time_t beginning); + +extern struct tm __buffertime; + +#endif \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/include/tinygl/gl.h b/programs/develop/ktcc/trunk/libc/include/tinygl/gl.h new file mode 100644 index 0000000000..9773624af8 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/tinygl/gl.h @@ -0,0 +1,838 @@ +/* + * The following constants come from Mesa + */ +#ifndef GL_H +#define GL_H + +#define GL_VERSION_1_1 1 + +#ifdef __cplusplus +extern "C" { +#endif + +enum { + /* Boolean values */ + GL_FALSE = 0, + GL_TRUE = 1, + + /* Data types */ + GL_BYTE = 0x1400, + GL_UNSIGNED_BYTE = 0x1401, + GL_SHORT = 0x1402, + GL_UNSIGNED_SHORT = 0x1403, + GL_INT = 0x1404, + GL_UNSIGNED_INT = 0x1405, + GL_FLOAT = 0x1406, + GL_DOUBLE = 0x140A, + GL_2_BYTES = 0x1407, + GL_3_BYTES = 0x1408, + GL_4_BYTES = 0x1409, + + /* Primitives */ + GL_LINES = 0x0001, + GL_POINTS = 0x0000, + GL_LINE_STRIP = 0x0003, + GL_LINE_LOOP = 0x0002, + GL_TRIANGLES = 0x0004, + GL_TRIANGLE_STRIP = 0x0005, + GL_TRIANGLE_FAN = 0x0006, + GL_QUADS = 0x0007, + GL_QUAD_STRIP = 0x0008, + GL_POLYGON = 0x0009, + GL_EDGE_FLAG = 0x0B43, + + /* Vertex Arrays */ + GL_VERTEX_ARRAY = 0x8074, + GL_NORMAL_ARRAY = 0x8075, + GL_COLOR_ARRAY = 0x8076, + GL_INDEX_ARRAY = 0x8077, + GL_TEXTURE_COORD_ARRAY = 0x8078, + GL_EDGE_FLAG_ARRAY = 0x8079, + GL_VERTEX_ARRAY_SIZE = 0x807A, + GL_VERTEX_ARRAY_TYPE = 0x807B, + GL_VERTEX_ARRAY_STRIDE = 0x807C, + GL_VERTEX_ARRAY_COUNT = 0x807D, + GL_NORMAL_ARRAY_TYPE = 0x807E, + GL_NORMAL_ARRAY_STRIDE = 0x807F, + GL_NORMAL_ARRAY_COUNT = 0x8080, + GL_COLOR_ARRAY_SIZE = 0x8081, + GL_COLOR_ARRAY_TYPE = 0x8082, + GL_COLOR_ARRAY_STRIDE = 0x8083, + GL_COLOR_ARRAY_COUNT = 0x8084, + GL_INDEX_ARRAY_TYPE = 0x8085, + GL_INDEX_ARRAY_STRIDE = 0x8086, + GL_INDEX_ARRAY_COUNT = 0x8087, + GL_TEXTURE_COORD_ARRAY_SIZE = 0x8088, + GL_TEXTURE_COORD_ARRAY_TYPE = 0x8089, + GL_TEXTURE_COORD_ARRAY_STRIDE = 0x808A, + GL_TEXTURE_COORD_ARRAY_COUNT = 0x808B, + GL_EDGE_FLAG_ARRAY_STRIDE = 0x808C, + GL_EDGE_FLAG_ARRAY_COUNT = 0x808D, + GL_VERTEX_ARRAY_POINTER = 0x808E, + GL_NORMAL_ARRAY_POINTER = 0x808F, + GL_COLOR_ARRAY_POINTER = 0x8090, + GL_INDEX_ARRAY_POINTER = 0x8091, + GL_TEXTURE_COORD_ARRAY_POINTER = 0x8092, + GL_EDGE_FLAG_ARRAY_POINTER = 0x8093, + GL_V2F = 0x2A20, + GL_V3F = 0x2A21, + GL_C4UB_V2F = 0x2A22, + GL_C4UB_V3F = 0x2A23, + GL_C3F_V3F = 0x2A24, + GL_N3F_V3F = 0x2A25, + GL_C4F_N3F_V3F = 0x2A26, + GL_T2F_V3F = 0x2A27, + GL_T4F_V4F = 0x2A28, + GL_T2F_C4UB_V3F = 0x2A29, + GL_T2F_C3F_V3F = 0x2A2A, + GL_T2F_N3F_V3F = 0x2A2B, + GL_T2F_C4F_N3F_V3F = 0x2A2C, + GL_T4F_C4F_N3F_V4F = 0x2A2D, + + /* Matrix Mode */ + GL_MATRIX_MODE = 0x0BA0, + GL_MODELVIEW = 0x1700, + GL_PROJECTION = 0x1701, + GL_TEXTURE = 0x1702, + + /* Points */ + GL_POINT_SMOOTH = 0x0B10, + GL_POINT_SIZE = 0x0B11, + GL_POINT_SIZE_GRANULARITY = 0x0B13, + GL_POINT_SIZE_RANGE = 0x0B12, + + /* Lines */ + GL_LINE_SMOOTH = 0x0B20, + GL_LINE_STIPPLE = 0x0B24, + GL_LINE_STIPPLE_PATTERN = 0x0B25, + GL_LINE_STIPPLE_REPEAT = 0x0B26, + GL_LINE_WIDTH = 0x0B21, + GL_LINE_WIDTH_GRANULARITY = 0x0B23, + GL_LINE_WIDTH_RANGE = 0x0B22, + + /* Polygons */ + GL_POINT = 0x1B00, + GL_LINE = 0x1B01, + GL_FILL = 0x1B02, + GL_CCW = 0x0901, + GL_CW = 0x0900, + GL_FRONT = 0x0404, + GL_BACK = 0x0405, + GL_CULL_FACE = 0x0B44, + GL_CULL_FACE_MODE = 0x0B45, + GL_POLYGON_SMOOTH = 0x0B41, + GL_POLYGON_STIPPLE = 0x0B42, + GL_FRONT_FACE = 0x0B46, + GL_POLYGON_MODE = 0x0B40, + GL_POLYGON_OFFSET_FACTOR = 0x3038, + GL_POLYGON_OFFSET_UNITS = 0x2A00, + GL_POLYGON_OFFSET_POINT = 0x2A01, + GL_POLYGON_OFFSET_LINE = 0x2A02, + GL_POLYGON_OFFSET_FILL = 0x8037, + + /* Display Lists */ + GL_COMPILE = 0x1300, + GL_COMPILE_AND_EXECUTE = 0x1301, + GL_LIST_BASE = 0x0B32, + GL_LIST_INDEX = 0x0B33, + GL_LIST_MODE = 0x0B30, + + /* Depth buffer */ + GL_NEVER = 0x0200, + GL_LESS = 0x0201, + GL_GEQUAL = 0x0206, + GL_LEQUAL = 0x0203, + GL_GREATER = 0x0204, + GL_NOTEQUAL = 0x0205, + GL_EQUAL = 0x0202, + GL_ALWAYS = 0x0207, + GL_DEPTH_TEST = 0x0B71, + GL_DEPTH_BITS = 0x0D56, + GL_DEPTH_CLEAR_VALUE = 0x0B73, + GL_DEPTH_FUNC = 0x0B74, + GL_DEPTH_RANGE = 0x0B70, + GL_DEPTH_WRITEMASK = 0x0B72, + GL_DEPTH_COMPONENT = 0x1902, + + /* Lighting */ + GL_LIGHTING = 0x0B50, + GL_LIGHT0 = 0x4000, + GL_LIGHT1 = 0x4001, + GL_LIGHT2 = 0x4002, + GL_LIGHT3 = 0x4003, + GL_LIGHT4 = 0x4004, + GL_LIGHT5 = 0x4005, + GL_LIGHT6 = 0x4006, + GL_LIGHT7 = 0x4007, + GL_SPOT_EXPONENT = 0x1205, + GL_SPOT_CUTOFF = 0x1206, + GL_CONSTANT_ATTENUATION = 0x1207, + GL_LINEAR_ATTENUATION = 0x1208, + GL_QUADRATIC_ATTENUATION = 0x1209, + GL_AMBIENT = 0x1200, + GL_DIFFUSE = 0x1201, + GL_SPECULAR = 0x1202, + GL_SHININESS = 0x1601, + GL_EMISSION = 0x1600, + GL_POSITION = 0x1203, + GL_SPOT_DIRECTION = 0x1204, + GL_AMBIENT_AND_DIFFUSE = 0x1602, + GL_COLOR_INDEXES = 0x1603, + GL_LIGHT_MODEL_TWO_SIDE = 0x0B52, + GL_LIGHT_MODEL_LOCAL_VIEWER = 0x0B51, + GL_LIGHT_MODEL_AMBIENT = 0x0B53, + GL_FRONT_AND_BACK = 0x0408, + GL_SHADE_MODEL = 0x0B54, + GL_FLAT = 0x1D00, + GL_SMOOTH = 0x1D01, + GL_COLOR_MATERIAL = 0x0B57, + GL_COLOR_MATERIAL_FACE = 0x0B55, + GL_COLOR_MATERIAL_PARAMETER = 0x0B56, + GL_NORMALIZE = 0x0BA1, + + /* User clipping planes */ + GL_CLIP_PLANE0 = 0x3000, + GL_CLIP_PLANE1 = 0x3001, + GL_CLIP_PLANE2 = 0x3002, + GL_CLIP_PLANE3 = 0x3003, + GL_CLIP_PLANE4 = 0x3004, + GL_CLIP_PLANE5 = 0x3005, + + /* Accumulation buffer */ + GL_ACCUM_RED_BITS = 0x0D58, + GL_ACCUM_GREEN_BITS = 0x0D59, + GL_ACCUM_BLUE_BITS = 0x0D5A, + GL_ACCUM_ALPHA_BITS = 0x0D5B, + GL_ACCUM_CLEAR_VALUE = 0x0B80, + GL_ACCUM = 0x0100, + GL_ADD = 0x0104, + GL_LOAD = 0x0101, + GL_MULT = 0x0103, + GL_RETURN = 0x0102, + + /* Alpha testing */ + GL_ALPHA_TEST = 0x0BC0, + GL_ALPHA_TEST_REF = 0x0BC2, + GL_ALPHA_TEST_FUNC = 0x0BC1, + + /* Blending */ + GL_BLEND = 0x0BE2, + GL_BLEND_SRC = 0x0BE1, + GL_BLEND_DST = 0x0BE0, + GL_ZERO = 0, + GL_ONE = 1, + GL_SRC_COLOR = 0x0300, + GL_ONE_MINUS_SRC_COLOR = 0x0301, + GL_DST_COLOR = 0x0306, + GL_ONE_MINUS_DST_COLOR = 0x0307, + GL_SRC_ALPHA = 0x0302, + GL_ONE_MINUS_SRC_ALPHA = 0x0303, + GL_DST_ALPHA = 0x0304, + GL_ONE_MINUS_DST_ALPHA = 0x0305, + GL_SRC_ALPHA_SATURATE = 0x0308, + GL_CONSTANT_COLOR = 0x8001, + GL_ONE_MINUS_CONSTANT_COLOR = 0x8002, + GL_CONSTANT_ALPHA = 0x8003, + GL_ONE_MINUS_CONSTANT_ALPHA = 0x8004, + + /* Render Mode */ + GL_FEEDBACK = 0x1C01, + GL_RENDER = 0x1C00, + GL_SELECT = 0x1C02, + + /* Feedback */ + GL_2D = 0x0600, + GL_3D = 0x0601, + GL_3D_COLOR = 0x0602, + GL_3D_COLOR_TEXTURE = 0x0603, + GL_4D_COLOR_TEXTURE = 0x0604, + GL_POINT_TOKEN = 0x0701, + GL_LINE_TOKEN = 0x0702, + GL_LINE_RESET_TOKEN = 0x0707, + GL_POLYGON_TOKEN = 0x0703, + GL_BITMAP_TOKEN = 0x0704, + GL_DRAW_PIXEL_TOKEN = 0x0705, + GL_COPY_PIXEL_TOKEN = 0x0706, + GL_PASS_THROUGH_TOKEN = 0x0700, + + /* Fog */ + GL_FOG = 0x0B60, + GL_FOG_MODE = 0x0B65, + GL_FOG_DENSITY = 0x0B62, + GL_FOG_COLOR = 0x0B66, + GL_FOG_INDEX = 0x0B61, + GL_FOG_START = 0x0B63, + GL_FOG_END = 0x0B64, + GL_LINEAR = 0x2601, + GL_EXP = 0x0800, + GL_EXP2 = 0x0801, + + /* Logic Ops */ + GL_LOGIC_OP = 0x0BF1, + GL_LOGIC_OP_MODE = 0x0BF0, + GL_CLEAR = 0x1500, + GL_SET = 0x150F, + GL_COPY = 0x1503, + GL_COPY_INVERTED = 0x150C, + GL_NOOP = 0x1505, + GL_INVERT = 0x150A, + GL_AND = 0x1501, + GL_NAND = 0x150E, + GL_OR = 0x1507, + GL_NOR = 0x1508, + GL_XOR = 0x1506, + GL_EQUIV = 0x1509, + GL_AND_REVERSE = 0x1502, + GL_AND_INVERTED = 0x1504, + GL_OR_REVERSE = 0x150B, + GL_OR_INVERTED = 0x150D, + + /* Stencil */ + GL_STENCIL_TEST = 0x0B90, + GL_STENCIL_WRITEMASK = 0x0B98, + GL_STENCIL_BITS = 0x0D57, + GL_STENCIL_FUNC = 0x0B92, + GL_STENCIL_VALUE_MASK = 0x0B93, + GL_STENCIL_REF = 0x0B97, + GL_STENCIL_FAIL = 0x0B94, + GL_STENCIL_PASS_DEPTH_PASS = 0x0B96, + GL_STENCIL_PASS_DEPTH_FAIL = 0x0B95, + GL_STENCIL_CLEAR_VALUE = 0x0B91, + GL_STENCIL_INDEX = 0x1901, + GL_KEEP = 0x1E00, + GL_REPLACE = 0x1E01, + GL_INCR = 0x1E02, + GL_DECR = 0x1E03, + + /* Buffers, Pixel Drawing/Reading */ + GL_NONE = 0, + GL_LEFT = 0x0406, + GL_RIGHT = 0x0407, + /*GL_FRONT = 0x0404, */ + /*GL_BACK = 0x0405, */ + /*GL_FRONT_AND_BACK = 0x0408, */ + GL_FRONT_LEFT = 0x0400, + GL_FRONT_RIGHT = 0x0401, + GL_BACK_LEFT = 0x0402, + GL_BACK_RIGHT = 0x0403, + GL_AUX0 = 0x0409, + GL_AUX1 = 0x040A, + GL_AUX2 = 0x040B, + GL_AUX3 = 0x040C, + GL_COLOR_INDEX = 0x1900, + GL_RED = 0x1903, + GL_GREEN = 0x1904, + GL_BLUE = 0x1905, + GL_ALPHA = 0x1906, + GL_LUMINANCE = 0x1909, + GL_LUMINANCE_ALPHA = 0x190A, + GL_ALPHA_BITS = 0x0D55, + GL_RED_BITS = 0x0D52, + GL_GREEN_BITS = 0x0D53, + GL_BLUE_BITS = 0x0D54, + GL_INDEX_BITS = 0x0D51, + GL_SUBPIXEL_BITS = 0x0D50, + GL_AUX_BUFFERS = 0x0C00, + GL_READ_BUFFER = 0x0C02, + GL_DRAW_BUFFER = 0x0C01, + GL_DOUBLEBUFFER = 0x0C32, + GL_STEREO = 0x0C33, + GL_BITMAP = 0x1A00, + GL_COLOR = 0x1800, + GL_DEPTH = 0x1801, + GL_STENCIL = 0x1802, + GL_DITHER = 0x0BD0, + GL_RGB = 0x1907, + GL_RGBA = 0x1908, + + /* Implementation limits */ + GL_MAX_LIST_NESTING = 0x0B31, + GL_MAX_ATTRIB_STACK_DEPTH = 0x0D35, + GL_MAX_MODELVIEW_STACK_DEPTH = 0x0D36, + GL_MAX_NAME_STACK_DEPTH = 0x0D37, + GL_MAX_PROJECTION_STACK_DEPTH = 0x0D38, + GL_MAX_TEXTURE_STACK_DEPTH = 0x0D39, + GL_MAX_EVAL_ORDER = 0x0D30, + GL_MAX_LIGHTS = 0x0D31, + GL_MAX_CLIP_PLANES = 0x0D32, + GL_MAX_TEXTURE_SIZE = 0x0D33, + GL_MAX_PIXEL_MAP_TABLE = 0x0D34, + GL_MAX_VIEWPORT_DIMS = 0x0D3A, + GL_MAX_CLIENT_ATTRIB_STACK_DEPTH= 0x0D3B, + + /* Gets */ + GL_ATTRIB_STACK_DEPTH = 0x0BB0, + GL_COLOR_CLEAR_VALUE = 0x0C22, + GL_COLOR_WRITEMASK = 0x0C23, + GL_CURRENT_INDEX = 0x0B01, + GL_CURRENT_COLOR = 0x0B00, + GL_CURRENT_NORMAL = 0x0B02, + GL_CURRENT_RASTER_COLOR = 0x0B04, + GL_CURRENT_RASTER_DISTANCE = 0x0B09, + GL_CURRENT_RASTER_INDEX = 0x0B05, + GL_CURRENT_RASTER_POSITION = 0x0B07, + GL_CURRENT_RASTER_TEXTURE_COORDS = 0x0B06, + GL_CURRENT_RASTER_POSITION_VALID = 0x0B08, + GL_CURRENT_TEXTURE_COORDS = 0x0B03, + GL_INDEX_CLEAR_VALUE = 0x0C20, + GL_INDEX_MODE = 0x0C30, + GL_INDEX_WRITEMASK = 0x0C21, + GL_MODELVIEW_MATRIX = 0x0BA6, + GL_MODELVIEW_STACK_DEPTH = 0x0BA3, + GL_NAME_STACK_DEPTH = 0x0D70, + GL_PROJECTION_MATRIX = 0x0BA7, + GL_PROJECTION_STACK_DEPTH = 0x0BA4, + GL_RENDER_MODE = 0x0C40, + GL_RGBA_MODE = 0x0C31, + GL_TEXTURE_MATRIX = 0x0BA8, + GL_TEXTURE_STACK_DEPTH = 0x0BA5, + GL_VIEWPORT = 0x0BA2, + + + /* Evaluators */ + GL_AUTO_NORMAL = 0x0D80, + GL_MAP1_COLOR_4 = 0x0D90, + GL_MAP1_GRID_DOMAIN = 0x0DD0, + GL_MAP1_GRID_SEGMENTS = 0x0DD1, + GL_MAP1_INDEX = 0x0D91, + GL_MAP1_NORMAL = 0x0D92, + GL_MAP1_TEXTURE_COORD_1 = 0x0D93, + GL_MAP1_TEXTURE_COORD_2 = 0x0D94, + GL_MAP1_TEXTURE_COORD_3 = 0x0D95, + GL_MAP1_TEXTURE_COORD_4 = 0x0D96, + GL_MAP1_VERTEX_3 = 0x0D97, + GL_MAP1_VERTEX_4 = 0x0D98, + GL_MAP2_COLOR_4 = 0x0DB0, + GL_MAP2_GRID_DOMAIN = 0x0DD2, + GL_MAP2_GRID_SEGMENTS = 0x0DD3, + GL_MAP2_INDEX = 0x0DB1, + GL_MAP2_NORMAL = 0x0DB2, + GL_MAP2_TEXTURE_COORD_1 = 0x0DB3, + GL_MAP2_TEXTURE_COORD_2 = 0x0DB4, + GL_MAP2_TEXTURE_COORD_3 = 0x0DB5, + GL_MAP2_TEXTURE_COORD_4 = 0x0DB6, + GL_MAP2_VERTEX_3 = 0x0DB7, + GL_MAP2_VERTEX_4 = 0x0DB8, + GL_COEFF = 0x0A00, + GL_DOMAIN = 0x0A02, + GL_ORDER = 0x0A01, + + /* Hints */ + GL_FOG_HINT = 0x0C54, + GL_LINE_SMOOTH_HINT = 0x0C52, + GL_PERSPECTIVE_CORRECTION_HINT = 0x0C50, + GL_POINT_SMOOTH_HINT = 0x0C51, + GL_POLYGON_SMOOTH_HINT = 0x0C53, + GL_DONT_CARE = 0x1100, + GL_FASTEST = 0x1101, + GL_NICEST = 0x1102, + + /* Scissor box */ + GL_SCISSOR_TEST = 0x0C11, + GL_SCISSOR_BOX = 0x0C10, + + /* Pixel Mode / Transfer */ + GL_MAP_COLOR = 0x0D10, + GL_MAP_STENCIL = 0x0D11, + GL_INDEX_SHIFT = 0x0D12, + GL_INDEX_OFFSET = 0x0D13, + GL_RED_SCALE = 0x0D14, + GL_RED_BIAS = 0x0D15, + GL_GREEN_SCALE = 0x0D18, + GL_GREEN_BIAS = 0x0D19, + GL_BLUE_SCALE = 0x0D1A, + GL_BLUE_BIAS = 0x0D1B, + GL_ALPHA_SCALE = 0x0D1C, + GL_ALPHA_BIAS = 0x0D1D, + GL_DEPTH_SCALE = 0x0D1E, + GL_DEPTH_BIAS = 0x0D1F, + GL_PIXEL_MAP_S_TO_S_SIZE = 0x0CB1, + GL_PIXEL_MAP_I_TO_I_SIZE = 0x0CB0, + GL_PIXEL_MAP_I_TO_R_SIZE = 0x0CB2, + GL_PIXEL_MAP_I_TO_G_SIZE = 0x0CB3, + GL_PIXEL_MAP_I_TO_B_SIZE = 0x0CB4, + GL_PIXEL_MAP_I_TO_A_SIZE = 0x0CB5, + GL_PIXEL_MAP_R_TO_R_SIZE = 0x0CB6, + GL_PIXEL_MAP_G_TO_G_SIZE = 0x0CB7, + GL_PIXEL_MAP_B_TO_B_SIZE = 0x0CB8, + GL_PIXEL_MAP_A_TO_A_SIZE = 0x0CB9, + GL_PIXEL_MAP_S_TO_S = 0x0C71, + GL_PIXEL_MAP_I_TO_I = 0x0C70, + GL_PIXEL_MAP_I_TO_R = 0x0C72, + GL_PIXEL_MAP_I_TO_G = 0x0C73, + GL_PIXEL_MAP_I_TO_B = 0x0C74, + GL_PIXEL_MAP_I_TO_A = 0x0C75, + GL_PIXEL_MAP_R_TO_R = 0x0C76, + GL_PIXEL_MAP_G_TO_G = 0x0C77, + GL_PIXEL_MAP_B_TO_B = 0x0C78, + GL_PIXEL_MAP_A_TO_A = 0x0C79, + GL_PACK_ALIGNMENT = 0x0D05, + GL_PACK_LSB_FIRST = 0x0D01, + GL_PACK_ROW_LENGTH = 0x0D02, + GL_PACK_SKIP_PIXELS = 0x0D04, + GL_PACK_SKIP_ROWS = 0x0D03, + GL_PACK_SWAP_BYTES = 0x0D00, + GL_UNPACK_ALIGNMENT = 0x0CF5, + GL_UNPACK_LSB_FIRST = 0x0CF1, + GL_UNPACK_ROW_LENGTH = 0x0CF2, + GL_UNPACK_SKIP_PIXELS = 0x0CF4, + GL_UNPACK_SKIP_ROWS = 0x0CF3, + GL_UNPACK_SWAP_BYTES = 0x0CF0, + GL_ZOOM_X = 0x0D16, + GL_ZOOM_Y = 0x0D17, + + /* Texture mapping */ + GL_TEXTURE_ENV = 0x2300, + GL_TEXTURE_ENV_MODE = 0x2200, + GL_TEXTURE_1D = 0x0DE0, + GL_TEXTURE_2D = 0x0DE1, + GL_TEXTURE_WRAP_S = 0x2802, + GL_TEXTURE_WRAP_T = 0x2803, + GL_TEXTURE_MAG_FILTER = 0x2800, + GL_TEXTURE_MIN_FILTER = 0x2801, + GL_TEXTURE_ENV_COLOR = 0x2201, + GL_TEXTURE_GEN_S = 0x0C60, + GL_TEXTURE_GEN_T = 0x0C61, + GL_TEXTURE_GEN_MODE = 0x2500, + GL_TEXTURE_BORDER_COLOR = 0x1004, + GL_TEXTURE_WIDTH = 0x1000, + GL_TEXTURE_HEIGHT = 0x1001, + GL_TEXTURE_BORDER = 0x1005, + GL_TEXTURE_COMPONENTS = 0x1003, + GL_NEAREST_MIPMAP_NEAREST = 0x2700, + GL_NEAREST_MIPMAP_LINEAR = 0x2702, + GL_LINEAR_MIPMAP_NEAREST = 0x2701, + GL_LINEAR_MIPMAP_LINEAR = 0x2703, + GL_OBJECT_LINEAR = 0x2401, + GL_OBJECT_PLANE = 0x2501, + GL_EYE_LINEAR = 0x2400, + GL_EYE_PLANE = 0x2502, + GL_SPHERE_MAP = 0x2402, + GL_DECAL = 0x2101, + GL_MODULATE = 0x2100, + GL_NEAREST = 0x2600, + GL_REPEAT = 0x2901, + GL_CLAMP = 0x2900, + GL_S = 0x2000, + GL_T = 0x2001, + GL_R = 0x2002, + GL_Q = 0x2003, + GL_TEXTURE_GEN_R = 0x0C62, + GL_TEXTURE_GEN_Q = 0x0C63, + + GL_PROXY_TEXTURE_1D = 0x8063, + GL_PROXY_TEXTURE_2D = 0x8064, + GL_TEXTURE_PRIORITY = 0x8066, + GL_TEXTURE_RESIDENT = 0x8067, + GL_TEXTURE_1D_BINDING = 0x8068, + GL_TEXTURE_2D_BINDING = 0x8069, + + /* Internal texture formats */ + GL_ALPHA4 = 0x803B, + GL_ALPHA8 = 0x803C, + GL_ALPHA12 = 0x803D, + GL_ALPHA16 = 0x803E, + GL_LUMINANCE4 = 0x803F, + GL_LUMINANCE8 = 0x8040, + GL_LUMINANCE12 = 0x8041, + GL_LUMINANCE16 = 0x8042, + GL_LUMINANCE4_ALPHA4 = 0x8043, + GL_LUMINANCE6_ALPHA2 = 0x8044, + GL_LUMINANCE8_ALPHA8 = 0x8045, + GL_LUMINANCE12_ALPHA4 = 0x8046, + GL_LUMINANCE12_ALPHA12 = 0x8047, + GL_LUMINANCE16_ALPHA16 = 0x8048, + GL_INTENSITY = 0x8049, + GL_INTENSITY4 = 0x804A, + GL_INTENSITY8 = 0x804B, + GL_INTENSITY12 = 0x804C, + GL_INTENSITY16 = 0x804D, + GL_R3_G3_B2 = 0x2A10, + GL_RGB4 = 0x804F, + GL_RGB5 = 0x8050, + GL_RGB8 = 0x8051, + GL_RGB10 = 0x8052, + GL_RGB12 = 0x8053, + GL_RGB16 = 0x8054, + GL_RGBA2 = 0x8055, + GL_RGBA4 = 0x8056, + GL_RGB5_A1 = 0x8057, + GL_RGBA8 = 0x8058, + GL_RGB10_A2 = 0x8059, + GL_RGBA12 = 0x805A, + GL_RGBA16 = 0x805B, + + /* Utility */ + GL_VENDOR = 0x1F00, + GL_RENDERER = 0x1F01, + GL_VERSION = 0x1F02, + GL_EXTENSIONS = 0x1F03, + + /* Errors */ + GL_INVALID_VALUE = 0x0501, + GL_INVALID_ENUM = 0x0500, + GL_INVALID_OPERATION = 0x0502, + GL_STACK_OVERFLOW = 0x0503, + GL_STACK_UNDERFLOW = 0x0504, + GL_OUT_OF_MEMORY = 0x0505, + + /* + * 1.0 Extensions + */ + /* GL_EXT_blend_minmax and GL_EXT_blend_color */ + GL_CONSTANT_COLOR_EXT = 0x8001, + GL_ONE_MINUS_CONSTANT_COLOR_EXT = 0x8002, + GL_CONSTANT_ALPHA_EXT = 0x8003, + GL_ONE_MINUS_CONSTANT_ALPHA_EXT = 0x8004, + GL_BLEND_EQUATION_EXT = 0x8009, + GL_MIN_EXT = 0x8007, + GL_MAX_EXT = 0x8008, + GL_FUNC_ADD_EXT = 0x8006, + GL_FUNC_SUBTRACT_EXT = 0x800A, + GL_FUNC_REVERSE_SUBTRACT_EXT = 0x800B, + GL_BLEND_COLOR_EXT = 0x8005, + + /* GL_EXT_polygon_offset */ + GL_POLYGON_OFFSET_EXT = 0x8037, + GL_POLYGON_OFFSET_FACTOR_EXT = 0x8038, + GL_POLYGON_OFFSET_BIAS_EXT = 0x8039, + + /* GL_EXT_vertex_array */ + GL_VERTEX_ARRAY_EXT = 0x8074, + GL_NORMAL_ARRAY_EXT = 0x8075, + GL_COLOR_ARRAY_EXT = 0x8076, + GL_INDEX_ARRAY_EXT = 0x8077, + GL_TEXTURE_COORD_ARRAY_EXT = 0x8078, + GL_EDGE_FLAG_ARRAY_EXT = 0x8079, + GL_VERTEX_ARRAY_SIZE_EXT = 0x807A, + GL_VERTEX_ARRAY_TYPE_EXT = 0x807B, + GL_VERTEX_ARRAY_STRIDE_EXT = 0x807C, + GL_VERTEX_ARRAY_COUNT_EXT = 0x807D, + GL_NORMAL_ARRAY_TYPE_EXT = 0x807E, + GL_NORMAL_ARRAY_STRIDE_EXT = 0x807F, + GL_NORMAL_ARRAY_COUNT_EXT = 0x8080, + GL_COLOR_ARRAY_SIZE_EXT = 0x8081, + GL_COLOR_ARRAY_TYPE_EXT = 0x8082, + GL_COLOR_ARRAY_STRIDE_EXT = 0x8083, + GL_COLOR_ARRAY_COUNT_EXT = 0x8084, + GL_INDEX_ARRAY_TYPE_EXT = 0x8085, + GL_INDEX_ARRAY_STRIDE_EXT = 0x8086, + GL_INDEX_ARRAY_COUNT_EXT = 0x8087, + GL_TEXTURE_COORD_ARRAY_SIZE_EXT = 0x8088, + GL_TEXTURE_COORD_ARRAY_TYPE_EXT = 0x8089, + GL_TEXTURE_COORD_ARRAY_STRIDE_EXT= 0x808A, + GL_TEXTURE_COORD_ARRAY_COUNT_EXT= 0x808B, + GL_EDGE_FLAG_ARRAY_STRIDE_EXT = 0x808C, + GL_EDGE_FLAG_ARRAY_COUNT_EXT = 0x808D, + GL_VERTEX_ARRAY_POINTER_EXT = 0x808E, + GL_NORMAL_ARRAY_POINTER_EXT = 0x808F, + GL_COLOR_ARRAY_POINTER_EXT = 0x8090, + GL_INDEX_ARRAY_POINTER_EXT = 0x8091, + GL_TEXTURE_COORD_ARRAY_POINTER_EXT= 0x8092, + GL_EDGE_FLAG_ARRAY_POINTER_EXT = 0x8093 + +}; + +enum { + GL_CURRENT_BIT = 0x00000001, + GL_POINT_BIT = 0x00000002, + GL_LINE_BIT = 0x00000004, + GL_POLYGON_BIT = 0x00000008, + GL_POLYGON_STIPPLE_BIT = 0x00000010, + GL_PIXEL_MODE_BIT = 0x00000020, + GL_LIGHTING_BIT = 0x00000040, + GL_FOG_BIT = 0x00000080, + GL_DEPTH_BUFFER_BIT = 0x00000100, + GL_ACCUM_BUFFER_BIT = 0x00000200, + GL_STENCIL_BUFFER_BIT = 0x00000400, + GL_VIEWPORT_BIT = 0x00000800, + GL_TRANSFORM_BIT = 0x00001000, + GL_ENABLE_BIT = 0x00002000, + GL_COLOR_BUFFER_BIT = 0x00004000, + GL_HINT_BIT = 0x00008000, + GL_EVAL_BIT = 0x00010000, + GL_LIST_BIT = 0x00020000, + GL_TEXTURE_BIT = 0x00040000, + GL_SCISSOR_BIT = 0x00080000, + GL_ALL_ATTRIB_BITS = 0x000fffff +}; + +/* some types */ + +typedef int GLenum; +typedef void GLvoid; +typedef unsigned char GLboolean; +typedef signed char GLbyte; /* 1-byte signed */ +typedef short GLshort; /* 2-byte signed */ +typedef int GLint; /* 4-byte signed */ +typedef unsigned char GLubyte; /* 1-byte unsigned */ +typedef unsigned short GLushort; /* 2-byte unsigned */ +typedef unsigned int GLuint; /* 4-byte unsigned */ +typedef float GLfloat; /* single precision float */ +typedef double GLdouble; /* double precision float */ +typedef int GLsizei; + +/* functions */ + +void glEnable(int code); +void glDisable(int code); + +void glShadeModel(int mode); +void glCullFace(int mode); +void glPolygonMode(int face,int mode); + +void glBegin(int type); +void glEnd(void); + +#define PROTO_GL1(name) \ +void gl ## name ## 1f(float); \ +void gl ## name ## 1d(double); \ +void gl ## name ## 1fv(float *); \ +void gl ## name ## 1dv(double *); + +#define PROTO_GL2(name) \ +void gl ## name ## 2f(float ,float); \ +void gl ## name ## 2d(double ,double); \ +void gl ## name ## 2fv(float *); \ +void gl ## name ## 2dv(double *); + +#define PROTO_GL3(name) \ +void gl ## name ## 3f(float ,float ,float); \ +void gl ## name ## 3d(double ,double ,double); \ +void gl ## name ## 3fv(float *); \ +void gl ## name ## 3dv(double *); + +#define PROTO_GL4(name) \ +void gl ## name ## 4f(float ,float ,float, float ); \ +void gl ## name ## 4d(double ,double ,double, double ); \ +void gl ## name ## 4fv(float *); \ +void gl ## name ## 4dv(double *); + +PROTO_GL2(Vertex) +PROTO_GL3(Vertex) +PROTO_GL4(Vertex) + +PROTO_GL3(Color) +PROTO_GL4(Color) + +PROTO_GL3(Normal) + +PROTO_GL1(TexCoord) +PROTO_GL2(TexCoord) +PROTO_GL3(TexCoord) +PROTO_GL4(TexCoord) + +void glEdgeFlag(int flag); + +/* matrix */ +void glMatrixMode(int mode); +void glLoadMatrixf(const float *m); +void glLoadIdentity(void); +void glMultMatrixf(const float *m); +void glPushMatrix(void); +void glPopMatrix(void); +void glRotatef(float angle,float x,float y,float z); +void glTranslatef(float x,float y,float z); +void glScalef(float x,float y,float z); + +void glViewport(int x,int y,int width,int height); +void glFrustum(double left,double right,double bottom,double top, + double near_,double far_); + +/* lists */ +unsigned int glGenLists(int range); +int glIsList(unsigned int list); +void glNewList(unsigned int list,int mode); +void glEndList(void); +void glCallList(unsigned int list); + +/* clear */ +void glClear(int mask); +void glClearColor(float r,float g,float b,float a); +void glClearDepth(double depth); + +/* selection */ +int glRenderMode(int mode); +void glSelectBuffer(int size,unsigned int *buf); + +void glInitNames(void); +void glPushName(unsigned int name); +void glPopName(void); +void glLoadName(unsigned int name); + +/* textures */ +void glGenTextures(int n, unsigned int *textures); +void glDeleteTextures(int n, const unsigned int *textures); +void glBindTexture(int target,int texture); +void glTexImage2D( int target, int level, int components, + int width, int height, int border, + int format, int type, void *pixels); +void glTexEnvi(int target,int pname,int param); +void glTexParameteri(int target,int pname,int param); +void glPixelStorei(int pname,int param); + +/* lighting */ + +void glMaterialfv(int mode,int type,float *v); +void glMaterialf(int mode,int type,float v); +void glColorMaterial(int mode,int type); + +void glLightfv(int light,int type,float *v); +void glLightf(int light,int type,float v); +void glLightModeli(int pname,int param); +void glLightModelfv(int pname,float *param); + +/* misc */ + +void glFlush(void); +void glHint(int target,int mode); +void glGetIntegerv(int pname,int *params); +void glGetFloatv(int pname, float *v); +void glFrontFace(int mode); + +/* opengl 1.2 arrays */ +void glEnableClientState(GLenum array); +void glDisableClientState(GLenum array); +void glArrayElement(GLint i); +void glVertexPointer(GLint size, GLenum type, GLsizei stride, + const GLvoid *pointer); +void glColorPointer(GLint size, GLenum type, GLsizei stride, + const GLvoid *pointer); +void glNormalPointer(GLenum type, GLsizei stride, + const GLvoid *pointer); +void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, + const GLvoid *pointer); + +/* opengl 1.2 polygon offset */ +void glPolygonOffset(GLfloat factor, GLfloat units); + +/* not implemented, just added to compile */ + /* +inline void glPointSize(float) {} +inline void glLineWidth(float) {} +inline void glDeleteLists(int, int) {} +inline void glDepthFunc(int) {} +inline void glBlendFunc(int, int) {} +inline void glTexEnvf(int, int, int) {} +inline void glOrtho(float,float,float,float,float,float){} +inline void glVertex2i(int,int) {} +inline void glDepthMask(int) {} +inline void glFogi(int, int) {} +inline void glFogfv(int, const float*) {} +inline void glFogf(int, float) {} +inline void glRasterPos2f(float, float) {} +inline void glPolygonStipple(void*) {} +inline void glTexParameterf(int, int, int) {}; + */ +/* non compatible functions */ + +void glDebug(int mode); + +void glInit(void *zbuffer); +void glClose(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/tinygl/glu.h b/programs/develop/ktcc/trunk/libc/include/tinygl/glu.h new file mode 100644 index 0000000000..81e847869c --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/tinygl/glu.h @@ -0,0 +1,44 @@ + +#ifndef GLU_H +#define GLU_H + +#ifdef __cplusplus +extern "C" { +#endif + +void gluPerspective( GLdouble fovy, GLdouble aspect, + GLdouble zNear, GLdouble zFar ); + +void +gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, + GLdouble centerx, GLdouble centery, GLdouble centerz, + GLdouble upx, GLdouble upy, GLdouble upz); + + +void drawTorus(float rc, int numc, float rt, int numt); + + + +typedef struct { + int draw_style; +} GLUquadricObj; + +#define GLU_LINE 0 + +GLUquadricObj* gluNewQuadric(void); +void gluQuadricDrawStyle(GLUquadricObj *obj, int style); + +void gluSphere(GLUquadricObj *qobj, + float radius,int slices,int stacks); +void gluCylinder( GLUquadricObj *qobj, + GLdouble baseRadius, GLdouble topRadius, GLdouble height, + GLint slices, GLint stacks ); +void gluDisk( GLUquadricObj *qobj, + GLdouble innerRadius, GLdouble outerRadius, + GLint slices, GLint loops ); + + +#ifdef __cplusplus +} +#endif +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/tinygl/kosgl.h b/programs/develop/ktcc/trunk/libc/include/tinygl/kosgl.h new file mode 100644 index 0000000000..ce192ec704 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/tinygl/kosgl.h @@ -0,0 +1,28 @@ +#ifndef KOSGL_H +#define KOSGL_H + +#include "gl.h" +#include "glu.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +typedef void *KOSGLContext; + +extern KOSGLContext kosglCreateContext( KOSGLContext shareList, int flags ); + +extern void kosglDestroyContext( KOSGLContext ctx1 ); + +extern int kosglMakeCurrent( int win_x0, int win_y0, + int win_x, int win_y, + KOSGLContext ctx); + +extern void kosglSwapBuffers(); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/programs/develop/ktcc/trunk/libc/include/varargs.h b/programs/develop/ktcc/trunk/libc/include/varargs.h new file mode 100644 index 0000000000..d614366edb --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/include/varargs.h @@ -0,0 +1,12 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ +#ifndef _VARARGS_H +#define _VARARGS_H + +#error "TinyCC no longer implements ." +#error "Revise your code to use ." + +#endif diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/_ksys_files_acces.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/_ksys_files_acces.asm new file mode 100644 index 0000000000..2c7c51a72e --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/_ksys_files_acces.asm @@ -0,0 +1,124 @@ +format ELF + +section '.text' executable + +include '../proc32.inc' +public _ksys_get_filesize +public _ksys_readfile +public _ksys_rewritefile +public _ksys_appendtofile + +align 4 +proc _ksys_get_filesize stdcall, filename:dword + + xor eax,eax + mov ebx,[filename] + mov [fileinfo.subproc],dword 5 + mov [fileinfo.offset_l],eax + mov [fileinfo.offset_h],eax + mov [fileinfo.size],eax + mov [fileinfo.data],dword buffer_for_info + mov [fileinfo.letter],al + mov [fileinfo.filename],ebx + + mov eax,70 + mov ebx,fileinfo + int 0x40 + + test eax,eax + jnz error_for_file_size + + mov eax,[buffer_for_info+32] ;file size + ret + + error_for_file_size: + neg eax + + ret +endp + + +align 4 +proc _ksys_readfile stdcall,filename:dword,position:dword,sizeblock:dword,buffer:dword, preadbytes:dword + + xor eax,eax + mov ebx,[position] + mov ecx,[sizeblock] + mov edx,[buffer] + mov esi,[filename] + mov [fileinfo.subproc],eax + mov [fileinfo.offset_l],ebx + mov [fileinfo.offset_h],eax + mov [fileinfo.size],ecx + mov [fileinfo.data],edx + mov [fileinfo.letter],al + mov [fileinfo.filename],esi + + mov eax,70 + mov ebx,fileinfo + int 0x40 + + mov esi, [preadbytes] + mov [esi], ebx + + ret +endp + +align 4 +proc _ksys_rewritefile stdcall,filename:dword,sizeblock:dword,data_write:dword + + xor eax,eax + mov ebx,[sizeblock] + mov ecx,[data_write] + mov edx,[filename] + mov [fileinfo.subproc],dword 2 + mov [fileinfo.offset_l],eax + mov [fileinfo.offset_h],eax + mov [fileinfo.size],ebx + mov [fileinfo.data],ecx + mov [fileinfo.letter],al + mov [fileinfo.filename],edx + + mov eax,70 + mov ebx,fileinfo + int 0x40 + + ret +endp + +align 4 +proc _ksys_appendtofile stdcall,filename:dword,pos:dword,sizeblock:dword,data_append:dword + + xor eax,eax + mov ebx,[pos] + mov ecx,[sizeblock] + mov edx,[data_append] + mov esi,[filename] + mov [fileinfo.subproc],dword 3 + mov [fileinfo.offset_l],ebx + mov [fileinfo.offset_h],eax + mov [fileinfo.size],ecx + mov [fileinfo.data],edx + mov [fileinfo.letter],al + mov [fileinfo.filename],esi + + mov eax,70 + mov ebx,fileinfo + int 0x40 + + ret +endp + +struc FILEIO +{ + .subproc rd 1 + .offset_l rd 1 + .offset_h rd 1 + .size rd 1 + .data rd 1 + .letter rb 1 + .filename rd 1 +} + +fileinfo FILEIO +buffer_for_info rd 11 diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/backgr.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/backgr.asm new file mode 100644 index 0000000000..c65ff0c581 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/backgr.asm @@ -0,0 +1,54 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_set_background_size,8 +;arg1 - xsize +;arg2 - ysize + push ebx + mov ecx,[esp+8] + mov edx,[esp+12] + mov eax,15 + mov ebx,1 + int 0x40 + pop ebx + ret 8 +public_stdcall _ksys_write_background_mem,8 +;arg1 - pos +;arg2 - color + push ebx + mov eax,15 + mov ebx,2 + mov ecx,[esp+8] + mov edx,[esp+12] + int 0x40 + pop ebx + ret 8 +public_stdcall _ksys_draw_background,0 + mov edx,ebx + mov eax,15 + mov ebx,3 + int 0x40 + mov ebx,edx + ret +public_stdcall _ksys_set_background_draw_type,4 +;arg1 - type + mov edx,ebx + mov eax,15 + mov ebx,4 + mov ecx,[esp+4] + int 0x40 + mov ebx,edx + ret 4 +public_stdcall _ksys_background_blockmove,12 +;arg1 - source +;arg2 - position in dest +;arg3 - size + push ebx esi + mov eax,15 + mov ebx,5 + mov ecx,[esp+12] + mov edx,[esp+16] + mov esi,[esp+20] + int 0x40 + pop esi ebx + ret 12 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/button.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/button.asm new file mode 100644 index 0000000000..e6baf0c8d3 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/button.asm @@ -0,0 +1,35 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_make_button,24 +;arg1 - x +;arg2 - y +;arg3 - xsize +;arg4 - ysize +;arg5 - id +;arg6 - color + push ebx esi + mov ebx,[esp+12] + shl ebx,16 + mov bx,[esp+20] + mov ecx,[esp+16] + shl ecx,16 + mov cx,[esp+24] + mov edx,[esp+28] + mov esi,[esp+32] + mov eax,8 + int 0x40 + pop esi ebx + ret 24 + +public_stdcall _ksys_get_button_id,0 + mov eax,17 + int 0x40 + test al,al + jnz .no_button + shr eax,8 + ret +.no_button: + xor eax,eax + dec eax + ret \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/clock.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/clock.asm new file mode 100644 index 0000000000..726852a650 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/clock.asm @@ -0,0 +1,15 @@ +format ELF + +include "../proc32.inc" + +section '.text' executable +public _ksys_get_system_clock + +align 4 +proc _ksys_get_system_clock stdcall + + mov eax,3 + int 0x40 + ret + +endp \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/cofflib.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/cofflib.asm new file mode 100644 index 0000000000..a4114fd1b0 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/cofflib.asm @@ -0,0 +1,76 @@ +format ELF +include '../proc32.inc' +section '.text' executable + +public _ksys_cofflib_load +public _ksys_cofflib_getproc + +proc _ksys_cofflib_load stdcall, name:dword + + mov eax, 68 + mov ebx, 19 + mov ecx, [name] + int 0x40 + ret +endp + +proc _ksys_cofflib_getproc stdcall, export:dword,name:dword + + mov ebx,[export] + + next_name_check: + + mov ecx,[ebx] + test ecx,ecx + jz end_export + + ;cmp export string with name + mov esi,[name] + xor edi,edi + next_simbol_check: + + xor eax,eax + mov al,[ecx] +; siemargl moved to post-check +; test al,al +; jz exit_check_simbol + + xor edx,edx + mov dl,[esi] + cmp al,dl + je simbols_equvalent + add edi,1 + jmp exit_check_simbol + simbols_equvalent: + test al,al + jz exit_check_simbol + + ;pushad + + ;mov cl,al + ;mov ebx,1 + ;mov eax,63 + ;int 0x40 + + ;popad + + add ecx,1 + add esi,1 + jmp next_simbol_check + exit_check_simbol: + + test edi,edi + jnz function_not_finded + mov eax,[ebx+4] + jmp end_export + function_not_finded: + + add ebx,8 + + jmp next_name_check + + end_export: + + ret +endp + diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/date.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/date.asm new file mode 100644 index 0000000000..96e0b5d1b7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/date.asm @@ -0,0 +1,7 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_get_date,0 + mov eax,29 + int 0x40 + ret \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/debug_board.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/debug_board.asm new file mode 100644 index 0000000000..9f27e6bd1b --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/debug_board.asm @@ -0,0 +1,56 @@ +format ELF + +include "../proc32.inc" + +section '.text' executable + +public _ksys_debug_out +public debug_out_str + +align 4 +proc _ksys_debug_out stdcall, c:dword + + pushad + + xor ecx,ecx + mov cl,byte[c] + mov ebx,1 + mov eax,63 + int 0x40 + + popad + + ret + +endp + +align 4 +proc debug_out_str stdcall, s:dword + + pushad + + mov eax,[s] ;eax=pointer to string + next_simbol_print: + + xor ebx,ebx + mov bl,[eax] + test bl,bl + jz exit_print_str + + cmp bl,10 + jne no_new_line + mov ecx,13 + stdcall _ksys_debug_out, ecx + no_new_line: + + stdcall _ksys_debug_out, ebx + add eax,1 + + jmp next_simbol_print + + exit_print_str: + + popad + + ret +endp diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/delay.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/delay.asm new file mode 100644 index 0000000000..b94fa14f04 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/delay.asm @@ -0,0 +1,11 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_delay,4 +;arg1 - time + mov edx,ebx + mov eax,5 + mov ebx,[esp+4] + int 0x40 + mov ebx,edx + ret 4 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/dga.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/dga.asm new file mode 100644 index 0000000000..87ae6ca273 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/dga.asm @@ -0,0 +1,34 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_dga_get_resolution,16 +;arg1 - *xres +;arg2 - *yres +;arg3 - *bpp +;arg4 - *bpscan + mov edx,ebx + + mov eax,61 + mov ebx,1 + int 0x40 + mov ebx,[esp+8] + mov [ebx],ax + mov word [ebx+2],0 + shr eax,16 + mov ebx,[esp+4] + mov [ebx],eax + + mov eax,61 + mov ebx,2 + int 0x40 + mov ebx,[esp+12] + mov [ebx],eax + + mov eax,61 + mov ebx,3 + int 0x40 + mov ebx,[esp+16] + mov [ebx],eax + + mov ebx,edx + ret 16 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/draw_bar.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/draw_bar.asm new file mode 100644 index 0000000000..9c9f73484b --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/draw_bar.asm @@ -0,0 +1,21 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_draw_bar,20 +;arg1 - x +;arg2 - y +;arg3 - xsize +;arg4 - ysize +;arg5 - color + push ebx + mov eax,13 + mov ebx,[esp+8] + shl ebx,16 + mov bx,[esp+16] + mov ecx,[esp+12] + shl ecx,16 + mov cx,[esp+20] + mov edx,[esp+24] + int 0x40 + pop ebx + ret 20 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/draw_image.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/draw_image.asm new file mode 100644 index 0000000000..5c3af8a078 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/draw_image.asm @@ -0,0 +1,21 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_putimage,20 +;arg1 - x +;arg2 - y +;arg3 - xsize +;arg4 - ysize +;arg5 - image + push ebx + mov ebx,[esp+24] + mov ecx,[esp+16] + shl ecx,16 + mov ecx,[esp+20] + mov ebx,[esp+8] + shl ebx,16 + mov ebx,[esp+12] + mov eax,7 + int 0x40 + pop ebx + ret 20 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/draw_window.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/draw_window.asm new file mode 100644 index 0000000000..ffbff79ba3 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/draw_window.asm @@ -0,0 +1,34 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_draw_window,36 +;arg1 - xcoord +;arg2 - ycoord +;arg3 - xsize +;arg4 - ysize +;arg5 - workcolor +;arg6 - type +;arg7 - captioncolor +;arg8 - windowtype +;arg9 - bordercolor + push ebp + mov ebp,esp + push ebx esi edi + mov ebx,[ebp+8] + shl ebx,16 + mov bx,[ebp+16] + mov ecx,[ebp+12] + shl ecx,16 + mov cx,[ebp+20] + mov edx,[ebp+28] + shl edx,24 + add edx,[ebp+24] + mov esi,[ebp+36] + shl esi,24 + add esi,[ebp+32] + mov edi,[ebp+40] + xor eax,eax + int 0x40 + pop edi esi ebx + pop ebp + ret 36 diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/event.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/event.asm new file mode 100644 index 0000000000..817f6d8c23 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/event.asm @@ -0,0 +1,40 @@ +format ELF + +section '.text' executable + +public _ksys_wait_for_event_infinite +public _ksys_check_for_event +public _ksys_wait_for_event +public _ksys_set_wanted_events + +_ksys_wait_for_event_infinite: + + mov eax,10 + int 0x40 + + ret + +_ksys_check_for_event: + + mov eax,11 + int 0x40 + + ret + +_ksys_wait_for_event: + +;arg1 - time + mov eax,23 + mov ebx,[esp+4] + int 0x40 + + ret 4 + +_ksys_set_wanted_events: + +;arg1 - flags + mov eax,40 + mov ebx,[esp+4] + int 0x40 + + ret 4 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/exit.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/exit.asm new file mode 100644 index 0000000000..0dc6def546 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/exit.asm @@ -0,0 +1,8 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_exit,0 + xor eax,eax + dec eax + int 0x40 +; ret \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/ipc.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/ipc.asm new file mode 100644 index 0000000000..309c2217b6 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/ipc.asm @@ -0,0 +1,28 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_send_message,12 +;arg1 - pid +;arg2 - msg +;arg3 - size + push ebx esi + mov eax,60 + mov ebx,2 + mov ecx,[esp+12] + mov edx,[esp+16] + mov esi,[esp+20] + int 0x40 + pop esi ebx + ret 12 + +public_stdcall _ksys_define_receive_area,8 +;arg1 - area +;arg2 - size + push ebx + mov eax,60 + mov ebx,1 + mov ecx,[esp+8] + mov edx,[esp+12] + int 0x40 + pop ebx + ret 8 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/irq.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/irq.asm new file mode 100644 index 0000000000..79fc761d8b --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/irq.asm @@ -0,0 +1,119 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_get_irq_owner,4 +;arg1 - irq + mov edx,ebx + mov eax,41 + mov ebx,[esp+4] + int 0x40 + mov ebx,edx + ret 4 + +public_stdcall _ksys_get_data_read_by_irq,12 +;arg1 - irq +;arg2 - *size +;arg3 - data + mov edx,ebx + mov eax,42 + mov ebx,[esp+4] + int 0x40 + cmp ecx,2 + jz .not_an_owner + push ecx + mov ecx,[esp+16] + test ecx,ecx + jz .ignore_data + mov [ecx],bl +.ignore_data: + mov ecx,[esp+12] + mov [ecx],eax + pop eax + mov ebx,edx + ret 12 +.not_an_owner: + mov eax,2 + mov ebx,edx + ret + +public_stdcall _ksys_send_data_to_device,8 +;arg1 - port +;arg2 - data + mov edx,ebx + mov eax,63 + mov ebx,[esp+8] + mov ecx,[esp+4] + int 0x40 + mov ebx,edx + ret 8 + +public_stdcall _ksys_receive_data_from_device,8 +;arg1 - port +;arg2 - data + mov edx,ebx + mov eax,43 + mov ecx,[esp+4] + add ecx,0x80000000 + int 0x40 + mov ecx,[esp+8] + mov [ecx],bl + mov ebx,edx + ret 8 + +public_stdcall _ksys_program_irq,8 +;arg1 - intrtable +;arg2 - irq + mov edx,ebx + mov eax,44 + mov ebx,[esp+4] + mov ecx,[esp+8] + int 0x40 + mov ebx,edx + ret 8 + +public_stdcall _ksys_reserve_irq,4 +;arg1 - irq + mov edx,ebx + mov eax,45 + xor ebx,ebx + mov ecx,[esp+4] + int 0x40 + mov ebx,edx + ret 4 + +public_stdcall _ksys_free_irq,4 +;arg1 - irq + mov edx,ebx + mov eax,45 + xor ebx,ebx + inc ebx + mov ecx,[esp+4] + int 0x40 + mov ebx,edx + ret 4 + +public_stdcall _ksys_reserve_port_area,8 +;arg1 - start +;arg2 - end + push ebx + mov eax,46 + xor ebx,ebx + mov ecx,[esp+8] + mov edx,[esp+12] + int 0x40 + pop ebx + ret 8 + +public_stdcall _ksys_free_port_area,8 +;arg1 - start +;arg2 - end + push ebx + mov eax,46 + xor ebx,ebx + inc ebx + mov ecx,[esp+8] + mov edx,[esp+12] + int 0x40 + pop ebx + ret 8 + \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/keyboard.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/keyboard.asm new file mode 100644 index 0000000000..8d9f13c6c3 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/keyboard.asm @@ -0,0 +1,29 @@ +format ELF + +include "../proc32.inc" + +section '.text' executable + +public _ksys_get_key +public _ksys_set_keyboard_mode + +align 4 +proc _ksys_get_key stdcall + + mov eax,2 + int 0x40 + ret + +endp + +align 4 +proc _ksys_set_keyboard_mode stdcall, mode:dword + + mov edx,ebx + mov eax,66 + xor ebx,ebx + inc ebx + mov ecx,[mode] + mov ebx,edx + ret +endp \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/line.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/line.asm new file mode 100644 index 0000000000..e776ad3698 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/line.asm @@ -0,0 +1,21 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_line,20 +;arg1 - x1 +;arg2 - y1 +;arg3 - x2 +;arg4 - y2 +;arg5 - color + push ebx + mov ebx,[esp+8] + shl ebx,16 + mov bx,[esp+16] + mov ecx,[esp+12] + shl ecx,16 + mov cx,[esp+20] + mov edx,[esp+24] + mov eax,38 + int 0x40 + pop ebx + ret 20 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/midi.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/midi.asm new file mode 100644 index 0000000000..80655e4cc8 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/midi.asm @@ -0,0 +1,21 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_midi_reset,0 + mov edx,ebx + mov eax,20 + xor ebx,ebx + inc ebx + int 0x40 + mov ebx,edx + ret + +public_stdcall _ksys_midi_send,4 +;arg1 - data + mov edx,ebx + mov eax,20 + mov ebx,2 + xor ecx,ecx + mov cl,[esp+4] + mov ebx,edx + ret 4 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/mouse.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/mouse.asm new file mode 100644 index 0000000000..f609b8c63c --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/mouse.asm @@ -0,0 +1,25 @@ + +format ELF + +section '.text' executable + +public _ksys_GetMouseXY +public _ksys_GetMouseButtonsState + +align 4 +_ksys_GetMouseXY: + + mov eax,37 + mov ebx,1 + int 0x40 + + ret + +align 4 +_ksys_GetMouseButtonsState: + + mov eax,37 + mov ebx,2 + int 0x40 + + ret diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/pci.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/pci.asm new file mode 100644 index 0000000000..6af5d0db59 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/pci.asm @@ -0,0 +1,138 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_get_pci_version,0 + mov edx,ebx + mov eax,62 + xor ebx,ebx + int 0x40 + movzx eax,ax + mov ebx,edx + ret + +public_stdcall _ksys_get_last_pci_bus,0 + mov edx,ebx + mov eax,62 + xor ebx,ebx + inc ebx + int 0x40 + movzx eax,al + mov ebx,edx + ret + +public_stdcall _ksys_get_pci_access_mechanism,0 + mov edx,ebx + mov eax,62 + mov ebx,2 + int 0x40 + movzx eax,al + mov ebx,edx + ret + +public_stdcall _ksys_pci_read_config_byte,16 +;arg1 - bus +;arg2 - dev +;arg3 - fn +;arg4 - reg + mov edx,ebx + mov eax,62 + mov bl,4 + mov bh,[esp+4] + mov ch,[esp+8] + shl ch,3 + add ch,[esp+12] + mov cl,[esp+16] + int 0x40 + mov ebx,edx + ret 16 + +public_stdcall _ksys_pci_read_config_word,16 +;arg1 - bus +;arg2 - dev +;arg3 - fn +;arg4 - reg + mov edx,ebx + mov eax,62 + mov bl,5 + mov bh,[esp+4] + mov ch,[esp+8] + shl ch,3 + add ch,[esp+12] + mov cl,[esp+16] + int 0x40 + mov ebx,edx + ret 16 + +public_stdcall _ksys_pci_read_config_dword,16 +;arg1 - bus +;arg2 - dev +;arg3 - fn +;arg4 - reg + mov edx,ebx + mov eax,62 + mov bl,6 + mov bh,[esp+4] + mov ch,[esp+8] + shl ch,3 + add ch,[esp+12] + mov cl,[esp+16] + int 0x40 + mov ebx,edx + ret 16 + +public_stdcall _ksys_pci_write_config_byte,20 +;arg1 - bus +;arg2 - dev +;arg3 - fn +;arg4 - reg +;arg5 - value + push ebx + mov eax,62 + mov bl,8 + mov bh,[esp+8] + mov ch,[esp+12] + shl ch,3 + mov ch,[esp+16] + mov cl,[esp+20] + movzx edx,byte [esp+24] + int 0x40 + pop ebx + ret 20 + +public_stdcall _ksys_pci_write_config_word,20 +;arg1 - bus +;arg2 - dev +;arg3 - fn +;arg4 - reg +;arg5 - value + push ebx + mov eax,62 + mov bl,9 + mov bh,[esp+8] + mov ch,[esp+12] + shl ch,3 + mov ch,[esp+16] + mov cl,[esp+20] + movzx edx,word [esp+24] + int 0x40 + pop ebx + ret 20 + +public_stdcall _ksys_pci_write_config_dword,20 +;arg1 - bus +;arg2 - dev +;arg3 - fn +;arg4 - reg +;arg5 - value + push ebx + mov eax,62 + mov bl,10 + mov bh,[esp+8] + mov ch,[esp+12] + shl ch,3 + mov ch,[esp+16] + mov cl,[esp+20] + mov edx,[esp+24] + int 0x40 + pop ebx + ret 20 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/pixel.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/pixel.asm new file mode 100644 index 0000000000..939bf32e00 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/pixel.asm @@ -0,0 +1,16 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_putpixel,12 +;arg1 - x +;arg2 - y +;arg3 - color + push ebx + xor eax,eax + mov ebx,[esp+8] + inc eax + mov ecx,[esp+12] + mov edx,[esp+16] + int 0x40 + pop ebx + ret 12 diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/process.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/process.asm new file mode 100644 index 0000000000..797a616ecb --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/process.asm @@ -0,0 +1,24 @@ +format ELF +;include "public_stdcall.inc" + +public _ksys_get_process_table +public _ksys_kill_process + +section '.text' executable + +_ksys_get_process_table: +;arg1 - pointer to information +;arg2 - pid + mov eax,9 + mov ebx,[esp+4] + mov ecx,[esp+8] + int 0x40 + ret 8 + +_ksys_kill_process: +;arg - pid + mov eax, 18 + mov ebx, 18 + mov ecx,[esp+4] + int 0x40 + ret 4 diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/screen.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/screen.asm new file mode 100644 index 0000000000..cec12f4e34 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/screen.asm @@ -0,0 +1,15 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_get_screen_size,8 +;arg1 - x +;arg2 - y + mov eax,14 + int 0x40 + mov ecx,[esp+8] + mov [ecx],ax + mov word [ecx+2],0 + shr eax,16 + mov ecx,[esp+4] + mov [ecx],eax + ret 8 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/skin.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/skin.asm new file mode 100644 index 0000000000..fc31bff852 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/skin.asm @@ -0,0 +1,13 @@ +format ELF + +section '.text' executable + +public _ksys_get_skin_height + +_ksys_get_skin_height: + + mov eax,48 + mov ebx,4 + int 0x40 + + ret \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/sound.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/sound.asm new file mode 100644 index 0000000000..2b6d4d7fc8 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/sound.asm @@ -0,0 +1,65 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_sound_load_block,4 +;arg1 - blockptr + mov edx,ebx + mov eax,55 + xor ebx,ebx + mov ecx,[esp+4] + int 0x40 + mov ebx,edx + ret 4 + +public_stdcall _ksys_sound_play_block,0 + mov edx,ebx + mov eax,55 + xor ebx,ebx + inc ebx + int 0x40 + mov ebx,edx + ret + +public_stdcall _ksys_sound_set_channels,4 +;arg1 - channels + push ebx + mov eax,55 + mov ebx,2 + xor ecx,ecx + mov edx,[esp+8] + int 0x40 + pop ebx + ret 4 + +public_stdcall _ksys_sound_set_data_size,4 +;arg1 - data size + push ebx + mov eax,55 + mov ebx,2 + xor ecx,ecx + inc ecx + mov edx,[esp+8] + int 0x40 + pop ebx + ret 4 + +public_stdcall _ksys_sound_set_frequency,4 +;arg1 - frequency + push ebx + mov eax,55 + mov ebx,2 + mov ecx,2 + mov edx,[esp+8] + int 0x40 + pop ebx + ret 4 + +public_stdcall _ksys_sound_speaker_play,4 +;arg1 - data + mov edx,ebx + mov eax,55 + mov ebx,55 + mov esi,[esp+4] + int 0x40 + mov ebx,edx + ret 4 diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/thread.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/thread.asm new file mode 100644 index 0000000000..ca744cd5ae --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/thread.asm @@ -0,0 +1,33 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +extrn sysmalloc +public_stdcall _ksys_start_thread,12 +;arg1 - proc +;arg2 - stacksize +;arg3 - pid + push dword [esp+8] + call sysmalloc + test eax,eax + jz .no_mem + push ebx + mov edx,eax + add edx,[esp+12] + mov [edx-4],dword 0 + mov ecx,[esp+8] + mov ebx,1 + mov eax,51 + int 0x40 + mov ebx,[esp+16] + test ebx,ebx + jz .no_val + mov [ebx],eax +.no_val: + mov eax,edx + sub eax,[esp+12] + pop ebx + ret 12 +.no_mem: + mov ecx,[esp+12] + mov [ecx],eax + ret 12 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/window_redraw.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/window_redraw.asm new file mode 100644 index 0000000000..226ed18585 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/window_redraw.asm @@ -0,0 +1,11 @@ +format ELF +include "public_stdcall.inc" +section '.text' executable +public_stdcall _ksys_window_redraw,4 +;arg1 - status + mov edx,ebx + mov eax,12 + mov ebx,[esp+4] + int 0x40 + mov ebx,edx + ret 4 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/kolibrisys/write_text.asm b/programs/develop/ktcc/trunk/libc/kolibrisys/write_text.asm new file mode 100644 index 0000000000..db97c6c4ab --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/kolibrisys/write_text.asm @@ -0,0 +1,21 @@ +format ELF +section '.text' executable +public _ksys_write_text + +_ksys_write_text: +;arg1 - x +;arg2 - y +;arg3 - color +;arg4 - text +;arg5 - len + + mov eax,4 + mov ebx,[esp+4] + shl ebx,16 + mov bx,[esp+8] + mov ecx,[esp+12] + mov edx,[esp+16] + mov esi,[esp+20] + int 0x40 + + ret 20 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/libgen/basename.c b/programs/develop/ktcc/trunk/libc/libgen/basename.c new file mode 100644 index 0000000000..03f9813f33 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/libgen/basename.c @@ -0,0 +1,23 @@ +/* Return the name-within-directory of a file name. + Copyright (C) 1996-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include + +char * +basename (const char *filename) +{ + char *p = strrchr (filename, '/'); + return p ? p + 1 : (char *) filename; +} diff --git a/programs/develop/ktcc/trunk/libc/libgen/dirname.c b/programs/develop/ktcc/trunk/libc/libgen/dirname.c new file mode 100644 index 0000000000..b889f7d0c6 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/libgen/dirname.c @@ -0,0 +1,67 @@ +/* dirname - return directory part of PATH. + Copyright (C) 1996-2019 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 1996. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include + +char * +dirname (char *path) +{ + static const char dot[] = "."; + char *last_slash; + /* Find last '/'. */ + last_slash = path != NULL ? strrchr (path, '/') : NULL; + if (last_slash != NULL && last_slash != path && last_slash[1] == '\0') + { + /* Determine whether all remaining characters are slashes. */ + char *runp; + for (runp = last_slash; runp != path; --runp) + if (runp[-1] != '/') + break; + /* The '/' is the last character, we have to look further. */ + if (runp != path) + last_slash = memrchr (path, '/', runp - path); + } + if (last_slash != NULL) + { + /* Determine whether all remaining characters are slashes. */ + char *runp; + for (runp = last_slash; runp != path; --runp) + if (runp[-1] != '/') + break; + /* Terminate the path. */ + if (runp == path) + { + /* The last slash is the first character in the string. We have to + return "/". As a special case we have to return "//" if there + are exactly two slashes at the beginning of the string. See + XBD 4.10 Path Name Resolution for more information. */ + if (last_slash == path + 1) + ++last_slash; + else + last_slash = path + 1; + } + else + last_slash = runp; + last_slash[0] = '\0'; + } + else + /* This assignment is ill-designed but the XPG specs require to + return a string containing "." in any case no directory part is + found and so a static and constant string is required. */ + path = (char *) dot; + return path; +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/math/acos.asm b/programs/develop/ktcc/trunk/libc/math/acos.asm new file mode 100644 index 0000000000..959e9e7a48 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/acos.asm @@ -0,0 +1,23 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public acos_ as "acos" + +acos_: + +; acos(x) = atan(sqrt((1-x*x)/(x*x))) + + fld qword[esp+4] + fld st0 ;Duplicate X on tos. + fmul st0, st1 ;Compute X**2. + fld st0 ;Duplicate X**2 on tos. + fld1 ;Compute 1-X**2. + fsub st0, st1 + fdiv st0, st1 ;Compute (1-x**2)/X**2. + fsqrt ;Compute sqrt((1-X**2)/X**2). + fld1 ;To compute full arctangent. + fpatan ;Compute atan of the above. + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/asin.c b/programs/develop/ktcc/trunk/libc/math/asin.c new file mode 100644 index 0000000000..fd7af3b0c7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/asin.c @@ -0,0 +1,6 @@ +#include + +double asin(double x) +{ + return atan(sqrt(x * x / (1.0 - x * x))); +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/math/atan.asm b/programs/develop/ktcc/trunk/libc/math/atan.asm new file mode 100644 index 0000000000..68f6fddc1f --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/atan.asm @@ -0,0 +1,15 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public atan_ as "atan" + +atan_: + + fld qword[esp+4] + fld1 + fpatan + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/atan2.asm b/programs/develop/ktcc/trunk/libc/math/atan2.asm new file mode 100644 index 0000000000..e0587bc3e5 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/atan2.asm @@ -0,0 +1,15 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public atan2_ as "atan2" + +atan2_: + + fld qword[esp+8] + fld qword[esp+4] + fpatan + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/ceil.asm b/programs/develop/ktcc/trunk/libc/math/ceil.asm new file mode 100644 index 0000000000..c03f6056fd --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/ceil.asm @@ -0,0 +1,30 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public ceil + +ceil: + + push ebp + mov ebp,esp + sub esp,8 + + fstcw [ebp-12] + mov dx,[ebp-12] + or dx,0x0800 + and dx,0xfbff + mov word[ebp-16],dx + fldcw [ebp-16] + + fld qword[ebp+8] + frndint + + fldcw [ebp-12] + + leave + + ret + + diff --git a/programs/develop/ktcc/trunk/libc/math/ceilf.asm b/programs/develop/ktcc/trunk/libc/math/ceilf.asm new file mode 100644 index 0000000000..e5180d68e8 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/ceilf.asm @@ -0,0 +1,30 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public ceilf + +ceilf: + + push ebp + mov ebp,esp + sub esp,8 + + fstcw [ebp-12] + mov dx,[ebp-12] + or dx,0x0800 + and dx,0xfbff + mov word[ebp-16],dx + fldcw [ebp-16] + + fld dword[ebp+8] + frndint + + fldcw [ebp-12] + + leave + + ret + + diff --git a/programs/develop/ktcc/trunk/libc/math/cos.asm b/programs/develop/ktcc/trunk/libc/math/cos.asm new file mode 100644 index 0000000000..75ac75e182 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/cos.asm @@ -0,0 +1,14 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public cos_ as "cos" + +cos_: + + fld qword[esp+4] + fcos + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/cosh.c b/programs/develop/ktcc/trunk/libc/math/cosh.c new file mode 100644 index 0000000000..56f0f0aee7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/cosh.c @@ -0,0 +1,6 @@ +#include + +double cosh (double x) +{ + return (exp(x) + exp(-x)) / 2; +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/math/exp.asm b/programs/develop/ktcc/trunk/libc/math/exp.asm new file mode 100644 index 0000000000..d3b27b41fa --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/exp.asm @@ -0,0 +1,60 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public exp_ as "exp" +public exp2_ as "exp2" + +SaveCW dw ? +MaskedCW dw ? + +; 2**x = 2**int(x) * 2**frac(x). +; We can easily compute 2**int(x) with fscale and +; 2**frac(x) using f2xm1. +exp2_int: + fstcw [SaveCW] + +; Modify the control word to truncate when rounding. + + fstcw [MaskedCW] + or byte ptr MaskedCW + 1, 1100b + fldcw [MaskedCW] + + fld st0 ;Duplicate tos. + fld st0 + frndint ;Compute integer portion. + + fxch ;Swap whole and int values. + fsub st0, st1 ;Compute fractional part. + + f2xm1 ;Compute 2**frac(x)-1. + fld1 + faddp st1, st0 ;Compute 2**frac(x). + + fxch ;Get integer portion. + fld1 ;Compute 1*2**int(x). + fscale + fstp st1 ;Remove st(1) (which is 1). + + fmulp st1, st0 ;Compute 2**int(x) * 2**frac(x). + fstp st1 ;Remove st1 + + fldcw [SaveCW] ;Restore rounding mode. + ret + +exp_: +; exp(x) = 2**(x * lg(e)) + + fld qword[esp+4] + fldl2e ;Put lg(e) onto the stack. + fmulp st1, st0 ;Compute x*lg(e). + call exp2_int;Compute 2**(x * lg(e)) + ret + +exp2_: + fld qword[esp+4] + call exp2_int;Compute 2 ** x + ret + + diff --git a/programs/develop/ktcc/trunk/libc/math/fabs.asm b/programs/develop/ktcc/trunk/libc/math/fabs.asm new file mode 100644 index 0000000000..1e2cd067c4 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/fabs.asm @@ -0,0 +1,14 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public fabs_ as "fabs" + +fabs_: + + fld qword[esp+4] + fabs + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/fabsf.asm b/programs/develop/ktcc/trunk/libc/math/fabsf.asm new file mode 100644 index 0000000000..fba999a01b --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/fabsf.asm @@ -0,0 +1,14 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public fabsf + +fabsf: + + fld dword[esp+4] + fabs + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/floor.asm b/programs/develop/ktcc/trunk/libc/math/floor.asm new file mode 100644 index 0000000000..8df60993ed --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/floor.asm @@ -0,0 +1,29 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public floor + +floor: + + push ebp + mov ebp,esp + sub esp,8 + + fstcw [ebp-12] + mov dx,word[ebp-12] + or dx,0x0400 + and dx,0xf7ff + mov word[ebp-16],dx + fldcw [ebp-16] + + fld qword[ebp+8] + frndint + + fldcw [ebp-12] + + leave + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/floorf.asm b/programs/develop/ktcc/trunk/libc/math/floorf.asm new file mode 100644 index 0000000000..bc262752c6 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/floorf.asm @@ -0,0 +1,29 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public floorf + +floorf: + + push ebp + mov ebp,esp + sub esp,8 + + fstcw [ebp-12] + mov dx,word[ebp-12] + or dx,0x0400 + and dx,0xf7ff + mov word[ebp-16],dx + fldcw [ebp-16] + + fld dword[ebp+8] + frndint + + fldcw [ebp-12] + + leave + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/fmod.c b/programs/develop/ktcc/trunk/libc/math/fmod.c new file mode 100644 index 0000000000..4e68f19bc2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/fmod.c @@ -0,0 +1,86 @@ +#include + +double remainder(double numer, double denom) +{ + double res; + asm("fldl %2;" + "fldl %1;" + "fprem1;" + "fstpl %0;" + "fstp %%st;" + : "=m"(res) + : "m"(numer), "m"(denom) + ); + return res; +} +//remainder of 5.3 / 2 is -0.700000 +//remainder of 18.5 / 4.2 is 1.700000 + + + +double fmod(double numer, double denom) +{ + double res; + asm("fldl %2;" + "fldl %1;" + "fprem;" + "fstpl %0;" + "fstp %%st;" + : "=m"(res) + : "m"(numer), "m"(denom) + ); + return res; +} +// fmod of 5.3 / 2 is 1.300000 +// fmod of 18.5 / 4.2 is 1.700000 + + +double modf(double x, double *intpart) +{ + double res, intp; + asm("fldl %2;" + "fldl %2;" + "frndint;" + "fstl %1;" + "fxch;" + "fsubp %%st, %%st(1);" + "fstpl %0" + : "=m"(res), "=m"(intp) + : "m"(x) + ); + *intpart = intp; + return res; +} + +double ldexp (double x, int expon) +// = x * 2^expot +{ + double res; + asm("fildl %2;" + "fldl %1;" + "fscale;" + "fstpl %0;" + "fstp %%st;" + : "=m"(res) + : "m"(x), "m"(expon) + ); + + return res; +} + +double frexp (double x, int* expon) +{ + double res; + asm("fldl %2;" + "fxtract;" + "fstpl %0;" + "fistpl %1;" + "fstp %%st;" + : "=m"(res), "=m"(*expon) + : "m"(x) + ); + +// *expon = (int)ex; + return res; +} +// 8.000000 = 0.500000 * 2^ 4 diff --git a/programs/develop/ktcc/trunk/libc/math/libtcc1.c b/programs/develop/ktcc/trunk/libc/math/libtcc1.c new file mode 100644 index 0000000000..2d36a205a1 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/libtcc1.c @@ -0,0 +1,754 @@ +/* TCC runtime library. + Parts of this code are (c) 2002 Fabrice Bellard + + Copyright (C) 1987, 1988, 1992, 1994, 1995 Free Software Foundation, Inc. + +This file is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file into combinations with other programs, +and to distribute those combinations without any restriction coming +from the use of this file. (The General Public License restrictions +do apply in other respects; for example, they cover modification of +the file, and distribution when not linked into a combine +executable.) + +This file is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. +*/ + +//#include +#define TCC_TARGET_I386 + +#define W_TYPE_SIZE 32 +#define BITS_PER_UNIT 8 + +typedef int Wtype; +typedef unsigned int UWtype; +typedef unsigned int USItype; +typedef long long DWtype; +typedef unsigned long long UDWtype; + +struct DWstruct { + Wtype low, high; +}; + +typedef union +{ + struct DWstruct s; + DWtype ll; +} DWunion; + +typedef long double XFtype; +#define WORD_SIZE (sizeof (Wtype) * BITS_PER_UNIT) +#define HIGH_WORD_COEFF (((UDWtype) 1) << WORD_SIZE) + +/* the following deal with IEEE single-precision numbers */ +#define EXCESS 126 +#define SIGNBIT 0x80000000 +#define HIDDEN (1 << 23) +#define SIGN(fp) ((fp) & SIGNBIT) +#define EXP(fp) (((fp) >> 23) & 0xFF) +#define MANT(fp) (((fp) & 0x7FFFFF) | HIDDEN) +#define PACK(s,e,m) ((s) | ((e) << 23) | (m)) + +/* the following deal with IEEE double-precision numbers */ +#define EXCESSD 1022 +#define HIDDEND (1 << 20) +#define EXPD(fp) (((fp.l.upper) >> 20) & 0x7FF) +#define SIGND(fp) ((fp.l.upper) & SIGNBIT) +#define MANTD(fp) (((((fp.l.upper) & 0xFFFFF) | HIDDEND) << 10) | \ + (fp.l.lower >> 22)) +#define HIDDEND_LL ((long long)1 << 52) +#define MANTD_LL(fp) ((fp.ll & (HIDDEND_LL-1)) | HIDDEND_LL) +#define PACKD_LL(s,e,m) (((long long)((s)+((e)<<20))<<32)|(m)) + +/* the following deal with x86 long double-precision numbers */ +#define EXCESSLD 16382 +#define EXPLD(fp) (fp.l.upper & 0x7fff) +#define SIGNLD(fp) ((fp.l.upper) & 0x8000) + +/* only for x86 */ +union ldouble_long { + long double ld; + struct { + unsigned long long lower; + unsigned short upper; + } l; +}; + +union double_long { + double d; +#if 1 + struct { + unsigned int lower; + int upper; + } l; +#else + struct { + int upper; + unsigned int lower; + } l; +#endif + long long ll; +}; + +union float_long { + float f; + unsigned int l; +}; + +/* XXX: we don't support several builtin supports for now */ +#if !defined(TCC_TARGET_X86_64) && !defined(TCC_TARGET_ARM) + +/* XXX: use gcc/tcc intrinsic ? */ +#if defined(TCC_TARGET_I386) +#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subl %5,%1\n\tsbbl %3,%0" \ + : "=r" ((USItype) (sh)), \ + "=&r" ((USItype) (sl)) \ + : "0" ((USItype) (ah)), \ + "g" ((USItype) (bh)), \ + "1" ((USItype) (al)), \ + "g" ((USItype) (bl))) +#define umul_ppmm(w1, w0, u, v) \ + __asm__ ("mull %3" \ + : "=a" ((USItype) (w0)), \ + "=d" ((USItype) (w1)) \ + : "%0" ((USItype) (u)), \ + "rm" ((USItype) (v))) +#define udiv_qrnnd(q, r, n1, n0, dv) \ + __asm__ ("divl %4" \ + : "=a" ((USItype) (q)), \ + "=d" ((USItype) (r)) \ + : "0" ((USItype) (n0)), \ + "1" ((USItype) (n1)), \ + "rm" ((USItype) (dv))) +#define count_leading_zeros(count, x) \ + do { \ + USItype __cbtmp; \ + __asm__ ("bsrl %1,%0" \ + : "=r" (__cbtmp) : "rm" ((USItype) (x))); \ + (count) = __cbtmp ^ 31; \ + } while (0) +#else +#error unsupported CPU type +#endif + +/* most of this code is taken from libgcc2.c from gcc */ + +static UDWtype __udivmoddi4 (UDWtype n, UDWtype d, UDWtype *rp) +{ + DWunion ww; + DWunion nn, dd; + DWunion rr; + UWtype d0, d1, n0, n1, n2; + UWtype q0, q1; + UWtype b, bm; + + nn.ll = n; + dd.ll = d; + + d0 = dd.s.low; + d1 = dd.s.high; + n0 = nn.s.low; + n1 = nn.s.high; + +#if !defined(UDIV_NEEDS_NORMALIZATION) + if (d1 == 0) + { + if (d0 > n1) + { + /* 0q = nn / 0D */ + + udiv_qrnnd (q0, n0, n1, n0, d0); + q1 = 0; + + /* Remainder in n0. */ + } + else + { + /* qq = NN / 0d */ + + if (d0 == 0) + d0 = 1 / d0; /* Divide intentionally by zero. */ + + udiv_qrnnd (q1, n1, 0, n1, d0); + udiv_qrnnd (q0, n0, n1, n0, d0); + + /* Remainder in n0. */ + } + + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = 0; + *rp = rr.ll; + } + } + +#else /* UDIV_NEEDS_NORMALIZATION */ + + if (d1 == 0) + { + if (d0 > n1) + { + /* 0q = nn / 0D */ + + count_leading_zeros (bm, d0); + + if (bm != 0) + { + /* Normalize, i.e. make the most significant bit of the + denominator set. */ + + d0 = d0 << bm; + n1 = (n1 << bm) | (n0 >> (W_TYPE_SIZE - bm)); + n0 = n0 << bm; + } + + udiv_qrnnd (q0, n0, n1, n0, d0); + q1 = 0; + + /* Remainder in n0 >> bm. */ + } + else + { + /* qq = NN / 0d */ + + if (d0 == 0) + d0 = 1 / d0; /* Divide intentionally by zero. */ + + count_leading_zeros (bm, d0); + + if (bm == 0) + { + /* From (n1 >= d0) /\ (the most significant bit of d0 is set), + conclude (the most significant bit of n1 is set) /\ (the + leading quotient digit q1 = 1). + + This special case is necessary, not an optimization. + (Shifts counts of W_TYPE_SIZE are undefined.) */ + + n1 -= d0; + q1 = 1; + } + else + { + /* Normalize. */ + + b = W_TYPE_SIZE - bm; + + d0 = d0 << bm; + n2 = n1 >> b; + n1 = (n1 << bm) | (n0 >> b); + n0 = n0 << bm; + + udiv_qrnnd (q1, n1, n2, n1, d0); + } + + /* n1 != d0... */ + + udiv_qrnnd (q0, n0, n1, n0, d0); + + /* Remainder in n0 >> bm. */ + } + + if (rp != 0) + { + rr.s.low = n0 >> bm; + rr.s.high = 0; + *rp = rr.ll; + } + } +#endif /* UDIV_NEEDS_NORMALIZATION */ + + else + { + if (d1 > n1) + { + /* 00 = nn / DD */ + + q0 = 0; + q1 = 0; + + /* Remainder in n1n0. */ + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = n1; + *rp = rr.ll; + } + } + else + { + /* 0q = NN / dd */ + + count_leading_zeros (bm, d1); + if (bm == 0) + { + /* From (n1 >= d1) /\ (the most significant bit of d1 is set), + conclude (the most significant bit of n1 is set) /\ (the + quotient digit q0 = 0 or 1). + + This special case is necessary, not an optimization. */ + + /* The condition on the next line takes advantage of that + n1 >= d1 (true due to program flow). */ + if (n1 > d1 || n0 >= d0) + { + q0 = 1; + sub_ddmmss (n1, n0, n1, n0, d1, d0); + } + else + q0 = 0; + + q1 = 0; + + if (rp != 0) + { + rr.s.low = n0; + rr.s.high = n1; + *rp = rr.ll; + } + } + else + { + UWtype m1, m0; + /* Normalize. */ + + b = W_TYPE_SIZE - bm; + + d1 = (d1 << bm) | (d0 >> b); + d0 = d0 << bm; + n2 = n1 >> b; + n1 = (n1 << bm) | (n0 >> b); + n0 = n0 << bm; + + udiv_qrnnd (q0, n1, n2, n1, d1); + umul_ppmm (m1, m0, q0, d0); + + if (m1 > n1 || (m1 == n1 && m0 > n0)) + { + q0--; + sub_ddmmss (m1, m0, m1, m0, d1, d0); + } + + q1 = 0; + + /* Remainder in (n1n0 - m1m0) >> bm. */ + if (rp != 0) + { + sub_ddmmss (n1, n0, n1, n0, m1, m0); + rr.s.low = (n1 << b) | (n0 >> bm); + rr.s.high = n1 >> bm; + *rp = rr.ll; + } + } + } + } + + ww.s.low = q0; + ww.s.high = q1; + return ww.ll; +} + +#define __negdi2(a) (-(a)) + +long long __divdi3(long long u, long long v) +{ + int c = 0; + DWunion uu, vv; + DWtype w; + + uu.ll = u; + vv.ll = v; + + if (uu.s.high < 0) { + c = ~c; + uu.ll = __negdi2 (uu.ll); + } + if (vv.s.high < 0) { + c = ~c; + vv.ll = __negdi2 (vv.ll); + } + w = __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) 0); + if (c) + w = __negdi2 (w); + return w; +} + +long long __moddi3(long long u, long long v) +{ + int c = 0; + DWunion uu, vv; + DWtype w; + + uu.ll = u; + vv.ll = v; + + if (uu.s.high < 0) { + c = ~c; + uu.ll = __negdi2 (uu.ll); + } + if (vv.s.high < 0) + vv.ll = __negdi2 (vv.ll); + + __udivmoddi4 (uu.ll, vv.ll, (UDWtype *) &w); + if (c) + w = __negdi2 (w); + return w; +} + +unsigned long long __udivdi3(unsigned long long u, unsigned long long v) +{ + return __udivmoddi4 (u, v, (UDWtype *) 0); +} + +unsigned long long __umoddi3(unsigned long long u, unsigned long long v) +{ + UDWtype w; + + __udivmoddi4 (u, v, &w); + return w; +} + +/* XXX: fix tcc's code generator to do this instead */ +long long __ashrdi3(long long a, int b) +{ +#ifdef __TINYC__ + DWunion u; + u.ll = a; + if (b >= 32) { + u.s.low = u.s.high >> (b - 32); + u.s.high = u.s.high >> 31; + } else if (b != 0) { + u.s.low = ((unsigned)u.s.low >> b) | (u.s.high << (32 - b)); + u.s.high = u.s.high >> b; + } + return u.ll; +#else + return a >> b; +#endif +} + +/* XXX: fix tcc's code generator to do this instead */ +unsigned long long __lshrdi3(unsigned long long a, int b) +{ +#ifdef __TINYC__ + DWunion u; + u.ll = a; + if (b >= 32) { + u.s.low = (unsigned)u.s.high >> (b - 32); + u.s.high = 0; + } else if (b != 0) { + u.s.low = ((unsigned)u.s.low >> b) | (u.s.high << (32 - b)); + u.s.high = (unsigned)u.s.high >> b; + } + return u.ll; +#else + return a >> b; +#endif +} + +/* XXX: fix tcc's code generator to do this instead */ +long long __ashldi3(long long a, int b) +{ +#ifdef __TINYC__ + DWunion u; + u.ll = a; + if (b >= 32) { + u.s.high = (unsigned)u.s.low << (b - 32); + u.s.low = 0; + } else if (b != 0) { + u.s.high = ((unsigned)u.s.high << b) | ((unsigned)u.s.low >> (32 - b)); + u.s.low = (unsigned)u.s.low << b; + } + return u.ll; +#else + return a << b; +#endif +} + +#ifndef COMMIT_4ad186c5ef61_IS_FIXED +long long __tcc_cvt_ftol(long double x) +{ + unsigned c0, c1; + long long ret; + __asm__ __volatile__ ("fnstcw %0" : "=m" (c0)); + c1 = c0 | 0x0C00; + __asm__ __volatile__ ("fldcw %0" : : "m" (c1)); + __asm__ __volatile__ ("fistpll %0" : "=m" (ret)); + __asm__ __volatile__ ("fldcw %0" : : "m" (c0)); + return ret; +} +#endif + +#endif /* !__x86_64__ */ + +/* XXX: fix tcc's code generator to do this instead */ +float __floatundisf(unsigned long long a) +{ + DWunion uu; + XFtype r; + + uu.ll = a; + if (uu.s.high >= 0) { + return (float)uu.ll; + } else { + r = (XFtype)uu.ll; + r += 18446744073709551616.0; + return (float)r; + } +} + +double __floatundidf(unsigned long long a) +{ + DWunion uu; + XFtype r; + + uu.ll = a; + if (uu.s.high >= 0) { + return (double)uu.ll; + } else { + r = (XFtype)uu.ll; + r += 18446744073709551616.0; + return (double)r; + } +} + +long double __floatundixf(unsigned long long a) +{ + DWunion uu; + XFtype r; + + uu.ll = a; + if (uu.s.high >= 0) { + return (long double)uu.ll; + } else { + r = (XFtype)uu.ll; + r += 18446744073709551616.0; + return (long double)r; + } +} + +unsigned long long __fixunssfdi (float a1) +{ + register union float_long fl1; + register int exp; + register unsigned long l; + + fl1.f = a1; + + if (fl1.l == 0) + return (0); + + exp = EXP (fl1.l) - EXCESS - 24; + + l = MANT(fl1.l); + if (exp >= 41) + return (unsigned long long)-1; + else if (exp >= 0) + return (unsigned long long)l << exp; + else if (exp >= -23) + return l >> -exp; + else + return 0; +} + +unsigned long long __fixunsdfdi (double a1) +{ + register union double_long dl1; + register int exp; + register unsigned long long l; + + dl1.d = a1; + + if (dl1.ll == 0) + return (0); + + exp = EXPD (dl1) - EXCESSD - 53; + + l = MANTD_LL(dl1); + + if (exp >= 12) + return (unsigned long long)-1; + else if (exp >= 0) + return l << exp; + else if (exp >= -52) + return l >> -exp; + else + return 0; +} + +unsigned long long __fixunsxfdi (long double a1) +{ + register union ldouble_long dl1; + register int exp; + register unsigned long long l; + + dl1.ld = a1; + + if (dl1.l.lower == 0 && dl1.l.upper == 0) + return (0); + + exp = EXPLD (dl1) - EXCESSLD - 64; + + l = dl1.l.lower; + + if (exp > 0) + return (unsigned long long)-1; + else if (exp >= -63) + return l >> -exp; + else + return 0; +} + +long long __fixsfdi (float a1) +{ + long long ret; int s; + ret = __fixunssfdi((s = a1 >= 0) ? a1 : -a1); + return s ? ret : -ret; +} + +long long __fixdfdi (double a1) +{ + long long ret; int s; + ret = __fixunsdfdi((s = a1 >= 0) ? a1 : -a1); + return s ? ret : -ret; +} + +long long __fixxfdi (long double a1) +{ + long long ret; int s; + ret = __fixunsxfdi((s = a1 >= 0) ? a1 : -a1); + return s ? ret : -ret; +} + +#if defined(TCC_TARGET_X86_64) && !defined(_WIN64) + +#ifndef __TINYC__ +#include +#include +#include +#else +/* Avoid including stdlib.h because it is not easily available when + cross compiling */ +#include /* size_t definition is needed for a x86_64-tcc to parse memset() */ +extern void *malloc(unsigned long long); +extern void *memset(void *s, int c, size_t n); +extern void free(void*); +extern void abort(void); +#endif + +enum __va_arg_type { + __va_gen_reg, __va_float_reg, __va_stack +}; + +//This should be in sync with the declaration on our include/stdarg.h +/* GCC compatible definition of va_list. */ +typedef struct { + unsigned int gp_offset; + unsigned int fp_offset; + union { + unsigned int overflow_offset; + char *overflow_arg_area; + }; + char *reg_save_area; +} __va_list_struct; + +#undef __va_start +#undef __va_arg +#undef __va_copy +#undef __va_end + +void __va_start(__va_list_struct *ap, void *fp) +{ + memset(ap, 0, sizeof(__va_list_struct)); + *ap = *(__va_list_struct *)((char *)fp - 16); + ap->overflow_arg_area = (char *)fp + ap->overflow_offset; + ap->reg_save_area = (char *)fp - 176 - 16; +} + +void *__va_arg(__va_list_struct *ap, + enum __va_arg_type arg_type, + int size, int align) +{ + size = (size + 7) & ~7; + align = (align + 7) & ~7; + switch (arg_type) { + case __va_gen_reg: + if (ap->gp_offset + size <= 48) { + ap->gp_offset += size; + return ap->reg_save_area + ap->gp_offset - size; + } + goto use_overflow_area; + + case __va_float_reg: + if (ap->fp_offset < 128 + 48) { + ap->fp_offset += 16; + return ap->reg_save_area + ap->fp_offset - 16; + } + size = 8; + goto use_overflow_area; + + case __va_stack: + use_overflow_area: + ap->overflow_arg_area += size; + ap->overflow_arg_area = (char*)((intptr_t)(ap->overflow_arg_area + align - 1) & -(intptr_t)align); + return ap->overflow_arg_area - size; + + default: +#ifndef __TINYC__ + fprintf(stderr, "unknown ABI type for __va_arg\n"); +#endif + abort(); + } +} + +#endif /* __x86_64__ */ + +/* Flushing for tccrun */ +#if defined(TCC_TARGET_X86_64) || defined(TCC_TARGET_I386) + +void __clear_cache(void *beginning, void *end) +{ +} + +#elif defined(TCC_TARGET_ARM) + +#define _GNU_SOURCE +#include +#include +#include + +void __clear_cache(void *beginning, void *end) +{ +/* __ARM_NR_cacheflush is kernel private and should not be used in user space. + * However, there is no ARM asm parser in tcc so we use it for now */ +#if 1 + syscall(__ARM_NR_cacheflush, beginning, end, 0); +#else + __asm__ ("push {r7}\n\t" + "mov r7, #0xf0002\n\t" + "mov r2, #0\n\t" + "swi 0\n\t" + "pop {r7}\n\t" + "ret"); +#endif +} + +#else +#warning __clear_cache not defined for this architecture, avoid using tcc -run +#endif diff --git a/programs/develop/ktcc/trunk/libc/math/log.asm b/programs/develop/ktcc/trunk/libc/math/log.asm new file mode 100644 index 0000000000..964c711268 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/log.asm @@ -0,0 +1,18 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public log_ as "log" + +log_: + +; ln(x) = lg(x)/lg(e). + + fld qword[esp+4] + fld1 + fxch + fyl2x ;Compute 1*lg(x). + fldl2e ;Load lg(e). + fdivp st1, st0 ;Compute lg(x)/lg(e). + ret diff --git a/programs/develop/ktcc/trunk/libc/math/log10.asm b/programs/develop/ktcc/trunk/libc/math/log10.asm new file mode 100644 index 0000000000..8c5c4daa51 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/log10.asm @@ -0,0 +1,18 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public log10_ as "log10" + +log10_: + +; ln(x) = lg(x)/lg(e). + + fld qword[esp+4] + fld1 + fxch + fyl2x ;Compute 1*lg(x). + fldl2t ;Load lg(10). + fdivp st1, st0 ;Compute lg(x)/lg(10). + ret diff --git a/programs/develop/ktcc/trunk/libc/math/pow.c b/programs/develop/ktcc/trunk/libc/math/pow.c new file mode 100644 index 0000000000..c2485f3e2c --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/pow.c @@ -0,0 +1,6 @@ +#include + +double pow(double x, double y) +{ + return exp(y * log(x)); +} diff --git a/programs/develop/ktcc/trunk/libc/math/round.c b/programs/develop/ktcc/trunk/libc/math/round.c new file mode 100644 index 0000000000..73b297f6ee --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/round.c @@ -0,0 +1,9 @@ +#include + +double round (double x) +{ + if (x > 0) + return floor(x + 0.5); + else + return ceil(x - 0.5); +} diff --git a/programs/develop/ktcc/trunk/libc/math/roundl.c b/programs/develop/ktcc/trunk/libc/math/roundl.c new file mode 100644 index 0000000000..8ebf5637a4 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/roundl.c @@ -0,0 +1,9 @@ +#include + +long double roundl (long double x) +{ + if (x > 0) + return floor(x + 0.5); + else + return ceil(x - 0.5); +} diff --git a/programs/develop/ktcc/trunk/libc/math/sin.asm b/programs/develop/ktcc/trunk/libc/math/sin.asm new file mode 100644 index 0000000000..97515945cd --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/sin.asm @@ -0,0 +1,14 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public sin_ as "sin" + +sin_: + + fld qword[esp+4] + fsin + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/sinh.c b/programs/develop/ktcc/trunk/libc/math/sinh.c new file mode 100644 index 0000000000..1969267dd2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/sinh.c @@ -0,0 +1,6 @@ +#include + +double sinh (double x) +{ + return (exp(x) - exp(-x)) / 2; +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/math/sqrt.asm b/programs/develop/ktcc/trunk/libc/math/sqrt.asm new file mode 100644 index 0000000000..4016991d7f --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/sqrt.asm @@ -0,0 +1,14 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public sqrt + +sqrt: + + fld qword[esp+4] + fsqrt + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/sqrtf.asm b/programs/develop/ktcc/trunk/libc/math/sqrtf.asm new file mode 100644 index 0000000000..9306ad4ec1 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/sqrtf.asm @@ -0,0 +1,14 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public sqrtf + +sqrtf: + + fld dword[esp+4] + fsqrt + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/tan.asm b/programs/develop/ktcc/trunk/libc/math/tan.asm new file mode 100644 index 0000000000..2dae8a0312 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/tan.asm @@ -0,0 +1,15 @@ + +format ELF +include '../proc32.inc' +section '.text' executable + +public tan_ as "tan" + +tan_: + + fld qword[esp+4] + fptan + fxch + + ret + diff --git a/programs/develop/ktcc/trunk/libc/math/tanh.c b/programs/develop/ktcc/trunk/libc/math/tanh.c new file mode 100644 index 0000000000..3c3a0190aa --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/math/tanh.c @@ -0,0 +1,8 @@ +#include + +double tanh (double x) +{ + double ex = exp(x), exm = exp(-x); + + return (ex - exm) / (ex + exm); +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/memory/memalloc.asm b/programs/develop/ktcc/trunk/libc/memory/memalloc.asm new file mode 100644 index 0000000000..2c45afb329 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/memory/memalloc.asm @@ -0,0 +1,46 @@ +format ELF + +;include "../proc32.inc" +section '.text' executable +public sysmalloc +public sysfree +public sysrealloc + +align 4 +sysmalloc: + push ebx + push ecx + mov eax,68 + mov ebx,12 + mov ecx,[esp+12] ;size + int 0x40 + pop ecx + pop ebx + ret 4 + +align 4 +sysfree: + push ebx + push ecx + mov eax,68 + mov ebx,13 + mov ecx,[esp+12] + int 0x40 + pop ecx + pop ebx + ret 4 + +align 4 +sysrealloc: + push ebx + push ecx + push edx + mov eax,68 + mov ebx,20 + mov ecx,[esp+20] ; size + mov edx,[esp+16] ; pointer + int 0x40 + pop edx + pop ecx + pop ebx + ret 8 diff --git a/programs/develop/ktcc/trunk/libc/memory/watermark.c b/programs/develop/ktcc/trunk/libc/memory/watermark.c new file mode 100644 index 0000000000..d91b195553 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/memory/watermark.c @@ -0,0 +1,410 @@ +/* + * Easy and fast memory allocator from + * https://wiki.osdev.org/Memory_Allocation + * Coded by Siemargl, 2018 + * + * No Garbage Collector + */ + +#include +#include +#include +#include +#include + +#define UINT_MAX (4294967295U) + +#ifndef NDEBUG +#include +# ifdef __TINYC__ +# include +# define TRACE1(s, a) { char buf[400]; sprintf(buf, s, a); debug_out_str(buf); } +# define TRACE2(s, a, b) { char buf[400]; sprintf(buf, s, a, b); debug_out_str(buf); } +# else +# define TRACE1(s, a) printf(s, a) +# define TRACE2(s, a, b) printf(s, a, b) +# endif +#else +# define TRACE1(s, a) (void)0 +# define TRACE2(s, a, b) (void)0 +#endif + + + + +// get address, fromwhere function was called +#define CALLEDFROM(param1) (*(int*)((char*)¶m1-4)-5) + +const uint32_t c_used = 0x44455355; //'USED' +const uint32_t c_free = 0x45455246; //'FREE' + +struct hdrfree { + uint32_t mark; // 'FREE' + size_t size; // including header + struct hdrfree *prev; + struct hdrfree *next; +}; + +struct hdrused { + uint32_t mark; // 'USED' + size_t size; +}; + + +static char *__freebase = NULL; // begin of free area +static char *__freetop = NULL; // after last byte of free area +static struct hdrfree *__firstfree = NULL; // ptr to first node in dual-link list + +static struct { + uint32_t malloc_calls; + uint32_t malloc_max; + uint32_t malloc_sum; + + uint32_t sysalloc_calls; + uint32_t sysalloc_max; + uint32_t sysalloc_sum; + + uint32_t crtfreeblocks; // number of free blocks, checking corruptions + uint32_t freeblocks_sum; +} wtalloc_stat; + + +void *wtmalloc(size_t sz) +{ + struct hdrfree *fndnode, *newnode; + sz = (sizeof(struct hdrused) + sz + 15) & ~15; // align 16bytes +//TRACE1("_call alloc(%d)\n", sz); + + //statistics + wtalloc_stat.malloc_calls++; + if (sz > wtalloc_stat.malloc_max) wtalloc_stat.malloc_max = sz; + wtalloc_stat.malloc_sum += sz; + + // try to find free block enough size + fndnode = __firstfree; + while(fndnode) + { +#ifndef NDEBUG + if (fndnode->mark != c_free) + { + TRACE2("heap free block list corrupt %x EIP@%x\n", fndnode, CALLEDFROM(sz)); + assert(0); + } +#endif + if (fndnode->size >= sz) break; + fndnode = fndnode->next; + } + + if (fndnode) // found free block + { + if (fndnode->size - sz > 15) // split smaller size, move free node + { +//TRACE2("alloc(%d) split (%x)\n", sz, fndnode); + wtalloc_stat.freeblocks_sum -= sz; + newnode = (struct hdrfree*)((char*)fndnode + sz); + newnode->mark = c_free; + newnode->size = fndnode->size - sz; + newnode->next = fndnode->next; + newnode->prev = fndnode->prev; + + if (fndnode->next) + fndnode->next->prev = newnode; + + //перед может быть не нода, а 1й указатель + if (fndnode->prev) + newnode->prev->next = newnode; + else + __firstfree = newnode; + } else // nothing to split, just exclude + { +//TRACE1("alloc(%d) remove freenode\n", sz); + + wtalloc_stat.crtfreeblocks--; + wtalloc_stat.freeblocks_sum -= fndnode->size; + if (fndnode->next) + fndnode->next->prev = fndnode->prev; + //перед может быть не нода, а 1й указатель + if (fndnode->prev) + fndnode->prev->next = fndnode->next; + else + __firstfree = fndnode->next; + } + + fndnode->mark = c_used; + fndnode->size = sz; + return (char*)fndnode + sizeof(struct hdrused); + } + + char *ptr; + // free block not found, try to add @end + if (__freetop - __freebase < sz) // not enough memory - call system + { + if (sz > UINT_MAX - 16) return NULL; // check 32-bit heap overflow +// size_t new_heap_size = (__freetop - __freebase + sz + 4095) & ~4095; + size_t new_heap_size = (sz + sz / 5 + 4095) & ~4095; // 20% reserved + + //statistics + wtalloc_stat.sysalloc_calls++; + if (new_heap_size > wtalloc_stat.malloc_max) wtalloc_stat.sysalloc_max = new_heap_size; + wtalloc_stat.sysalloc_sum += new_heap_size; + + + //хвост сунуть в свободные, а фритоп и базу перености на новый кусок + ptr = sysmalloc(new_heap_size); // rounded 4k +//TRACE2("call systemalloc(%d) returned %x\n", new_heap_size, ptr); + if (!ptr) + { + TRACE2("sysmalloc failed trying to allocate %u bytes EIP@%x\n", sz, CALLEDFROM(sz)); + return NULL; + } + // add new free block in front of list + if (__freetop - __freebase > 15) + { + newnode = (struct hdrfree*)__freebase; + newnode->mark = c_free; + newnode->size = __freetop - __freebase; + newnode->next = __firstfree; + newnode->prev = NULL; + if (__firstfree) + __firstfree->prev = newnode; + __firstfree = newnode; + wtalloc_stat.crtfreeblocks++; + wtalloc_stat.freeblocks_sum += newnode->size; +//TRACE2("alloc(%d) add tail %d to freenode", sz, newnode->size); +//TRACE1(".tail [%x]\n", newnode); + } + // we don't save allocated block from system, so cant free them ltr + + __freebase = ptr; + __freetop = __freebase + new_heap_size; + } + + ptr = __freebase + sizeof(struct hdrused); + ((struct hdrused*)__freebase)->mark = c_used; + ((struct hdrused*)__freebase)->size = sz; + __freebase += sz; +//TRACE1("__freebase [%x]\n", __freebase); + + +// check list availability +/* +int maxfree = 0; +for (fndnode = __firstfree; fndnode; fndnode = fndnode->next) +{ + if (fndnode->size > maxfree) maxfree = fndnode->size; +} + +TRACE2("alloc(%d) from freebase, maxfree = %d,", sz, maxfree); +TRACE1(" freelist len = %u \n", wtalloc_stat.crtfreeblocks); +*/ + return ptr; +} + +void wtfree(void *ptr) +{ + if (!ptr) return; + +//TRACE1("free() to freenode, sized %d\n", ((struct hdrused*)((char*)ptr - 8))->size); + +#ifndef NDEBUG + if (((struct hdrused*)((char*)ptr - 8))->mark != c_used) + { + TRACE2("try free unallocated block ptr = %x bytes EIP@%x\n", ptr, CALLEDFROM(ptr)); + assert(0); + } +#endif + struct hdrfree *newnode = (struct hdrfree*)((char*)ptr - 8); + newnode->mark = c_free; + //size stays + newnode->next = NULL; + newnode->prev = NULL; + + + // experimental - try to merge, if adjanced from bottom is also freeblock + int reorganized = 0; + struct hdrfree *higher; + { + struct hdrfree *p1; + higher = NULL; + for (p1 = __firstfree; p1; p1 = p1->next) + { + higher = (struct hdrfree *)((char*)p1 + p1->size); + if (higher == newnode) break; + } + if (p1) // yes, it is + { + wtalloc_stat.freeblocks_sum += newnode->size; + p1->size += newnode->size; + // p1->prev, p1->next already OK + newnode->mark = 0; // for safety + newnode = p1; // continue optimization +//TRACE2("free block merged w/bottom sized %u bytes, list len %u\n", p1->size, wtalloc_stat.crtfreeblocks); + reorganized = 1; + } + } + + +/* removed, as very seldom succeeds */ + // experimental - try to merge, if adjanced from top is also freeblock + higher = (struct hdrfree *)((char*)newnode + newnode->size); +// dont work - we try to read after our memory +// if ((char*)higher < (char*)__freetop && // saves from reading out of our memory +// higher->mark == c_free) // only suspisious, must be in list + { + struct hdrfree *p1; + for (p1 = __firstfree; p1 && p1 != higher; p1 = p1->next); + if (p1) // yes, it is + { + if (newnode->next || newnode->prev) // optimized 1st stage, must remove from list and readd later + { + wtalloc_stat.crtfreeblocks--; + wtalloc_stat.freeblocks_sum -= newnode->size; + if (newnode->next) + newnode->next->prev = newnode->prev; + if (newnode->prev) + newnode->prev->next = newnode->next; + else + __firstfree = newnode->next; + } + wtalloc_stat.freeblocks_sum += newnode->size; + newnode->size += higher->size; + newnode->prev = higher->prev; + newnode->next = higher->next; + higher->mark = 0; // for safety + if (higher->next) + higher->next->prev = newnode; + if (higher->prev) + higher->prev->next = newnode; + else + __firstfree = newnode; +//TRACE1("free block merged w/top\n", 0); + reorganized = 1; + } + } + + if (reorganized) return; // experimental reorganized do all work + +//TRACE1("free block added\n", 0); + wtalloc_stat.crtfreeblocks++; + wtalloc_stat.freeblocks_sum += newnode->size; + + newnode->next = __firstfree; + newnode->prev = NULL; + if (__firstfree) + __firstfree->prev = newnode; + __firstfree = newnode; +} + + +void *wtrealloc(void *ptr, size_t sz) +{ + if (!ptr) return wtmalloc(sz); + + struct hdrused* oldptr = (struct hdrused*)((char*)ptr - 8); + +#ifndef NDEBUG + if (oldptr->mark != c_used) + { + TRACE2("try realloc unallocated block ptr = %x EIP@%x\n", ptr, CALLEDFROM(ptr)); + assert(0); + } +#endif + + if (oldptr->size - 8 >= sz) return ptr; // enough room in this block, ex from freelist + + /* experimental growth last block */ + int growth = (oldptr->size + sz + 15) & ~15; + if ((char*)oldptr + oldptr->size == __freebase && + __freetop - __freebase + oldptr->size >= growth ) // we at top, can grow up + { + wtalloc_stat.malloc_sum += growth - oldptr->size; + __freebase += growth - oldptr->size; + oldptr->size = growth; + return ptr; + } + + void *newptr = wtmalloc(sz); + if (newptr) + { + memcpy(newptr, (char*)oldptr +8, oldptr->size -8); // why forgeting -8 dont fail test?!? + wtfree((char*)oldptr +8); + return newptr; + } + + return NULL; +} + +void* wtcalloc( size_t num, size_t size ) +{ + void *newptr = wtmalloc(num * size); + if (newptr) + memset(newptr, 0, num * size); + return newptr; +} + + + + +int wtmalloc_freelist_check() +//контроль целостности списка фри OK == 1 +{ + int cnt = 0; + struct hdrfree *ptr = __firstfree; + + if(ptr && ptr->prev) + { + TRACE1("allocated memory freelist 1st block fail, ptr = %x\n", ptr); + return 0; + } + + for(;ptr; ptr = ptr->next) + { +//TRACE1("(%x)", ptr); + + cnt++; + if (ptr->mark != c_free) + { + TRACE1("allocated memory freelist check fail, ptr = %x\n", ptr); + return 0; + } + } + if (cnt != wtalloc_stat.crtfreeblocks) + { + TRACE2("allocated memory freelist check fail, length must be = %u but is %u\n", wtalloc_stat.crtfreeblocks, cnt); + return 0; + } + return 1; +} + +void wtmalloc_freelist_print() +{ + struct hdrfree *ptr = __firstfree; + for(;ptr; ptr = ptr->next) + { + TRACE2("(%x[%u])", ptr, ptr->size); + } + TRACE1("\n", 0); + +} + +int wtmalloc_poiner_check(void *ptr) +//контроль указателя - mark OK == 1 +{ + if (((struct hdrused*)((char*)ptr - 8))->mark != c_used) + { + TRACE2("pointer watermark check fail ptr = %x bytes EIP@%x\n", ptr, CALLEDFROM(ptr)); + return 0; + } + return 1; +} + +void wtdump_alloc_stats() +{ + TRACE1("----Watermark allocator stats:----\n", 0); + TRACE2("allocated %u calls, max of %u bytes\n", wtalloc_stat.malloc_calls, wtalloc_stat.malloc_max); + TRACE2("total %u bytes, average call %u bytes\n", wtalloc_stat.malloc_sum, wtalloc_stat.malloc_sum / wtalloc_stat.malloc_calls); + TRACE1("SYSTEM:\n", 0); + TRACE2("allocated %u calls, max of %u bytes\n", wtalloc_stat.sysalloc_calls, wtalloc_stat.sysalloc_max); + TRACE2("total %u bytes, average call %u bytes\n", wtalloc_stat.sysalloc_sum, wtalloc_stat.sysalloc_sum / wtalloc_stat.sysalloc_calls); + TRACE2("free list %u bytes, length %u chunks\n", wtalloc_stat.freeblocks_sum, wtalloc_stat.crtfreeblocks); +} diff --git a/programs/develop/ktcc/trunk/libc/net/socket.c b/programs/develop/ktcc/trunk/libc/net/socket.c new file mode 100644 index 0000000000..15c2159fb5 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/net/socket.c @@ -0,0 +1,103 @@ +/* Copyright (C) 2019-2021 Logaev Maxim (turbocat2001), GPLv3 */ + +#include + +int socket(int domain, int type, int protocol) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(0), "c"(domain), "d"(type), "S"(protocol) + ); +} + +int close(int socket) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(1), "c"(socket) + ); +} +int bind(int socket, const struct sockaddr *addres, int addres_len) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(2), "c"(socket), "d"(addres), "S"(addres_len) + ); +} + +int listen(int socket, int backlog) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(3), "c"(socket), "d"(backlog) + ); +} + +int connect(int socket,const struct sockaddr* address, int socket_len) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(4), "c"(socket), "d"(address), "S"(socket_len) + ); +} + +int accept(int socket, const struct sockaddr *address, int address_len) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(5), "c"(socket), "d"(address), "S"(address_len) + ); +} + +int send(int socket, const void *message, size_t msg_len, int flag) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(6), "c"(socket), "d"(message), "S"(msg_len), "D"(flag) + ); +} + +int recv(int socket, void *buffer, size_t buff_len, int flag) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(7), "c"(socket), "d"(buffer), "S"(buff_len), "D"(flag) + ); +} + +int setsockopt(int socket,const optstruct* opt) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(8), "c"(socket),"d"(opt) + ); +} + +int getsockopt(int socket, optstruct* opt) +{ + asm volatile( + "int $0x40" + :"=b"(errno) + :"a"(75), "b"(9), "c"(socket),"d"(opt) + ); +} + +int socketpair(int *sock1, int *sock2) +{ + asm volatile( + "int $0x40" + :"=b"(*sock2), "=a"(*sock1) + :"a"(75), "b"(10) + ); + errno = *sock2; + return *sock1; +} diff --git a/programs/develop/ktcc/trunk/libc/proc32.inc b/programs/develop/ktcc/trunk/libc/proc32.inc new file mode 100644 index 0000000000..762826cbbb --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/proc32.inc @@ -0,0 +1,301 @@ + +; Macroinstructions for defining and calling procedures + +macro stdcall proc,[arg] ; directly call STDCALL procedure + { common + if ~ arg eq + reverse + pushd arg + common + end if + call proc } + +macro invoke proc,[arg] ; indirectly call STDCALL procedure + { common + if ~ arg eq + reverse + pushd arg + common + end if + call [proc] } + +macro ccall proc,[arg] ; directly call CDECL procedure + { common + size@ccall = 0 + if ~ arg eq + reverse + pushd arg + size@ccall = size@ccall+4 + common + end if + call proc + if size@ccall + add esp,size@ccall + end if } + +macro cinvoke proc,[arg] ; indirectly call CDECL procedure + { common + size@ccall = 0 + if ~ arg eq + reverse + pushd arg + size@ccall = size@ccall+4 + common + end if + call [proc] + if size@ccall + add esp,size@ccall + end if } + +macro proc [args] ; define procedure + { common + match name params, args> + \{ define@proc name, \{ prologue name,flag,parmbytes,localbytes,reglist \} + virtual at parmbase@proc + match =,args, params \{ defargs@proc args \} + match =args@proc args, args@proc params \{ defargs@proc args \} + parmbytes = $-(parmbase@proc) + end virtual + name # % = parmbytes/4 + all@vars equ + current = 0 + macro locals + \{ virtual at localbase@proc+current + macro label def \\{ match . type,def> \\\{ deflocal@proc .,label, \\\{ epilogue name,flag,parmbytes,localbytes,reglist \\\} \\} \} + macro finish@proc + \{ localbytes = current + match close:reglist, close@proc: \\{ close name,flag,parmbytes,localbytes,reglist \\} + end if \} } + +macro defargs@proc [arg] + { common + if ~ arg eq + forward + local ..arg,current@arg + match argname:type, arg + \{ current@arg equ argname + label ..arg type + argname equ ..arg + if qqword eq type + dd ?,?,?,?,?,?,?,? + else if dqword eq type + dd ?,?,?,? + else if tbyte eq type + dd ?,?,? + else if qword eq type | pword eq type + dd ?,? + else + dd ? + end if \} + match =current@arg,current@arg + \{ current@arg equ arg + arg equ ..arg + ..arg dd ? \} + common + args@proc equ current@arg + forward + restore current@arg + common + end if } + +macro deflocal@proc name,def,[val] { name def val } + +macro deflocal@proc name,def,[val] + { common + match vars, all@vars \{ all@vars equ all@vars, \} + all@vars equ all@vars name + forward + local ..var,..tmp + ..var def val + match =?, val \{ ..tmp equ \} + match any =?, val \{ ..tmp equ \} + match any (=?), val \{ ..tmp equ \} + match =label, def \{ ..tmp equ \} + match tmp : value, ..tmp : val + \{ tmp: end virtual + initlocal@proc ..var,def value + virtual at tmp\} + common + match first rest, ..var, \{ name equ first \} } + +struc label type { label . type } + +macro initlocal@proc name,def + { virtual at name + def + size@initlocal = $ - name + end virtual + position@initlocal = 0 + while size@initlocal > position@initlocal + virtual at name + def + if size@initlocal - position@initlocal < 2 + current@initlocal = 1 + load byte@initlocal byte from name+position@initlocal + else if size@initlocal - position@initlocal < 4 + current@initlocal = 2 + load word@initlocal word from name+position@initlocal + else + current@initlocal = 4 + load dword@initlocal dword from name+position@initlocal + end if + end virtual + if current@initlocal = 1 + mov byte [name+position@initlocal],byte@initlocal + else if current@initlocal = 2 + mov word [name+position@initlocal],word@initlocal + else + mov dword [name+position@initlocal],dword@initlocal + end if + position@initlocal = position@initlocal + current@initlocal + end while } + +macro endp + { purge ret,locals,endl + finish@proc + purge finish@proc + restore regs@proc + match all,args@proc \{ restore all \} + restore args@proc + match all,all@vars \{ restore all \} } + +macro local [var] + { common + locals + forward done@local equ + match varname[count]:vartype, var + \{ match =BYTE, vartype \\{ varname rb count + restore done@local \\} + match =WORD, vartype \\{ varname rw count + restore done@local \\} + match =DWORD, vartype \\{ varname rd count + restore done@local \\} + match =PWORD, vartype \\{ varname rp count + restore done@local \\} + match =QWORD, vartype \\{ varname rq count + restore done@local \\} + match =TBYTE, vartype \\{ varname rt count + restore done@local \\} + match =DQWORD, vartype \\{ label varname dqword + rq count*2 + restore done@local \\} + match =QQWORD, vartype \\{ label varname qqword + rq count*4 + restore done@local \\} + match =XWORD, vartype \\{ label varname xword + rq count*2 + restore done@local \\} + match =YWORD, vartype \\{ label varname yword + rq count*4 + restore done@local \\} + match , done@local \\{ virtual + varname vartype + end virtual + rb count*sizeof.\#vartype + restore done@local \\} \} + match :varname:vartype, done@local:var + \{ match =BYTE, vartype \\{ varname db ? + restore done@local \\} + match =WORD, vartype \\{ varname dw ? + restore done@local \\} + match =DWORD, vartype \\{ varname dd ? + restore done@local \\} + match =PWORD, vartype \\{ varname dp ? + restore done@local \\} + match =QWORD, vartype \\{ varname dq ? + restore done@local \\} + match =TBYTE, vartype \\{ varname dt ? + restore done@local \\} + match =DQWORD, vartype \\{ label varname dqword + dq ?,? + restore done@local \\} + match =QQWORD, vartype \\{ label varname qqword + dq ?,?,?,? + restore done@local \\} + match =XWORD, vartype \\{ label varname xword + dq ?,? + restore done@local \\} + match =YWORD, vartype \\{ label varname yword + dq ?,?,?,? + restore done@local \\} + match , done@local \\{ varname vartype + restore done@local \\} \} + match ,done@local + \{ var + restore done@local \} + common + endl } diff --git a/programs/develop/ktcc/trunk/libc/public_stdcall.inc b/programs/develop/ktcc/trunk/libc/public_stdcall.inc new file mode 100644 index 0000000000..83bd601c14 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/public_stdcall.inc @@ -0,0 +1,7 @@ +macro public_stdcall name,size +{ + public name + public name#@#size + name: + name#@#size: +} diff --git a/programs/develop/ktcc/trunk/libc/start/start.asm b/programs/develop/ktcc/trunk/libc/start/start.asm new file mode 100644 index 0000000000..33cfee0375 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/start/start.asm @@ -0,0 +1,220 @@ +format ELF +section '.text' executable +public start +public start as '_start' +;extrn mf_init +extrn main +;include 'debug2.inc' +include '..\..\..\..\..\proc32.inc' +include '..\..\..\..\..\macros.inc' +include '..\..\..\..\..\dll.inc' +__DEBUG__=0 + +;start_: +virtual at 0 + db 'MENUET01' ; 1. Magic number (8 bytes) + dd 0x01 ; 2. Version of executable file + dd start ; 3. Start address +imgsz dd 0x0 ; 4. Size of image + dd 0x100000 ; 5. Size of needed memory + dd 0x100000 ; 6. Pointer to stack +hparams dd 0x0 ; 7. Pointer to program arguments +hpath dd 0x0 ; 8. Pointer to program path +end virtual + +start: +;DEBUGF 'Start programm\n' + ;init heap of memory + mov eax,68 + mov ebx,11 + int 0x40 + + mov [argc], 0 + mov eax, [hparams] + test eax, eax + jz .without_path + mov eax, path + cmp word ptr eax, 32fh ; '/#3' UTF8 + jne .without_path + mov word ptr eax, 12fh ; '/#1' fix to CP866 +.without_path: + mov esi, eax + call push_param +; retrieving parameters + mov esi, params + xor edx, edx ; dl - (1) (0) + ; dh - (1 , 0 ) + mov ecx, 1 ; cl = 1 + ; ch = 0 +.parse: + lodsb + test al, al + jz .run + test dl, dl + jnz .findendparam + ;{ + cmp al, ' ' + jz .parse ; , + mov dl, cl ; + cmp al, '"' + jz @f ; + mov dh, ch ; + dec esi + call push_param + inc esi + jmp .parse + + @@: + mov dh, cl ; + call push_param ; + jmp .parse ; } + +.findendparam: + test dh, dh + jz @f ; + cmp al, '"' + jz .clear + jmp .parse + @@: + cmp al, ' ' + jnz .parse + +.clear: + lea ebx, [esi - 1] + mov [ebx], ch + mov dl, ch + jmp .parse + +.run: + call load_imports + push argv + push [argc] + call main +.exit: + xor eax,eax + dec eax + int 0x40 + dd -1 +.crash: + jmp .exit +;============================ +push_param: +;============================ +;parameters +; esi - pointer +;description +; procedure increase argc +; and add pointer to array argv +; procedure changes ebx + mov ebx, [argc] + cmp ebx, max_parameters + jae .dont_add + mov [argv+4*ebx], esi + inc [argc] +.dont_add: + ret +;============================== + +;============================== +load_imports: +;============================== +;parameters +; none +;description +; imports must be located at end of image (but before BSS sections) +; the address of end of imports (next byte after imports) is located in imgsz +; look at each import from that address up to illegal import +; legal import is such that: +; first pointer points to procedure name +; and is smaller than imgsz +; second pointer points lo library name, starting with 0x55, 0xAA +; and is smaller than imgsz +; each library should be initialized as appropriate, once +; so as library is initialized, its name will be replaced 0x00 + mov ebx, [imgsz] ; byte after imports +.handle_next_import: + sub ebx, 4 ; ebx = pointer to pointer to library name + mov esi, dword[ebx] ; esi = pointer to library name + push ebx + push esi + call load_library ; eax = pointer to library exports + pop esi + pop ebx + test eax, eax + jz .done + sub ebx, 4 ; ebx = pointer to pointer to symbol name + push ebx + stdcall dll.GetProcAddress, eax, dword[ebx] + pop ebx + test eax, eax + jz .fail + mov dword[ebx], eax + jmp .handle_next_import +.done: + ret +.fail: + ret +;============================== + +;============================== +load_library: +;============================== +;parameters +; ebx: library name address +;description +; each library should be initialized as appropriate, once +; so as library is initialized, its name will be replaced 0x00 +; and 4 next bytes will be set to address of library + ; first two bytes of library name must be 0x55, 0xAA (is like a magic) + cld ; move esi further, not back + cmp esi, [imgsz] + ja .fail + lodsb ; al = first byte of library name + cmp al, 0x55 + jne .fail + lodsb ; al = second byte of library name + cmp al, 0xAA + jne .fail + lodsb ; al = third byte of library name (0x00 if the library is already loaded) + test al, al + jnz .load + lodsd ; if we here, then third byte is 0x00 => address of library is in next 4 bytes + ; now eax contains address of library + ret +.load: + dec esi ; we checked on 0 before, let's go back + mov eax, 68 + mov ebx, 19 + mov ecx, esi + int 0x40 ; eax = address of exports + mov byte[esi], 0 ; library is loaded, let's place 0 in first byte of name + mov [esi + 1], eax ; now next 4 bytes of library name are replaced by address of library + ; call lib_init + stdcall dll.GetProcAddress, eax, lib_init_str ; eax = address of lib_init + test eax, eax + jz .ret + stdcall dll.Init, eax +.ret: + mov eax, [esi + 1] ; put address of library into eax + ret +.fail: + mov eax, 0 + ret +;============================== + +lib_init_str db 'lib_init', 0 + +public argc as '__argc' +public params as '__argv' +public path as '__path' + +section '.bss' +buf_len = 0x400 +max_parameters=0x20 +argc rd 1 +argv rd max_parameters +path rb buf_len +params rb buf_len + +;section '.data' +;include_debug_strings ; ALWAYS present in data section diff --git a/programs/develop/ktcc/trunk/libc/start/start.old.asm b/programs/develop/ktcc/trunk/libc/start/start.old.asm new file mode 100644 index 0000000000..920aa984db --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/start/start.old.asm @@ -0,0 +1,143 @@ +format ELF +section '.text' executable +public start +public start as '_start' +;extrn mf_init +extrn main +;include 'debug2.inc' +__DEBUG__=0 + +;start_: +virtual at 0 + db 'MENUET01' ; 1. Magic number (8 bytes) + dd 0x01 ; 2. Version of executable file + dd start ; 3. Start address + dd 0x0 ; 4. Size of image + dd 0x100000 ; 5. Size of needed memory + dd 0x100000 ; 6. Pointer to stack +hparams dd 0x0 ; 7. Pointer to program arguments +hpath dd 0x0 ; 8. Pointer to program path +end virtual + +start: +;DEBUGF 'Start programm\n' + ;init heap of memory + mov eax,68 + mov ebx,11 + int 0x40 + +;DEBUGF ' path "%s"\n params "%s"\n', .path, .params +; check for overflow +;; that not work +; mov al, [path+buf_len-1] +; or al, [params+buf_len-1] +; jnz .crash +; check if path written by OS + mov [argc], 0 + mov eax, [hparams] + test eax, eax + jz .without_path + mov eax, path + cmp word ptr eax, 32fh ; '/#3' UTF8 + jne .without_path + mov word ptr eax, 12fh ; '/#1' fix to CP866 +.without_path: + mov esi, eax + call push_param +; retrieving parameters + mov esi, params + xor edx, edx ; dl - (1) (0) + ; dh - (1 , 0 ) + mov ecx, 1 ; cl = 1 + ; ch = 0 +.parse: + lodsb + test al, al + jz .run + test dl, dl + jnz .findendparam + ;{ + cmp al, ' ' + jz .parse ; , + mov dl, cl ; + cmp al, '"' + jz @f ; + mov dh, ch ; + dec esi + call push_param + inc esi + jmp .parse + + @@: + mov dh, cl ; + call push_param ; + jmp .parse ; } + +.findendparam: + test dh, dh + jz @f ; + cmp al, '"' + jz .clear + jmp .parse + @@: + cmp al, ' ' + jnz .parse + +.clear: + lea ebx, [esi - 1] + mov [ebx], ch + mov dl, ch + jmp .parse + +.run: +;DEBUGF 'call main(%x, %x) with params:\n', [argc], argv +if __DEBUG__ = 1 + mov ecx, [argc] + @@: + lea esi, [ecx * 4 + argv-4] + DEBUGF '0x%x) "%s"\n', cx, [esi] + loop @b +end if + push argv + push [argc] + call main +.exit: +;DEBUGF 'Exit from prog\n'; + xor eax,eax + dec eax + int 0x40 + dd -1 +.crash: +;DEBUGF 'E:buffer overflowed\n' + jmp .exit +;============================ +push_param: +;============================ +;parameters +; esi - pointer +;description +; procedure increase argc +; and add pointer to array argv +; procedure changes ebx + mov ebx, [argc] + cmp ebx, max_parameters + jae .dont_add + mov [argv+4*ebx], esi + inc [argc] +.dont_add: + ret +;============================== +public argc as '__argc' +public params as '__argv' +public path as '__path' + +section '.bss' +buf_len = 0x400 +max_parameters=0x20 +argc rd 1 +argv rd max_parameters +path rb buf_len +params rb buf_len + +;section '.data' +;include_debug_strings ; ALWAYS present in data section diff --git a/programs/develop/ktcc/trunk/libc/stdio/clearerr.c b/programs/develop/ktcc/trunk/libc/stdio/clearerr.c new file mode 100644 index 0000000000..7f0e8a0106 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/clearerr.c @@ -0,0 +1,22 @@ +#include +#include + +void clearerr ( FILE * stream ) +{ + errno = 0; +} + +int ferror ( FILE * stream ) +{ + return errno; +} + +void perror ( const char * str ) +{ + char *msg = strerror(errno); + + if (str) + fprintf(stderr, "%s:%s\n", str, msg); + else + fprintf(stderr, "%s\n", msg); +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/conio.c b/programs/develop/ktcc/trunk/libc/stdio/conio.c new file mode 100644 index 0000000000..a91ca92668 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/conio.c @@ -0,0 +1,102 @@ +#include +#include + +char* con_caption = "Console app"; +extern int __argc; +extern char** __argv; +extern char* __path; +dword *con_dll_ver; +int __console_initdll_status; + +char* con_dllname="/sys/lib/console.obj"; + +struct import{ + char *name; + void *data; +}; + +void stdcall (*con_init)(dword wnd_width, dword wnd_height, + dword scr_width, dword scr_height, const char* title); +void stdcall (*con_exit)(int bCloseWindow); +void stdcall (*con_set_title)(const char* title); +void stdcall (*con_write_asciiz)(const char* str); +void stdcall (*con_write_string)(const char* str, dword length); +int cdecl (*con_printf)(const char* format, ...); +dword stdcall (*con_get_flags)(void); +dword stdcall (*con_set_flags)(dword new_flags); +int stdcall (*con_get_font_height)(void); +int stdcall (*con_get_cursor_height)(void); +int stdcall (*con_set_cursor_height)(int new_height); +int stdcall (*con_getch)(void); +word stdcall (*con_getch2)(void); +int stdcall (*con_kbhit)(void); +char* stdcall (*con_gets)(char* str, int n); +char* stdcall (*con_gets2)(con_gets2_callback callback, char* str, int n); +void stdcall (*con_cls)(); +void stdcall (*con_get_cursor_pos)(int* px, int* py); +void stdcall (*con_set_cursor_pos)(int x, int y); + + +// don't change order in this! linked by index +char* con_imports[] = { + "START", "version", "con_init", "con_write_asciiz", "con_write_string", + "con_printf", "con_exit", "con_get_flags", "con_set_flags", "con_kbhit", + "con_getch", "con_getch2", "con_gets", "con_gets2", "con_get_font_height", + "con_get_cursor_height", "con_set_cursor_height", "con_cls", + "con_get_cursor_pos", "con_set_cursor_pos", "con_set_title", + (char*)0 +}; + +void con_lib_link(struct import *exp, char** imports){ + + con_dll_ver = _ksys_cofflib_getproc(exp, imports[1]); + con_init = _ksys_cofflib_getproc(exp, imports[2]); + con_write_asciiz = _ksys_cofflib_getproc(exp, imports[3]); + con_write_string = _ksys_cofflib_getproc(exp, imports[4]); + con_printf = _ksys_cofflib_getproc(exp, imports[5]); + con_exit = _ksys_cofflib_getproc(exp, imports[6]); + con_get_flags = _ksys_cofflib_getproc(exp, imports[7]); + con_set_flags = _ksys_cofflib_getproc(exp, imports[8]); + con_kbhit = _ksys_cofflib_getproc(exp, imports[9]); + con_getch = _ksys_cofflib_getproc(exp, imports[10]); + con_getch2 = _ksys_cofflib_getproc(exp, imports[11]); + con_gets = _ksys_cofflib_getproc(exp, imports[12]); + con_gets2 = _ksys_cofflib_getproc(exp, imports[13]); + con_get_font_height = _ksys_cofflib_getproc(exp, imports[14]); + con_get_cursor_height=_ksys_cofflib_getproc(exp, imports[15]); + con_set_cursor_height=_ksys_cofflib_getproc(exp, imports[16]); + con_cls = _ksys_cofflib_getproc(exp, imports[17]); + con_get_cursor_pos = _ksys_cofflib_getproc(exp, imports[18]); + con_set_cursor_pos = _ksys_cofflib_getproc(exp, imports[19]); + con_set_title = _ksys_cofflib_getproc(exp, imports[20]); +} + + +int con_init_console_dll(void) +{ + return con_init_console_dll_param(-1, -1, -1, -1, con_caption); +} + + +int con_init_console_dll_param(dword wnd_width, dword wnd_height, + dword scr_width, dword scr_height, const char* title) +/* work as con_init_console_dll, but call con_init with params +*/ +{ + struct import * hDll; + + if (__console_initdll_status == 1) return 0; + + if((hDll = (struct import *)_ksys_cofflib_load(con_dllname)) == 0){ + debug_out_str("can't load lib\n"); + return 1; + } + con_lib_link(hDll, con_imports); + + con_init(wnd_width, wnd_height, scr_width, scr_height, title); + + __console_initdll_status = 1; + + return 0; +} + diff --git a/programs/develop/ktcc/trunk/libc/stdio/debug.c b/programs/develop/ktcc/trunk/libc/stdio/debug.c new file mode 100644 index 0000000000..be8d62514d --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/debug.c @@ -0,0 +1,13 @@ +#include +#include +#include + +void debug_printf(const char *format,...) +{ + va_list ap; + char log_board[300]; + va_start (ap, format); + vsnprintf(log_board, sizeof log_board, format, ap); + va_end(ap); + debug_out_str(log_board); +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fclose.c b/programs/develop/ktcc/trunk/libc/stdio/fclose.c new file mode 100644 index 0000000000..2475ba0329 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fclose.c @@ -0,0 +1,20 @@ +#include +#include +#include + +int fclose(FILE* file) +{ + if(!file) + { + errno = E_INVALIDPTR; + return EOF; + } + + if(file->buffer) + free(file->buffer); + if(file->filename) + free(file->filename); + free(file); + + return 0; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/feof.c b/programs/develop/ktcc/trunk/libc/stdio/feof.c new file mode 100644 index 0000000000..f74639ddc3 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/feof.c @@ -0,0 +1,11 @@ +#include +int feof(FILE* file) +{ + if(!file) + { + errno = E_INVALIDPTR; + return EOF; + } + + return file->filepos>=file->filesize; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fflush.c b/programs/develop/ktcc/trunk/libc/stdio/fflush.c new file mode 100644 index 0000000000..24f8d7d2fa --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fflush.c @@ -0,0 +1,9 @@ +#include +int fflush(FILE* file) +// file can be zero, as flush all +{ + if (file && (file->mode & 3)==FILE_OPEN_READ) + return 0; + + return(0); // always good, as no write buffering +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fgetc.c b/programs/develop/ktcc/trunk/libc/stdio/fgetc.c new file mode 100644 index 0000000000..01299755db --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fgetc.c @@ -0,0 +1,11 @@ +#include +int fgetc(FILE* file) +{ + int c = 0, rc; + + rc = fread(&c, 1, 1, file); + + if (rc < 1) return EOF; + + return c; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fgetpos.c b/programs/develop/ktcc/trunk/libc/stdio/fgetpos.c new file mode 100644 index 0000000000..d71d203230 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fgetpos.c @@ -0,0 +1,13 @@ +#include +int fgetpos(FILE* file,fpos_t* pos) +{ + if(!file || !pos) + { + errno = E_INVALIDPTR; + return EOF; + } + + *pos=file->filepos; + + return 0; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fgets.c b/programs/develop/ktcc/trunk/libc/stdio/fgets.c new file mode 100644 index 0000000000..1fca699929 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fgets.c @@ -0,0 +1,34 @@ +#include + +char * fgets ( char * str, int num, FILE * file ) +// need to ignore \r\n in text mode +{ + int rd = 0; + char c; + + if(!file || !str) + { + errno = E_INVALIDPTR; + return NULL; + } + + + while (rd < num - 1) + { + c = fgetc(file); + if (EOF == c) break; + if ('\n' == c) + { + str[rd++] = c; + break; + } + else + str[rd++] = c; + } + if (0 == rd) return NULL; + else + { + str[rd] = '\0'; + return str; + } +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fopen.c b/programs/develop/ktcc/trunk/libc/stdio/fopen.c new file mode 100644 index 0000000000..ef78d97a28 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fopen.c @@ -0,0 +1,142 @@ +#include +#include +#include + +int errno = 0; + +/* +// removed by Seiemargl 26-oct-2018 +// use get_current_folder() from kos32sys.h instead + + +extern char __argv; +extern char __path; + +// convert relative to program path ./file.txt to absolute +const char* getfullpath(const char *path){ + + + int relpath_pos, localpath_size; + char *programpath; + char *newpath; + char *prgname; + + if (path[0] == '/') // + { + return(strdup(path)); // dup need as free in fclose() + } + + relpath_pos = 0; + if (path[0] == '.' && path[1] == '/') + { + //detected relative path, begins with ./ + relpath_pos=2; + } + + programpath=&__path; + + //if we here than path is a relative or local + prgname = strrchr(programpath, '/'); + if (!prgname) return strdup(path); + + localpath_size = prgname - programpath + 1; + + newpath = malloc(FILENAME_MAX); + if(!newpath) + { + errno = E_NOMEM; + return NULL; + } + //copy local path to the new path + strncpy(newpath, programpath, localpath_size); + newpath[localpath_size] = 0; + + //copy filename to the new path + strcpy(newpath + localpath_size, path + relpath_pos); + + return(newpath); +} +*/ + + +FILE* fopen(const char* filename, const char *mode) +{ + FILE* res; + int imode, sz = -1; + char *fullname; + + imode=0; + if (*mode=='r') + { + imode=FILE_OPEN_READ; + mode++; + }else if (*mode=='w') + { + imode=FILE_OPEN_WRITE; + mode++; + }else if (*mode=='a') + { + imode=FILE_OPEN_APPEND; + mode++; + }else + return 0; + if (*mode=='+') + { + imode|=FILE_OPEN_PLUS; + mode++; + } + if (*mode=='t') + { + imode|=FILE_OPEN_TEXT; + mode++; + }else if (*mode=='b') + mode++; + if (*mode=='+') + { + imode|=FILE_OPEN_PLUS; + mode++; + } + if (*mode!=0) + return NULL; + +// fullname = (char*)getfullpath(filename); + fullname = strdup(filename); + if ((imode & 3) == FILE_OPEN_READ && fullname) /* check existense */ + { + sz = _ksys_get_filesize(fullname); + if (sz < 0) + { + free(fullname); + errno = sz; + return NULL; + } + } + + res = malloc(sizeof(FILE)); + if (res) + { + res->buffer=malloc(BUFSIZ); + res->buffersize=BUFSIZ; + res->filesize=0; + res->filepos=0; + res->mode=imode; + res->filename=fullname; + res->ungetc_buf = EOF; + res->buffer_start = -1; + res->buffer_end = -1; + } + if(!res || !res->buffer || !res->filename) + { + errno = E_NOMEM; + return NULL; + } + + if ((imode & 3) == FILE_OPEN_READ || (imode & 3) == FILE_OPEN_APPEND) + { + if (sz > 0) /*already got*/ + res->filesize = sz; + else + res->filesize=_ksys_get_filesize(res->filename); + } + return res; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/format_print.c b/programs/develop/ktcc/trunk/libc/stdio/format_print.c new file mode 100644 index 0000000000..5cf6d379c5 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/format_print.c @@ -0,0 +1,639 @@ +/* + function for format output to the string + +Siemargl update formats as http://www.cplusplus.com/reference/cstdio/printf/, no wchar though +http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap05.html is used too +%g explain https://support.microsoft.com/en-us/kb/43392 + +todo: +-fix precision in %g +-%u printed as signed, %x, %o also is promoted to long long +// FAIL 0x0FFFF7A7E as %x - signed long promotes sign, need %llx or %Lx and type conversion +-%a +-%n nothing printed +-%17.18f digits maximum format +-use %C as w_char L'x' (non standard extension) +-radix point always '.', no LOCALEs +*/ + + +#include +#include +#include +#include +#include + +enum flags_t +{ + flag_unsigned = 0x02, + flag_register = 0x04, + flag_plus = 0x08, + flag_left_just = 0x10, + flag_lead_zeros = 0x20, + flag_space_plus = 0x40, + flag_hash_sign = 0x80, + flag_point = 0x100 +}; +int formatted_double_to_string(long double number, int format1, int format2, char *s, int flags); +int formatted_double_to_string_scientific(long double number, int format1, int format2, char *s, int flags); +int formatted_long_to_string(long long number, int format1, int prec, char *s, int flags); +int formatted_hex_to_string(unsigned long long number, int fmt1, int prec, char *s, int flags); +int formatted_octa_to_string(unsigned long long number, int fmt1, int prec, char *s, int flags); + + +int formatted_double_special(long double number, char *s) +// return 0 if no special values: NAN, INF. -0.0 ignored +// http://steve.hollasch.net/cgindex/coding/ieeefloat.html +{ + struct IEEExp { + unsigned manl:32; + unsigned manh:32; + unsigned exp:15; + unsigned sign:1; + } *ip = (struct IEEExp *)&number; + + if (ip->exp != 0x7fff) return 0; + + if (ip->manh == 0x80000000 && ip->manl == 0) // Inf + { + if(ip->sign) + strcpy(s, "-INF"); + else + strcpy(s, "+INF"); + } else + if (ip->manh & ~0x7fffffff) + strcpy(s, "QNaN"); + else + strcpy(s, "SNaN"); + + return 4; +} + +int copy_and_align(char *dest, int width, char *src, int src_len, char sign, int flags) +// alingn number in buffer, put sign and fills additional places +// flags used only flag_left_just and flag_lead_zeros +// sign can be zero, 0, x, X, space, +, - +{ + int rc = 0, sign_len; + char fill; + + fill = (flags & flag_lead_zeros)&&((flags & flag_left_just)==0) ? '0' : ' '; + if(sign == 'x' || sign == 'X') + { + sign_len = 2; + } else + if (sign) + sign_len = 1; + else + sign_len = 0; + + if ((flags & flag_left_just) || (src_len + sign_len >= width)) // left justify or no room + { + if (sign) + { + if(sign == 'x' || sign == 'X') + { + dest[0] = '0'; + dest[1] = sign; + memcpy(dest + 2, src, src_len); + rc = src_len + 2; + } else + { // single sign + dest[0] = sign; + memcpy(dest + 1, src, src_len); + rc = src_len + 1; + } + } else + { + memcpy(dest, src, src_len); + rc = src_len; + } + if (rc < width) + { + memset(dest + rc, fill, width - rc); + rc = width; + } + } else // right justify and fill + { + rc = width; + memcpy(dest + width - src_len, src, src_len); + memset(dest, fill, width - src_len); + if (flags & flag_lead_zeros) + { + if(sign == 'x' || sign == 'X') + { + dest[0] = '0'; + dest[1] = sign; + } else + if (sign) dest[0] = sign; + } else + { + if(sign == 'x' || sign == 'X') + { + dest[width - src_len - 2] = '0'; + dest[width - src_len - 1] = sign; + } else + if (sign) dest[width - src_len - 1] = sign; + } + } + return rc; +} + +int formatted_double_to_string_scientific(long double number, int format1, int format2, char *s, int flags) +{ + long double norm_digit; + long mul = 0; + char sign = 0; + char buf[50]; + int len; + + if((flags & flag_point) == 0) format2 = 6; // default prec if no point spec + + len = formatted_double_special(number, buf); + if (len == 0) + { + if (number < 0) { sign = '-'; norm_digit = -number; } + else + { + norm_digit = number; + if (flags & flag_plus) sign = '+'; else + if (flags & flag_space_plus) sign = ' '; + } + // normalize + while (norm_digit < 1.0 && norm_digit > 0) { norm_digit *= 10; mul--; } + while (norm_digit >= 10.0) { norm_digit /= 10; mul++; } + + len = formatted_double_to_string(norm_digit, 0, format2, buf, flags & ~(flag_plus | flag_space_plus)); + + if (flags & flag_register) + buf[len++] = 'E'; + else + buf[len++] = 'e'; + + len += formatted_long_to_string(mul, 0, 3, buf + len, flag_plus | flag_lead_zeros); + } + else + flags &= ~flag_lead_zeros; // no need for INF, NAN + + len = copy_and_align(s, format1, buf, len, sign, flags); + + return len; +} + +int formatted_double_to_string(long double number, int format1, int format2, char *s, int flags) +{ + long double nafter, beforpointdigit; + long long intdigit, mul; + int div; + int i; + char sign = 0; + int fmt1; + int fmt2; + char buf[100], *pbuf = buf; + char buf_low[50], *pbuf_lo = buf_low; + + if((flags & flag_point) == 0) format2 = 6; // default prec if no point spec + + i = formatted_double_special(number, buf); + if (i == 0) + { + if (number < 0) {sign = '-'; number = -number; } + else + { + if (flags & flag_plus) sign = '+'; else + if (flags & flag_space_plus) sign = ' '; + } + + fmt1 = 1; + fmt2 = format2; + if (fmt2 > 18) fmt2 = 18; //maximum size of long long type + + beforpointdigit = floor(number + 0.00000000000001); + nafter = number - beforpointdigit; + + //print part of number before point + mul = 1; + for(i = 0; i < sizeof buf - 1; i++) + { + mul *= 10; + if ((beforpointdigit/mul) < 1.0) { fmt1 = i + 1; break; } + } + if (i == sizeof buf - 1 || fmt1 > 17) + { + strcpy(s, "[too big number for %f, %a]"); + return strlen(s); + } + + mul /= 10; + while(mul > 1) + { + div = beforpointdigit / mul; + *pbuf++ = (char)div + '0'; + beforpointdigit = beforpointdigit - div * mul; + mul /= 10; + } + *pbuf++=(char)beforpointdigit + '0'; + + //print part of number after point + mul = 1; + for(i = 0; i < fmt2; i++) + { + nafter = nafter*10; + mul *= 10; + } + + intdigit = roundl(nafter); + + mul /= 10; + for(i = 0; i < fmt2 - 1; i++) + { + div = intdigit / mul; + *pbuf_lo++=(char)div + '0'; + intdigit = intdigit - div * mul; + mul /= 10; + if (mul == 1) break; + } + *pbuf_lo++ = (char)intdigit + '0'; + + // form full number + if (roundl(nafter) != 0 || fmt2 != 0) + { + *pbuf++ = '.'; + memcpy(pbuf, buf_low, pbuf_lo - buf_low); pbuf += pbuf_lo - buf_low; + } else if (flags & flag_hash_sign) + *pbuf++ = '.'; + } + else + { + flags &= ~flag_lead_zeros; // no need for INF, NAN + pbuf += i; + } + + return copy_and_align(s, format1, buf, pbuf - buf, sign, flags); +} + +int formatted_long_to_string(long long number, int format1, int prec, char *s, int flags) +{ + int i; + int fmt; + char sign = 0; + long long digit; + long long mul; + int div; + char buf[100], *pbuf = buf; + + if (number == -9223372036854775807LL - 1) // overflow all our math, cant minus this + { + strcpy(s, "-9223372036854775808"); + return strlen(s); + } + + if (flags & flag_point) flags &= ~flag_lead_zeros; // conflicting flags + + if (number < 0) {sign = '-'; number = -number; } + else + { + if (flags & flag_plus) sign = '+'; else + if (flags & flag_space_plus) sign = ' '; + } + + digit = number; + + mul = (digit < 0) ? -1 : 1; + + for(i = 0; i < sizeof buf - 2; i++) + { + if (digit / mul < 10) { fmt = i + 1; break; } + mul *= 10; + } + + // add leading zeros by prec + for(i = 0; i < prec - fmt; i++) *pbuf++ = '0'; + + for(i = 0; i < fmt - 1; i++) + { + div = digit / mul; + *pbuf++ = (char)div + '0'; + digit = digit - div * mul; + mul /= 10; + if (mul == 1 || mul == -1) break; + } + *pbuf++ = (char)digit + '0'; + + return copy_and_align(s, format1, buf, pbuf - buf, sign, flags); +} + +int formatted_hex_to_string(unsigned long long number, int fmt1, int prec, char *s, int flags) +{ + unsigned long long digit, mul; + int i, div, fmt; + char xdigs_lower[16]="0123456789abcdef"; + char xdigs_upper[16]="0123456789ABCDEF"; + char buf[50], *pbuf = buf, sign; + + if (number == -9223372036854775807LL - 1) // overflow all our math, cant minus this + { + strcpy(buf, "FFFFFFFFFFFFFFFF"); + pbuf += strlen(buf); + } + else + { + if (flags & flag_point) flags &= ~flag_lead_zeros; // conflicting flags + + digit = number; + + mul = (digit < 0) ? -1 : 1; + + for(i = 0; i < sizeof buf - 2; i++) + { + if (digit / mul < 16) { fmt = i + 1; break; } + mul <<= 4; + } + + // add leading zeros by prec + for(i = 0; i < prec - fmt; i++) *pbuf++ = '0'; + + for(i = 0; i < fmt - 1; i++) + { + div = digit / mul; + *pbuf++ = (flags & flag_register) ? xdigs_upper[div] : xdigs_lower[div]; + digit = digit - div * mul; + mul >>= 4; + if (mul == 1 || mul == -1) break; + } + *pbuf++ = (flags & flag_register) ? xdigs_upper[digit] : xdigs_lower[digit]; + } + + sign = 0; + if(flags & flag_hash_sign) + sign = (flags & flag_register) ? 'X' : 'x'; + + return copy_and_align(s, fmt1, buf, pbuf - buf, sign, flags); +} + +int formatted_octa_to_string(unsigned long long number, int fmt1, int prec, char *s, int flags) +{ + unsigned long long digit, mul; + int i, div, fmt; + char xdigs_lower[16]="01234567"; + char buf[50], *pbuf = buf; + + if (number == -9223372036854775807LL - 1) // overflow all our math, cant minus this + { + strcpy(buf, "1777777777777777777777"); + pbuf += strlen(buf); + } + else + { + if (flags & flag_point) flags &= ~flag_lead_zeros; // conflicting flags + + digit = number; + + mul = (digit < 0) ? -1 : 1; + + for(i = 0; i < sizeof buf - 2; i++) + { + if (digit / mul < 8) { fmt = i + 1; break; } + mul <<= 3; + } + + // add leading zeros by prec + for(i = 0; i < prec - fmt; i++) *pbuf++ = '0'; + + for(i = 0; i < fmt - 1; i++) + { + div = digit / mul; + *pbuf++ = xdigs_lower[div & 0x7]; + digit = digit - div * mul; + mul >>= 3; + if (mul == 1 || mul == -1) break; + } + *pbuf++ = xdigs_lower[digit]; + } + + return copy_and_align(s, fmt1, buf, pbuf - buf, (flags & flag_hash_sign) ? '0' : 0, flags); +} + +//int vsnprintf (char * s, size_t n, const char * format, va_list arg ); +int format_print(char *dest, size_t maxlen, const char *fmt0, va_list argp) +{ + int i; + int length; + int fmt1, fmt2; // width, precision + size_t pos, posc; + long long intdigit; + long double doubledigit; + const char *fmt, *fmtc; // first point to %, fmtc points to specifier + char *s; // pointer to current dest char + char *str; + char buf[200]; // buffer for current argument value print representation + int format_flag; + int flag_long; // 2 = long double or long long int or wchar + int *point_to_n = NULL; + int flags; // parsed flags + + fmt = fmt0; + s = dest; + pos = 0; + while(pos < maxlen) + { + if (*fmt != '%') // usual char + { + if ('\0' == (*s++ = *fmt++)) break; + pos++; + continue; + } + + if (*(fmt + 1) == '%') // %% + { + *s++ = '%'; pos++; + fmt += 2; + continue; + } + //checking to containg format in the string + fmtc = fmt; + posc = pos; + + flags = 0; + format_flag = 0; + flag_long = 0; // 2 = long double or long long int or wchar + + while(*fmtc != '\0' && !format_flag) // searching end of format + { + fmtc++; posc++; + switch( *fmtc ) + { + case 'a': + format_flag = 1; + flags |= flag_unsigned; + break; + case 'A': + format_flag = 1; + flags |= flag_unsigned | flag_register; + break; + case 'c': case 'd': case 'i': case 'e': case 'f': case 'g': case 's': case 'n': + format_flag = 1; + break; + case 'E': case 'F': case 'G': + format_flag = 1; + flags |= flag_register; + break; + case 'l': + flag_long = flag_long ? 2 : 1; // ll.eq.L + break; + case 'L': + flag_long = 2; + break; + case 'o': case 'u': case 'x': case 'p': + format_flag = 1; + flags |= flag_unsigned; + break; + case 'X': case 'P': + format_flag = 1; + flags |= flag_unsigned | flag_register; + break; + case '+': + flags |= flag_plus; + break; + case '-': + flags |= flag_left_just; + break; + case ' ': // space + flags |= flag_space_plus; + break; + case '#': + flags |= flag_hash_sign; + break; + case '*': case '.': // just skip + break; + default: + if(isdigit(*fmtc)) break; + strncpy(dest, "print format error - in % invalid char found", maxlen); + return -1; // non format char found - user error + } + } + + if (format_flag == 0) + { + strncpy(dest, "print format error - % without format specifier", maxlen); + return -1; // format char not found - user error + } + + fmt1 = 0; + fmt2 = 0; + if (posc - pos > 1) // try to read width, precision + { + fmt++; + for(i = pos + 1; i < posc; i++) + { + switch(*fmt) + { + case '0': + if(fmt1 == 0 && (flags & flag_point) == 0) flags |= flag_lead_zeros; + case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + if ((flags & flag_point) == 0) + fmt1 = fmt1 * 10 + (*fmt -'0'); + else + fmt2 = fmt2 * 10 + (*fmt -'0'); + break; + case '*': + if (flag_point == 0) + fmt1 = va_arg(argp, int); + else + fmt2 = va_arg(argp, int); + break; + case '.': + flags |= flag_point; + break; + case 'l': case 'L': case '+': // valid chars - skip + case '-': case ' ': case '#': + break; + default: // must be error + strncpy(dest, "print format error - %width.precision", maxlen); + return -1; // format char not found - user error + } + fmt++; + } + } + + // do real work - format arguments values + length = 0; + switch(*fmtc) + { + case 'n': + point_to_n = va_arg(argp, int*); + break; + case 'c': + if (pos + 1 <= maxlen) + { + buf[0] = (char)va_arg(argp, int); + length = 1; + } + break; + case 's': // special case - without buf + str = va_arg(argp, char*); + length = strlen(str); + if ((flags & flag_point) && (length > fmt2)) length = fmt2; // cut by precision + if (pos + length > maxlen) length = maxlen - pos; + memcpy(s, str ,length); + s += length; + pos += length; + break; + case 'd': case 'i': case 'u': case 'U': + if (flag_long == 0) intdigit = va_arg(argp, int); else + if (flag_long == 1) intdigit = va_arg(argp, long); else + if (flag_long == 2) intdigit = va_arg(argp, long long); + length = formatted_long_to_string(intdigit, fmt1, fmt2, buf, flags); + break; + case 'o': + if (flag_long == 0) intdigit = va_arg(argp, int); else + if (flag_long == 1) intdigit = va_arg(argp, long); else + if (flag_long == 2) intdigit = va_arg(argp, long long); + length = formatted_octa_to_string(intdigit, fmt1, fmt2, buf, flags); + break; + case 'p': case 'P': case 'x': case 'X': + if (flag_long == 0) intdigit = va_arg(argp, int); else + if (flag_long == 1) intdigit = va_arg(argp, long); else + if (flag_long == 2) intdigit = va_arg(argp, long long); + length=formatted_hex_to_string(intdigit, fmt1, fmt2, buf, flags); + break; + case 'a': case 'A': case 'f': case 'F': + if (flag_long <= 1) doubledigit = va_arg(argp, double); else + if (flag_long == 2) doubledigit = va_arg(argp, long double); + length = formatted_double_to_string(doubledigit, fmt1, fmt2, buf, flags); + break; + case 'e': case 'E': + if (flag_long <= 1) doubledigit = va_arg(argp, double); else + if (flag_long == 2) doubledigit = va_arg(argp, long double); + length = formatted_double_to_string_scientific(doubledigit, fmt1, fmt2, buf, flags); + break; + case 'g': case 'G': + //prec special case, this is just workaround + if (flag_long <= 1) doubledigit = va_arg(argp, double); else + if (flag_long == 2) doubledigit = va_arg(argp, long double); + if (flags & flag_point) + length = formatted_double_to_string(doubledigit, fmt1, fmt2, buf, flags); + else + length = formatted_double_to_string(doubledigit, fmt1, 1, buf, flags | flag_point); + i = formatted_double_to_string_scientific(doubledigit, fmt1, fmt2, buf + sizeof buf / 2, flags); + if(length > i) + { + memcpy(buf, buf + sizeof buf / 2, i); + length = i; + } + break; + } + if (*fmtc != 's' && length > 0) // skip multiple string copying + { + if (pos + length > maxlen) length = maxlen - pos; + memcpy(s, buf, length); + s += length; + pos += length; + } + fmt = fmtc + 1; + } + + if (point_to_n) *point_to_n = pos; + return(pos); +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/format_scan.c b/programs/develop/ktcc/trunk/libc/stdio/format_scan.c new file mode 100644 index 0000000000..18de59b0d6 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/format_scan.c @@ -0,0 +1,417 @@ +/* + function for format read from any source + +Siemargl formats as http://www.cplusplus.com/reference/cstdio/scanf/, no wchar though +http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap05.html is used too + +todo: +[characters], [^characters] +-%n nothing scanned, filled only if good result +-%d, i, u, o, x, p read similar - detect base by prefix 0 or 0x +-%a +-can overflow unsigned as signed +-radix point always '.', no LOCALEs +*/ + + +#include +#include +#include +#include +typedef int (*virtual_getc)(void *sp, const void *obj); +typedef void (*virtual_ungetc)(void *sp, int c, const void *obj); + +enum flags_t +{ + flag_unsigned = 0x02, + flag_register = 0x04, + flag_plus = 0x08, + flag_left_just = 0x10, + flag_lead_zeros = 0x20, + flag_space_plus = 0x40, + flag_hash_sign = 0x80, + flag_point = 0x100 +}; + +int try_parse_real(long double *real, int ch, const void *src, void *save, virtual_getc vgetc, virtual_ungetc vungetc) +// returns 1 if OK, -1 == EOF, -2 parse broken +{ + int sign = 1, have_digits = 0; + long long div; + + if (ch == '+') + { + ch = vgetc(save, src); + if (ch == EOF) return EOF; + } else + if (ch == '-') + { + sign = -1; + ch = vgetc(save, src); + if (ch == EOF) return EOF; + }; + *real = 0.0; + for (;;) // mantissa before point + { + // test ch is valid + if (isdigit(ch)) + { + *real = *real * 10 + ch - '0'; + have_digits++; + ch = vgetc(save, src); + if (ch == EOF || isspace(ch)) break; // ok, just finish num + } else + if (ch == '.' || ch == 'E' || ch == 'e') + { + break; // ok + } + else + { + vungetc(save, ch, src); + break; + } + } + if (ch != '.' && ch != 'E' && ch != 'e') // ok, just integer part + { + *real *= sign; + if (have_digits) + return 1; + else + return -2; + } + + if(ch == '.') + { + ch = vgetc(save, src); + div = 10; // use as divisor + for (;;) // mantissa after point + { + // test ch is valid + if (isdigit(ch)) + { + *real += (double)(ch - '0') / div; + div *= 10; + have_digits++; + ch = vgetc(save, src); + if (ch == EOF || isspace(ch)) break; // ok, just finish num + } else + if (ch == 'E' || ch == 'e') + { + break; // ok + } + else + { + vungetc(save, ch, src); + break; + } + } + if (ch != 'E' && ch != 'e') // ok, real as XX.YY + { + *real *= sign; + if (have_digits) + return 1; + else + return -2; + } + } + + ch = vgetc(save, src); + *real *= sign; + // exponent + sign = 1; + if (ch == '+') + { + ch = vgetc(save, src); + if (ch == EOF) return EOF; + } else + if (ch == '-') + { + sign = -1; + ch = vgetc(save, src); + if (ch == EOF) return EOF; + }; + div = 0; + for (;;) + { + // test ch is valid + if (isdigit(ch)) + { + div = div * 10 + ch - '0'; + ch = vgetc(save, src); + if (ch == EOF || isspace(ch)) break; // ok, just finish num + } + else + { + vungetc(save, ch, src); + break; + } + } + div *= sign; + *real *= pow(10, div); + + return 1; +} + +int try_parse_int(long long *digit, int ch, const void *src, void *save, virtual_getc vgetc, virtual_ungetc vungetc) +{ + int sign = 1, base = 10, have_digits = 0; + + if (ch == '+') + { + ch = vgetc(save, src); + if (ch == EOF) return EOF; + } else + if (ch == '-') + { + sign = -1; + ch = vgetc(save, src); + if (ch == EOF) return EOF; + }; + + if (ch == '0') // octal or hex, read next + { + base = 8; + ch = vgetc(save, src); + if (ch == EOF || isspace(ch)) + have_digits++; + else + if (ch == 'x' || ch == 'X') + { + base = 16; + ch = vgetc(save, src); + if (ch == EOF) return EOF; + } + } + *digit = 0; + for (;;) + { + // test ch is valid + if ((isdigit(ch) && base == 10) || + (isdigit(ch) && base == 8 && ch < '8') || + (isxdigit(ch) && base == 16)) + { + if (base == 16) + { + if (ch <= '9') ch-= '0'; + else + if (ch <= 'F') ch = 10 + ch - 'A'; + else + ch = 10 + ch - 'a'; + } + else + ch -= '0'; + *digit = *digit * base + ch; + have_digits++; + ch = vgetc(save, src); + if (ch == EOF || isspace(ch)) break; // ok, just finish num + } + else if (ch == EOF || isspace(ch)) + break; + else + { + vungetc(save, ch, src); + break; + } + } + *digit *= sign; + if (have_digits) + return 1; + else + return -2; +} + + + +int format_scan(const void *src, const char *fmt, va_list argp, virtual_getc vgetc, virtual_ungetc vungetc) +{ + int i; + int length; + int fmt1, fmt2; // width, precision + size_t pos, posc; + const char *fmtc; // first point to %, fmtc points to specifier + int ch; + int format_flag; + int flag_long; // 2 = long double or long long int or wchar + int *point_to_n = NULL, nread = 0; + int flags; // parsed flags + int save = 0; + char *arg_str; + int *arg_int; + long *arg_long; + long long *arg_longlong; + float *arg_float; + double *arg_double; + long double *arg_longdouble; + long long digit; + long double real; + + + pos = 0; + while(*fmt) + { + while (*fmt && isspace(*fmt)) fmt++; // skip paces in format str + + if (*fmt != '%') // usual char + { + ch = vgetc(&save, src); + if (ch != *fmt++) // char not match format + { + vungetc(&save, ch, src); + break; + } + pos++; + continue; + } + + if (*(fmt + 1) == '%') // %% + { + ch = vgetc(&save, src); + if (ch != '%') // char not match format + { + vungetc(&save, ch, src); + break; + } + pos++; + fmt += 2; + continue; + } + //checking to containg format in the string + fmtc = fmt; + posc = pos; + + flags = 0; + format_flag = 0; + flag_long = 0; // 2 = long double or long long int or wchar + + while(*fmtc != '\0' && !format_flag) // searching end of format + { + fmtc++; posc++; + switch( *fmtc ) + { + case 'a': + format_flag = 1; + flags |= flag_unsigned; + break; + case 'c': case 'd': case 'i': case 'e': case 'f': case 'g': case 's': case 'n': + format_flag = 1; + break; + case 'l': + flag_long = flag_long ? 2 : 1; // ll.eq.L + break; + case 'L': + flag_long = 2; + break; + case 'o': case 'u': case 'x': case 'p': + format_flag = 1; + flags |= flag_unsigned; + break; + case '*': case '.': // just skip + break; + default: + if(isdigit(*fmtc)) break; + goto exit_me; // non format char found - user error + } + } + + if (format_flag == 0) + { + goto exit_me; // format char not found - user error + } + + fmt1 = 0; + fmt2 = 0; + if (posc - pos > 1) // try to read width, precision + { + fmt++; + for(i = pos + 1; i < posc; i++) + { + switch(*fmt) + { + case '0': + if(fmt1 == 0 && (flags & flag_point) == 0) flags |= flag_lead_zeros; + case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + if ((flags & flag_point) == 0) + fmt1 = fmt1 * 10 + (*fmt -'0'); + else + fmt2 = fmt2 * 10 + (*fmt -'0'); + break; + case '*': // ignoring + break; + case '.': + flags |= flag_point; + break; + case 'l': case 'L': // valid chars - skip + break; + default: // must be error + goto exit_me; // format char not found - user error + } + fmt++; + } + } + + // do real work - format arguments values + // skip input spaces + do { + ch = vgetc(&save, src); + if (ch == EOF) goto exit_me; + } while (isspace(ch)); + + switch(*fmtc) + { + case 'n': + point_to_n = va_arg(argp, int*); + vungetc(&save, ch, src); + break; + case 'c': // read width chars, ever spaces + arg_str = va_arg(argp, char*); + if (fmt1 == 0) length = 1; + else length = fmt1; + for (i = 0; i < length;) + { + *arg_str++ = ch; i++; + ch = vgetc(&save, src); + if (ch == EOF) break; + } + if (i < length) goto exit_me; // not enough chars + break; + case 's': + arg_str = va_arg(argp, char*); + if (fmt1 == 0) length = 4095; // max string scan 4096 + else length = fmt1; + for (i = 0; i < length; i++) + { + *arg_str++ = ch; + ch = vgetc(&save, src); + if (ch == EOF || isspace(ch)) break; // ok, just finish string + } + *arg_str++ = '\0'; + break; + case 'd': case 'i': case 'u': + case 'o': case 'p': case 'x': + i = try_parse_int(&digit, ch, src, &save, vgetc, vungetc); + if (i < 0) goto exit_me; + + if (flag_long == 0) { arg_int = va_arg(argp, int*); *arg_int = (int)digit; } else + if (flag_long == 1) { arg_long = va_arg(argp, long*); *arg_long = (long)digit; } else + if (flag_long == 2) { arg_longlong = va_arg(argp, long long*); *arg_longlong = digit; } + break; + case 'a': case 'A': case 'f': case 'F': + case 'e': case 'E': + case 'g': case 'G': + i = try_parse_real(&real, ch, src, &save, vgetc, vungetc); + if (i < 0) goto exit_me; + + if (flag_long == 0) { arg_float = va_arg(argp, float*); *arg_float = (float)real; } else + if (flag_long == 1) { arg_double = va_arg(argp, double*); *arg_double = (double)real; } else + if (flag_long == 2) { arg_longdouble = va_arg(argp, long double*); *arg_longdouble = real; } + break; + } + + fmt = fmtc + 1; + nread++; + } +exit_me: + if (point_to_n) *point_to_n = nread; + return nread; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fprintf.c b/programs/develop/ktcc/trunk/libc/stdio/fprintf.c new file mode 100644 index 0000000000..4828555a32 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fprintf.c @@ -0,0 +1,44 @@ +#include +#include + + + +int fprintf(FILE* file, const char* format, ...) +{ + va_list arg; + va_start (arg, format); + + return vfprintf(file, format, arg); + +} + +int vfprintf ( FILE * file, const char * format, va_list arg ) +{ + char *buf; + int printed, rc = 0; + + if(!file || !format) + { + errno = E_INVALIDPTR; + return errno; + } + + buf=malloc(4096*2); //8kb max + if(!buf) + { + errno = E_NOMEM; + return errno; + } + + printed=format_print(buf,8191, format,arg); + if (file == stderr) + debug_out_str(buf); + else + rc = fwrite(buf,printed,1,file); + free(buf); + + if (rc < 0) + return rc; + else + return(printed); +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fputc.c b/programs/develop/ktcc/trunk/libc/stdio/fputc.c new file mode 100644 index 0000000000..aba6212280 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fputc.c @@ -0,0 +1,10 @@ +#include +int fputc(int c,FILE* file) +{ + dword res; + + res = fwrite(&c, 1, 1, file); + if (res < 1) return EOF; + + return c; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fputs.c b/programs/develop/ktcc/trunk/libc/stdio/fputs.c new file mode 100644 index 0000000000..b360313a31 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fputs.c @@ -0,0 +1,27 @@ +#include + +int fputs ( const char * str, FILE * file ) +{ + int rc; + + if(!file || !str) + { + errno = E_INVALIDPTR; + return EOF; + } + + if ((file->mode & 3)==FILE_OPEN_READ) + { + errno = E_ACCESS; + return EOF; + } + + while(*str) + { + rc = fputc(*str, file); + if (rc < 0) return rc; + str++; + } + + return 0; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fread.c b/programs/develop/ktcc/trunk/libc/stdio/fread.c new file mode 100644 index 0000000000..5628ed539d --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fread.c @@ -0,0 +1,94 @@ +#include +#include +#include +#include + +int fread(void *buffer,int size,int count,FILE* file) +{ + dword res, readbytes; + dword fullsize, read4cache, toread, readcount; + + if(!file || !buffer) + { + errno = E_INVALIDPTR; + return 0; + } + + if ((file->mode &3)!=FILE_OPEN_READ && (file->mode & FILE_OPEN_PLUS)==0) + { + errno = E_ACCESS; + return 0; + } + + fullsize=count*size; + if (fullsize + file->filepos >= file->filesize) + { + fullsize=file->filesize - file->filepos; + if (fullsize <= 0) return 0; + } + + /***** file buffering strategy, just read forward ***** + if we read small part - read full buffer, but if buffer have this data - dont read again nothing (or partial read forward 4k pages) + any writes drops buffers as ungetc_buf */ + read4cache = 0; + readcount = 0; + if (file->filepos >= file->buffer_start && file->filepos < file->buffer_end) + { + read4cache = min(file->buffer_end - file->filepos, fullsize); + memcpy(buffer, file->buffer + file->filepos - file->buffer_start, read4cache); + file->filepos += read4cache; + if (file->ungetc_buf != EOF) // subst ungetc byte + { + *((char*)buffer) = (char)file->ungetc_buf; + file->ungetc_buf = EOF; + } + buffer += read4cache; // ! advance + fullsize -= read4cache; + readcount = read4cache / size; + } + + toread = max(fullsize, file->buffersize); + if (toread + file->filepos >= file->filesize) + { + toread = file->filesize - file->filepos; + } + + if (fullsize <= 0 || toread <= 0) + res = 0; // already read or file end + else + { + file->buffer_start = file->filepos; + if (toread <= fullsize) // read to bigger buffer + { + res = _ksys_readfile(file->filename, file->filepos, toread, buffer, &readbytes); + read4cache = min(readbytes, file->buffersize); + memcpy(file->buffer, buffer, read4cache); + file->filepos += readbytes; + } else + { + res = _ksys_readfile(file->filename, file->filepos, toread, file->buffer, &readbytes); + read4cache = readbytes; + memcpy(buffer, file->buffer, min(fullsize, read4cache)); + file->filepos += min(fullsize, read4cache); + } + file->buffer_end = file->buffer_start + read4cache; + if (readbytes >= fullsize) + readcount += fullsize / size; + else + readcount += readbytes / size; + } + + if (file->ungetc_buf != EOF) // subst ungetc byte + { + *((char*)buffer) = (char)file->ungetc_buf; + file->ungetc_buf = EOF; + } + + if (res != 0) + { + file->ungetc_buf = EOF; + errno = -res; + } + + return readcount; // really full readed plus cached items +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fscanf.c b/programs/develop/ktcc/trunk/libc/stdio/fscanf.c new file mode 100644 index 0000000000..9ae0ff86f8 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fscanf.c @@ -0,0 +1,42 @@ +#include +#include +#include + +int virtual_getc_file(void *sp, const void *obj) +// get next chat from file obj, save point is ptr to string char ptr +{ + FILE *f = (FILE *)obj; + int ch = fgetc(f); + +//printf("getc '%c'[%d];", ch, ch); + + return ch; +} + +void virtual_ungetc_file(void *sp, int c, const void *obj) +// if can, one step back savepoint in s +{ + FILE *f = (FILE *)obj; + + if (f) ungetc(c, f); +} + + +int vfscanf ( FILE * stream, const char * format, va_list arg ) +{ + return format_scan(stream, format, arg, &virtual_getc_file, &virtual_ungetc_file); +}; + +int fscanf ( FILE * stream, const char * format, ...) +{ + va_list arg; + int n; + va_start(arg, format); + + n = vfscanf(stream, format, arg); + + va_end(arg); + return n; +} + + diff --git a/programs/develop/ktcc/trunk/libc/stdio/fseek.c b/programs/develop/ktcc/trunk/libc/stdio/fseek.c new file mode 100644 index 0000000000..813815dfee --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fseek.c @@ -0,0 +1,19 @@ +#include +int fseek(FILE* file,long offset,int origin) +{ + fpos_t pos; + if(!file) + { + errno = E_INVALIDPTR; + return errno; + } + + if (origin==SEEK_CUR) + offset+=file->filepos; + else if (origin==SEEK_END) + offset+=file->filesize; + else if (origin!=SEEK_SET) + return EOF; + pos = offset; + return fsetpos(file, &pos); +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fsetpos.c b/programs/develop/ktcc/trunk/libc/stdio/fsetpos.c new file mode 100644 index 0000000000..fcedd73430 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fsetpos.c @@ -0,0 +1,18 @@ +#include +int fsetpos(FILE* file,const fpos_t * pos) +{ + if(!file || !pos) + { + errno = E_INVALIDPTR; + return errno; + } + + if (*pos>=0) + { + file->filepos=*pos; + file->ungetc_buf = EOF; + return 0; + } + else + return EOF; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/ftell.c b/programs/develop/ktcc/trunk/libc/stdio/ftell.c new file mode 100644 index 0000000000..053ce76e2c --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/ftell.c @@ -0,0 +1,11 @@ +#include +long ftell(FILE* file) +{ + if(!file) + { + errno = E_INVALIDPTR; + return -1L; + } + + return file->filepos; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/fwrite.c b/programs/develop/ktcc/trunk/libc/stdio/fwrite.c new file mode 100644 index 0000000000..5acd588d08 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/fwrite.c @@ -0,0 +1,83 @@ +#include +#include + +// dont support return partial writing when fail +// only 32-bit filesize +int fwrite(void *buffer,int size,int count,FILE* file) +{ + dword res; + dword fullsize; + + if(!file || !buffer) + { + errno = E_INVALIDPTR; + return EOF; + } + + + if ((file->mode & 3)==FILE_OPEN_READ) + { + errno = E_ACCESS; + return 0; + } + + if ((file->mode &3)==FILE_OPEN_APPEND) + file->filepos=file->filesize; + + fullsize=count*size; + + if ((file->filesize)<(file->filepos+fullsize)) file->filesize=file->filepos+fullsize; + + /* + if (file->mode==FILE_OPEN_APPEND) + { + file->filepos==file->filesize; + res=_ksys_appendtofile(file->filename,file->filepos,fullsize,buffer); + if (res==0) + { + file->filepos+=fullsize; + fullsize=fullsize/size; + return(fullsize); + } + else return(0); + + } + */ + file->ungetc_buf = EOF; + if (file->filepos >= file->buffer_start && file->filepos < file->buffer_end) // drop buffer, if change his data + { + file->buffer_start = -1; + file->buffer_end = -1; + } + + if ((file->mode &3)==FILE_OPEN_WRITE || (file->mode&3)==FILE_OPEN_APPEND) // always true, as read checked previous + { + if (file->filepos==0) + { //file mot created yet + res=_ksys_rewritefile(file->filename,fullsize,buffer); + if (res==0) + { + file->filepos+=fullsize; + return(count); + } else + { + errno = -res; + return(0); + } + } + else + { + res=_ksys_appendtofile(file->filename,file->filepos,fullsize,buffer); + if (res==0) + { + file->filepos+=fullsize; + return(count); + } else + { + errno = -res; + return(0); + } + } + } + else return(0); +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/getchar.c b/programs/develop/ktcc/trunk/libc/stdio/getchar.c new file mode 100644 index 0000000000..73d901f5bd --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/getchar.c @@ -0,0 +1,6 @@ +#include + +int getchar ( void ) +{ + return con_getch(); +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/gets.c b/programs/develop/ktcc/trunk/libc/stdio/gets.c new file mode 100644 index 0000000000..9b2a12c9bf --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/gets.c @@ -0,0 +1,8 @@ +#include + +char * gets ( char * str ) +{ + con_init_console_dll(); + + return con_gets(str, 80); // small, to reduce overflow risk +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/stdio/printf.c b/programs/develop/ktcc/trunk/libc/stdio/printf.c new file mode 100644 index 0000000000..e9b9851707 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/printf.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include + +int printf(const char *format, ...) +{ + va_list arg; + va_start(arg, format); + + return vprintf(format, arg); +} + + +int vprintf ( const char * format, va_list arg ) +{ + int i = 0; + int printed_simbols = 0; + char *s; + + i=con_init_console_dll(); + + if (i == 0) + { + s = malloc(4096); + printed_simbols = format_print(s, 4096, format, arg); + con_write_string(s, printed_simbols); + free(s); + } + + return(printed_simbols); +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/putchar.c b/programs/develop/ktcc/trunk/libc/stdio/putchar.c new file mode 100644 index 0000000000..d28f59e988 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/putchar.c @@ -0,0 +1,14 @@ +#include + +int putchar ( int ch ) +{ + char s[2]; + + con_init_console_dll(); + + s[0] = (char)ch; + s[1] = '\0'; + + con_write_asciiz(s); + return ch; +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/stdio/puts.c b/programs/develop/ktcc/trunk/libc/stdio/puts.c new file mode 100644 index 0000000000..9644db80eb --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/puts.c @@ -0,0 +1,11 @@ +#include + +int puts ( const char * str ) +{ + con_init_console_dll(); + + con_write_asciiz(str); + con_write_asciiz("\n"); + + return 1; +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/stdio/rewind.c b/programs/develop/ktcc/trunk/libc/stdio/rewind.c new file mode 100644 index 0000000000..2df1a1e286 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/rewind.c @@ -0,0 +1,12 @@ +#include +void rewind(FILE* file) +{ + if(!file) + { + errno = E_INVALIDPTR; + return; + } + + file->ungetc_buf = EOF; + file->filepos=0; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/scanf.c b/programs/develop/ktcc/trunk/libc/stdio/scanf.c new file mode 100644 index 0000000000..01093ea0ff --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/scanf.c @@ -0,0 +1,66 @@ +#include +#include +#include +#include +char *__scanf_buffer = 0; + +int virtual_getc_con(void *sp, const void *obj) +// get next chat from string obj, save point is ptr to string char ptr +{ + int ch; + const char**spc= (const char**)sp; + if (!spc) return EOF; // error + + if (!*spc) *spc = __scanf_buffer; // first call, init savepoint + + while (!**spc) // need to read more + { + if(!gets(__scanf_buffer)) return EOF; + *spc = __scanf_buffer; + strcat(__scanf_buffer,"\n"); // imitate delimiter + } + if (**spc == 26 || **spc == 3) // ^C ^Z end of scan, clear buffer + { + *spc = __scanf_buffer; + *__scanf_buffer = 0; + return EOF; // ^C ^Z + } + + ch = **spc; (*spc)++ ; + +//printf("getc '%c'[%d];", ch, ch); + return ch; +} + +void virtual_ungetc_con(void *sp, int c, const void *obj) +// if can, one step back savepoint in s +{ + const char**spc= (const char**)sp; + + if (spc && *spc > __scanf_buffer) (*spc)--; +//printf("Ungetc '%c'[%d];", c, c); +} + + +int vscanf ( const char * format, va_list arg ) +{ + return format_scan(NULL, format, arg, &virtual_getc_con, &virtual_ungetc_con); +}; + +int scanf ( const char * format, ...) +{ + va_list arg; + int n; + va_start(arg, format); + + if(__scanf_buffer == NULL) __scanf_buffer = malloc(4096); + if(__scanf_buffer == NULL) return -3; + + *__scanf_buffer = 0; + n = vscanf(format, arg); + + va_end(arg); + return n; +} + + diff --git a/programs/develop/ktcc/trunk/libc/stdio/snprintf.c b/programs/develop/ktcc/trunk/libc/stdio/snprintf.c new file mode 100644 index 0000000000..0db3e146a7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/snprintf.c @@ -0,0 +1,15 @@ +#include +#include +#include + +int format_print(char *dest, size_t maxlen, const char *fmt,va_list argp); + + +int snprintf(char *dest, size_t size,const char *format,...) +{ + va_list arg; + va_start (arg, format); + return format_print(dest,size, format, arg); +} + + diff --git a/programs/develop/ktcc/trunk/libc/stdio/sprintf.c b/programs/develop/ktcc/trunk/libc/stdio/sprintf.c new file mode 100644 index 0000000000..30ebadf9a2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/sprintf.c @@ -0,0 +1,15 @@ +#include +#include +#include + +int format_print(char *dest, size_t maxlen, const char *fmt,va_list argp); + + +int sprintf(char *dest,const char *format,...) +{ + va_list arg; + va_start (arg, format); + return format_print(dest,4096, format, arg); +} + + diff --git a/programs/develop/ktcc/trunk/libc/stdio/sprintf_tiny.c b/programs/develop/ktcc/trunk/libc/stdio/sprintf_tiny.c new file mode 100644 index 0000000000..4c0810b5b4 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/sprintf_tiny.c @@ -0,0 +1,97 @@ +/* + function for format output to the string. much lighter than standard sprintf + because of lesser formats supported +*/ + + +#include +//#include +#include +#include + +char* __itoa(int n,char* s); +char* itoab(unsigned int n, char* s, int b); + +int tiny_vsnprintf (char * s, size_t n, const char * format, va_list args ) +// support %c, %s, %d, %x, %u, %% for 32-bit values only. no width specs, left align +// always zero-ended +{ + char *fmt, *dest, buf[32]; + fmt = (char*)format; + dest = s; dest[n - 1] = '\0'; + int arg, len; + while (*fmt && (dest - s < n - 1)) + { + if (*fmt != '%') + { + *dest++ = *fmt++; + continue; + } + if (fmt[1] == '%') // %% + { + *dest++ = '%'; + fmt += 2; + continue; + } + arg = va_arg(args, int); + len = n - 1 - (dest - s); + switch (*++fmt) + { + case 'c': + *dest++ = (char)arg; + break; + case 's': + strncpy(dest, (char*)arg, len); + dest = strchr(dest, 0); + break; + case 'd': + __itoa(arg, buf); + strncpy(dest, buf, len); + dest = strchr(dest, 0); + break; + case 'x': + itoab((unsigned)arg, buf, 16); + strncpy(dest, buf, len); + dest = strchr(dest, 0); + break; + case 'u': + itoab((unsigned)arg, buf, 10); + strncpy(dest, buf, len); + dest = strchr(dest, 0); + break; + default: + *dest++ = *fmt; + } + fmt++; + } + *dest = '\0'; + return dest - s; +} + + +int tiny_snprintf (char * s, size_t n, const char * format, ... ) +{ + va_list arg; + int rc; + va_start(arg, format); + + rc = tiny_vsnprintf(s, n, format, arg); + + va_end(arg); + return rc; +} + +int tiny_sprintf (char * s, const char * format, ... ) +{ + va_list arg; + int rc; + va_start(arg, format); + + rc = tiny_vsnprintf(s, 4096, format, arg); + + va_end(arg); + return rc; +} + + + diff --git a/programs/develop/ktcc/trunk/libc/stdio/sscanf.c b/programs/develop/ktcc/trunk/libc/stdio/sscanf.c new file mode 100644 index 0000000000..2595506703 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/sscanf.c @@ -0,0 +1,46 @@ +#include +#include + +int virtual_getc_str(void *sp, const void *obj) +// get next chat from string obj, save point is ptr to string char ptr +{ + int ch; + const char *s = (const char *)obj; + const char**spc= (const char**)sp; + if (!s || !spc) return EOF; // error + + if (!*spc) *spc = s; // first call, init savepoint + + if (!**spc) return EOF; // EOS + + ch = **spc; (*spc)++ ; + + return ch; +} + +void virtual_ungetc_str(void *sp, int c, const void *obj) +// if can, one step back savepoint in s +{ + const char *s = (const char *)obj; + const char**spc= (const char**)sp; + + if (s && spc && *spc > s) (*spc)--; +} + +int vsscanf ( const char * s, const char * format, va_list arg ) +{ + return format_scan(s, format, arg, &virtual_getc_str, &virtual_ungetc_str); +}; + +int sscanf ( const char * s, const char * format, ...) +{ + va_list arg; + int n; + va_start(arg, format); + + n = vsscanf(s, format, arg); + + va_end(arg); + return n; +} + diff --git a/programs/develop/ktcc/trunk/libc/stdio/ungetc.c b/programs/develop/ktcc/trunk/libc/stdio/ungetc.c new file mode 100644 index 0000000000..2d7c295800 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/ungetc.c @@ -0,0 +1,32 @@ +#include +// non standard realization - support for virtually change ONLY ONE char + + + +int ungetc(int c,FILE* file) +{ + dword res; + + if(!file) + { + errno = E_INVALIDPTR; + return EOF; + } + + if ((file->mode & 3) != FILE_OPEN_READ && (file->mode & FILE_OPEN_PLUS) == 0) + { + errno = E_ACCESS; + return EOF; + } + + if (file->filepos > file->filesize || file->filepos == 0 || c == EOF || file->ungetc_buf != EOF) + { + errno = E_EOF; + return EOF; + } + + file->ungetc_buf = c; + file->filepos--; + + return c; +} diff --git a/programs/develop/ktcc/trunk/libc/stdio/vsnprintf.c b/programs/develop/ktcc/trunk/libc/stdio/vsnprintf.c new file mode 100644 index 0000000000..82941198ca --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdio/vsnprintf.c @@ -0,0 +1,14 @@ +#include +#include +#include + +int vsnprintf(char *dest, size_t size, const char *format, va_list ap) +{ + return format_print(dest,size, format, ap); +} + + +int vsprintf (char * dest, const char * format, va_list ap ) +{ + return format_print(dest, 4096, format, ap); +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/assert.c b/programs/develop/ktcc/trunk/libc/stdlib/assert.c new file mode 100644 index 0000000000..b5d6ca901c --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/assert.c @@ -0,0 +1,7 @@ +#include +#include + +void __assert_fail(const char *expr, const char *file, int line, const char *func){ + fprintf(stderr, "Assertion failed: %s (%s: %s: %d)\n", expr, file, func, line); + abort(); +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/atoi.c b/programs/develop/ktcc/trunk/libc/stdlib/atoi.c new file mode 100644 index 0000000000..70ef2d6323 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/atoi.c @@ -0,0 +1,21 @@ +#include "stdio.h" +#include "stdlib.h" +#include "ctype.h" + + +/* +** atoi(s) - convert s to integer. +*/ +int atoi(char *s) +{ + int sign, n; + while(isspace(*s)) ++s; + sign = 1; + switch(*s) { + case '-': sign = -1; + case '+': ++s; + } + n = 0; + while(isdigit(*s)) n = 10 * n + *s++ - '0'; + return (sign * n); +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/atoib.cpp b/programs/develop/ktcc/trunk/libc/stdlib/atoib.cpp new file mode 100644 index 0000000000..70c102bf95 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/atoib.cpp @@ -0,0 +1,22 @@ +#include "stdio.h" +#include "stdlib.h" +#include "ctype.h" + +/* +** atoib(s,b) - Convert s to "unsigned" integer in base b. +** NOTE: This is a non-standard function. +*/ +int atoib(char *s,int b) +{ + int n, digit; + n = 0; + while(isspace(*s)) ++s; + while((digit = (127 & *s++)) >= '0') { + if(digit >= 'a') digit -= 87; + else if(digit >= 'A') digit -= 55; + else digit -= '0'; + if(digit >= b) break; + n = b * n + digit; + } + return (n); + } diff --git a/programs/develop/ktcc/trunk/libc/stdlib/div.c b/programs/develop/ktcc/trunk/libc/stdlib/div.c new file mode 100644 index 0000000000..159e77e16f --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/div.c @@ -0,0 +1,10 @@ +#include + +div_t div (int numer, int denom) +{ + div_t res; + res.quot = numer / denom; + res.rem = numer % denom; + + return res; +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/exit.c b/programs/develop/ktcc/trunk/libc/stdlib/exit.c new file mode 100644 index 0000000000..15ab8864a6 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/exit.c @@ -0,0 +1,11 @@ +#include +#include +#include + +void exit (int status) +/* close console if was initialized, also stay window [finished] when status is error < 0 */ +{ + if (__console_initdll_status) + con_exit(status > 0); + _ksys_exit(); +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libc/stdlib/getopt.c b/programs/develop/ktcc/trunk/libc/stdlib/getopt.c new file mode 100644 index 0000000000..6286d05032 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/getopt.c @@ -0,0 +1,63 @@ +#include +#include +#include + +char *optarg = NULL; // global argument pointer +int optind = 0; // global argv index + +int getopt(int argc, char *argv[], char *optstring) { + static char *next = NULL; + char c; + char *cp = NULL; + + if (optind == 0) + next = NULL; + + optarg = NULL; + + if (next == NULL || *next == '\0') { + if (optind == 0) + optind++; + + if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0') { + optarg = NULL; + if (optind < argc) + optarg = argv[optind]; + return EOF; + } + + if (strncmp(argv[optind], "--", 2) == 0) { + optind++; + optarg = NULL; + if (optind < argc) + optarg = argv[optind]; + return EOF; + } + + next = argv[optind]; + next++; // skip past - + optind++; + } + + c = *next++; + cp = strchr(optstring, c); + + if (cp == NULL || c == ':') + return '?'; + + cp++; + if (*cp == ':') { + if (*next != '\0') { + optarg = next; + next = NULL; + } + else if (optind < argc) { + optarg = argv[optind]; + optind++; + } + else { + return '?'; + } + } + return c; +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/itoa.c b/programs/develop/ktcc/trunk/libc/stdlib/itoa.c new file mode 100644 index 0000000000..8839cb565c --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/itoa.c @@ -0,0 +1,26 @@ +#include +#include +#include +#include + +/* +** itoa(n,s) - Convert n to characters in s +*/ +char* __itoa(int n,char* s) +{ + int sign; + char *ptr; + ptr = s; + + if(n == (int)0x80000000) + return strcpy(s, "-2147483648"); // overflowed -n + + if ((sign = n) < 0) n = -n; + do { + *ptr++ = n % 10 + '0'; + } while ((n = n / 10) > 0); + if (sign < 0) *ptr++ = '-'; + *ptr = '\0'; + return strrev(s); +} + diff --git a/programs/develop/ktcc/trunk/libc/stdlib/itoab.c b/programs/develop/ktcc/trunk/libc/stdlib/itoab.c new file mode 100644 index 0000000000..d7fb98c210 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/itoab.c @@ -0,0 +1,25 @@ +#include +#include +#include +#include + +/* +** itoab(n,s,b) - Convert "unsigned" n to characters in s using base b. +** NOTE: This is a non-standard function. +*/ +char* itoab(unsigned int n, char* s, int b) +{ + char *ptr; + int lowbit; + ptr = s; + b >>= 1; + do { + lowbit = n & 1; + n = (n >> 1) & 0x7FFFFFFF; + *ptr = ((n % b) << 1) + lowbit; + if(*ptr < 10) *ptr += '0'; else *ptr += 55; + ++ptr; + } while(n /= b); + *ptr = 0; + return strrev(s); +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/random.c b/programs/develop/ktcc/trunk/libc/stdlib/random.c new file mode 100644 index 0000000000..c832bad477 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/random.c @@ -0,0 +1,15 @@ + +#include "stdlib.h" + +unsigned int seed_o=1; + +void srand (unsigned int seed) +{ + seed_o=seed; +} + +int rand (void) +{ + seed_o=(seed_o*25173+13849) & (65535); + return(seed_o); +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/strtod.c b/programs/develop/ktcc/trunk/libc/stdlib/strtod.c new file mode 100644 index 0000000000..29b2bfaf3b --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/strtod.c @@ -0,0 +1,70 @@ +#include +#include + +double strtod (const char* str, char** endptr) +{ + double res = 0.0; + int pwr = 0, pwr1, esign = 1, sign = 1; + + while (isspace(*str)) str++; + + if (*str == '-') { sign = -1; str++; } + else + if (*str == '+') str++; + + + while (isdigit(*str)) + { + res = 10 * res + (*str - '0'); + str++; + } + + if (*str =='.') + { + str++; + double div = 10.0; + while (isdigit(*str)) + { + res += (*str - '0') / div; + str++; + div *= 10; + } + } + + if (*str =='e' || *str =='E') + { + str++; + if (*str == '-') { esign = -1; str++; } + else + if (*str == '+') str++; + + while (isdigit(*str)) + { + pwr = 10.0 * pwr + (*str - '0'); + str++; + } + + // fck, i've no pow() yet + // res = res * pow(10, pwr); + for (pwr1 = pwr; pwr1 !=0; pwr1--) + if (esign == 1) + res *= 10; + else + res /= 10; + + } + if (endptr) + *endptr = (char*)str; + + return res * sign; +} + +long double strtold (const char* str, char** endptr) +{ + return (long double)strtod(str, endptr); +} + +float strtof (const char* str, char** endptr) +{ + return (float)strtod(str, endptr); +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/strtol.c b/programs/develop/ktcc/trunk/libc/stdlib/strtol.c new file mode 100644 index 0000000000..a9141520e3 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/strtol.c @@ -0,0 +1,78 @@ +#include +#include +#include + +#define LONG_MIN (-2147483647L-1) +#define LONG_MAX (2147483647L) +#define ULONG_MAX (4294967295UL) + + +int getdigit(char ch, int base) +{ + if (isdigit(ch)) ch-= '0'; + else + if (isalpha(ch) && ch <= 'Z') ch = 10 + ch - 'A'; + else + if (isalpha(ch)) ch = 10 + ch - 'a'; + else + return -1; + + if (ch / base != 0) return -1; + + return ch; +} + + +long int strtol (const char* str, char** endptr, int base) +{ + long int res = 0; + int sign = 1; + + if (base > 36) + { + errno = EINVAL; + goto bye; + } + + while (isspace(*str)) str++; + + if (*str == '-') { sign = -1; str++; } + else + if (*str == '+') str++; + + if (base == 0 || base == 16) + { + if (*str == '0' && (str[1] == 'x' || str[1] == 'X')) + { + base = 16; + str += 2; + } + } + + if (base == 0 && *str == '0') base = 8; + + if (base == 0) base = 10; + + + int digit; + while ((digit = getdigit(*str, base)) >= 0) + { + res = base * res + digit; + str++; + if (res < 0) + { + errno = ERANGE; + if (sign > 0) + res = LONG_MAX; + else + res = LONG_MIN; + } + } + +bye: + if (endptr) + *endptr = (char*)str; + + return res * sign; +} + diff --git a/programs/develop/ktcc/trunk/libc/stdlib/time.c b/programs/develop/ktcc/trunk/libc/stdlib/time.c new file mode 100644 index 0000000000..87e77db061 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/time.c @@ -0,0 +1,86 @@ +#include +#include + +struct tm __buffertime; + + + +struct tm * localtime (const time_t * timer) +/* non-standard! ignore parameter and return just time now */ +{ + int kos_date, kos_time; + kos_date = _ksys_get_date(); + kos_time = _ksys_get_system_clock(); + + int bcd_day = (kos_date >> 16); + int bcd_mon = ((kos_date & 0xFF00) >> 8); + int bcd_year = (kos_date & 0xFF); + __buffertime.tm_mday = ((bcd_day & 0xF0)>>4)*10 + (bcd_day & 0x0F); + __buffertime.tm_mon = ((bcd_mon & 0xF0)>>4)*10 + (bcd_mon & 0x0F) - 1; + __buffertime.tm_year = ((bcd_year & 0xF0)>>4)*10 + (bcd_year & 0x0F) + 100; + + __buffertime.tm_wday = __buffertime.tm_yday = __buffertime.tm_isdst = -1; /* temporary */ + + int bcd_sec = (kos_time >> 16); + int bcd_min = ((kos_time & 0xFF00) >> 8); + int bcd_hour = (kos_time & 0xFF); + + __buffertime.tm_sec = ((bcd_sec & 0xF0)>>4)*10 + (bcd_sec & 0x0F); + __buffertime.tm_min = ((bcd_min & 0xF0)>>4)*10 + (bcd_min & 0x0F); + __buffertime.tm_hour = ((bcd_hour & 0xF0)>>4)*10 + (bcd_hour & 0x0F); + + return &__buffertime; +} + +time_t time (time_t* timer) +{ + time_t t = mktime(localtime(0)); + + if (timer) *timer = t; + + return t; +} + +time_t mktime (struct tm * timeptr) +{ + /*int y, m, d; + time_t t; + y = timeptr->tm_year + 1900; + m = timeptr->tm_mon + 1; + d = timeptr->tm_mday; // to -1 or not to -1? + + if (m < 3) { m += 12; y -= 1; } + + t = y * 365 + y / 4 + y /400 - y / 100; // years - > days + t += 30 * m + 3 * (m + 1) / 5 + d; // add month days + + t -= 719561; // 01 jan 1970 + t *= 86400; + + t += 3600 * timeptr->tm_hour + 60 * timeptr->tm_min + timeptr->tm_sec; + + return t;*/ + + int utcdiff = -3; + const int mon_days [] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; + unsigned long int tyears, tdays, leaps, utc_hrs; + int i; + + tyears = timeptr->tm_year - 70 ;// tm->tm_year is from 1900. + leaps = (tyears + 2) / 4; // no of next two lines until year 2100. + i = (timeptr->tm_year - 100) / 100; + leaps -= ( (i/4)*3 + i%4 ); + tdays = 0; + for (i=0; i < timeptr->tm_mon; i++) tdays += mon_days[i]; + + tdays += timeptr->tm_mday-1; // days of month passed. + tdays = tdays + (tyears * 365) + leaps; + + utc_hrs = timeptr->tm_hour + utcdiff; // for your time zone. + return (tdays * 86400) + (utc_hrs * 3600) + (timeptr->tm_min * 60) + timeptr->tm_sec; +} + +double difftime (time_t end, time_t beginning) +{ + return end - beginning; +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/tolower.c b/programs/develop/ktcc/trunk/libc/stdlib/tolower.c new file mode 100644 index 0000000000..75ad383f6e --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/tolower.c @@ -0,0 +1,9 @@ +#include +/* +** return lower-case of c if upper-case, else c +*/ +unsigned char tolower(unsigned char c) +{ + if(c<='Z' && c>='A') return (c+32); + return (c); +} diff --git a/programs/develop/ktcc/trunk/libc/stdlib/toupper.c b/programs/develop/ktcc/trunk/libc/stdlib/toupper.c new file mode 100644 index 0000000000..44f6c9afd7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/stdlib/toupper.c @@ -0,0 +1,9 @@ +#include +/* +** return upper-case of c if it is lower-case, else c +*/ +unsigned char toupper(unsigned char c) +{ + if(c<='z' && c>='a') return (c-32); + return (c); +} diff --git a/programs/develop/ktcc/trunk/libc/string/calloc.c b/programs/develop/ktcc/trunk/libc/string/calloc.c new file mode 100644 index 0000000000..b524473683 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/calloc.c @@ -0,0 +1,13 @@ +#include +#include + +void* syscalloc (size_t num, size_t size) +{ + size_t bytes = num * size; + void *p = sysmalloc(bytes); + + if(p) + memset(p, 0, bytes); + + return p; +} diff --git a/programs/develop/ktcc/trunk/libc/string/is.c b/programs/develop/ktcc/trunk/libc/string/is.c new file mode 100644 index 0000000000..8abb9f0dca --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/is.c @@ -0,0 +1,20 @@ +#include +unsigned short __is[129] = { + 0, /* EOF */ + 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, + 0x004, 0x104, 0x104, 0x104, 0x104, 0x104, 0x004, 0x004, + 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, + 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, + 0x140, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, + 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, + 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, 0x459, + 0x459, 0x459, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, + 0x0D0, 0x653, 0x653, 0x653, 0x653, 0x653, 0x653, 0x253, + 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, + 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, 0x253, + 0x253, 0x253, 0x253, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, + 0x0D0, 0x473, 0x473, 0x473, 0x473, 0x473, 0x473, 0x073, + 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, + 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, + 0x073, 0x073, 0x073, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x004 + }; diff --git a/programs/develop/ktcc/trunk/libc/string/memchr.c b/programs/develop/ktcc/trunk/libc/string/memchr.c new file mode 100644 index 0000000000..f143e0e54a --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/memchr.c @@ -0,0 +1,12 @@ +#include + +void* memchr(const void* buf,int c,size_t count) +{ + int i; + for (i=0;i + +typedef unsigned char uc; +int memcmp(const void* buf1,const void* buf2,size_t count) +{ + int i; + for (i=0;i*(uc*)buf2) + return 1; + (uc*)buf1++; + (uc*)buf2++; + } + return 0; +} diff --git a/programs/develop/ktcc/trunk/libc/string/memmove.asm b/programs/develop/ktcc/trunk/libc/string/memmove.asm new file mode 100644 index 0000000000..32a1989392 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/memmove.asm @@ -0,0 +1,53 @@ +format ELF + +section '.text' executable +include '../proc32.inc' + +public memcpy +public memmove + +proc memcpy c, to:dword,from:dword,count:dword + push esi + push edi + mov ecx,[count] + test ecx,ecx + jz no_copy_block + mov esi,[from] + mov edi,[to] + cld + rep movsb +no_copy_block: + + pop edi + pop esi + mov eax, [to] + ret +endp + +proc memmove c, to:dword,from:dword,count:dword + + push esi + push edi + mov ecx,[count] + test ecx,ecx + jz no_copy_block_ + mov esi,[from] + mov edi,[to] + cmp esi, edi + je no_copy_block_ + jg copy_ + add esi, ecx + add edi, ecx + dec esi + dec edi + std +copy_: + rep movsb + cld +no_copy_block_: + + pop edi + pop esi + mov eax,[to] + ret +endp diff --git a/programs/develop/ktcc/trunk/libc/string/memrchr.c b/programs/develop/ktcc/trunk/libc/string/memrchr.c new file mode 100644 index 0000000000..742693a1e5 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/memrchr.c @@ -0,0 +1,12 @@ +/* memrchr.c from musl + */ + +#include + +void *memrchr(const void *m, int c, size_t n) +{ + const unsigned char *s = m; + c = (unsigned char)c; + while (n--) if (s[n]==c) return (void *)(s+n); + return 0; +} diff --git a/programs/develop/ktcc/trunk/libc/string/memset.asm b/programs/develop/ktcc/trunk/libc/string/memset.asm new file mode 100644 index 0000000000..3d73257e3b --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/memset.asm @@ -0,0 +1,15 @@ +format ELF +section '.text' executable +public memset +memset: + push edi + mov edi,[esp+8] + mov eax,[esp+12] + mov ecx,[esp+16] + jecxz .no_set + cld + rep stosb +.no_set: + mov eax, [esp+8] + pop edi + ret diff --git a/programs/develop/ktcc/trunk/libc/string/strcat.c b/programs/develop/ktcc/trunk/libc/string/strcat.c new file mode 100644 index 0000000000..eb2e181fe2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strcat.c @@ -0,0 +1,10 @@ +#include + +char* strcat(char* strDest, const char* strSource) +{ + char* res; + res=strDest; + while (*strDest) strDest++; + while ((*strDest++ = *strSource++)) ; + return res; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strchr.c b/programs/develop/ktcc/trunk/libc/string/strchr.c new file mode 100644 index 0000000000..6895b62daf --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strchr.c @@ -0,0 +1,11 @@ +#include + +char* strchr(const char* string, int c) +{ + do { + if (*string == (char)c) + return (char*)string; + } while (*string++); + + return NULL; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strcmp.c b/programs/develop/ktcc/trunk/libc/string/strcmp.c new file mode 100644 index 0000000000..8fc46702de --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strcmp.c @@ -0,0 +1,16 @@ +#include + +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++; + } +} diff --git a/programs/develop/ktcc/trunk/libc/string/strcoll.c b/programs/develop/ktcc/trunk/libc/string/strcoll.c new file mode 100644 index 0000000000..6e96af7833 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strcoll.c @@ -0,0 +1,6 @@ +#include + +int strcoll(const char* string1,const char* string2) +{ + return strcmp(string1,string2); +} diff --git a/programs/develop/ktcc/trunk/libc/string/strcpy.c b/programs/develop/ktcc/trunk/libc/string/strcpy.c new file mode 100644 index 0000000000..61aab01503 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strcpy.c @@ -0,0 +1,9 @@ +#include + +char* strcpy(char* strDest,const char* strSource) +{ + char* res; + res=strDest; + while((*strDest++ = *strSource++)) ; + return res; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strcspn.c b/programs/develop/ktcc/trunk/libc/string/strcspn.c new file mode 100644 index 0000000000..31173d698e --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strcspn.c @@ -0,0 +1,20 @@ +#include + +size_t strcspn(const char* string, const char* strCharSet) +{ + const char* temp; + int i; + i=0; + while(*string) + { + temp=strCharSet; + while (*temp!='\0') + { + if (*string==*temp) + return i; + temp++; + } + i++;string++; + } + return i; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strdup.c b/programs/develop/ktcc/trunk/libc/string/strdup.c new file mode 100644 index 0000000000..8c831d814f --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strdup.c @@ -0,0 +1,13 @@ +#include +#include + +char* strdup(const char* str) +{ + char* res; + int len; + len=strlen(str)+1; + res=malloc(len); + if(res) + memcpy(res,str,len); + return res; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strerror.c b/programs/develop/ktcc/trunk/libc/string/strerror.c new file mode 100644 index 0000000000..58b8988fe3 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strerror.c @@ -0,0 +1,105 @@ +#include +#include + +char* strerror(int err) +{ + char *msg; + switch(err) + { + case E_SUCCESS: + msg = "Success"; + break; + case -1: + msg = "End of file"; + break; + case E_UNSUPPORTED: + msg = "Function is not supported for the given file system"; + break; + case E_UNKNOWNFS: + msg = "Unknown file system"; + break; + case E_NOTFOUND: + msg = "File not found"; + break; + case E_EOF: + msg = "End of file, EOF"; + break; + case E_INVALIDPTR: + msg = "Pointer lies outside of application memory"; + break; + case E_DISKFULL: + msg = "Disk is full"; + break; + case E_FSYSERROR: + msg = "Dile system error"; + break; + case E_ACCESS: + msg = "Access denied"; + break; + case E_HARDWARE: + msg = "Device error"; + break; + case E_NOMEM: + msg = "File system requires more memory"; + break; + case E_NOMEM2: + msg = "Not enough memory"; + break; + case E_FILEFMT: + msg = "File is not executable"; + break; + case E_TOOMANY: + msg = "Too many processes"; + break; + /* Socket errors */ + case ENOBUFS: + msg = "Broken buffer"; + break; + case EINPROGRESS: + msg = "Operation now in progress"; + break; + case EOPNOTSUPP: + msg = "Operation not supported on transport endpoint"; + break; + case EWOULDBLOCK: + msg = "Operation would block"; + break; + case ENOTCONN: + msg = "Transport endpoint is not connected"; + break; + case EALREADY: + msg = "Operation already in progress"; + break; + case EINVALUE: + msg = "Invalid argument"; + break; + case EMSGSIZE: + msg = "Message too long"; + break; + case ENOMEM: + msg = "Out of memory"; + break; + case EADDRINUSE: + msg = "Address already in use"; + break; + case ECONNREFUSED: + msg = "Connection refused"; + break; + case ECONNRESET: + msg = "Connection reset by peer"; + break; + case EISCONN: + msg = "Transport endpoint is already connected"; + break; + case ETIMEDOUT: + msg = "Connection timed out"; + break; + case ECONNABORTED: + msg = "Software caused connection abort"; + break; + default: + msg = "Unknown error"; + break; + } + return msg; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strlen.c b/programs/develop/ktcc/trunk/libc/string/strlen.c new file mode 100644 index 0000000000..08914d3e5f --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strlen.c @@ -0,0 +1,7 @@ +int strlen(const char* string) +{ + int i; + i=0; + while (*string++) i++; + return i; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strnbrk.c b/programs/develop/ktcc/trunk/libc/string/strnbrk.c new file mode 100644 index 0000000000..86d1b290b8 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strnbrk.c @@ -0,0 +1,18 @@ +#include + +char* strpbrk(const char* string, const char* strCharSet) +{ + const char* temp; + while (*string!='\0') + { + temp=strCharSet; + while (*temp!='\0') + { + if (*string==*temp) + return (char*)string; + temp++; + } + string++; + } + return (char*)0; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strncat.c b/programs/develop/ktcc/trunk/libc/string/strncat.c new file mode 100644 index 0000000000..47426c4dcf --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strncat.c @@ -0,0 +1,15 @@ +#include + +char* strncat(char* strDest,const char* strSource,size_t count) +{ + char* res; + res=strDest; + while (*strDest) strDest++; + while(count-- > 0) + { + if((*strDest++ = *strSource++)) continue; + return(res); + } + *strDest = 0; + return res; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strncmp.c b/programs/develop/ktcc/trunk/libc/string/strncmp.c new file mode 100644 index 0000000000..03a40ffd68 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strncmp.c @@ -0,0 +1,14 @@ +#include + +int strncmp(const char* string1, const char* string2, size_t count) +{ + while(count>0 && (*string1==*string2)) + { + if ('\0' == *string1) return 0; + ++string1; + ++string2; + --count; + } + if(count) return (*string1 - *string2); + return 0; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strncpy.c b/programs/develop/ktcc/trunk/libc/string/strncpy.c new file mode 100644 index 0000000000..b6f658c5f7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strncpy.c @@ -0,0 +1,16 @@ +#include + +char* strncpy(char* strDest,const char* strSource,size_t count) +{ + char* res; + res=strDest; + while (count>0) + { + *strDest=*strSource; + if (*strSource!='\0') + strSource++; + strDest++; + count--; + } + return res; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strrchr.c b/programs/develop/ktcc/trunk/libc/string/strrchr.c new file mode 100644 index 0000000000..9594db9fa4 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strrchr.c @@ -0,0 +1,16 @@ +#include + +char* strrchr(const char* s,int c) +{ + char* res; + res=(char*)0; + while (1) + { + if (*s==(char)c) + res=(char*)s; + if (*s=='\0') + break; + s++; + } + return res; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strrev.c b/programs/develop/ktcc/trunk/libc/string/strrev.c new file mode 100644 index 0000000000..015ad0700c --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strrev.c @@ -0,0 +1,14 @@ +#include + +char* strrev(char *p) +{ + char *q = p, *res = p, z; + while(q && *q) ++q; /* find eos */ + for(--q; p < q; ++p, --q) + { + z = *p; + *p = *q; + *q = z; + } + return res; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strspn.c b/programs/develop/ktcc/trunk/libc/string/strspn.c new file mode 100644 index 0000000000..22a7fce6a1 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strspn.c @@ -0,0 +1,23 @@ +#include + +size_t strspn(const char* string,const char* strCharSet) +{ + int i; + const char* temp; + i=0; + while (*string!='\0') + { + temp=strCharSet; + while (*temp!='\0') + { + if (*temp==*string) + break; + temp++; + } + if (*temp=='\0') + break; + string++; + i++; + } + return i; +} diff --git a/programs/develop/ktcc/trunk/libc/string/strstr.c b/programs/develop/ktcc/trunk/libc/string/strstr.c new file mode 100644 index 0000000000..72fc2bde51 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strstr.c @@ -0,0 +1,14 @@ +#include + +char* strstr(const char* s, const char* find) +{ + int len; + len=strlen(find); + while (1) + { + if (strncmp(s,find,len)==0) return (char*)s; + if (*s=='\0') + return (char*) 0; + s++; + } +} diff --git a/programs/develop/ktcc/trunk/libc/string/strtok.c b/programs/develop/ktcc/trunk/libc/string/strtok.c new file mode 100644 index 0000000000..d9ae819aef --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strtok.c @@ -0,0 +1,25 @@ +#include + +char* strtok(char* s,const char* delim) +// non reentrant +{ + static char* savep; + char* res; + + if(s) + savep = NULL; + else + s = savep; + + if (*s == '\0') + return NULL; + s += strspn(s, delim); + if (*s == '\0') + return NULL; + res = s; + s += strcspn(s, delim); + savep = s + 1; + *s = '\0'; + return res; +} + diff --git a/programs/develop/ktcc/trunk/libc/string/strxfrm.c b/programs/develop/ktcc/trunk/libc/string/strxfrm.c new file mode 100644 index 0000000000..a7b7fe03f3 --- /dev/null +++ b/programs/develop/ktcc/trunk/libc/string/strxfrm.c @@ -0,0 +1,4 @@ +int strxfrm(char* strDest, const char* strSource, int count) +{ + return 0; +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libctest/build.bat b/programs/develop/ktcc/trunk/libctest/build.bat new file mode 100644 index 0000000000..db078a7773 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/build.bat @@ -0,0 +1,68 @@ +@echo off +echo #################################################### +echo # test libc builder # +echo # usage: build [clean] # +echo #################################################### +rem #### CONFIG SECTION #### +set LIBNAME=libck.a +set INCLUDE=include +set CC=D:\VSProjects\msys-kos32-4.8.2\ktcc\trunk\libc\kos32-tcc.exe +set CFLAGS=-I"%cd%\%INCLUDE%" -Wall +set AR=kos32-ar +set ASM=fasm +set dirs=. +rem #### END OF CONFIG SECTION #### + +set objs= +set target=%1 +if not "%1"=="clean" set target=all + +set INCLUDE="%cd%" +call :Target_%target% + +if ERRORLEVEL 0 goto Exit_OK + +echo Probably at runing has been created error +echo For help send a report... +pause +goto :eof + +:Compile_C + %CC% %CFLAGS% %1 -o "%~dpn1.kex" -lck + if not %errorlevel%==0 goto Error_Failed + set objs=%objs% "%~dpn1.o" +goto :eof + +:Compile_Asm + %ASM% %1 "%~dpn1.o" + if not %errorlevel%==0 goto Error_Failed + set objs=%objs% "%~dpn1.o" +goto :eof + +:Target_clean + echo cleaning ... + for %%a in (%dirs%) do del /Q "%%a\*.o" + for %%a in (%dirs%) do del /Q "%%a\*.kex" +goto :Exit_OK + +:Target_all + echo building all ... + for %%a in (%dirs%) do ( + for %%f in ("%%a\*.asm") do call :Compile_Asm "%%f" + for %%f in ("%%a\*.c") do call :Compile_C "%%f" + ) +:: %AR% -ru %LIBNAME% %objs% +:: if not %errorlevel%==0 goto Error_Failed +goto Exit_OK + +:Error_Failed +echo error: execution failed +pause +exit 1 + +:Exit_OK +echo #################################################### +echo # All operations has been done... # +echo #################################################### +pause +exit 0 \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libctest/float2.c b/programs/develop/ktcc/trunk/libctest/float2.c new file mode 100644 index 0000000000..11e42ab0f7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/float2.c @@ -0,0 +1,42 @@ +#include +#include + +main() +{ + int i; + for (i = 0; i < 10; i++) + { + printf("------------------------------------------------------\n"); + printf ( "remainder of 5.3 / 2 is %f\n", remainder (5.3,2) ); + printf ( "remainder of 18.5 / 4.2 is %f\n", remainder (18.5,4.2) ); +//remainder of 5.3 / 2 is -0.700000 +//remainder of 18.5 / 4.2 is 1.700000 + + printf ( "fmod of 5.3 / 2 is %f\n", fmod (5.3,2) ); + printf ( "fmod of 18.5 / 4.2 is %f\n", fmod (18.5,4.2) ); +// fmod of 5.3 / 2 is 1.300000 +// fmod of 18.5 / 4.2 is 1.700000 + + double param, fractpart, intpart, result; + int n; + + param = 3.14159265; + fractpart = modf (param , &intpart); + printf ("%f = %f + %f \n", param, intpart, fractpart); +//3.141593 = 3.000000 + 0.141593 + + param = 0.95; + n = 4; + result = ldexp (param , n); + printf ("%f * 2^%d = %f\n", param, n, result); +//0.950000 * 2^4 = 15.200000 + + param = 8.0; + result = frexp (param , &n); + printf ("%f = %f * 2^%d\n", param, result, n); +//8.000000 = 0.500000 * 2^4 + param = 50; + result = frexp (param , &n); + printf ("%f = %f * 2^%d\n", param, result, n); + } +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libctest/fscanf.c b/programs/develop/ktcc/trunk/libctest/fscanf.c new file mode 100644 index 0000000000..4646a481a6 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/fscanf.c @@ -0,0 +1,125 @@ +#include +#include +#include "test.h" + +#define TEST(r, f, x, m) ( \ + errno=0, ((r) = (f)) == (x) || \ + (t_error("%s failed (" m ")\n", #f, r, x, strerror(errno)), 0) ) + +#define TEST_S(s, x, m) ( \ + !strcmp((s),(x)) || \ + (t_error("[%s] != [%s] (%s)\n", s, x, m), 0) ) + +static FILE *writetemp(const char *data) +{ + FILE *f = fopen("_tmpfile.tmp", "w+"); + if (!f) return 0; + if (!fwrite(data, strlen(data), 1, f)) { + fclose(f); + return 0; + } + rewind(f); + return f; +} + +int main(void) +{ + int i, x, y; + double u; + char a[100], b[100]; + FILE *f; + + + TEST(i, !!(f=writetemp("hello, world")), 1, "failed to make temp file"); + if (f) { + TEST(i, fscanf(f, "%s %[own]", a, b), 2, "got %d fields, expected %d"); + TEST_S(a, "hello,", "wrong result for %s"); + TEST_S(b, "wo", "wrong result for %[own]"); + TEST(i, fgetc(f), 'r', "'%c' != '%c') (%s)"); + fclose(f); + } + + TEST(i, !!(f=writetemp("ld 0x12 0x34")), 1, "failed to make temp file"); + if (f) { + TEST(i, fscanf(f, "ld %5i%2i", &x, &y), 1, "got %d fields, expected %d"); + TEST(i, x, 0x12, "%d != %d"); + TEST(i, fgetc(f), '3', "'%c' != '%c'"); + fclose(f); + } + + TEST(i, !!(f=writetemp(" 42")), 1, "failed to make temp file"); + if (f) { + x=y=-1; + TEST(i, fscanf(f, " %n%*d%n", &x, &y), 0, "%d != %d"); + TEST(i, x, 6, "%d != %d"); + TEST(i, y, 8, "%d != %d"); + TEST(i, ftell(f), 8, "%d != %d"); + TEST(i, !!feof(f), 1, "%d != %d"); + fclose(f); + } + + TEST(i, !!(f=writetemp("[abc123]....x")), 1, "failed to make temp file"); + if (f) { + x=y=-1; + TEST(i, fscanf(f, "%10[^]]%n%10[].]%n", a, &x, b, &y), 2, "%d != %d"); + TEST_S(a, "[abc123", "wrong result for %[^]]"); + TEST_S(b, "]....", "wrong result for %[].]"); + TEST(i, x, 7, "%d != %d"); + TEST(i, y, 12, "%d != %d"); + TEST(i, ftell(f), 12, "%d != %d"); + TEST(i, feof(f), 0, "%d != %d"); + TEST(i, fgetc(f), 'x', "%d != %d"); + fclose(f); + } + + TEST(i, !!(f=writetemp("0x1.0p12")), 1, "failed to make temp file"); + if (f) { + x=y=-1; + u=-1; + TEST(i, fscanf(f, "%lf%n %d", &u, &x, &y), 1, "%d != %d"); + TEST(u, u, 0.0, "%g != %g"); + TEST(i, x, 1, "%d != %d"); + TEST(i, y, -1, "%d != %d"); + TEST(i, ftell(f), 1, "%d != %d"); + TEST(i, feof(f), 0, "%d != %d"); + TEST(i, fgetc(f), 'x', "%d != %d"); + rewind(f); + TEST(i, fgetc(f), '0', "%d != %d"); + TEST(i, fgetc(f), 'x', "%d != %d"); + TEST(i, fscanf(f, "%lf%n%c %d", &u, &x, a, &y), 3, "%d != %d"); + TEST(u, u, 1.0, "%g != %g"); + TEST(i, x, 3, "%d != %d"); + TEST(i, a[0], 'p', "%d != %d"); + TEST(i, y, 12, "%d != %d"); + TEST(i, ftell(f), 8, "%d != %d"); + TEST(i, !!feof(f), 1, "%d != %d"); + fclose(f); + } + + TEST(i, !!(f=writetemp("1.0 012")), 1, "failed to make temp file"); + if (f) { + x=y=-1; + u=-1; + TEST(i, fscanf(f, "%lf%n %i", &u, &x, &y), 2, "%d != %d"); + TEST(u, u, 1.0, "%g != %g"); + TEST(i, x, 3, "%d != %d"); + TEST(i, y, 10, "%d != %d"); + TEST(i, ftell(f), 13, "%d != %d"); + TEST(i, !!feof(f), 1, "%d != %d"); + fclose(f); + } + + TEST(i, !!(f=writetemp("0xx")), 1, "failed to make temp file"); + if (f) { + x=y=-1; + TEST(i, fscanf(f, "%x%n", &x, &y), 0, "%d != %d"); + TEST(i, x, -1, "%d != %d"); + TEST(i, y, -1, "%d != %d"); + TEST(i, ftell(f), 2, "%d != %d"); + TEST(i, feof(f), 0, "%d != %d"); + fclose(f); + } + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/memmove.c b/programs/develop/ktcc/trunk/libctest/memmove.c new file mode 100644 index 0000000000..789332d395 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/memmove.c @@ -0,0 +1,186 @@ +/* A minor test-program for memmove. + Copyright (C) 2005 Axis Communications. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Neither the name of Axis Communications nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AXIS COMMUNICATIONS AND ITS CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL AXIS + COMMUNICATIONS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. */ + +/* Test moves of 0..MAX bytes; overlapping-src-higher, + overlapping-src-lower and non-overlapping. The overlap varies with + 1..N where N is the size moved. This means an order of MAX**2 + iterations. The size of an octet may seem appropriate for MAX and + makes an upper limit for simple testing. For the CRIS simulator, + making this 256 added 90s to the test-run (2GHz P4) while 64 (4s) was + enough to spot the bugs that had crept in, hence the number chosen. */ +#define MAX 64 + +#include +#include +#include + +#define TOO_MANY_ERRORS 11 +int errors = 0; + +#define DEBUGP \ + if (errors == TOO_MANY_ERRORS) \ + printf ("Further errors omitted\n"); \ + else if (errors < TOO_MANY_ERRORS) \ + printf + +/* A safe target-independent memmove. */ + +void +mymemmove (unsigned char *dest, unsigned char *src, size_t n) +{ + size_t i; + + if ((src <= dest && src + n <= dest) + || src >= dest) + while (n-- > 0) + *dest++ = *src++; + else + { + dest += n; + src += n; + while (n-- > 0) + *--dest = *--src; + } +} + +/* It's either the noinline attribute or forcing the test framework to + pass -fno-builtin-memmove. */ +void +xmemmove (unsigned char *dest, unsigned char *src, size_t n) + __attribute__ ((__noinline__)); + +void +xmemmove (unsigned char *dest, unsigned char *src, size_t n) +{ + void *retp; + retp = memmove (dest, src, n); + + if (retp != dest) + { + errors++; + DEBUGP ("memmove of n bytes returned %p instead of dest=%p\n", + retp, dest); + } +} + + +/* Fill the array with something we can associate with a position, but + not exactly the same as the position index. */ + +void +fill (unsigned char dest[MAX*3]) +{ + size_t i; + for (i = 0; i < MAX*3; i++) + dest[i] = (10 + i) % MAX; +} + +int +main (void) +{ + size_t i; + int errors = 0; + + /* Leave some room before and after the area tested, so we can detect + overwrites of up to N bytes, N being the amount tested. If you + want to test using valgrind, make these malloced instead. */ + unsigned char from_test[MAX*3]; + unsigned char to_test[MAX*3]; + unsigned char from_known[MAX*3]; + unsigned char to_known[MAX*3]; + + /* Non-overlap. */ + for (i = 0; i < MAX; i++) + { + /* Do the memmove first before setting the known array, so we know + it didn't change any of the known array. */ + fill (from_test); + fill (to_test); + xmemmove (to_test + MAX, 1 + from_test + MAX, i); + + fill (from_known); + fill (to_known); + mymemmove (to_known + MAX, 1 + from_known + MAX, i); + + if (memcmp (to_known, to_test, sizeof (to_known)) != 0) + { + errors++; + DEBUGP ("memmove failed non-overlap test for %d bytes\n", i); + } + } + + /* Overlap-from-before. */ + for (i = 0; i < MAX; i++) + { + size_t j; + for (j = 0; j < i; j++) + { + fill (to_test); + xmemmove (to_test + MAX * 2 - i, to_test + MAX * 2 - i - j, i); + + fill (to_known); + mymemmove (to_known + MAX * 2 - i, to_known + MAX * 2 - i - j, i); + + if (memcmp (to_known, to_test, sizeof (to_known)) != 0) + { + errors++; + DEBUGP ("memmove failed for %d bytes," + " with src %d bytes before dest\n", + i, j); + } + } + } + + /* Overlap-from-after. */ + for (i = 0; i < MAX; i++) + { + size_t j; + for (j = 0; j < i; j++) + { + fill (to_test); + xmemmove (to_test + MAX, to_test + MAX + j, i); + + fill (to_known); + mymemmove (to_known + MAX, to_known + MAX + j, i); + + if (memcmp (to_known, to_test, sizeof (to_known)) != 0) + { + errors++; + DEBUGP ("memmove failed when moving %d bytes," + " with src %d bytes after dest\n", + i, j); + } + } + } + +printf("%s finished\n", __FILE__); + + if (errors != 0) + abort (); + exit (0); +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libctest/myfile.txt b/programs/develop/ktcc/trunk/libctest/myfile.txt new file mode 100644 index 0000000000..980fb7b2a5 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/myfile.txt @@ -0,0 +1,5 @@ +#test line 1; +-test line 2; +@test line 3; +#testline4. +# \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libctest/nulprintf.c b/programs/develop/ktcc/trunk/libctest/nulprintf.c new file mode 100644 index 0000000000..d2ba76e507 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/nulprintf.c @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2014 by ARM Ltd. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#include +#include + +const char m[8] = {'M','M','M','M','M','M','M','M'}; + +int main() +{ + printf ("%.*s\n", 8, m); // must print MMMMMMMM + +printf("%s finished\n", __FILE__); + + exit (0); +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libctest/print.inc b/programs/develop/ktcc/trunk/libctest/print.inc new file mode 100644 index 0000000000..f07a6ed1ff --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/print.inc @@ -0,0 +1,28 @@ +#include +#include +//#include +//#include "test.h" + +volatile int t_status = 0; + +int t_printf(const char *s, ...) +{ + va_list ap; + char buf[512]; + int n; + + t_status = 1; + va_start(ap, s); + n = vsnprintf(buf, sizeof buf, s, ap); + va_end(ap); + if (n < 0) + n = 0; + else if (n >= sizeof buf) { + n = sizeof buf; + buf[n - 1] = '0'; + buf[n - 2] = '.'; + buf[n - 3] = '.'; + buf[n - 4] = '.'; + } + return printf("%s\n", buf); +} diff --git a/programs/develop/ktcc/trunk/libctest/qsort.c b/programs/develop/ktcc/trunk/libctest/qsort.c new file mode 100644 index 0000000000..c150c36a9a --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/qsort.c @@ -0,0 +1,173 @@ +//#include +#include +#include +#include +#include "test.h" + +static int scmp(const void *a, const void *b) +{ + return strcmp(*(char **)a, *(char **)b); +} + +static int icmp(const void *a, const void *b) +{ + return *(int*)a - *(int*)b; +} + +static int ccmp(const void *a, const void *b) +{ + return *(char*)a - *(char*)b; +} + +static int cmp64(const void *a, const void *b) +{ + const uint64_t *ua = a, *ub = b; + return *ua < *ub ? -1 : *ua != *ub; +} + +/* 26 items -- even */ +static const char *s[] = { + "Bob", "Alice", "John", "Ceres", + "Helga", "Drepper", "Emeralda", "Zoran", + "Momo", "Frank", "Pema", "Xavier", + "Yeva", "Gedun", "Irina", "Nono", + "Wiener", "Vincent", "Tsering", "Karnica", + "Lulu", "Quincy", "Osama", "Riley", + "Ursula", "Sam" +}; +static const char *s_sorted[] = { + "Alice", "Bob", "Ceres", "Drepper", + "Emeralda", "Frank", "Gedun", "Helga", + "Irina", "John", "Karnica", "Lulu", + "Momo", "Nono", "Osama", "Pema", + "Quincy", "Riley", "Sam", "Tsering", + "Ursula", "Vincent", "Wiener", "Xavier", + "Yeva", "Zoran" +}; + +/* 23 items -- odd, prime */ +static int n[] = { + 879045, 394, 99405644, 33434, 232323, 4334, 5454, + 343, 45545, 454, 324, 22, 34344, 233, 45345, 343, + 848405, 3434, 3434344, 3535, 93994, 2230404, 4334 +}; +static int n_sorted[] = { + 22, 233, 324, 343, 343, 394, 454, 3434, + 3535, 4334, 4334, 5454, 33434, 34344, 45345, 45545, + 93994, 232323, 848405, 879045, 2230404, 3434344, 99405644 +}; + +static void str_test(const char **a, const char **a_sorted, int len) +{ + int i; + qsort(a, len, sizeof *a, scmp); + for (i=0; i + +// TODO: use large period prng +static uint64_t seed = -1; +static uint32_t rand32(void) +{ + seed = 6364136223846793005ULL*seed + 1; + return seed >> 32; +} +static uint64_t rand64(void) +{ + uint64_t u = rand32(); + return u<<32 | rand32(); +} +static double frand() +{ + return rand64() * 0x1p-64; +} +static float frandf() +{ + return rand32() * 0x1p-32f; +} +static long double frandl() +{ + return rand64() * 0x1p-64L +#if LDBL_MANT_DIG > 64 ++ rand64() * 0x1p-128L +#endif +; +} + +void t_randseed(uint64_t s) +{ + seed = s; +} + +/* uniform random in [0,n), n > 0 must hold */ +uint64_t t_randn(uint64_t n) +{ + uint64_t r, m; + + /* m is the largest multiple of n */ + m = -1; + m -= m%n; + while ((r = rand64()) >= m); + return r%n; +} + +/* uniform on [a,b], a <= b must hold */ +uint64_t t_randint(uint64_t a, uint64_t b) +{ + uint64_t n = b - a + 1; + if (n) + return a + t_randn(n); + return rand64(); +} + +/* shuffle the elements of p and q until the elements in p are well shuffled */ +static void shuffle2(uint64_t *p, uint64_t *q, size_t np, size_t nq) +{ + size_t r; + uint64_t t; + + while (np) { + r = t_randn(nq+np--); + t = p[np]; + if (r < nq) { + p[np] = q[r]; + q[r] = t; + } else { + p[np] = p[r-nq]; + p[r-nq] = t; + } + } +} + +/* shuffle the elements of p */ +void t_shuffle(uint64_t *p, size_t n) +{ + shuffle2(p,0,n,0); +} + +void t_randrange(uint64_t *p, size_t n) +{ + size_t i; + for (i = 0; i < n; i++) + p[i] = i; + t_shuffle(p, n); +} + +/* hash table insert, 0 means empty, v > 0 must hold, len is power-of-2 */ +static int insert(uint64_t *tab, size_t len, uint64_t v) +{ + size_t i = v & (len-1); + size_t j = 1; + + while (tab[i]) { + if (tab[i] == v) + return -1; + i += j++; + i &= len-1; + } + tab[i] = v; + return 0; +} + +/* choose k unique numbers from [0,n), k <= n */ +int t_choose(uint64_t n, size_t k, uint64_t *p) +{ + uint64_t *tab; + size_t i, j, len; + + if (n < k) + return -1; + + if (n < 16) { + /* no alloc */ + while (k) + if (t_randn(n--) < k) + p[--k] = n; + return 0; + } + + if (k < 8) { + /* no alloc, n > 15 > 2*k */ + for (i = 0; i < k;) { + p[i] = t_randn(n); + for (j = 0; p[j] != p[i]; j++); + if (j == i) + i++; + } + return 0; + } + + // TODO: if k < n/k use k*log(k) solution without alloc + + if (n < 5*k && (n-k)*sizeof *tab < (size_t)-1) { + /* allocation is n-k < 4*k */ + tab = malloc((n-k) * sizeof *tab); + if (!tab) + return -1; + for (i = 0; i < k; i++) + p[i] = i; + for (; i < n; i++) + tab[i-k] = i; + if (k < n-k) + shuffle2(p, tab, k, n-k); + else + shuffle2(tab, p, n-k, k); + free(tab); + return 0; + } + + /* allocation is 2*k <= len < 4*k */ + for (len = 16; len < 2*k; len *= 2); + tab = calloc(len, sizeof *tab); + if (!tab) + return -1; + for (i = 0; i < k; i++) + while (insert(tab, len, t_randn(n)+1)); + for (i = 0; i < len; i++) + if (tab[i]) + *p++ = tab[i]-1; + free(tab); + return 0; +} + diff --git a/programs/develop/ktcc/trunk/libctest/readme.txt b/programs/develop/ktcc/trunk/libctest/readme.txt new file mode 100644 index 0000000000..f2591ad630 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/readme.txt @@ -0,0 +1,34 @@ +most test adapted from "musl-libctest-master" project +some taken from newlib + +Status or libc tests + +---NOT TESTED--- +no library fns realized +qsort +strtol +time + +---HANG--- +sscanf +>TEST_F(0x1234p56) + + +---STACK IS SMALL--- +strtod_long +tstring + + +--other-- +fscanf +-?scanf ignores width specs, '*' and [chars], cant read %a float +-%n counts as parameter + +snprintf +-some format misturbances + +ungetc +-ungetc fails if filepos == 0 - no tricks + +all file ops limited to 2Gb + diff --git a/programs/develop/ktcc/trunk/libctest/snprintf.c b/programs/develop/ktcc/trunk/libctest/snprintf.c new file mode 100644 index 0000000000..49ec73d38f --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/snprintf.c @@ -0,0 +1,188 @@ +#ifndef _XOPEN_SOURCE +#define _XOPEN_SOURCE 700 +#endif +#include +#include +//#include +//#include +#include +#include "test.h" + +#define DISABLE_SLOW_TESTS + +#define TEST(r, f, x, m) ( \ + ((r) = (f)) == (x) || \ + (t_error("%s failed (" m ")\n", #f, r, x), 0) ) + +#define TEST_S(s, x, m) ( \ + !strcmp((s),(x)) || \ + (t_error("[%s] != [%s] (%s)\n", s, x, m), 0) ) + +static const struct { + const char *fmt; + int i; + const char *expect; +} int_tests[] = { + /* width, precision, alignment */ + { "%04d", 12, "0012" }, + { "%.3d", 12, "012" }, + { "%3d", 12, " 12" }, + { "%-3d", 12, "12 " }, + { "%+3d", 12, "+12" }, + { "%+-5d", 12, "+12 " }, + { "%+- 5d", 12, "+12 " }, + { "%- 5d", 12, " 12 " }, + { "% d", 12, " 12" }, + { "%0-5d", 12, "12 " }, + { "%-05d", 12, "12 " }, + + /* ...explicit precision of 0 shall be no characters. */ + { "%.0d", 0, "" }, + { "%.0o", 0, "" }, + { "%#.0d", 0, "" }, + { "%#.0o", 0, "" }, + { "%#.0x", 0, "" }, + + /* ...but it still has to honor width and flags. */ + { "%2.0u", 0, " " }, + { "%02.0u", 0, " " }, + { "%2.0d", 0, " " }, + { "%02.0d", 0, " " }, + { "% .0d", 0, " " }, + { "%+.0d", 0, "+" }, + + /* hex: test alt form and case */ + { "%x", 63, "3f" }, + { "%#x", 63, "0x3f" }, + { "%X", 63, "3F" }, + + /* octal: test alt form */ + { "%o", 15, "17" }, + { "%#o", 15, "017" }, + + { NULL, 0.0, NULL } +}; + +static const struct { + const char *fmt; + double f; + const char *expect; +} fp_tests[] = { + /* basic form, handling of exponent/precision for 0 */ + { "%a", 0.0, "0x0p+0" }, + { "%e", 0.0, "0.000000e+00" }, + { "%f", 0.0, "0.000000" }, + { "%g", 0.0, "0" }, + { "%#g", 0.0, "0.00000" }, + { "%la", 0.0, "0x0p+0" }, + { "%le", 0.0, "0.000000e+00" }, + { "%lf", 0.0, "0.000000" }, + { "%lg", 0.0, "0" }, + { "%#lg", 0.0, "0.00000" }, + + /* rounding */ + { "%f", 1.1, "1.100000" }, + { "%f", 1.2, "1.200000" }, + { "%f", 1.3, "1.300000" }, + { "%f", 1.4, "1.400000" }, + { "%f", 1.5, "1.500000" }, + { "%.4f", 1.06125, "1.0613" }, /* input is not representible exactly as double */ + { "%.4f", 1.03125, "1.0312" }, /* 0x1.08p0 */ + { "%.2f", 1.375, "1.38" }, + { "%.1f", 1.375, "1.4" }, + { "%.1lf", 1.375, "1.4" }, + { "%.15f", 1.1, "1.100000000000000" }, + { "%.16f", 1.1, "1.1000000000000001" }, + { "%.17f", 1.1, "1.10000000000000009" }, + { "%.2e", 1500001.0, "1.50e+06" }, + { "%.2e", 1505000.0, "1.50e+06" }, + { "%.2e", 1505000.00000095367431640625, "1.51e+06" }, + { "%.2e", 1505001.0, "1.51e+06" }, + { "%.2e", 1506000.0, "1.51e+06" }, + + /* correctness in DBL_DIG places */ + { "%.15g", 1.23456789012345, "1.23456789012345" }, + + /* correct choice of notation for %g */ + { "%g", 0.0001, "0.0001" }, + { "%g", 0.00001, "1e-05" }, + { "%g", 123456, "123456" }, + { "%g", 1234567, "1.23457e+06" }, + { "%.7g", 1234567, "1234567" }, + { "%.7g", 12345678, "1.234568e+07" }, + { "%.8g", 0.1, "0.1" }, + { "%.9g", 0.1, "0.1" }, + { "%.10g", 0.1, "0.1" }, + { "%.11g", 0.1, "0.1" }, + + /* pi in double precision, printed to a few extra places */ + { "%.15f", M_PI, "3.141592653589793" }, + { "%.18f", M_PI, "3.141592653589793116" }, + + /* exact conversion of large integers */ + { "%.0f", 340282366920938463463374607431768211456.0, + "340282366920938463463374607431768211456" }, + + { NULL, 0.0, NULL } +}; + +int main(void) +{ + int i, j, k; + char b[2000]; + + TEST(i, snprintf(0, 0, "%d", 123456), 6, "length returned %d != %d"); + TEST(i, snprintf(0, 0, "%.4s", "hello"), 4, "length returned %d != %d"); + TEST(i, snprintf(b, 0, "%.0s", "goodbye"), 0, "length returned %d != %d"); + + strcpy(b, "xxxxxxxx"); + TEST(i, snprintf(b, 4, "%d", 123456), 6, "length returned %d != %d"); + TEST_S(b, "123", "incorrect output"); + TEST(i, b[5], 'x', "buffer overrun"); + + /* Perform ascii arithmetic to test printing tiny doubles */ + TEST(i, snprintf(b, sizeof b, "%.1022f", 0x1p-1021), 1024, "%d != %d"); + b[1] = '0'; + for (i=0; i<1021; i++) { + for (k=0, j=1023; j>0; j--) { + if (b[j]<'5') b[j]+=b[j]-'0'+k, k=0; + else b[j]+=b[j]-'0'-10+k, k=1; + } + } + TEST(i, b[1], '1', "'%c' != '%c'"); + for (j=2; b[j]=='0'; j++); + TEST(i, j, 1024, "%d != %d"); + + +#ifndef DISABLE_SLOW_TESTS + errno = 0; + TEST(i, snprintf(NULL, 0, "%.*u", 2147483647, 0), 2147483647, "cannot print max length %d"); + TEST(i, snprintf(NULL, 0, "%.*u ", 2147483647, 0), -1, "integer overflow %d"); + TEST(i, errno, EOVERFLOW, "after overflow: %d != %d"); +#endif + for (j=0; int_tests[j].fmt; j++) { + i = snprintf(b, sizeof b, int_tests[j].fmt, int_tests[j].i); + if (i != strlen(int_tests[j].expect)) { + t_error("snprintf(b, sizeof b, \"%s\", %d) returned %d wanted %d\n", + int_tests[j].fmt, int_tests[j].i, i, strlen(int_tests[j].expect)); + } + if (strcmp(b, int_tests[j].expect) != 0) + t_error("bad integer conversion fmt[%s]: got \"%s\", want \"%s\"\n", int_tests[j].fmt, b, int_tests[j].expect); + } + + for (j=0; fp_tests[j].fmt; j++) { + i = snprintf(b, sizeof b, fp_tests[j].fmt, fp_tests[j].f); + if (i != strlen(fp_tests[j].expect)) { + t_error("snprintf(b, sizeof b, \"%s\", %f) returned %d wanted %d\n", + fp_tests[j].fmt, fp_tests[j].f, i, strlen(fp_tests[j].expect)); + } + if (strcmp(b, fp_tests[j].expect) != 0) + t_error("bad floating-point conversion: got \"%s\", want \"%s\"\n", b, fp_tests[j].expect); + } + + TEST(i, snprintf(0, 0, "%.4a", 1.0), 11, "%d != %d"); + + printf("%s finished\n", __FILE__); + + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/sscanf.c b/programs/develop/ktcc/trunk/libctest/sscanf.c new file mode 100644 index 0000000000..c748bd753e --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/sscanf.c @@ -0,0 +1,89 @@ +#include +#include +#include +//#include +#include "test.h" + +#define TEST(r, f, x, m) ( \ + ((r) = (f)) == (x) || \ + (t_error("%s failed (" m ")\n", #f, r, x), 0) ) + +#define TEST_S(s, x, m) ( \ + !strcmp((s),(x)) || \ + (t_error("[%s] != [%s] (%s)\n", s, x, m), 0) ) + +#define TEST_F(x) ( \ + TEST(i, sscanf(# x, "%lf", &d), 1, "got %d fields, expected %d"), \ + TEST(t, d, (double)x, "%g != %g") ) + +int main(void) +{ + int i; + char a[100], b[100]; + int x, y, z, u, v; + double d, t; +/* + TEST(i, sscanf("hello, world\n", "%s %s", a, b), 2, "only %d fields, expected %d"); + TEST_S(a, "hello,", ""); + TEST_S(b, "world", ""); + + TEST(i, sscanf("hello, world\n", "%[hel]%s", a, b), 2, "only %d fields, expected %d"); + TEST_S(a, "hell", ""); + TEST_S(b, "o,", ""); + + TEST(i, sscanf("hello, world\n", "%[hel] %s", a, b), 2, "only %d fields, expected %d"); + TEST_S(a, "hell", ""); + TEST_S(b, "o,", ""); + + a[8] = 'X'; + a[9] = 0; + TEST(i, sscanf("hello, world\n", "%8c%8c", a, b), 1, "%d fields, expected %d"); + TEST_S(a, "hello, wX", ""); +*/ + TEST(i, sscanf("56789 0123 56a72", "%2d%d%*d %[0123456789]\n", &x, &y, a), 3, "only %d fields, expected %d"); + TEST(i, x, 56, "%d != %d"); + TEST(i, y, 789, "%d != %d"); + TEST_S(a, "56", ""); + + TEST(i, sscanf("011 0x100 11 0x100 100", "%i %i %o %x %x\n", &x, &y, &z, &u, &v), 5, "only %d fields, expected %d"); + TEST(i, x, 9, "%d != %d"); + TEST(i, y, 256, "%d != %d"); + TEST(i, z, 9, "%d != %d"); + TEST(i, u, 256, "%d != %d"); + TEST(i, v, 256, "%d != %d"); + + TEST(i, sscanf("20 xyz", "%d %d\n", &x, &y), 1, "only %d fields, expected %d"); + TEST(i, x, 20, "%d != %d"); + + TEST(i, sscanf("xyz", "%d %d\n", &x, &y), 0, "got %d fields, expected no match (%d)"); + + TEST(i, sscanf("", "%d %d\n", &x, &y), -1, "got %d fields, expected input failure (%d)"); + + TEST(i, sscanf(" 12345 6", "%2d%d%d", &x, &y, &z), 3, "only %d fields, expected %d"); + TEST(i, x, 12, "%d != %d"); + TEST(i, y, 345, "%d != %d"); + TEST(i, z, 6, "%d != %d"); + + TEST(i, sscanf(" 0x12 0x34", "%5i%2i", &x, &y), 1, "got %d fields, expected %d"); + TEST(i, x, 0x12, "%d != %d"); + + TEST_F(123); + TEST_F(123.0); + TEST_F(123.0e+0); + TEST_F(123.0e+4); + TEST_F(1.234e1234); + TEST_F(1.234e-1234); + TEST_F(1.234e56789); + TEST_F(1.234e-56789); + TEST_F(-0.5); + TEST_F(0.1); + TEST_F(0.2); + TEST_F(0.1e-10); +// TEST_F(0x1234p56); hangs on + + TEST(i, sscanf("10e", "%lf", &d), 0, "got %d fields, expected no match (%d)"); + TEST(i, sscanf("", "%lf\n", &d), -1, "got %d fields, expected input failure (%d)"); + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/string.c b/programs/develop/ktcc/trunk/libctest/string.c new file mode 100644 index 0000000000..22b469a7a2 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/string.c @@ -0,0 +1,147 @@ +#define _BSD_SOURCE +#include +#include +#include +#include "test.h" + +#ifndef min +#define min(a,b) ((a 0 && nsrc >= size) + dst[size - 1] = '\0'; + + return nsrc; +} + +size_t strlcat(char *dst, const char *src, size_t size) +{ + int ndest = strlen(dst); + int nsrc = strlen(src); + if (size > ndest + 1) + { + strncat(dst, src, size - ndest - 1); + if (size > 0 && nsrc + ndest >= size) + dst[size - 1] = '\0'; + } + + return nsrc + ndest; +} + + + +/* r = place to store result + * f = function call to test (or any expression) + * x = expected result + * m = message to print on failure (with formats for r & x) +**/ + +#define TEST(r, f, x, m) ( \ + ((r) = (f)) == (x) || \ + (t_error("%s failed (" m ")\n", #f, r, x), 0) ) + +#define TEST_S(s, x, m) ( \ + !strcmp((s),(x)) || \ + (t_error("[%s] != [%s] (%s)\n", s, x, m), 0) ) + +int main(void) +{ + char b[32]; + char *s; + int i; + + b[16]='a'; b[17]='b'; b[18]='c'; b[19]=0; + TEST(s, strcpy(b, b+16), b, "wrong return %p != %p"); + TEST_S(s, "abc", "strcpy gave incorrect string"); + TEST(s, strcpy(b+1, b+16), b+1, "wrong return %p != %p"); + TEST_S(s, "abc", "strcpy gave incorrect string"); + TEST(s, strcpy(b+2, b+16), b+2, "wrong return %p != %p"); + TEST_S(s, "abc", "strcpy gave incorrect string"); + TEST(s, strcpy(b+3, b+16), b+3, "wrong return %p != %p"); + TEST_S(s, "abc", "strcpy gave incorrect string"); + + TEST(s, strcpy(b+1, b+17), b+1, "wrong return %p != %p"); + TEST_S(s, "bc", "strcpy gave incorrect string"); + TEST(s, strcpy(b+2, b+18), b+2, "wrong return %p != %p"); + TEST_S(s, "c", "strcpy gave incorrect string"); + TEST(s, strcpy(b+3, b+19), b+3, "wrong return %p != %p"); + TEST_S(s, "", "strcpy gave incorrect string"); + + TEST(s, memset(b, 'x', sizeof b), b, "wrong return %p != %p"); + TEST(s, strncpy(b, "abc", sizeof b - 1), b, "wrong return %p != %p"); + TEST(i, memcmp(b, "abc\0\0\0\0", 8), 0, "strncpy fails to zero-pad dest"); + TEST(i, b[sizeof b - 1], 'x', "strncpy overruns buffer when n > strlen(src)"); + + b[3] = 'x'; b[4] = 0; + strncpy(b, "abc", 3); + TEST(i, b[2], 'c', "strncpy fails to copy last byte: %hhu != %hhu"); + TEST(i, b[3], 'x', "strncpy overruns buffer to null-terminate: %hhu != %hhu"); + + TEST(i, !strncmp("abcd", "abce", 3), 1, "strncmp compares past n"); + TEST(i, !!strncmp("abc", "abd", 3), 1, "strncmp fails to compare n-1st byte"); + + strcpy(b, "abc"); + TEST(s, strncat(b, "123456", 3), b, "%p != %p"); + TEST(i, b[6], 0, "strncat failed to null-terminate (%d)"); + TEST_S(s, "abc123", "strncat gave incorrect string"); + + strcpy(b, "aaababccdd0001122223"); + TEST(s, strchr(b, 'b'), b+3, "%p != %p"); + TEST(s, strrchr(b, 'b'), b+5, "%p != %p"); + TEST(i, strspn(b, "abcd"), 10, "%d != %d"); + TEST(i, strcspn(b, "0123"), 10, "%d != %d"); + TEST(s, strpbrk(b, "0123"), b+10, "%d != %d"); + + strcpy(b, "abc 123; xyz; foo"); + TEST(s, strtok(b, " "), b, "%p != %p"); + TEST_S(s, "abc", "strtok result"); + + TEST(s, strtok(NULL, ";"), b+4, "%p != %p"); + TEST_S(s, " 123", "strtok result"); + + TEST(s, strtok(NULL, " ;"), b+11, "%p != %p"); + TEST_S(s, "xyz", "strtok result"); + + TEST(s, strtok(NULL, " ;"), b+16, "%p != %p"); + TEST_S(s, "foo", "strtok result"); + + memset(b, 'x', sizeof b); + TEST(i, strlcpy(b, "abc", sizeof b - 1), 3, "length %d != %d"); + TEST(i, b[3], 0, "strlcpy did not null-terminate short string (%d)"); + TEST(i, b[4], 'x', "strlcpy wrote extra bytes (%d)"); + + memset(b, 'x', sizeof b); + TEST(i, strlcpy(b, "abc", 2), 3, "length %d != %d"); + TEST(i, b[0], 'a', "strlcpy did not copy character %d"); + TEST(i, b[1], 0, "strlcpy did not null-terminate long string (%d)"); + + memset(b, 'x', sizeof b); + TEST(i, strlcpy(b, "abc", 3), 3, "length %d != %d"); + TEST(i, b[2], 0, "strlcpy did not null-terminate l-length string (%d)"); + + TEST(i, strlcpy(NULL, "abc", 0), 3, "length %d != %d"); + + memcpy(b, "abc\0\0\0x\0", 8); + TEST(i, strlcat(b, "123", sizeof b), 6, "length %d != %d"); + TEST_S(b, "abc123", "strlcat result"); + + memcpy(b, "abc\0\0\0x\0", 8); + TEST(i, strlcat(b, "123", 6), 6, "length %d != %d"); + TEST_S(b, "abc12", "strlcat result"); + TEST(i, b[6], 'x', "strlcat wrote past string %d != %d"); + + memcpy(b, "abc\0\0\0x\0", 8); + TEST(i, strlcat(b, "123", 4), 6, "length %d != %d"); + TEST_S(b, "abc", "strlcat result"); + + memcpy(b, "abc\0\0\0x\0", 8); + TEST(i, strlcat(b, "123", 3), 6, "length %d != %d"); + TEST_S(b, "abc", "strlcat result"); + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/string_memcpy.c b/programs/develop/ktcc/trunk/libctest/string_memcpy.c new file mode 100644 index 0000000000..6500f7a1a7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/string_memcpy.c @@ -0,0 +1,56 @@ +#include +#include +//#include +#include "test.h" + +static char buf[512]; + +static void *(*volatile pmemcpy)(void *restrict, const void *restrict2, size_t); + +static void *aligned(void *p) { + return (void*)(((uintptr_t)p + 63) & -64U); +} + +#define N 80 +static void test_align(int dalign, int salign, int len) +{ + char *src = aligned(buf); + char *dst = aligned(buf + 128); + char *want = aligned(buf + 256); + char *p; + int i; + + if (salign + len > N || dalign + len > N) + abort(); + for (i = 0; i < N; i++) { + src[i] = '#'; + dst[i] = want[i] = ' '; + } + for (i = 0; i < len; i++) + src[salign+i] = want[dalign+i] = '0'+i; + p = pmemcpy(dst+dalign, src+salign, len); + if (p != dst+dalign) + t_error("memcpy(%p,...) returned %p\n", dst+dalign, p); + for (i = 0; i < N; i++) + if (dst[i] != want[i]) { + t_error("memcpy(align %d, align %d, %d) failed\n", dalign, salign, len); + t_printf("got : %.*s\n", dalign+len+1, dst); + t_printf("want: %.*s\n", dalign+len+1, want); + break; + } +} + +int main(void) +{ + int i,j,k; + + pmemcpy = memcpy; + + for (i = 0; i < 16; i++) + for (j = 0; j < 16; j++) + for (k = 0; k < 64; k++) + test_align(i,j,k); + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/string_memset.c b/programs/develop/ktcc/trunk/libctest/string_memset.c new file mode 100644 index 0000000000..e2c93f1399 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/string_memset.c @@ -0,0 +1,71 @@ +#include +#include +//#include +#include "test.h" + +static char buf[512]; + +static void *(*volatile pmemset)(void *, int, size_t); + +static void *aligned(void *p) +{ + return (void*)(((uintptr_t)p + 63) & -64U); +} + +#define N 80 +static void test_align(int align, int len) +{ + char *s = aligned(buf); + char *want = aligned(buf + 256); + char *p; + int i; + + if (align + len > N) + abort(); + for (i = 0; i < N; i++) + s[i] = want[i] = ' '; + for (i = 0; i < len; i++) + want[align+i] = '#'; + p = pmemset(s+align, '#', len); + if (p != s+align) + t_error("memset(%p,...) returned %p\n", s+align, p); + for (i = 0; i < N; i++) + if (s[i] != want[i]) { + t_error("memset(align %d, '#', %d) failed\n", align, len); + t_printf("got : %.*s\n", align+len+1, s); + t_printf("want: %.*s\n", align+len+1, want); + break; + } +} + +static void test_value(int c) +{ + int i; + + pmemset(buf, c, 10); + for (i = 0; i < 10; i++) + if ((unsigned char)buf[i] != (unsigned char)c) { + t_error("memset(%d) failed: got %d\n", c, buf[i]); + break; + } +} + +int main(void) +{ + int i,j,k; + + pmemset = memset; + + for (i = 0; i < 16; i++) + for (j = 0; j < 64; j++) + test_align(i,j); + + test_value('c'); + test_value(0); + test_value(-1); + test_value(-5); + test_value(0xab); + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/string_strchr.c b/programs/develop/ktcc/trunk/libctest/string_strchr.c new file mode 100644 index 0000000000..b687a162fe --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/string_strchr.c @@ -0,0 +1,60 @@ +#include +#include +#include "test.h" + +#define N(s, c) { \ + char *p = s; \ + char *q = strchr(p, c); \ + if (q) \ + t_error("strchr(%s,%s) returned str+%d, wanted 0\n", #s, #c, q-p); \ +} + +#define T(s, c, n) { \ + char *p = s; \ + char *q = strchr(p, c); \ + if (q == 0) \ + t_error("strchr(%s,%s) returned 0, wanted str+%d\n", #s, #c, n); \ + else if (q - p != n) \ + t_error("strchr(%s,%s) returned str+%d, wanted str+%d\n", #s, #c, q-p, n); \ +} + +int main(void) +{ + int i; + char a[128]; + char s[256]; + + for (i = 0; i < 128; i++) + a[i] = (i+1) & 127; + for (i = 0; i < 256; i++) + *((unsigned char*)s+i) = i+1; + + N("", 'a') + N("a", 'b') + N("abc abc", 'x') + N(a, 128) + N(a, 255) + + T("", 0, 0) + T("a", 'a', 0) + T("a", 'a'+256, 0) + T("a", 0, 1) + T("ab", 'b', 1) + T("aab", 'b', 2) + T("aaab", 'b', 3) + T("aaaab", 'b', 4) + T("aaaaab", 'b', 5) + T("aaaaaab", 'b', 6) + T("abc abc", 'c', 2) + T(s, 1, 0) + T(s, 2, 1) + T(s, 10, 9) + T(s, 11, 10) + T(s, 127, 126) + T(s, 128, 127) + T(s, 255, 254) + T(s, 0, 255) + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/string_strcspn.c b/programs/develop/ktcc/trunk/libctest/string_strcspn.c new file mode 100644 index 0000000000..ea207a4962 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/string_strcspn.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include "test.h" + +#define T(s, c, n) { \ + char *p = s; \ + char *q = c; \ + size_t r = strcspn(p, q); \ + if (r != n) \ + t_error("strcspn(%s,%s) returned %lu, wanted %lu\n", #s, #c, (unsigned long)r, (unsigned long)(n)); \ +} + +int main(void) +{ + int i; + char a[128]; + char s[256]; + + for (i = 0; i < 128; i++) + a[i] = (i+1) & 127; + for (i = 0; i < 256; i++) + *((unsigned char*)s+i) = i+1; + + T("", "", 0) + T("a", "", 1) + T("", "a", 0) + T("abc", "cde", 2) + T("abc", "ccc", 2) + T("abc", a, 0) + T("\xff\x80 abc", a, 2) + T(s, "\xff", 254) + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/string_strstr.c b/programs/develop/ktcc/trunk/libctest/string_strstr.c new file mode 100644 index 0000000000..a497f77871 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/string_strstr.c @@ -0,0 +1,57 @@ +#include +#include +#include "test.h" + +#define N(s, sub) { \ + char *p = s; \ + char *q = strstr(p, sub); \ + if (q) \ + t_error("strstr(%s,%s) returned str+%d, wanted 0\n", #s, #sub, q-p); \ +} + +#define T(s, sub, n) { \ + char *p = s; \ + char *q = strstr(p, sub); \ + if (q == 0) \ + t_error("strstr(%s,%s) returned 0, wanted str+%d\n", #s, #sub, n); \ + else if (q - p != n) \ + t_error("strstr(%s,%s) returned str+%d, wanted str+%d\n", #s, #sub, q-p, n); \ +} + +int main(void) +{ + N("", "a") + N("a", "aa") + N("a", "b") + N("aa", "ab") + N("aa", "aaa") + N("abba", "aba") + N("abc abc", "abcd") + N("0-1-2-3-4-5-6-7-8-9", "-3-4-56-7-8-") + N("0-1-2-3-4-5-6-7-8-9", "-3-4-5+6-7-8-") + N("_ _ _\xff_ _ _", "_\x7f_") + N("_ _ _\x7f_ _ _", "_\xff_") + + T("", "", 0) + T("abcd", "", 0) + T("abcd", "a", 0) + T("abcd", "b", 1) + T("abcd", "c", 2) + T("abcd", "d", 3) + T("abcd", "ab", 0) + T("abcd", "bc", 1) + T("abcd", "cd", 2) + T("ababa", "baba", 1) + T("ababab", "babab", 1) + T("abababa", "bababa", 1) + T("abababab", "bababab", 1) + T("ababababa", "babababa", 1) + T("nanabanabanana", "aba", 3) + T("nanabanabanana", "ban", 4) + T("nanabanabanana", "anab", 1) + T("nanabanabanana", "banana", 8) + T("_ _\xff_ _", "_\xff_", 2) + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/strtod.c b/programs/develop/ktcc/trunk/libctest/strtod.c new file mode 100644 index 0000000000..43a30724ee --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/strtod.c @@ -0,0 +1,77 @@ +#include +#include +#include +#include "test.h" + +#define length(x) (sizeof(x) / sizeof *(x)) + +static struct { + char *s; + double f; +} t[] = { + {"0", 0.0}, + {"00.00", 0.0}, + {"-.00000", -0.0}, + {"1e+1000000", INFINITY}, + {"1e-1000000", 0}, + // 2^-1074 * 0.5 - eps + {".2470328229206232720882843964341106861825299013071623822127928412503377536351043e-323", 0}, + // 2^-1074 * 0.5 + eps + {".2470328229206232720882843964341106861825299013071623822127928412503377536351044e-323", 0x1p-1074}, + // 2^-1074 * 1.5 - eps + {".7410984687618698162648531893023320585475897039214871466383785237510132609053131e-323", 0x1p-1074}, + // 2^-1074 * 1.5 + eps + {".7410984687618698162648531893023320585475897039214871466383785237510132609053132e-323", 0x1p-1073}, + // 2^-1022 + 2^-1075 - eps + {".2225073858507201630123055637955676152503612414573018013083228724049586647606759e-307", 0x1p-1022}, + // 2^-1022 + 2^-1075 + eps + {".2225073858507201630123055637955676152503612414573018013083228724049586647606760e-307", 0x1.0000000000001p-1022}, + // 2^1024 - 2^970 - eps + {"17976931348623158079372897140530341507993413271003782693617377898044" + "49682927647509466490179775872070963302864166928879109465555478519404" + "02630657488671505820681908902000708383676273854845817711531764475730" + "27006985557136695962284291481986083493647529271907416844436551070434" + "2711559699508093042880177904174497791.999999999999999999999999999999", 0x1.fffffffffffffp1023}, + // 2^1024 - 2^970 + {"17976931348623158079372897140530341507993413271003782693617377898044" + "49682927647509466490179775872070963302864166928879109465555478519404" + "02630657488671505820681908902000708383676273854845817711531764475730" + "27006985557136695962284291481986083493647529271907416844436551070434" + "2711559699508093042880177904174497792", INFINITY}, + // some random numbers + {".5961860348131807091861002266453941950428e00", 0.59618603481318067}, // 0x1.313f4bc3b584cp-1 + {"1.815013169218038729887460898733526957442e-1", 0.18150131692180388}, // 0x1.73b6f662e1712p-3 + {"42.07082357534453600681618685682257590772e-2", 0.42070823575344535}, // 0x1.aece23c6e028dp-2 + {"665.4686306516261456328973225579833470816e-3", 0.66546863065162609}, // 0x1.54b84dea53453p-1 + {"6101.852922970868621786690495485449831753e-4", 0.61018529229708685}, // 0x1.386a34e5d516bp-1 + {"76966.95208236968077849464348875471158549e-5", 0.76966952082369677}, // 0x1.8a121f9954dfap-1 + {"250506.5322228682496132604807222923702304e-6", 0.25050653222286823}, // 0x1.0084c8cd538c2p-2 + {"2740037.230228005325852424697698331177377e-7", 0.27400372302280052}, // 0x1.18946e9575ef4p-2 + {"20723093.50049742645941529268715428324490e-8", 0.20723093500497428}, // 0x1.a868b14486e4dp-3 + {"0.7900280238081604956226011047460238748912e1", 7.9002802380816046}, // 0x1.f99e3100f2eaep+2 + {"0.9822860653737296848190558448760465863597e2", 98.228606537372968}, // 0x1.88ea17d506accp+6 + {"0.7468949723190370809405570560160405324869e3", 746.89497231903704}, // 0x1.75728e73f48b7p+9 + {"0.1630268320282728475980459844271031751665e4", 1630.2683202827284}, // 0x1.97912c28d5cbp+10 + {"0.4637168629719170695109918769645492022088e5", 46371.686297191707}, // 0x1.6a475f6258737p+15 + {"0.6537805944497711554209461686415872067523e6", 653780.59444977110}, // 0x1.3f3a9305bb86cp+19 + {"0.2346324356502437045212230713960457676531e6", 234632.43565024371}, // 0x1.ca4437c3631eap+17 + {"0.9709481716420048341897258980454298205278e8", 97094817.164200485}, // 0x1.7263284a8242cp+26 + {"0.4996908522051874110779982354932499499602e9", 499690852.20518744}, // 0x1.dc8ad6434872ap+28 +}; + +int main(void) +{ + int i; + double x; + char *p; + + for (i = 0; i < length(t); i++) { + x = strtod(t[i].s, &p); + if (x != t[i].f) + t_error("strtod(\"%s\") want %a got %a\n", t[i].s, t[i].f, x); + } + + printf("%s finished\n", __FILE__); + return t_status; +} + diff --git a/programs/develop/ktcc/trunk/libctest/strtod_long.c b/programs/develop/ktcc/trunk/libctest/strtod_long.c new file mode 100644 index 0000000000..c13abe6f2a --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/strtod_long.c @@ -0,0 +1,21 @@ +#include +#include +#include +#include "test.h" + +int main(void) +{ + double x, want = .1111111111111111111111; + char buf[40000]; + + memset(buf, '1', sizeof buf); + buf[0] = '.'; + buf[sizeof buf - 1] = 0; + + if ((x=strtod(buf, 0)) != want) + t_error("strtod(.11[...]1) got %.18f want %.18f\n", x, want); + + printf("%s finished\n", __FILE__); + return t_status; +} + diff --git a/programs/develop/ktcc/trunk/libctest/strtod_simple.c b/programs/develop/ktcc/trunk/libctest/strtod_simple.c new file mode 100644 index 0000000000..851a5218bd --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/strtod_simple.c @@ -0,0 +1,34 @@ +#include +#include +#include +#include "test.h" + +/* r = place to store result + * f = function call to test (or any expression) + * x = expected result + * m = message to print on failure (with formats for r & x) + */ + +#define TEST(r, f, x, m) ( \ + ((r) = (f)) == (x) || \ + (t_error("%s failed (" m ")\n", #f, r, x, r-x), 0) ) + +int main(void) +{ + int i; + double d, d2; + char buf[1000]; + + for (i=0; i<100; i++) { + d = sin(i); + snprintf(buf, sizeof buf, "%.300f", d); + TEST(d2, strtod(buf, 0), d, "round trip fail %a != %a (%a)"); + } + + TEST(d, strtod("0x1p4", 0), 16.0, "hex float %a != %a"); + TEST(d, strtod("0x1.1p4", 0), 17.0, "hex float %a != %a"); + + printf("%s finished\n", __FILE__); + return t_status; +} + diff --git a/programs/develop/ktcc/trunk/libctest/strtof.c b/programs/develop/ktcc/trunk/libctest/strtof.c new file mode 100644 index 0000000000..4b01477b85 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/strtof.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include "test.h" + +#define length(x) (sizeof(x) / sizeof *(x)) + +static struct { + char *s; + float f; +} t[] = { + // 2^-149 * 0.5 - eps + {".7006492321624085354618647916449580656401309709382578858785341419448955413429303e-45", 0}, + // 2^-149 * 0.5 + eps + {".7006492321624085354618647916449580656401309709382578858785341419448955413429304e-45", 0x1p-149}, + // 2^-149 * 0.5 - eps + {".2101947696487225606385594374934874196920392912814773657635602425834686624028790e-44", 0x1p-149}, + // 2^-149 * 0.5 + eps + {".2101947696487225606385594374934874196920392912814773657635602425834686624028791e-44", 0x1p-148}, + // 2^-126 + 2^-150 - eps + {".1175494420887210724209590083408724842314472120785184615334540294131831453944281e-37", 0x1p-126}, + // 2^-126 + 2^-150 + eps + {".1175494420887210724209590083408724842314472120785184615334540294131831453944282e-37", 0x1.000002p-126}, + // 2^128 - 2^103 - eps + {"340282356779733661637539395458142568447.9999999999999999999", 0x1.fffffep127}, + // 2^128 - 2^103 + {"340282356779733661637539395458142568448", INFINITY}, +}; + +int main(void) +{ + int i; + float x; + char *p; + + for (i = 0; i < length(t); i++) { + x = strtof(t[i].s, &p); + if (x != t[i].f) + t_error("strtof(\"%s\") want %a got %a\n", t[i].s, t[i].f, x); + } + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/strtol.c b/programs/develop/ktcc/trunk/libctest/strtol.c new file mode 100644 index 0000000000..f4d8089863 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/strtol.c @@ -0,0 +1,80 @@ +#include +#include +#include +//#include +#include "test.h" + +/* r = place to store result + * f = function call to test (or any expression) + * x = expected result + * m = message to print on failure (with formats for r & x) +**/ + +#define TEST(r, f, x, m) ( \ + errno = 0, msg = #f, ((r) = (f)) == (x) || \ + (t_error("%s failed (" m ")\n", #f, r, x), 0) ) + +#define TEST2(r, f, x, m) ( \ + ((r) = (f)) == (x) || \ + (t_error("%s failed (" m ")\n", msg, r, x), 0) ) + +int main(void) +{ + int i; + long l; + unsigned long ul; + char *msg=""; + char *s, *c; + + TEST(l, atol("2147483647"), 2147483647L, "max 32bit signed %ld != %ld"); + TEST(l, strtol("2147483647", 0, 0), 2147483647L, "max 32bit signed %ld != %ld"); + TEST(ul, strtoul("4294967295", 0, 0), 4294967295UL, "max 32bit unsigned %lu != %lu"); + + if (sizeof(long) == 4) { + TEST(l, strtol(s="2147483648", &c, 0), 2147483647L, "uncaught overflow %ld != %ld"); + TEST2(i, c-s, 10, "wrong final position %d != %d"); + TEST2(i, errno, ERANGE, "missing errno %d != %d"); + TEST(l, strtol(s="-2147483649", &c, 0), -2147483647L-1, "uncaught overflow %ld != %ld"); + TEST2(i, c-s, 11, "wrong final position %d != %d"); + TEST2(i, errno, ERANGE, "missing errno %d != %d"); + TEST(ul, strtoul(s="4294967296", &c, 0), 4294967295UL, "uncaught overflow %lu != %lu"); + TEST2(i, c-s, 10, "wrong final position %d != %d"); + TEST2(i, errno, ERANGE, "missing errno %d != %d"); + TEST(ul, strtoul(s="-1", &c, 0), -1UL, "rejected negative %lu != %lu"); + TEST2(i, c-s, 2, "wrong final position %d != %d"); + TEST2(i, errno, 0, "spurious errno %d != %d"); + TEST(ul, strtoul(s="-2", &c, 0), -2UL, "rejected negative %lu != %lu"); + TEST2(i, c-s, 2, "wrong final position %d != %d"); + TEST2(i, errno, 0, "spurious errno %d != %d"); + TEST(ul, strtoul(s="-2147483648", &c, 0), -2147483648UL, "rejected negative %lu != %lu"); + TEST2(i, c-s, 11, "wrong final position %d != %d"); + TEST2(i, errno, 0, "spurious errno %d != %d"); + TEST(ul, strtoul(s="-2147483649", &c, 0), -2147483649UL, "rejected negative %lu != %lu"); + TEST2(i, c-s, 11, "wrong final position %d != %d"); + TEST2(i, errno, 0, "spurious errno %d != %d"); + } else { + TEST(i, 0, 1, "64bit tests not implemented"); + } + + TEST(l, strtol("z", 0, 36), 35, "%ld != %ld"); + TEST(l, strtol("00010010001101000101011001111000", 0, 2), 0x12345678, "%ld != %ld"); + TEST(l, strtol(s="0F5F", &c, 16), 0x0f5f, "%ld != %ld"); + + TEST(l, strtol(s="0xz", &c, 16), 0, "%ld != %ld"); + TEST2(i, c-s, 1, "wrong final position %ld != %ld"); + + TEST(l, strtol(s="0x1234", &c, 16), 0x1234, "%ld != %ld"); + TEST2(i, c-s, 6, "wrong final position %ld != %ld"); + + c = NULL; + TEST(l, strtol(s="123", &c, 37), 0, "%ld != %ld"); + TEST2(i, c-s, 0, "wrong final position %d != %d"); + TEST2(i, errno, EINVAL, "%d != %d"); + + TEST(l, strtol(s=" 15437", &c, 8), 015437, "%ld != %ld"); + TEST2(i, c-s, 7, "wrong final position %d != %d"); + + TEST(l, strtol(s=" 1", &c, 0), 1, "%ld != %ld"); + TEST2(i, c-s, 3, "wrong final position %d != %d"); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/strtold.c b/programs/develop/ktcc/trunk/libctest/strtold.c new file mode 100644 index 0000000000..7e50d5eae9 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/strtold.c @@ -0,0 +1,96 @@ +#include +#include +#include +#include +#include "test.h" + +#define length(x) (sizeof(x) / sizeof *(x)) + +static struct { + char *s; + long double f; +} t[] = { + {"0", 0.0}, + {"12.345", 12.345L}, + {"1.2345e1", 12.345L}, + {"1e+1000000", INFINITY}, + {"1e-1000000", 0}, +#if LDBL_MANT_DIG == 53 + // 2^-1074 * 0.5 - eps + {".2470328229206232720882843964341106861825299013071623822127928412503377536351043e-323", 0}, + // 2^-1074 * 0.5 + eps + {".2470328229206232720882843964341106861825299013071623822127928412503377536351044e-323", 0x1p-1074}, + // 2^-1074 * 1.5 - eps + {".7410984687618698162648531893023320585475897039214871466383785237510132609053131e-323", 0x1p-1074}, + // 2^-1074 * 1.5 + eps + {".7410984687618698162648531893023320585475897039214871466383785237510132609053132e-323", 0x1p-1073}, + // 2^-1022 + 2^-1075 - eps + {".2225073858507201630123055637955676152503612414573018013083228724049586647606759e-307", 0x1p-1022}, + // 2^-1022 + 2^-1075 + eps + {".2225073858507201630123055637955676152503612414573018013083228724049586647606760e-307", 0x1.0000000000001p-1022}, + // 2^1024 - 2^970 - eps + {"17976931348623158079372897140530341507993413271003782693617377898044" + "49682927647509466490179775872070963302864166928879109465555478519404" + "02630657488671505820681908902000708383676273854845817711531764475730" + "27006985557136695962284291481986083493647529271907416844436551070434" + "2711559699508093042880177904174497791.999999999999999999999999999999", 0x1.fffffffffffffp1023}, + // 2^1024 - 2^970 + {"17976931348623158079372897140530341507993413271003782693617377898044" + "49682927647509466490179775872070963302864166928879109465555478519404" + "02630657488671505820681908902000708383676273854845817711531764475730" + "27006985557136695962284291481986083493647529271907416844436551070434" + "2711559699508093042880177904174497792", INFINITY}, + // some random numbers + {".5961860348131807091861002266453941950428e00", 0.59618603481318067}, // 0x1.313f4bc3b584cp-1 + {"1.815013169218038729887460898733526957442e-1", 0.18150131692180388}, // 0x1.73b6f662e1712p-3 + {"42.07082357534453600681618685682257590772e-2", 0.42070823575344535}, // 0x1.aece23c6e028dp-2 + {"665.4686306516261456328973225579833470816e-3", 0.66546863065162609}, // 0x1.54b84dea53453p-1 + {"6101.852922970868621786690495485449831753e-4", 0.61018529229708685}, // 0x1.386a34e5d516bp-1 + {"76966.95208236968077849464348875471158549e-5", 0.76966952082369677}, // 0x1.8a121f9954dfap-1 + {"250506.5322228682496132604807222923702304e-6", 0.25050653222286823}, // 0x1.0084c8cd538c2p-2 + {"2740037.230228005325852424697698331177377e-7", 0.27400372302280052}, // 0x1.18946e9575ef4p-2 + {"20723093.50049742645941529268715428324490e-8", 0.20723093500497428}, // 0x1.a868b14486e4dp-3 + {"0.7900280238081604956226011047460238748912e1", 7.9002802380816046}, // 0x1.f99e3100f2eaep+2 + {"0.9822860653737296848190558448760465863597e2", 98.228606537372968}, // 0x1.88ea17d506accp+6 + {"0.7468949723190370809405570560160405324869e3", 746.89497231903704}, // 0x1.75728e73f48b7p+9 + {"0.1630268320282728475980459844271031751665e4", 1630.2683202827284}, // 0x1.97912c28d5cbp+10 + {"0.4637168629719170695109918769645492022088e5", 46371.686297191707}, // 0x1.6a475f6258737p+15 + {"0.6537805944497711554209461686415872067523e6", 653780.59444977110}, // 0x1.3f3a9305bb86cp+19 + {"0.2346324356502437045212230713960457676531e6", 234632.43565024371}, // 0x1.ca4437c3631eap+17 + {"0.9709481716420048341897258980454298205278e8", 97094817.164200485}, // 0x1.7263284a8242cp+26 + {"0.4996908522051874110779982354932499499602e9", 499690852.20518744}, // 0x1.dc8ad6434872ap+28 +#elif LDBL_MANT_DIG == 64 + // 2^-16445 * 0.5 - eps + {".1822599765941237301264202966809709908199525407846781671860490243514185844316698e-4950", 0}, + // 2^-16445 * 0.5 + eps + {".1822599765941237301264202966809709908199525407846781671860490243514185844316699e-4950", 0x1p-16445L}, + // 2^-16445 * 1.5 - eps + {".5467799297823711903792608900429129724598576223540345015581470730542557532950096e-4950", 0x1p-16445L}, + // 2^-16445 * 1.5 + eps + {".5467799297823711903792608900429129724598576223540345015581470730542557532950097e-4950", 0x1p-16444L}, + // 2^-16382 + 2^-16446 - eps + {".3362103143112093506444937793915876332724499641527442230928779770593420866576777e-4931", 0x1p-16382L}, + // 2^-16382 + 2^-16446 + eps + {".3362103143112093506444937793915876332724499641527442230928779770593420866576778e-4931", 0x1.0000000000000002p-16382L}, + // 2^16384 - 2^16319 - eps + {"118973149535723176505351158982948.86679662540046955672e4900", 0x1.fffffffffffffffep16383L}, + // 2^16384 - 2^16319 + eps + {"118973149535723176505351158982948.86679662540046955673e4900", INFINITY}, +#endif +}; + +int main(void) +{ + int i; + long double x; + char *p; + + for (i = 0; i < length(t); i++) { + x = strtold(t[i].s, &p); + if (x != t[i].f) + t_error("strtold(\"%s\") want %La got %La\n", t[i].s, t[i].f, x); + } + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/test.h b/programs/develop/ktcc/trunk/libctest/test.h new file mode 100644 index 0000000000..0168fc262f --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/test.h @@ -0,0 +1,37 @@ +#include +#include +#ifdef __GNUC__ +#include +#include +#include +#include +#endif + + +/* TODO: not thread-safe nor fork-safe */ +extern volatile int t_status; + +#define T_LOC2(l) __FILE__ ":" #l +#define T_LOC1(l) T_LOC2(l) +#define t_error(...) t_printf(T_LOC1(__LINE__) ": " __VA_ARGS__) + +int t_printf(const char *s, ...); + +int t_vmfill(void **, size_t *, int); +int t_memfill(void); + +void t_fdfill(void); + +void t_randseed(uint64_t s); +uint64_t t_randn(uint64_t n); +uint64_t t_randint(uint64_t a, uint64_t b); +void t_shuffle(uint64_t *p, size_t n); +void t_randrange(uint64_t *p, size_t n); +int t_choose(uint64_t n, size_t k, uint64_t *p); + +char *t_pathrel(char *buf, size_t n, char *argv0, char *p); + +int t_setrlim(int r, long lim); + +#include "print.inc" +#include "rand.inc" diff --git a/programs/develop/ktcc/trunk/libctest/tgmath.c b/programs/develop/ktcc/trunk/libctest/tgmath.c new file mode 100644 index 0000000000..09265be916 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/tgmath.c @@ -0,0 +1,41 @@ +//#include +#include +#include +#include "test.h" + +int main(void) +{ + long i; +/* + i = lrint(123456789.1f) & 0x7fffffff; + if (i != 123456792) + t_error("lrint(123456789.1f)&0x7fffffff want 123456792 got %ld\n", i); + i = lrint(123456789.1) & 0x7fffffff; + if (i != 123456789) + t_error("lrint(123456789.1)&0x7fffffff want 123456789 got %ld\n", i); +*/ + if (sqrt(2.0f) != 1.41421353816986083984375) + t_error("sqrt(2.0f) want 1.41421353816986083984375 got %f\n", sqrt(2.0f)); + if (sqrt(2.0) != 1.414213562373095145474621858738828450441360) + t_error("sqrt(2.0) want 1.414213562373095145474621858738828450441360 got %d\n", sqrt(2.0)); + if (sqrt(2) != 1.414213562373095145474621858738828450441360) + t_error("sqrt(2) want 0x1.6a09e667f3bcdp+0 got %a\n", sqrt(2.0)); + + if (sizeof pow(sqrt(8),0.5f) != sizeof(double)) + t_error("sizeof pow(sqrt(8),0.5f) want %d got %d\n", (int)sizeof(double), (int)sizeof pow(sqrt(8),0.5f)); + if (sizeof pow(2.0,0.5) != sizeof(double)) + t_error("sizeof pow(2.0,0.5) want %d got %d\n", (int)sizeof(double), (int)sizeof pow(2.0,0.5)); + if (sizeof pow(2.0f,0.5f) != sizeof(float)) + t_error("sizeof pow(2.0f,0.5f) want %d got %d\n", (int)sizeof(float), (int)sizeof pow(2.0f,0.5f)); +// if (sizeof pow(2.0,0.5+0*I) != sizeof(double complex)) +// t_error("sizeof pow(2.0,0.5+0*I) want %d got %d\n", (int)sizeof(double complex), (int)sizeof pow(2.0,0.5+0*I)); + + if (pow(2.0,0.5) != 1.414213562373095145474621858738828450441360) + t_error("pow(2.0,0.5) want 0x1.6a09e667f3bcdp+0 got %a\n", pow(2.0,0.5)); + if (pow(2,0.5) != 1.414213562373095145474621858738828450441360) + t_error("pow(2,0.5) want 0x1.6a09e667f3bcdp+0 got %a\n", pow(2,0.5)); + if (pow(2,0.5f) != 1.414213562373095145474621858738828450441360) + t_error("pow(2,0.5f) want 0x1.6a09e667f3bcdp+0 got %a\n", pow(2,0.5f)); + + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/time.c b/programs/develop/ktcc/trunk/libctest/time.c new file mode 100644 index 0000000000..0b22dfc12c --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/time.c @@ -0,0 +1,110 @@ +#define _XOPEN_SOURCE 700 +#include +#include +#include +#include +#include +#include +#include "test.h" + +/* We use this instead of memcmp because some broken C libraries + * add additional nonstandard fields to struct tm... */ + +int tm_cmp(struct tm tm1, struct tm tm2) +{ + return tm1.tm_sec != tm2.tm_sec || + tm1.tm_min != tm2.tm_min || + tm1.tm_hour != tm2.tm_hour || + tm1.tm_mday != tm2.tm_mday || + tm1.tm_mon != tm2.tm_mon || + tm1.tm_year != tm2.tm_year || + tm1.tm_wday != tm2.tm_wday || + tm1.tm_yday != tm2.tm_yday || + tm1.tm_isdst!= tm2.tm_isdst; +} + +char *tm_str(struct tm tm) +{ + static int i; + static char b[4][64]; + i = (i+1)%4; + snprintf(b[i], sizeof b[i], + "s=%02d m=%02d h=%02d mday=%02d mon=%02d year=%04d wday=%d yday=%d isdst=%d", + tm.tm_sec, tm.tm_min, tm.tm_hour, + tm.tm_mday, tm.tm_mon, tm.tm_year, + tm.tm_wday, tm.tm_yday, tm.tm_isdst); + return b[i]; +} + +#define TM(ss,mm,hh,md,mo,yr,wd,yd,dst) (struct tm){ \ + .tm_sec = ss, .tm_min = mm, .tm_hour = hh, \ + .tm_mday = md, .tm_mon = mo, .tm_year = yr, \ + .tm_wday = wd, .tm_yday = yd, .tm_isdst = dst } + +#define TM_EPOCH TM(0,0,0,1,0,70,4,0,0) +#define TM_Y2038_1S TM(7,14,3,19,0,138,2,18,0) +#define TM_Y2038 TM(8,14,3,19,0,138,2,18,0) + +static void sec2tm(time_t t, char *m) +{ + struct tm *tm; + time_t r; + + errno = 0; + tm = gmtime(&t); + if (errno != 0) + t_error("%s: gmtime((time_t)%lld) should not set errno, got %s\n", + m, (long long)t, strerror(errno)); + errno = 0; + r = mktime(tm); + if (errno != 0) + t_error("%s: mktime(%s) should not set errno, got %s\n", + m, tm_str(*tm), strerror(errno)); + if (t != r) + t_error("%s: mktime(gmtime(%lld)) roundtrip failed: got %lld (gmtime is %s)\n", + m, (long long)t, (long long)r, tm_str(*tm)); +} + +static void tm2sec(struct tm *tm, int big, char *m) +{ + struct tm *r; + time_t t; + int overflow = big && (time_t)LLONG_MAX!=LLONG_MAX; + + errno = 0; + t = mktime(tm); + if (overflow && t != -1) + t_error("%s: mktime(%s) expected -1, got (time_t)%ld\n", + m, tm_str(*tm), (long)t); + if (overflow && errno != 10000) //EOVERFLOW + t_error("%s: mktime(%s) expected EOVERFLOW (%s), got (%s)\n", + m, tm_str(*tm), strerror(10000), strerror(errno)); + if (!overflow && t == -1) + t_error("%s: mktime(%s) expected success, got (time_t)-1\n", + m, tm_str(*tm)); + if (!overflow && errno) + t_error("%s: mktime(%s) expected no error, got (%s)\n", + m, tm_str(*tm), strerror(errno)); + r = gmtime(&t); + if (!overflow && tm_cmp(*r, *tm)) + t_error("%s: gmtime(mktime(%s)) roundtrip failed: got %s\n", + m, tm_str(*tm), tm_str(*r)); +} + +int main(void) +{ + time_t t; + + putenv("TZ=GMT"); + tzset(); + tm2sec(&TM_EPOCH, 0, "gmtime(0)"); + tm2sec(&TM_Y2038_1S, 0, "2038-1s"); + tm2sec(&TM_Y2038, 1, "2038"); + + sec2tm(0, "EPOCH"); + for (t = 1; t < 1000; t++) + sec2tm(t*100003, "EPOCH+eps"); + + /* FIXME: set a TZ var and check DST boundary conditions */ + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/traceadr.c b/programs/develop/ktcc/trunk/libctest/traceadr.c new file mode 100644 index 0000000000..478973808e --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/traceadr.c @@ -0,0 +1,19 @@ +#include + +# define TRACE1(s, a) printf(s, a) + +void caller(void* ptr) +{ + + ptr = 0xaaaaaaaa; + TRACE1("caller is called from EIP@%x\n", *(int*)((char*)&ptr-4)-5); + +} + + +int main() +{ + + caller(0xffffffff); +} + diff --git a/programs/develop/ktcc/trunk/libctest/tstring.c b/programs/develop/ktcc/trunk/libctest/tstring.c new file mode 100644 index 0000000000..0b0c1e04cd --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/tstring.c @@ -0,0 +1,357 @@ +/* + * Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +#include +#include +#include + +#ifndef MAX_1 +#ifdef __SPU__ +#define MAX_1 11000 +#else +#define MAX_1 33000 +#endif +#endif + +#define MAX_2 (2 * MAX_1 + MAX_1 / 10) + +void eprintf (int line, char *result, char *expected, int size) +{ + if (size != 0) + printf ("Failure at line %d, result is <%.*s>, should be <%s> of size %d\n", + line, size, result, expected, size); + else + printf ("Failure at line %d, result is <%s>, should be <%s>\n", + line, result, expected); +} + +void mycopy (char *target, char *source, int size) +{ + int i; + + for (i = 0; i < size; ++i) + { + target[i] = source[i]; + } +} + +void myset (char *target, char ch, int size) +{ + int i; + + for (i = 0; i < size; ++i) + { + target[i] = ch; + } +} + +int main() +{ + char target[MAX_1] = "A"; + char first_char; + char second_char; + char array[] = "abcdefghijklmnopqrstuvwxz"; + char array2[] = "0123456789!@#$%^&*("; + char buffer2[MAX_1]; + char buffer3[MAX_1]; + char buffer4[MAX_1]; + char buffer5[MAX_2]; + char buffer6[MAX_2]; + char buffer7[MAX_2]; + char expected[MAX_1]; + char *tmp1, *tmp2, *tmp3, *tmp4, *tmp5, *tmp6, *tmp7; + int i, j, k, x, z, align_test_iterations; + + int test_failed = 0; + + tmp1 = target; + tmp2 = buffer2; + tmp3 = buffer3; + tmp4 = buffer4; + tmp5 = buffer5; + tmp6 = buffer6; + tmp7 = buffer7; + + tmp2[0] = 'Z'; + tmp2[1] = '\0'; + + if (memset (target, 'X', 0) != target || + memcpy (target, "Y", 0) != target || + memmove (target, "K", 0) != target || + strncpy (tmp2, "4", 0) != tmp2 || + strncat (tmp2, "123", 0) != tmp2 || + strcat (target, "") != target) + { + eprintf (__LINE__, target, "A", 0); + test_failed = 1; + } + + if (strcmp (target, "A") || strlen(target) != 1 || memchr (target, 'A', 0) != NULL + || memcmp (target, "J", 0) || strncmp (target, "A", 1) || strncmp (target, "J", 0) || + tmp2[0] != 'Z' || tmp2[1] != '\0') + { + eprintf (__LINE__, target, "A", 0); + test_failed = 1; + } + + tmp2[2] = 'A'; + if (strcpy (target, "") != target || + strncpy (tmp2, "", 4) != tmp2 || + strcat (target, "") != target) + { + eprintf (__LINE__, target, "", 0); + test_failed = 1; + } + + if (target[0] != '\0' || strncmp (target, "", 1) || + memcmp (tmp2, "\0\0\0\0", 4)) + { + eprintf (__LINE__, target, "", 0); + test_failed = 1; + } + + tmp2[2] = 'A'; + if (strncat (tmp2, "1", 3) != tmp2 || + memcmp (tmp2, "1\0A", 3)) + { + eprintf (__LINE__, tmp2, "1\0A", 3); + test_failed = 1; + } + + if (strcpy (tmp3, target) != tmp3 || + strcat (tmp3, "X") != tmp3 || + strncpy (tmp2, "X", 2) != tmp2 || + memset (target, tmp2[0], 1) != target) + { + eprintf (__LINE__, target, "X", 0); + test_failed = 1; + } + + if (strcmp (target, "X") || strlen (target) != 1 || + memchr (target, 'X', 2) != target || + strchr (target, 'X') != target || + memchr (target, 'Y', 2) != NULL || + strchr (target, 'Y') != NULL || + strcmp (tmp3, target) || + strncmp (tmp3, target, 2) || + memcmp (target, "K", 0) || + strncmp (target, tmp3, 3)) + { + eprintf (__LINE__, target, "X", 0); + test_failed = 1; + } + + if (strcpy (tmp3, "Y") != tmp3 || + strcat (tmp3, "Y") != tmp3 || + memset (target, 'Y', 2) != target) + { + eprintf (__LINE__, target, "Y", 0); + test_failed = 1; + } + + target[2] = '\0'; + if (memcmp (target, "YY", 2) || strcmp (target, "YY") || + strlen (target) != 2 || memchr (target, 'Y', 2) != target || + strcmp (tmp3, target) || + strncmp (target, tmp3, 3) || + strncmp (target, tmp3, 4) || + strncmp (target, tmp3, 2) || + strchr (target, 'Y') != target) + { + eprintf (__LINE__, target, "YY", 2); + test_failed = 1; + } + + strcpy (target, "WW"); + if (memcmp (target, "WW", 2) || strcmp (target, "WW") || + strlen (target) != 2 || memchr (target, 'W', 2) != target || + strchr (target, 'W') != target) + { + eprintf (__LINE__, target, "WW", 2); + test_failed = 1; + } + + if (strncpy (target, "XX", 16) != target || + memcmp (target, "XX\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16)) + { + eprintf (__LINE__, target, "XX\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 16); + test_failed = 1; + } + + if (strcpy (tmp3, "ZZ") != tmp3 || + strcat (tmp3, "Z") != tmp3 || + memcpy (tmp4, "Z", 2) != tmp4 || + strcat (tmp4, "ZZ") != tmp4 || + memset (target, 'Z', 3) != target) + { + eprintf (__LINE__, target, "ZZZ", 3); + test_failed = 1; + } + + target[3] = '\0'; + tmp5[0] = '\0'; + strncat (tmp5, "123", 2); + if (memcmp (target, "ZZZ", 3) || strcmp (target, "ZZZ") || + strcmp (tmp3, target) || strcmp (tmp4, target) || + strncmp (target, "ZZZ", 4) || strncmp (target, "ZZY", 3) <= 0 || + strncmp ("ZZY", target, 4) >= 0 || + memcmp (tmp5, "12", 3) || + strlen (target) != 3) + { + eprintf (__LINE__, target, "ZZZ", 3); + test_failed = 1; + } + + target[2] = 'K'; + if (memcmp (target, "ZZZ", 2) || strcmp (target, "ZZZ") >= 0 || + memcmp (target, "ZZZ", 3) >= 0 || strlen (target) != 3 || + memchr (target, 'K', 3) != target + 2 || + strncmp (target, "ZZZ", 2) || strncmp (target, "ZZZ", 4) >= 0 || + strchr (target, 'K') != target + 2) + { + eprintf (__LINE__, target, "ZZK", 3); + test_failed = 1; + } + + strcpy (target, "AAA"); + if (memcmp (target, "AAA", 3) || strcmp (target, "AAA") || + strncmp (target, "AAA", 3) || + strlen (target) != 3) + { + eprintf (__LINE__, target, "AAA", 3); + test_failed = 1; + } + + j = 5; + while (j < MAX_1) + { + for (i = j-1; i <= j+1; ++i) + { + /* don't bother checking unaligned data in the larger + sizes since it will waste time without performing additional testing */ + if (i <= 16 * sizeof(long)) + { + align_test_iterations = 2*sizeof(long); + if (i <= 2 * sizeof(long) + 1) + z = 2; + else + z = 2 * sizeof(long); + } + else + { + align_test_iterations = 1; + } + + for (x = 0; x < align_test_iterations; ++x) + { + tmp1 = target + x; + tmp2 = buffer2 + x; + tmp3 = buffer3 + x; + tmp4 = buffer4 + x; + tmp5 = buffer5 + x; + tmp6 = buffer6 + x; + + first_char = array[i % (sizeof(array) - 1)]; + second_char = array2[i % (sizeof(array2) - 1)]; + memset (tmp1, first_char, i); + mycopy (tmp2, tmp1, i); + myset (tmp2 + z, second_char, i - z - 1); + if (memcpy (tmp1 + z, tmp2 + z, i - z - 1) != tmp1 + z) + { + printf ("error at line %d\n", __LINE__); + test_failed = 1; + } + + tmp1[i] = '\0'; + tmp2[i] = '\0'; + if (strcpy (expected, tmp2) != expected) + { + printf ("error at line %d\n", __LINE__); + test_failed = 1; + } + tmp2[i-z] = first_char + 1; + if (memmove (tmp2 + z + 1, tmp2 + z, i - z - 1) != tmp2 + z + 1 || + memset (tmp3, first_char, i) != tmp3) + { + printf ("error at line %d\n", __LINE__); + test_failed = 1; + } + + myset (tmp4, first_char, i); + tmp5[0] = '\0'; + if (strncpy (tmp5, tmp1, i+1) != tmp5 || + strcat (tmp5, tmp1) != tmp5) + { + printf ("error at line %d\n", __LINE__); + test_failed = 1; + } + mycopy (tmp6, tmp1, i); + mycopy (tmp6 + i, tmp1, i + 1); + + tmp7[2*i+z] = second_char; + strcpy (tmp7, tmp1); + + strchr (tmp1, second_char); + + if (memcmp (tmp1, expected, i) || strcmp (tmp1, expected) || + strncmp (tmp1, expected, i) || + strncmp (tmp1, expected, i+1) || + strcmp (tmp1, tmp2) >= 0 || memcmp (tmp1, tmp2, i) >= 0 || + strncmp (tmp1, tmp2, i+1) >= 0 || + strlen (tmp1) != i || memchr (tmp1, first_char, i) != tmp1 || + strchr (tmp1, first_char) != tmp1 || + memchr (tmp1, second_char, i) != tmp1 + z || + strchr (tmp1, second_char) != tmp1 + z || + strcmp (tmp5, tmp6) || + strncat (tmp7, tmp1, i+2) != tmp7 || + strcmp (tmp7, tmp6) || + tmp7[2*i+z] != second_char) + { + eprintf (__LINE__, tmp1, expected, 0); + printf ("x is %d\n",x); + printf ("i is %d\n", i); + printf ("tmp1 is <%p>\n", tmp1); + printf ("tmp5 is <%p> <%s>\n", tmp5, tmp5); + printf ("tmp6 is <%p> <%s>\n", tmp6, tmp6); + test_failed = 1; + } + + for (k = 1; k <= align_test_iterations && k <= i; ++k) + { + if (memcmp (tmp3, tmp4, i - k + 1) != 0 || + strncmp (tmp3, tmp4, i - k + 1) != 0) + { + printf ("Failure at line %d, comparing %.*s with %.*s\n", + __LINE__, i, tmp3, i, tmp4); + test_failed = 1; + } + tmp4[i-k] = first_char + 1; + if (memcmp (tmp3, tmp4, i) >= 0 || + strncmp (tmp3, tmp4, i) >= 0 || + memcmp (tmp4, tmp3, i) <= 0 || + strncmp (tmp4, tmp3, i) <= 0) + { + printf ("Failure at line %d, comparing %.*s with %.*s\n", + __LINE__, i, tmp3, i, tmp4); + test_failed = 1; + } + tmp4[i-k] = first_char; + } + } + } + j = ((2 * j) >> 2) << 2; + } + + printf("\n %s finished\n", __FILE__); + if (test_failed) + { + printf("\n %s FAILED\n", __FILE__); + abort(); + } + else + exit(0); +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libctest/udiv.c b/programs/develop/ktcc/trunk/libctest/udiv.c new file mode 100644 index 0000000000..3522c6340f --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/udiv.c @@ -0,0 +1,170 @@ +#include "test.h" +//#include + +/* +static uint64_t randstate = 0x123456789abcdef0ull; +static uint64_t rnd(void) { + randstate = 6364136223846793005ull*randstate + 1; + return randstate; +} +void test_maketest() +{ + int i; + uint64_t x,y; + for (i = 0; i < 128; i++) { + x = rnd(); + y = rnd()>>(i/2); + if (!y) + continue; + printf("0x%llxull, 0x%llxull, 0x%llxull, 0x%llxull,\n", x, y, x/y, x%y); + } +} +*/ + +static struct { + uint64_t x, y, div, mod; +} t[] = { +0x8ddb1a43e77c4031ull, 0x5950e8c33d34979eull, 0x1ull, 0x348a3180aa47a893ull, +0x723f4114006c08c7ull, 0x817de530db2b43fcull, 0x0ull, 0x723f4114006c08c7ull, +0x47811fa5f00f74dull, 0x3d98e7d3fcd5d5c5ull, 0x0ull, 0x47811fa5f00f74dull, +0x51ffcc7cdc989d43ull, 0x36be8bd6746b70e4ull, 0x1ull, 0x1b4140a6682d2c5full, +0x57bf9128512fe829ull, 0x197b3858155d498dull, 0x3ull, 0xb4de82011180b82ull, +0x89fc1c5968fa817full, 0xdcea797734c7115ull, 0x9ull, 0xdb838065b4a87c2ull, +0x4ed5264cf7092ec5ull, 0xde40d1e15ef3e74ull, 0x5ull, 0x960e4b6895cf681ull, +0xffd86b253d97317bull, 0x13f9ff2d24b6d6f4ull, 0xcull, 0x1020750785051e0bull, +0x8771fa2da656a721ull, 0x9210fe654c59bfcull, 0xeull, 0x7a31b9503881f59ull, +0xb5961d12bcd3e937ull, 0xbdb5a33662f547aull, 0xfull, 0x3bbd40fc00df611ull, +0x93c79eecdac7ed3dull, 0x6f267c57ea2b7b5ull, 0x15ull, 0x1e51bb9776edb64ull, +0x6b93ffce49f1a4b3ull, 0x3583d1f9702ee03ull, 0x20ull, 0x8c5bdb6993e453ull, +0x138aefcc98ce5d19ull, 0x117002fa7600b11ull, 0x11ull, 0x103eca27b6da0f8ull, +0xb3da641cef491fefull, 0x357615f638334b8ull, 0x35ull, 0x2c33b5d551f35d7ull, +0x71c4b06e463912b5ull, 0x1c286ad9e8f5229ull, 0x40ull, 0x1230506a2648875ull, +0x97d4cf7df046d6ebull, 0x1e9412f5c77b2b8ull, 0x4full, 0xd9b1e06756b023ull, +0x1428f04bd490ea11ull, 0x9d97f29a897c93ull, 0x20ull, 0x75f1f8836157b1ull, +0x35256c76832705a7ull, 0xa962f1a447dcd7ull, 0x50ull, 0x3680f32cb20277ull, +0x2969e82bd9347f2dull, 0x723d68574d4156ull, 0x5cull, 0x5bd6ac79710445ull, +0x9061a12aae71a823ull, 0x4186d8a1a66175ull, 0x234ull, 0x48be68be2f25full, +0x695b8d33ef342e09ull, 0x3ed1fe1a998fe3ull, 0x1adull, 0x15a6615bde0ea2ull, +0x46b4dd1e06367a5full, 0xa04e70622e4e8ull, 0x70eull, 0x64750bc0b9dafull, +0xd68b05ba7eee12a5ull, 0x72ab3fb682444ull, 0x1defull, 0x3c437fc988329ull, +0x1e59cc2ac508f85bull, 0xeb15ae6d4d7f9ull, 0x210ull, 0xc00aeae0b86cbull, +0x296f8d2c76a0901ull, 0xf65628b31b01ull, 0x2b0ull, 0xf14566117651ull, +0x7036f5ad7cbc5e17ull, 0xa09d3bfcf72cfull, 0xb2dull, 0x72236db564ab4ull, +0x915d6883c575ad1dull, 0x3a38d68d3a38eull, 0x27f2ull, 0x241de6f7a6ee1ull, +0x845ba74f5adfa793ull, 0x2f6950e58d00bull, 0x2caaull, 0x249dc90239c45ull, +0xb910d16c54805af9ull, 0x1fc2ca5c99a7aull, 0x5d3aull, 0x1771487b50955ull, +0x27a2e280bcf990cfull, 0x389aa0c0b0cc0ull, 0xb34ull, 0x9d71d12eb9cfull, +0x1e032f04a5372e95ull, 0x63c2a1d58710ull, 0x4d04ull, 0x154ce4414255ull, +0x3a1a5659908495cbull, 0x279dcd85418aull, 0x17775ull, 0x132c6f9c7bb9ull, +0xd769a376e5e103f1ull, 0xadacb670e0c7ull, 0x13d85ull, 0x8ad256e5d18eull, +0x269f4f4baaaf287ull, 0x1aed2ad9daf0ull, 0x16f3ull, 0x426550f80b7ull, +0x6700daeeb87a770dull, 0xeca7ab1aa93ull, 0x6f6c5ull, 0x70d9466f1eeull, +0xd0201f3783c2a303ull, 0x3a0c01aa3e6aull, 0x395e1ull, 0x18b33b9015d9ull, +0xca3f2e00d291e3e9ull, 0xbe0e048cd94ull, 0x1106c2ull, 0x37f7fc0a1c1ull, +0xec4d240dc289633full, 0x4f8aadb7483ull, 0x2f8855ull, 0x46e0db91bc0ull, +0xd7967b29e2e36685ull, 0xe61d902db27ull, 0xefd69ull, 0x36811fff886ull, +0xe3ecd4374320af3bull, 0x4edd0edd0a0ull, 0x2e3defull, 0x4ad0da4c9dbull, +0x7a08fe1d98b4dae1ull, 0x6bced9c0c15ull, 0x121c89ull, 0x40c856617a4ull, +0x34435992a5c9c2f7ull, 0x4f4a94c109full, 0xa8bc9ull, 0x94c5d46120ull, +0x6fd0027468f1dcfdull, 0x597186b0153ull, 0x140060ull, 0x16f26555dddull, +0x4fe37c1db1619a73ull, 0x47a0c30bd15ull, 0x11d861ull, 0x5964fb3d7eull, +0x77aa77f86d07c8d9ull, 0x3a39cf03d65ull, 0x20e21cull, 0x37f7fede7cdull, +0xc072e76ad59cf1afull, 0x3a786701dull, 0x34a98c59ull, 0x22b6b1b9aull, +0xfb8e8f1f7781ba75ull, 0xe8ca427d3eull, 0x114a34dull, 0xa344eb94cfull, +0x160e34cf590444abull, 0xe2388f12feull, 0x18f574ull, 0xc303329393ull, +0x2509ddea3a648dd1ull, 0xec762d81bcull, 0x281955ull, 0xc0463d1e65ull, +0xc9ba10cd6eafcf67ull, 0x96a51d06f7ull, 0x156ce72ull, 0x133e2df369ull, +0x1dd4fe261b4adeedull, 0x2736e25406ull, 0xc2bfefull, 0x1354c1f353ull, +0x480258f92fc38de3ull, 0x2599b52bb0ull, 0x1ea450cull, 0x2879f11a3ull, +0x5a3257b1114109c9ull, 0x2978f9f1aaull, 0x22cc30aull, 0x1317311b25ull, +0xf4eeda8f34ab3c1full, 0x1aa70450d9ull, 0x9309d64ull, 0x1187b6925bull, +0x3c2c319ca8612a65ull, 0x73fc01eceull, 0x84d0088ull, 0x3165accf5ull, +0x4f6034e74a16561bull, 0x1f29d53707ull, 0x28c0daaull, 0xd88e07075ull, +0x206665a7072f1cc1ull, 0xda87e7ceaull, 0x25f48c1ull, 0xd3ddb2057ull, +0x100c559d7db417d7ull, 0xb907ebbc2ull, 0x1634188ull, 0xa2eae16c7ull, +0x64c5f83691b47cddull, 0x5aced6ebbull, 0x11c17fb7ull, 0x344109030ull, +0x32a812777eaf7d53ull, 0x1cb63fe4full, 0x1c3a9675ull, 0xb113f938ull, +0x67478d96865ca6b9ull, 0x142fa03aull, 0x51dcb463dull, 0x11359ce7ull, +0x71024e740deb428full, 0x142d3885ull, 0x599d9edd5ull, 0x13b1ae6ull, +0x52c78160b090b655ull, 0xd02101c6ull, 0x65d1b205ull, 0x1c0a0177ull, +0x16917d5f9fde38bull, 0xfb1566c7ull, 0x17029e0ull, 0x1bbe166bull, +0xa6ee688a0d1387b1ull, 0x22c4d384ull, 0x4cd19afcfull, 0x77143f5ull, +0x74babc1be2ed9c47ull, 0x22eda9a6ull, 0x3578b1967ull, 0x189b247dull, +0x7c5cbf2dfc1db6cdull, 0x5f09c060ull, 0x14efd44d4ull, 0x5210e74dull, +0x7c046071c1ac68c3ull, 0x3696c8e6ull, 0x24596d86bull, 0x26060a1ull, +0x84728ab55d399fa9ull, 0x267d7771ull, 0x370ea7405ull, 0x255d1674ull, +0x99f57100ef5404ffull, 0x10c0df86ull, 0x9308fef0dull, 0x9009131ull, +0x3f4c0514b0df5e45ull, 0xf2c3810ull, 0x42bf84d39ull, 0x3aa12b5ull, +0xd01edb572821ecfbull, 0x2a443aeull, 0x4ec8b88639ull, 0x111c73dull, +0xeecb08561bd0cea1ull, 0xbeca231ull, 0x140692508bull, 0x9b36e06ull, +0x8c856facc6335cb7ull, 0x398eab4ull, 0x271008c7a5ull, 0x922ab3ull, +0x23fb9839e8358cbdull, 0x24deb54ull, 0xf9d714151ull, 0xb9c329ull, +0x2005d5de30015033ull, 0x47c06dbull, 0x7240bccbaull, 0x104d115ull, +0x67d59c29e076f499ull, 0x179f009ull, 0x465554ac22ull, 0x10b0767ull, +0x32d2dd34369c836full, 0x13d3fbfull, 0x2902f2fb54ull, 0x7553c3ull, +0x3960c3c99fdc2235ull, 0x1b808baull, 0x21618743cdull, 0x11e7743ull, +0x343bad5adfa9726bull, 0xeef444ull, 0x37f58c51a6ull, 0x3d8a53ull, +0x7a4aadd7b4e5f191ull, 0x129c9ull, 0x6921bb5a2a53ull, 0x6b66ull, +0x9eb7dae5d71c5927ull, 0x31d7f5ull, 0x32f2ff2c6d5ull, 0x22c4eull, +0x1b285999316afeadull, 0x115477ull, 0x1912cf6611eull, 0x801bbull, +0x917aee3d84b533a3ull, 0x71d26full, 0x1473408589aull, 0x6e74ddull, +0x18e6a86b0473a589ull, 0x50a12ull, 0x4f0fabc67d4ull, 0x210a1ull, +0xf22c9887813bbddfull, 0x5b17aull, 0x2a897505c07bull, 0x1f841ull, +0xef7a551239d60225ull, 0x7fb5aull, 0x1e00b98e188bull, 0x41847ull, +0xffd2ad0e77b73dbull, 0x146f14ull, 0xc8500600a3ull, 0xba1full, +0x76743abdfb91f081ull, 0xd5888ull, 0x8e0303c479cull, 0x245a1ull, +0xc2eeb030bcff9197ull, 0x7a4e8ull, 0x198034e02c37ull, 0x343bfull, +0x63cc9c23f0ed0c9dull, 0x6c1e5ull, 0xec4d5841041ull, 0x38178ull, +0x7ad70f846e8f1313ull, 0x7fdf5ull, 0xf5ecec69bc9ull, 0x756b6ull, +0x60de3d71574eb279ull, 0x6ea3ull, 0xe02421997a61ull, 0x18b6ull, +0xd27054901c68b44full, 0x2dd0full, 0x497d639c8f46ull, 0xe135ull, +0xbcf297b8f0dbfe15ull, 0xcf17ull, 0xe992af0ca1abull, 0x32b8ull, +0x96c3ae70323ef14bull, 0xbbdcull, 0xcd7329b68d81ull, 0x1b6full, +0xdc1a13cfa4d3cb71ull, 0xdb16ull, 0x1012fe5ed296full, 0x46e7ull, +0xa1d40a2986f40607ull, 0x8067ull, 0x142a473fdb7beull, 0x1895ull, +0x227f92ef6daab68dull, 0x15ecull, 0x192dda5d5ed25ull, 0xf71ull, +0xc0a4a7810015ee83ull, 0x6064ull, 0x1ffa220762fc8ull, 0x4463ull, +0xd38b6eb9f0e71b69ull, 0x1909ull, 0x8732ce2cc77f4ull, 0xfd5ull, +0x2e588bdb751a66bfull, 0x229cull, 0x156d025c70d97ull, 0x10bbull, +0xd90f7e11dcbd1605ull, 0x760ull, 0x1d6e934381ba2eull, 0x2c5ull, +0x60ab67a4e5aeabbull, 0x1bf7ull, 0x374f26f3e3edull, 0x210ull, +0x224f627be76a8261ull, 0x4f4ull, 0x6ed4d3882b567ull, 0x35ull, +0x300d1ab91bd0b677ull, 0xe9cull, 0x34a002fb76e63ull, 0x823ull, +0x2a63d80e0c52fc7dull, 0x32ull, 0xd90970ebc4383full, 0x2full, +0xb0e94bbc1f90c5f3ull, 0x3b3ull, 0x2fd2ef70381c52ull, 0x29dull, +0x2b5dc22562dbe059ull, 0x30aull, 0xe45055015fff5ull, 0x1c7ull, +0x4a7fd1078807d52full, 0x18dull, 0x300a32f60677d4ull, 0x16bull, +0x41a01ee8ab0849f5ull, 0x13cull, 0x352a3971f57e9dull, 0x29ull, +0x95a7287ad5f6602bull, 0x1d0ull, 0x529130d1034a23ull, 0xbbull, +0x723bacc76bd51551ull, 0x16ull, 0x53142091089af83ull, 0xfull, +0x81c49febaa2ca2e7ull, 0xcdull, 0xa20d44956f5bf4ull, 0x83ull, +0x11593d6b3f54de6dull, 0x63ull, 0x2cdc6b1a7f9078ull, 0x5ull, +0x756c82d6f7069963ull, 0x5cull, 0x146bea3ba565525ull, 0x17ull, +0xda882ab2a88c0149ull, 0x1bull, 0x8180194d6d5c728ull, 0x11ull, +0xbb03671751a7ff9full, 0x20ull, 0x5d81b38ba8d3ffcull, 0x1full, +0x6884fa0a8f0c99e5ull, 0x12ull, 0x5ce7fab40d6088cull, 0xdull, +0x5052a2953c528441ull, 0x7ull, 0xb7984f0bf79809bull, 0x4ull, +0x58dd1583185ecb57ull, 0x9ull, 0x9dfad0e90ee1697ull, 0x8ull, +0xaa6870c376df5c5dull, 0x3ull, 0x38cd7aebd24a741full, 0x0ull, +0x4b21d01617167e39ull, 0x2ull, 0x2590e80b0b8b3f1cull, 0x1ull, +}; + +int main(void) +{ + uint64_t x, y, div, mod; + int i; + + for (i = 0; i < sizeof t/sizeof *t; i++) { + x = t[i].x; + y = t[i].y; + div = x / y; + mod = x % y; + if (div != t[i].div) + t_error("udiv %llu/%llu want %llu got %llu\n", x, y, t[i].div, div); + if (mod != t[i].mod) + t_error("umod %llu%%%llu want %llu got %llu\n", x, y, t[i].mod, mod); + } + + printf("%s finished\n", __FILE__); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/ungetc.c b/programs/develop/ktcc/trunk/libctest/ungetc.c new file mode 100644 index 0000000000..d658c199c7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/ungetc.c @@ -0,0 +1,114 @@ +#include +#include +#include +//#include +//#include +//#include +#include "test.h" + +#define TEST(r, f, x, m) ( \ + errno = 0, ((r) = (f)) == (x) || \ + (t_error("%s failed (" m ")\n", #f, r, x, strerror(errno)), 0) ) + +#define TEST_S(s, x, m) ( \ + !strcmp((s),(x)) || \ + (t_error("[%s] != [%s] (%s)\n", s, x, m), 0) ) + +#include +#include +#include +#include + +#define fgetc fgetc_dbg +#define ungetc ungetc_dbg + + +int fgetc_dbg(FILE* file) +{ + int c = 0, rc; + + rc = fread(&c, 1, 1, file); + + if (rc < 1) return EOF; + + return c; +} + +int ungetc_dbg(int c,FILE* file) +{ + dword res; + + if(!file) + { + errno = E_INVALIDPTR; + return EOF; + } + + if ((file->mode & 3!=FILE_OPEN_READ) && (file->mode & FILE_OPEN_PLUS==0)) + { + errno = E_ACCESS; + return EOF; + } + + if (file->filepos>file->filesize || file->filepos==0 || c == EOF || file->ungetc_buf != EOF) + { + errno = E_EOF; + return EOF; + } + + file->ungetc_buf = c; + file->filepos--; + + return c; +} + +void mark(int n) +{ + n++; +} + + +int main(void) +{ + int i; + char a[100]; + FILE *f; + + TEST(i, !(f = fopen("_tmpfile.tmp","w+")), 0, "failed to create temp file %d!=%d (%s)"); + + if (!f) return t_status; + + TEST(i, fprintf(f, "hello, world\n"), 13, "%d != %d (%m)"); + TEST(i, fseek(f, 0, SEEK_SET), 0, "%d != %d (%m)"); + + TEST(i, feof(f), 0, "%d != %d"); + TEST(i, fgetc(f), 'h', "'%c' != '%c'"); + TEST(i, ftell(f), 1, "%d != %d"); + TEST(i, ungetc('x', f), 'x', "%d != %d"); + TEST(i, ftell(f), 0, "%d != %d"); + TEST(i, fscanf(f, "%[h]", a), 0, "got %d fields, expected %d"); + TEST(i, ftell(f), 0, "%d != %d"); +mark(0x11); +printf("debug file ungetbuf=%d\n", f->ungetc_buf); + TEST(i, fgetc(f), 'x', "'%c' != '%c'"); + TEST(i, ftell(f), 1, "%d != %d"); + + TEST(i, fseek(f, 0, SEEK_SET), 0, "%d != %d"); + TEST(i, ungetc('x', f), 'x', "%d != %d"); +mark(0x22); + TEST(i, fread(a, 1, sizeof a, f), 14, "read %d, expected %d"); + a[14] = 0; + TEST_S(a, "xhello, world\n", "mismatch reading ungot character"); + + TEST(i, fseek(f, 0, SEEK_SET), 0, "%d != %d"); + TEST(i, fscanf(f, "%[x]", a), 0, "got %d fields, expected %d"); + TEST(i, ungetc('x', f), 'x', "unget failed after fscanf: %d != %d"); + TEST(i, fgetc(f), 'x', "'%c' != '%c'"); +mark(0x33); + TEST(i, ftell(f), 1, "%d != %d"); + TEST(i, fgetc(f), 'h', "'%c' != '%c'"); + + printf("%s finished\n", __FILE__); + fclose(f); + return t_status; +} diff --git a/programs/develop/ktcc/trunk/libctest/ungetc2.c b/programs/develop/ktcc/trunk/libctest/ungetc2.c new file mode 100644 index 0000000000..8f4b44df81 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/ungetc2.c @@ -0,0 +1,39 @@ +/* ungetc example */ +#include + +void trace_file(FILE* f, char* cmt); + +int main () +{ + FILE * pFile; + int c; + char buffer [256]; + + pFile = fopen ("myfile.txt","rt"); + if (pFile==NULL) perror ("Error opening file"); + else while (!feof (pFile)) { + trace_file(pFile, "1"); + + c=getc (pFile); + + trace_file(pFile, "before ungetc"); + + if (c == EOF) break; + if (c == '#') ungetc ('@',pFile); + else ungetc (c,pFile); + + trace_file(pFile, "after"); + + if (fgets (buffer,255,pFile) != NULL) + puts (buffer); + else break; + } + return 0; +} + +void trace_file(FILE* f, char* cmt) +{ + printf("%s[%s]\n", cmt, f->buffer); + printf("mode=%0X, filesize=%d, filepos=%d\n", f->mode, f->filesize, f->filepos); + printf("ungetc=%d, buffer_start=%d, buffer_end=%d\n", f->ungetc_buf, f->buffer_start, f->buffer_end); +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/libctest/wtalloc.c b/programs/develop/ktcc/trunk/libctest/wtalloc.c new file mode 100644 index 0000000000..9f45e97de7 --- /dev/null +++ b/programs/develop/ktcc/trunk/libctest/wtalloc.c @@ -0,0 +1,131 @@ +#include +#include +#include +#include + +// suballocator functions +extern void* wtmalloc(size_t size); +extern void wtfree(void *pointer); +extern void* wtrealloc(void* pointer, size_t size); +extern void* wtcalloc (size_t num, size_t size); +extern int wtmalloc_freelist_check(); +extern int wtmalloc_poiner_check(void *ptr); +extern void wtdump_alloc_stats(); + +#ifdef __GNUC__ +void* sysmalloc(size_t sz) +{ + return malloc(sz); +} +#endif + + + +#define NUMPTR 10000 + +char *pointers[NUMPTR]; +char values[NUMPTR]; +int sizes[NUMPTR]; + +int checkvalues() +{ + for (int i = 0; i < NUMPTR; i++) + { + if (!pointers[i]) continue; + assert(wtmalloc_poiner_check(pointers[i])); + + for (int j = 0; j < sizes[i]; j++) + assert(pointers[i][j] == values[i]); + } + return 1; +} + + +int main() +{ + char *ptr; + int i, sz; + + puts("Test started"); + + // test start settings + assert(wtmalloc_freelist_check()); + // test just single alloc/dealloc + ptr = wtmalloc(1000); + assert(wtmalloc_poiner_check(ptr)); + wtfree(ptr); + assert(wtmalloc_freelist_check()); + + puts("test allocation started"); + // test allocation + for (i = 0; i < NUMPTR; i++) + { + sz = rand() % 4200; + pointers[i] = wtmalloc(sz); + sizes[i] = sz; + values[i] = sz % 256; + memset(pointers[i], values[i], sz); + + assert(wtmalloc_freelist_check()); + } + assert(checkvalues()); + + puts("test random deallocation started"); + // random deallocation + for (i = 0; i < NUMPTR; i++) + { + sz = rand() % 2; + if (sz) + { + wtfree(pointers[i]); + pointers[i] = NULL; + } + } + assert(wtmalloc_freelist_check()); + assert(checkvalues()); + + puts("test allocation in free list gaps started"); + // test allocation in free list gaps + for (i = 0; i < NUMPTR; i++) + { + if (pointers[i]) continue; + + sz = rand() % 4200; + pointers[i] = wtmalloc(sz); + sizes[i] = sz; + values[i] = sz % 256; + memset(pointers[i], values[i], sz); + } + assert(wtmalloc_freelist_check()); + assert(checkvalues()); + + puts("test realloc started"); + // test realloc + for (i = 0; i < NUMPTR; i++) + { + sz = rand() % 4200; + pointers[i] = wtrealloc(pointers[i], sz); + + sizes[i] = sz; + memset(pointers[i], values[i], sz); + } + assert(wtmalloc_freelist_check()); + assert(checkvalues()); + + + puts("test full deallocation started"); + // full deallocation + for (i = 0; i < NUMPTR; i++) + { + wtfree(pointers[i]); + pointers[i] = NULL; + } + assert(wtmalloc_freelist_check()); + + wtdump_alloc_stats(); + + printf("\ntests all OK\n"); + + return 0; + +} diff --git a/programs/develop/ktcc/trunk/samples/Makefile b/programs/develop/ktcc/trunk/samples/Makefile new file mode 100755 index 0000000000..a97b8c7443 --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/Makefile @@ -0,0 +1,28 @@ +CC=../bin/kos32-tcc +CFLAGS= -I ../libc/include + +all: + $(CC) $(CFLAGS) asm_ex.c -lck -o asm_ex.kex + $(CC) $(CFLAGS) consoleio.c -lck -o consoleio.kex + $(CC) $(CFLAGS) files.c -lck -o files.kex + $(CC) $(CFLAGS) winbasics.c -lck -o winbasics.kex + $(CC) $(CFLAGS) dynamic.c -lck -lhttp -linputbox -o dynamic.kex + $(CC) $(CFLAGS) load_coff.c -o load_coff.kex -lck + $(CC) $(CFLAGS) graphics.c -lck -lgb -o graphics.kex + $(CC) $(CFLAGS) dir_example.c -lck -o dir_example.kex + $(CC) $(CFLAGS) getopt_ex.c -lck -o getopt_ex.kex + + $(CC) $(CFLAGS) clayer/msgbox.c -lck -lmsgbox -o clayer/msgbox.kex + $(CC) $(CFLAGS) clayer/rasterworks.c -lck -lrasterworks -o clayer/rasterworks.kex + $(CC) $(CFLAGS) clayer/boxlib.c -lck -lbox -o clayer/boxlib.kex + $(CC) $(CFLAGS) clayer/libimg.c -lck -limg -o clayer/libimg.kex + $(CC) $(CFLAGS) clayer/dialog.c -lck -ldialog -o clayer/dialog.kex + + $(CC) $(CFLAGS) net/tcpsrv_demo.c -lck -o net/tcpsrv_demo.kex + $(CC) $(CFLAGS) net/nslookup.c -lck -lnetwork -o net/nslookup.kex + $(CC) $(CFLAGS) net/http_tcp_demo.c -lck -lnetwork -o net/http_tcp_demo.kex + + $(CC) $(CFLAGS) tinygl/fps.c tinygl/gears.c -o tinygl/gears.kex -ltinygl -lck + +clean: + rm *.kex clayer/*.kex net/*.kex tinygl/*.kex diff --git a/programs/develop/ktcc/trunk/samples/asm_ex.c b/programs/develop/ktcc/trunk/samples/asm_ex.c new file mode 100644 index 0000000000..2a0bc40313 --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/asm_ex.c @@ -0,0 +1,68 @@ +/* examples for interoperability with assembler + +1. Calling assembler code from .c : see in libc\math any .asm file +2. Using inline assembler: see \include\kos32sys1.h and libc\math\fmod.c +- https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/Extended-Asm.html +- not all constraints from gcc are supported, no "f" or "t" for example +- not supported clobberring st registers, must manual add "fstp %%st" at end or similar +- need full suffixes for opcodes, fstpl but not fstp + +3. Calling c functions from .asm: see \libc\start\start.asm:99 +Remember: +- small ints always passed as int32, floating point params as 64-bit +- returned structs passed on stack with additional hidden 1st param +- c functions can use EAX, ECX, EDX without warnings +- .c default is cdecl calling convention https://en.wikipedia.org/wiki/X86_calling_conventions +- dont use fastcall calling convention, tinycc realized it non-conformant way +- tinycc supports only ELF object files + +tcc can be used as a linker +*/ + + + + +#include +#include + + +main() +{ + int i; + for (i = 0; i < 20; i++) + { + printf("------------------------------------------------------\n"); + printf ( "remainder of 5.3 / 2 is %f\n", remainder (5.3,2) ); + printf ( "remainder of 18.5 / 4.2 is %f\n", remainder (18.5,4.2) ); +//remainder of 5.3 / 2 is -0.700000 +//remainder of 18.5 / 4.2 is 1.700000 + + printf ( "fmod of 5.3 / 2 is %f\n", fmod (5.3,2) ); + printf ( "fmod of 18.5 / 4.2 is %f\n", fmod (18.5,4.2) ); +// fmod of 5.3 / 2 is 1.300000 +// fmod of 18.5 / 4.2 is 1.700000 + + double param, fractpart, intpart, result; + int n; + + param = 3.14159265; + fractpart = modf (param , &intpart); + printf ("%f = %f + %f \n", param, intpart, fractpart); +//3.141593 = 3.000000 + 0.141593 + + param = 0.95; + n = 4; + result = ldexp (param , n); + printf ("%f * 2^%d = %f\n", param, n, result); +//0.950000 * 2^4 = 15.200000 + + param = 8.0; + result = frexp (param , &n); + printf ("%f = %f * 2^%d\n", param, result, n); +//8.000000 = 0.500000 * 2^4 + param = 50; + result = frexp (param , &n); + printf ("%f = %f * 2^%d\n", param, result, n); + + } +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/samples/build_all.sh b/programs/develop/ktcc/trunk/samples/build_all.sh new file mode 100644 index 0000000000..baf5c3c644 --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/build_all.sh @@ -0,0 +1,23 @@ +#SHS +/sys/@notify 'Build in progress...\nYou will find binaries in /tmp0/1/tccbin' -I +mkdir /tmp0/1/tccbin +../tcc asm_ex.c -lck -o /tmp0/1/tccbin/asm_ex +../tcc consoleio.c -lck -o /tmp0/1/tccbin/consoleio +../tcc files.c -lck -o /tmp0/1/tccbin/files +../tcc winbasics.c -lck -o /tmp0/1/tccbin/winbasics +../tcc dynamic.c -lck -lhttp -linputbox -o /tmp0/1/tccbin/dynamic +../tcc load_coff.c -o /tmp0/1/tccbin/load_coff -lck +../tcc clayer/msgbox.c -lck -lmsgbox -o /tmp0/1/tccbin/msgbox +../tcc graphics.c -lck -lgb -o /tmp0/1/tccbin/graphics +../tcc clayer/rasterworks.c -lck -lrasterworks -o /tmp0/1/tccbin/rasterworks +../tcc clayer/boxlib.c -lck -lbox -o /tmp0/1/tccbin/boxlib_ex +../tcc clayer/libimg.c -lck -limg -o /tmp0/1/tccbin/libimg_ex +cp clayer/logo.png /tmp0/1/tccbin/logo.png +../tcc clayer/dialog.c -lck -ldialog -o /tmp0/1/tccbin/dialog_ex +../tcc dir_example.c -lck -o /tmp0/1/tccbin/dir_example +../tcc net/tcpsrv_demo.c -lck -o /tmp0/1/tccbin/tcpsrv_demo +../tcc net/nslookup.c -lck -lnetwork -o /tmp0/1/tccbin/nslookup +../tcc net/http_tcp_demo.c -lck -lnetwork -o /tmp0/1/tccbin/http_tcp_demo +../tcc getopt_ex.c -lck -o /tmp0/1/tccbin/getopt_ex +../tcc tinygl/fps.c tinygl/gears.c -o /tmp0/1/tccbin/gears -ltinygl -lck +exit diff --git a/programs/develop/ktcc/trunk/samples/clayer/boxlib.c b/programs/develop/ktcc/trunk/samples/clayer/boxlib.c new file mode 100644 index 0000000000..39f01d023d --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/clayer/boxlib.c @@ -0,0 +1,110 @@ +// BOXLIB EXAMPLE (scrollbar, progressbar, editbox and checkbox) +// Writed by maxcodehack and superturbocat2001 + +#include +#include +#include +#include +#include + +#define WIN_W 640 +#define WIN_H 563 + +#define ED_BUFF_LEN 50 +#define TEXT_SIZE 0x10000000 +#define SCROLL_BUTTON_SIZE 15 +#define SCROLL_MAX_LEN 215 +#define BLACK 0x000000 +#define WHITE 0xFFFFFF +#define BLUE 0x0000FF + +uint32_t wheels; +char* title = "Boxlib example"; +char ed_buff[ED_BUFF_LEN]; + + +scrollbar scroll = {15, WIN_W - 26, WIN_H - 29, 0, 0, 2, 215, SCROLL_BUTTON_SIZE, 0,0x707070,0xD2CED0,0x555555}; +progressbar pg = {0, 10, 10, 270, 35, 1, 0, 200, 0xB4B4B4, 0x2728FF, 0xA9A9A9}; +edit_box ed={WIN_W-140,10,60,0xFFFFFF,0x6a9480,0,0x6a9480, BLACK | TEXT_SIZE, ED_BUFF_LEN, ed_buff,NULL,ed_focus}; +check_box output_off={X_W(10, 15), Y_H(120,15), 10, WHITE, BLUE, BLACK | TEXT_SIZE, "Disable duplicate output",0}; + +void draw_window(){ + BeginDraw(); + DrawWindow(215,100,WIN_W,WIN_H,title, 0x858585, 0x34); + edit_box_draw(&ed); + check_box_draw2(&output_off); + if(!output_off.flags) + { + draw_text_sys(ed_buff, 10, 90, strlen(ed_buff), BLACK | TEXT_SIZE); + } + scrollbar_v_draw(&scroll); + progressbar_draw(&pg); + EndDraw(); +} + +//// EVENTMASK +#define EVM_REDRAW 1 +#define EVM_KEY 2 +#define EVM_BUTTON 4 +#define EVM_EXIT 8 +#define EVM_BACKGROUND 16 +#define EVM_MOUSE 32 +#define EVM_IPC 64 +#define EVM_STACK 128 +#define EVM_DEBUG 256 +#define EVM_STACK2 512 +#define EVM_MOUSE_FILTER 0x80000000 +#define EVM_CURSOR_FILTER 0x40000000 +//// EVENTMASK + + +int main() +{ + kolibri_boxlib_init(); + init_checkbox2(&output_off); + set_event_mask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE+EVM_MOUSE_FILTER); + while(1) + { + switch(GetOsEvent()) + { + case KOLIBRI_EVENT_BUTTON: + if (get_os_button() == 1) exit(0); + break; + + case KOLIBRI_EVENT_KEY: + edit_box_key(&ed, get_key().val); + draw_window(); + break; + + case KOLIBRI_EVENT_REDRAW: + draw_window(); + break; + case KOLIBRI_EVENT_MOUSE: + edit_box_mouse(&ed); + scrollbar_v_mouse(&scroll); + pg.value = scroll.position; + progressbar_draw(&pg); + check_box_mouse2(&output_off); + unsigned int scroll_strong = 10; + wheels = GetMouseWheels(); + if(wheels & 0xFFFF) + { + if((short)wheels > 0){ + scroll.position += scroll_strong; + if(scroll.position>scroll.max_area-scroll.cur_area) + { + scroll.position=scroll.max_area-scroll.cur_area; + } + } + else if((short)wheels < 0 && scroll.position > 0){ + scroll.position -= scroll_strong; + if((int)scroll.position<0){ + scroll.position=0; + } + } + scrollbar_v_draw(&scroll); + } + break; + } + } +} diff --git a/programs/develop/ktcc/trunk/samples/clayer/dialog.c b/programs/develop/ktcc/trunk/samples/clayer/dialog.c new file mode 100644 index 0000000000..5ee125fecd --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/clayer/dialog.c @@ -0,0 +1,32 @@ +#include +#include +#include + +int main() +{ + kolibri_dialog_init(); // dialog init + open_dialog *dlg_open = kolibri_new_open_dialog(OPEN, 10, 10, 420, 320); // create opendialog struct + OpenDialog_init(dlg_open); // Initializing an open dialog box. + OpenDialog_start(dlg_open); // Show open dialog box + + color_dialog *color_select = kolibri_new_color_dialog(SELECT, 10, 10,420,320); // create colordialog struct + ColorDialog_init(color_select); // Initializing an color dialog box. + ColorDialog_start(color_select); // Show color dialog + + if(dlg_open->status == SUCCESS){ + printf("File selected '%s'\n",dlg_open->openfile_path); + }else{ + puts("No file selected!"); + } + + if(color_select->status == SUCCESS){ + printf("Color selected: #%06X\n",color_select->color); + RGB color_rgb = (RGB)color_select->color; + printf("Red:%d Green:%d Blue:%d", color_rgb.red, color_rgb.green, color_rgb.blue); + }else{ + puts("No color selected!"); + } + + free(dlg_open); + free(color_select); +} diff --git a/programs/develop/ktcc/trunk/samples/clayer/libimg.c b/programs/develop/ktcc/trunk/samples/clayer/libimg.c new file mode 100755 index 0000000000..299ed763be --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/clayer/libimg.c @@ -0,0 +1,97 @@ +/* Written by turbocat2001 (Logaev Maxim) */ + +#include +#include +#include +#include +#include + +#define NEW_IMG_H 128 +#define NEW_IMG_W 128 + +#define IMG_H 256 +#define IMG_W 256 + +Image *image_blend; // Create image struct + +struct kolibri_system_colors sys_color_table; // Create system colors table + +char* load_img(char* fname, int32_t* read_sz){ // Image file upload function + FILE *f = fopen(fname, "rb"); + if (!f) { + printf("Can't open file: %s\n", fname); + exit(0); + } + if (fseek(f, 0, SEEK_END)) { + printf("Can't SEEK_END file: %s\n", fname); + exit(0); + } + int filesize = ftell(f); + rewind(f); + char* fdata = malloc(filesize); + if(!fdata) { + printf("No memory for file %s\n", fname); + exit(0); + } + *read_sz = fread(fdata, 1, filesize, f); + if (ferror(f)) { + printf("Error reading file %s\n", fname); + exit(0); + } + fclose(f); + return fdata; +} + +void DrawGUI(){ + BeginDraw(); + DrawWindow(10, 40, (IMG_W+NEW_IMG_W)+50, IMG_H+50, "Libimg", sys_color_table.work_area, 0x34); + img_draw(image_blend, 10, 10, IMG_W*2, IMG_H , 0, 0); // Draw blended image to window + EndDraw(); +} + +int main(){ + if (kolibri_libimg_init() == -1){ + printf("Error loading lib_img.obj\n"); + exit(0); + } + + get_system_colors(&sys_color_table); // Get system colors theme + set_event_mask(0xC0000027); + + uint32_t img_size; + void *file_data = load_img("logo.png", &img_size); // Get RAW data and size + + Image* image = img_decode(file_data, img_size, 0); // Decode RAW data to Image data + + if (image->Type != IMAGE_BPP32) { + image = img_convert(image, NULL, IMAGE_BPP32, 0, 0); // Convert image to format BPP32 + if (!image) { + printf("Сonvert error!: \n"); + exit(0); + } + } + + image_blend = img_create(IMG_W+NEW_IMG_W, IMG_H, IMAGE_BPP32); // Create an empty layer + img_fill_color(image_blend, IMG_W+NEW_IMG_W, IMG_H, sys_color_table.work_area); // Fill the layer with one color + img_blend(image_blend, image, 0, 0, 0, 0, IMG_W, IMG_H); // Blending images to display the alpha channel. + /* Reduce image size from 256x256 to 128x128 */ + image = img_scale(image, 0, 0, IMG_W, IMG_H, NULL, LIBIMG_SCALE_STRETCH , LIBIMG_INTER_BILINEAR, NEW_IMG_W, NEW_IMG_H); + img_blend(image_blend, image, 256, 0, 0, 0, NEW_IMG_W, NEW_IMG_H); + img_destroy(image); // Destroy image structure + free(file_data); // Free allocated file_data buffer + + /* Main event loop */ + while (1) { + switch(get_os_event()){ + case KOLIBRI_EVENT_REDRAW: + DrawGUI(); + break; + case KOLIBRI_EVENT_BUTTON: + if (get_os_button() == 1){ + return 0; + } + break; + } + } + exit(0); +} diff --git a/programs/develop/ktcc/trunk/samples/clayer/logo.png b/programs/develop/ktcc/trunk/samples/clayer/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1285f74737fd9cc1417db4f6940eb5903fbb44 GIT binary patch literal 52385 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 TwByTD00000NkvXXu0mjfGWt2R literal 0 HcmV?d00001 diff --git a/programs/develop/ktcc/trunk/samples/clayer/msgbox.c b/programs/develop/ktcc/trunk/samples/clayer/msgbox.c new file mode 100644 index 0000000000..7ccd9369eb --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/clayer/msgbox.c @@ -0,0 +1,8 @@ +#include + +int main() +{ + msgbox *msg1 = NULL; + msg1 = kolibri_new_msgbox("Title", "Text in window", 0, "Ok"); + kolibri_start_msgbox(msg1, NULL); +} diff --git a/programs/develop/ktcc/trunk/samples/clayer/rasterworks.c b/programs/develop/ktcc/trunk/samples/clayer/rasterworks.c new file mode 100644 index 0000000000..145cf47fcd --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/clayer/rasterworks.c @@ -0,0 +1,55 @@ +#include +#include +#include +#include +#include + +// Sizes +int x_size = 768, y_size = 256; + +// Out example string +char* string = "Пример/Example"; + +int main() +{ + // Count length + int ln_str = countUTF8Z(string, -1); + + // Create image buffer + void *buffi = malloc(x_size * y_size * 3 * sizeof(char) + 8); + + // Set sizes + *((int*)buffi) = x_size; + *((int*)buffi+1) = y_size; + + // Fill color + memset((char*)buffi + 8, 0xFF, x_size * y_size * 3); + + // Draw text on buffer + drawText(buffi, 5, 0, string, ln_str, 0xFF000000, 0x30C18); + drawText(buffi, 5, 32, string, ln_str, 0xFF000000, 0x1030C18); + drawText(buffi, 5, 64, string, ln_str, 0xFF000000, 0x2030C18); + drawText(buffi, 5, 96, string, ln_str, 0xFF000000, 0x4030C18); + drawText(buffi, 5, 128, string, ln_str, 0xFF000000, 0x8030C18); + drawText(buffi, 5, 160, string, ln_str, 0xFF000000, 0x0F031428); + + while (1) + { + switch (get_os_event()) + { + case 1: + BeginDraw(); + DrawWindow(50, 50, 800, 300, "Rasterworks Example", 0x999999, 0x34); + DrawBitmap(buffi + 8, 10, 10, 768, 256); + EndDraw(); + break; + case 2: + get_key(); + break; + case 3: + if (get_os_button() == 1) exit(0); + break; + }; + } + return 0; +} diff --git a/programs/develop/ktcc/trunk/samples/consoleio.c b/programs/develop/ktcc/trunk/samples/consoleio.c new file mode 100644 index 0000000000..f2d72c9c80 --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/consoleio.c @@ -0,0 +1,23 @@ +// demonstration conio use, color text +// more info in conio.h + +#include + +int main() +{ + int i; + if (con_init_console_dll()) return 1; // init fail + +// con_write_asciiz("\033[0;31;42m test \n"); // red on green bk + + for(i = 30; i < 48; i++) + { + con_printf("\033[%dmColor 0x%02X: ", i, i); + con_write_asciiz("Text sample."); + + con_printf(" printf %s test %d\n", "small", i); + + } + + con_exit(0); +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/samples/dir_example.c b/programs/develop/ktcc/trunk/samples/dir_example.c new file mode 100644 index 0000000000..3a8260c45f --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/dir_example.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include + +int main() +{ + char *path=getcwd(NULL, PATH_MAX); + printf("Current directory: %s\n", path); + if(true==mkdir("test")){ + puts("Test folder created!"); + } + else{ + puts("Error creating folder!"); + } + short_file_info *info; + int num = lsdir(path, &info); + if(num==FS_ERROR) + { + puts("File system error."); + return -1; + } + printf("Objects in the folder: %d\n", num); + for(int j=0; j +#include +#include + +#define OK 200 + +int main() { + if (con_init_console_dll()) return 1; // init fail + con_write_asciiz("Wait, I'll ask you... when I'll done to fetch one site...\n"); + con_set_title("Dynamicaly linked app"); + + http_msg *h = http_get("http://kolibrios.org/en/", 0, HTTP_FLAG_BLOCK, ""); + http_long_receive(h); + + if (h->status == OK) { + con_write_string(h->content_ptr, h->content_length); + } else { + con_write_asciiz("Oops! Can't access to the page.\n"); + } + char buffer[256]; + InputBox(buffer, "Hay!", "How do you do?", "Hmm?", 0, 256, 0); + con_printf("Your answer is \"%s\"\n", buffer); + con_write_string("It's surprising, isn't it?", 26); + con_exit(0); + return 0; +} diff --git a/programs/develop/ktcc/trunk/samples/files.c b/programs/develop/ktcc/trunk/samples/files.c new file mode 100644 index 0000000000..f6c8f1033e --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/files.c @@ -0,0 +1,43 @@ +#include +#include + +int main(int argc, char **argv) +{ + + int i; + char c; + FILE *f; + FILE *fin; + FILE *fout; + + //write to file + f=fopen("testfile.txt","w"); + + for(i=0;i<50;i++) + { + fputc('1',f); + } + fclose(f); + + //append to file + f=fopen("testfile.txt","a"); + + for(i=0;i<50;i++) + { + fputc('2',f); + } + fclose(f); + + //copy from testfile.txt to copyfile.txt + + fin=fopen("testfile.txt","r"); + fout=fopen("copyfile.txt","w"); + + while((c=fgetc(fin))!=EOF) + { + fputc(c,fout); + } + fclose(fin); + fclose(fout); + +} \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/samples/getopt_ex.c b/programs/develop/ktcc/trunk/samples/getopt_ex.c new file mode 100644 index 0000000000..98b9cc1db8 --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/getopt_ex.c @@ -0,0 +1,38 @@ +#include +#include +#include + +void main(int argc, char *argv[]) { + int c; + if(argc<2) + { + puts("Usage: getopt_ex [options]\n"); + puts("-a Show 'Option a'"); + puts("-B Show 'Option B'"); + puts("-n [num] Show 'num'"); + } + while ((c = getopt(argc, argv, "aBn:")) != EOF) { + switch (c) { + case 'a': + puts("Option 'a'"); + break; + + case 'B': + puts("Option 'B'"); + break; + + case 'n': + printf("Option n: value=%d\n", atoi(optarg)); + break; + + case '?': + printf("ERROR: illegal option %s\n", argv[optind-1]); + exit(0); + + default: + printf("WARNING: no handler for option %c\n", c); + exit(0); + } + } + exit(0); + } diff --git a/programs/develop/ktcc/trunk/samples/graphics.c b/programs/develop/ktcc/trunk/samples/graphics.c new file mode 100644 index 0000000000..6e52d8600c --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/graphics.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include + +/// =========================================================== + +int main() +{ + GB_BMP b; + unsigned event; + + b.w = 300; + b.h = 200; + b.bmp = malloc (300*200*3); + + gb_bar (&b, 4, 8, 4, 12, 0xff0000); // red + gb_bar (&b, 10, 8, 4, 12, 0x00ff00); // green + gb_bar (&b, 16, 8, 4, 12, 0x0000ff); // blue + + gb_line(&b, 4, 30, 50, 30, 0xffffff); // white line + gb_line(&b, 55, 4, 120, 60, 0xf0f033); // another line + + gb_rect(&b, 65, 24, 100, 60, 0x2065ff); // rectangle + + gb_circle(&b, 55, 95, 40, 0x20ff20); // circle + + for (;;) + { + event = get_os_event(); + switch (event) + { + case 1: + begin_draw(); + sys_create_window(50, 50, 310, 230, "testlibgb" ,0x34f0f0f0, 0x14); + draw_bitmap(b.bmp, 5, 25, 300, 200); + end_draw(); + break; + case 2: + get_key(); + break; + + case 3: + if (1==get_os_button()) + { + exit(0); + } + break; + }; + } + exit(0); +} +/// =========================================================== diff --git a/programs/develop/ktcc/trunk/samples/load_coff.c b/programs/develop/ktcc/trunk/samples/load_coff.c new file mode 100644 index 0000000000..d4c73fbe3b --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/load_coff.c @@ -0,0 +1,21 @@ +#include + +/*Using the "coff" library in ktcc using "inputbox.obj" as an example*/ + +unsigned (*InputBox)(void* Buffer, char* Caption, char* Prompt, char* Default, unsigned long Flags, unsigned long BufferSize, void* RedrawProc); + +void *InputBoxLib; + +void load_coff() +{ + InputBoxLib = dlopen("/sys/lib/inputbox.obj", RTLD_GLOBAL); + InputBox = dlsym(InputBoxLib,"InputBox"); +} + +int main() +{ + load_coff(); + char buffer[256]; + InputBox(buffer, "Hay!", "How do you do?", "Hmm?", 10, 256, 0); + dlclose(InputBoxLib); +} diff --git a/programs/develop/ktcc/trunk/samples/net/http_tcp_demo.c b/programs/develop/ktcc/trunk/samples/net/http_tcp_demo.c new file mode 100644 index 0000000000..b0924ef9c8 --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/net/http_tcp_demo.c @@ -0,0 +1,64 @@ +#include +#include +#include +#include +#include + +int main() { + con_init_console_dll(); + networklib_init(); + con_set_title("http request demo using raw sockets"); + + char *host = "kolibrios.org"; + int port = 80; + printf("Connecting to %s on port %d\n", host, port); + + struct addrinfo *addr_info; + char port_str[16]; sprintf(port_str, "%d", port); + struct addrinfo hints; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; // IPv4 or IPv6 doesnt matter + hints.ai_socktype = SOCK_STREAM; // TCP stream sockets + if (getaddrinfo(host, port_str, 0, &addr_info) != 0) { + printf("Host %s not found!\n", host); + freeaddrinfo(addr_info); + exit(-1); + } + printf("IP address of %s is %s\n", host, inet_ntoa(addr_info->ai_addr->sin_addr)); + //printf("Host port = %d\n", addr_info->ai_addr->sin_port >> 8); + + char request[256]; + sprintf(request, "GET /en/ HTTP/1.1\r\nHost: %s\r\n\r\n", host); + printf("request = %s\n", request); + + int sock = socket(AF_INET4, SOCK_STREAM, IPPROTO_TCP); + + puts("Connecting...\n"); + if (connect(sock, addr_info->ai_addr, addr_info->ai_addrlen) != 0) { + printf("Connection failed, errno = %d\n", errno); + exit(errno); + } + puts("Connected successfully\n"); + + puts("Sending request...\n"); + if (send(sock, request, strlen(request), MSG_NOFLAG) == -1) { + printf("Sending failed, errno = %d\n", errno); + exit(errno); + } + puts("Request sended successfully, waiting for response...\n"); + + char buf[512 + 1]; + if (recv(sock, buf, 512, MSG_NOFLAG) == -1) { + printf("Receive failed, errno = %d\n", errno); + exit(errno); + } + + printf("Response = %s\n", buf); + + freeaddrinfo(addr_info); + + close(sock); + puts("\n goodbye)\n"); + con_exit(0); + return 0; +} diff --git a/programs/develop/ktcc/trunk/samples/net/nslookup.c b/programs/develop/ktcc/trunk/samples/net/nslookup.c new file mode 100644 index 0000000000..010c2b9e6e --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/net/nslookup.c @@ -0,0 +1,29 @@ +#include +#include +#include +#include + +struct addrinfo *res; +char host[256]; + +void main() +{ + con_init_console_dll(); + networklib_init(); + con_set_title("nslookup demo"); + printf("Host name to resolve: "); + con_gets(host, 256); + host[strlen(host)-1] = '\0'; + if(getaddrinfo(host ,0, 0, &res)!=0) + { + puts("Host not found!"); + freeaddrinfo(res); + con_exit(0); + } + else + { + printf("%s",inet_ntoa(res->ai_addr->sin_addr)); + freeaddrinfo(res); + con_exit(0); + } +} diff --git a/programs/develop/ktcc/trunk/samples/net/tcpsrv_demo.c b/programs/develop/ktcc/trunk/samples/net/tcpsrv_demo.c new file mode 100644 index 0000000000..5e8b64cf01 --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/net/tcpsrv_demo.c @@ -0,0 +1,38 @@ +#include +#include +#include +#include + +const char msg1[]="Hello!"; +char msg2='\0'; + +int main() +{ + struct sockaddr addr={AF_INET4, PORT(23) , 0, 0}; + + int sk1=socket(AF_INET4, SOCK_STREAM, IPPROTO_TCP); + printf("Open socket: %d. Status: %s\n",sk1, strerror(errno)); + + bind(sk1, &addr,sizeof(addr)); + printf("Socket binding. Status: %s\n", strerror(errno)); + + listen(sk1, 1); + printf("Listening to a socket. Status: %s\n", strerror(errno)); + printf("You can connect to 'tcp server' via 'telnet' on localhost:23 !"); + + int sk2 = accept(sk1, &addr, sizeof(addr)); + printf("Accept done. Status: %s\n", strerror(errno)); + + send(sk2, msg1, strlen(msg1),MSG_NOFLAG); + printf("Send message: '%s'. Status: %s\n",msg1, strerror(errno)); + puts("Received data:"); + while(msg2!='!') + { + recv(sk2, &msg2, 1, MSG_NOFLAG); + printf("%c",msg2); + } + close(sk1); + close(sk2); + puts("\nGood bye!"); + exit(0); +} diff --git a/programs/develop/ktcc/trunk/samples/tinygl/fps.c b/programs/develop/ktcc/trunk/samples/tinygl/fps.c new file mode 100644 index 0000000000..dff4a9870c --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/tinygl/fps.c @@ -0,0 +1,33 @@ +#include +int time1=0; +int time2=0; +int fps1=0; +int timerend=0; + +int Fps() +{ + int tr; + time1=get_tick_count(); + if (timerend==0) + { + time2=time1; + timerend=time1; + } + + tr = time1 - timerend; + + if ((time1 - time2) < 100) + { + fps1++; + } + else + { + draw_bar(330,8, 50,10,0xFFFFFF); + draw_number_sys(fps1,330,8,10,0x0); + fps1=0; + time2=time1; + } + timerend=time1; +return tr; +} + diff --git a/programs/develop/ktcc/trunk/samples/tinygl/gears.c b/programs/develop/ktcc/trunk/samples/tinygl/gears.c new file mode 100644 index 0000000000..bc82a2da81 --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/tinygl/gears.c @@ -0,0 +1,313 @@ +#include +#include +#include +#include +#include +#include + +int Fps(); + +struct { + int x,y; + int dx,dy; +} win; + +#define KEY_ESC 1 +#define KEY_F 33 + +char *title1 = "TinyGL in KolibriOS"; +char *title2 = "F full screen"; +char *title3 = "ESC - exit"; +char *fps = "FPS:"; + +unsigned char FullScreen = 0; +unsigned char skin = 3; + +struct process_table_entry *pri; +KOSGLContext cgl; + +static GLfloat view_rotx=20.0, view_roty=30.0, view_rotz=0.0; +static GLint gear1, gear2, gear3; +static GLfloat angle = 0.0; + +static GLuint limit; +static GLuint count = 1; + +/* + * Draw a gear wheel. You'll probably want to call this function when + * building a display list since we do a lot of trig here. + * + * Input: inner_radius - radius of hole at center + * outer_radius - radius at center of teeth + * width - width of gear + * teeth - number of teeth + * tooth_depth - depth of tooth + */ +static void gear( GLfloat inner_radius, GLfloat outer_radius, GLfloat width, + GLint teeth, GLfloat tooth_depth ) +{ + GLint i; + GLfloat r0, r1, r2; + GLfloat angle, da; + GLfloat u, v, len; + + r0 = inner_radius; + r1 = outer_radius - tooth_depth/2.0; + r2 = outer_radius + tooth_depth/2.0; + + da = 2.0*M_PI / teeth / 4.0; + + glShadeModel( GL_FLAT ); + + glNormal3f( 0.0, 0.0, 1.0 ); + + /* draw front face */ + glBegin( GL_QUAD_STRIP ); + for (i=0;i<=teeth;i++) { + angle = i * 2.0*M_PI / teeth; + glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 ); + glVertex3f( r1*cos(angle), r1*sin(angle), width*0.5 ); + glVertex3f( r0*cos(angle), r0*sin(angle), width*0.5 ); + glVertex3f( r1*cos(angle+3*da), r1*sin(angle+3*da), width*0.5 ); + } + glEnd(); + + /* draw front sides of teeth */ + glBegin( GL_QUADS ); + da = 2.0*M_PI / teeth / 4.0; + for (i=0;iwinx_size, pri->winy_size-20); + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + gluPerspective(45.0, (GLfloat)pri->winx_size/pri->winy_size, 1.0, 60.0); + glTranslatef( 0.0, 0.0, 20.0 ); + glMatrixMode(GL_MODELVIEW); + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); +} + +void disabletgl() +{ + kosglDestroyContext(cgl); + free(pri); +} + +void Title() +{ + _ksys_write_text(300,8,0x0,fps,strlen(fps)); + _ksys_write_text(8,8,0x0,title1,strlen(title1)); + _ksys_write_text(180,8,0x0,title2,strlen(title2)); + _ksys_write_text(600,8,0x0,title3,strlen(title3)); +} + + +void draw_window() +{ + begin_draw(); + sys_create_window(win.x, win.y, win.dx, win.dy,"Gears", 0xFFFFFF, 0x34); + Title(); + end_draw(); +} + + +void main(void) +{ + pri=malloc(sizeof(struct process_table_entry)); + win.x = 100; + win.y = 100; + win.dx = 400; + win.dy = 400; + draw_window(); + _ksys_set_keyboard_mode(1); + cgl = kosglCreateContext( 0, 0); + kosglMakeCurrent( 0, 20, win.dx, win.dy-20, cgl); + init(); + reshape(); + do{ + glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); + glPushMatrix(); + glRotatef( view_rotx, 1.0, 0.0, 0.0 ); + glRotatef( view_roty, 0.0, 1.0, 0.0 ); + glRotatef( view_rotz, 0.0, 0.0, 1.0 ); + + glPushMatrix(); + glTranslatef( -2.0, -2.0, 0.0 ); + glRotatef( angle, 0.0, 0.0, 1.0 ); + glCallList(gear1); + glPopMatrix(); + + glPushMatrix(); + glTranslatef( 4.1, -2.0, 0.0 ); + glRotatef( -2.0*angle-9.0, 0.0, 0.0, 1.0 ); + glCallList(gear2); + glPopMatrix(); + + glPushMatrix(); + glTranslatef( -2.1, 4.2, 0.0 ); + glRotatef( -2.0*angle-25.0, 0.0, 0.0, 1.0 ); + glCallList(gear3); + glPopMatrix(); + glPopMatrix(); + kosglSwapBuffers(); + + angle += 0.01 + 0.3* Fps(); + switch(_ksys_check_for_event()){ + case KOLIBRI_EVENT_REDRAW: draw_window(); + reshape(); + break; + + case KOLIBRI_EVENT_KEY: + switch(get_key().ctrl_key){ + case KEY_F: + if(!FullScreen){ + skin=0; + int screen_size_x; + int screen_size_y; + _ksys_get_screen_size(&screen_size_x, &screen_size_y); + sys_change_window(0,0,screen_size_x,screen_size_y); + draw_window(); + reshape(); + FullScreen = 1; + } + else{ + skin=3; + draw_window(); + sys_change_window(win.x,win.y, win.dx, win.dy); + reshape(); + FullScreen = 0; + }; + break; + case KEY_ESC: disabletgl(); + return;} + break; + + case 3: disabletgl(); + return; + } + } while(1); +} diff --git a/programs/develop/ktcc/trunk/samples/winbasics.c b/programs/develop/ktcc/trunk/samples/winbasics.c new file mode 100644 index 0000000000..636d6a7a58 --- /dev/null +++ b/programs/develop/ktcc/trunk/samples/winbasics.c @@ -0,0 +1,148 @@ +/* + newlib-style window example +*/ +#include +#include +#include +#include +#include "kos32sys1.h" + +struct kolibri_system_colors sys_color_table; +void __attribute__ ((noinline)) debug_board_printf(const char *format,...); +void __attribute__ ((noinline)) debug_board_write_str(const char* str); + +char statusbar[255]; +char proc_info[1024]; +char text_line[255]; + +enum BUTTONS +{ + BTN_QUIT = 1, + BTN_POP = 10, + BTN_UNLOCK = 11 +}; + +#define FONT_W 8 +#define FONT_H 14 +#define LINES 10 + +void draw_window() +{ + int win_hight, win_width, i, pos_y = get_skin_height() + 36; // 60 == 24+36 + + // start redraw + begin_draw(); + // define&draw window + sys_create_window(10, 40, 600, 400, "My window", /*sys_color_table.work_area*/0xFFFFFF, 0x13); + + get_proc_info(proc_info); + win_width = *(int*)(proc_info + 0x3E); // client, 2A windows + win_hight = *(int*)(proc_info + 0x42); // client, 2E windows + + define_button((10 << 16) + 80, (30 << 16) + 20, BTN_POP, sys_color_table.work_button); + draw_text_sys("BUTTON1", 15, 34, 0, 0x90000000 | sys_color_table.work_button_text); //0x80000000 asciiz + + define_button((100 << 16) + 100, (30 << 16) + 20, BTN_UNLOCK, sys_color_table.work_button); + draw_text_sys("BUTTTON2", 110, 34, 0, 0x90000000 | sys_color_table.work_button_text); + + // display statusbar + draw_bar(6, win_hight - 17, win_width - 11, 12, 0x80000000 | sys_color_table.work_area); //0x80000000 gradient + draw_text_sys(statusbar, 10, win_hight - 15, 0, 0x80000000 | sys_color_table.work_text); + + // display strings + for (i = LINES; i > 0; i--) + { + tiny_snprintf (text_line, sizeof text_line, "Line[%d]<>", i); + + text_line[(win_width - 10 - 5) / FONT_W + 1] = '\0'; // clip text size, seems to big lines crashing OS, and form len by window size +// draw_number_sys(nbytes, 5, pos_y, 6, 0x10000000); 8x12 font + draw_text_sys(text_line, 5, pos_y, 0, 0x90000000 /*| sys_color_table.work_text*/); + pos_y += FONT_H; + + if(pos_y + 29 > win_hight) break; // 12 font + 12 statusbar + 5 border + } + + // end redraw + end_draw(); +} + +int main() +{ + int gui_event; + uint32_t pressed_button = 0, mouse_button; + pos_t mouse_pos; + strcpy(statusbar, "Program running...Double click on TEXT for details"); + + get_system_colors(&sys_color_table); + set_event_mask(0xC0000027); // mouse events only when focused window and mouse inside + + do /* Start of main activity loop */ + { +// gui_event = wait_for_event(10); // 100 = 1 sec, case you have background work + gui_event = get_os_event(); + switch(gui_event) + { + case KOLIBRI_EVENT_NONE: + // background work + break; + case KOLIBRI_EVENT_REDRAW: + draw_window(); + break; + case KOLIBRI_EVENT_KEY: + // scroll + break; + case KOLIBRI_EVENT_BUTTON: + pressed_button = get_os_button(); + switch (pressed_button) + { + case BTN_POP: + strcpy(statusbar, "POP pressed...."); + draw_window(); + break; + case BTN_UNLOCK: + strcpy(statusbar, "UNLOCK pressed...."); + draw_window(); + break; + case BTN_QUIT: + return 0; + break; + } + break; + case KOLIBRI_EVENT_MOUSE: + mouse_pos = get_mouse_pos(POS_WINDOW); // window relative + mouse_button = get_mouse_eventstate(); + debug_board_printf("mouse ev (%d,%d)%x\n", mouse_pos.x, mouse_pos.y, mouse_button); + if (mouse_button & (1<<24)) // double click + { + int n = (mouse_pos.y - 60) / FONT_H; + if (n < 0 || n >= LINES) break; + debug_board_printf("click on str(%d), clip slot(%d)\n", n, LINES - n - 1); + tiny_sprintf(statusbar, "click on str(%d), clip slot(%d)\n", n, LINES - n - 1); + draw_window(); + } + // ignore + break; + } + } while(1) ; /* End of main activity loop */ + + return 0; +} + + + +void __attribute__ ((noinline)) debug_board_write_str(const char* str){ + while(*str) + debug_board_write_byte(*str++); +} + +void __attribute__ ((noinline)) debug_board_printf(const char *format,...) +{ + va_list ap; + char log_board[300]; + + va_start (ap, format); + tiny_vsnprintf(log_board, sizeof log_board, format, ap); + va_end(ap); + debug_board_write_str(log_board); + +} diff --git a/programs/develop/ktcc/trunk/source/Makefile.linux32 b/programs/develop/ktcc/trunk/source/Makefile.linux32 index 6f60b80b72..f397c08cda 100644 --- a/programs/develop/ktcc/trunk/source/Makefile.linux32 +++ b/programs/develop/ktcc/trunk/source/Makefile.linux32 @@ -2,7 +2,7 @@ CC=gcc NAME=kos32-tcc SRC=libtcc.c tcc.c -CFLAGS= -DTCC_TARGET_MEOS_LINUX +CFLAGS= -DTCC_TARGET_MEOS_LINUX LFLAGS= -m32 all: diff --git a/programs/develop/ktcc/trunk/source/libtcc.c b/programs/develop/ktcc/trunk/source/libtcc.c index e903ba0469..a3310d2397 100644 --- a/programs/develop/ktcc/trunk/source/libtcc.c +++ b/programs/develop/ktcc/trunk/source/libtcc.c @@ -113,12 +113,17 @@ static void tcc_set_lib_path_w32(TCCState *s) { char path[1024], *p; GetModuleFileNameA(tcc_module, path, sizeof path); +#ifdef TCC_TARGET_KX + kx_fix_root_directory(path, sizeof path); + normalize_slashes(strlwr(path)); +#else p = tcc_basename(normalize_slashes(strlwr(path))); if (p - 5 > path && 0 == strncmp(p - 5, "/bin/", 5)) p -= 5; else if (p > path) p--; *p = 0; +#endif tcc_set_lib_path(s, path); } @@ -150,13 +155,17 @@ BOOL WINAPI DllMain (HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved) #if defined TCC_TARGET_MEOS /* on Kolibri host, we suppose the lib and includes are at the location of 'tcc' /lib, /include */ static void tcc_set_lib_path_kos(TCCState *s) -{ +{ char** argv0 = (char**)0x20; // path in kolibri header - char path[1024], *p; + char path[1024], *p; strncpy(path, *argv0, sizeof path); +#ifdef TCC_TARGET_KX + kx_fix_root_directory(path, sizeof path); +#else p = tcc_basename(path); if (p > path) p--; *p = 0; +#endif tcc_set_lib_path(s, path); } @@ -165,7 +174,12 @@ static void tcc_set_lib_path_linux(TCCState *s) { char buff[4096+1]; readlink("/proc/self/exe", buff, 4096); +#ifdef TCC_TARGET_KX + kx_fix_root_directory(buff, sizeof buff); + const char *path = buff; +#else const char *path = dirname(buff); +#endif tcc_set_lib_path(s, path); } @@ -1526,7 +1540,7 @@ ST_FUNC int tcc_add_crt(TCCState *s, const char *filename) { if (-1 == tcc_add_library_internal(s, "%s/%s", filename, 0, s->crt_paths, s->nb_crt_paths)) - tcc_error("file '%s' not found", filename); + tcc_error_noabort("file '%s' not found", filename); return 0; } @@ -1731,7 +1745,8 @@ LIBTCCAPI int tcc_set_output_type(TCCState *s, int output_type) #elif defined(TCC_TARGET_MEOS) if (s->output_type != TCC_OUTPUT_OBJ && !s->nostdlib) { - tcc_add_library_err(s, "c"); + tcc_add_crt(s,"crt0.o"); + //tcc_add_library(s,"lc.obj"); // adding libck.a dont work, because need to be added last } #else /* add libc crt1/crti objects */ @@ -2264,7 +2279,6 @@ ST_FUNC int tcc_parse_args1(TCCState *s, int argc, char **argv) case TCC_OPTION_B: /* set tcc utilities path (mainly for tcc development) */ tcc_set_lib_path(s, optarg); - tcc_split_path(s, (void ***)&s->crt_paths, &s->nb_crt_paths, CONFIG_TCC_CRTPREFIX); break; case TCC_OPTION_l: args_parser_add_file(s, r, TCC_FILETYPE_BINARY); diff --git a/programs/develop/ktcc/trunk/source/tcc.h b/programs/develop/ktcc/trunk/source/tcc.h index a56da580ed..16ef960787 100644 --- a/programs/develop/ktcc/trunk/source/tcc.h +++ b/programs/develop/ktcc/trunk/source/tcc.h @@ -47,7 +47,7 @@ #ifndef TCC_TARGET_MEOS #define TCC_TARGET_MEOS #endif -//void kx_fix_root_directory(char *buf, size_t size); +void kx_fix_root_directory(char *buf, size_t size); #endif #ifndef _WIN32 diff --git a/programs/develop/ktcc/trunk/source/tcckx.c b/programs/develop/ktcc/trunk/source/tcckx.c index d0cd9017f5..556a896169 100644 --- a/programs/develop/ktcc/trunk/source/tcckx.c +++ b/programs/develop/ktcc/trunk/source/tcckx.c @@ -269,8 +269,11 @@ typedef struct { tcc_free(str_arr); tcc_free(len_arr); tcc_free(sym_arr); + } + + void kx_init(me_info* me) { ElfW(Sym) *sym; int sym_index = 1, sym_end = symtab_section->data_offset / sizeof(ElfW(Sym)); @@ -323,7 +326,6 @@ typedef struct { This function correct tcc_root if tcc_root/kx is a run directory, otherwise do trim filename */ -#if 0 void kx_fix_root_directory(char *buf, size_t size) { int defult = 1; @@ -364,6 +366,5 @@ typedef struct { } tcc_free(tcc_conf); - kx_debug_output("tcc root = %s\n", buf); - } -#endif + //kx_debug_output("tcc root = %s\n", buf); + } \ No newline at end of file diff --git a/programs/develop/ktcc/trunk/source/tccmeos.c b/programs/develop/ktcc/trunk/source/tccmeos.c index 039a92ad01..8cd6e4ba78 100644 --- a/programs/develop/ktcc/trunk/source/tccmeos.c +++ b/programs/develop/ktcc/trunk/source/tccmeos.c @@ -302,14 +302,8 @@ int tcc_output_me(TCCState* s1,const char *filename) #ifdef TCC_TARGET_KX kx_init(&me); #endif - if (s1->output_type != TCC_OUTPUT_OBJ && !s1->nostdlib){ - tcc_add_crt(s1, "crt0.o"); - tcc_add_library_err(s1, "tcc1"); - } - relocate_common_syms(); assign_addresses(&me); - #ifndef TCC_TARGET_KX if(undef_sym_flag){ tcc_error("Linker error!");