¿Cómo puedo ejecutar el código BASIC en una terminal?

20

Me gustaría ejecutar código BASIC, como solía hacerlo en computadoras más antiguas, en Linux. (Estoy buscando un interruptor BASIC que pueda ejecutar funciones del sistema operativo de forma nativa)

¿Que opciones tengo? (Preferentemente para Debian y Arch-based)

DiamondCoderMan
fuente
2
Hay muchas versiones (no realmente compatibles) de basic.
Thomas Dickey
2
@ThomasDickey Puse Debian en la pregunta, ya que tiene / tenía una etiqueta Debian.
Rui F Ribeiro

Respuestas:

24

Si desea ejecutar de forma nativa en Linux BASIC, tiene varios paquetes en Debian para elegir:

  • brandy, compatible con BBC Micro BASIC, funciona en una interfaz gráfica X11, aparentemente es compatible con sonido y gráficos;

Brandy es un intérprete para BBC BASIC V, el dialecto de BASIC que Acorn Computers suministró con sus gamas de computadoras de escritorio que usan el procesador ARM como Archimedes y Risc PC, y todavía está en uso en estas y compatibles.

   BASIC V is a much extended version of BBC BASIC. 

Este fue el BASIC utilizado en el BBC Micro basado en 6502 que Acorn fabricó durante la década de 1980.

  • bwbasic - byWater BASIC - modo de texto, afirma ser compatible con ANSI, tiene extensiones compatibles con shells y afirma ser capaz de emular / tener una buena compatibilidad con varios tipos de dialectos BASIC "antiguos", incluidos IBM BASICA, Microsoft BASIC y gwBASIC.

bwBASIC se puede configurar para emular características, comandos y funciones disponibles en diferentes tipos de intérpretes BASIC;

bwBASIC implementa una característica no disponible en intérpretes BASIC anteriores: se puede ingresar un comando de shell de manera interactiva en el indicador de bwBASIC, y el intérprete lo ejecutará bajo un shell de comando.
Por ejemplo, el comando "dir * .bas" se puede ingresar en bwBASIC (en DOS, o "ls -l * .bas" en UNIX) y se ejecutará desde la línea de comandos del sistema operativo.

Los comandos de shell también se pueden dar en líneas numeradas en un programa bwBASIC, de modo que bwBASIC se pueda usar como lenguaje de programación de shell. La implementación de bwBASIC de los comandos y funciones RMDIR, CHDIR, MKDIR, NAME, KILL, ENVIRON y ENVIRON $ () ofrece más capacidades de procesamiento de shell.

Para instalarlos:

sudo apt-get install brandy bwbasic

En cuanto a mi experiencia personal, prefiero bwbasicya que permite tener el poder de BASIC en una línea de comando de texto o script de shell.

Como alternativa, también tiene varios paquetes de emulación de computadoras de la antigüedad, que obviamente, además de la sintaxis BASIC, implementan todo el entorno de alguna computadora antigua que desee revivir.

Curiosamente, bwbasicen teoría podría permitir la automatización de operaciones en Unix, por ejemplo, la creación de scripts utilizando el lenguaje BASIC. Aunque nunca lo intenté.

Rui F Ribeiro
fuente
9

Mis sistemas Debian, y probablemente la mayoría de las otras distribuciones de Linux, tienen varias opciones disponibles directamente a través del administrador de paquetes. Entre ellos:

  • bwbasic:

El Intérprete BÁSICO Bywater (bwBASIC) implementa un gran superconjunto del Estándar ANSI para BASIC Mínimo (X3.60-1978) y un subconjunto significativo del Estándar ANSI para BASIC Completo (X3.113-1987) en C. También ofrece shell instalaciones de programación como una extensión de BASIC. bwBASIC busca ser lo más portátil posible.

  • sdlbasic:

sdlBasic es un intérprete BASIC pequeño, eficiente y multiplataforma para crear juegos usando el poder de la biblioteca SDL. Fue inspirado por el viejo y glorioso AMOS.

Página de inicio (guía de referencia)

Wikipedia

Alex Stragies
fuente
8

Dado que todo el mundo parece estar asumiendo que quiere decir "PC anterior a IBM" por "computadoras más antiguas", voy a ir a la otra ruta y ofreceré una respuesta que interpreta que "computadoras más antiguas" significa "compatibles con IBM antes de Windows 9x".

Si se refería a computadoras con versiones de MS-DOS que incluían QBASIC.EXE, tiene tres opciones, dependiendo de qué tan estrictamente defina ejecutarlas "en Linux":

  1. Si todavía tiene una copia de QBASIC.EXEpatadas, puede usar DOSBox o DOSEMU para ejecutarlo en un entorno virtualizado de DOS. (Ambos están disponibles en los repositorios de Debian y son fáciles de configurar. Simplemente configure una carpeta para montarla C:, colóquela QBASIC.EXEy listo).

    Eso le dará una compatibilidad perfecta con el código fuente anterior, pero ninguna integración con el sistema operativo host más allá de " C:es en realidad una carpeta, en lugar de una imagen de disco".

    Debo aclarar, sin embargo, que hay una compensación entre los dos. DOSEMU se ejecutará en cualquier terminal que desee, pero no admitirá los sofisticados trucos de bajo nivel que utilizan algunas cosas de QBasic (por ejemplo, para modos gráficos especializados). La única forma de soportar eso es un emulador completo como DOSBox ... pero DOSBox abrirá su propia ventana en lugar de usar su terminal.

  2. FreeBASIC tiene un qbdialecto / modo que apunta a una compatibilidad perfecta con un gran subconjunto de QuickBASIC. (Las cosas no admitidas son principalmente de bajo nivel relacionadas con el hecho de que QuickBASIC era un sistema de modo real de 16 bits, mientras que FreeBASIC es un sistema de modo protegido de 32 bits).

    FreeBASIC ofrece binarios de Linux, pero solo lo encontrará en su repositorio de paquetes si realmente quería decir "distribuciones de la familia Debian" en lugar de "Debian" y está ejecutando Ubuntu o un derivado de Ubuntu como Mint.

  3. Las compilaciones de Linux de QB64 ni siquiera están en los repositorios de Ubuntu, pero apunta específicamente a ser el descendiente QuickBASIC en modo protegido más compatible e incluso proporciona un IDE que intenta clonar el IDE QBasic / QuickBasic.

ssokolow
fuente
8

Escribiste en un comentario a la respuesta de Foon que

Lo que quiero decir con "como computadoras viejas" es que está ahí

Otros han proporcionado varias sugerencias diferentes para los intérpretes BASIC que podría instalar en un sistema Linux, por lo que no iré allí. Las PC modernas generalmente no vienen con intérpretes BASIC incorporados, por lo que está bloqueado arrancando algo que puede ejecutar un intérprete BASIC instalado.

Más bien, tomaré lo anterior para significar que quiere algo que inicie un intérprete BASIC automáticamente, similar pero no del todo parecido a las primeras microcomputadoras (como Apple II, Commodore C-64, Zinclair ZX-81 y sus semejantes) ) arrancado en un intérprete BASIC nativo.

Básicamente, puedo pensar en tres formas de hacer esto:

Crea un lanzador de escritorio que abra una terminal

Este es el menos invasivo, porque funciona completamente dentro del sistema y el entorno al que está acostumbrado.

Básicamente, a través de cualquier medio que proporcione su entorno de escritorio, usted crea un iniciador de programas y lo configura para iniciar el intérprete BÁSICO de su elección en un terminal. Para un efecto adicional, puede configurar fuentes, colores, etc. específicos, para simular un entorno de días pasados. La forma exacta en que haría esto depende del entorno de escritorio que esté utilizando, que no ha especificado, pero hacer un clic derecho en el lugar donde está haciendo clic para iniciar aplicaciones y buscar una opción para crear un nuevo iniciador será un buen comienzo .

Cree una cuenta de usuario separada con un intérprete BÁSICO como shell

Esto es un poco más complicado que un simple iniciador de escritorio, pero los proveedores tienen un mejor aislamiento para que no te arriesgues a arruinar tus propios archivos. Primero, instale un intérprete BÁSICO; Lo usaré bwbasicpara el ejemplo, pero todo vale, siempre y cuando se ejecute de forma nativa en un terminal. Luego agregue un usuario y configure su shell para que sea el intérprete bwbasic. Esto se puede hacer a través de la GUI, pero eso depende del entorno de escritorio que esté utilizando; el enfoque portátil es hacerlo en una terminal usando useradd. Esto será algo similar 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

Luego, debería poder ingresar a un entorno BASIC limpio a través de sudo:

$ sudo -i -u basic

Puede crear un lanzador (como se indicó anteriormente) que ejecute este comando en una terminal, si así lo desea.

Proporcione su contraseña normal cuando se lo solicite sudo. Puede editar la configuración de sudoers para evitar la solicitud de contraseña si lo desea, pero tenga en cuenta que editar sudoers es algo complicado y aún más riesgoso; puede bloquear la cuenta raíz, lo que dificulta la reparación de la configuración.

Use un intérprete BÁSICO como init

Este es el enfoque más invasivo, pero también lo acerca más a cómo funcionaban las primeras microcomputadoras, al arrancar directamente en un intérprete BASIC. No recomiendo esto, y consideraría que es poco probable que funcione sin un trabajo significativo, pero lo estoy incluyendo por completo.

El kernel de Linux acepta un parámetro de línea de comando (sí, el kernel de Linux tiene parámetros de línea de comando; puede ver la línea de comando actualmente arrancada leyendo / / proc / cmdline) llamada init, que especifica qué programa ejecutar una vez que se completa la inicialización del kernel. Puede configurar el cargador de arranque (probablemente GRUB) para permitirle arrancar una entrada del núcleo que dice que initdebería ser /usr/bin/bwbasic(o cualquier otro intérprete BÁSICO que haya instalado).

Para que esto funcione, el intérprete BASIC, así como todos los archivos que necesita, deben ubicarse en el /sistema de archivos root ( ). Esto se debe a que una de las tareas de init es montar todos los sistemas de archivos, y porque está proporcionando un programa no init como init, los sistemas de archivos no root no se habrán montado. (Creo que otra de las tareas de init es volver a montar el sistema de archivos raíz en modo de lectura y escritura, por lo que por el enfoque trivial no podrá guardar nada. Sin embargo, es posible que, dependiendo de los detalles de implementación exactos, pueda hacer que el sistema ejecute algo comomount -o remount,rw / para volver a montar el sistema de archivos raíz de lectura-escritura.) El intérprete BASIC elegido tampoco debe depender de nada más de lo que init sea responsable, y no tendrá acceso a ninguna instalación manejada por init o por ningún proceso generado por init (por ejemplo , redes o soporte multiusuario).

Una línea de comando del kernel de algo así ro quiet init=/usr/bin/bwbasicprobablemente lo acercará bastante a cómo se veía en los viejos tiempos.

un CVn
fuente
Su uso de sudo echono hace lo que quiere decir y es probable que se encuentre de -bash: /etc/shells: Permission deniedtodos modos ya que la >>redirección se configura mediante bash antes de que se evalúe el resto del comando. Probablemente sea mejor usarlo type -P bwbasic | sudo tee -a /etc/shellsen su lugar. Ver " permisos - ¿Cómo insertar texto en un archivo propiedad de root usando sudo? - Unix & Linux Stack Exchange
shalomb
@shalomb Buen punto, gracias por mencionarlo. Lo arreglé, pero de una manera algo diferente.
un CVn
1
@ MichaelKjörling Una alternativa menos drástica al uso de un intérprete BASIC como initsería configurar el sistema init para usar en bwbasiclugar de agettyy no iniciar un administrador de pantalla X11. (Para otros que no saben de lo que estoy hablando, el núcleo proporciona varias "consolas virtuales" accesibles a través de Ctrl + Alt + F1 a través de Ctrl + Alt + F12 y el sistema init, por defecto, comienza agettydel 1 al 6 y un X11 Display Manager (que proporciona un cuadro de diálogo de inicio de sesión) en 7. Antes de Upstart y systemd, esto se controlaba mediante /etc/inittab.) gettyy sus descendientes manejan las instrucciones de inicio de sesión de la consola.
ssokolow
@ssokolow Buena idea para completar, pero en ese momento está solo un paso por delante de una cuenta de usuario dedicada con un shell bwbasic, por lo que no creo que realmente agregue mucho en términos de variedad general.
un CVn
4

Solo para descartar una alternativa: hay múltiples emuladores para Linux que pueden ejecutar sus computadoras viejas. Como ejemplo, con xkegs, si lo inicia, debería tener un aviso básico de Appleoft esperando por usted. La comunicación con otras cosas de Linux es un ejercicio que queda para el lector (pista: técnicamente, creo que puede redirigir la salida en su manzana emulada a la impresora emulada, que xkegs expondrá como un zócalo de red que puede usar, por ejemplo, nc para alimentar algunas otras aplicaciones canalizadas, etc. No estoy seguro de si hay una manera de ir a la inversa, pero espero que se pueda hacer algo similar). Esperaría que los emuladores del comodoro 64 también tuvieran una forma de ejecutar el básico del comodoro, etc.

Foon
fuente
Sí, hay muchos emuladores que se pueden instalar fácilmente en Debian, pero kegsno parece ser uno de ellos (sin apt-cache searchresultado). Y para algunos / la mayoría de los emuladores, probablemente necesitará obtener una ROM original de alguna parte.
Alex Stragies
Es posible que también desee editar su respuesta para referirse a un emulador, que se puede ejecutar en una terminal (OP ha editado Q en algún momento en el pasado)
Alex Stragies
Lo que quiero decir con "como computadoras viejas" es que está ahí
DiamondCoderMan
1
@DiamondCoderMan Puede configurar una cuenta de usuario que utilice algo como bwbasic, brandy o sdlbasic como shell, en lugar de bash. En Linux, eso es probablemente lo más cerca que podía prácticamente llegar a un sistema que funciona como viejos microordenadores que arranca en un intérprete de BASIC. También podría pasar algo parecido init=/usr/bin/sdlbasical kernel de Linux, que si funciona lo acercará mucho más, pero puede o no funcionar.
un CVn
1

Hay muchas alternativas. Mi sugerencia es similar a la respuesta de ssokolow. Si desea un BASIC "moderno" pero con una sintaxis similar a los viejos intérpretes BASIC, entonces debe probar BaCon . Es un transpilador BÁSICO que genera código nativo. El proyecto tiene un manual bastante bueno, muchas bibliotecas y ejemplos, e incluso un IDE escrito en BaCon.

ingrese la descripción de la imagen aquí

Rufo El Magufo
fuente
Sin embargo, esto no es para la terminal
DiamondCoderMan
El transpiler funciona en la terminal. Es pequeño y usa un compilador de C para construir el ejecutable. El IDE fue solo un ejemplo de lo poderoso que es el proyecto.
Rufo El Magufo
-2

Puede ejecutar un C64 en su navegador y usar BASIC de esa manera.

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

Tenga en cuenta que la distribución del teclado es diferente, es decir, Shift-2entre comillas.

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

Applesoft BASIC si lo prefiere: http://calormen.com/jsbasic/

Hay emuladores de otras máquinas en línea,
pero muchos de ellos van directamente a cualquier programa que cargue,
sin emular la entrada de teclado inicial requerida para llegar allí.

Doyousketch2
fuente
1
¿Cómo es esto "en una terminal" si lo está ejecutando en un emulador de navegador web basado en JavaScript?
Wyatt8740
3
La parte "en una terminal" está en el título de la pregunta
roaima
1
@ Doyousketch2 Mira el título un poco más cuidadosamente. i.imgur.com/jDBZVEO.png
Wyatt8740
1
Incluso estaba en el primer título de revisión, que decía ¿Cómo ejecutar el código BASIC en un terminal BASH?
un CVn
2
Si se trata de un software diseñado para un C64 u otro sistema de 8 bits, emular una máquina completa es la mejor idea: ¡muy pocos programas básicos no triviales de esa época incluso pretenden ser independientes del hardware en lo más mínimo!
rackandboneman