From 5d71c48018e4165f6a4406e150d1ec7eec11cc56 Mon Sep 17 00:00:00 2001 From: turbocat Date: Sat, 1 Jan 2022 16:25:02 +0000 Subject: [PATCH] ktcc: Deleted residual files git-svn-id: svn://kolibrios.org@9550 a494cfbc-eb01-0410-851d-a64ba20cac60 --- 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 52385 -> 0 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 --------- 22 files changed, 1291 deletions(-) delete mode 100755 programs/develop/ktcc/trunk/samples/Makefile delete mode 100644 programs/develop/ktcc/trunk/samples/asm_ex.c delete mode 100644 programs/develop/ktcc/trunk/samples/build_all.sh delete mode 100644 programs/develop/ktcc/trunk/samples/clayer/boxlib.c delete mode 100644 programs/develop/ktcc/trunk/samples/clayer/dialog.c delete mode 100755 programs/develop/ktcc/trunk/samples/clayer/libimg.c delete mode 100644 programs/develop/ktcc/trunk/samples/clayer/logo.png delete mode 100644 programs/develop/ktcc/trunk/samples/clayer/msgbox.c delete mode 100644 programs/develop/ktcc/trunk/samples/clayer/rasterworks.c delete mode 100644 programs/develop/ktcc/trunk/samples/consoleio.c delete mode 100644 programs/develop/ktcc/trunk/samples/dir_example.c delete mode 100644 programs/develop/ktcc/trunk/samples/dynamic.c delete mode 100644 programs/develop/ktcc/trunk/samples/files.c delete mode 100644 programs/develop/ktcc/trunk/samples/getopt_ex.c delete mode 100644 programs/develop/ktcc/trunk/samples/graphics.c delete mode 100644 programs/develop/ktcc/trunk/samples/load_coff.c delete mode 100644 programs/develop/ktcc/trunk/samples/net/http_tcp_demo.c delete mode 100644 programs/develop/ktcc/trunk/samples/net/nslookup.c delete mode 100644 programs/develop/ktcc/trunk/samples/net/tcpsrv_demo.c delete mode 100644 programs/develop/ktcc/trunk/samples/tinygl/fps.c delete mode 100644 programs/develop/ktcc/trunk/samples/tinygl/gears.c delete mode 100644 programs/develop/ktcc/trunk/samples/winbasics.c diff --git a/programs/develop/ktcc/trunk/samples/Makefile b/programs/develop/ktcc/trunk/samples/Makefile deleted file mode 100755 index a97b8c7443..0000000000 --- a/programs/develop/ktcc/trunk/samples/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -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 deleted file mode 100644 index 2a0bc40313..0000000000 --- a/programs/develop/ktcc/trunk/samples/asm_ex.c +++ /dev/null @@ -1,68 +0,0 @@ -/* 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 deleted file mode 100644 index baf5c3c644..0000000000 --- a/programs/develop/ktcc/trunk/samples/build_all.sh +++ /dev/null @@ -1,23 +0,0 @@ -#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 deleted file mode 100644 index 39f01d023d..0000000000 --- a/programs/develop/ktcc/trunk/samples/clayer/boxlib.c +++ /dev/null @@ -1,110 +0,0 @@ -// 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 deleted file mode 100644 index 5ee125fecd..0000000000 --- a/programs/develop/ktcc/trunk/samples/clayer/dialog.c +++ /dev/null @@ -1,32 +0,0 @@ -#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 deleted file mode 100755 index 299ed763be..0000000000 --- a/programs/develop/ktcc/trunk/samples/clayer/libimg.c +++ /dev/null @@ -1,97 +0,0 @@ -/* 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 deleted file mode 100644 index 5a1285f74737fd9cc1417db4f6940eb5903fbb44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52385 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 TwByTD00000NkvXXu0mjfGWt2R diff --git a/programs/develop/ktcc/trunk/samples/clayer/msgbox.c b/programs/develop/ktcc/trunk/samples/clayer/msgbox.c deleted file mode 100644 index 7ccd9369eb..0000000000 --- a/programs/develop/ktcc/trunk/samples/clayer/msgbox.c +++ /dev/null @@ -1,8 +0,0 @@ -#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 deleted file mode 100644 index 145cf47fcd..0000000000 --- a/programs/develop/ktcc/trunk/samples/clayer/rasterworks.c +++ /dev/null @@ -1,55 +0,0 @@ -#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 deleted file mode 100644 index f2d72c9c80..0000000000 --- a/programs/develop/ktcc/trunk/samples/consoleio.c +++ /dev/null @@ -1,23 +0,0 @@ -// 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 deleted file mode 100644 index 3a8260c45f..0000000000 --- a/programs/develop/ktcc/trunk/samples/dir_example.c +++ /dev/null @@ -1,41 +0,0 @@ -#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 deleted file mode 100644 index f6c8f1033e..0000000000 --- a/programs/develop/ktcc/trunk/samples/files.c +++ /dev/null @@ -1,43 +0,0 @@ -#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 deleted file mode 100644 index 98b9cc1db8..0000000000 --- a/programs/develop/ktcc/trunk/samples/getopt_ex.c +++ /dev/null @@ -1,38 +0,0 @@ -#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 deleted file mode 100644 index 6e52d8600c..0000000000 --- a/programs/develop/ktcc/trunk/samples/graphics.c +++ /dev/null @@ -1,53 +0,0 @@ -#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 deleted file mode 100644 index d4c73fbe3b..0000000000 --- a/programs/develop/ktcc/trunk/samples/load_coff.c +++ /dev/null @@ -1,21 +0,0 @@ -#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 deleted file mode 100644 index b0924ef9c8..0000000000 --- a/programs/develop/ktcc/trunk/samples/net/http_tcp_demo.c +++ /dev/null @@ -1,64 +0,0 @@ -#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 deleted file mode 100644 index 010c2b9e6e..0000000000 --- a/programs/develop/ktcc/trunk/samples/net/nslookup.c +++ /dev/null @@ -1,29 +0,0 @@ -#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 deleted file mode 100644 index 5e8b64cf01..0000000000 --- a/programs/develop/ktcc/trunk/samples/net/tcpsrv_demo.c +++ /dev/null @@ -1,38 +0,0 @@ -#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 deleted file mode 100644 index dff4a9870c..0000000000 --- a/programs/develop/ktcc/trunk/samples/tinygl/fps.c +++ /dev/null @@ -1,33 +0,0 @@ -#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 deleted file mode 100644 index bc82a2da81..0000000000 --- a/programs/develop/ktcc/trunk/samples/tinygl/gears.c +++ /dev/null @@ -1,313 +0,0 @@ -#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 deleted file mode 100644 index 636d6a7a58..0000000000 --- a/programs/develop/ktcc/trunk/samples/winbasics.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - 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); - -}