ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Новые колеса для "Сказочной колесницы" Две ВМ в проекте (вариант 1)


Новые колеса для "Сказочной колесницы" Две ВМ в проекте (вариант 1)

Сообщений 1 страница 3 из 3

1

Добавил новую ветку, в которой проект преобразован в мультипроект.
Подробного описания пока нет, расскажу в двух словах. В общем проекте-оболочке появилась папка /machines, в которой лежат отдельные
самостоятельные проекты вируальных машин. Сейчас там лежат проекты: evgeny и intel64.
Для создания еще одной виртуальной машины нужно проделать следующие: положить в папку /machines правильно сформированный проект и
добавить в файл main.r две строчки. Вернее одну строчку, но два раза. Пример:

Код:
 
#вставка    "keywords.h"
#вставка    "ru_stdio.h"
#вставка 	<string.h>
#вставка	"ansicode.h"
#вставка 	<unistd.h>
#include 	<stdlib.h>
#include 	<getopt.h>
//Эту строчку нужно добавить для подключения еще одной виртуальной машины
//#вставка	"../machines/ваша_вирт_машина/.src/interface.h"

#вставка	"../machines/evgeny/.src/interface.h"
#вставка	"../machines/intel64/.src/interface.h"
// Задачи проекта

пуст справка(симв *имя_программы)
{
пчф("использование: %s --machine=<nameVM> <filename_byte_code>\n\t-h это сообщение\n\t-m nameVM  имя виртуальной машины\n", имя_программы);
пчф("\t--help это сообщение\n\t--machine=nameVM  имя виртуальной машины\n");
пчф("пример:\n\t%s --machine=kumir moj_bait_kod.bytes\n", имя_программы);
пчф("\t%s -m kumir moj_bait_kod.bytes\n", имя_программы);
вернуть;
}

цел main(цел argc, симв** argv)
{
симв* имя_ВМ = NULL;
симв* имя_файла = NULL;
цел c;
// Если запуск программы без аргументов
если(argc == 1){
	справка(argv[0]);
    вернуть(-1);
}
пока (1){
 статич структура option long_opt[] = {
                    {"help", 0, 0, 'h'},
                    {"machine", 1, 0, 'm'},
                    {0,0,0,0}
                  };
 цел индекс_опции;

 если((c = getopt_long(argc, argv, "m:h:?", long_opt, &индекс_опции)) == -1)
  прервать;
 выбор( c ){
     вариант 'h':
         справка(argv[0]);
         вернуть(-1);

     вариант 'm':
     имя_ВМ = optarg;
         прервать;

     прочее:
         справка(argv[0]);
         вернуть(-1);
  }
}

имя_файла = argv[argc-1];
если(имя_ВМ == 0){
	справка(argv[0]);
    вернуть(-1);
}
//Эту строчку нужно добавить для подключения еще одной виртуальной машины
//#вставка	"../machines/ваша_вирт_машина/.src/interface.h"

#вставка	"../machines/evgeny/.src/interface.h"
#вставка	"../machines/intel64/.src/interface.h"

пчф("Виртуальная машина %s не найдена\n", имя_ВМ);
вернуть(-1);
}	

Что значит правильно сформированный проект?
1. Нельзя изменять структуру папок проекта, так как проект-оболочка будет искать объектные и заголовочные файлы на определенных местах.

2. Основная магия сшивки в общий проект находится в файле interface.rh
В нем находятся три макроса, которые должны иметь уникальные имена. Кроме того часть файла interface.rh вставляется в фунцию main всего проекта,
а значит, что все используемые фунции должны иметь уникальные имена.

3. Все функции, не объявленные, как статические, должны иметь уникальные имена. Все макросы, которые через цепочку включения попадут в файл
main.r проекта-оболочки, тоже должны иметь уникальные имена.

Каждый локальный проект можно запустить на исполнение по отдельности, из папки этого проекта, или из корневой папки мультипроекта запустить программу-оболочку
с определенными ключами командной строки. Пример:

Код:
sk -m evgeny byte_code.byte
sk --machine=evgeny byte_code.byte
sk -h

При запуске без ключей выводится краткое справочное сообщение.

Из-за возможного конфликта имен считаю этот вариант не очень удачным. Будем считать это временной экспериментальной веткой проекта.

Отредактировано Евгений (2023-03-13 19:21:53)

0

2

README.md файл не поправлен. Я не то чтобы придираюсь, а просто собираюсь попробовать собрать теперь эту ветку.

А там про сборку при помощи autotools не сказано.

Что-то не так с мейкфайлом, я думаю:
Установка Сказочной Колесницы в Gentoo

UPD: не так с ним то, что отсутствует расширение .am

Отредактировано Лис (2023-03-12 20:05:25)

0

3

Лис написал(а):

README.md файл не поправлен.

Поправил.

Лис написал(а):

А там про сборку при помощи autotools не сказано.

Попытался дать рекомендации.

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Новые колеса для "Сказочной колесницы" Две ВМ в проекте (вариант 1)