/programs/develop/ktcc/trunk/libc/KOSfuncs_inc_status.txt |
---|
0,0 → 1,292 |
; KolibriOS system functions: |
+SF_TERMINATE_PROCESS=-1 // kos_exit() |
+SF_CREATE_WINDOW=0 ; define and draw the window //sys_create_window() |
SF_PUT_PIXEL=1 ; draw pixel to the window |
+SF_GET_KEY=2 ; get code of the pressed key |
SF_GET_SYS_TIME=3 |
+SF_DRAW_TEXT=4 //draw_text_sys() |
+SF_SLEEP=5 ; pause process // delay() |
+SF_PUT_IMAGE=7 ; draw image to the window //draw_bitmap() |
+SF_DEFINE_BUTTON=8 ; define/delete the button |
+SF_THREAD_INFO=9 ; information on execution thread // get_proc_info() |
+SF_WAIT_EVENT=10 ; wait for event // get_os_event() |
+SF_CHECK_EVENT=11 ; check for event and return // check_os_event() |
SF_REDRAW=12 |
+ SSF_BEGIN_DRAW=1 |
+ SSF_END_DRAW=2 |
+SF_DRAW_RECT=13 ; draw rectangle to the window // draw_bar() |
SF_GET_SCREEN_SIZE=14 ; get screen resolution |
SF_BACKGROUND_SET=15 |
SSF_SIZE_BG=1 |
SSF_PIXEL_BG=2 |
SSF_REDRAW_BG=3 |
SSF_MODE_BG=4 |
SSF_IMAGE_BG=5 |
SSF_MAP_BG=6 ; map background image to the address space of the process |
SSF_UNMAP_BG=7 |
SSF_LAST_DRAW=8 ; get coordinates of the last draw to the background |
SSF_REDRAW_RECT=9 ; redraws a rectangular part of the background |
SF_RD_TO_FLOPPY=16 ; save ramdisk on the floppy |
+SF_GET_BUTTON=17 ; get ID of the pressed button // get_os_button() |
SF_SYSTEM=18 |
SSF_UNFOCUS_WINDOW=1 ; take focus from the window of the given thread |
SSF_TERMINATE_THREAD=2 ; terminate process/thread by the slot number |
+ SSF_FOCUS_WINDOW=3 ; give focus to the window of the given thread |
SSF_GET_IDLE_COUNT=4 ; get counter of idle cycles per second |
SSF_GET_CPU_REQUENCY=5 ; get CPU clock rate |
SSF_RD_TO_HDD=6 ; save ramdisk to the file on hard disk |
SSF_GET_ACTIVE_WINDOW=7 ; get slot number of the active window |
SSF_SPEAKER=8 |
SSSF_GET_STATE=1 |
SSSF_TOGGLE=2 |
SSF_SHUTDOWN=9 ; system shutdown/reboot |
SSF_MINIMIZE_WINDOW=10 ; minimize active window |
SSF_INFO_DISC_SYS=11 ; get disk subsystem information |
SSF_KERNEL_VERSION=13 ; get kernel version |
SSF_WAIT_RETRACE=14 ; wait for screen retrace |
SSF_CURSOR_CENTER=15 ; center mouse cursor on the screen |
SSF_GET_FREE_RAM=16 ; get size of free RAM |
SSF_GET_TOTAL_RAM=17 ; get total amount of RAM |
SSF_TERMINATE_THREAD_ID=18 ; Terminate process/thread by the ID |
SSF_MOUSE_SETTINGS=19 |
SSSF_GET_SPEED=0 |
SSSF_SET_SPEED=1 |
SSSF_GET_SPEEDUP=2 |
SSSF_SET_SPEEDUP=3 ; set mouse acceleration |
SSSF_SET_POS=4 ; set mouse pointer position |
SSSF_SET_BUTTON=5 ; simulate state of mouse buttons |
SSSF_GET_DOUBLE_CLICK_DELAY=6 |
SSSF_SET_DOUBLE_CLICK_DELAY=7 |
SSF_GET_RAM_INFO=20 ; get information on RAM |
+ SSF_GET_THREAD_SLOT=21 ; get slot number of process/thread by the ID |
SSF_FOREIGN_WINDOW=22 ; operations with window of another thread by slot/ID |
SSSF_MINIMIZE=0 |
SSSF_MINIMIZE_ID=1 |
SSSF_RESTORE=2 |
SSSF_RESTORE_ID=3 |
SSF_MINIMIZE_ALL=23 |
SSF_SET_SCREEN_LIMITS=24 |
SSF_WINDOW_BEHAVIOR=25 ; window focus relation with other windows |
SSSF_GET_WB=1 |
SSSF_SET_WB=2 |
SF_MIDI=20 |
SSF_RESET=1 |
SSF_OUTPUT=2 |
SF_SYSTEM_SET=21 |
SSF_MPU_MIDI_BASE=1 |
SSF_KEYBOARD_LAYOUT=2 |
SSF_SYS_LANG=5 |
SSF_ACCESS_HD_LBA=11 ; setting of low-level access to HD |
SSF_ACCESS_PCI=12 ; setting of low-level access to PCI |
SF_SET_TIME_DATE=22 |
+SF_WAIT_EVENT_TIMEOUT=23; wait for event with timeout // wait_for_event() |
SF_CD=24 |
SSF_EJECT_TRAY=4 |
SSF_INSERT_TRAY=5 |
SF_SCREEN_PUT_IMAGE=25 ; put image on the background layer |
SF_SYSTEM_GET=26 |
; Same as SF_SYSTEM_SET, plus: |
+ SSF_TIME_COUNT=9 // get_tick_count() |
+ SSF_TIME_COUNT_PRO=10 ; get value of the high precision time counter // get_ns_count() |
SF_GET_SYS_DATE=29 |
SF_CURRENT_FOLDER=30 |
+ SSF_SET_CF=1 ; set current folder for the thread // set_current_folder() |
+ SSF_GET_CF=2 // get_current_folder() |
SSF_ADD_SYS_FOLDER=3 ; install the add.system directory for the kernel |
SF_GET_PIXEL_OWNER=34 ; get slot number of the screen pixel owner |
SF_GET_PIXEL=35 ; read the screen pixel color |
SF_GET_IMAGE=36 ; read the screen area |
SF_MOUSE_GET=37 |
+ SSF_SCREEN_POSITION=0 // get_mouse_pos(POS_SCREEN) |
+ SSF_WINDOW_POSITION=1 // get_mouse_pos(POS_WINDOW) |
+ SSF_BUTTON=2 ; states of the mouse buttons //get_mouse_buttons() |
+ SSF_BUTTON_EXT=3 ; states and events of the mouse buttons // get_mouse_eventstate() |
+ SSF_LOAD_CURSOR=4 |
+ SSF_SET_CURSOR=5 |
+ SSF_DEL_CURSOR=6 // destroy_cursor() |
+ SSF_SCROLL_DATA=7 //get_mouse_wheels() |
+SF_DRAW_LINE=38 |
SF_BACKGROUND_GET=39 |
;SSF_SIZE_BG=1 |
;SSF_PIXEL_BG=2 |
;SSF_MODE_BG=4 |
+SF_SET_EVENTS_MASK=40 ; turn on/off desired events |
SF_PORT_IN_OUT=43 ; input/output to a port |
SF_SET_PORTS=46 ; reserve/free a group of input/output ports |
+SF_DRAW_NUMBER=47 ; draw number to the window // draw_number_sys() |
SF_STYLE_SETTINGS=48 |
SSF_APPLY=0 ; apply screen settings |
SSF_SET_BUTTON_STYLE=1 |
SSF_SET_COLORS=2 |
+ SSF_GET_COLORS=3 ; get standard window colors // get_system_colors() |
+ SSF_GET_SKIN_HEIGHT=4 |
SSF_GET_SCREEN_AREA=5 ; get screen working area |
SSF_SET_SCREEN_AREA=6 |
SSF_GET_SKIN_MARGINS=7 |
SSF_SET_SKIN=8 |
SSF_GET_FONT_SMOOTH=9 |
SSF_SET_FONT_SMOOTH=10 |
SSF_GET_FONT_SIZE=11 |
SSF_SET_FONT_SIZE=12 |
SF_APM=49 |
SF_SET_WINDOW_SHAPE=50 |
+SF_CREATE_THREAD=51 // start_thread() |
SF_CLIPBOARD=54 |
+ SSF_GET_SLOT_COUNT=0 ; get the number of slots in the clipboard // kol_clip_num() |
+ SSF_READ_CB=1 // kol_clip_get() |
+ SSF_WRITE_CB=2 // kol_clip_set() |
+ SSF_DEL_SLOT=3 ; delete the last slot in the clipboard // kol_clip_pop() |
+ SSF_UNLOCK_BUFFER=4 ; emergency buffer unlock // kol_clip_unlock() |
SF_SPEAKER_PLAY=55 |
SF_PCI_BIOS=57 |
SF_IPC=60 ; Inter Process Communication |
+ SSF_SET_AREA=1 ; set area for IPC receiving // ipc_set_area() |
+ SSF_SEND_MESSAGE=2 // ipc_send_message() |
SF_GET_GRAPHICAL_PARAMS=61 |
+ SSF_SCREEN_SIZE=1 // GetScreenSize() |
SSF_BITS_PER_PIXEL=2 |
SSF_BYTES_PER_LINE=3 |
SF_PCI=62 |
SSF_GET_VERSION=0 ; get version of PCI-interface |
SSF_GET_LAST_BUS=1 ; get number of the last PCI-bus |
SSF_GET_ADRR_MODE=2 ; get addressing mode of the PCI configuration space |
SSF_READ_BYTE=4 |
SSF_READ_WORD=5 |
SSF_READ_DWORD=6 |
SSF_WRITE_BYTE=8 |
SSF_WRITE_WORD=9 |
SSF_WRITE_DWORD=10 |
SF_BOARD=63 |
+ SSF_DEBUG_WRITE=1 // debug_board_write_byte() |
SSF_DEBUG_READ=2 |
SF_MEMORY_RESIZE=64 ; resize total application memory |
SF_PUT_IMAGE_EXT=65 ; draw image with palette to the window |
SF_KEYBOARD=66 |
SSF_SET_INPUT_MODE=1 |
SSF_GET_INPUT_MODE=2 |
SSF_GET_CONTROL_KEYS=3; get status of control keys |
SSF_SET_SYS_HOTKEY=4 |
SSF_DEL_SYS_HOTKEY=5 |
SSF_LOCK_INPUT=6 ; block normal input |
SSF_UNLOCK_INPUT=7 ; restore normal input |
SF_CHANGE_WINDOW=67 ; change position/sizes of the window |
SF_SYS_MISC=68 |
SSF_GET_TASK_SWITCH_COUNT=0 |
+ SSF_SWITCH_TASK=1 //yield() |
SSF_PERFORMANCE=2 |
SSSF_ALLOW_RDPMC=0 |
SSSF_CACHE_STATUS=1 |
SSSF_CACHE_ON=2 |
SSSF_CACHE_OFF=3 |
SSF_READ_MSR=3 |
SSF_WRITE_MSR=4 |
SSF_HEAP_INIT=11 |
+ SSF_MEM_ALLOC=12 // user_alloc() |
+ SSF_MEM_FREE=13 // user_free() |
SSF_WAIT_SIGNAL=14 ; wait for signal from another program/driver |
+ SSF_LOAD_DRIVER=16 // get_service() |
+ SSF_CONTROL_DRIVER=17 // call_service() |
SSF_LOAD_DLL=19 |
+ SSF_MEM_REALLOC=20 //user_realloc() |
SSF_LOAD_DRIVER_PE=21 |
+ SSF_MEM_OPEN=22 ; open named memory area // shm_open() |
+ SSF_MEM_CLOSE=23 // shm_close() |
SSF_SET_EXCEPTION_HANDLER=24 |
SSF_SET_EXCEPTION_STATE=25 |
+ SSF_MEM_FREE_EXT=26 // user_unmap() |
+ SSF_LOAD_FILE=27 |
SF_DEBUG=69 |
SSF_SET_MESSAGE_AREA=0 |
SSF_GET_REGISTERS=1 |
SSF_SET_REGISTERS=2 |
SSF_DETACH=3 |
SSF_SUSPEND=4 |
SSF_RESUME=5 |
SSF_READ_MEMORY=6 |
SSF_WRITE_MEMORY=7 |
SSF_TERMINATE=8 |
SSF_DEFINE_BREAKPOINT=9 |
SF_FILE=70 |
SSF_READ_FILE=0 |
SSF_READ_FOLDER=1 |
SSF_CREATE_FILE=2 |
SSF_WRITE_FILE=3 |
SSF_SET_END=4 |
SSF_GET_INFO=5 |
SSF_SET_INFO=6 |
+ SSF_START_APP=7 |
SSF_DELETE=8 |
SSF_CREATE_FOLDER=9 |
SF_SET_CAPTION=71 |
SF_SEND_MESSAGE=72 |
+SF_BLITTER=73 //Blit() |
SF_NETWORK_GET=74 |
SSF_DEVICE_COUNT=255 ; get number of active network devices |
SSF_DEVICE_TYPE=0 |
SSF_DEVICE_NAME=1 |
SSF_RESET_DEVICE=2 |
SSF_STOP_DEVICE=3 |
SSF_DEVICE_POINER=4 |
SSF_TX_PACKET_COUNT=6 |
SSF_RX_PACKET_COUNT=7 |
SSF_TX_BYTE_COUNT=8 |
SSF_RX_BYTE_COUNT=9 |
SSF_LINK_STATUS=10 |
SF_NETWORK_SOCKET=75 |
SSF_OPEN=0 |
SSF_CLOSE=1 |
SSF_BIND=2 |
SSF_LISTEN=3 |
SSF_CONNECT=4 |
SSF_ACCEPT=5 |
SSF_SEND=6 |
SSF_RECEIVE=7 |
SSF_SET_OPTIONS=8 |
SSF_GET_OPTIONS=9 |
SSF_GET_PAIR=10 |
SF_NETWORK_PROTOCOL=76 |
SSF_ETHERNET_READ_MAC=0 |
SSF_IP4_PACKETS_SENT=10000h |
SSF_IP4_PACKETS_RECEIVED=10001h |
SSF_IP4_READ_IP=10002h |
SSF_IP4_WRITE_IP=10003h |
SSF_IP4_READ_DNS=10004h |
SSF_IP4_WRITE_DNS=10005h |
SSF_IP4_READ_SUBNET=10006h |
SSF_IP4_WRITE_SUBNET=10007h |
SSF_IP4_READ_GATEWAY=10008h |
SSF_IP4_WRITE_GATEWAY=10009h |
SSF_ICMP_PACKETS_SENT=20000h |
SSF_ICMP_PACKETS_RECEIVED=20001h |
SSF_ICMP_ECHO_REPLY=20003h |
SSF_UDP_PACKETS_SENT=30000h |
SSF_UDP_PACKETS_RECEIVED=30001h |
SSF_TCP_PACKETS_SENT=40000h |
SSF_TCP_PACKETS_RECEIVED=40001h |
SSF_ARP_PACKETS_SENT=50000h |
SSF_ARP_PACKETS_RECEIVED=50001h |
SSF_ARP_GET_ENTRY_COUNT=50002h |
SSF_ARP_READ_ENTRY=50003h |
SSF_ARP_ADD_STATIC_ENTRY=50004h |
SSF_ARP_DEL_ENTRY=50005h |
SSF_ARP_SEND_ANNOUNCE=50006h |
SSF_ARP_CONFLICTS_COUNT=50007h |
SF_FUTEX=77 |
SSF_CREATE=0 |
SSF_DESTROY=1 |
SSF_WAIT=2 |
SSF_WAKE=3 |
; File system errors: |
FSERR_SUCCESS=0 |
FSERR_UNSUPPORTED=2 |
FSERR_UNKNOWN=3 |
FSERR_FILE_NOT_FOUND=5 |
FSERR_END_OF_FILE=6 |
FSERR_INVALID_BUFFER=7 |
FSERR_DISK_FULL=8 |
FSERR_FAIL=9 |
FSERR_ACCESS_DENIED=10 |
FSERR_DEVICE_FAIL=11 |
FSERR_OUT_OF_MEMORY=12 |
/programs/develop/ktcc/trunk/libc/include/assert.h |
---|
1,4 → 1,5 |
#ifndef __ASSERT_H |
#define __ASSERT_H |
#ifdef NDEBUG |
# define assert(a) (void)0 |
/programs/develop/ktcc/trunk/libc/include/ctype.h |
---|
1,3 → 1,5 |
#ifndef _CTYPE_H |
#define _CTYPE_H |
/* |
** All character classification functions except isascii(). |
** Integer argument (c) must be in ASCII range (0-127) for |
35,3 → 37,5 |
extern unsigned char tolower(unsigned char c); |
extern unsigned char toupper(unsigned char c); |
#endif |
/programs/develop/ktcc/trunk/libc/include/errno.h |
---|
0,0 → 1,6 |
#ifndef _ERRNO_H |
#define _ERRNO_H |
#include <stdio.h> |
#endif |
/programs/develop/ktcc/trunk/libc/include/kos32sys1.h |
---|
3,7 → 3,9 |
// file header taken from newlib |
// added many sys functions, compatible with tcc |
// with gcc USE gcc -mno-ms-bitfields!!! |
//#include <newlib.h> |
//#include <stdint.h> |
#include <stddef.h> |
42,7 → 44,6 |
#define SHM_WRITE 0x01 |
typedef unsigned int color_t; |
132,6 → 133,22 |
struct ipc_message data[0]; // data begin |
}; |
typedef struct __attribute__((packed)) file_op_t |
{ |
uint32_t fn; |
uint32_t flags; |
char* args; |
uint32_t res1, res2; |
char zero; |
char* app_name |
#ifdef __TINYC__ |
__attribute__((packed)) |
#endif |
; |
} file_op_t; |
static inline void begin_draw(void) |
{ |
__asm__ __volatile__( |
524,8 → 541,12 |
void *user_data); |
#endif |
// May be next section need to be added in newlibc |
/////////////////////////////////////////////////////////////////////////////// |
/// May be next section need to be added in newlibc |
// Siemargl addenium |
#define X_Y(x,y) (((x)<<16)|(y)) |
enum KOLIBRI_GUI_EVENTS { |
KOLIBRI_EVENT_NONE = 0, /* Event queue is empty */ |
KOLIBRI_EVENT_REDRAW = 1, /* Window and window elements should be redrawn */ |
539,7 → 560,108 |
KOLIBRI_EVENT_IRQBEGIN = 16 /* 16..31 IRQ0..IRQ15 interrupt =IRQBEGIN+IRQn */ |
}; |
enum control_keys { |
KM_SHIFT = 0x00010000, |
KM_CTRL = 0x00020000, |
KM_ALT = 0x00040000, |
KM_NUMLOCK = 0x00080000 |
}; |
struct __attribute__ ((__packed__)) fs_dirinfo { |
uint32_t subfn; // 1 read dir |
uint32_t start; |
uint32_t flags; |
uint32_t size; |
uint32_t retval; |
union { |
struct __attribute__ ((__packed__)) { |
uint8_t zero; // 0 |
char* ppath; |
}; |
char path[5]; // up to 4096 |
} ; |
}; |
static inline |
uint32_t sf_file(int subfn, struct fs_dirinfo* dinfo) |
/// SysFn70 call with subfunction |
/// retval 0 if ok |
{ |
uint32_t retval; |
dinfo->subfn = subfn; |
__asm__ __volatile__( |
"int $0x40 " |
:"=a"(retval) |
:"a"(70),"b"(dinfo) |
:); |
return retval; |
}; |
struct fs_dirheader { |
uint32_t version; // 1 |
uint32_t curn_blocks; // number of read dir items (BDFE) |
uint32_t totl_blocks; // directory full size |
char other[20]; // reserved 0 |
}; |
enum filetype |
{ |
FS_RONLY = 1, |
FS_HIDDEN = 2, |
FS_SYSTEM = 4, |
FS_VOLID = 8, |
FS_SUBDIR = 16, |
FS_FOLDER = 16, |
FS_ARCHIV = 32 |
}; |
struct __attribute__ ((__packed__)) fs_filetime { |
uint8_t sec; |
uint8_t mm; |
uint8_t hour; |
uint8_t zero; |
}; |
struct __attribute__ ((__packed__)) fs_filedate { |
uint8_t day; |
uint8_t month; |
uint16_t year; |
}; |
/// directory entry cp866 |
struct fsBDFE { |
uint32_t filetype; |
uint32_t encoding; // 0 - cp866, 1 - utf16le |
struct fs_filetime tm_created; |
struct fs_filedate dt_created; |
struct fs_filetime tm_accessed; |
struct fs_filedate dt_accessed; |
struct fs_filetime tm_modified; |
struct fs_filedate dt_modified; |
uint64_t size; |
char fname[264]; |
}; // must be sized 304 |
/// directory entry UTF16LE |
struct fsBDFE_16 { |
uint32_t filetype; |
uint32_t encoding; // 0 - cp866, 1 - utf16le |
struct fs_filetime tm_created; |
struct fs_filedate dt_created; |
struct fs_filetime tm_accessed; |
struct fs_filedate dt_accessed; |
struct fs_filetime tm_modified; |
struct fs_filedate dt_modified; |
uint64_t size; |
wchar_t fname[260]; |
}; // must be sized 560 |
// copied from /programs/system/shell/system/kolibri.c |
// fn's returned -1 as syserror, 1 as error, 0 as OK |
static inline |
695,15 → 817,7 |
static inline |
int start_app(char *app_name, char *args){ |
struct file_op_t |
{ |
uint32_t fn; |
uint32_t flags; |
char* args; |
uint32_t res1, res2; |
char zero; |
char* app_name __attribute__((packed)); |
} file_op; |
file_op_t file_op; |
memset(&file_op, 0, sizeof(file_op)); |
file_op.fn = 7; |
file_op.args = args; |
715,7 → 829,56 |
return val; |
} |
static inline |
uint32_t get_control_keys(void) |
{ |
uint32_t ctrl; |
__asm__ __volatile__( |
"int $0x40 \n\t" |
:"=a"(ctrl) |
:"a"(66),"b"(3)); |
return ctrl; |
}; |
static inline |
int get_keyboard_layout(int opt, char* buf) |
/// 128 byte buffer |
/// opt: 1 - normal, 2 - shifted, 3 - alted, or 9 - return language |
{ |
uint32_t lang; |
__asm__ __volatile__( |
"int $0x40 \n\t" |
:"=a"(lang) |
:"a"(26),"b"(2), "c"(opt), "d"(buf)); |
return lang; |
}; |
static inline |
int font_size(int color) |
/// decode font size in pixels from color as SysFn4 |
/// returns (width, hight) |
{ |
int font = color >> 24; |
int font_multipl = (font & 7) + 1; |
int width_sym, hight_sym; |
if (font & 0x10) // 8x16 |
{ |
width_sym = 8 * font_multipl; |
hight_sym = 16 * font_multipl; |
} else // 6x9 |
{ |
width_sym = 6 * font_multipl; |
hight_sym = 9 * font_multipl; |
} |
return hight_sym + (width_sym << 16); |
} |
/* |
static inline char *getcwd(char *buf, size_t size) |
{ |
729,10 → 892,31 |
return buf; |
} |
*/ |
// end section |
/* not finished |
void staticnum_draw(staticnum *st) |
{ |
register uint32_t fmt; |
if (st->width < 0) |
fmt = (-st->width << 16); // leading zeros, decimal |
else |
fmt = (st->width << 16) | 0x80000000; // no leading zeros, decimal |
__asm__ __volatile__( |
"int $0x40" |
::"a"(47), |
"b"(fmt), |
"c"(st->number), |
"d"(st->start_xy), |
"S"(st->color_flags), |
"D"(st->bg_color) |
:); |
} |
*/ |
//////////// end section |
//added nonstatic inline because incomfortabre stepping in in debugger |
void __attribute__ ((noinline)) debug_board_write_str(const char* str); |
void __attribute__ ((noinline)) debug_board_printf(const char *format,...); |
753,6 → 937,16 |
va_end(ap); |
debug_board_write_str(log_board); |
} |
__attribute__ ((noinline)) void trap(int n) |
{ |
// nothing todo, just see n in debugger. use "bp trap" command |
__asm__ __volatile__( |
"nop" |
: |
:"a"(n)); |
} |
*/ |
/programs/develop/ktcc/trunk/libc/include/math.h |
---|
1,6 → 1,8 |
/* Copyright (C) 1999 DJ Delorie, see COPYING.DJ for details */ |
/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */ |
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ |
#ifndef _MATH_H |
#define _MATH_H |
//extern int stdcall integer(float number); |
189,3 → 191,4 |
//#endif /* _USE_LIBM_MATH_H */ |
//#endif /* !__dj_include_math_h_ */ |
#endif |
/programs/develop/ktcc/trunk/libc/include/stdio.h |
---|
28,7 → 28,7 |
int mode; |
} FILE; |
#define stderr ((FILE*)3) /* works inly for fprintf!!! */ |
#define stderr ((FILE*)3) /* works only for fprintf!!! */ |
#define FILE_OPEN_READ 0 |
/programs/develop/ktcc/trunk/libc/include/stdlib.h |
---|
30,7 → 30,7 |
void* calloc (size_t num, size_t size); |
#define exit(a) _ksys_exit() |
void exit (int status); /* close console if was initialized, also stay window [finished] when status is error < 0 */ |
#define abort() exit(-1) |
typedef struct { |
/programs/develop/ktcc/trunk/libc/include/time.h |
---|
0,0 → 1,29 |
#ifndef _TIME_H |
#define _TIME_H |
typedef unsigned long int clock_t; |
typedef unsigned long int time_t; |
#define clock() get_tick_count() |
#define CLOCKS_PER_SEC 100 |
struct tm { |
int tm_sec; /* seconds after the minute 0-61*/ |
int tm_min; /* minutes after the hour 0-59 */ |
int tm_hour; /* hours since midnight 0-23 */ |
int tm_mday; /* day of the month 1-31 */ |
int tm_mon; /* months since January 0-11 */ |
int tm_year; /* years since 1900 */ |
int tm_wday; /* days since Sunday 0-6 */ |
int tm_yday; /* days since January 1 0-365 */ |
int tm_isdst; /* Daylight Saving Time flag */ |
}; |
time_t mktime (struct tm * timeptr); |
time_t time (time_t* timer); |
struct tm * localtime (const time_t * timer); /* non-standard! ignore parameter and return just time now, not generate tm_isdst, tm_yday, tm_wday == -1 */ |
double difftime (time_t end, time_t beginning); |
extern struct tm __buffertime; |
#endif |
/programs/develop/ktcc/trunk/libc/kolibrisys/_ksys_files_acces.asm |
---|
29,8 → 29,10 |
jnz error_for_file_size |
mov eax,[buffer_for_info+32] ;file size |
ret |
error_for_file_size: |
neg eax |
ret |
endp |
/programs/develop/ktcc/trunk/libc/stdio/conio.c |
---|
43,7 → 43,7 |
"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", |
"con_get_cursor_pos", "con_set_cursor_pos", "con_set_title", |
(char*)0 |
}; |
68,6 → 68,7 |
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]); |
con_set_title = _ksys_cofflib_getproc(exp, imports[20]); |
} |
/programs/develop/ktcc/trunk/libc/stdio/fclose.c |
---|
12,6 → 12,8 |
if(file->buffer) |
free(file->buffer); |
if(file->filename) |
free(file->filename); |
free(file); |
return 0; |
/programs/develop/ktcc/trunk/libc/stdio/fgetc.c |
---|
8,7 → 8,7 |
return EOF; |
} |
if ((file->mode & 3!=FILE_OPEN_READ) && (file->mode & FILE_OPEN_PLUS==0)) return EOF; |
if ((file->mode & 3)!=FILE_OPEN_READ && (file->mode & FILE_OPEN_PLUS)==0) return EOF; |
if (file->filepos>=file->filesize) |
{ |
/programs/develop/ktcc/trunk/libc/stdio/fopen.c |
---|
7,83 → 7,33 |
int errno = 0; |
const char* getfullpath(const char *path){ |
int i,j,relpath_pos,localpath_size; |
int filename_size; |
char local_path; |
int relpath_pos, localpath_size; |
char *programpath; |
char *newpath; |
char *prgname; |
i=0; |
local_path=1; //enable local path |
while((*(path+i)!='\0') || (*(path+i)!=0)) |
if (path[0] == '/') /* root */ |
{ |
if (*(path+i)=='.') |
return(strdup(path)); /* dup need as free in fclose() */ |
} |
relpath_pos = 0; |
if (path[0] == '.' && path[1] == '/') |
{ |
if (*(path+i+1)=='/') |
{ //detected relative path |
relpath_pos=i+2; |
local_path=0; |
break; |
//detected relative path, begins with ./ |
relpath_pos=2; |
} |
} |
if (*(path+i)=='/') |
{ //disabple local path |
local_path=0; |
return(path); |
} |
i++; |
} |
filename_size=i; |
programpath=&__path; |
if (local_path==1) |
{ |
i=FILENAME_MAX; |
//find local path of program |
while(*(programpath+i)!='/') |
{ |
i--; |
} |
localpath_size=i; |
newpath=malloc(FILENAME_MAX); |
if(!newpath) |
{ |
errno = E_NOMEM; |
return NULL; |
} |
//if we here than path is a relative or local |
prgname = strrchr(programpath, '/'); |
if (!prgname) return strdup(path); |
//copy local path to the new path |
for(i=0;i<=localpath_size;i++) |
{ |
*(newpath+i)=*(programpath+i); |
} |
//copy filename to the new path |
for(i=0;i<filename_size;i++) |
{ |
*(newpath+localpath_size+1+i)=*(path+i); |
} |
return(newpath); |
} |
localpath_size = prgname - programpath + 1; |
//if we here than path is a relative |
i=FILENAME_MAX; |
//find local path of program |
while(*(programpath+i)!='/') |
{ |
i--; |
} |
localpath_size=i; |
i=0; |
//find file name size |
while((*(path+relpath_pos+i)!='\0') || (*(path+relpath_pos+i)!=0)) |
{ |
i++; |
} |
filename_size=i; |
newpath=malloc(FILENAME_MAX); |
if(!newpath) |
{ |
91,23 → 41,23 |
return NULL; |
} |
//copy local path to the new path |
for(i=0;i<=localpath_size;i++) |
{ |
*(newpath+i)=*(programpath+i); |
} |
strncpy(newpath, programpath, localpath_size); |
newpath[localpath_size] = 0; |
//copy filename to the new path |
for(i=0;i<filename_size;i++) |
{ |
*(newpath+localpath_size+1+i)=*(path+relpath_pos+i); |
} |
strcpy(newpath + localpath_size, path + relpath_pos); |
return(newpath); |
} |
FILE* fopen(const char* filename, const char *mode) |
{ |
FILE* res; |
int imode; |
int imode, sz = -1; |
char *fullname; |
imode=0; |
if (*mode=='r') |
{ |
141,6 → 91,19 |
} |
if (*mode!=0) |
return NULL; |
fullname = (char*)getfullpath(filename); |
if ((imode & 3) == FILE_OPEN_READ && fullname) /* check existense */ |
{ |
sz = _ksys_get_filesize(fullname); |
if (sz < 0) |
{ |
free(fullname); |
errno = sz; |
return NULL; |
} |
} |
res=malloc(sizeof(FILE)); |
if (res) |
{ |
149,7 → 112,7 |
res->filesize=0; |
res->filepos=0; |
res->mode=imode; |
res->filename=(char*)getfullpath(filename); |
res->filename=fullname; |
} |
if(!res || !res->buffer || !res->filename) |
{ |
159,6 → 122,9 |
if ((imode==FILE_OPEN_READ) || (imode==FILE_OPEN_APPEND)) |
{ |
if (sz > 0) /*already got*/ |
res->filesize = sz; |
else |
res->filesize=_ksys_get_filesize(res->filename); |
} |
return res; |
/programs/develop/ktcc/trunk/libc/stdio/fread.c |
---|
12,7 → 12,7 |
return 0; |
} |
if ((file->mode &3)!=FILE_OPEN_READ && (file->mode & FILE_OPEN_PLUS==0)) |
if ((file->mode &3)!=FILE_OPEN_READ && (file->mode & FILE_OPEN_PLUS)==0) |
{ |
errno = E_ACCESS; |
return 0; |
/programs/develop/ktcc/trunk/libc/stdlib/time.c |
---|
0,0 → 1,61 |
#include <time.h> |
#include <kolibrisys.h> |
struct tm __buffertime; |
struct tm * localtime (const time_t * timer) |
/* non-standard! ignore parameter and return just time now */ |
{ |
int kos_date, kos_time; |
kos_date = _ksys_get_date(); |
kos_time = _ksys_get_system_clock(); |
__buffertime.tm_mday = kos_date >> 16; |
__buffertime.tm_mon = ((kos_date & 0xFF00) >> 8) -1; |
__buffertime.tm_year = kos_date >> 16 + 100; |
__buffertime.tm_wday = __buffertime.tm_yday = __buffertime.tm_isdst = -1; /* temporary */ |
__buffertime.tm_sec = kos_time >> 16; |
__buffertime.tm_min = (kos_time & 0xFF00) >> 8; |
__buffertime.tm_hour = kos_time & 0xFF; |
return &__buffertime; |
} |
time_t time (time_t* timer) |
{ |
time_t t = mktime(localtime(0)); |
if (timer) *timer = t; |
return t; |
} |
time_t mktime (struct tm * timeptr) |
{ |
int y, m, d; |
time_t t; |
y = timeptr->tm_year + 1900; |
m = timeptr->tm_mon + 1; |
d = timeptr->tm_mday; /* to -1 or not to -1? */ |
if (m < 3) { m += 12; y -= 1; } |
t = y * 365 + y / 4 + y /400 - y / 100; /* years - > days */ |
t += 30 * m + 3 * (m + 1) / 5 + d; /* add month days */ |
t -= 719561; /* 01 jan 1970 */ |
t *= 86400; |
t += 3600 * timeptr->tm_hour + 60 * timeptr->tm_min + timeptr->tm_sec; |
return t; |
} |
double difftime (time_t end, time_t beginning) |
{ |
return end - beginning; |
} |
/programs/develop/ktcc/trunk/readme.txt |
---|
5,3 → 5,123 |
building Kolibri version |
>make -f Makefile.kos32 |
========= for compiler developers ========= |
read .\source\readme_kos32.txt |
------ TODO ------- |
-minimal memory allocator |
-more libc stardard functions. see report below |
-more Kolibly SysFn wrappers. see \libc\KOSfuncs_inc_status.txt |
-add stdin, stderr, stdout emulation íå õâàòàåò stdin, stdout - ìîæíî ñäåëàòü êàê stderr!, íî íàäî âîçèòüñÿ çàîäíî ñ ferror & feof |
-getchar, gets if returs errorcode (0, null) - you must exit program, because of closed console window |
-ïðè íîðìàëüíîì âûõîäå çàêðûâàòü êîíñîëü |
-sstrek âèñíåò íà ïîèñêå õåëïà ñ äèñêåòû - just very long reading by one symbol without buffering (need to change gets, getc, ungetc etc) |
------ errors ------ |
-not working: default search path are ./include ./lib from executable (under KOS need to use -Bpath_to_ktcc) |
--start.o not found using -B (kos) - put near your.c file |
-åñëè ïðîåêò ìíîãîôàéëîâûé - .dbg ãåíåðèò äóáëèðóþùèåñÿ ìåòêè äàííûõ, òèïà L.78 ìîæåò óêàçûâàòü íà äðóãîé ñåãìåíò ( |
----- fixed errors ------ |
-if static var sized more than 14096+ -> crash compiled .exe (kos) |
(^ default stack size set at compile time tccmeos:177 is below 4k) |
FIX - use -stack=1280000 option |
-con_set_title is NULL. fixed 180128 |
========= libc =========== |
-no "finished" in title of console program after exit console - use con_exit() |
-used system memory allocator (4096 bytes minimum) |
libc not complete. overall status: |
no files: |
limits.h |
locale.h |
setjmp.h |
signal.h |
wchar.h |
wctype.h |
functions absent list: |
stdio.h: |
remove |
rename |
tmpfile |
tmpnam |
freopen |
setbuf |
setvbuf |
stdlib.h: |
atexit |
getenv |
system |
bsearch |
qsort |
mblen |
mbtowc |
wctomb |
mbstowcs |
wcstombs |
string.h: |
strxfrm |
time.h: - needs include kos32sys1.h |
asctime |
ctime |
gmtime |
localtime - non standard |
strftime |
Status or libc tests |
---FAILED--- |
strtoul incorrect work with big unsigned > MAX_LONG |
---NOT TESTED--- |
no library fns realized |
qsort |
time |
---HANG--- |
sscanf |
>TEST_F(0x1234p56) - no %a formats |
---STACK IS SMALL--- |
use new -stack=1280000 option to pass test |
tstring |
strtodlong |
--other-- |
fscanf |
-?scanf ignores width specs, '*' and [chars], cant read %a float |
-%n counts as parameter |
snprintf |
-some format misturbances |
-may incorrect prints unsigned > 2147483647L |
ungetc |
-ungetc fails if filepos == 0 - no tricks |
all file ops limited to 2Gb |
/programs/develop/ktcc/trunk/source/readme_kos32.txt |
---|
3,7 → 3,8 |
Used github branch https://github.com/TinyCC/tinycc |
It have a vesion 0.9.26 with heads up to 0.9.27 - see ChangeLog |
Kolibri version errata/changelog: |
Kolibri version specifics |
errata/changelog - moved to trunk/readme.txt |
-added TCC_TARGET_MEOS as needed |
-leading_underscore by default is 0 (can use -f[no-]leading-underscore), |
15,7 → 16,6 |
use -Bpath_to_ktcc and put start.o in current dir) |
-when config.h is ready, compiler can be easy builded as [kos32-]gcc tcc.c libtcc.c |
see also makefile.kos32 |
-silent (kos) -> writes to debugboard |
-impossible using with mingw-gcc compiled lib, incompatible library format: |
.o is PE-format from gcc but ELF from tcc, may be linux-gcc does it ok |
-__fastcall incompatible with other compilers. now stack freed by caller. |
25,9 → 25,6 |
-using __attribute__((packed)) see test82. need naming struct twice as in kos32sys1.h |
-using __attribute__ ((alias xxx)) restricted only for non "static inline" functions |
-erroneous or "non TCC" member using in nested structs or unions can lead to compiler internal error |
-not working: default search path are ./include ./lib from executable |
--under KOS need to use -Bpath_to_ktcc |
--start.o not found using -B (kos) - put near your.c file |
-bench timing coarse (0s or 1s), no usec in newlib gettimeofday. OK |
Tests status: |
50,84 → 47,3 |
test46 no stdin - removed funtionality read from console, but file ops works |
libc: |
-no "finished" in title of console program after exit console - use con_exit() |
-used system memory allocator (4096 bytes minimum) |
libc not complete. overall status: |
no files: |
errno.h - in stdio |
limits.h |
locale.h |
setjmp.h |
signal.h |
time.h - can use get_tick_count()/100 from kos32sys1.h |
wchar.h |
wctype.h |
functions absent list: |
stdio.h: |
remove |
rename |
tmpfile |
tmpnam |
freopen |
setbuf |
setvbuf |
stdlib.h: |
atexit |
getenv |
system |
bsearch |
qsort |
mblen |
mbtowc |
wctomb |
mbstowcs |
wcstombs |
string.h |
strxfrm |
Status or libc tests |
---FAILED--- |
strtoul incorrect work with big unsigned > MAX_LONG |
---NOT TESTED--- |
no library fns realized |
qsort |
time |
---HANG--- |
sscanf |
>TEST_F(0x1234p56) - no %a formats |
---STACK IS SMALL--- |
use new -stack=1280000 option to pass test |
tstring |
strtodlong |
--other-- |
fscanf |
-?scanf ignores width specs, '*' and [chars], cant read %a float |
-%n counts as parameter |
snprintf |
-some format misturbances |
-may incorrect prints unsigned > 2147483647L |
ungetc |
-ungetc fails if filepos == 0 - no tricks |
all file ops limited to 2Gb |