From 826c0501b89e88152f8115973af44375261c1615 Mon Sep 17 00:00:00 2001 From: superturbocat2001 Date: Wed, 16 Dec 2020 17:15:39 +0000 Subject: [PATCH] - Added libdialog.a (proc_lib loader) and sample - Deleted old console example (replacement: consoleio) - Added RGB struct to kos32sys1.h (applies to ktcc) git-svn-id: svn://kolibrios.org@8426 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../develop/ktcc/trunk/lib/proc_lib/Makefile | 7 + .../ktcc/trunk/lib/proc_lib/loadproclib.asm | 39 ++++++ .../ktcc/trunk/libc/include/clayer/dialog.h | 126 ++++++++++++++++++ .../ktcc/trunk/libc/include/kos32sys1.h | 8 +- programs/develop/ktcc/trunk/samples/Makefile | 45 ++++--- .../develop/ktcc/trunk/samples/build_all.sh | 1 + .../ktcc/trunk/samples/clayer/dialog.c | 32 +++++ .../ktcc/trunk/samples/console/console.c | 70 ---------- 8 files changed, 236 insertions(+), 92 deletions(-) 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/libc/include/clayer/dialog.h create mode 100644 programs/develop/ktcc/trunk/samples/clayer/dialog.c delete mode 100644 programs/develop/ktcc/trunk/samples/console/console.c 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/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/kos32sys1.h b/programs/develop/ktcc/trunk/libc/include/kos32sys1.h index f8511d000d..c564567c3b 100644 --- a/programs/develop/ktcc/trunk/libc/include/kos32sys1.h +++ b/programs/develop/ktcc/trunk/libc/include/kos32sys1.h @@ -40,6 +40,12 @@ extern "C" { //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)) + +typedef struct { + uint8_t blue; + uint8_t green; + uint8_t red; +}RGB; typedef unsigned int color_t; @@ -128,7 +134,7 @@ struct ipc_buffer uint32_t used; // used bytes in buffer struct ipc_message data[0]; // data begin }; - + static inline void begin_draw(void) { __asm__ __volatile__( diff --git a/programs/develop/ktcc/trunk/samples/Makefile b/programs/develop/ktcc/trunk/samples/Makefile index 7a6f30feb4..28f6eee93d 100755 --- a/programs/develop/ktcc/trunk/samples/Makefile +++ b/programs/develop/ktcc/trunk/samples/Makefile @@ -1,24 +1,27 @@ +CC=../bin/kos32-tcc +CFLAGS= -I ../libc/include + all: - ../bin/kos32-tcc asm_ex.c -lck -o asm_ex.kex -I ../libc/include - ../bin/kos32-tcc consoleio.c -lck -o consoleio.kex -I ../libc/include - ../bin/kos32-tcc files.c -lck -o files.kex -I ../libc/include - ../bin/kos32-tcc winbasics.c -lck -o winbasics.kex -I ../libc/include - ../bin/kos32-tcc dynamic.c -lck -lhttp -linputbox -o dynamic.kex -I ../libc/include - ../bin/kos32-tcc load_coff.c -o load_coff.kex -lck -I ../libc/include - ../bin/kos32-tcc clayer/msgbox.c -lck -lmsgbox -o clayer/msgbox.kex -I ../libc/include - ../bin/kos32-tcc graphics.c -lck -lgb -o graphics.kex -I ../libc/include - ../bin/kos32-tcc clayer/rasterworks.c -lck -lrasterworks -o clayer/rasterworks.kex -I ../libc/include - ../bin/kos32-tcc clayer/boxlib.c -lck -lbox -o clayer/boxlib.kex -I ../libc/include - ../bin/kos32-tcc clayer/libimg.c -lck -limg -o clayer/libimg.kex -I ../libc/include - ../bin/kos32-tcc console/console.c -lck -limg -o console/console.kex -I ../libc/include - ../bin/kos32-tcc dir_example.c -lck -o dir_example.kex -I ../libc/include - ../bin/kos32-tcc net/tcpsrv_demo.c -lck -o net/tcpsrv_demo.kex -I ../libc/include - ../bin/kos32-tcc net/nslookup.c -lck -lnetwork -o net/nslookup.kex -I ../libc/include - ../bin/kos32-tcc getopt_ex.c -lck -o getopt_ex.kex -I ../libc/include - ../bin/kos32-tcc tinygl/fps.c tinygl/gears.c -o gears.kex -I ../libc/include -ltinygl -lck + $(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) tinygl/fps.c tinygl/gears.c -o tinygl/gears.kex -ltinygl -lck clean: - rm *.kex - rm clayer/*.kex - rm console/*.kex - rm net/*.kex + rm *.kex clayer/*.kex net/*.kex tinygl/*.kex diff --git a/programs/develop/ktcc/trunk/samples/build_all.sh b/programs/develop/ktcc/trunk/samples/build_all.sh index eea5498075..289f03df20 100644 --- a/programs/develop/ktcc/trunk/samples/build_all.sh +++ b/programs/develop/ktcc/trunk/samples/build_all.sh @@ -10,6 +10,7 @@ ../tcc clayer/rasterworks.c -lck -lrasterworks -o /tmp0/1/rasterworks ../tcc clayer/boxlib.c -lck -lbox -o /tmp0/1/boxlib_ex ../tcc clayer/libimg.c -lck -limg -o /tmp0/1/libimg_ex +../tcc clayer/dialog.c -lck -ldialog -o /tmp0/1/dialog_ex ../tcc console/console.c -lck -limg -o /tmp0/1/console ../tcc dir_example.c -lck -o /tmp0/1/dir_example ../tcc net/tcpsrv_demo.c -lck -o /tmp0/1/tcpsrv_demo 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/console/console.c b/programs/develop/ktcc/trunk/samples/console/console.c deleted file mode 100644 index 3fb97386e8..0000000000 --- a/programs/develop/ktcc/trunk/samples/console/console.c +++ /dev/null @@ -1,70 +0,0 @@ - -// Console dynamic link library. Sample by Ghost - -#include -#include -#include - -char* dllname="/sys/lib/console.obj"; -int i; - -char* imports[] = {"START","version","con_init","con_write_asciiz","con_printf","con_exit",NULL}; -char* caption = "Console test - colors"; - -dword (* dll_start)(dword res); -dword* dll_ver; -void stdcall (* con_init)(dword wnd_width, dword wnd_height, dword scr_width, dword scr_height, const char* title); -void stdcall (* con_write_asciiz)(const char* string); -void cdecl (* con_printf)(const char* format,...); -void stdcall (* con_exit)(dword bCloseWindow); - -struct import{ - char *name; - void *data; -}; - -void link(struct import *exp, char** imports){ - dll_start = (dword (*)(dword)) - _ksys_cofflib_getproc(exp, imports[0]); - dll_ver = (dword*) - _ksys_cofflib_getproc(exp, imports[1]); - con_init = (void stdcall (*)(dword , dword, dword, dword, const char*)) - _ksys_cofflib_getproc(exp, imports[2]); - con_write_asciiz = (void stdcall (*)(const char*)) - _ksys_cofflib_getproc(exp, imports[3]); - con_printf = (void cdecl (*)(const char*,...)) - _ksys_cofflib_getproc(exp, imports[4]); - con_exit = (void stdcall (*)(dword)) - _ksys_cofflib_getproc(exp, imports[5]); -} - -int main(int argc, char **argv){ - - struct import * hDll; - int a,b,c,d; - - if((hDll = (struct import *)_ksys_cofflib_load(dllname)) == 0){ - debug_out_str("can't load lib\n"); - return 1; - } - link(hDll, imports); - debug_out_str("dll loaded\n"); - - if(dll_start(1) == 0){ - debug_out_str("dll_start failed\n"); - return 1; - } - - con_init(-1, -1, -1, -1, caption); - - for(i = 0; i < 256; i++){ - con_printf("Color 0x%02X: ", i); - con_write_asciiz("Text sample."); - - con_printf(" printf %s test %d\n", "small", i); - - } - - con_exit(0); - debug_out_str("all right's ;)\n"); -} \ No newline at end of file