Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Apr 24, 2019 9:16 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 217 posts ]  Go to page Previous 111 12 13 14 15 Next
Author Message
 Post subject: Re: C--
PostPosted: Thu Jan 07, 2016 7:08 pm 
Offline

Joined: Thu Feb 19, 2009 12:57 pm
Posts: 68
Что интересно, некоторые кадры гифки попадают на середину перерисовки кнопок.


Top
   
 Post subject: Re: C--
PostPosted: Thu Jan 07, 2016 7:16 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1259
Это из-за того, что при использовании элемента окно становится неактивным, а потом полностью перерисовывается.


Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 12:28 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4993
Не могу понять почему Ctrl+C / Ctrl+V не работают в С-- программах.
Может кто может помочь? Может есть у кого-то идеи?

_________________
Через тернии к звездам


Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 1:16 am 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1143
Leency wrote:
Не могу понять почему Ctrl+C / Ctrl+V не работают в С-- программах.
Может кто может помочь? Может есть у кого-то идеи?

Ты про editbox?

_________________
я лишь учусь


Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 1:31 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1259
Например, в Eolite Ctrl+C / Ctrl+V не работает при именовании нового файла.


Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 1:50 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4993
Да, про editbox.

_________________
Через тернии к звездам


Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 10:43 am 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 432
Leency wrote:
Не могу понять почему Ctrl+C / Ctrl+V не работают в С-- программах.
Может кто может помочь? Может есть у кого-то идеи?
editbox работает только в ASCII mode, соответственно ждет коды 46, 47


Last edited by Siemargl on Mon Oct 31, 2016 10:46 am, edited 1 time in total.

Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 10:45 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Leency wrote:
Ctrl+C / Ctrl+V
Ну ты хоть бы код привёл тогда.


Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 1:22 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4993
Я нашел проблему.

_________________
Через тернии к звездам


Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 1:47 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1143
Leency wrote:
Я нашел проблему.

Ждемс описания :) Я вчера пытался разобраться с этим, но не преуспел пока.

_________________
я лишь учусь


Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 2:39 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4993
Суть
Attachment:
serwerge.png
serwerge.png [ 25.04 KiB | Viewed 4125 times ]

В программах использовать или так:
Code:
GetKeys();
edit_box_key stdcall(#edit1);   
или так
Code:
GetKeys();
SomeCodeBlaBlaBla();
SomeCodeBlaBlaBla();
EAX = key_editbox;
edit_box_key stdcall(#edit1);   

_________________
Через тернии к звездам


Top
   
 Post subject: Re: C--
PostPosted: Mon Oct 31, 2016 3:38 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4993
Исправлено для всех программ С--.

_________________
Через тернии к звездам


Top
   
 Post subject: Re: C--
PostPosted: Wed Nov 02, 2016 6:51 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 4993
Устав заново изобретать элемент список, сделал его паттерном SelectList.
cmm/lib/patterns/select_list.h

Теперь запилить любую программу со списком на С-- проще простого. :D


Attachments:
Screenshot_1.png
Screenshot_1.png [ 62.79 KiB | Viewed 4051 times ]

_________________
Через тернии к звездам
Top
   
 Post subject: Re: C--
PostPosted: Sat Jul 15, 2017 11:54 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Решил попробовать использовать вместе с С-- KolibriOS.lib(её можно взять из темы "Delphi7 examples"), а заодно и статическую libc.

Оказалось, что С-- не делает COFF, хотя
вон там http://masm32.com/board/index.php?&topi ... 9#msg66479
товарищ Emil_halim пишет
Quote:
So SphinxC-- ,HJWasm , fasm always compile to Coff object file

C-- делает OMF, действительно, это можно посмотроеть, например, с помощью TDUMP.
Но сконвертировть OMF->COFF это не проблема.

Есть вот эти ключи:
Code:
/SOBJ       создать ведомый OBJ файл (slave)
/OBJ        создать основной модуль (master)


Но при использовании /OBJ при попытке сконвертровать ругается вот так:
Quote:
fatal error LNK1178: missing MODEND record; file is invalid or corrupt
Наверное, С-- сделал кривой объектник.
Однако, другой ключ /SOBJ вполне работает.
То есть, получается, что вместе с С-- можно использовать и KolibriOS.lib, и libc, ну и что-нибудь другое тоже.

Вот некоторые примеры:
Spoiler: Show
Code:
/* 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;
    }
  }
}
Spoiler: Show
Code:
// 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();
}
Spoiler: Show
Code:
// 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();
}
Spoiler: Show
Code:
// 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();
}
Собирается это вот так:
Spoiler: Show
Code:
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

Quote:
%LIBC% директория, в которой находится libc
%KolibriOS% директория, в которой находится KolibriOS.lib
LScript линкер-скрипт для GNU-линкера LD
Думаю, можно вынести константы и определения в отдельный файл.
Attachment:
C-- + KolibriOS.lib + libc.7z [2.09 KiB]
Downloaded 79 times


Попробовал таким способом(LD+OBJCOPY) собрать Eolite:

Пришлось закомментировать
Code:
//#startaddress 0

А то ругалось
Quote:
this option only for COM output files.


Думаю, надо было ещё поправить размер памяти в линкер-скрипте (исправить на MEMSIZE)
наверное, из-за этого некоторые надписи и цвета были неправильные, но кое-что работало.
Spoiler: Show
Attachment:
eolite_16_07.PNG
eolite_16_07.PNG [ 42.92 KiB | Viewed 1955 times ]

И ещё #param и #program_path, может ещё что-то.
Почему-то размер программы получился аж целых 564 КБ, зато сжатый KPACK-ом 28 КБ.

Вот так собирал:
Spoiler: Show
Code:
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

Линкер-скрипт:
Spoiler: Show
Code:
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)} 
}


Top
   
 Post subject: Re: C--
PostPosted: Sun Jul 16, 2017 10:04 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1259
Нулевые данные в конце не вставляются в бинарник, но если расположить после них переменные со значениями, размер бинарника резко увеличится. Вопрос только в том, как на С-- контролировать расположение переменных.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 217 posts ]  Go to page Previous 111 12 13 14 15 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited