Comment exécuter le code BASIC dans un terminal?

20

Je voudrais exécuter du code BASIC, comme vous le faisiez sur des ordinateurs plus anciens, sous Linux. (Je recherche un interrupteur BASIC capable d'exécuter les fonctions du système d'exploitation de manière native)

Quelles options ai-je? (De préférence pour Debian et Arch-based)

DiamondCoderMan
la source
2
Il existe de nombreuses versions (pas vraiment compatibles) de base.
Thomas Dickey
2
@ThomasDickey J'ai mis Debian dans la question, car il a / avait une balise Debian.
Rui F Ribeiro

Réponses:

24

Si vous souhaitez exécuter nativement sous Linux BASIC, vous avez le choix entre plusieurs packages dans Debian:

  • Brandy - compatible BBC Micro BASIC - fonctionne dans une interface graphique X11, prend en charge de manière transparente le son et les graphiques;

Brandy est un interprète de BBC BASIC V, le dialecte de BASIC fourni par Acorn Computers avec leurs gammes d'ordinateurs de bureau qui utilisent le processeur ARM tels que les Archimède et Risc PC, et est toujours utilisé sur ceux-ci et compatibles.

   BASIC V is a much extended version of BBC BASIC. 

C'était le BASIC utilisé sur le BBC Micro 6502 qu'Acorn a fabriqué dans les années 1980.

  • bwbasic - byWater BASIC - mode texte, prétend être compatible ANSI, a des extensions compatibles avec les shells, et prétend être capable d'émuler / avoir une bonne compatibilité avec plusieurs types de "vieux" dialectes BASIC - y compris IBM BASICA, Microsoft BASIC et gwBASIC.

bwBASIC peut être configuré pour émuler des caractéristiques, commandes et fonctions disponibles sur différents types d'interprètes BASIC;

bwBASIC implémente une fonctionnalité non disponible dans les interpréteurs BASIC précédents: une commande shell peut être entrée de manière interactive à l'invite bwBASIC, et l'interpréteur l'exécutera sous un shell de commande.
Par exemple, la commande "dir * .bas" peut être entrée dans bwBASIC (sous DOS, ou "ls -l * .bas" sous UNIX) et elle sera exécutée à partir de la ligne de commande du système d'exploitation.

Les commandes shell peuvent également être données sur des lignes numérotées dans un programme bwBASIC, afin que bwBASIC puisse être utilisé comme langage de programmation shell. L'implémentation par bwBASIC des commandes et fonctions RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON et ENVIRON $ () offre d'autres capacités de traitement de shell.

Pour les installer:

sudo apt-get install brandy bwbasic

Quant à mon expérience personnelle, je préfère bwbasiccar elle permet d'avoir la puissance de BASIC dans une ligne de commande de texte ou un script shell.

Comme alternative, vous avez également plusieurs packages d'émulation d'ordinateurs de l'ancien, qui évidemment, outre la syntaxe BASIC, implémentent tout l'environnement d'un ancien ordinateur que vous voudrez peut-être revivre.

Chose intéressante, bwbasicen théorie, cela pourrait permettre d'automatiser les opérations sous Unix, par exemple la création de scripts à l'aide du langage BASIC. Je ne l'ai jamais essayé.

Rui F Ribeiro
la source
9

Mes systèmes Debian, et probablement la plupart des autres distributions Linux, ont plusieurs choix disponibles directement via le gestionnaire de paquets. Parmi eux:

  • bwbasic:

L'interpréteur BASIC Bywater (bwBASIC) implémente un grand surensemble de la norme ANSI pour BASIC minimal (X3.60-1978) et un sous-ensemble important de la norme ANSI pour BASIC complet (X3.113-1987) en C. Il offre également un shell des installations de programmation comme une extension de BASIC. bwBASIC cherche à être aussi portable que possible.

  • sdlbasic:

sdlBasic est un petit interpréteur BASIC efficace et multiplateforme pour créer des jeux en utilisant la puissance de la bibliothèque SDL. Il a été inspiré par l'ancien et glorieux AMOS.

Page d'accueil (Guide de référence)

Wikipédia

Alex Stragies
la source
8

Puisque tout le monde semble supposer que vous entendez «PC pré-IBM» par «ordinateurs plus anciens», je vais emprunter l'autre voie et offrir une réponse qui interprète «ordinateurs plus anciens» comme «compatibles IBM avant Windows 9x».

Si, vous vouliez dire des ordinateurs exécutant des versions de MS-DOS incluses QBASIC.EXE, vous avez trois options, selon la façon dont vous les définissez strictement "sous Linux":

  1. Si vous avez toujours une copie de QBASIC.EXEcoups de pied, vous pouvez utiliser DOSBox ou DOSEMU pour l'exécuter dans un environnement DOS virtualisé. (Les deux sont disponibles dans les référentiels Debian et sont simples à configurer. Il suffit de définir un dossier à monter C:, déposez QBASIC.EXE-le et vous êtes prêt à partir.)

    Cela vous donnera une parfaite compatibilité avec l'ancien code source, mais aucune intégration avec le système d'exploitation hôte au-delà " C:n'est en fait un dossier, plutôt qu'une image disque".

    Je dois toutefois préciser qu'il y a un compromis entre les deux. DOSEMU s'exécutera dans le terminal de votre choix, mais ne prendra pas en charge les astuces de bas niveau sophistiquées utilisées par certains éléments QBasic (par exemple, pour les modes graphiques spécialisés). La seule façon de prendre en charge un émulateur complet comme DOSBox ... mais DOSBox affichera sa propre fenêtre plutôt que d'utiliser votre terminal.

  2. FreeBASIC a un qbdialecte / mode qui vise une parfaite compatibilité avec un large sous - ensemble de QuickBASIC. (Les éléments non pris en charge sont principalement des éléments de bas niveau liés au fait que QuickBASIC était un système en mode réel 16 bits tandis que FreeBASIC est un système en mode protégé 32 bits.)

    FreeBASIC propose des binaires Linux, mais vous ne les trouverez dans votre référentiel de paquets que si vous vouliez réellement dire "distributions de la famille Debian" plutôt que "Debian" et exécutez Ubuntu ou un dérivé d'Ubuntu comme Mint.

  3. Les versions Linux de QB64 ne sont même pas dans les référentiels Ubuntu, mais il vise spécifiquement à être le descendant QuickBASIC en mode protégé le plus compatible et fournit même un IDE qui tente de cloner l'IDE QBasic / QuickBasic.

ssokolow
la source
8

Vous avez écrit dans un commentaire à la réponse de Foon que

Ce que je veux dire par "comme les vieux ordinateurs" c'est que c'est juste là

D'autres ont fourni plusieurs suggestions différentes d'interprètes BASIC que vous pourriez installer sur un système Linux, donc je ne vais pas y aller. Les PC modernes ne sont généralement pas livrés avec des interprètes BASIC intégrés, vous êtes donc bloqué en train de démarrer quelque chose qui peut exécuter un interpréteur BASIC installé.

Au lieu de cela, je prendrai ce qui précède pour signifier que vous voulez quelque chose qui démarre automatiquement un interpréteur BASIC, similaire mais pas tout à fait comme les premiers micro-ordinateurs (tels que l'Apple II, le Commodore C-64, le Zinclair ZX-81 et leurs semblables) ) démarré dans un interpréteur BASIC natif.

Il y a essentiellement trois façons de le faire auxquelles je peux penser:

Créer un lanceur de bureau qui ouvre un terminal

C'est le moins invasif, car il fonctionne pleinement dans le système et l'environnement auxquels vous êtes habitué.

Fondamentalement, par tous les moyens fournis par votre environnement de bureau, vous créez un lanceur de programme et le configurez pour lancer l'interpréteur BASIC de votre choix dans un terminal. Pour un effet supplémentaire, vous pouvez définir des polices, des couleurs, etc. spécifiques pour simuler un environnement d'antan. La façon exacte de procéder dépend de l'environnement de bureau que vous utilisez, que vous n'avez pas spécifié, mais un clic droit sur l'endroit où vous cliquez actuellement pour lancer des applications et la recherche d'un choix pour créer un nouveau lanceur sera un bon début. .

Créez un compte utilisateur séparé avec un interpréteur BASIC comme shell

C'est un peu plus compliqué qu'un simple lanceur de bureau, mais les fournisseurs offrent une meilleure isolation afin de ne pas risquer de gâcher vos propres fichiers. Tout d'abord, installez un interpréteur BASIC; Je vais utiliser bwbasicl'exemple, mais tout va vraiment, tant qu'il s'exécute en mode natif dans un terminal. Ajoutez ensuite un utilisateur et définissez son shell comme étant l'interpréteur bwbasic. Cela peut être fait via l'interface graphique, mais cela dépend de l'environnement de bureau que vous utilisez; l'approche portable est de le faire dans un terminal utilisant useradd. Ce sera quelque chose de similaire à

$ 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

Ensuite, vous devriez pouvoir entrer dans un environnement BASIC propre via sudo:

$ sudo -i -u basic

Vous pouvez créer un lanceur (comme ci-dessus) qui exécute cette commande dans un terminal, si vous le souhaitez.

Donnez votre mot de passe normal lorsque vous êtes invité par sudo. Vous pouvez modifier la configuration des sudoers pour éviter l'invite de mot de passe si vous le souhaitez, mais sachez que la modification des sudoers est quelque peu compliquée et encore plus risquée; vous pouvez vous verrouiller hors du compte root, ce qui rend la réparation de la configuration assez difficile.

Utilisez un interpréteur BASIC comme init

C'est l'approche la plus invasive, mais elle vous rapproche également le plus du fonctionnement des premiers micro-ordinateurs, en démarrant directement dans un interpréteur BASIC. Je ne le recommande pas et je considérerais qu'il est peu probable qu'il fonctionne sans travail important, mais je l'inclus pour être complet.

Le noyau Linux accepte un paramètre de ligne de commande (oui, le noyau Linux a des paramètres de ligne de commande; vous pouvez voir la ligne de commande actuellement démarrée en lisant dans / proc / cmdline) nommé init, qui spécifie le programme à exécuter une fois l'initialisation du noyau terminée. Vous pouvez configurer le chargeur de démarrage (probablement GRUB) pour vous permettre de démarrer une entrée de noyau qui indique que cela initdevrait être /usr/bin/bwbasic(ou tout autre interpréteur BASIC que vous avez installé).

Pour que cela fonctionne, l'interpréteur BASIC, ainsi que tous les fichiers dont il a besoin, doivent être situés sur le /système de fichiers root ( ). En effet, l'une des tâches d'init consiste à monter tous les systèmes de fichiers et parce que vous fournissez un programme non init en tant qu'init, les systèmes de fichiers non root n'auront pas été montés. (Je crois qu'une autre tâche d'init est de remonter le système de fichiers racine en mode lecture-écriture, donc par l'approche triviale vous ne pourrez rien enregistrer. Vous pourriez cependant, en fonction des détails d'implémentation, pouvoir demander au système d'exécuter quelque chose commemount -o remount,rw / pour remonter le système de fichiers racine en lecture-écriture.) L'interpréteur BASIC que vous avez choisi ne doit pas non plus dépendre de quoi que ce soit dont init est responsable, et vous n'aurez accès à aucune installation gérée par init ou à aucun processus engendré par init (par exemple , prise en charge réseau ou multi-utilisateurs).

Une ligne de commande du noyau de quelque chose comme ça ro quiet init=/usr/bin/bwbasicvous rapprochera probablement de ce à quoi il ressemblait autrefois.

un CVn
la source
Votre utilisation de sudo echone fait pas ce que vous voulez dire et vous risquez d'en rencontrer de -bash: /etc/shells: Permission deniedtoute façon car la >>redirection est configurée par bash avant que le reste de la commande ne soit évalué. Il est probablement préférable d'utiliser à la type -P bwbasic | sudo tee -a /etc/shellsplace. Voir " Permissions - Comment insérer du texte dans un fichier appartenant à root en utilisant sudo? - Unix & Linux Stack Exchange
shalomb
@shalomb Bon point, merci de l'avoir mentionné. J'ai corrigé cela, mais d'une manière quelque peu différente.
un CVn le
1
@ MichaelKjörling Une alternative moins drastique à l'utilisation d'un interpréteur BASIC comme le initserait de configurer le système d'initialisation à utiliser à la bwbasicplace agettyet de ne pas démarrer un gestionnaire d'affichage X11. (Pour ceux qui ne savent pas de quoi je parle, le noyau fournit diverses "consoles virtuelles" accessibles via Ctrl + Alt + F1 via Ctrl + Alt + F12 et le système init, par défaut, démarre agettyde 1 à 6 et un gestionnaire d'affichage X11 (qui fournit une boîte de dialogue de connexion) sur 7. Avant Upstart et systemd, cela était contrôlé via /etc/inittab.) gettyet ses descendants gèrent les invites de connexion à la console.
ssokolow
@ssokolow Bonne idée pour être complet, mais à ce stade, vous n'avez qu'une longueur d'avance sur un compte utilisateur dédié avec un shell bwbasic, donc je ne pense pas que cela ajoute vraiment beaucoup en termes de variété globale.
un CVn du
4

Juste pour jeter une alternative: il existe plusieurs émulateurs pour Linux qui peuvent exécuter vos anciens ordinateurs. Par exemple, avec xkegs, si vous le démarrez, vous devriez avoir une invite de base applesoft qui vous attend. Communiquer avec d'autres trucs linux est un exercice laissé au lecteur (indice: techniquement, je crois que vous pouvez rediriger la sortie de votre pomme émulée vers l'imprimante émulée, que xkegs exposera ensuite comme une prise réseau que vous pouvez utiliser, par exemple, nc pour alimenter certaines autres applications, etc. Je ne sais pas s'il y a moyen d'aller dans l'autre sens, mais attendez-vous à ce que quelque chose de similaire puisse être fait). Je m'attendrais à ce que les émulateurs du commodore 64 aient de la même manière un moyen d'exécuter le basic du commodore, etc.

Foon
la source
Oui, il existe de nombreux émulateurs facilement installables dans Debian, mais kegsne semble pas être l'un d'eux (aucun apt-cache searchrésultat). Et pour certains / la plupart des émulateurs, vous aurez probablement besoin d'obtenir une ROM originale quelque part.
Alex Stragies
Vous voudrez peut-être également modifier votre réponse pour faire référence à un émulateur, qui peut être exécuté dans un terminal (OP a modifié Q dans le passé)
Alex Stragies
Ce que je veux dire par «comme les vieux ordinateurs», c'est que c'est juste là
DiamondCoderMan
1
@DiamondCoderMan Vous pouvez configurer un compte utilisateur qui utilise quelque chose comme bwbasic, brandy ou sdlbasic comme shell, au lieu de bash. Sous Linux, qui est probablement le plus proche , vous pouvez pratiquement arriver à un système qui fonctionne comme de vieux micro - ordinateurs dans un interpréteur Booted BASIC. Vous pouvez également passer quelque chose comme init=/usr/bin/sdlbasicau noyau Linux, qui, s'il fonctionne , vous rapprochera beaucoup plus, mais cela peut ou peut ne pas fonctionner.
un CVn du
1

Il existe de nombreuses alternatives. Ma suggestion est similaire à la réponse de ssokolow. Si vous voulez un BASIC "moderne" mais avec une syntaxe similaire aux anciens interprètes BASIC, vous devriez essayer BaCon . C'est un transpilateur BASIC qui génère du code natif. Le projet a un très bon manuel, beaucoup de bibliothèques et d'exemples, et même un IDE écrit en BaCon.

entrez la description de l'image ici

Rufo El Magufo
la source
Mais ce n'est pas pour le terminal
DiamondCoderMan
Le transpilateur fonctionne dans le terminal. Il est petit et utilise un compilateur C pour construire l'exécutable. L'IDE n'était qu'un exemple de la puissance du projet.
Rufo El Magufo
-2

Vous pouvez exécuter un C64 dans votre navigateur et utiliser BASIC de cette façon.

http://codeazur.com.br/stuff/fc64_final/

Soyez conscient que la disposition du clavier est différente, c'est- Shift-2à- dire pour les citations.

http://jilltxt.net/wp-content/uploads/C64-keyboard-layout.png

Applesoft BASIC si vous préférez - http://calormen.com/jsbasic/

Il existe des émulateurs d'autres machines en ligne,
mais beaucoup d'entre eux vont directement au programme que vous chargez,
sans émuler l'entrée de clavier initiale requise pour y arriver.

Doyousketch2
la source
1
Comment est-ce "dans un terminal" si vous l'exécutez dans un émulateur de navigateur Web basé sur javascript?
Wyatt8740
3
La partie "dans un terminal" est dans le titre de la question
roaima
1
@ Doyousketch2 Regardez le titre un peu plus attentivement. i.imgur.com/jDBZVEO.png
Wyatt8740
1
C'était même dans le premier titre de la révision, qui disait Comment exécuter le code BASIC dans un terminal BASH?
un CVn du
2
S'il s'agit d'un logiciel destiné à un C64 ou à un autre système 8 bits, émuler une machine entière est en effet la meilleure idée - très peu de programmes de base non triviaux de cette époque prétendent même être indépendants du matériel du tout!
rackandboneman