Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6428 → Rev 6429

/programs/develop/ktcc/trunk/libc/stdio/conio.c
0,0 → 1,92
#include <conio.h>
#include <kolibrisys.h>
 
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",
(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]);
}
 
 
int con_init_console_dll(void)
{
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(-1, -1, -1, -1, con_caption); //__argv[0] && __path dont work
 
__console_initdll_status = 1;
 
return(0);
}
 
/programs/develop/ktcc/trunk/libc/stdio/getchar.c
0,0 → 1,6
#include<conio.h>
 
int getchar ( void )
{
return con_getch();
}
/programs/develop/ktcc/trunk/libc/stdio/gets.c
0,0 → 1,8
#include <conio.h>
 
char * gets ( char * str )
{
con_init_console_dll();
 
return con_gets(str, 80); // small, to reduce overflow risk
}
/programs/develop/ktcc/trunk/libc/stdio/printf.c
1,78 → 1,23
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <kolibrisys.h>
#include <conio.h>
 
char* dllname="/sys/lib/console.obj";
int console_init_status;
 
char* imports[] = {"START","version","con_init","con_write_asciiz","con_printf","con_exit",NULL};
char* caption = "Console app";
extern int __argc;
extern char** __argv;
extern char* __path;
 
 
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 printf_link(struct import *exp, char** imports){
 
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_printf = (void cdecl (*)(const char*,...))
_ksys_cofflib_getproc(exp, imports[4]);
con_exit = (void stdcall (*)(dword))
_ksys_cofflib_getproc(exp, imports[5]);
}
 
 
int init_console(void)
{
struct import * hDll;
 
if((hDll = (struct import *)_ksys_cofflib_load(dllname)) == 0){
debug_out_str("can't load lib\n");
return 1;
}
printf_link(hDll, imports);
// debug_out_str("dll loaded\n");
 
con_init(-1, -1, -1, -1, caption); //__argv[0] && __path dont work
return(0);
}
 
int printf(const char *format,...)
{
int i = 0;
int printed_simbols;
int printed_simbols = 0;
va_list arg;
char simbol[]={"%s"};
char *s;
 
va_start(arg,format);
 
if (console_init_status==0)
{
i=init_console();
console_init_status=1;
}
i=con_init_console_dll();
 
if (i==0)
{
s=malloc(4096);
printed_simbols=format_print(s,4096,format,arg);
con_printf(simbol,s);
con_write_string(s, printed_simbols);
free(s);
}
return(printed_simbols);
/programs/develop/ktcc/trunk/libc/stdio/putchar.c
1,7 → 1,14
#include <stdio.h>
#include <conio.h>
 
int putchar ( int ch )
{
printf("%c", ch);
char s[2];
 
con_init_console_dll();
s[0] = (char)ch;
s[1] = '\0';
 
con_write_asciiz(s);
return ch;
}
/programs/develop/ktcc/trunk/libc/stdio/puts.c
0,0 → 1,11
#include <conio.h>
 
int puts ( const char * str )
{
con_init_console_dll();
con_write_asciiz(str);
con_write_asciiz("\n");
 
return 1;
}