- 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
This commit is contained in:
superturbocat2001 2020-12-16 17:15:39 +00:00
parent 6cb7bf1eb6
commit 826c0501b8
8 changed files with 236 additions and 92 deletions

View File

@ -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

View File

@ -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'

View File

@ -0,0 +1,126 @@
#ifndef KOLIBRI_DIALOG_H
#define KOLIBRI_DIALOG_H
#include <stdlib.h>
#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

View File

@ -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__(

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,32 @@
#include <kos32sys1.h>
#include <clayer/dialog.h>
#include <stdio.h>
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);
}

View File

@ -1,70 +0,0 @@
// Console dynamic link library. Sample by Ghost
#include <stdio.h>
#include <string.h>
#include <kolibrisys.h>
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");
}