forked from KolibriOS/kolibrios
- 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:
parent
6cb7bf1eb6
commit
826c0501b8
7
programs/develop/ktcc/trunk/lib/proc_lib/Makefile
Normal file
7
programs/develop/ktcc/trunk/lib/proc_lib/Makefile
Normal 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
|
39
programs/develop/ktcc/trunk/lib/proc_lib/loadproclib.asm
Normal file
39
programs/develop/ktcc/trunk/lib/proc_lib/loadproclib.asm
Normal 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'
|
126
programs/develop/ktcc/trunk/libc/include/clayer/dialog.h
Normal file
126
programs/develop/ktcc/trunk/libc/include/clayer/dialog.h
Normal 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
|
@ -41,6 +41,12 @@ extern "C" {
|
|||||||
//Read/Write data as type (int char, etc.) at address "addr" with offset "offset". eg DATA(int, buff, 8);
|
//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 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;
|
typedef unsigned int color_t;
|
||||||
|
|
||||||
typedef union __attribute__((packed)) pos_t
|
typedef union __attribute__((packed)) pos_t
|
||||||
|
@ -1,24 +1,27 @@
|
|||||||
|
CC=../bin/kos32-tcc
|
||||||
|
CFLAGS= -I ../libc/include
|
||||||
|
|
||||||
all:
|
all:
|
||||||
../bin/kos32-tcc asm_ex.c -lck -o asm_ex.kex -I ../libc/include
|
$(CC) $(CFLAGS) asm_ex.c -lck -o asm_ex.kex
|
||||||
../bin/kos32-tcc consoleio.c -lck -o consoleio.kex -I ../libc/include
|
$(CC) $(CFLAGS) consoleio.c -lck -o consoleio.kex
|
||||||
../bin/kos32-tcc files.c -lck -o files.kex -I ../libc/include
|
$(CC) $(CFLAGS) files.c -lck -o files.kex
|
||||||
../bin/kos32-tcc winbasics.c -lck -o winbasics.kex -I ../libc/include
|
$(CC) $(CFLAGS) winbasics.c -lck -o winbasics.kex
|
||||||
../bin/kos32-tcc dynamic.c -lck -lhttp -linputbox -o dynamic.kex -I ../libc/include
|
$(CC) $(CFLAGS) dynamic.c -lck -lhttp -linputbox -o dynamic.kex
|
||||||
../bin/kos32-tcc load_coff.c -o load_coff.kex -lck -I ../libc/include
|
$(CC) $(CFLAGS) load_coff.c -o load_coff.kex -lck
|
||||||
../bin/kos32-tcc clayer/msgbox.c -lck -lmsgbox -o clayer/msgbox.kex -I ../libc/include
|
$(CC) $(CFLAGS) graphics.c -lck -lgb -o graphics.kex
|
||||||
../bin/kos32-tcc graphics.c -lck -lgb -o graphics.kex -I ../libc/include
|
$(CC) $(CFLAGS) dir_example.c -lck -o dir_example.kex
|
||||||
../bin/kos32-tcc clayer/rasterworks.c -lck -lrasterworks -o clayer/rasterworks.kex -I ../libc/include
|
$(CC) $(CFLAGS) getopt_ex.c -lck -o getopt_ex.kex
|
||||||
../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
|
$(CC) $(CFLAGS) clayer/msgbox.c -lck -lmsgbox -o clayer/msgbox.kex
|
||||||
../bin/kos32-tcc console/console.c -lck -limg -o console/console.kex -I ../libc/include
|
$(CC) $(CFLAGS) clayer/rasterworks.c -lck -lrasterworks -o clayer/rasterworks.kex
|
||||||
../bin/kos32-tcc dir_example.c -lck -o dir_example.kex -I ../libc/include
|
$(CC) $(CFLAGS) clayer/boxlib.c -lck -lbox -o clayer/boxlib.kex
|
||||||
../bin/kos32-tcc net/tcpsrv_demo.c -lck -o net/tcpsrv_demo.kex -I ../libc/include
|
$(CC) $(CFLAGS) clayer/libimg.c -lck -limg -o clayer/libimg.kex
|
||||||
../bin/kos32-tcc net/nslookup.c -lck -lnetwork -o net/nslookup.kex -I ../libc/include
|
$(CC) $(CFLAGS) clayer/dialog.c -lck -ldialog -o clayer/dialog.kex
|
||||||
../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) 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:
|
clean:
|
||||||
rm *.kex
|
rm *.kex clayer/*.kex net/*.kex tinygl/*.kex
|
||||||
rm clayer/*.kex
|
|
||||||
rm console/*.kex
|
|
||||||
rm net/*.kex
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
../tcc clayer/rasterworks.c -lck -lrasterworks -o /tmp0/1/rasterworks
|
../tcc clayer/rasterworks.c -lck -lrasterworks -o /tmp0/1/rasterworks
|
||||||
../tcc clayer/boxlib.c -lck -lbox -o /tmp0/1/boxlib_ex
|
../tcc clayer/boxlib.c -lck -lbox -o /tmp0/1/boxlib_ex
|
||||||
../tcc clayer/libimg.c -lck -limg -o /tmp0/1/libimg_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 console/console.c -lck -limg -o /tmp0/1/console
|
||||||
../tcc dir_example.c -lck -o /tmp0/1/dir_example
|
../tcc dir_example.c -lck -o /tmp0/1/dir_example
|
||||||
../tcc net/tcpsrv_demo.c -lck -o /tmp0/1/tcpsrv_demo
|
../tcc net/tcpsrv_demo.c -lck -o /tmp0/1/tcpsrv_demo
|
||||||
|
32
programs/develop/ktcc/trunk/samples/clayer/dialog.c
Normal file
32
programs/develop/ktcc/trunk/samples/clayer/dialog.c
Normal 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);
|
||||||
|
}
|
@ -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");
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user