Программирование (общая "болталка")

Всё, что касается программирования на старых языках или для старых систем

Re: Программирование (общая "болталка")

Сообщение ctv » 19 янв 2023, 22:29

Кто что может сказать по этому коду. В планах переписать эмулятор и доделать эмулятор cp/m-86, на "с", плавно переходя с bat.
Код: Выделить всё
using System;
using System.IO;
using System.Text;
using System.Diagnostics;

namespace ConsoleApplication
{
   class Program
   {
      static void Main(string[] args)
      {
        String encodedString = @"QGVjaG8gb2ZmIAoKc2V0ICJ4PUZvbGRlciIKeGNvcHkgL3kgL3YgL2UgLlw
                                 iJXglIlwqIFxcMTAuMC4wLjIwMFxkXAoKZm9yICUleSBpbiAoMjAyLDIwMy
                                 wyMDQsMjA1KWRvICgKICAgICBuZXQgdXNlIFxcMTAuMC4wLiUlfnlcZSAiJ
                                 X4xIiAvdXNlcjoiJX4yIgogICAgIGVjaG9cQ29weWluZyBmaWxlcyB0byBc
                                 XDEwLjAuMC4lJX55XGVcCiAgICAgeGNvcHkgL3kgL3YgL2UgLlwiJXglIlw
                                 qIFxcMTAuMC4wLiUlfnlcZVwKICAgICk=";
                                 
        File.WriteAllBytes(@"z:\batchfilename.bat", Convert.FromBase64String(encodedString));
        System.Diagnostics.Process.Start(@"z:\batchfilename.bat", "\"PassWord1\" \"User1\"");
      }
   }
}

/* bat file decoded:

@echo off

set "x=Folder"
xcopy /y /v /e .\"%x%"\* \\10.0.0.200\d\

for %%y in (202,203,204,205)do (
     net use \\10.0.0.%%~y\e "%~1" /user:"%~2"
     echo\Copying files to \\10.0.0.%%~y\e\
     xcopy /y /v /e .\"%x%"\* \\10.0.0.%%~y\e\
    )


Execute bat:
@"z:\batchfilename.bat", "\"PassWord1\" \"User1\""

Bat argument:
Argument %1 == PassWord1   Argument %2 == User1
*/
MS-DOS 6.22 FOR WINDOWS https://мс-дос.рф
MS-DOS BOOT FROM USB https://мс-дос.рф/MSDBFU/
Эмулятор Windows 3.11 https://мс-дос.рф/emuwin3x.php
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 368
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Re: Программирование (общая "болталка")

Сообщение Vladislav » 23 янв 2023, 13:41

Ну во первых это не си, а, по моему, вообще сишарп (ибо не плюсы точно).
А во вторых, что он делает? (Мне например не понятно)
А в третьих, снова батники, ну зачем их в нормальные ЯВУ сувать?
А эмулятор там и переписывать то нечего, только все удалять и начинать по новой. Как вспомню этот батнический ужас... к тому же с бутафорским шеллом.
Pentium это вам не Celeron!
Но и Celeron никогда Pentium-ом не был

Изображение
Изображение
Изображение
Аватара пользователя
Vladislav
Мастер Даунгрейда
 
Сообщения: 147
Зарегистрирован: 24 ноя 2016, 19:09
Откуда: Поселок городского типа XD
Железо: Socket 370, Celeron 633 (Coppermine), I815E, GF2 MX-400 64Mb, PC133 512Mb

Re: Программирование (общая "болталка")

Сообщение ctv » 25 янв 2023, 16:08

Vladislav писал(а):Ну во первых это не си, а, по моему, вообще сишарп (ибо не плюсы точно).
А во вторых, что он делает? (Мне например не понятно)
А в третьих, снова батники, ну зачем их в нормальные ЯВУ сувать?
А эмулятор там и переписывать то нечего, только все удалять и начинать по новой. Как вспомню этот батнический ужас... к тому же с бутафорским шеллом.


Я от нефиг делать прикрутил к этому ужасу поддержку виртуального диска(zip), теперь хотел это конвертировать на c++, но не нашёл программ для этого.

Эмулятор:
em.zip
(784.77 Кб) Скачиваний: 213


Возможно ли переписать следующий код на bat на язык C++
Код: Выделить всё
@echo off

title Emulator CP/M-86
if not exist %systemroot%\system32\ntvdm.exe goto errnt


if "%dsk%" == "" chcp 1251
if "%dsk%" == "" cls
if not exist "sds" if exist "C:\Temp\test\" RD /s/q "C:\Temp\test\"
if not exist "C:\Temp" md "C:\Temp"
if not exist "sds" md "C:\Temp\test\"
if not exist "sds" set moz=640
if not exist "sds" set fdd=0
if not exist "sds" if exist "%~dp0data\disk.zip" %~dp0data\7z.exe x %~dp0data\disk.zip -o"C:\Temp\test\" -r -y >nul
if not exist "sds" if exist "C:\Temp\test\a\sds" set fdd=1
if not exist "sds" if exist "C:\Temp\test\a\sds" if exist "C:\Temp\test\b\sds" set fdd=2



if "%dsk%" == "" echo  Generic Turbo XT Bios 1987
if "%dsk%" == "" echo     for 8088 or v20 cpu
if "%dsk%" == "" echo        (c)Anonymous
if "%dsk%" == "" echo Columbia Data Products, Inc
if "%dsk%" == "" echo Boot version 1.0
if "%dsk%" == "" echo July 2, 1982
if "%dsk%" == "" "%~dp0data\zero.com"
if "%dsk%" == "" echo CP/M-86 Emulator v2.0 for Windows 32bit
if "%dsk%" == "" echo Copyright (C) 2023, Sementsul Maxim
if "%dsk%" == "" echo API version 1.0 Jim Lopushinsky 1985, 1997
if "%dsk%" == "" "%~dp0data\API.EXE"
if "%dsk%" == "" echo Hardware Supported:
if "%dsk%" == "" echo                    Diskette(s) :  %fdd%
if "%dsk%" == "" echo                    Memory (kb) : %moz%
if "%dsk%" == "" echo                    Controller  : 7z
if not exist "%~dp0data\disk.zip" goto zfd
if "%fdd%" =="0" goto dier
if not exist "sds" %~dp0data\7z.exe x %~dp0data\disk.zip -o"C:\Temp" -r -y >nul
if not exist "sds" cd /d C:\Temp\a
if "%dsk%" == "" set dsk=A
if "%1" == "" goto comd
goto body
:comd
if not exist "sds" %~dp0data\7z.exe x %~dp0data\disk.zip -o"C:\Temp" -r -y >nul

set cpm=
SET /P cpm="%dsk%>"
%0 %cpm%
pause


:body
if "%1" == "ver" goto vrr
if "%1" == "a:" goto da
if "%1" == "b:" goto db
if "%1" == "A:" goto da
if "%1" == "B:" goto db
if "%1" == "dir" if "%2" ==  "a:" goto drsa
if "%1" == "dir" if "%2" ==   "A:" goto drsa
if "%1" == "dir" if "%2" ==   "b:" goto drsb
if "%1" == "dir" if "%2" ==   "B:" goto drsb
if "%1" == "dir" goto drs
if "%1" == "ren" goto rens
if "%1" == "era" goto eras
if "%1" == "type" goto types
if "%1" == "copy" goto cops
if "%1" == "help" goto helps


if exist %1 goto str
if exist %1.cmd goto str

goto err

:str
"%~dp0data\API.EXE" %1 %2 %3 %4
type "%~dp0data\fs.bin" > "%~dp0data\disk.zip"
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\a" >nul
if "%fdd%" =="2" %~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\b" >nul
%0


:vrr
echo CP/M86 EMULATER
echo Copyright (c) 2017, 2023 Sementsul Maxim
echo Copyright (c) 1985, 1997 Jim Lopushinsky
%0

:da
cd  /d C:\Temp\a
set dsk=A
%0


:db
if "%fdd%" =="1" goto dbn
cd  /d C:\Temp\b
set dsk=B
%0

:dbn
Echo Put Disk B in A; ENTER to continue
%0

:err
echo %1?
%0

:drs
if "%dsk%" == "A" "%~dp0\data\ACPD.EXE"
if "%dsk%" == "B" "%~dp0\data\BCPD.EXE"
%0


:rens
RENAME %2 %3
type "%~dp0data\fs.bin" > "%~dp0data\disk.zip"
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\a" >nul
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\b" >nul
%0


:eras
if "%2" == "sds" goto ssr
if "%2" == "SDS" goto ssr
if "%2" == "SdS" goto ssr
if "%2" == "Sds" goto ssr
if "%2" == "SDs" goto ssr
if "%2" == "sDS" goto ssr
if "%2" == "sDs" goto ssr

del %2 /q
type "%~dp0data\fs.bin" > "%~dp0data\disk.zip"
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\a" >nul
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\b" >nul
%0


:types
type %2
type "%~dp0data\fs.bin" > "%~dp0data\disk.zip"
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\a" >nul
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\b" >nul
%0

:cops
if "%dsk%" == "A" copy %2 C:\Temp\b\
if "%dsk%" == "B" copy %2 C:\Temp\a\
type "%~dp0data\fs.bin" > "%~dp0data\disk.zip"
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\a" >nul
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\b" >nul
%0


:helps
echo =================================
echo ver- Версия эмулятора           =
echo =================================
echo = dir- Файлы на диске           =
echo = dir a:                        =
echo = dir b:                        =
echo = dir                           =
echo =================================
echo = ren- Переименовать файл       =
echo = ren fail.txt new fail.txt     =
echo =================================
echo = era- Удалить файл             =
echo = era file.txt                  =
echo =================================
echo = type- Читать файл             =
echo = type file.txt                 =
echo =================================
echo = copy- Копировать файл         =
echo = copy file.txt                 =
echo =================================
echo = help- Эта комманда            =
echo =================================
type "%~dp0data\fs.bin" > "%~dp0data\disk.zip"
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\a" >nul
%~dp0data\7z.exe a -mx9 "%~dp0data\disk.zip" "C:\Temp\b" >nul
%0


:drsa
cd /d C:\Temp\a
"%~dp0\data\ACPD.EXE"
if "%dsk%" == "B" goto db
%0

:drsb
cd /d C:\Temp\b
"%~dp0\data\BCPD.EXE"
if "%dsk%" == "A" goto da
%0

:ssr
echo System file!
%0

:dier
echo ====================================
echo ZIP образ FDD дисков повреждён или =
echo имеет неверную структуру!          =
echo ====================================
"%~dp0data\pause.com"
exit
:errnt
chcp 1251
color 44
cls
echo =================================
echo Не удалось найти NTVDM          =
echo =================================
"%~dp0data\pause.com"
exit

:zfd
echo ======================================
echo Не удалось найти ZIP образ (disk.zip)=
echo ======================================
"%~dp0data\pause.com"
exit
MS-DOS 6.22 FOR WINDOWS https://мс-дос.рф
MS-DOS BOOT FROM USB https://мс-дос.рф/MSDBFU/
Эмулятор Windows 3.11 https://мс-дос.рф/emuwin3x.php
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 368
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Re: Программирование (общая "болталка")

Сообщение archIvarIus3k » 25 янв 2023, 16:36

ctv писал(а):конвертировать на c++, но не нашёл программ для этого.

Только с нуля переписать, ручками, без программ.
archIvarIus3k
Матерый даунгрейдер
 
Сообщения: 70
Зарегистрирован: 03 апр 2022, 22:52

Re: Программирование (общая "болталка")

Сообщение ctv » 25 янв 2023, 19:43

Vladislav писал(а):Ну во первых это не си, а, по моему, вообще сишарп (ибо не плюсы точно).
А во вторых, что он делает? (Мне например не понятно)
А в третьих, снова батники, ну зачем их в нормальные ЯВУ сувать?
А эмулятор там и переписывать то нечего, только все удалять и начинать по новой. Как вспомню этот батнический ужас... к тому же с бутафорским шеллом.

Кстати да, это c#
MS-DOS 6.22 FOR WINDOWS https://мс-дос.рф
MS-DOS BOOT FROM USB https://мс-дос.рф/MSDBFU/
Эмулятор Windows 3.11 https://мс-дос.рф/emuwin3x.php
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 368
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Re: Программирование (общая "болталка")

Сообщение Синчао » 26 янв 2023, 01:05

ctv писал(а):Возможно ли переписать следующий код на bat на язык C++

Можно. Неясны моменты т.к. имена - аргументы (см. в коде).

 Развернуть: Консольное приложение
Код: Выделить всё
/* main.cpp */

#include <stdio.h>
#include <conio.h>
#include <windows.h>

BOOL CheckFileExists(char* fname); /* Функция проверяет файл или папку на существование. */
BOOL appDelete(char* fname); /* Функция удаляет файл или каталог. */
void fatal(char* s); /* Сообщение о фатальной ошибке. */

/* Начало консольной программы. */
int main(int argc, char* argv[])
{
   /* Установить заголовок окна консоли. */
   SetConsoleTitle("Emulator CP/M-86");

   /* Здесь идёт проверка и получение переменной. */
   char tmp[128];
   if(!ExpandEnvironmentStrings("%systemroot%",tmp,sizeof(tmp)))
   fatal("ExpandEnvironmentStrings #1");

   /* Здесь собирается путь и проверяется наличие файла. */
   char ntvdm[MAX_PATH];
   wsprintf(ntvdm,"%s\\system32\\ntvdm.exe",tmp);
   if(!CheckFileExists(ntvdm))
   fatal("OTCyTCTByET NTVDM");

   /* "dsk" - Это мне неизвестно.
   * Можешь сам подставить или поясни!?
   */

   if(!ExpandEnvironmentStrings("%dsk%",tmp,sizeof(tmp)))
   fatal("ExpandEnvironmentStrings #2");

   if(!tmp[0]) /* Если пустая переменная. */
   {
      /* Устанавливается код страницы и очистка окна. */
      system("chcp 1251");
      system("cls");
   }

   char buf[1024];

   /* "sds" - Это мне неизвестно. !?? */

   // if not exist "sds" if exist "C:\Temp\test\" RD /s/q "C:\Temp\test\"

   char* FolderTest="C:\\Temp\\test";
   if(!CheckFileExists("sds"))
   {   
      if(CheckFileExists(FolderTest))
      {
         if(!appDelete(FolderTest))
         {
            wsprintf(buf,"HE CMOG PAPKy yDAJuTb \"%s\"",FolderTest);
            fatal(buf);
         }
      }
   }

   // if not exist "C:\Temp" md "C:\Temp"

   char* FolderTemp="C:\\Temp";
   if(!CheckFileExists(FolderTemp))
   {
      if(!CreateDirectory(FolderTemp,NULL))
      {
         wsprintf(buf,"HE CMOG CO3DATb PAPKy \"%s\"",FolderTemp);
         fatal(buf);
      }
   }

   // if not exist "sds" md "C:\Temp\test\"

   if(!CheckFileExists("sds"))
   {
      if(!CreateDirectory(FolderTest,NULL))
      {
         wsprintf(buf,"HE CMOG CO3DATb PAPKy \"%s\"",FolderTest);
         fatal(buf);
      }
   }

   //if not exist "sds" set moz=640

   system("pause");

   return 0;
}

BOOL CheckFileExists(char* fname)
{
   WIN32_FIND_DATA wfd;
   HANDLE h=FindFirstFile(fname,&wfd);
   if(INVALID_HANDLE_VALUE==h)
   return FALSE;

   FindClose(h);
   return TRUE;
}

BOOL appDelete(char* fname)
{
   if(GetFileAttributes(fname) & FILE_ATTRIBUTE_DIRECTORY)
   {
      // Delete folder
      char From[MAX_PATH];
      lstrcpyn(From,fname,MAX_PATH);
      From[lstrlen(From)+1]=0;
      SHFILEOPSTRUCT shfos;
      memset(&shfos,0,sizeof(SHFILEOPSTRUCT));

      shfos.hwnd=GetFocus();
      shfos.wFunc=FO_DELETE;
      shfos.pFrom=From;
      shfos.fFlags=
      FOF_SILENT |
      FOF_NOERRORUI |
      FOF_NOCONFIRMATION |
      FOF_NOCONFIRMMKDIR |
      FOF_RENAMEONCOLLISION;

      if(!SHFileOperation(&shfos))
      return TRUE;

      return FALSE;
   }

   if(!DeleteFile(fname))
   {
      if(ERROR_FILE_NOT_FOUND!=GetLastError())
      return FALSE;
   }
   return TRUE;
}

void fatal(char* s)
{
   printf("---[ FATAL EPOPKA ]--- %s\n",s);
   system("pause>nul");
   exit(1);
}

По идее ты можешь сделать (дальше) и сам.

Собирать сможешь? Качай VC 6.0 Создаёшь консольное приложение win32 (пустое), текст отсюда копи/пастишь в файл
Main.cpp, в проекте добавь в Workspace / Source. Собрать менюшка в лицо светит, Build All.
Программа будет в папке Release.
Последний раз редактировалось Синчао 26 янв 2023, 01:06, всего редактировалось 1 раз.
Аватара пользователя
Синчао
Новичок
 
Сообщения: 3
Зарегистрирован: 26 янв 2023, 00:32

Re: Программирование (общая "болталка")

Сообщение Vladislav » 26 янв 2023, 04:33

ctv писал(а):теперь хотел это конвертировать на c++, но не нашёл программ для этого.

А где ты видел конвертеры с одного языка в другой? Я вот не знаю таких, ибо это очень труднореализуемо и нормальному программисту совершенно не нужно.

ctv писал(а):Возможно ли переписать следующий код на bat на язык C++

Ой ееееей... мне стало плохо от этого кода, не в обиду, но честно.

Переписать можно, но если переписывать именно так как есть, тогда это будет плохой код не на батниках, а плохой код на плюсах, обосную:
1. В батнике все еще по прежнему используется костыль в виде запуска новой сессии программы после исполнения команды - это НЕ нормально, к тому же в теме про эмулятор я даже высылал улучшенную (забавы ради) версию, где возврат в "шелл" после исполнения программы сделан нормально. Хоть бы тогда уже воспользовался...
2. "if "%dsk%" == "" "%~dp0data\zero.com"" - если нужно просто напечатать перевод строки, так достаточно сделать просто "echo.", echo и точка пишутся вместе и тогда просто выводится пустая строка. Стыдно не знать, коль уж на батниках пишешь.
3. "ZIP образ" - использовать зип архив в качестве "образа"... вот это инновация, никогда такого не видел. Правда наверное потому и не видел, что она очень глупая и костыльная. Для образов есть свои форматы. Я понимаю, что тут просто дергается 7Z, это несложно. Но все таки... по мне так это костылизм.
4. "%~dp0data\pause.com" - религия не позволяет сделать обычный батниковский pause? Если нужно скрыть "нажмите любую клавишу", это делается через "pause > nul".
5. "echo CP/M86 EMULATER" - даа, время идет, а оно по прежнему, емулятЕр.
6. Программы ACPD и BCPD все так же пашут как попало и мусорят на экран...
7. Полноценным эмулятором сие никогда не будет ибо эмулируя только лишь API (чужой прогой) и половины софта по CP/M-86 наверное не запустится. Все, что лезет напрямую к железу, видеопамяти и прочему - сразу отпадает, так что толку маловато...

Понимаешь, если ты думаешь, что все твой софт ругают только потому, что он на батниках - ты не видишь истинной проблемы. Программы написаны плохо. Их можно реализовать гораздо лучше и за эти годы уже можно было научиться из писать хотя бы на уровне начинающего (Junior). Но я изменений не вижу и это расстраивает. Нет никакого смысла переносить плохой код (а точнее плохие алгоритмы) с одного языка на другой если дело именно в самих алгоритмах. Это как подавлять симптомы заместо лечения болезни. Глупо, неэффективно и опасно.
Подумай над этим... а я пожалуй еще раз приложу тот "улучшенный" батник. Ошибок там тоже по моему хватает, у меня не было ни смысла ни желания все это устранять, но самые страшные недоработки были учтены...

shell.zip
(1.31 Кб) Скачиваний: 1112
Pentium это вам не Celeron!
Но и Celeron никогда Pentium-ом не был

Изображение
Изображение
Изображение
Аватара пользователя
Vladislav
Мастер Даунгрейда
 
Сообщения: 147
Зарегистрирован: 24 ноя 2016, 19:09
Откуда: Поселок городского типа XD
Железо: Socket 370, Celeron 633 (Coppermine), I815E, GF2 MX-400 64Mb, PC133 512Mb

Re: Программирование (общая "болталка")

Сообщение ctv » 26 янв 2023, 10:40

Синчао писал(а):
ctv писал(а):Возможно ли переписать следующий код на bat на язык C++

Можно. Неясны моменты т.к. имена - аргументы (см. в коде).

 Развернуть: Консольное приложение
Код: Выделить всё
/* main.cpp */

#include <stdio.h>
#include <conio.h>
#include <windows.h>

BOOL CheckFileExists(char* fname); /* Функция проверяет файл или папку на существование. */
BOOL appDelete(char* fname); /* Функция удаляет файл или каталог. */
void fatal(char* s); /* Сообщение о фатальной ошибке. */

/* Начало консольной программы. */
int main(int argc, char* argv[])
{
   /* Установить заголовок окна консоли. */
   SetConsoleTitle("Emulator CP/M-86");

   /* Здесь идёт проверка и получение переменной. */
   char tmp[128];
   if(!ExpandEnvironmentStrings("%systemroot%",tmp,sizeof(tmp)))
   fatal("ExpandEnvironmentStrings #1");

   /* Здесь собирается путь и проверяется наличие файла. */
   char ntvdm[MAX_PATH];
   wsprintf(ntvdm,"%s\\system32\\ntvdm.exe",tmp);
   if(!CheckFileExists(ntvdm))
   fatal("OTCyTCTByET NTVDM");

   /* "dsk" - Это мне неизвестно.
   * Можешь сам подставить или поясни!?
   */

   if(!ExpandEnvironmentStrings("%dsk%",tmp,sizeof(tmp)))
   fatal("ExpandEnvironmentStrings #2");

   if(!tmp[0]) /* Если пустая переменная. */
   {
      /* Устанавливается код страницы и очистка окна. */
      system("chcp 1251");
      system("cls");
   }

   char buf[1024];

   /* "sds" - Это мне неизвестно. !?? */

   // if not exist "sds" if exist "C:\Temp\test\" RD /s/q "C:\Temp\test\"

   char* FolderTest="C:\\Temp\\test";
   if(!CheckFileExists("sds"))
   {   
      if(CheckFileExists(FolderTest))
      {
         if(!appDelete(FolderTest))
         {
            wsprintf(buf,"HE CMOG PAPKy yDAJuTb \"%s\"",FolderTest);
            fatal(buf);
         }
      }
   }

   // if not exist "C:\Temp" md "C:\Temp"

   char* FolderTemp="C:\\Temp";
   if(!CheckFileExists(FolderTemp))
   {
      if(!CreateDirectory(FolderTemp,NULL))
      {
         wsprintf(buf,"HE CMOG CO3DATb PAPKy \"%s\"",FolderTemp);
         fatal(buf);
      }
   }

   // if not exist "sds" md "C:\Temp\test\"

   if(!CheckFileExists("sds"))
   {
      if(!CreateDirectory(FolderTest,NULL))
      {
         wsprintf(buf,"HE CMOG CO3DATb PAPKy \"%s\"",FolderTest);
         fatal(buf);
      }
   }

   //if not exist "sds" set moz=640

   system("pause");

   return 0;
}

BOOL CheckFileExists(char* fname)
{
   WIN32_FIND_DATA wfd;
   HANDLE h=FindFirstFile(fname,&wfd);
   if(INVALID_HANDLE_VALUE==h)
   return FALSE;

   FindClose(h);
   return TRUE;
}

BOOL appDelete(char* fname)
{
   if(GetFileAttributes(fname) & FILE_ATTRIBUTE_DIRECTORY)
   {
      // Delete folder
      char From[MAX_PATH];
      lstrcpyn(From,fname,MAX_PATH);
      From[lstrlen(From)+1]=0;
      SHFILEOPSTRUCT shfos;
      memset(&shfos,0,sizeof(SHFILEOPSTRUCT));

      shfos.hwnd=GetFocus();
      shfos.wFunc=FO_DELETE;
      shfos.pFrom=From;
      shfos.fFlags=
      FOF_SILENT |
      FOF_NOERRORUI |
      FOF_NOCONFIRMATION |
      FOF_NOCONFIRMMKDIR |
      FOF_RENAMEONCOLLISION;

      if(!SHFileOperation(&shfos))
      return TRUE;

      return FALSE;
   }

   if(!DeleteFile(fname))
   {
      if(ERROR_FILE_NOT_FOUND!=GetLastError())
      return FALSE;
   }
   return TRUE;
}

void fatal(char* s)
{
   printf("---[ FATAL EPOPKA ]--- %s\n",s);
   system("pause>nul");
   exit(1);
}

По идее ты можешь сделать (дальше) и сам.

Собирать сможешь? Качай VC 6.0 Создаёшь консольное приложение win32 (пустое), текст отсюда копи/пастишь в файл
Main.cpp, в проекте добавь в Workspace / Source. Собрать менюшка в лицо светит, Build All.
Программа будет в папке Release.



DSK- это переменная которая хранит букву текущего диска, а так же отвечает за информацию при первом запуске(когда эмулятор только запускается, эта переменная равна нулю, что говорит что нужно вывести начальный экран программы). После вывода экрана идёт проверка переменной, если она равна нулю, нужно перейти в папку, которая служит диском а, после чего присвоить значение переменной "a:"
Последний раз редактировалось ctv 26 янв 2023, 10:45, всего редактировалось 1 раз.
MS-DOS 6.22 FOR WINDOWS https://мс-дос.рф
MS-DOS BOOT FROM USB https://мс-дос.рф/MSDBFU/
Эмулятор Windows 3.11 https://мс-дос.рф/emuwin3x.php
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 368
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Re: Программирование (общая "болталка")

Сообщение Синчао » 26 янв 2023, 11:39

ctv писал(а):DSK- это переменная которая хранит букву текущего диска.

Да. Я и предполагал, что это от какого-то бат-файла или это. В таком случае - эти переменные, проверяй (на наличие) как с проверкой "systemroot" - это api-функцией ExpandEnvironmentStrings(аргумент_Имя_Переменной, аргумент_Буфер_для_получения, аргумент_Длина_Буфера).
Всё просто, нужно лишь время затратить на то чтобы вникнуть. К сожалению - мне не интересно, я не буду продолжать это делать. Действуй. Если что не ясно - подскажем.
Аватара пользователя
Синчао
Новичок
 
Сообщения: 3
Зарегистрирован: 26 янв 2023, 00:32

Re: Программирование (общая "болталка")

Сообщение ctv » 28 янв 2023, 21:17

Начал потихоньку изучать C#
Начальный код интерпритатора:
Код: Выделить всё
using System;
using System.IO;
namespace CPM86
{
    class CPM86
    {
        static void Main()
        {
     
Console.WriteLine("   Generic Turbo XT Bios 1987"); 
Console.WriteLine("       for 8088 or v20 cpu"); 
Console.WriteLine("          (c)Anonymous"); 
Console.WriteLine("   Columbia Data Products, Inc"); 
Console.WriteLine("   Boot version 1.0"); 
Console.WriteLine("   July 2, 1982"); 
Console.WriteLine('\n'); 
Console.WriteLine("   CP/M-86 v1.1 for the columbia Data Products Multi-Personal Computer"); 
Console.WriteLine("   Copyright (C) 1982, Columbia Data Products, Inc"); 
Console.WriteLine("   CDP version 1.7 November 20, 1983"); 
Console.WriteLine('\n');   
Console.WriteLine('\n'); 
Console.WriteLine("   Hardware Configured:"); 
Console.WriteLine("            memory (kb)    : 640"); 
Console.WriteLine("             Controller    :Xebec"); 
Console.WriteLine("    320k floppy disk(s)    :  2"); 
       
Found:
            Console.Write("A>");
            string name = Console.ReadLine();
           
            string path = @"name";

        bool fileExist = File.Exists(path);
        if (fileExist) {
        Console.WriteLine("run");

        }
        else {
            Console.WriteLine(name, "File does not exist‚ {0} ?", name);
           
           
goto Found;

        }
    }
}
}
MS-DOS 6.22 FOR WINDOWS https://мс-дос.рф
MS-DOS BOOT FROM USB https://мс-дос.рф/MSDBFU/
Эмулятор Windows 3.11 https://мс-дос.рф/emuwin3x.php
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 368
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Re: Программирование (общая "болталка")

Сообщение ctv » 17 май 2023, 21:57

Как запустить exe в текущем процессе c++. Нужно запустить стороний exe, чтобы он отображался как процесс дочерней программы.
Я пробовал:
system("program.exe");
winexec("program.exe");
CreateProcess("program.exe").
Чтобы exe отображался как окно текущей программы.
MS-DOS 6.22 FOR WINDOWS https://мс-дос.рф
MS-DOS BOOT FROM USB https://мс-дос.рф/MSDBFU/
Эмулятор Windows 3.11 https://мс-дос.рф/emuwin3x.php
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 368
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Re: Программирование (общая "болталка")

Сообщение ctv » 18 май 2023, 14:07

Я написал одну консольную программу, которая принемает 3 параметра.
prog.exe input\index.php input\icon.png output\file.exe
Мне нужен графический интерфейс, в котором будет возможность выбрать php файл, иконку png и сохранить в exe.

Собствено написать консольную программ я смог, а вот писать графические окна я не умею. Хотя вообще я только начал изучать C++.

Возможно так будет понятнее:

Код: Выделить всё
// RPTEC.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <Windows.h>
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{

    setlocale(LC_ALL,"Russian");

system("title SementsulWeb");

string argv_str = argv[1];
string argv_strw = argv[2];


    string base = argv_str.substr(0, argv_str.find_last_of("\\"));
    string basew = argv_strw.substr(0, argv_strw.find_last_of("\\"));

ofstream fout("temp.bat");
    fout << "type " << argv[1] <<" >>"<< base<<"\\main.php" << endl;
    fout << "type %~dp0body.arc >"<< "temp.zip" << endl;
    fout << "if not exist %SystemDrive%\\tempw\\ md %SystemDrive%\\tempw\\" << endl;


    fout << "if exist %SystemDrive%\\tempw\\content\\ rmdir /s /q %SystemDrive%\\tempw\\content" << endl;
    fout << "if not exist %SystemDrive%\\tempw\\content\\ md %SystemDrive%\\tempw\\content\\" << endl;
   
    fout << "xcopy /s "<< base<<" %SystemDrive%\\tempw\\content" << endl;


fout << "if exist %SystemDrive%\\tempw\\res\\ rmdir /s /q %SystemDrive%\\tempw\\res" << endl;
fout << "if not exist %SystemDrive%\\tempw\\res\\ md %SystemDrive%\\tempw\\res\\" << endl;

fout << "type "<< argv[2]<<" >> %SystemDrive%\\tempw\\res\\icon.png" << endl;


    fout << "%~dp07z a %~dp0temp.zip %SystemDrive%\\tempw\\*" << endl;

    fout << "if exist temp.exe del temp.exe /q" << endl;

   
    fout << "type %~dp0sfx.sys >> temp.exe" << endl;

    fout << "type %~dp0temp.zip >> temp.exe" << endl;
   
    fout << "%~dp0upx.exe %~dp0temp.exe" << endl;


fout << "type %~dp0temp.exe >> " <<argv[3]<< endl;
   
    system("temp.bat");

   

system("pause");
   
MS-DOS 6.22 FOR WINDOWS https://мс-дос.рф
MS-DOS BOOT FROM USB https://мс-дос.рф/MSDBFU/
Эмулятор Windows 3.11 https://мс-дос.рф/emuwin3x.php
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 368
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Re: Программирование (общая "болталка")

Сообщение shchtema » 18 май 2023, 21:00

ctv писал(а):Хотя вообще я только начал изучать C++.

Ну тогда удачи!

P.S. Как же мне нравятся люди, которые "открыты" и спокойно выкладывают свои шедевры программного искусства. ;)
Последний раз редактировалось shchtema 19 май 2023, 08:00, всего редактировалось 1 раз.
С уважением,
Артём (aka shchtema).
Аватара пользователя
shchtema
Мастер Даунгрейда
 
Сообщения: 160
Зарегистрирован: 17 ноя 2022, 18:48
Откуда: Калужская область, г. Малоярославец
Железо: Lenovo Ideapad, Intel Atom, CPU N270, 1.60 ГГц, 1024 МБ ОЗУ, Windows XP Home Edition SP3.

Re: Программирование (общая "болталка")

Сообщение ctv » 24 май 2023, 18:10

Эврика, доделал.
Я делал PHP to EXE конвертор и для него мне нужен был GUI
В итоге получилось вот что(прямая ссылка на скачивание): http://i964126i.beget.tech/download.php?book=portt
MS-DOS 6.22 FOR WINDOWS https://мс-дос.рф
MS-DOS BOOT FROM USB https://мс-дос.рф/MSDBFU/
Эмулятор Windows 3.11 https://мс-дос.рф/emuwin3x.php
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 368
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Re: Программирование (общая "болталка")

Сообщение ctv » 31 май 2023, 17:07

Помогите пожалуйста решить одну проблему, подробнее тут: https://www.cyberforum.ru/cpp/thread310 ... st16922492
MS-DOS 6.22 FOR WINDOWS https://мс-дос.рф
MS-DOS BOOT FROM USB https://мс-дос.рф/MSDBFU/
Эмулятор Windows 3.11 https://мс-дос.рф/emuwin3x.php
Аватара пользователя
ctv
Мастер Даунгрейда
 
Сообщения: 368
Зарегистрирован: 20 июл 2018, 14:31
Откуда: Россия, Владимировская обл, Вязниковский район, д.эдон.
Железо: Pentium3

Пред.След.

Вернуться в Программирование

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

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