Erstellen Sie einen Desktop-Launcher, der ein Terminal öffnet

Erstellen Sie einen Desktop-Launcher, der ein Terminal öffnet

Ich möchte BASIC-Code, wie man ihn auf älteren Computern verwendet, unter Linux ausführen. (Ich suche nach einem BASIC-Interpreter, der Betriebssystemfunktionen nativ ausführen kann.)

Welche Optionen habe ich? (Vorzugsweise für Debian-basierte und Arch-basierte)

Antwort1

Wenn Sie nativ in Linux BASIC arbeiten möchten, stehen Ihnen in Debian mehrere Pakete zur Auswahl:

  • Brandy – kompatibles BBC Micro BASIC – funktioniert mit einer grafischen X11-Oberfläche, unterstützt offenbar Ton und Grafik;

Brandy ist ein Interpreter für BBC BASIC V, den BASIC-Dialekt, den Acorn Computers mit seinen Desktop-Computern mit ARM-Prozessor, wie etwa Archimedes und Risc PC, auslieferte und der auf diesen und kompatiblen Computern noch immer im Einsatz ist.

   BASIC V is a much extended version of BBC BASIC. 

Dies war das BASIC, das auf dem 6502-basierten BBC Micro verwendet wurde, den Acorn in den 1980er Jahren herstellte.

  • bwbasic – byWater BASIC – Textmodus, soll ANSI-kompatibel sein, hat Shell-fähige Erweiterungen und soll mehrere Arten „alter“ BASIC-Dialekte emulieren können bzw. mit ihnen gut kompatibel sein – darunter IBM BASICA, Microsoft BASIC und gwBASIC.

bwBASIC kann so konfiguriert werden, dass es Merkmale, Befehle und Funktionen emuliert, die auf verschiedenen Arten von BASIC-Interpretern verfügbar sind.

bwBASIC implementiert eine Funktion, die in früheren BASIC-Interpretern nicht verfügbar war: Ein Shell-Befehl kann interaktiv in die bwBASIC-Eingabeaufforderung eingegeben werden, und der Interpreter führt ihn unter einer Befehlsshell aus.
Beispielsweise kann der Befehl „dir *.bas“ in bwBASIC eingegeben werden (unter DOS oder „ls -l *.bas“ unter UNIX) und wird wie von der Befehlszeile des Betriebssystems ausgeführt.

Shell-Befehle können in einem bwBASIC-Programm auch in nummerierten Zeilen angegeben werden, sodass bwBASIC als Shell-Programmiersprache verwendet werden kann. Die bwBASIC-Implementierung der Befehle und Funktionen RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON und ENVIRON$() bietet weitere Shell-Verarbeitungsfunktionen.

So installieren Sie sie:

sudo apt-get install brandy bwbasic

Meiner persönlichen Erfahrung nach bevorzuge ich es, bwbasicda es die Leistungsfähigkeit von BASIC in einer Textbefehlszeile oder einem Shell-Skript bietet.

Alternativ stehen Ihnen auch mehrere Emulationspakete für alte Computer zur Verfügung, die neben der BASIC-Syntax natürlich auch die gesamte Umgebung eines alten Computers implementieren, den Sie vielleicht nacherleben möchten.

Interessanterweise bwbasickönnte es theoretisch die Automatisierung von Vorgängen in Unix ermöglichen, z. B. das Erstellen von Skripten mithilfe der Sprache BASIC. Habe es jedoch nie ausprobiert.

Antwort2

Sie schrieben inein KommentarZuFoons AntwortDas

Was ich mit "wie alte Computer" meine, ist, dass es einfach da ist

Andere haben verschiedene Vorschläge für BASIC-Interpreter gemacht, die Sie auf einem Linux-System installieren könnten, also werde ich nicht darauf eingehen. Moderne PCs haben im Allgemeinen keine integrierten BASIC-Interpreter, Sie müssen also etwas booten, das einen installierten BASIC-Interpreter ausführen kann.

Ich verstehe das oben Gesagte eher so, dass Sie etwas möchten, das automatisch einen BASIC-Interpreter startet, ähnlich, aber nicht ganz so, wie frühe Mikrocomputer (wie Apple II, Commodore C-64, Zinclair ZX-81 und ähnliche) in einen nativen BASIC-Interpreter gebootet haben.

Grundsätzlich fallen mir hierfür drei Möglichkeiten ein:

Erstellen Sie einen Desktop-Launcher, der ein Terminal öffnet

Dies ist die am wenigsten invasivste Methode, da sie vollständig innerhalb des Systems und der Umgebung funktioniert, an die Sie gewöhnt sind.

Im Grunde erstellen Sie mit den Mitteln, die Ihre Desktopumgebung bereitstellt, einen Programmstarter und richten ihn so ein, dass er den BASIC-Interpreter Ihrer Wahl in einem Terminal startet. Für einen zusätzlichen Effekt können Sie bestimmte Schriftarten, Farben usw. festlegen, um eine Umgebung aus vergangenen Tagen zu simulieren. Wie Sie dies genau tun, hängt von der verwendeten Desktopumgebung ab, die Sie nicht angegeben haben. Ein guter Anfang ist jedoch, mit der rechten Maustaste auf die Stelle zu klicken, an der Sie aktuell klicken, um Anwendungen zu starten, und nach einer Option zum Erstellen eines neuen Startprogramms zu suchen.

Erstellen Sie ein separates Benutzerkonto mit einem BASIC-Interpreter als Shell

Dies ist etwas komplizierter als ein einfacher Desktop-Launcher, bietet aber eine bessere Isolierung, sodass Sie nicht riskieren, Ihre eigenen Dateien durcheinander zu bringen. Installieren Sie zunächst einen BASIC-Interpreter. Ich verwende bwbasicfür das Beispiel, aber eigentlich ist alles möglich, solange es nativ in einem Terminal ausgeführt wird. Fügen Sie dann einen Benutzer hinzu und stellen Sie dessen Shell als bwbasic-Interpreter ein. Dies kann über die GUI erfolgen, hängt jedoch davon ab, welche Desktop-Umgebung Sie verwenden. Der portable Ansatz besteht darin, dies in einem Terminal mit zu tun useradd. Dies wird etwas Ähnliches sein wie

$ 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

Anschließend sollten Sie über sudo in eine saubere BASIC-Umgebung gelangen können:

$ sudo -i -u basic

Sie können einen Launcher (wie oben) erstellen, der diesen Befehl in einem Terminal ausführt, wenn Sie möchten.

Geben Sie Ihr normales Passwort ein, wenn Sie von sudo dazu aufgefordert werden. Sie können die sudoers-Konfiguration bearbeiten, um die Passwortabfrage bei Bedarf zu vermeiden. Beachten Sie jedoch, dass das Bearbeiten von sudoers etwas kompliziert und vor allem riskant ist. Sie könnten sich selbst aus dem Root-Konto aussperren, was die Reparatur der Konfiguration recht schwierig macht.

Verwenden Sie einen BASIC-Interpreter als Init

Dies ist der invasivste Ansatz, aber Sie kommen der Funktionsweise früher Mikrocomputer am nächsten, indem Sie direkt in einen BASIC-Interpreter booten.Ich empfehle das nicht und halte es für unwahrscheinlich, dass es funktioniertohne nennenswerten Aufwand, füge es aber der Vollständigkeit halber hinzu.

Der Linux-Kernel akzeptiert einen Befehlszeilenparameter (ja, der Linux-Kernel hat Befehlszeilenparameter; Sie können die aktuell gebootete Befehlszeile sehen, indem Sie /proc/cmdline lesen) mit dem Namen init, der angibt, welches Programm ausgeführt werden soll, sobald die Kernel-Initialisierung abgeschlossen ist. Sie können den Bootloader (höchstwahrscheinlich GRUB) so konfigurieren, dass Sie einen Kerneleintrag booten können, der besagt, dass dies der initFall sein soll /usr/bin/bwbasic(oder einen anderen von Ihnen installierten BASIC-Interpreter).

Damit dies funktioniert, müssen sich der BASIC-Interpreter und alle von ihm benötigten Dateien im Root- /Dateisystem () befinden. Dies liegt daran, dass eine der Aufgaben von init darin besteht, alle Dateisysteme zu mounten, und da Sie als init ein Nicht-Init-Programm bereitstellen, werden die Nicht-Root-Dateisysteme nicht gemountet. (Ich glaube, eine weitere Aufgabe von init besteht darin, das Root-Dateisystem im Lese-/Schreibmodus neu zu mounten, sodass Sie mit dem trivialen Ansatz nichts speichern können. Abhängig von den genauen Implementierungsdetails können Sie das System jedoch möglicherweise dazu bringen, etwas wie das mount -o remount,rw /erneute Mounten des Root-Dateisystems im Lese-/Schreibmodus auszuführen.) Der von Ihnen gewählte BASIC-Interpreter darf außerdem nicht von irgendetwas anderem abhängen, für das init verantwortlich ist, und Sie dürfen keinen Zugriff auf Funktionen haben, die von init oder von von init gestarteten Prozessen verwaltet werden (z. B. Netzwerk- oder Mehrbenutzerunterstützung).

Mit einer Kernel-Befehlszeile wie dieser ro quiet init=/usr/bin/bwbasickommen Sie dem Aussehen von früher vermutlich ziemlich nahe.

Antwort3

Da anscheinend alle davon ausgehen, dass Sie mit „ältere Computer“ „PCs vor IBM“ meinen, gehe ich den anderen Weg und biete eine Antwort an, die „ältere Computer“ als „IBM-kompatible Computer vor Windows 9x“ interpretiert.

Wenn Sie Computer mit MS-DOS-Versionen meinten, die enthalten QBASIC.EXE, haben Sie drei Möglichkeiten, je nachdem, wie streng Sie die Ausführung „unter Linux“ definieren:

  1. Wenn Sie noch eine Kopie von haben QBASIC.EXE, können Sie verwendenDOSBoxoderDOSEMUum es in einer virtualisierten DOS-Umgebung auszuführen. (Beide sind in den Debian-Repositories verfügbar und einfach einzurichten. Legen Sie einfach einen Ordner fest, der als gemountet werden soll C:, ziehen Sie QBASIC.EXEes hinein und schon kann es losgehen.)

    Dadurch erhalten Sie perfekte Kompatibilität mit altem Quellcode, aber keine Integration mit dem Host-Betriebssystem über „ C:ist eigentlich ein Ordner und kein Disk-Image“ hinaus.

    Ich sollte jedoch klarstellen, dass es einen Kompromiss zwischen den beiden gibt. DOSEMU läuft in jedem beliebigen Terminal, unterstützt aber nicht die ausgefallenen Low-Level-Tricks, die manche QBasic-Sachen verwenden (z. B. für spezielle Grafikmodi). DienurDies lässt sich am besten durch einen vollständigen Emulator wie DOSBox unterstützen … DOSBox öffnet jedoch ein eigenes Fenster, anstatt Ihr Terminal zu verwenden.

  2. FreeBASIChat einen qbDialekt/Modus, der auf perfekte Kompatibilität mit einemgroße Teilmengevon QuickBASIC. (Die nicht unterstützten Dinge sind größtenteils Low-Level-Sachen, die damit zusammenhängen, dass QuickBASIC ein 16-Bit-Real-Mode-System war, während FreeBASIC ein 32-Bit-Protected-Mode-System ist.)

    FreeBASIC bietet Linux-Binärdateien, Sie finden es jedoch nur in Ihrem Paket-Repository, wenn Sie tatsächlich „Distributionen der Debian-Familie“ und nicht „Debian“ meinten und Ubuntu oder ein Ubuntu-Derivat wie Mint ausführen.

  3. Die Linux-Builds vonQB64sind nicht einmal in den Ubuntu-Repositories, aber es zielt speziell darauf ab, der kompatibelste QuickBASIC-Nachkomme im geschützten Modus zu sein und bietet sogar eine IDE, die versucht, die QBasic/QuickBasic IDE zu klonen.

Antwort4

Um eine Alternative zu nennen: Es gibt mehrere Emulatoren für Linux, dielaufenIhre alten Computer. Wenn Sie beispielsweise xkegs starten, sollte eine Applesoft-Basiseingabeaufforderung auf Sie warten. Die Kommunikation mit anderen Linux-Geräten ist eine Übung, die dem Leser überlassen bleibt (Hinweis: technisch gesehen können Sie die Ausgabe in Ihrem emulierten Apple an den emulierten Drucker umleiten, den xkegs dann als Netzwerk-Socket verfügbar macht, den Sie beispielsweise verwenden könnenkeineum es in andere Pipe-Anwendungen einzuspeisen usw. Ich bin nicht sicher, ob es auch andersherum geht, aber ich gehe davon aus, dass etwas Ähnliches möglich wäre). Ich würde erwarten, dass die Commodore 64-Emulatoren eine ähnliche Möglichkeit hätten, Commodores Basic usw. auszuführen.

verwandte Informationen