Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Wang BASIC - это серия языков программирования BASIC для компьютеров от Wang Laboratories . Этот термин можно использовать для обозначения BASIC на любой машине Wang, но в основном он связан с версиями серии миникомпьютеров Wang 2200 начала 1970-х годов. Когда эти машины были обновлены до серии VP в 1976 году, был представлен BASIC-2, который оставался образцом для будущих машин серии 2200. Запланированный BASIC-3 так и не был выпущен.

Ван предложил несколько моделей каждой версии серии 2200, различающихся только количеством микрокода, хранящегося в постоянном запоминающем устройстве (ПЗУ), и, следовательно, количеством команд, доступных в BASIC на этой машине. Например, машины модели B отличались от базовой модели A удвоением ПЗУ и использованием его для хранения различных команд ввода / вывода и управления файлами.

Wang BASIC в синтаксисе внимательно следовал оригинальному Dartmouth BASIC , но был интерпретатором, а не компилируемой системой. Примечательной особенностью было то, что вся математика использовала двоично-десятичный формат с двойной точностью (BCD), что было необычно для BASIC той эпохи. [a] В нем отсутствовали многие функции, общие для более поздних диалектов, таких как Microsoft BASIC , но многие из этих функций были добавлены в BASIC-2.

Описание [ править ]

Следующее описание основано на оригинальном BASIC, найденном в 2200A. Не все инструкции, перечисленные ниже, будут доступны в базовой модели; 2200B и C добавили десятки новых ключевых слов, которые описаны отдельно ниже.

Редактирование и выполнение программы [ править ]

Оригинальный Wang BASIC для 2200 является относительно стандартной версией концепции Dartmouth BASIC и будет знаком пользователям любых распространенных интерпретаторов BASIC, таких как Microsoft BASIC . Как и большинство интерпретаторов BASIC, Wang BASIC работал в непосредственном или программном режиме , переключаясь на более поздний, когда номер строки виден в начале строки при EXECнажатии клавиши (return). Номера строк варьируются от 0 до 9999. Строки могут содержать до 192 символов, охватывая несколько экранных строк [1], а строки могут содержать несколько операторов, разделенных двоеточиями. [2] Чтобы упростить организацию больших программ, язык включал RENUMBERкоманду. [3]

LISTиспользовался для отображения исходного кода программы, при этом LIST Sотображались только первые 15 строк, а затем выполнялась пауза. В режиме паузы нажатие клавиши EXEC отображает следующие 15 строк. [4] SAVE "filename" сохранял текущую программу на кассету и LOAD "filename"считывал ее обратно. Работа с дисковым хранилищем была немного сложнее, используя LOAD DC F "filename", где F ссылался на один из ряда предопределенных дисководов, в данном случае с фиксированной буквой «F». SKIP 2Fбудет читать следующие два файла, найденные на ленте, и затем останавливаться, позволяя последующему LOADили SAVEработать с третьим файлом. [5] BACKSPACE была противоположностью SKIP, перематывая указатель файла. [6]

RUNначал выполнение и может быть направлен на определенную строку, например RUN 100. Команда STOP, обычно используемая для отладки, допускала необязательную следующую строку, которая распечатывалась при выполнении этого оператора. [7] TRACE можно было использовать для распечатки строк по мере их выполнения, что часто использовалось в сочетании с настраиваемыми HALT(разрыв) и STEPклавишами на клавиатуре для построчного перемещения по программе. [8] SELECT P был использован для установки задержки между TRACEлиниями в 1 / 6 второго блоков; SELECT P0установить задержку на ноль, SELECT P3вызовет его на паузу 1 / 2 секунды после каждой строки. [9]

Не было NEWкоманды для очистки памяти существующей программы [10], вместо нее использовалась команда CLEARдля сброса памяти. [11] CLEAR P (для программы "P") был эквивалентом NEW, но необязателен для номеров строк и [12], удаляя только этот диапазон строк аналогично DELETEкоманде, используемой в некоторых диалектах. CLEAR Vочищает значения переменных, [13] обычно выполняется CLRв большинстве диалектов. [14] CLEAR N был похож на CLEAR V, но не очищал значение общих переменных (см. Ниже). [12]

Синтаксис [ править ]

Разветвление поддерживалось через IF...THEN, GOTOи GOSUB. Альтернативная форма GO TOне была поддержана. Одним из ограничений Wang BASIC является то, что предложение THEN оператора IF может быть только номером строки, в отличие от наиболее распространенных диалектов, которые допускают любой оператор после THEN. В нем также отсутствовали логические союзы, такие как ANDили OR, поэтому в тесте могло быть только одно сравнение. [15]

Одним интересным дополнением к языку была идея именованных процедур. Реализация была основана на DEF FNинструкции, за которой следовала одинарная кавычка, а затем число от 0 до 255, например DEFFN' 1. Затем это можно было бы вызвать с помощью GOSUB '1. Чтобы еще больше запутать ситуацию, строка DEFFN была истинным определением функции и могла использовать параметры, например DEFFN'5(A$, N), которые можно было вызвать с помощью GOSUB'5("hello", 4). In позволяет реализовать многострочные определения функций, которые в других диалектах иногда предлагаются с использованием обычного функционального стиля, а не с использованием GOSUB. [16] Кроме того, именованные подпрограммы в диапазоне от 0 до 31 были назначены аналогичным образом заблокированным клавишам на клавиатуре 2200, что позволяло вызывать их напрямую одним нажатием. [17]

PRINTподдерживаются параметры разделения запятой и точкой с запятой: первый перемещает курсор в следующий 16-символьный столбец, а второй оставляет курсор в конце печатаемого значения. Он поддерживает TAB()функцию, но не поддерживает SPC(). Как и другие «высококлассные» BASIC того времени, Wang BASIC предлагал форматированный вывод с PRINTUSINGотдельным «изображением». Изображение было определено с использованием отдельной строки, начинающейся, например, со знака процента, 180 % ##,###.##а затем с использованием этого формата с 190 PRINTUSING 180, N. [18] Любые символы, кроме символов форматирования, отражались во время печати, поэтому можно было определить полный вывод с чем-то вроде 180 % ANGLE= #.#### RADIANS. [19]

INPUTоператоры могут включать подсказку, а также список одной или нескольких переменных, разделенных запятыми. Точку с запятой нельзя использовать во INPUT, и курсор всегда оставался в конце последнего напечатанного элемента во время ввода. [20]

Математика и логика [ править ]

Как и в большинстве диалектов той эпохи, имена переменных могли состоять из одной заглавной буквы или буквы, за которой следовала одна цифра. Он не поддерживает двухбуквенные имена. [21] Для нескольких переменных можно установить начальное значение, используя список, разделенный запятыми, например LET A,B,C=1. Как и в случае с большинством BASIC, LETвсегда был необязательным. [22] Переменные могут быть составлены в списки (одномерные массивы) с помощью DIM, как в DIM A(5)котором составлен список из 5 числовых значений. [23] или двумерные массивы с использованием DIM B(5,5). [24]

Реляционные операторы включали стандартный набор =, <, >, <>, <=и >=. [25] функции тригонометрические включены SIN, COS, TAN, ARCSIN, ARCCOS, ARCTAN, LOG, EXPи SQR. [26] ATN было псевдонимом для АРКТАН. [27] функции тригонометрических обычно работают в радианах , но может быть настроены на использование градусов с использованием SELECT Dили gradians использования SELECT G, возвращаясь в радианы с SELECT R. Другие функции , включенные INT, ABS, SGN, [28] RND , а #PIпсевдо-переменной. [29]

В отличие от большинства BASIC, RNDфункция не рассматривала параметр как заполнитель; любое ненулевое значение заставляло его работать так же, как RND, наблюдаемое в других BASIC, в то время как значение нуля перезапускало числовую последовательность таким же образом, как и RANDOMIZEоператор, замеченный в других BASIC. [29] Это потенциальный источник ошибок при переносе с других диалектов, которые обычно игнорировали параметр и часто использовали ноль в качестве параметра просто как обычный заполнитель. [b]

Строки [ править ]

Поддерживались строковые переменные, и конкатенация поддерживалась с помощью оператора плюс. В отличие от более поздних BASIC, которые использовали строки динамической длины в куче, таких как Microsoft, Wang BASIC установил для всех строк длину по умолчанию, равную 16 символам, и будет игнорировать любые символы, назначенные сверх этого. [c] Неиспользуемые символы в конце строки были заполнены пробелами, а любые конечные пробелы игнорировались в операторах PRINT [30], что является еще одним потенциальным источником проблем при переносе кода на Wang BASIC.

Длина хранения любой отдельной строки может быть изменена с помощью DIMоператора, который в этом случае использовал немного странный синтаксис, помещая длину сразу после имени переменной, например DIM A$40, [31], вместо использования скобок, как в типичном операторе DIM. [32] Максимальная длина строк - 64 символа. [33] Синтаксис позволял списки строк, например, DIM A$(5)составлял список из 5 строк длиной по умолчанию 16 символов, в то время DIM B$(10)20как список составлял 10 строк по 20 символов. [34]

Был небольшой набор строковых функций. STR- это универсальная команда нарезки массива, которая заменяет DEC / Microsoft-style MID/ LEFT/ RIGHT. Например, STR(B$,10,5)возвращает пять символов A $, начиная с символа 10. [35] Второй параметр был необязательным, STR(C$,5)возвращал все, начиная с 5-го символа. LENвернул длину строки, игнорируя конечные пробелы, поэтому LEN("ABC ")вернул бы 3. [36] Чтобы еще больше запутать ситуацию, пустые строковые переменные всегда возвращали длину 1. [37] Обратите внимание, что строковые функции не включают $, в отличие от для большинства BASIC, где эти функции будут названыSTR$, например, указание, что возвращаемое значение является строкой, а не числовым значением. [38]

Данные и ввод / вывод [ править ]

В соответствии с моделью Дартмута, Wang BASIC включил DATAоператоры для хранения констант в программный код, и они были прочитаны с помощью READоператора, который начинался с первого элемента данных, а затем перемещал указатель вперед на следующий элемент при каждом READ. RESTOREмог сбрасывать указатель READ, и был расширен по сравнению с исходной версией Dartmouth, позволяя, например, указывать указатель на конкретный элемент в списке RESTORE 10, который установил его на 10-й элемент. Всего в одной программе в операторы DATA можно было ввести только 256 значений. [39]

SELECTЗаявление может быть использовано для перенаправления вывода из других базовых команд на другие устройства, основанные на «адрес» устройства. Например, SELECT PRINT 215отправлял бы вывод последующих операторов PRINT на принтер по адресу 215, а SELECT PRINT 005возвращал бы вывод на встроенную CRT. SELECT LIST 215будет делать то же самое для любых следующих операторов LIST. [40] SELECT также имеет необязательный следующий параметр для установки максимальной длины строки, например SELECT PRINT 215 (132). Можно использовать SELECT с различными предопределенными устройствами, такими как CI для «ввода с консоли» (обычно с клавиатуры) или LIST для перенаправления списка программ на другое устройство. [40]

Объединение программ [ править ]

Поскольку машины той эпохи имели очень ограниченный объем памяти, большинство диалектов BASIC предусматривало некоторый способ «цепочки» программ вместе, чтобы позволить единую программу быть разбитой на более мелкие модули. В Ване BASIC, это было сделано с COMи LOADотчетностью. [41]

COMобъявил одну или несколько переменных как «общие», [d] или глобальные в современной терминологии. Программа, использующая цепочку, обычно объявляет ряд переменных как общие в верхней части кода COM A,B,I,A$20. [42] При ЗАГРУЗКЕ отдельного программного модуля значения в этих переменных не будут очищены, в отличие от необщих переменных, которые будут сброшены. Общие переменные можно очистить явно с помощью CLEAR V, тогда как CLEAR Nочищает необщие переменные и оставляет общие переменные в покое. Переменные также могут быть объявлены необщими, используя COM CLEAR, что сбрасывает все общие переменные в нормальное состояние илиCOM CLEAR Aчтобы сбросить только статус A. Как ни странно, COM CLEAR также сбрасывает любые другие переменные COM, определенные до A, поэтому результаты COM CLEAR A будут другими, если использовалась исходная программа, COM S,B,Aили COM A,B,S, в первом примере, все три были бы сброшены в то время как в второй только A будет сброшен. [43]

Команда LOAD также использовалась для связывания. При желании можно добавить номера начальной и конечной строк, и в этом случае любые существующие строки между этими пределами будут удалены, или от начальной строки до конца программы, если был указан только один номер. Затем в этот момент загружается новая программа, и выполнение начинается с номера начальной строки или с начала программы, если начальная строка не указана. [44]

Варианты на 2200 BASIC [ править ]

Оригинальный Wang BASIC имел несколько версий, различающихся количеством микрокода на основе ПЗУ и, следовательно, количеством поддерживаемых ключевых слов.

2200B [ править ]

BASIC в 2200B был основным расширением версии 2200A. Дополнения обычно можно разделить на четыре категории; отсутствующие функции, строковые команды добавления, векторные команды и ввод / вывод. Различия между версиями можно найти в виде таблицы в обзорном документе 2200. [45]

Недостающие функции, которые были исправлены в 2200B, включали добавление ON...GOTO[46] и ON...GOSUB. [47] KEYIN читать символ с клавиатуры без пауз, как INKEY$в MS BASIC. VALискал строку и возвращал в ней числовое значение. NUMФункция была похожа на LEN, но вернулась длиной длины подстроки до первого не-цифрового символа. Например, если A $ равно «1234,5», NUM(A$)будет возвращено 6, тогда как если A $ было «1234,5», NUM вернет 10, потому что пробелы допустимы в числах. [48]

2200B не добавил функцию STR $, которая преобразует числовое значение в строку. Вместо этого они добавили CONVERTкоманду для преобразования строк в числа и наоборот. Например, использование A $ выше CONVERT A$ TO Bприведет к тому , что B будет содержать значение 1234,5, а в CONVERT 123 TO B$B $ останется что-то вроде «123». [49] Dartmouth BASIC также включал команду CONVERT, но она была совсем другой по назначению, в Dartmouth,CONVERT A$ TO Bсоздаст массив значений в B, каждый элемент которого будет содержать код ASCII для соответствующего символа в A $; в этом случае B будет содержать 49,50,51,52,46,53, значения ASCII для символов «1234,5». CONVERT Вана также был вторым режим, принявшим спецификатор формата , как PRINTUSING и используется , что для преобразования числа в отформатированную строку в моде , аналогичной той , C «s Sprintf . [49]

POSФункция возвращает индекс заданного символа в строке; POS("HELLO WORLD", "L")вернет 3. В отличие от MS INSTR, POS может искать только один символ, а не многосимвольную строку.

HEXпреобразовывает шестнадцатеричное значение в соответствующий символ. Например, A$=HEX(20)поместил бы пробел (шестнадцатеричный 20) в первый символ A $. [50] Одновременно можно вставить несколько кодов; PRINT HEX(080809)производит три символа, два символа возврата и курсор вправо. [51] HEX является аналогом функции ASC, встречающейся в большинстве BASIC, [52] но использует шестнадцатеричный ввод вместо десятичного числа. BINсделал то же самое для двоичных чисел. [37]

Была добавлена ​​специальная команда для заполнения строки начальным значением, которое не является пробелом. INIT ("X") A$заполнит A $ символами X, а INIT (41) B$шестнадцатеричное значение 41, символ A, поместит в B $. [53]

2200B также включал ряд команд, которые работали в векторной манере для выполнения общих задач, которые обычно выполнялись бы с использованием цикла или, в версиях Дартмута, команд матричной математики. Например, ADDвзял список выражений, сложил их и вернул результат. Это было выполнено намного быстрее, чем то же самое, выраженное с помощью инфиксного выражения; A=ADD(B,C,D)завершится быстрее чем A=B+C+D. Подобные команды были OR, ANDи XOR.

Большинство дополнений в 2200B были связаны с вводом / выводом и в основном с работой с файлами гибких дисков. Он представил концепцию наличия нескольких различных типов файлов, включая файл данных, обозначенных префиксом «DA» в командах файла. Множество других команд поддерживало работу с этими файлами, в том числе COPYдля дублирования файла MOVEвнутри файла, VERIFYфайлов, а также SCRATCHдля стирания файла или SCRATCH DISKдля стирания всего.

2200C [ править ]

В отличие от версии 2200B, которая была основным расширением 2200A, 2200C был гораздо более ограничен по объему. Он добавил COM CLEARкоманду для очистки общих переменных, версию DEFFN'возвращаемого шестнадцатеричного RETURN CLEARкода , которая использовалась для «выталкивания» GOSUB из стека [47] и ON ERRORдля перехвата ошибок в программе.

2200T [ править ]

В более поздних моделях этой серии были добавлены некоторые или все команды версий B или C, но только 2200T расширила их. Наиболее примечательным в расширениях было добавление математических вычислений, но также были добавлены некоторые детали ввода / вывода.

Матричные математические команды были в основном идентичны тем, которые использовались в более поздних версиях Dartmouth BASIC. Обычно они принимают форму присваивания, например LET, но заменяют LET на MAT. Так , например, MAT A=B+Cбудет производить матрицу А, элементы которого были суммы соответствующих элементов в матрице В и С. [54] Другие команды включают в себя матричные INVERT, IDNдля единичной матрицы , и ZERдля нулевой матрицы, а также различные утилиты , как COPY, MERGE, MOVEи SORT. [45]

BASIC-2 [ править ]

Введение совершенно нового набора команд 2200VP потребовало написания совершенно нового BASIC с нуля. Хотя основной целью была обратная совместимость , новый BASIC-2 также добавил ряд недостающих функций. Наиболее заметным изменением было то, что BASIC больше не хранился в постоянной памяти (ROM), а вместо этого загружался с диска во время загрузки, что позволяло легко исправлять его в полевых условиях для исправления ошибок. Кроме того, он был намного быстрее, примерно в восемь раз, благодаря большей производительности, чем размеру, и лучшей производительности платформы VP. [55]

Операторы IF были ограничены в исходной версии и были значительно улучшены в BASIC-2. Булевы конъюнкции были добавлены, что позволяет более сложные тесты , как IF X=5 AND Y=10 THEN...оператор , следующий Тогдашний больше не было , не было подразумеваемой GOTO, позволяя общие заявления типа IF X=10 THEN PRINT "IT IS TEN". Было ELSEдобавлено предложение, после которого следовало поставить двоеточие; IF X=10 THEN PRINT "IT IS TEN":ELSE PRINT "IT IS NOT TEN". ELSE можно также использовать с операторами ON; ON X GOTO 10,20,30:ELSE 100будет переходить к строкам 10, 20 или 30, если значение в X равно 1, 2 или 3, в то время как любое другое значение будет переходить к 100. [55]

Новые функции включают FIXокругление всегда в сторону нуля вместо INT, которое всегда округляется в меньшую сторону; FIX(-4.5)возвращает -4, тогда как INT(-4.5)возвращает -5. ROUND(value,num)аналогичен FIX, но округляется до десятичного разряда, указанного во втором параметре. MODвыполняет целочисленное деление и возвращает остаток. MAX(a,b,c...)и MIN(d,e,f...)вернул значение из списка входов с наибольшим или наименьшим значением. LGTвозвращает десятичный логарифм значения. VERпроверяет, соответствует ли строка в первом параметре формату во втором, формат был таким же, как PRINTUSING. [55]

PRINTUSING теперь может выводить в строку; PRINTUSING TO A$, "#.##", SQR(3)форматирует квадратный корень из трех-двух десятичных знаков и помещает результат в A $. В PRINT было добавлено несколько новых псевдофункций; AT(X,Y)функция была аналогична концепцией к TAB, но перемещается курсор на X, Y местоположение, BOX(W,H)обратила коробку заданной ширины и высот для с верхним левым углом в текущей позиции курсора, и HEXOF(v)возвращается шестнадцатеричное значение. [55]

Размер строки по умолчанию не изменился, но максимальный размер увеличился с 64 до 124 символов. Максимальные размеры массива увеличены с 255 до 65535 элементов. [55]

BASIC-3 [ править ]

В марте 1977 года Ван анонсировал расширенную версию системы VP, которая включала в себя больше памяти до 256 КБ и систему терминального сервера, позволяющую одной машине поддерживать до двенадцати терминалов. Первые блоки, известные как 2200MVP, были отправлены в январе 1978 года. В 1980 году были поставлены модели LVP для четырех пользователей и SVP для одного пользователя. [56]

2 апреля 1981 года на Ганноверской ярмарке Ван объявил о крупном обновлении микрокода серии MVP. Вариант "C" за 2000 долларов добавил компилятор COBOL, а также еще более обновленную версию BASIC, BASIC-3. В то время они планировали выпустить его в виде бета-версии в августе, а для всех клиентов - в ноябре. [57] Система была отправлена ​​на небольшое количество сайтов для бета-тестирования, но так и не была выпущена. [58]

Заметки [ править ]

  1. ^ Ван уже давно выпускает бизнес-калькуляторы с использованием BCD, так что для компании это не было чем-то необычным.
  2. ^ См., Например,широкоиспользуемый Super Star TrekRND(0) .
  3. ^ Похоже, это было взято из HP Time-Shared BASIC , который был идентичным. Несколько BASIC эпохи домашних компьютеров также использовали вариации этой модели, особенно Integer BASIC и Atari BASIC .
  4. ^ Другие BASIC, в которых была эта функция, обычно использовали полный терминCOMMON.

Ссылки [ править ]

Цитаты [ править ]

  1. ^ WangBASIC 1976 , стр. 46.
  2. ^ WangBASIC 1976 , стр. 125.
  3. ^ WangBASIC 1976 , стр. 123.
  4. ^ WangBASIC 1976 , стр. 14.
  5. ^ WangBASIC 1976 , стр. 60.
  6. ^ WangBASIC 1976 , стр. 65.
  7. ^ WangBASIC 1976 , стр. 116.
  8. ^ WangBASIC 1976 , стр. 121.
  9. ^ WangBASIC 1976 , стр. 118.
  10. Перейти ↑ Commodore 1982 , p. 62.
  11. ^ WangBASIC 1976 , стр. 8.
  12. ^ a b WangBASIC 1976 , стр. 274.
  13. ^ WangBASIC 1976 , стр. 124.
  14. Перейти ↑ Commodore 1982 , p. 39.
  15. ^ "ОСНОВНОЕ сравнение" .
  16. ^ WangBASIC 1976 , стр. 158-159.
  17. ^ WangBASIC 1976 , стр. 162.
  18. ^ WangBASIC 1976 , стр. 169.
  19. ^ WangBASIC 1976 , стр. 172.
  20. ^ WangBASIC 1976 , стр. 56.
  21. ^ WangBASIC 1976 , стр. 102.
  22. ^ WangBASIC 1976 , стр. 20.
  23. ^ WangBASIC 1976 , стр. 135.
  24. ^ WangBASIC 1976 , стр. 210.
  25. ^ WangBASIC 1976 , стр. 49.
  26. ^ WangBASIC 1976 , стр. 82.
  27. ^ WangBASIC 1976 , стр. 83.
  28. ^ WangBASIC 1976 , стр. 78.
  29. ^ a b WangBASIC 1976 , стр. 81.
  30. ^ WangBASIC 1976 , стр. 106.
  31. ^ WangBASIC 1976 , стр. 107.
  32. ^ WangBASIC 1976 , стр. 137.
  33. ^ WangBASIC 1976 , стр. 128.
  34. ^ WangBASIC 1976 , стр. 139.
  35. ^ WangBASIC 1976 , стр. 185.
  36. ^ WangBASIC 1976 , стр. 189.
  37. ^ a b WangBASIC 1976 , стр. 190.
  38. Перейти ↑ Commodore 1982 , p. 34.
  39. ^ WangBASIC 1976 , стр. 145-150.
  40. ^ a b WangBASIC 1976 , стр. 20-21.
  41. ^ WangBASIC 1976 , стр. 272.
  42. ^ WangBASIC 1976 , стр. 275.
  43. ^ WangBASIC 1976 , стр. 277.
  44. ^ WangBASIC 1976 , стр. 273.
  45. ^ a b Введение 1976 , стр. 2.
  46. ^ WangBASIC 1976 , стр. 130.
  47. ^ a b WangBASIC 1976 , стр. 156.
  48. ^ WangBASIC 1976 , стр. 192.
  49. ^ a b WangBASIC 1976 , стр. 193.
  50. ^ WangBASIC 1976 , стр. 183.
  51. ^ WangBASIC 1976 , стр. 196.
  52. Перейти ↑ Commodore 1982 , p. 37.
  53. ^ WangBASIC 1976 , стр. 188.
  54. ^ WangBASIC 1976 , стр. 215.
  55. ^ а б в г д BASIC2 1979 .
  56. ^ Программируемые терминалы (PDF) . Datapro Research. Февраль 1981 г.
  57. ^ «Улучшения серии 2200» (PDF) . 2 апреля 1981 г.
  58. ^ "2200 BASIC-3" (PDF) . Ван Лаборатории.

Библиография [ править ]

  • Wang BASIC Language Programming Manual (PDF) . Ван Лаборатории. 1976 г.
  • Справочное руководство по языку Wang BASIC-2 (PDF) . Ван Лаборатории. 1979 г.
  • 2200 Системный вариант "C" (PDF) . Ван Лаборатории. Февраль 1982 г.
  • 2200 Вводное руководство (PDF) . Ван Лаборатории. 1976 г.
  • Справочное руководство программиста Commodore 64 (PDF) . Commodore Business Machines. 1982 г.