Page 14 of 15

Re: C--

Posted: Sun Jul 16, 2017 6:02 pm
by 0CodErr
Но в данном случае почему-то они как раз вставились.
Хотя судя по линкер-скрипту после .bss ничего не должно быть.
Получается, что вставились именно нули из .bss.
И действительно, Section length у .bss = 0x714C0 = 453 Kb

Хм.. попробовал в линкер-скрипте не пихать всё в одну секцию, а вынести .bss отдельно:
Spoiler:

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 : {*(.bss)}
  end = .;
  /DISCARD/ : {*(.eh_frame)}  
}
В результате выходной размер стал 112 Kb.

Всё же, чтобы работало правильно нужно использовать данные не из заголовка в kolibri.h, а из линкер-скрипта.

Re: C--

Posted: Sun Jul 16, 2017 6:43 pm
by akron1
Да это всё вообще неважно. Всё равно нулевые данные прекрасно сжимаются.

Re: C--

Posted: Sat Aug 26, 2017 10:56 pm
by Leency
Компилятор С--

C-- | CMM | Си минус минус (для поиска)

Re: C--

Posted: Wed Sep 06, 2017 12:45 am
by 0CodErr
А кто-нибудь пробовал делать библиотеки для KolibriOS на С--?
Это ведь очень просто. Пример библиотеки из 3-ёх ничего не делающих функций:

Code: Select all

dword EXPORTS[] = {#szProc1, #Proc1,
                   #szProc2, #Proc2,
                   #szProc3, #Proc3,
                          0,      0};

char szProc1[] = "Proc1\0";
char szProc2[] = "Proc2\0";
char szProc3[] = "Proc3\0";

void Proc1(){}
void Proc2(){}
void Proc3(){}
и вот так собирается:

Code: Select all

C-- test.c-- /w32 /sobj
LINK -edit test.obj
Только почему-то у полученного объектного файла SizeOfStringTable = 0.
Непонятно, из-за чего именно так(из-за самого С-- или уже после конвертации).
Мой CoffDump http://board.kolibrios.org/viewtopic.php?f=9&t=3577, конечно, ругается на это, а вот другие утилиты почему-то нет.
Вот что написано в документации по этому поводу:
5.6. COFF String Table

Immediately following the COFF symbol table is the COFF string table. The position
of this table is found by taking the symbol table address in the COFF header and
adding the number of symbols multiplied by the size of a symbol.

At the beginning of the COFF string table are 4 bytes that contain the total size (in
bytes) of the rest of the string table. This size includes the size field itself, so that
the value in this location would be 4 if no strings were present.

Following the size are null-terminated strings that are pointed to by symbols in the
COFF symbol table.
То есть, как минимум там должно быть 4. И в CoffDump есть проверка

Code: Select all

If SizeOfStringTable < 4 Then Exit;
Получается, что всё-таки файл не совсем валидный.

Re: C--

Posted: Wed Sep 06, 2017 1:15 am
by 0CodErr
Как оказалось, формат coff тоже поддерживается.
Только нужно указать вот такие ключи:

Code: Select all

C-- test.c-- /w32 /sobj /COFF
Создался coff файл с двумя секциями ".codedat" и ".version".
Так что, выходит, что конвертировать не обязательно. Только нужно учитывать, что имя секции другое.
А если указать просто:

Code: Select all

C-- test.c--  /COFF
То тогда coff не создастся(как можно было подумать), а создастся приложение MS-DOS "test.com".

Re: C--

Posted: Wed Sep 06, 2017 8:14 am
by Siemargl
Я тестировал совместимость
http://board.kolibrios.org/viewtopic.php?f=33&t=3418

Прямо сейчас примеров нет под рукой, но особых проблем не было.

Re: C--

Posted: Wed Sep 06, 2017 2:51 pm
by 0CodErr
Да, действительно, формат COFF для библиотек был выбран очень удачно — чуть ли не каждый инструмент может создать COFF.
А для PE DLL бывает нужен ещё и линкер.
Что же касается
невозможно собрать из нескольких объектных файлов одну библиотеку
существует утилита elf2coff. Можно попробовать из нескольких COFF сделать ELF, а потом из полученного ELF сделать один COFF.

Re: C--

Posted: Wed Sep 13, 2017 4:10 pm
by 0CodErr
Решил ещё попробовать использовать функции из masm32lib.

Здесь есть проблема: masm декорирует stdcall-функции.

Попробовал объявлять так

Code: Select all

extern WINAPI ""
{
   _FloatToStr@12 ;
}
но такая конструкция всё равно не заработала

есть вариант пересобрать masm32.lib с помощью masm-совместимого uasm(http://www.terraspace.co.uk/uasm.html)
у uasm есть ключик для отключения декорирования stdcall-функций

Code: Select all

-zt<0|1|2>           Set STDCALL symbol decoration: 0=No name decoration,
                     1=No '@size' suffix for functions, 2=Full (default)
в самом masm я такой возможности не обнаружил

тогда в make.bat из папки masm32\m32lib для masm32.lib надо будет заменить эту строку

Code: Select all

\masm32\bin\ml /c /coff @ml.rsp
на эту

Code: Select all

uasm32 /c /coff /zt0 @ml.rsp
Всё успешно собралось.
Если вдруг кому надо
Downloaded 402 times
Это всего лишь пересобранная версия, так что, Windows-специфичные функции(FrameWindow, DisplayIcon, ...) работать не будут.

Вот такой код вполне работает
Spoiler:

Code: Select all

// Import from KolibriOS.lib:
extern void  stdcall ThreadTerminate();
extern dword stdcall LoadLibrary(char* Path);
extern dword stdcall GetProcAddress(dword hLib; char* ProcName);
// Import from masm32.lib:
extern void  stdcall FloatToStr(double fpin, char* szDbl);

dword hConsole;

void stdcall (*ConsoleInit)(dword WndWidth, WndHeight, ScrWidth, ScrHeight; char* Caption);
void stdcall (*ConsoleExit)(dword bCloseWindow);
void stdcall (*Write)(char* string);

#define PI (double)3.14159265359
#define E  (double)2.71828182846

void Main(){
  char buf[20];

  hConsole    = LoadLibrary("/sys/lib/console.obj");
  ConsoleInit = GetProcAddress(hConsole, "con_init");
  ConsoleExit = GetProcAddress(hConsole, "con_exit");
  Write       = GetProcAddress(hConsole, "con_write_asciiz");

  ConsoleInit(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, "Test");

  FloatToStr(1.5, #buf);        Write(#buf); Write("\n");
  FloatToStr(-13.42, #buf);     Write(#buf); Write("\n");
  FloatToStr(2.71e2, #buf);     Write(#buf); Write("\n");
  FloatToStr(0.1234E-13, #buf); Write(#buf); Write("\n");
  FloatToStr(PI, #buf);         Write(#buf); Write("\n");
  FloatToStr(E, #buf);          Write(#buf); Write("\n");

  ConsoleExit(0);
  ThreadTerminate();
}
только похоже, что вывод PI и E был короче, чем double.
Spoiler:
masm32lib.PNG
masm32lib.PNG (3.03 KiB)
Viewed 12030 times
вероятно, C-- не поддерживает double в полной мере.

Размер получился немного больше, так как, судя по map-файлу кроме fptoa также был включен atofp из-за того что там находится функция PowerOf10.

Может, что-то можно было ещё у C-- или у LD подкрутить, чтобы обойтись без пересборки masm32.lib.

Но в любом случае есть возможность использовать код из masm32.lib
У масм-совместимого uasm там, кстати, даже такой ключик есть

Code: Select all

-Zne                 Disable syntax extensions not supported by Masm
Для сборки примера также нужна KolibriOS.lib, взять её можно в теме Delphi7 examples http://board.kolibrios.org/viewtopic.php?f=33&t=3469
Downloaded 391 times

Re: C--

Posted: Sun Mar 11, 2018 8:18 pm
by Leency
Пусть тут полежит. Компилятор С--, FASM, kpack.exe, kunpack.exe.

Re: C--

Posted: Mon Mar 12, 2018 8:07 pm
by mkostoevr
Leency wrote:Пусть тут полежит. Компилятор С--, FASM, kpack.exe, kunpack.exe.
Просто не могу не поблагодарить.

Спасибо!

Re: C--

Posted: Wed Apr 11, 2018 1:37 pm
by Leency
Get_8bit_raw
by Veliant для Windows

Приложение предназначено для создания 8 битных картинок для Си приложений.

1. открываем картинку в любом продвинутом редакторе (у меня XnView) и сохраняем ее как RAW.
2. запускаем Get_8bit_raw.exe и выбираем созданный raw

=> На выходе получается 8 битный RAW и текстовый документ с палитрой.

Re: C--

Posted: Wed Apr 11, 2018 3:24 pm
by 0CodErr
Leency wrote:картинок для Си приложений
Тебе нужен bmp2xpm.

Например, есть online: https://convertio.co/ru/bmp-xpm/
  • выбрать файл
    Spoiler:
    1.PNG
    1.PNG (50.39 KiB)
    Viewed 11285 times
  • нажать кнопку преобразовать
    Spoiler:
    2.PNG
    2.PNG (32.64 KiB)
    Viewed 11285 times
  • подождать и нажать кнопку скачать
    Spoiler:
    3.PNG
    3.PNG (31.53 KiB)
    Viewed 11285 times
Полученный xpm выглядит вот так:
Spoiler:

Code: Select all

/* XPM */
static char *_8ffa8066002482ad77f006dad8f6103[] = {
/* columns rows colors chars-per-pixel */
"120 88 16 1 ",
"  c black",
". c #800000",
"X c #008000",
"o c #808000",
"O c navy",
"+ c #800080",
"@ c #008080",
"# c #808080",
"$ c #C0C0C0",
"% c red",
"& c green",
"* c yellow",
"= c blue",
"- c magenta",
"; c cyan",
": c gray100",
/* pixels */
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                            $#o#                                        ",
"                                                                     $    $o**#   ##ooooooo##                           ",
"                                                                    ##   #***o$##o******oo#                             ",
"                                                                   ##  #o**** o*******o#$                               ",
"                                                                  #o$ #*****oo******o#                                  ",
"                                                                 #*o$#*************ooo#                                 ",
"                                                                #** o******************o$                               ",
"                                                             ###o** ***************oooo*o$                              ",
"                                                            # #o******************o#  $###                    #+++      ",
"                                                           $o. ****oXX&XXXXoo**** oo                        #+---+$     ",
"                                                           #* o**oX&&&&&&&&&XXo**X###                     #+-----+      ",
"                                                          $oo *oX&XXXX&&&&&&&&Xo*o#                     # +-----+#      ",
"                                                          #**ooXX  $$##X&&&&&X###.#$                   #X#-----+#       ",
"                                                         $o**oX&&X#$##@@X&&&o########                $XXo*----++$##     ",
"                                                       $##**oX&&&X##*X;+.XX###########$             $X@o**#--+ ++--+    ",
"                                                       ##o**X&&&&X#**X;++ #############$           $@@o****-+++----+    ",
"                                                         **X&&&&&X#**o@;X ##############           #@Xo****+------+#    ",
"                                                      #o *oX&&&&&X#######################         #@@X*****------+#     ",
"                                                      #**oX&&&&&&&&##$$# ################        #@@X&&***#------#      ",
"                                                      o**X&&&&&&&&&&XXXX.###############.       $X@@X&&***------+       ",
"                                                      o*oX&&&&&&&&&&&&&X###o############.       #@@X&&&**#-----+        ",
"                                                      ooX&&&&&&&&&&&&&X.##..############.#     #X@XX&&&***----+         ",
"                ###$                                  o &&&&&&&&&&&&&&X##..+.###########.     $X@@X&&&&****--#          ",
"               #o**o                                 $ X&&&&&&&&&&&&&X ## +++.##########.     #@@XX&&&&&***++           ",
"              #o****#                                #X&&&&&&&&&&&&&&X###..++ .########o.#   #X@@X&&&&&&&**+++++#       ",
"              o*****#                               $ &&&&&&&&&&&&&&&.####.+++ o#######$$$    @@ &&&&&&&**o-----#       ",
"             #******                                #X&&&&&&&&&&&&&&&.####.+#+.+.#o##       #@@XX&&&&&&****----+#       ",
"             #******#                              #&&&&&&&&&&&&&&&&& ##### ##+#+##        #X@@ &&&&&&&****#---+        ",
"             o*****o#                            $X&&&&&&&&&&&&&&&&&&Xo#####.+##+#        # @@X&&&&&&&&****---+$        ",
"            #****&&&#                           #X&&&&&&&&&&&&&&&&&&&& ######.+#+#       $ @@XX&&&&&&&&***---+#         ",
"            #**&&&&X$                          #X&&&&&&&&&&&&&&&&&&&&&&Xo#####o.++      $ @@@X&&&&&&&&&&**---+          ",
"            #&&&&&&X                         $#XXXX&&&&&&&&&&&&&&&&&&&&&X.######o..#   # @@@X&&&&&&&&&&&*#--+$          ",
"             &&@+--+        ##X####$        #XXX&&&XX&&&&&&&&&&&&&&&&&&&&&Xooo####$   #X@@@X&&&&&&&&&&&**+-+$           ",
"             &+----#      #XX&&&&&&XX##   #X&&&&&&&&X X&&&&&&&&&&&&&&&&&&&&&& $$    ##@@@@XX&&&&&&&&&&**+-+$            ",
"   $ $       ------#     #X&&&&&&&&&&&&X@XX&&&&&&&&&&& &&&&&&&&&&&&&&*&&&&&&&    $#X@@@@@@X&&&&&&&&&&*#--+##            ",
"  #o*o#      -----+#    #X&&&&&&&&&&&&&&&&&&&&&&&&&&&&XX&&&&&&&&&&&&**&&&&&&& ###X@@@@@@XX&&&&&&&&&&&*#+++-+#           ",
"  o****#    #-----+#   $X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&*&**&*&**&&X@@@@@@@@@XX&&&&&&&&&&&&*#+---+$           ",
"  o*****#   #-----+#   #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&o*&*&*&****&**&XX@@@@@@@@X&&&&&&&&&&&&&&*#---+$            ",
"  o*****&#  #+----+#   X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&X&&&&&**o*&**********XX@@@@@@XX&&&&&&&&&&&&&&&*#--+              ",
"  o****&&o# $+-----#  #X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&******&****&*&&&X@@@@XXX&&&&&&&&&&&&&&&&**+#               ",
"  #****&&&+$:+-----+  #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*******&*&*&&&&&oXXXXXXXX&&&&&&&&&&&&&&&**#$                ",
"  #o***&&&-+:#+----+  X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*******&*&&&&&&&o XXXXXXX&&&&&&&&&&&&&&o#$                  ",
"   .***&&@--+$+----+# X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*****&&&&&&&&&&&&* XXXXXXX&&&&&&&&&&&&&&*#                   ",
"   #o**&&#--+##-----##X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&XX******&&&&&&&&&&&&*XXXXXXXX&&&&&&&&&&&&&&##                   ",
"    #**&&+---+#+----+#X&&&&&&&&&&XX&&&&&&&&&&&&&&&&&&XXXX&*****&&&&oo&&&&&&&*oXXXXXXX&&&&&&&&&&&&X$                     ",
"     o*&&+----+ +----+X&&&&&&&&&&&XXXXXXXXXX&&&&XXXXXXXXXo***&*&&&&ooooo&&&&*oXXXXXXX&&&&&&&&&&&&#                      ",
"      X&&+-----+ ----+X&&&&&&&&&&&&XXXXXXXXXXXXXXXXXXXXXXo*&&&&&&&oooooo&&&&*oXXXXXXX&&&&&&&&&&&X$                      ",
"      $X&+------++---- &&&&&&&&&&&&&XXXXXXXXXXXXXXXXXX XX&&&&&&ooooooooo&&&&*oXXXXXXX&&&&&&&&&XXX                       ",
"  ##o#::X+-------++---+X&&&&&&&&&&&&&X XXXXXXXXXXXXXXXXXX&&&&&&**ooooooo&&&&&oXXXXXXX&&&&&&&&& &#                       ",
"  o***o#:#------------+ &&&&&&&&&&&&&&X XXXXXXXXXXXXXXXX&&&&&o******ooooo&&&&oXXXXXXX&&&&&&&&##X$                       ",
" #o****X###+-----------+X&&&&&&&&&&&&&&XXXXXXXXXXXXXXXX&&&&&&********oooo&&&&XXXXXXXX&&&&&&&o  $                        ",
"  o****&&++#++---------+ &&&&&&&&&&&&&&& XXXXXXXXXXXXX*&&&&&o*********ooo&&&&XXXXXXXX&&&X&&&#                           ",
"  #****&&+-++ +---------+&&&&&&&&&&&&&&&XXXXXXXXXXXXX**&&&&&**********oooo&&&XXXXXXXX&&& &&#                            ",
"   o***&&+---++++-------+X&&&&&&&&&&&&&&& XXXXXXXXXX**&&&&&&**********oooo&&&XXXXXXXX&&X &o                             ",
"    #o*&&#------+--------+&&&&&&&&&&&&&&&XXXXXXXXXX**&&&&&&***********ooooo&&XXXXX XX&&$##                              ",
"     $#&&#---------------+&&&&&&&&&&&&&&&XXXXXXXXX***&&&&o************ooooo&&oXXX  XXX$                                 ",
"       $##---------------+X&&&&&&&&&&&&&&XXXXXXXX***&&&&ooo***********ooooo&*oXXX$#XX$                                  ",
"         $#++------------+X&&&&&&&&&&&&&&XXXXXXXX**&&&&oooo**********ooooo&&*oXX#  #                                    ",
"            ##+++--------+&&&X&&&&X&&&&&&XXXXXXX&**&&&&ooooo*********ooooo&&*XX#                                        ",
"                $#+++----.&&&X&&&&X&XX&&&XXXXXXX**&&&&oooooooo*****oooooo&&**XX                                         ",
"               #+++++---+o**oo&&&&X&X&&&&XXXXXXX*&&&&&%%oooooooooooooooo&&&*o#                                          ",
"              #+--------+***o***&X&&X&&&&XXXXXXo*&&&&&%%ooooooooooooooo&&&**#                                           ",
"               #+------+o**o****oo&&X&&&&XXXXXX**&&&&o%%%ooooooooooooo&&&**o$                                           ",
"                 #+++++.**o****oo**oo&&&&XXXXXX**&&&&ooooo%oooooooooo&&&***o                                            ",
"                     $++*oo***oo***o****&XXXXXX**&&&&&&&o%%%%ooooooo&&&&**o#                        $#...#              ",
"                     #--+++**oo***oo****oXXXXXX**&&&&&&&&&&oo&&&&&&&&&&***#                       #.%%%.#               ",
"                    $+-+ ---+ ###*.o****oXXXXXX**&&&&&&&&&&&&&&&&&&&&&***o                     $#.%%%%.#                ",
"                    $ #$+--+#+---# o**** XXXXXX**********&&&&&&&&&&&****o                    #..%%%..#                  ",
"                        $+#  #++#  #++#o#XXXXXX************&&&*********o$                  #..%%%%.#                    ",
"                                    #++  $#XXXX**********o************o#                 #.%%%%%%%.##                   ",
"                     $###########$        $ . Xo******oooo***********o#                #.%%%%%%%.#####                  ",
"                  $#..%%%%%%%%%%%..###    ...............oo**ooo***o..#             $#.%%%%%..#                         ",
"               #...%%%%%%..%%%%%%%%%%%...#.oo............. .. .........#          $#.%%%%..#                            ",
"               $ %%%..##########..%%%%%%%..oo..oo..........:#.........oo#      $#..%%%%.#$                              ",
"                #..##             $#..%%%..oo.ooo.ooo...  #$ ......ooooo.#$###..%%%%%.#$                                ",
"                 #                    ####.oo..oo.ooo.%%%.......o..oo.oo....%%%%%%%.#$                                  ",
"                                          $.....o..oo.%%%%%%%%..oo.oo.oo..%%%%%%%.#$                                    ",
"                                            ###.##... ..%%%%%%.oo..o..o..%%%%%%.#                                       ",
"                                                   ### $######.oo.oo.o..%%%%.##                                         ",
"                                                              ..###### #####                                            ",
"                                                               $                                                        "
};

Re: C--

Posted: Wed Apr 11, 2018 3:48 pm
by paulcodeman
Leency wrote:Get_8bit_raw
by Veliant для Windows

Приложение предназначено для создания 8 битных картинок для Си приложений.

1. открываем картинку в любом продвинутом редакторе (у меня XnView) и сохраняем ее как RAW.
2. запускаем Get_8bit_raw.exe и выбираем созданный raw

=> На выходе получается 8 битный RAW и текстовый документ с палитрой.
А есть консольный вариант?

Re: C--

Posted: Wed Apr 11, 2018 8:03 pm
by Leency
Нет, но вообще такую программу несложно написать.

Re: C--

Posted: Fri Apr 13, 2018 10:14 am
by Freeman
pavelyakov wrote:
Leency wrote:Get_8bit_raw
1. открываем картинку в любом продвинутом редакторе (у меня XnView) и сохраняем ее как RAW.
2. запускаем Get_8bit_raw.exe и выбираем созданный raw
А есть консольный вариант?
На самом деле XnView умеет сохранять в xpm, и у него есть консольный вариант. По крайней мере раньше был, в старом XnView, который не на Qt. А в оконном XnView был пакетный исполнитель с интерактивным назначением действий и сохранением созданных скриптов.