Como posso executar o código BASIC em um terminal?

20

Eu gostaria de executar o código BASIC, como você costumava fazer em computadores mais antigos, no Linux. (Estou procurando um Interruptor BASIC que possa executar funções do SO nativamente)

Que opções eu tenho? (Preferencialmente para Debian e Arch)

DiamondCoderMan
fonte
2
Existem muitas versões (não realmente compatíveis) do basic.
Thomas Dickey
2
@ThomasDickey Coloquei o Debian em questão, pois ele possui / possui um tag Debian.
Rui F Ribeiro

Respostas:

24

Se você deseja executar nativamente no Linux BASIC, você tem vários pacotes no Debian para escolher:

  • o BBC Micro BASIC compatível com brandy - funciona em uma interface gráfica X11, aparentemente suporta som e gráficos;

Brandy é intérprete do BBC BASIC V, o dialeto do BASIC que a Acorn Computers forneceu com seus intervalos de computadores de mesa que usam o processador ARM, como o PC Archimedes e Risc, e ainda está em uso nesses e compatíveis.

   BASIC V is a much extended version of BBC BASIC. 

Este foi o BASIC usado na BBC Micro 6502, que a Acorn produziu durante os anos 80.

  • O modo de texto bwbasic - byWater BASIC - afirma ser compatível com ANSI, possui extensões com reconhecimento de shell e afirma ser capaz de emular / ter boa compatibilidade com vários tipos de dialetos BASIC "antigos" - incluindo IBM BASICA, Microsoft BASIC e gwBASIC.

O bwBASIC pode ser configurado para emular recursos, comandos e funções disponíveis em diferentes tipos de intérpretes BASIC;

O bwBASIC implementa um recurso não disponível nos intérpretes anteriores do BASIC: um comando do shell pode ser inserido interativamente no prompt do bwBASIC, e o intérprete o executará em um shell de comando.
Por exemplo, o comando "dir * .bas" pode ser inserido no bwBASIC (no DOS ou "ls -l * .bas" no UNIX) e será executado a partir da linha de comando do sistema operacional.

Os comandos do shell também podem ser dados em linhas numeradas em um programa bwBASIC, para que o bwBASIC possa ser usado como uma linguagem de programação do shell. A implementação do bwBASIC dos comandos e funções RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON e ENVIRON $ () oferece recursos adicionais de processamento de shell.

Para instalá-los:

sudo apt-get install brandy bwbasic

Quanto à minha experiência pessoal, prefiro bwbasic, pois permite ter o poder do BASIC em uma linha de comando de texto ou script de shell.

Como alternativa, você também tem vários pacotes de emulação de computadores antigos, que obviamente além da sintaxe BASIC implementam todo o ambiente de algum computador antigo que você pode querer reviver.

Curiosamente, bwbasicem teoria, poderia permitir a automação de operações no Unix, por exemplo, a criação de scripts usando a linguagem BASIC. Nunca tentei embora.

Rui F Ribeiro
fonte
9

Meus sistemas Debian, e provavelmente a maioria das outras distribuições Linux, têm várias opções disponíveis diretamente através do gerenciador de pacotes. Entre eles:

  • bwbasic:

O Bywater BASIC Interpreter (bwBASIC) implementa um grande superconjunto do padrão ANSI para o BASIC mínimo (X3.60-1978) e um subconjunto significativo do padrão ANSI para o BASIC completo (X3.113-1987) em C. Ele também oferece shell instalações de programação como uma extensão do BASIC. O bwBASIC procura ser o mais portátil possível.

  • sdlbasic:

O sdlBasic é um intérprete BASIC pequeno, eficiente e multiplataforma para criar jogos usando o poder da biblioteca SDL. Foi inspirado no antigo e glorioso AMOS.

Página inicial (Guia de referência)

Wikipedia

Alex Stragies
fonte
8

Como todo mundo parece estar assumindo que você quer dizer "PC pré-IBM" por "computadores mais antigos", vou seguir a outra rota e oferecer uma resposta que interprete "computadores mais antigos" como "compatíveis com a IBM antes do Windows 9x".

Se você quis dizer computadores com versões do MS-DOS incluídas QBASIC.EXE, você tem três opções, dependendo de quão estritamente você as define "no Linux":

  1. Se você ainda tem uma cópia do QBASIC.EXEchute, use o DOSBox ou o DOSEMU para executá-lo em um ambiente DOS virtualizado. (Ambos estão disponíveis nos repositórios do Debian e são simples de configurar. Basta definir uma pasta para ser montada como C:, solte QBASIC.EXEnela, e você estará pronto .)

    Isso fornecerá perfeita compatibilidade com o código-fonte antigo, mas nenhuma integração com o sistema operacional host além de " C:é realmente uma pasta, e não uma imagem de disco".

    Devo esclarecer, no entanto, que há uma troca entre os dois. O DOSEMU será executado em qualquer terminal que você desejar, mas não suportará os truques sofisticados de baixo nível que algumas coisas QBasic usadas (por exemplo, para modos gráficos especializados). A única maneira de suportar isso é um emulador completo como o DOSBox ... mas o DOSBox abrirá sua própria janela em vez de usar o seu terminal.

  2. O FreeBASIC possui um qbdialeto / modo que visa a perfeita compatibilidade com um grande subconjunto do QuickBASIC. (O material não suportado é principalmente de baixo nível relacionado ao fato de o QuickBASIC ser um sistema em modo real de 16 bits, enquanto o FreeBASIC é um sistema em modo protegido de 32 bits.)

    O FreeBASIC oferece binários Linux, mas você o encontrará apenas no repositório de pacotes se você realmente quis dizer "distros da família Debian" em vez de "Debian" e estiver executando o Ubuntu ou um derivado do Ubuntu como o Mint.

  3. As versões do QB64 para Linux nem estão nos repositórios do Ubuntu, mas visa especificamente ser o descendente QuickBASIC em modo protegido mais compatível e ainda fornece um IDE que tenta clonar o IDE QBasic / QuickBasic.

ssokolow
fonte
8

Você escreveu em um comentário à resposta de Foon que

O que quero dizer com "como computadores antigos" é que está lá

Outros forneceram várias sugestões diferentes para intérpretes do BASIC que você pode instalar em um sistema Linux, por isso não vou lá. Os PCs modernos geralmente não vêm com intérpretes BASIC embutidos, portanto, você está travando a inicialização de algo que pode executar um intérprete BASIC instalado.

Em vez disso, entendo o que foi dito acima, para que você queira algo que inicie um intérprete BASIC automaticamente, semelhante, mas não muito parecido com o quanto os microcomputadores iniciais (como Apple II, Commodore C-64, Zinclair ZX-81 e outros). ) inicializado em um intérprete BASIC nativo.

Existem basicamente três maneiras de fazer isso em que consigo pensar:

Crie um iniciador de área de trabalho que abra um terminal

Isso é o menos invasivo, porque funciona totalmente no sistema e no ambiente em que você está acostumado.

Basicamente, por qualquer meio que o ambiente da área de trabalho fornecer, você cria um iniciador de programas e o configura para iniciar o intérprete BASIC de sua escolha em um terminal. Para um efeito extra, você pode definir fontes, cores etc. específicas para simular um ambiente de dias passados. Exatamente como você faria isso depende do ambiente de área de trabalho que você está usando, que você não especificou, mas clicar com o botão direito do mouse no local em que você está atualmente clicando para iniciar aplicativos e procurar uma opção para criar um novo iniciador será um bom começo .

Crie uma conta de usuário separada com um intérprete BASIC como o shell

Isso é um pouco mais envolvente do que um simples iniciador de área de trabalho, mas fornece melhor isolamento para que você não corra o risco de estragar seus próprios arquivos. Primeiro, instale um intérprete BASIC; Vou usar bwbasiccomo exemplo, mas vale tudo, na verdade, desde que seja executado nativamente em um terminal. Em seguida, adicione um usuário e defina seu shell como o intérprete bwbasic. Isso pode ser feito através da GUI, mas isso depende de qual ambiente de área de trabalho você estiver usando; a abordagem portátil é fazê-lo em um terminal usando useradd. Isso será algo semelhante a

$ 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

Em seguida, você poderá entrar em um ambiente BASIC limpo através do sudo:

$ sudo -i -u basic

Você pode criar um iniciador (como acima) que execute esse comando em um terminal, se desejar.

Dê sua senha normal quando solicitado pelo sudo. Você pode editar a configuração dos sudoers para evitar o prompt da senha, se desejar, mas lembre-se de que a edição de sudoers é um pouco complicada e, mais ainda, arriscada; você pode bloquear-se da conta root, dificultando o reparo da configuração.

Use um intérprete BASIC como init

Essa é a abordagem mais invasiva, mas também o aproxima da forma como os primeiros microcomputadores funcionavam, inicializando diretamente em um intérprete BASIC. Eu não recomendo isso e consideraria improvável que funcione sem um trabalho significativo, mas estou incluindo-o por completo.

O kernel do Linux aceita um parâmetro de linha de comando (sim, o kernel do Linux possui parâmetros de linha de comando; você pode ver a linha de comando atualmente inicializada lendo / proc / cmdline) nomeada init, que especifica qual programa executar quando a inicialização do kernel estiver concluída. Você pode configurar o carregador de inicialização (provavelmente o GRUB) para permitir a inicialização de uma entrada do kernel que diz que initdeve ser /usr/bin/bwbasic(ou qualquer outro interpretador BASIC que você instalou).

Para que isso funcione, o intérprete BASIC, bem como todos os arquivos que ele requer, deve estar localizado no /sistema de arquivos raiz ( ). Isso ocorre porque uma das tarefas do init é montar todos os sistemas de arquivos e como você está fornecendo um programa não-init como init, os sistemas de arquivos não-raiz não foram montados. (Acredito que outra tarefa do init é remontar o sistema de arquivos raiz no modo de leitura e gravação, portanto, pela abordagem trivial, você não poderá salvar nada. No entanto, dependendo dos detalhes exatos da implementação, você poderá tem o sistema executar algo comomount -o remount,rw / remontar a leitura / gravação do sistema de arquivos raiz.) O intérprete BASIC escolhido também não deve depender de mais nada pelo qual o init seja responsável, e você não terá acesso a nenhum recurso tratado pelo init ou a qualquer processo gerado pelo init (por exemplo, , rede ou suporte multiusuário).

Uma linha de comando do kernel de algo como ro quiet init=/usr/bin/bwbasicprovavelmente o levará muito perto de como era antigamente.

um CVn
fonte
Seu uso de sudo echonão faz o que você quer dizer e é provável que você encontre um de -bash: /etc/shells: Permission deniedqualquer maneira, já que o >>redirecionamento é configurado pelo bash antes que o restante do comando seja avaliado. Provavelmente é melhor usá-lo type -P bwbasic | sudo tee -a /etc/shells. Veja " permissões - Como inserir texto em um arquivo de propriedade de raiz usando o sudo? - Unix e Linux Stack Exchange
shalomb
@shalomb Bom ponto, obrigado por mencionar. Eu consertei isso, mas de uma maneira um pouco diferente.
um CVn
1
@ MichaelKjörling Uma alternativa menos drástica ao uso de um intérprete BASIC, pois initseria configurar o sistema init para usar em bwbasicvez de agettye não iniciar um gerenciador de exibição X11. (Para outras pessoas que não sabem do que estou falando, o kernel fornece vários "consoles virtuais" acessíveis via Ctrl + Alt + F1 através de Ctrl + Alt + F12 e o sistema init, por padrão, inicia agettyde 1 a 6 e um X11 Display Manager (que fornece uma caixa de diálogo de login) no dia 7. Antes do Upstart e systemd, isso era controlado via /etc/inittab.) gettye seus descendentes tratavam dos prompts de login do console.
precisa saber é o seguinte
@ssokolow Boa idéia para completar, mas nesse momento você está apenas um passo à frente de uma conta de usuário dedicada com um shell bwbasic, então não acho que isso realmente agregue muito em termos de variedade geral.
um CVn
4

Só para jogar fora uma alternativa: existem vários emuladores para Linux que podem executar seus computadores antigos. Por exemplo, com xkegs, se você inicializá-lo, deverá ter um prompt básico do AppleSoft esperando por você. A comunicação com outras coisas do linux é um exercício deixado para o leitor (dica: tecnicamente, acredito que você pode redirecionar a saída em sua maçã emulada para a impressora emulada, que os xkegs exporão como um soquete de rede que você pode usar, por exemplo, nc para alimentar algumas outras aplicações canalizadas etc. Não tenho certeza se existe um caminho a seguir, mas esperamos que algo semelhante possa ser feito). Eu esperaria que os emuladores do comodoro 64 também tivessem uma maneira de executar o básico, etc.

Foon
fonte
Sim, existem muitos emuladores facilmente instaláveis ​​no Debian, mas kegsnão parece ser um deles (sem apt-cache searchresultado). E para alguns / a maioria dos emuladores, você provavelmente precisará obter uma ROM original de algum lugar.
Alex Stragies
Você também pode querer editar a sua resposta para se referir a um emulador, que pode ser executado em um terminal (OP editou Q em algum momento no passado)
Alex Stragies
O que quero dizer com "como computadores antigos" é que é só lá
DiamondCoderMan
1
@DiamondCoderMan Você pode configurar uma conta de usuário que use algo como bwbasic, brandy ou sdlbasic como shell, em vez de bash. No Linux, é provavelmente o mais próximo que você praticamente pode chegar de um sistema que opera como microcomputadores antigos, inicializados em um intérprete BASIC. Você também pode passar algo parecido init=/usr/bin/sdlbasiccom o kernel do Linux, que, se funcionar , o aproximará muito mais, mas pode ou não funcionar.
precisa saber é o seguinte
1

Existem muitas alternativas. Minha sugestão é semelhante à resposta de ssokolow. Se você deseja um BASIC "moderno", mas com uma sintaxe semelhante aos antigos intérpretes do BASIC, tente a BaCon . É um transpilador BASIC que gera código nativo. O projeto tem um manual muito bom, muitas bibliotecas e exemplos e até um IDE escrito em BaCon.

insira a descrição da imagem aqui

Rufo El Magufo
fonte
Mas isso não é para os que o terminal
DiamondCoderMan
O transpilador trabalha no terminal. É pequeno e usa um compilador C para criar o executável. O IDE foi apenas um exemplo de quão poderoso é o projeto.
Rufo El Magufo
-2

Você pode executar um C64 no seu navegador e usar o BASIC dessa maneira.

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

Esteja ciente de que o layout do teclado é diferente, ou seja, Shift-2entre aspas.

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

Applesoft BASIC se você preferir- http://calormen.com/jsbasic/

Existem emuladores de outras máquinas online,
mas muitos deles vão diretamente para o programa que você carrega,
sem emular a entrada inicial do teclado necessária para chegar lá.

Doyousketch2
fonte
1
Como é isso "em um terminal", se você o executa em um emulador de navegador da Web baseado em javascript?
precisa saber é o seguinte
3
O "num terminal" parte está no título da pergunta
roaima
1
@ Doyousketch2 Veja o título um pouco mais atentamente. i.imgur.com/jDBZVEO.png
Wyatt8740
1
Foi mesmo no título da primeira revisão, que dizia Como executar o código BASIC em um terminal BASH?
um CVn
2
Se for um software destinado a um sistema C64 ou outro sistema de 8 bits, emular uma máquina inteira é realmente a melhor ideia - muito poucos programas básicos não triviais daquela época até fingem ser independentes de hardware, no mínimo!
rackandboneman