Re: C--
Posted: Thu Jan 07, 2016 7:08 pm
Что интересно, некоторые кадры гифки попадают на середину перерисовки кнопок.
Ты про editbox?Leency wrote:Не могу понять почему Ctrl+C / Ctrl+V не работают в С-- программах.
Может кто может помочь? Может есть у кого-то идеи?
editbox работает только в ASCII mode, соответственно ждет коды 46, 47Leency wrote:Не могу понять почему Ctrl+C / Ctrl+V не работают в С-- программах.
Может кто может помочь? Может есть у кого-то идеи?
Ну ты хоть бы код привёл тогда.Leency wrote: Ctrl+C / Ctrl+V
Ждемс описания Я вчера пытался разобраться с этим, но не преуспел пока.Leency wrote:Я нашел проблему.
Code: Select all
GetKeys();
edit_box_key stdcall(#edit1);
Code: Select all
GetKeys();
SomeCodeBlaBlaBla();
SomeCodeBlaBlaBla();
EAX = key_editbox;
edit_box_key stdcall(#edit1);
C-- делает OMF, действительно, это можно посмотроеть, например, с помощью TDUMP.So SphinxC-- ,HJWasm , fasm always compile to Coff object file
Code: Select all
/SOBJ создать ведомый OBJ файл (slave)
/OBJ создать основной модуль (master)
Наверное, С-- сделал кривой объектник.fatal error LNK1178: missing MODEND record; file is invalid or corrupt
Code: Select all
/* Event Constants */
#define REDRAW_EVENT 1
#define KEY_EVENT 2
#define BUTTON_EVENT 3
/* Window Style Constants */
#define WS_SKINNED_FIXED 0x4000000
#define WS_COORD_CLIENT 0x20000000
#define WS_CAPTION 0x10000000
/* Caption Style Constants */
#define CS_MOVABLE 0
struct TButtonInput{
byte MouseButton;
word ID;
byte HiID;
};
// Import from KolibriOS.lib:
extern dword stdcall GetButton();
extern dword stdcall GetKey();
extern dword stdcall WaitEvent();
extern void stdcall BeginDraw();
extern void stdcall EndDraw();
extern void stdcall DrawWindow(int Left, Top, Right, Bottom; char* Caption; dword BackColor, Style, CapStyle);
extern void stdcall ThreadTerminate();
void Main(){
TButtonInput Button;
while(){
switch (WaitEvent()){
case BUTTON_EVENT:
Button = GetButton();
if (Button.ID == 1) ThreadTerminate();
break;
case KEY_EVENT:
GetKey();
break;
case REDRAW_EVENT:
BeginDraw();
DrawWindow(300, 200, 400, 250, "C-- with KolibriOS.lib", 0x00C0DDEE, WS_SKINNED_FIXED | WS_COORD_CLIENT | WS_CAPTION, CS_MOVABLE);
EndDraw();
break;
}
}
}
Code: Select all
// Import from libc:
extern char* cdecl _strcpy(char* dst, char* src);
extern char* cdecl _strupr(char* str);
extern char* cdecl _strlwr(char* str);
// Import from KolibriOS.lib:
extern void stdcall ThreadTerminate();
extern int stdcall RunFile(char* Path, CmdLine);
#define NOTIFY_APP "/sys/@notify"
void Main(){
char* Str0 = "The String For a Testing!";
char Str1[30];
char Str2[30];
_strcpy(#Str1, Str0);
_strcpy(#Str2, Str0);
_strlwr(#Str1);
_strupr(#Str2);
RunFile(NOTIFY_APP, Str0);
RunFile(NOTIFY_APP, #Str1);
RunFile(NOTIFY_APP, #Str2);
ThreadTerminate();
}
Code: Select all
// Import from libc:
extern int cdecl _atoi(char* str);
// Import from KolibriOS.lib:
extern void stdcall ThreadTerminate();
extern int stdcall CreateFile(char* Path);
extern int stdcall WriteFile(char* Path, Buffer; dword Count, LoPos, HiPos; dword* BytesWritten);
extern int stdcall RunFile(char* Path, CmdLine);
#define STR_EQUAL "Equal"
#define STR_NOT_EQUAL "Not equal"
#define FILE_PATH "/sys/!test.txt"
void Main(){
dword BytesWritten;
char* StrResult;
dword SizeOfStrResult;
CreateFile(FILE_PATH);
if (_atoi(" -100500 ") == -100500)
{
StrResult = STR_EQUAL;
SizeOfStrResult = sizeof(STR_EQUAL);
}
else
{
StrResult = STR_NOT_EQUAL;
SizeOfStrResult = sizeof(STR_NOT_EQUAL);
}
WriteFile(FILE_PATH, StrResult, SizeOfStrResult - 1, 0, 0, #BytesWritten);
RunFile("/sys/txtread", FILE_PATH);
ThreadTerminate();
}
Code: Select all
// Import from libc:
extern int cdecl _snprintf(char* s; dword n; char* format, ... );
// Import from KolibriOS.lib:
extern void stdcall ThreadTerminate();
extern dword stdcall LoadLibrary(char* Path);
extern dword stdcall GetProcAddress(dword hLib; char* ProcName);
dword hConsole;
void stdcall (*ConsoleInit)(dword WndWidth, WndHeight, ScrWidth, ScrHeight; char* Caption);
void stdcall (*ConsoleExit)(dword bCloseWindow);
void stdcall (*WriteN)(char* string, dword length);
void Main(){
char buffer[60];
hConsole = LoadLibrary("/sys/lib/console.obj");
ConsoleInit = GetProcAddress(hConsole, "con_init");
ConsoleExit = GetProcAddress(hConsole, "con_exit");
WriteN = GetProcAddress(hConsole, "con_write_string");
ConsoleInit(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, "Test");
WriteN(#buffer, _snprintf(#buffer, sizeof(buffer), "test\n")); // no specifier
WriteN(#buffer, _snprintf(#buffer, sizeof(buffer), "d = %d\n", 100500)); // decimal signed
WriteN(#buffer, _snprintf(#buffer, sizeof(buffer), "u = %u\n", -1)); // desimal unsigned
WriteN(#buffer, _snprintf(#buffer, sizeof(buffer), "s = %s\n", "string")); // character string
WriteN(#buffer, _snprintf(#buffer, sizeof(buffer), "c = %c\n", 'h')); // single character
WriteN(#buffer, _snprintf(#buffer, sizeof(buffer), "x = %x\n", 0x1a3b5c7d)); // hexadecimal lower case
WriteN(#buffer, _snprintf(#buffer, sizeof(buffer), "X = %X\n", 0x1A3B5C7D)); // hexadecimal upper case
WriteN(#buffer, _snprintf(#buffer, sizeof(buffer), "o = %o\n", 0o1234567)); // octal number
WriteN(#buffer, _snprintf(#buffer, sizeof(buffer), "f = %f\n", (double)1234.56789)); // floating-point number
ConsoleExit(0);
ThreadTerminate();
}
Code: Select all
Set NAME=test
C-- %NAME%.c-- /w32 /sobj
LINK -edit %NAME%.obj
LD -T LScript.x %NAME%.obj -o %NAME%.kex -L %LIBC% -l libc -L %KolibriOS% -l KolibriOS
OBJCOPY -O binary -j .all %NAME%.kex
Del %NAME%.obj
Pause
%LIBC% директория, в которой находится libc
%KolibriOS% директория, в которой находится KolibriOS.lib
LScript линкер-скрипт для GNU-линкера LD
Code: Select all
//#startaddress 0
Думаю, надо было ещё поправить размер памяти в линкер-скрипте (исправить на MEMSIZE)this option only for COM output files.
Code: Select all
Set NAME=eolite
@echo #define LANG_ENG 1 >lang.h--
C-- %NAME%.c /w32 /sobj
LINK -edit %NAME%.obj
LD -T LScript.x %NAME%.obj -o %NAME%.kex
OBJCOPY -O binary -j .all %NAME%.kex
Del %NAME%.obj
Pause
Code: Select all
PATH_SIZE = 1024;
PARAMS_SIZE = 256;
STACK_SIZE = 1024;
SECTIONS{
.all : AT(0){
LONG(0x554e454D);
LONG(0x31305445);
LONG(1);
LONG("main");
LONG(end);
LONG(end + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
LONG(end + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
LONG(end + PATH_SIZE);
LONG(end);
*(.text) *(.text$*)
*(.rdata) *(.rdata$*)
*(.data) *(.data$*)
*(.bss)
end = .;
}
/DISCARD/ : {*(.eh_frame)}
}