Пакет MASM64. Готовые наработки

Тема в разделе "WASM.X64", создана пользователем Mikl___, 22 мар 2026.

  1. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    471
    Что-то про RadASM2 никогда, никто не вспоминает. Тоже, по-моему, достаточно любопытная штука. Ассемблеры, по-моему, любые можно прикрутить и СИ-компилятор тоже. А вот насколько там это всё удобно реализовано - не знаю, не тестил. Как-то себе на заметку брал, но до практики дело так и не дошло.
     
  2. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    GRAFik

    Хоть и сырая вещь, плохо что нет исходников.
     
  3. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    Если я правильно понел, чтобы 'появилась' своя IDE на c, нужно сделать каркас приложения с вкладками и написать [функцию] подсветки синтаксиса(для подсветки текста создается специальная структура). При этом нельзя брать код например из notepad++/scylla ибо там все построенно на ООП и классах. Надо процедурное программирование как в AkelPad, но чтобы подсветка была реализована не в плагине, а коде самой IDE, желательно в виде отдельного заголовочного файла(чтобы не загромождать основной код). + чтобы была нумерация строк кода слева. Все.

    Выбирается и подключается компиль(их может быть несколько). Выбирается c или masm.
    Можно даже в качестве примеров проектов сделать нейронки: перцептрон, RNN с памятью :)
    --- Сообщение объединено, 24 май 2026 в 10:11 ---
    --- --
    Типо такого:

    105.jpg
    --- Сообщение объединено, 24 май 2026 в 10:50 ---
    --- --

    Чтобы не ломать голову каким цветом и что подсвечивать можно цвета взять из vs studio или vs code.
     
    Последнее редактирование: 24 май 2026 в 10:00
    GRAFik нравится это.
  4. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    471
    А вот об этом, чуть подробнее можно ? Интуиция мне подсказывает, что это что-то любопытное. Не успеваю за всем следить. :)
    --- Сообщение объединено, 24 май 2026 в 11:15 ---
    Любопытная статья. Может для темы топика и, вообще, на что-нибудь, кому-нибудь сгодится. :)
     
  5. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    Если такая IDE вдруг появится, могу для обучающих примеров сделать многослойный перцептрон который будет распознавать например датасет mnist(у меня есть на delphi 7). И на простом примере показать каким образом разобраться с рекурентностью. От простого к сложному. Там много направлений появляется(например энкодеры). Единственная константа это компилятор от vs с цифр. подписями от microsoft. Остальное - исходники(open source) - примеры/и сама ide. Без всяких улучшений вроде встроенных ллм. ide отдельно, ллм отдельно. Имхо если такое бы было, кому-нибудь сгоди-лось бы.
     
    Последнее редактирование: 24 май 2026 в 11:56
  6. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    471
    Обучение и примеры, по-моему, нужно с чего-то такого начинать, так как времени на всё - точно не хватит. :)
     
    Research нравится это.
  7. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    Open source IDE нужна не для тренировки рук, чтобы full контроль был.
    На первое время можно sublime-text прикрутить, чтобы хедеры протестить.
     
    Последнее редактирование: 24 май 2026 в 12:23
  8. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    471
    Research, по-моему, кто-то из нас двоих что-то явно недопонимает. Скорее всего я. :) Т.е. вы хотите сказать что подключив к Sublime-text хидеры с гитхаба и компилятор CL от Visual Studio - source написанные на C/C++ будут без мата компилятора CL компилироваться? Что-то у меня по этому поводу большие сомнения. Ну дай бог чтобы я ошибался. :)
     
    Последнее редактирование: 24 май 2026 в 14:19
  9. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    GRAFik, подключить компилятор от студии к Sublime-text, рядом в дирректорию положить заголовочные файлы.
    И попытаться собрать оконное/консольное приложение на чистом c, которое будет без мата комплилироваться.

    Типо такого:
    Код (C):
    1.  
    2. #include <stdio.h>
    3.  
    4. int main() {
    5.     printf("Hello, World!\n");
    6.     return 0;
    7. }
    8.  
    Код (C):
    1.  
    2. #include <windows.h>
    3.  
    4. // Обработчик сообщений окна
    5. LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    6.     switch (msg) {
    7.         case WM_CREATE:
    8.             // Создаем кнопку внутри окна
    9.             CreateWindow("BUTTON", "Close", WS_VISIBLE | WS_CHILD,
    10.                 20, 20, 100, 30, hwnd, (HMENU)1, NULL, NULL);
    11.             break;
    12.         case WM_COMMAND:
    13.             if (LOWORD(wParam) == 1) {
    14.                 MessageBox(hwnd, "Hello World!", "", MB_OK);
    15.             }
    16.             break;
    17.         case WM_DESTROY:
    18.             PostQuitMessage(0);
    19.             break;
    20.         default:
    21.             return DefWindowProc(hwnd, msg, wParam, lParam);
    22.     }
    23.     return 0;
    24. }
    25.  
    26. // Главная точка входа
    27. int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR args, int ncmdshow) {
    28.     const char CLASS_NAME[] = "Sample Window Class";
    29.     WNDCLASS wc = {0};
    30.     wc.lpfnWndProc = WindowProcedure;
    31.     wc.hInstance = hInst;
    32.     wc.lpszClassName = CLASS_NAME;
    33.     RegisterClass(&wc);
    34.     // Создаем окно
    35.     HWND hwnd = CreateWindowEx(0, CLASS_NAME, "Hello World", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    36.         CW_USEDEFAULT, CW_USEDEFAULT, 300, 200, NULL, NULL, hInst, NULL);
    37.     // Очередь сообщений
    38.     MSG msg = {0};
    39.     while (GetMessage(&msg, NULL, 0, 0) > 0) {
    40.         TranslateMessage(&msg);
    41.         DispatchMessage(&msg);
    42.     }
    43.     return 0;
    44. }
    45.  
    И чтобы при этом внутри stdio.h или windows.h не было конфликтов, типа не хватает какого-то файла.
     
    Последнее редактирование: 24 май 2026 в 14:50
  10. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    471
    Так вот и я об этом, что каких-нибудь библиотек или ещё чего-нибудь - компилятору от VS будет не хватать. Это ж VS и её компилятор - они найдут до чего докапаться. :) Ну может я и ошибаюсь. Как говорят в народе: "не так страшен чёрт, как его малюют" и "не боги горшки ожигают". :)
     
    Последнее редактирование: 24 май 2026 в 14:52
  11. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    Оказывается у WinAsm'a есть исходники.
    --- Сообщение объединено, 24 май 2026 в 21:59 ---
    Имя 'Гоги' вам о чем нибудь говорит?
     

    Вложения:

    Последнее редактирование: 24 май 2026 в 19:30
  12. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    471
    Research, о...еть (в смысле обалдеть) !!! :) WinAsm на MASM32, вроде, написан, если я ничего не напутал? Неужели будете вникать и разбираться?
     
  13. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    Мне кажется он сначала на си был написан, а потом переведен на масм.
    Мне нужен исходник на си а не асме. Сразу на асме такое делать бессмысленно.
     
  14. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    471
    Research, если не затруднит, конечно. Вы можете попробовать скомпилировать WinAsm? И если соберется, то скинуть мне какой-нибудь самый наипростейший батник. Я такие вещи коллекционирую. С ними можно всякие эксперименты делать. Но если будут с этим какие-нибудь сложности и заморочки, то не надо тратить время. Может где-нибудь ещё что подвернётся.
     
  15. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    Такая же история. Иногда не знаешь как функцию назвать можно глянуть как называется у других.
    Да и вообще такие вещи можно в разных ситуациях использовать.
    Спасибо за такую высокую оценку моих способностей в области масма. Если бы мог бы помог :)
    Я за весь период погромирования всего 2 функции на асме сделал: сравнение строк и сравнение массивов.

    Ито по большей части все написано было aa_dav'ом.
    --- Сообщение объединено, 25 май 2026 в 11:35 ---
    Компиляция асм проектов.
    Код (ASM):
    1. .DATA
    2. szPlus                    DB "+",0
    3. szCRLF                    DB 0dh,0ah,0
    4. szLinkResponseFileName    DB "link.war",0
    5.  
    6. szCompileRCNew            DB "/v",0
    7. szReleaseAssembleNew    DB "/c /coff /Cp /nologo",0
    8. szReleaseLinkNew        DB "/SUBSYSTEM:WINDOWS /RELEASE /VERSION:4.0",0
    9. szReleaseLinkNewConsole    DB "/SUBSYSTEM:CONSOLE /RELEASE /VERSION:4.0",0
    10. szReleaseLinkNewLibrary    DB "-LIB",0
    11.  
    12. szReleaseAssembleNewDOS    DB "/c",0
    13.  
    14. szDebugAssembleNew        DB "/c /coff /Cp /nologo /Fm /Zi /Zd",0        ;Zd=Line number debug info
    15. szDebugLinkNew            DB "/SUBSYSTEM:WINDOWS /DEBUG /VERSION:4.0",0
    16. szDebugLinkNewConsole    DB "/SUBSYSTEM:CONSOLE /DEBUG /VERSION:4.0",0
    17. szDebugLinkNewLibrary    DB "-LIB /DEBUG",0
    18.  
    19. szDebugAssembleNewDOS    DB "/c",0
    20.  
    21.  
    22. .CODE
    23.  
    24. ;Retutns -1 if I must compile
    25. ShallICompile Proc lpFullPathFileName:DWORD, lpExtension:DWORD
    26. Local Buffer[MAX_PATH]:BYTE
    27. Local LastWriteTimeTxt    :FILETIME
    28. Local LastWriteTimeBin    :FILETIME
    29.  
    30.     ;Take source file name-Not filetitle
    31.     ;build a full path name as if it is in the project folder
    32.     ;Remove its extension,add lpExtension to it
    33.     Invoke lstrcpy,ADDR Buffer,ADDR ProjectPath
    34.     Invoke lstrlen,ADDR Buffer                    ;In Buffer we now have project path
    35.     LEA ECX,Buffer
    36.     ADD ECX,EAX
    37.     Invoke GetFileName,lpFullPathFileName,ECX    ;In Buffer we now have Project path+asmfilename.asm
    38.     Invoke RemoveFileExt,ADDR Buffer            ;In Buffer we now have Project path+asmfilename
    39.     Invoke lstrcat,ADDR Buffer,lpExtension        ;In Buffer we now have Project path+asmfilename.extension
    40.    
    41.     ;Bin exists ????
    42.     Invoke CreateFile,ADDR Buffer,0,FILE_SHARE_READ,0,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
    43.     .If EAX!=INVALID_HANDLE_VALUE    ;(=-1)
    44.         PUSH EAX
    45.         LEA ECX,LastWriteTimeBin
    46.         Invoke GetFileTime,EAX, NULL, NULL,ECX
    47.         POP EAX
    48.         Invoke CloseHandle,EAX
    49.        
    50.         ;Source File (plain text) exists???
    51.         Invoke CreateFile,lpFullPathFileName,0,FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
    52.        
    53.         .If EAX!=INVALID_HANDLE_VALUE    ;(=-1)
    54.             PUSH EAX
    55.             LEA ECX,LastWriteTimeTxt
    56.             Invoke GetFileTime,EAX, NULL, NULL,ECX
    57.             POP EAX
    58.             Invoke CloseHandle,EAX
    59.         .Else
    60.             RET
    61.         .EndIf
    62.         Invoke CompareFileTime,ADDR LastWriteTimeBin,ADDR LastWriteTimeTxt
    63.         ;-1    First file time is less than second file time.
    64.         ;0    First file time is equal to second file time.
    65.         ;+1    First file time is greater than second file time.
    66.     .EndIf
    67.     RET
    68. ShallICompile EndP
    69.  
    70. CreatePipeAndExecute Proc Uses EDI lpBuffer:LPSTR
    71. Local sat            :SECURITY_ATTRIBUTES
    72. Local StartupInfo    :STARTUPINFO
    73. Local ProcessInfo    :PROCESS_INFORMATION
    74. Local hRead            :DWORD
    75. Local hWrite        :DWORD
    76. Local BytesRead        :DWORD
    77.  
    78.     MOV EDI,lpBuffer
    79.     ;------------------
    80.     Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,Offset szCr
    81.     Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,EDI
    82.     Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,Offset szCr
    83.     Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,Offset szCr
    84.     Invoke SendMessage,hOut,EM_SCROLLCARET,0,0
    85.    
    86.     MOV sat.nLength,SizeOf SECURITY_ATTRIBUTES
    87.     MOV sat.lpSecurityDescriptor,NULL
    88.     MOV sat.bInheritHandle,TRUE
    89.     Invoke CreatePipe,ADDR hRead,ADDR hWrite,ADDR sat,NULL
    90.     .If EAX==NULL
    91.         ;CreatePipe failed
    92.         Invoke LoadCursor,0,IDC_ARROW
    93.         Invoke SetCursor,EAX
    94.         Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,ADDR szCreatePipeError
    95.         INC NrOfErrors
    96.     .Else
    97.         Invoke RtlZeroMemory,ADDR StartupInfo,SizeOf STARTUPINFO
    98.         MOV StartupInfo.cb,SizeOf STARTUPINFO
    99.        
    100.         MOV EAX,hWrite
    101.         MOV StartupInfo.hStdOutput,EAX
    102.         MOV StartupInfo.hStdError,EAX
    103.        
    104.         MOV StartupInfo.dwFlags,STARTF_USESTDHANDLES+STARTF_USESHOWWINDOW
    105.         MOV StartupInfo.wShowWindow,SW_HIDE
    106.        
    107.         ;Create process
    108.         Invoke CreateProcess,NULL,EDI,NULL,NULL,TRUE,NULL,NULL,NULL,ADDR StartupInfo,ADDR ProcessInfo
    109.         .If EAX==NULL
    110.             ;CreateProcess failed
    111.             Invoke CloseHandle,hRead
    112.             Invoke CloseHandle,hWrite
    113.             Invoke LoadCursor,0,IDC_ARROW
    114.             Invoke SetCursor,EAX
    115.             Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,ADDR szCreateProcessError
    116.             INC NrOfErrors
    117.         .Else
    118.             Invoke CloseHandle,hWrite
    119.             Invoke CloseHandle,ProcessInfo.hProcess
    120.             Invoke CloseHandle,ProcessInfo.hThread
    121.             .While TRUE
    122.                 Invoke PeekNamedPipe,hRead,NULL,0,NULL,NULL,NULL
    123.                 .Break .If !EAX
    124.                 Invoke ReadFile,hRead,EDI,32000,ADDR BytesRead,NULL
    125.                 .If !EAX
    126.                     .Break
    127.                 .Else
    128.                     MOV ECX,EDI
    129.                     ADD ECX,BytesRead
    130.                     MOV BYTE PTR [ECX],0
    131.                     Invoke SendMessage,hOut,EM_REPLACESEL,FALSE,EDI
    132.                 .EndIf
    133.             .EndW
    134.            
    135.             Invoke UpdateWindow,hOut
    136.            
    137.             Invoke CloseHandle,hRead
    138.         .EndIf
    139.        
    140.         Invoke SetFocus,hOut
    141.     .EndIf
    142.     RET
    143. CreatePipeAndExecute EndP
    144.  
    145. RunBatch Proc lpBatchFile:DWORD
    146.     Invoke WinExec,lpBatchFile,SW_SHOWNORMAL
    147.     RET
    148. RunBatch EndP
    149.  
    150. OutputMake Proc Uses EBX ESI nCommand:DWORD, fClear:DWORD
    151. Local fNextItem            :DWORD
    152. Local dwGeneral            :DWORD
    153. Local CounterBuffer[12]    :BYTE
    154.  
    155.     Invoke LoadCursor,0,IDC_WAIT
    156.     Invoke SetCursor,EAX
    157.    
    158.     Invoke SetFocus,hOut
    159.     Invoke SetCurrentDirectory,Offset ProjectPath
    160.  
    161.     Invoke LocalAlloc,LPTR,65536
    162.     MOV ESI,EAX
    163.  
    164.     .If fClear==TRUE
    165.         Invoke SendMessage,hOut,WM_SETTEXT,0,NULL
    166.         Invoke SendMessage,hOut,EM_SCROLLCARET,0,0
    167.     .EndIf
    168.  
    169.     MOV EAX,nCommand
    170.    
    171.     .If EAX==IDM_MAKE_COMPILERESOURCE
    172.         ;/fo Rename .RES file:User must NOT use it
    173.         Invoke GetFirstNextChild, hResourceFilesItem,TVGN_CHILD
    174.         .If EAX
    175.             Invoke GetWindowLong,EAX,0
    176.             MOV EBX,EAX
    177.            
    178.             Invoke ShallICompile,ADDR [EBX].CHILDWINDOWDATA.szFileName,Offset szExtRes
    179.            
    180.             .If EAX==-1
    181.                 Invoke SendMessage,hStatus,SB_SETTEXT,4,Offset szCompilingResources;"Compiling Resources ..."
    182.                
    183.                 Invoke lstrcpy,ESI, Offset BinaryPath
    184.                
    185.                 Invoke lstrcat,ESI, CTEXT("\rc ")
    186.                
    187.                
    188.                 Invoke lstrcat,ESI, Offset CompileRC
    189.                
    190.                 ;Invoke lstrcat,ESI, Offset szSpc
    191.                 Invoke lstrcat,ESI, Offset szSpaceSlashI
    192.                 Invoke lstrcat,ESI,Offset szQuote
    193.                 Invoke lstrcat,ESI, pIncludePath
    194.                 Invoke lstrcat,ESI,Offset szQuote
    195.                 Invoke lstrcat,ESI, Offset szSpc
    196.                 Invoke lstrcat,ESI,Offset szQuote
    197.                
    198.                 Invoke lstrcat,ESI, ADDR [EBX].CHILDWINDOWDATA.szFileName
    199.                 Invoke lstrcat,ESI,Offset szQuote
    200.                 ;CALL GoMake
    201.                 Invoke CreatePipeAndExecute,ESI
    202.                
    203.             ;.Else
    204.             ;    JMP Ex
    205.             .EndIf
    206.         .EndIf
    207.        
    208.        
    209.     .ElseIf EAX==IDM_MAKE_RCTOOBJ
    210.         Invoke GetFirstNextChild, hResourceFilesItem,TVGN_CHILD
    211.         .If EAX
    212.             Invoke GetWindowLong,EAX,0
    213.             MOV EBX,EAX
    214.             Invoke ShallICompile,ADDR CHILDWINDOWDATA.szFileName[EBX],Offset szExtObj
    215.             .If EAX==-1
    216.                 Invoke SendMessage,hStatus,SB_SETTEXT,4,Offset szConvertingResToObj    ;"Converting Res To Obj ..."
    217.                
    218.                 Invoke lstrcpy,ESI, Offset BinaryPath
    219.                 Invoke lstrcat,ESI, CTEXT("\cvtres ")
    220.                 Invoke lstrcat,ESI, Offset RCToObj
    221.                
    222.                 Invoke lstrcat,ESI, Offset szSpc
    223.                
    224.                 Invoke lstrcat,ESI,Offset szQuote
    225.                
    226.                 Invoke lstrcat,ESI, ADDR [EBX].CHILDWINDOWDATA.szFileName
    227.                 Invoke RemoveFileExt,ESI
    228.                 Invoke lstrcat,ESI, Offset szExtRes
    229.                 Invoke lstrcat,ESI,Offset szQuote
    230.                
    231.                 Invoke CreatePipeAndExecute,ESI
    232.             .EndIf
    233.         .EndIf      
    234.     .ElseIf EAX==IDM_MAKE_ASSEMBLE
    235.         ;/Fo"c:\winasm\www.obj"
    236.         ;Notes: First ASM always assembled
    237.         ;        Modules are assembled only if bin is older than source
    238.        
    239.         MOV fNextItem,TVGN_CHILD
    240.         Invoke GetFirstNextChild, hASMFilesItem,fNextItem
    241.        
    242.         .If EAX==0
    243.             JMP Modules
    244.         .EndIf
    245.            
    246.             Invoke GetWindowLong,EAX,0
    247.             MOV EBX, EAX
    248.            
    249.             Invoke SendMessage,hStatus,SB_SETTEXT,4,Offset szAssemblingProject    ;"Assembling Project ..."
    250.            
    251.             AssembleIt:
    252.             Invoke lstrcpy,ESI, Offset BinaryPath
    253.             Invoke lstrcat,ESI, CTEXT("\ML ")
    254.             .If ActiveBuild==0    ;i.e. Release build
    255.                 Invoke lstrcat,ESI, Offset szReleaseAssemble
    256.             .Else
    257.                 Invoke lstrcat,ESI, Offset szDebugAssemble
    258.             .EndIf
    259.             Invoke lstrcat,ESI, Offset szSpaceSlashI
    260.             Invoke lstrcat,ESI,Offset szQuote
    261.             Invoke lstrcat,ESI, pIncludePath
    262.             Invoke lstrcat,ESI,Offset szQuote
    263.             Invoke lstrcat,ESI, Offset szSpc
    264.             Invoke lstrcat,ESI,Offset szQuote
    265.            
    266.             Invoke lstrcat,ESI, ADDR [EBX].CHILDWINDOWDATA.szFileName
    267.             Invoke lstrcat,ESI,Offset szQuote
    268.            
    269.             Invoke CreatePipeAndExecute,ESI
    270.            
    271.             Modules:
    272.             ;-------
    273.             .If fNextItem==TVGN_CHILD
    274.                 MOV EDX,hModulesItem
    275.             .Else
    276.                 NextChild:
    277.                 MOV EDX,[EBX].CHILDWINDOWDATA.hTreeItem
    278.             .EndIf
    279.            
    280.            
    281.             Invoke GetFirstNextChild,EDX,fNextItem
    282.             .If EAX
    283.                 MOV fNextItem,TVGN_NEXT
    284.                 Invoke GetWindowLong,EAX,0
    285.                 MOV EBX, EAX
    286.                 Invoke ShallICompile,ADDR [EBX].CHILDWINDOWDATA.szFileName,Offset szExtObj
    287.                 .If EAX==-1
    288.                     JMP AssembleIt
    289.                 .Else
    290.                     JMP NextChild
    291.                 .EndIf
    292.             .EndIf
    293.         ;.Else
    294.         ;    Invoke SendMessage,hOut,EM_REPLACESEL,FALSE, ADDR szNoASMError
    295.         ;    INC NrOfErrors
    296.         ;.EndIf
    297.        
    298.     .ElseIf EAX==IDM_MAKE_LINK
    299.         ;Invoke GetFirstNextChild, hASMFilesItem,TVGN_CHILD
    300.         ;.If EAX
    301.             Invoke SendMessage,hStatus,SB_SETTEXT,4,Offset szLinking;"Linking ...")
    302.            
    303.             ;Create Response File
    304.             Invoke lstrcpy,ESI,Offset ProjectPath
    305.             Invoke lstrcat,ESI,Offset szLinkResponseFileName
    306.            
    307.             Invoke CreateFile,ESI,GENERIC_READ OR GENERIC_WRITE,FILE_SHARE_READ OR FILE_SHARE_WRITE,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
    308.             .If EAX!=INVALID_HANDLE_VALUE
    309.                 PUSH EDI
    310.                 MOV EDI,EAX
    311.                
    312.                 ;Let's use ESI for something else!!!!
    313.                 ADD ESI,MAX_PATH
    314.                
    315.                 .If ActiveBuild==0    ;i.e. Release build
    316.                     MOV EBX,Offset szReleaseLink
    317.                 .Else
    318.                     MOV EBX,Offset szDebugLink
    319.                 .EndIf
    320.                 .If BYTE PTR [EBX]!=0
    321.                     Invoke lstrcpy,ESI,EBX
    322.                 .EndIf
    323.                
    324.                 .If ProjectType!=6
    325.                     .If bPellesTools
    326.                         Invoke lstrcat,ESI, CTEXT(' "/LIBPATH:')
    327.                     .Else
    328.                         Invoke lstrcat,ESI, CTEXT(' /LIBPATH:"')
    329.                     .EndIf
    330.                    
    331.                     Invoke lstrcat,ESI, Offset LibraryPath
    332.                     Invoke lstrcat,ESI,Offset szQuote
    333.                 .EndIf
    334.                
    335.                 .If ProjectType==1    ;Standard DLL
    336.                     Invoke lstrcat,ESI, CTEXT(" /DLL")
    337.                     Invoke GetFirstNextChild, hDefFilesItem,TVGN_CHILD
    338.                     .If EAX
    339.                         Invoke GetWindowLong,EAX,0
    340.                         PUSH EAX
    341.                        
    342.                         .If bPellesTools
    343.                             Invoke lstrcat,ESI, CTEXT(' "/DEF:')
    344.                         .Else
    345.                             Invoke lstrcat,ESI, CTEXT(' /DEF:"')
    346.                         .EndIf
    347.                        
    348.                         POP EDX
    349.                         Invoke lstrcat,ESI, ADDR [EDX].CHILDWINDOWDATA.szFileName
    350.                         Invoke lstrcat,ESI,Offset szQuote
    351.                     .EndIf
    352.                 .EndIf
    353.                
    354.                 MOV fNextItem,TVGN_CHILD
    355.                 Invoke GetFirstNextChild, hASMFilesItem,fNextItem
    356.                 .If EAX==0
    357.                     JMP LinkModules
    358.                 .EndIf
    359.                
    360.                 Invoke GetWindowLong,EAX,0
    361.                 LEA EBX,[EAX].CHILDWINDOWDATA.szFileName
    362.                 .If BYTE PTR [ESI]!=0
    363.                     .If ProjectType==6
    364.                         Invoke lstrcat,ESI, Offset szPlus
    365.                         Invoke lstrcat,ESI, Offset szCRLF
    366.                     .Else
    367.                         Invoke lstrcat,ESI, Offset szSpc
    368.                     .EndIf
    369.                    
    370.                 .EndIf
    371.                
    372.                 Invoke lstrcat,ESI,Offset szQuote
    373.                
    374.                 Invoke lstrcat,ESI,EBX
    375.                 Invoke RemoveFileExt,ESI
    376.                 Invoke lstrcat,ESI,Offset szExtObj
    377.                 Invoke lstrcat,ESI,Offset szQuote
    378.                
    379.                
    380.                 LinkModules:
    381.                 ;----------
    382.                 MOV EAX,hModulesItem
    383.                
    384.                 NextObj:
    385.                 ;------
    386.                 Invoke GetFirstNextChild,EAX,fNextItem
    387.                 .If EAX
    388.                     MOV fNextItem,TVGN_NEXT
    389.                     Invoke GetWindowLong,EAX,0
    390.                     MOV EBX, EAX
    391.                    
    392.                     .If ProjectType==6
    393.                         Invoke lstrcat,ESI, Offset szPlus
    394.                         Invoke lstrcat,ESI, Offset szCRLF
    395.                     .Else
    396.                         Invoke lstrcat,ESI, Offset szSpc
    397.                     .EndIf
    398.                    
    399.                     Invoke lstrcat,ESI,Offset szQuote
    400.                     Invoke lstrcat,ESI, ADDR [EBX].CHILDWINDOWDATA.szFileName
    401.                     Invoke RemoveFileExt,ESI
    402.                     Invoke lstrcat,ESI,Offset szExtObj
    403.                     Invoke lstrcat,ESI,Offset szQuote
    404.                    
    405.                    
    406.                     MOV EAX,[EBX].CHILDWINDOWDATA.hTreeItem                  
    407.                     JMP NextObj
    408.                 .EndIf
    409.                
    410.                
    411.                 LinkBinary:
    412.                 ;---------
    413.                 MOV dwGeneral,0
    414.                 @@:      
    415.                 INC dwGeneral
    416.                 Invoke BinToDec,dwGeneral,ADDR CounterBuffer
    417.                 Invoke GetPrivateProfileString, Offset szBINFILES,ADDR CounterBuffer,Offset szNULL,Offset tmpBuffer,MAX_PATH+1,Offset FullProjectName
    418.                 .If EAX
    419.                     ;Invoke lstrcat,ESI, Offset szSpc
    420.                     .If ProjectType==6
    421.                         Invoke lstrcat,ESI, Offset szPlus
    422.                         Invoke lstrcat,ESI, Offset szCRLF
    423.                     .Else
    424.                         Invoke lstrcat,ESI, Offset szSpc
    425.                     .EndIf
    426.                    
    427.                     Invoke lstrcat,ESI,Offset szQuote
    428.                    
    429.                     Invoke GetFilePath, Offset tmpBuffer,Offset tmpBuffer2
    430.                     .If tmpBuffer2[0]==0    ;i.e. path not specified in the project file
    431.                         Invoke lstrcpy,Offset tmpBuffer2, Offset ProjectPath
    432.                         Invoke lstrcat,Offset tmpBuffer2, Offset tmpBuffer
    433.                         MOV ECX,Offset tmpBuffer2
    434.                     .Else
    435.                         MOV ECX,Offset tmpBuffer
    436.                     .EndIf
    437.                     Invoke lstrcat, ESI,ECX
    438.                    
    439.                     Invoke lstrcat,ESI,Offset szQuote
    440.                     JMP @B
    441.                 .EndIf
    442.                
    443.                 .If ProjectType==6
    444.                     Invoke lstrcat,ESI,CTEXT(";")    ;I found out that since now I am using a response file ";" causes last character to be inserted twice!!!!
    445.                 .Else
    446.                     Invoke GetFirstNextChild, hResourceFilesItem,TVGN_CHILD
    447.                     .If EAX
    448.                         PUSH EAX
    449.                         Invoke lstrcat,ESI, Offset szSpc
    450.                         Invoke lstrcat,ESI,Offset szQuote
    451.                         POP EAX
    452.                         Invoke GetWindowLong,EAX,0
    453.                         Invoke lstrcat,ESI, ADDR [EAX].CHILDWINDOWDATA.szFileName
    454.                         Invoke RemoveFileExt,ESI
    455.                         .If RCToObj[0]==0
    456.                             Invoke lstrcat,ESI, Offset szExtRes
    457.                         .Else
    458.                             Invoke lstrcat,ESI,Offset szExtObj
    459.                         .EndIf
    460.                         Invoke lstrcat,ESI,Offset szQuote
    461.                     .EndIf
    462.                    
    463.                     .If bPellesTools
    464.                         Invoke lstrcat,ESI, CTEXT(' "/OUT:')
    465.                     .Else
    466.                         Invoke lstrcat,ESI, CTEXT(' /OUT:"')    ;Offset szOUT    ;<--Already has quotes and starting space
    467.                     .EndIf
    468.                    
    469.                     .If ActiveBuild==0                    ;i.e. Release build
    470.                         MOV EDX,Offset szReleaseOutCommand
    471.                     .Else                                ;If ActiveBuild==1    ;i.e. Debug build
    472.                         MOV EDX,Offset szDebugOutCommand
    473.                     .EndIf
    474.                    
    475.                     .If BYTE PTR [EDX]!=0
    476.                         Invoke lstrcat,ESI, EDX
    477.                     .Else
    478.                         MOV EDX, Offset szNULL
    479.                         .If ProjectType==0 || ProjectType==2 || ProjectType==4; || ProjectType==6
    480.                             MOV EDX,Offset szExtExe
    481.                         .ElseIf ProjectType==1    ;dll
    482.                             MOV EDX,Offset szExtDll
    483.                         .ElseIf ProjectType==3    ;Lib
    484.                             MOV EDX,Offset szExtLib
    485.                         .EndIf
    486.                        
    487.                         Invoke GetProjectBinName,Offset tmpBuffer,EDX
    488.                         Invoke lstrcat,ESI,Offset tmpBuffer
    489.                     .EndIf
    490.                     Invoke lstrcat,ESI,Offset szQuote
    491.                    
    492.                 .EndIf
    493.                
    494.                 Invoke lstrlen,ESI
    495.                 MOV EDX,EAX
    496.                 Invoke WriteFile,EDI,ESI,EDX,ADDR dwGeneral,0
    497.                 Invoke CloseHandle,EDI
    498.                
    499.                 ;Let's use ESI for something else!!!!
    500.                 Invoke lstrcpy,ESI, Offset BinaryPath
    501.                 .If ProjectType==6
    502.                     MOV EDX,CTEXT("\Link16")
    503.                    
    504.                 .ElseIf ProjectType==3
    505.                     .If bPellesTools
    506.                         MOV EDX,CTEXT("\Polib")
    507.                     .Else
    508.                         MOV EDX,CTEXT("\Lib")
    509.                     .EndIf
    510.                    
    511.                 .Else
    512.                     .If bPellesTools
    513.                         MOV EDX,CTEXT("\Polink")
    514.                     .Else
    515.                         MOV EDX,CTEXT("\Link")
    516.                     .EndIf
    517.                    
    518.                 .EndIf
    519.                 Invoke lstrcat,ESI, EDX
    520.                 Invoke lstrcat,ESI,CTEXT(' @"')
    521.                 Invoke lstrcat,ESI,Offset ProjectPath
    522.                 Invoke lstrcat,ESI,Offset szLinkResponseFileName
    523.                 Invoke lstrcat,ESI,Offset szQuote
    524.                 Invoke CreatePipeAndExecute,ESI
    525.                
    526.                 ;Delete Response File
    527.                 SUB ESI,MAX_PATH
    528.                 Invoke DeleteFile,ESI
    529.                 POP EDI
    530.             .EndIf
    531.         ;.Else
    532.         ;    Invoke SendMessage,hOut,EM_REPLACESEL,FALSE, ADDR szNoASMError
    533.         ;    INC NrOfErrors
    534.         ;.EndIf
    535.     .EndIf
    536.    
    537.     Invoke LocalFree,ESI
    538.    
    539.     Invoke LoadCursor,0,IDC_ARROW
    540.     Invoke SetCursor,EAX
    541.     RET
    542.    
    543. OutputMake EndP
     
    Последнее редактирование: 25 май 2026 в 07:54
  16. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
     
  17. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    Наткнулся недавно на впечатляющий шутер от первого лица размером всего 96 килобайт.

    rkv9vcdvvjquxbvri4ykfrh2gkc.png

    Есть сорцы: https://github.com/jaromil/kkrieger-werkkzeug3
    --- Сообщение объединено, 29 май 2026 в 13:38 ---
     

    Вложения:

    Последнее редактирование: 29 май 2026 в 11:36
  18. GRAFik

    GRAFik Active Member

    Публикаций:
    0
    Регистрация:
    14 мар 2020
    Сообщения:
    471
    Research, понравился комментарий на ютубе: :)
    --- Сообщение объединено, 29 май 2026 в 14:18 ---
    Для тех кто не в теме: :)


     
  19. Research

    Research Active Member

    Публикаций:
    1
    Регистрация:
    6 янв 2024
    Сообщения:
    538
    Можно было бы сделать игру чуть больше, но при этом упростить код игры.
    У них много кода для генерации структур, сложность архитектуры движка значительно бы уменьшилась.
     
    Последнее редактирование: 29 май 2026 в 14:35