C--

High-level languages programming questions
  • Да это всё вообще неважно. Всё равно нулевые данные прекрасно сжимаются.
  • Компилятор С--

    C-- | CMM | Си минус минус (для поиска)
    Attachments
    c--.7z (392.58 KiB)
    Downloaded 678 times
    Из хаоса в космос
  • А кто-нибудь пробовал делать библиотеки для 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;
    Получается, что всё-таки файл не совсем валидный.
  • Как оказалось, формат 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".
  • Я тестировал совместимость
    http://board.kolibrios.org/viewtopic.php?f=33&t=3418

    Прямо сейчас примеров нет под рукой, но особых проблем не было.
  • Да, действительно, формат COFF для библиотек был выбран очень удачно — чуть ли не каждый инструмент может создать COFF.
    А для PE DLL бывает нужен ещё и линкер.
    Что же касается
    невозможно собрать из нескольких объектных файлов одну библиотеку
    существует утилита elf2coff. Можно попробовать из нескольких COFF сделать ELF, а потом из полученного ELF сделать один COFF.
  • Решил ещё попробовать использовать функции из 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 400 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 11982 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 388 times
  • Пусть тут полежит. Компилятор С--, FASM, kpack.exe, kunpack.exe.
    Attachments
    cmm.7z (573.15 KiB)
    Downloaded 418 times
    Из хаоса в космос
  • Leency wrote:Пусть тут полежит. Компилятор С--, FASM, kpack.exe, kunpack.exe.
    Просто не могу не поблагодарить.

    Спасибо!
  • Get_8bit_raw
    by Veliant для Windows

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

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

    => На выходе получается 8 битный RAW и текстовый документ с палитрой.
    Attachments
    Get_8bit_raw.zip (157.78 KiB)
    Downloaded 354 times
    raw8b.png
    raw8b.png (9.91 KiB)
    Viewed 11245 times
    Из хаоса в космос
  • Leency wrote:картинок для Си приложений
    Тебе нужен bmp2xpm.

    Например, есть online: https://convertio.co/ru/bmp-xpm/
    • выбрать файл
      Spoiler:
      1.PNG
      1.PNG (50.39 KiB)
      Viewed 11237 times
    • нажать кнопку преобразовать
      Spoiler:
      2.PNG
      2.PNG (32.64 KiB)
      Viewed 11237 times
    • подождать и нажать кнопку скачать
      Spoiler:
      3.PNG
      3.PNG (31.53 KiB)
      Viewed 11237 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..%%%%.##                                         ",
    "                                                              ..###### #####                                            ",
    "                                                               $                                                        "
    };
    
  • Leency wrote:Get_8bit_raw
    by Veliant для Windows

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

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

    => На выходе получается 8 битный RAW и текстовый документ с палитрой.
    А есть консольный вариант?
    Технологии меняют мир, а я - меняю технологии.
  • Нет, но вообще такую программу несложно написать.
    Из хаоса в космос
  • pavelyakov wrote:
    Leency wrote:Get_8bit_raw
    1. открываем картинку в любом продвинутом редакторе (у меня XnView) и сохраняем ее как RAW.
    2. запускаем Get_8bit_raw.exe и выбираем созданный raw
    А есть консольный вариант?
    На самом деле XnView умеет сохранять в xpm, и у него есть консольный вариант. По крайней мере раньше был, в старом XnView, который не на Qt. А в оконном XnView был пакетный исполнитель с интерактивным назначением действий и сохранением созданных скриптов.
  • Who is online

    Users browsing this forum: No registered users and 2 guests