Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср сен 20, 2017 10:26 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 203 сообщения ]  На страницу Пред. 110 11 12 13 14 След.
Автор Сообщение
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Чт янв 07, 2016 7:08 pm 
Не в сети

Зарегистрирован: Чт фев 19, 2009 12:57 pm
Сообщения: 69
Что интересно, некоторые кадры гифки попадают на середину перерисовки кнопок.


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Чт янв 07, 2016 7:16 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
Это из-за того, что при использовании элемента окно становится неактивным, а потом полностью перерисовывается.


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 12:28 am 
Не в сети
Designer
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 1:16 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1073
Leency писал(а):
Не могу понять почему Ctrl+C / Ctrl+V не работают в С-- программах.
Может кто может помочь? Может есть у кого-то идеи?

Ты про editbox?

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 1:31 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
Например, в Eolite Ctrl+C / Ctrl+V не работает при именовании нового файла.


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 1:50 am 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4165
Да, про editbox.

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


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 10:43 am 
Не в сети

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


Последний раз редактировалось Siemargl Пн окт 31, 2016 10:46 am, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 10:45 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1002
Leency писал(а):
Ctrl+C / Ctrl+V
Ну ты хоть бы код привёл тогда.


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 1:22 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4165
Я нашел проблему.

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


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 1:47 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1073
Leency писал(а):
Я нашел проблему.

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

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 2:39 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4165
Суть
Вложение:
serwerge.png
serwerge.png [ 25.04 КБ | 2296 просмотров ]

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

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


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Пн окт 31, 2016 3:38 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4165
Исправлено для всех программ С--.

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


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Ср ноя 02, 2016 6:51 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4165
Устав заново изобретать элемент список, сделал его паттерном SelectList.
cmm/lib/patterns/select_list.h

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


Вложения:
Screenshot_1.png
Screenshot_1.png [ 62.79 КБ | 2222 просмотра ]

_________________
Через тернии к звездам
Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Сб июл 15, 2017 11:54 pm 
Не в сети

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

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

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

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


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

Вот некоторые примеры:
Спойлер: Показать
Код:
/* 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;
    }
  }
}
Спойлер: Показать
Код:
// 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();
}
Спойлер: Показать
Код:
// 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();
}
Спойлер: Показать
Код:
// 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();
}
Собирается это вот так:
Спойлер: Показать
Код:
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
Думаю, можно вынести константы и определения в отдельный файл.
Вложение:
C-- + KolibriOS.lib + libc.7z [2.09 КБ]
3 скачивания


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

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

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


Думаю, надо было ещё поправить размер памяти в линкер-скрипте (исправить на MEMSIZE)
наверное, из-за этого некоторые надписи и цвета были неправильные, но кое-что работало.
Спойлер: Показать
Вложение:
eolite_16_07.PNG
eolite_16_07.PNG [ 42.92 КБ | 126 просмотров ]

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

Вот так собирал:
Спойлер: Показать
Код:
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

Линкер-скрипт:
Спойлер: Показать
Код:
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)} 
}


Вернуться к началу
 Заголовок сообщения: Re: C--
СообщениеДобавлено: Вс июл 16, 2017 10:04 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
Нулевые данные в конце не вставляются в бинарник, но если расположить после них переменные со значениями, размер бинарника резко увеличится. Вопрос только в том, как на С-- контролировать расположение переменных.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 203 сообщения ]  На страницу Пред. 110 11 12 13 14 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB