/contrib/kolibri-libc/samples/Makefile |
---|
2,17 → 2,21 |
KLD = ../linuxtools/kld |
KPACK = kpack |
KTCC=../../../programs/develop/ktcc/trunk/bin/kos32-tcc |
KTCC_FLAGS = -nostdlib -I$(KLIBC)/source/include -L$(KLIBC)/lib $(KLIBC)/lib/crt0.o |
KTCC_FLAGS = -nostdlib -stack=1048576 -I$(KLIBC)/source/include -L$(KLIBC)/lib $(KLIBC)/lib/crt0.o |
ifndef NAME |
NAME = basic_gui |
endif |
static_kgcc: |
$(KGCC) basic_gui.c |
$(KLD) basic_gui.o -o basic_gui -lc |
$(KPACK) basic_gui |
$(KGCC) $(NAME).c |
$(KLD) $(NAME).o -o $(NAME) -lc |
$(KPACK) $(NAME) |
static_tcc: |
$(KTCC) $(KTCC_FLAGS) basic_gui.c -o basic_gui -lc |
$(KPACK) basic_gui |
$(KTCC) $(KTCC_FLAGS) $(NAME).c -o $(NAME) -lc |
$(KPACK) $(NAME) |
dynamic_tcc: |
$(KTCC) $(KTCC_FLAGS) -D_DYNAMIC basic_gui.c -o basic_gui_dyn -lc.obj |
$(KPACK) basic_gui_dyn |
$(KTCC) $(KTCC_FLAGS) -D_DYNAMIC $(NAME).c -o $(NAME)_dyn -lc.obj |
$(KPACK) $(NAME)_dyn |
/contrib/kolibri-libc/samples/shell_io.c |
---|
0,0 → 1,19 |
#include <shell_api.h> |
#include <ksys.h> |
#include <stdio.h> |
int main() |
{ |
char string[256]; |
shell_cls(); |
shell_puts("This is a test console application for Shell\n\r"); |
shell_puts("Type a string (255 symbols max): "); |
shell_gets(string); |
shell_puts("You typed:\n\r"); |
shell_puts(string); |
shell_puts("Press any key: "); |
string[0] = shell_getc(); |
shell_puts("\n\rYou pressed: "); |
shell_putc(string[0]); |
shell_exit(); |
} |
/contrib/kolibri-libc/source/Makefile |
---|
9,7 → 9,7 |
LIBC.OBJ = $(LIB_DIR)/libc.obj |
CFLAGS = -I$(INCLUDE) -m32 -nostdinc -nostdlib -DGNUC -Os -fno-common -fno-builtin -fno-leading-underscore -fno-pie |
DIRS := string stdlib stdio sys math ctype exports setjmp |
DIRS := string stdlib stdio sys math ctype exports setjmp shell_api |
cfiles := $(foreach dir,$(DIRS),$(patsubst %.c, %.o, $(wildcard $(dir)/*.c))) |
asmfiles := $(foreach dir,$(DIRS),$(patsubst %.s, %.o, $(wildcard $(dir)/*.s))) |
47,7 → 47,7 |
shared: $(cfiles) $(asmfiles) |
$(CLINK) $^ |
$(KPACK) a.out.obj |
#$(KPACK) a.out.obj |
mv a.out.obj $(LIBC.OBJ) |
test: |
/contrib/kolibri-libc/source/include/ksys.h |
---|
189,14 → 189,18 |
KSYS_MOUSE_WINDOW_POS = 1 |
}; |
enum KSYS_SHM_MODE{ |
KSYS_SHM_OPEN = 0x00, |
KSYS_SHM_OPEN_ALWAYS = 0x04, |
KSYS_SHM_CREATE = 0x08, |
KSYS_SHM_READ = 0x00, |
KSYS_SHM_WRITE = 0x01, |
}; |
static inline |
int _ksys_strcmp(const char * s1, const char * s2 ) |
{ |
while ((*s1) && (*s1 == *s2)){ |
++s1; |
++s2; |
} |
while ((*s1) && (*s1 == *s2)){ ++s1; ++s2; } |
return ( *( unsigned char * )s1 - * ( unsigned char * )s2 ); |
} |
360,6 → 364,7 |
"rol $16, %%eax" |
:"=a"(val) |
:"a"(37),"b"(origin) |
:"memory" |
); |
return val; |
} |
918,7 → 923,8 |
static inline |
int not_optimized _ksys_exec(char *app_name, char *args){ |
int not_optimized _ksys_exec(char *app_name, char *args) |
{ |
ksys70_t file_op; |
file_op.p00 = 7; |
file_op.p04dw = 0; |
933,4 → 939,28 |
return val; |
} |
/* Working with a named shared memory area. */ |
static inline |
int _ksys_shm_open(char *name, int mode, int size, char **new_shm) |
{ |
int error; |
asm_inline( |
"int $0x40" |
:"=a"(*new_shm), "=d"(error) |
:"a"(68), "b"(22), "c"(name), "d"(size), "S"(mode) |
); |
return error; |
} |
static inline |
void _ksys_shm_close(char *shm_name) |
{ |
asm_inline( |
"int $0x40": |
:"a"(68), "b"(23), "c"(shm_name) |
); |
} |
#endif // _KSYS_H_ |
/contrib/kolibri-libc/source/include/shell_api.h |
---|
0,0 → 1,13 |
#ifndef _SHELL_API_H_ |
#define _SHELL_API_H_ |
#include <stddef.h> |
extern void _FUNC(shell_puts)(const char *s); |
extern void _FUNC(shell_putc)(char c); |
extern char _FUNC(shell_getc)(); |
extern void _FUNC(shell_gets)(char *str); |
extern void _FUNC(shell_cls)(); |
extern void _FUNC(shell_exit)(); |
#endif |
/contrib/kolibri-libc/source/include/stdlib.h |
---|
14,7 → 14,7 |
extern int _FUNC(atoi)(const char *s); |
extern long _FUNC(atol)(const char *); |
extern long long _FUNC(atoll)(const char *); |
//char* itoa)(int n, char* s); |
extern void _FUNC(itoa)(int n, char* s); |
extern int _FUNC(abs)(int); |
extern long _FUNC(labs)(long); |
/contrib/kolibri-libc/source/shell_api/shell.h |
---|
0,0 → 1,21 |
#include <ksys.h> |
#define SHELL_OK 0 |
#define SHELL_EXIT 1 |
#define SHELL_PUTC 2 |
#define SHELL_PUTS 3 |
#define SHELL_GETC 4 |
#define SHELL_GETS 5 |
#define SHELL_CLS 6 |
extern char __shell_shm_name[32]; |
extern char *__shell_shm; |
extern int __shell_is_init; |
extern int __shell_init(); |
extern void __shell_wait(); |
#define SHELL_WAIT() while (*__shell_shm) _ksys_delay(5) |
/contrib/kolibri-libc/source/shell_api/shell_cls.c |
---|
0,0 → 1,8 |
#include "shell.h" |
void shell_cls() |
{ |
__shell_init(); |
*__shell_shm = SHELL_CLS; |
SHELL_WAIT(); |
} |
/contrib/kolibri-libc/source/shell_api/shell_exit.c |
---|
0,0 → 1,11 |
#include "shell.h" |
#include "ksys.h" |
void shell_exit() |
{ |
if(__shell_is_init){ |
*__shell_shm = SHELL_EXIT; |
SHELL_WAIT(); |
_ksys_shm_close(__shell_shm_name); |
} |
} |
/contrib/kolibri-libc/source/shell_api/shell_getc.c |
---|
0,0 → 1,9 |
#include "shell.h" |
char shell_getc() |
{ |
__shell_init(); |
*__shell_shm = SHELL_GETC; |
SHELL_WAIT(); |
return *(__shell_shm+1); |
} |
/contrib/kolibri-libc/source/shell_api/shell_gets.c |
---|
0,0 → 1,9 |
#include "shell.h" |
void shell_gets(char *str) |
{ |
__shell_init(); |
*__shell_shm = SHELL_GETS; |
SHELL_WAIT(); |
strcpy(str, __shell_shm+1); |
} |
/contrib/kolibri-libc/source/shell_api/shell_init.c |
---|
0,0 → 1,37 |
#include <ksys.h> |
#include <string.h> |
#include <stdlib.h> |
char __shell_shm_name[32]; |
char*__shell_shm=NULL; |
int __shell_is_init=0; |
int __shell_shm_init() |
{ |
__shell_is_init=1; |
ksys_proc_table_t *proc_info = (ksys_proc_table_t*)malloc(sizeof(ksys_proc_table_t)); |
if(proc_info == NULL){ |
return -1; |
} |
unsigned PID; |
_ksys_process_info(proc_info, -1); |
PID = proc_info->pid; |
free(proc_info); |
itoa(PID, __shell_shm_name); |
strcat(__shell_shm_name, "-SHELL"); |
return _ksys_shm_open(__shell_shm_name, KSYS_SHM_OPEN_ALWAYS | KSYS_SHM_WRITE, 1024*16, &__shell_shm); |
} |
int __shell_init() |
{ |
if(__shell_is_init){ |
return 0; |
} |
if(__shell_shm_init()){ |
debug_printf("Shell problems detected!\n"); |
return -1; |
} |
return 0; |
} |
/contrib/kolibri-libc/source/shell_api/shell_putc.c |
---|
0,0 → 1,9 |
#include "shell.h" |
void shell_putc(char c) |
{ |
__shell_init(); |
*__shell_shm = SHELL_PUTC; |
*(__shell_shm+1) = c; |
SHELL_WAIT(); |
} |
/contrib/kolibri-libc/source/shell_api/shell_puts.c |
---|
0,0 → 1,10 |
#include "shell.h" |
#include "string.h" |
void shell_puts(const char *str) |
{ |
__shell_init(); |
*__shell_shm = SHELL_PUTS; |
strcpy(__shell_shm+1, str); |
SHELL_WAIT(); |
} |
/contrib/kolibri-libc/source/stdlib/itoa.c |
---|
1,20 → 1,42 |
#include <string.h> |
/* |
char* itoa(int n, char* s) |
#include <ksys.h> |
char *__reverse(char *str) |
{ |
int sign; |
char *ptr; |
ptr = s; |
char tmp, *src, *dst; |
size_t len; |
if (str != NULL){ |
len = strlen (str); |
if (len > 1) { |
src = str; |
dst = src + len - 1; |
while (src < dst) { |
tmp = *src; |
*src++ = *dst; |
*dst-- = tmp; |
} |
} |
} |
return str; |
} |
if(n == (int)0x80000000) |
return strcpy(s, "-2147483648"); // overflowed -n |
/* itoa from K&R */ |
void itoa(int n, char s[]) |
{ |
int i, sign; |
if ((sign = n) < 0) n = -n; |
do { |
*ptr++ = n % 10 + '0'; |
} while ((n = n / 10) > 0); |
if (sign < 0) *ptr++ = '-'; |
*ptr = '\0'; |
return strrev(s); |
} |
*/ |
if ((sign = n) < 0) /* record sign */ |
n = -n; /* make n positive */ |
i = 0; |
do { /* generate digits in reverse order */ |
s[i++] = n % 10 + '0'; /* get next digit */ |
} while ((n /= 10) > 0); /* delete it */ |
if (sign < 0) |
s[i++] = '-'; |
__reverse(s); |
s[i] = '\0'; |
return; |
} |