Создать лаунчер на рабочем столе, который открывает терминал

Создать лаунчер на рабочем столе, который открывает терминал

Я хотел бы запустить код BASIC, как вы делали это на старых компьютерах, в Linux. (Я ищу интерпретатор BASIC, который может запускать функции ОС нативно)

Какие у меня есть варианты? (Предпочтительно для Debian и Arch)

решение1

Если вы хотите работать в Linux BASIC изначально, у вас есть несколько пакетов в Debian на выбор:

  • brandy - совместимый BBC Micro BASIC - работает в графическом интерфейсе X11, по-видимому, поддерживает звук и графику;

Brandy — это интерпретатор BBC BASIC V, диалекта BASIC, который компания Acorn Computers поставляла со своими настольными компьютерами, использующими процессор ARM, такими как Archimedes и Risc PC, и который до сих пор используется на этих и совместимых компьютерах.

   BASIC V is a much extended version of BBC BASIC. 

Это был BASIC, использовавшийся в компьютере BBC Micro на базе 6502, который компания Acorn производила в 1980-х годах.

  • bwbasic - byWater BASIC - текстовый режим, заявлен как совместимый с ANSI, имеет расширения, поддерживающие оболочку, и заявлено, что он способен эмулировать/имеет хорошую совместимость с несколькими типами «старых» диалектов BASIC, включая IBM BASICA, Microsoft BASIC и gwBASIC.

bwBASIC можно настроить для эмуляции возможностей, команд и функций, доступных в различных типах интерпретаторов BASIC;

bwBASIC реализует одну функцию, недоступную в предыдущих интерпретаторах BASIC: команда оболочки может быть введена интерактивно в приглашении bwBASIC, и интерпретатор выполнит ее в командной оболочке.
Например, команда "dir *.bas" может быть введена в bwBASIC (в DOS или "ls -l *.bas" в UNIX), и она будет выполнена как из командной строки операционной системы.

Команды оболочки также можно задавать в пронумерованных строках программы bwBASIC, так что bwBASIC можно использовать в качестве языка программирования оболочки. Реализация в bwBASIC команд и функций RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON и ENVIRON$() предлагает дополнительные возможности обработки оболочки.

Чтобы установить их:

sudo apt-get install brandy bwbasic

Что касается моего личного опыта, я предпочитаю именно этот вариант, bwbasicпоскольку он позволяет использовать всю мощь BASIC в текстовой командной строке или скрипте оболочки.

В качестве альтернативы у вас также есть несколько пакетов эмуляции старых компьютеров, которые, очевидно, помимо синтаксиса BASIC реализуют всю среду какого-то старого компьютера, которую вы, возможно, захотите восстановить.

Достаточно интересно, bwbasicчто теоретически это может позволить автоматизировать операции в Unix, например, создание скриптов с использованием языка BASIC. Хотя никогда не пробовал.

решение2

Вы написали вкомментарийкОтвет Фуначто

Под «как старые компьютеры» я подразумеваю то, что они просто есть

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

Скорее, я буду понимать вышесказанное так, что вам нужно что-то, что автоматически запускает интерпретатор BASIC, похожее, но не совсем похожее на то, как ранние микрокомпьютеры (такие как Apple II, Commodore C-64, Zinclair ZX-81 и им подобные) загружали собственный интерпретатор BASIC.

Я думаю, есть три основных способа сделать это:

Создать лаунчер на рабочем столе, который открывает терминал

Это наименее инвазивный метод, поскольку он полностью работает в привычной для вас системе и среде.

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

Создайте отдельную учетную запись пользователя с интерпретатором BASIC в качестве оболочки

Это немного сложнее, чем простой лаунчер рабочего стола, но обеспечивает лучшую изоляцию, так что вы не рискуете испортить свои собственные файлы. Сначала установите интерпретатор BASIC; я буду использовать его bwbasicдля примера, но на самом деле подойдет все, что угодно, если оно работает в терминале. Затем добавьте пользователя и установите его оболочку в качестве интерпретатора bwbasic. Это можно сделать через графический интерфейс, но это зависит от того, какую среду рабочего стола вы используете; переносимый подход заключается в том, чтобы сделать это в терминале с помощью useradd. Это будет похоже на

$ sudo -i
# grep -q "$(type -pP bwbasic)" /etc/shells || echo "$(type -pP bwbasic)" >>/etc/shells
# useradd --home /home/basic --create-home --shell "$(type -pP bwbasic)" basic

Затем вы сможете войти в чистую среду BASIC через sudo:

$ sudo -i -u basic

При желании вы можете создать лаунчер (как указано выше), который выполнит эту команду в терминале.

Введите свой обычный пароль, когда вас попросит sudo. Вы можете отредактировать конфигурацию sudoers, чтобы избежать запроса пароля, если хотите, но учтите, что редактирование sudoers довольно сложно и, что еще важнее, рискованно; вы можете заблокировать себя от учетной записи root, что значительно усложнит восстановление конфигурации.

Использовать интерпретатор BASIC в качестве init

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

Ядро Linux принимает параметр командной строки (да, у ядра Linux есть параметры командной строки; вы можете увидеть текущую загруженную командную строку, прочитав из /proc/cmdline) с именем init, который указывает, какую программу выполнить после завершения инициализации ядра. Вы можете настроить загрузчик (скорее всего, GRUB), чтобы разрешить загрузку записи ядра, которая говорит, что это initдолжно быть /usr/bin/bwbasic(или любой другой установленный вами интерпретатор BASIC).

Чтобы это работало, интерпретатор BASIC, а также все необходимые ему файлы должны быть расположены в корневой ( /) файловой системе. Это связано с тем, что одной из задач init является монтирование всех файловых систем, а поскольку вы предоставляете не-init-программу в качестве init, не-корневые файловые системы не будут смонтированы. (Я полагаю, что еще одной задачей init является перемонтирование корневой файловой системы в режиме чтения-записи, поэтому при таком тривиальном подходе вы не сможете ничего сохранить. Однако, в зависимости от конкретных деталей реализации, вы можете заставить систему выполнить что-то вроде mount -o remount,rw /перемонтирования корневой файловой системы в режиме чтения-записи.) Выбранный вами интерпретатор BASIC также не должен зависеть от чего-либо еще, за что отвечает init, и у вас не будет доступа к каким-либо функциям, обрабатываемым init или какими-либо процессами, порожденными init (например, сетевым функциям или многопользовательской поддержке).

Командная строка ядра, похожая на эту, ro quiet init=/usr/bin/bwbasicвероятно, позволит вам довольно близко увидеть, как это выглядело в старые времена.

решение3

Поскольку все, похоже, предполагают, что под «старыми компьютерами» вы подразумеваете «ПК до IBM», я собираюсь пойти другим путем и предложить ответ, который интерпретирует «старые компьютеры» как «совместимые с IBM компьютеры до Windows 9x».

Если вы имели в виду компьютеры, работающие под управлением версий MS-DOS, включающих QBASIC.EXE, у вас есть три варианта, в зависимости от того, насколько строго вы определяете работу «на Linux»:

  1. Если у вас все еще есть копия QBASIC.EXE, вы можете использовать ееDOSBoxилиДОСЕМУдля запуска в виртуализированной среде DOS. (Оба доступны в репозиториях Debian и просты в настройке. Просто укажите папку для монтирования как C:, перейдите QBASIC.EXEв нее, и все готово.)

    Это обеспечит вам идеальную совместимость со старым исходным кодом, но никакой интеграции с хостовой ОС, за исключением « C:на самом деле это папка, а не образ диска».

    Однако я должен пояснить, что между ними есть компромисс. DOSEMU будет работать в любом терминале, который вы захотите, но не будет поддерживать замысловатые низкоуровневые трюки, которые некоторые вещи QBasic использовали (например, для специализированных графических режимов).толькоДля поддержки этого можно использовать полноценный эмулятор вроде DOSBox... но DOSBox откроет собственное окно, а не будет использовать ваш терминал.

  2. FreeBASICимеетqb диалект/режим, который нацелен на идеальную совместимость сбольшое подмножествоQuickBASIC. (Неподдерживаемые функции в основном низкоуровневые, поскольку QuickBASIC — это 16-битная система реального режима, а FreeBASIC — 32-битная система защищенного режима.)

    FreeBASIC предлагает двоичные файлы Linux, но вы найдете их в своем репозитории пакетов только в том случае, если вы действительно имели в виду «дистрибутивы семейства Debian», а не «Debian», и используете Ubuntu или производную от Ubuntu, например Mint.

  3. Сборки LinuxQB64его даже нет в репозиториях Ubuntu, но он специально нацелен на то, чтобы стать наиболее совместимым потомком QuickBASIC в защищенном режиме и даже предоставляет IDE, которая пытается клонировать IDE QBasic/QuickBasic.

решение4

Просто чтобы предложить альтернативу: существует множество эмуляторов для Linux, которые могутбегатьваши старые компьютеры. Например, если вы загрузите xkegs, вас должна ждать базовая подсказка applesoft. Общение с другими linux-вещями — это упражнение, оставленное читателю (подсказка: технически, я считаю, что вы можете перенаправить вывод в вашем эмулированном apple на эмулированный принтер, который xkegs затем выставит как сетевой сокет, который вы можете использовать, напримернкдля передачи в некоторые другие конвейерные приложения и т. д. Не уверен, есть ли способ пойти другим путем, но ожидаю, что что-то подобное можно будет сделать). Я бы ожидал, что эмуляторы commodore 64 также смогут запускать basic от commodore и т. д.

Связанный контент