stringtranslate.com

Wang BÁSICO

Wang BASIC es una serie de lenguajes de programación BASIC para computadoras de Wang Laboratories . El término se puede usar para referirse al BASIC de cualquier máquina Wang, pero se asocia principalmente con las versiones de la serie de minicomputadoras Wang 2200 de principios de la década de 1970. Cuando estas máquinas se actualizaron a la serie VP en 1976, se introdujo BASIC-2 y siguió siendo el modelo para las futuras máquinas de la serie 2200. El BASIC-3 planificado nunca se lanzó.

Wang ofreció varios modelos de cada versión de la serie 2200, que se diferenciaban únicamente en la cantidad de microcódigo almacenado en la memoria de solo lectura (ROM) y, por lo tanto, en la cantidad de comandos disponibles en BASIC en esa máquina. Por ejemplo, las máquinas del modelo B se diferenciaban del modelo básico A en que duplicaban la ROM y la utilizaban para almacenar una variedad de comandos de entrada/salida y de gestión de archivos.

El BASIC de Wang siguió de cerca al BASIC original de Dartmouth en cuanto a sintaxis, pero era un intérprete en lugar de un sistema de compilación y ejecución . Una característica notable era que todas las operaciones matemáticas utilizaban el formato decimal codificado en binario (BCD) de doble precisión , algo inusual para los BASIC de la época. [a] Carecía de muchas características comunes a dialectos posteriores como Microsoft BASIC , pero muchas de estas características se añadieron en BASIC-2.

Descripción

La siguiente descripción se basa en el BASIC original que se encuentra en el modelo 2200A. No todas las instrucciones que se enumeran a continuación estarían disponibles en el modelo básico; los modelos 2200B y C agregaron docenas de palabras clave nuevas y se describen por separado a continuación.

Edición y ejecución de programas

El BASIC original de Wang para el 2200 es una versión relativamente estándar del concepto BASIC de Dartmouth , y resultará familiar para los usuarios de cualquier intérprete BASIC común como Microsoft BASIC . Como la mayoría de los intérpretes BASIC, Wang BASIC operaba en modo inmediato o modo programa , cambiando a este último cuando se veía un número de línea al comienzo de la línea cuando EXECse presionaba la tecla (retorno). Los números de línea iban de 0 a 9999. Las líneas podían tener hasta 192 caracteres, abarcando varias líneas en pantalla, [1] y las líneas podían contener múltiples declaraciones separadas por dos puntos. [2] Para ayudar a organizar programas grandes, el lenguaje incluía un RENUMBERcomando. [3]

LISTse utilizaba para mostrar el código fuente del programa, mientras que LIST Smostraba solo las primeras 15 líneas y luego se pausaba. Cuando se pausaba, al presionar la tecla EXEC se mostraban las siguientes 15 líneas. [4] SAVE "filename" guardaba el programa actual en un casete y LOAD "filename"lo volvía a leer. SKIP 2Fleía los siguientes dos archivos que se encontraban en la cinta de casete y luego se detenía, lo que permitía que un archivo posterior LOADo SAVEtrabajara en el tercer archivo. [5] BACKSPACE era lo opuesto a SKIP, rebobinando el puntero del archivo. Trabajar con almacenamiento en disco era un poco más complejo, utilizando LOAD DC F "filename", donde F se refería a una de varias unidades predefinidas, en este caso "Fi"ixed. [6]

RUNiniciaba la ejecución y podía dirigirse a una línea en particular, como en RUN 100. El STOPcomando, que se usaba normalmente para depurar, permitía una cadena opcional que se imprimía cuando se ejecutaba esa instrucción. [7] TRACE se podía usar para imprimir líneas a medida que se ejecutaban, lo que a menudo se usaba junto con las teclas personalizadas (break) y del teclado para moverse línea por línea a través de un programa. [8] se usaba para establecer un retraso entre líneas en unidades de 16 de segundo; establecer el retraso en cero haría que se detuviera 12 segundo después de cada línea. [9]HALTSTEP SELECT PTRACESELECT P0SELECT P3

No había ningún NEWcomando para borrar la memoria de un programa existente, [10] en su lugar se usaba uno CLEARpara reiniciar la memoria. [11] CLEAR P (para "P"rogram) era el equivalente de NEW pero añadía números de línea opcionales desde y hasta, [12] borrando sólo ese rango de líneas de una manera similar al DELETEcomando que se ve en algunos dialectos. CLEAR Vborra valores de variables, [13] normalmente realizado CLRen la mayoría de los dialectos. [14] CLEAR N era similar a CLEAR V, pero no borraba el valor de las variables compartidas (ver más abajo). [12]

Sintaxis

La ramificación se admitía mediante IF...THEN, GOTOy GOSUB. La forma alternativa, GO TO, no se admitía. Una limitación de Wang BASIC, como también en el caso del Dartmouth original, es que la cláusula THEN de una declaración IF solo podía ser un número de línea, en contraste con los dialectos más modernos que permiten cualquier declaración después de THEN. También carecía de conjunciones booleanas como ANDo OR, por lo que la prueba solo podía tener una única comparación. [15]

Una adición interesante al lenguaje fue la idea de rutinas con nombre. La implementación se basó en la DEF FNdeclaración seguida de una comilla simple y luego un número de 0 a 255, por ejemplo, DEFFN' 1. Esto podría entonces ser llamado usando GOSUB '1. Para complicar aún más las cosas, la línea DEFFN era una verdadera definición de función y podía usar parámetros, como DEFFN'5(A$, N), que podían ser llamados con GOSUB'5("hello", 4). En permite implementar definiciones de funciones de varias líneas, que otros dialectos a veces ofrecían usando el estilo de función convencional en lugar de usar GOSUB. [16] Además, las rutinas con nombre en el rango de 0 a 31 se asignaron a las teclas con números similares en el teclado 2200, lo que permite llamarlas directamente con una sola pulsación de tecla. [17]

PRINTSoportaba comas y puntos y comas para separar parámetros, la primera movía el cursor a la siguiente columna de 16 caracteres de ancho, la segunda dejaba el cursor al final del valor impreso. Soportaba la TAB()función , pero no SPC(). Al igual que otros BASIC de "alta gama" de la época, Wang BASIC ofrecía una salida formateada con PRINTUSINGy una "imagen" separada. La imagen se definía utilizando una línea separada que comenzaba con el signo de porcentaje, por ejemplo, 180 % ##,###.##y luego utilizando ese formato con 190 PRINTUSING 180, N. [18] Cualquier carácter que no fuera el de formato se reproducía durante la impresión, por lo que se podía definir una salida completa con algo como 180 % ANGLE= #.#### RADIANS. [19]

INPUTLas instrucciones podían incluir un mensaje de aviso, junto con una lista delimitada por comas de una o más variables. No se podían utilizar puntos y comas en la ENTRADA y el cursor siempre permanecía al final del último elemento impreso durante la entrada. [20]

Matemáticas y lógica

Como en la mayoría de los dialectos de la época, los nombres de las variables podían constar de una sola letra mayúscula o una letra seguida de un solo dígito. No admitía nombres de dos letras. [21] Se podían establecer múltiples variables con un valor inicial utilizando una lista separada por comas, por ejemplo, LET A,B,C=1. Como en la mayoría de los BASIC, el LETsiempre era opcional. [22] Las variables se podían convertir en listas (matrices unidimensionales) utilizando DIM, como en DIM A(5)el que se creaba una lista de 5 valores numéricos. [23] o matrices bidimensionales utilizando DIM B(5,5). [24]

Los operadores relacionales incluían el conjunto estándar de =, <, >, <>, <=y >=. [25] Las funciones trigonométricas incluían SIN, COS, TAN, ARCSIN, ARCCOS, ARCTAN, y . [26] era un alias para ARCTAN. [27] Las funciones trigonométricas normalmente operaban en radianes , pero podían configurarse para usar grados usando o gradianes usando , volviendo a radianes con . Otras funciones incluían LOG, , , [ 28] y la pseudovariable. [29]EXPSQR ATNSELECT DSELECT GSELECT RINTABSSGN RND#PI

A diferencia de la mayoría de los BASIC, la RNDfunción no trataba el parámetro como un marcador de posición; cualquier valor distinto de cero hacía que funcionara como el RND visto en otros BASIC, mientras que un valor de cero reiniciaba la secuencia numérica de la misma manera que la RANDOMIZEdeclaración vista en otros BASIC. [29] Esta es una fuente potencial de errores al portar desde otros dialectos, que generalmente ignoraban el parámetro y a menudo usaban cero como un parámetro simplemente como un marcador de posición común. [b]

Instrumentos de cuerda

Se admitían variables de cadena y se admitía la concatenación mediante el operador más. A diferencia de los BASIC posteriores que utilizaban cadenas de longitud dinámica en un montón, como Microsoft, Wang BASIC establecía todas las cadenas con una longitud predeterminada de 16 caracteres e ignoraba cualquier carácter asignado más allá de eso. [c] Los caracteres no utilizados al final de una cadena se rellenaban con caracteres de espacio, y los espacios finales se ignoraban en las instrucciones PRINT, [30] lo que es otra fuente potencial de problemas al trasladar el código a Wang BASIC.

La longitud de almacenamiento de cualquier cadena individual podría cambiarse usando la DIMdeclaración, que en este caso usó la sintaxis ligeramente extraña de poner la longitud inmediatamente después del nombre de la variable, como DIM A$40, [31] en lugar de usar paréntesis como en una declaración DIM típica. [32] Las cadenas tenían una longitud máxima de 64 caracteres. [33] La sintaxis permitía listas de cadenas, por ejemplo DIM A$(5)hizo una lista de 5 cadenas de la longitud predeterminada de 16 caracteres, mientras que DIM B$(10)20hizo una lista de 10 cadenas de 20 caracteres. [34]

Había un pequeño conjunto de funciones de cadena. es un comando de segmentación de matricesSTR de propósito general que reemplaza al comando / / de estilo DEC/Microsoft . Por ejemplo, devuelve los cinco caracteres de A$ comenzando en el carácter 10. [35] El segundo parámetro era opcional, devolvía todo a partir del quinto carácter. devolvía la longitud de la cadena, ignorando los espacios finales, por lo que devolvía 3. [36] Para complicar aún más las cosas, las variables de cadena vacías siempre devolvían una longitud de 1. [37] Nótese que las funciones de cadena no incluyen el $, a diferencia de la mayoría de los BASIC donde estas funciones se nombrarían , por ejemplo, indicando que el valor de retorno es una cadena, no un valor numérico. [38]MIDLEFTRIGHTSTR(B$,10,5)STR(C$,5)LENLEN("ABC ")STR$

Datos y E/S

En consonancia con el modelo Dartmouth, el BASIC de Wang incluía DATAinstrucciones para almacenar constantes dentro del código del programa, y ​​estas se leían utilizando la READinstrucción, que comenzaba en el primer elemento de datos y luego movía un puntero hacia adelante hasta el siguiente elemento con cada READ. RESTOREpodía restablecer el puntero READ, y se expandió a partir de la versión original de Dartmouth al permitir que el puntero se estableciera en un elemento particular de la lista, por ejemplo, RESTORE 10, que lo establecía en el décimo elemento. Solo se podían ingresar 256 valores en las instrucciones DATA en total en un programa. [39]

La SELECTinstrucción podría utilizarse para redirigir la salida de otros comandos BASIC a otros dispositivos, en función de la "dirección" del dispositivo. Por ejemplo, SELECT PRINT 215enviaría la salida de las instrucciones PRINT posteriores a la impresora en la dirección 215, mientras que SELECT PRINT 005la salida devuelta al CRT integrado. SELECT LIST 215haría lo mismo para cualquier instrucción LIST siguiente. [40] SELECT también tenía un parámetro siguiente opcional para establecer la longitud máxima de línea, como SELECT PRINT 215 (132). Se podría utilizar SELECT con una variedad de dispositivos predefinidos, como CI para "entrada de consola" (normalmente el teclado) o LIST para redirigir la lista de programas a un dispositivo diferente. [40]

Encadenamiento de programas

Como las máquinas de la época tenían cantidades muy limitadas de memoria, la mayoría de los dialectos de BASIC incluían alguna forma de "encadenar" programas para permitir que un solo programa se dividiera en módulos más pequeños. En Wang BASIC, esto se lograba con las instrucciones COMy LOAD. [41]

COMdeclaró una o más variables como "comunes", [d] o globales en la terminología moderna. Un programa que usa encadenamiento típicamente declararía una cantidad de variables como comunes cerca de la parte superior del código, quizás COM A,B,I,A$20. [42] Cuando se CARGA un módulo de programa separado, los valores en estas variables no se borrarán, en contraste con las variables no comunes que se restablecerán. Las variables comunes se pueden borrar explícitamente usando CLEAR V, mientras que CLEAR Nborra las variables no comunes y deja las variables comunes solas. Las variables también se pueden declarar no comunes usando COM CLEAR, que restablece todas las variables comunes a la normalidad, o COM CLEAR Apara restablecer solo el estado de A. Confusamente, COM CLEAR también restablece cualquier otra variable COM definida antes de A, por lo que los resultados de COM CLEAR A serían diferentes si el programa original usara COM S,B,Ao COM A,B,S, en el primer ejemplo se restablecerían las tres mientras que en el segundo solo se restablecería A. [43]

El comando LOAD también se utilizó para encadenar. Se podían añadir opcionalmente números de línea de inicio y de fin, en cuyo caso se eliminarían las líneas existentes entre esos límites, o desde la línea de inicio hasta el final del programa si solo se especificaba un número. El nuevo programa se carga entonces en ese punto y la ejecución comienza en el número de línea de inicio, o al inicio del programa si no se especificó ninguna línea de inicio. [44]

Variaciones sobre el BASIC 2200

El Wang BASIC original vino en varias versiones que diferían en la cantidad de microcódigo basado en ROM y, por lo tanto, en la cantidad de palabras clave admitidas.

2200B

El BASIC 2200B fue una importante expansión de la versión 2200A. Las incorporaciones se pueden clasificar en cuatro categorías: funciones faltantes, comandos de cadena adicionales, comandos de tipo vectorial y entrada/salida. Las diferencias entre las versiones se pueden encontrar en forma de tabla en el documento de descripción general de 2200. [45]

Entre las funciones faltantes que se solucionaron en 2200B se encontraba la adición de ON...GOTO[46] y ON...GOSUB. [47] KEYIN leía un carácter del teclado sin pausa, de forma similar a INKEY$MS BASIC. VALbuscaba una cadena y devolvía un valor numérico dentro de ella. La NUMfunción era similar a LEN, pero devolvía la longitud de la subcadena hasta el primer carácter no numérico. Por ejemplo, si A$ es "1234.5", devolvería NUM(A$)6, mientras que si A$ fuera "1234.5" , NUM devolvería 10, porque los espacios son válidos en los números. [48]

2200B no agregó una función STR$, que convierte un valor numérico en una cadena. En su lugar, agregaron el CONVERTcomando para leer cadenas en números y viceversa. Por ejemplo, al usar el A$ anterior, CONVERT A$ TO Bel resultado sería que B contuviera el valor 1234.5, mientras que CONVERT 123 TO B$B$ tendría algo como "123". [49] Dartmouth BASIC incluía un comando CHANGE pero su propósito era muy diferente: en Dartmouth, CHANGE A$ TO Bproducía una matriz de valores en B, con cada elemento conteniendo el código ASCII para el carácter correspondiente en A$; en este caso, B contendría 49,50,51,52,46,53, los valores ASCII para los caracteres "1234.5". CONVERT de Wang también tenía un segundo modo que tomaba un especificador de formato como PRINTUSING y lo usaba para convertir un número en una cadena formateada de una manera análoga a sprintf de C. [ 49]

La POSfunción devuelve el índice de un carácter dado en una cadena; POS("HELLO WORLD", "L")devolvería 3. A diferencia de MS INSTR, POS solo podría buscar un único carácter, no una cadena de varios caracteres.

HEXConvierte un valor hexadecimal en el carácter correspondiente. Por ejemplo, A$=HEX(20)colocaría un carácter de espacio (hex 20) en el primer carácter de A$. [50] Se podrían insertar varios códigos a la vez; PRINT HEX(080809)produce tres caracteres, dos espacios de retroceso y un cursor a la derecha. [51] HEX es la contraparte de la función ASC que se encuentra en la mayoría de los BASIC, [52] pero utiliza una entrada hexadecimal en lugar de un número decimal. BINhizo lo mismo con los números binarios. [37]

Se agregó un comando de propósito especial para completar una cadena con un valor inicial que no sea un espacio. INIT ("X") A$llenaría A$ con X caracteres, mientras que INIT (41) B$colocaría el valor hexadecimal 41, el carácter A, en B$. [53]

2200B también incluía una serie de comandos que funcionaban de forma similar a un vector para realizar tareas comunes que normalmente se llevarían a cabo utilizando un bucle o, en las versiones de Dartmouth, comandos de matemáticas matriciales. Por ejemplo, ADDtomaba una lista de expresiones, las sumaba y devolvía el resultado. Esto se lograba mucho más rápido que expresar lo mismo utilizando una expresión infija; A=ADD(B,C,D)se completaba más rápido que A=B+C+D. Comandos similares eran OR, ANDy XOR.

La mayoría de las novedades de 2200B estaban relacionadas con la entrada/salida y, sobre todo, con el trabajo con archivos de disquete. Introdujo el concepto de tener varios tipos de archivos diferentes, incluido el archivo de datos, indicado con el prefijo "DA" en los comandos de archivo. Una variedad de otros comandos permitían trabajar con estos archivos, incluidos COPYlos de duplicar un archivo, MOVEdentro de un archivo, VERIFYarchivos y SCRATCHborrar un archivo o SCRATCH DISKborrar todo.

2200 °C

A diferencia de la versión 2200B, que fue una importante expansión de la 2200A, la 2200C tenía un alcance mucho más limitado. Añadió el COM CLEARcomando para borrar variables compartidas, una versión de DEFFN'ese hexadecimal devuelto, RETURN CLEARque se utilizaba para "extraer" un GOSUB de la pila [47] y ON ERRORpara atrapar errores dentro del programa.

2200T

Los modelos posteriores de la serie agregaron algunos o todos los comandos de las versiones B o C, pero solo el 2200T los amplió. Lo más notable de las ampliaciones fue la incorporación de matemáticas matriciales, pero también se agregaron algunos detalles de E/S.

Los comandos de matemáticas matriciales eran en gran medida idénticos a los que se encontraban en versiones posteriores de Dartmouth BASIC. Estos generalmente tomaban la forma de una asignación, como LET, pero reemplazando LET por MAT. Por ejemplo, MAT A=B+Cproduciría una matriz A cuyos elementos eran las sumas de los elementos correspondientes en las matrices B y C. [54] Otros comandos de matriz incluyen INVert, IDNpara la matriz identidad y ZERpara la matriz cero, y varias utilidades como COPY, MERGE, MOVEy SORT. [45]

BÁSICO-2

La introducción del conjunto de instrucciones completamente nuevo del 2200VP requirió que se escribiera un BASIC completamente nuevo desde cero. Si bien la compatibilidad con versiones anteriores era el objetivo principal, el nuevo BASIC-2 también agregó una serie de características que faltaban. El cambio más notable fue que BASIC ya no se almacenaba en la memoria de solo lectura (ROM) y, en su lugar, se cargaba desde el disco en el momento del arranque, lo que permitía que se pudiera aplicar fácilmente parches en el campo para corregir errores. También era mucho más rápido, aproximadamente ocho veces más rápido, debido a un enfoque en el rendimiento en lugar del tamaño y al mejor rendimiento de la plataforma VP. [55]

Las sentencias IF estaban limitadas en la versión original, y se mejoraron significativamente en BASIC-2. Se añadieron conjunciones booleanas, lo que permite realizar pruebas más complejas como La sentencia que sigue a THEN ya no tenía que ser un GOTO implícito, lo que permite sentencias comunes como . Se añadió una cláusula y tenía que seguir a dos puntos; . ELSE también se podía utilizar con sentencias ON; se ramificaría a las líneas 10, 20 o 30 si el valor en X era 1, 2 o 3, mientras que cualquier otro valor se ramificaría a 100. [55]IF X=5 AND Y=10 THEN...IF X=10 THEN PRINT "IT IS TEN"ELSEIF X=10 THEN PRINT "IT IS TEN":ELSE PRINT "IT IS NOT TEN"ON X GOTO 10,20,30:ELSE 100

Las nuevas funciones incluyen FIX, que siempre redondea hacia cero en lugar de INT que siempre redondea hacia abajo; FIX(-4.5)devuelve -4, mientras que INT(-4.5)devuelve -5. ROUND(value,num)es similar a FIX pero redondea al decimal proporcionado en el segundo parámetro. MODrealiza una división de enteros y devuelve el resto. MAX(a,b,c...)y MIN(d,e,f...)devuelve el valor entre la lista de entradas con el valor más alto o más bajo. LGTdevuelve el logaritmo en base 10 del valor. VERverifica si la cadena en el primer parámetro coincide con el formato en el segundo, el formato era el mismo que PRINTUSING. [55]

PRINTUSING ahora podía generar una cadena de caracteres; PRINTUSING TO A$, "#.##", SQR(3)formateaba la raíz cuadrada de tres a dos decimales y ponía el resultado en A$. Se añadieron varias pseudofunciones nuevas a PRINT; la AT(X,Y)función era similar en concepto a TAB, pero movía el cursor a la posición X,Y, BOX(W,H)dibujaba un cuadro del ancho y alto dados con la esquina superior izquierda en la posición actual del cursor y HEXOF(v)devolvía el valor hexadecimal. [55]

El tamaño de cadena predeterminado no cambió, pero el tamaño máximo aumentó de 64 a 124 caracteres. Las dimensiones máximas de la matriz aumentaron de 255 a 65535 elementos. [55]

BÁSICO-3

En marzo de 1977, Wang anunció una versión ampliada del sistema VP que incluía más memoria, hasta 256 KB, y un sistema de servidor de terminales que permitía que una sola máquina admitiera hasta doce terminales. Conocida como 2200MVP, las primeras unidades se comercializaron en enero de 1978. Los modelos LVP de cuatro usuarios y SVP de un solo usuario de la misma máquina se comercializaron en 1980. [56]

El 2 de abril de 1981, en la Feria de Hannover , Wang anunció una importante actualización del microcódigo de la serie MVP. La opción "C" de 2000 dólares añadía un compilador COBOL , así como una versión actualizada de BASIC, BASIC-3. En aquel momento, esperaban lanzarlo en versión beta en agosto y para todos los clientes en noviembre. [57] El sistema se envió a un pequeño número de sitios para realizar pruebas beta, pero nunca se lanzó. [58]

Notas

  1. ^ Wang había producido durante mucho tiempo calculadoras comerciales utilizando BCD, por lo que esto no era inusual para la empresa.
  2. ^ Véase, por ejemplo, Super Star Trek , que lo utiliza RND(0)ampliamente.
  3. ^ Parece que esto se tomó del BASIC de tiempo compartido de HP , que era idéntico. Varios BASIC de la era de las computadoras domésticas también usaban una variación de este modelo, en particular el BASIC entero y el BASIC de Atari .
  4. ^ Otros BASIC que tenían esta característica generalmente usaban el término completo COMMON.

Referencias

Citas

  1. ^ WangBASIC 1976, pág. 46.
  2. ^ WangBASIC 1976, pág. 125.
  3. ^ WangBASIC 1976, pág. 123.
  4. ^ WangBASIC 1976, pág. 14.
  5. ^ WangBASIC 1976, pág. 60.
  6. ^ WangBASIC 1976, pág. 65.
  7. ^ WangBASIC 1976, pág. 116.
  8. ^ WangBASIC 1976, pág. 121.
  9. ^ WangBASIC 1976, pág. 118.
  10. ^ Comodoro 1982, pág. 62.
  11. ^ WangBASIC 1976, pág. 8.
  12. ^ desde WangBASIC 1976, pág. 274.
  13. ^ WangBASIC 1976, pág. 124.
  14. ^ Comodoro 1982, pág. 39.
  15. ^ "Comparación BÁSICA".
  16. ^ WangBASIC 1976, págs. 158-159.
  17. ^ WangBASIC 1976, pág. 162.
  18. ^ WangBASIC 1976, pág. 169.
  19. ^ WangBASIC 1976, pág. 172.
  20. ^ WangBASIC 1976, pág. 56.
  21. ^ WangBASIC 1976, pág. 102.
  22. ^ WangBASIC 1976, pág. 20.
  23. ^ WangBASIC 1976, pág. 135.
  24. ^ WangBASIC 1976, pág. 210.
  25. ^ WangBASIC 1976, pág. 49.
  26. ^ WangBASIC 1976, pág. 82.
  27. ^ WangBASIC 1976, pág. 83.
  28. ^ WangBASIC 1976, pág. 78.
  29. ^ desde WangBASIC 1976, pág. 81.
  30. ^ WangBASIC 1976, pág. 106.
  31. ^ WangBASIC 1976, pág. 107.
  32. ^ WangBASIC 1976, pág. 137.
  33. ^ WangBASIC 1976, pág. 128.
  34. ^ WangBASIC 1976, pág. 139.
  35. ^ WangBASIC 1976, pág. 185.
  36. ^ WangBASIC 1976, pág. 189.
  37. ^ desde WangBASIC 1976, pág. 190.
  38. ^ Comodoro 1982, pág. 34.
  39. ^ WangBASIC 1976, págs. 145-150.
  40. ^ desde WangBASIC 1976, págs. 20-21.
  41. ^ WangBASIC 1976, pág. 272.
  42. ^ WangBASIC 1976, pág. 275.
  43. ^ WangBASIC 1976, pág. 277.
  44. ^ WangBASIC 1976, pág. 273.
  45. ^ ab Intro 1976, pág. 2.
  46. ^ WangBASIC 1976, pág. 130.
  47. ^ desde WangBASIC 1976, pág. 156.
  48. ^ WangBASIC 1976, pág. 192.
  49. ^ desde WangBASIC 1976, pág. 193.
  50. ^ WangBASIC 1976, pág. 183.
  51. ^ WangBASIC 1976, pág. 196.
  52. ^ Comodoro 1982, pág. 37.
  53. ^ WangBASIC 1976, pág. 188.
  54. ^ WangBASIC 1976, pág. 215.
  55. ^ abcde BASIC2 1979.
  56. ^ Terminales programables (PDF) . Datapro Research. Febrero de 1981.
  57. ^ "Mejoras de la serie 2200" (PDF) . 2 de abril de 1981.
  58. ^ "2200 BASIC-3" (PDF) . Laboratorios Wang.

Bibliografía