|
Программирование на Си - Система программирования на языке Си фирмы HiSoft (vl.l)
|
Система программирования на языке Си фирмы HiSoft (в дальнейшем называемая Си-системой) состоит из двух компонент: текстового редактора и компилятора. Соответственно, имеется, за основных режима: режим редактирования и режим компиляции. Рассмотрим особенности работы в этих режимах.
В режиме редактирования производится ввод и исправление текста программы. Управление осуществляется следующими клавишами:
«С» - переход в режим компиляции.
«В» - возврат в Бейсик-систему; повторный вызов Си-системы производится с помощью команды RANDOMIZE USR 25200.
«In1,n2» - переход в подрежим ввода текста. Строки текста автоматически нумеруются начиная с nl, номер увеличивается на n2 при переходе к следующей строке. Выход из этого подрежима осуществляется нажатием «CapsShift»+»1».
«Nnl,n2» - перенумерация строк текста. Первой строке присваивается номер nl, а n2 - приращение номеров в последовательных строках.
«Dnl,n2» - удаление строк с номерами от nl до n2.
Сергей Кауль
«Mnl,n2» - копирование строки nl в строку n2.
«Lnl,n2» - вывод на экран текста программы начиная со строки nl до строки n2. После заполнения части экрана вывод приостанавливается, позволяя просмотреть выведенную порцию текста. Вывод может быть прерван нажатием «CapsShift»+«l», нажатие любых других клавиш приведет к выводу следующей порции текста.
«Knl» - изменение размера порции текста выводимой командой «L». nl задает новое количество строк в порции.
«V» - вывод на экран текущих значений основных параметров (первый и второй параметры команд по умолчанию, адрес начала и конца текстового буфера).
«Pnl,n2,filename» - запись на магнитофон (или микродрайв, если он имеется) текста программы от строки nl до строки n2. Запись производится в файл с именем filename.
«G,,filename» - чтение с магнитофона файла filename. Если в памяти уже находится некоторая программа, то содержимое файла будет размещаться после нее.
«Fnl,n2,text1,text2» - поиск текста text1 (образец поиска), начиная со Строки nl и кончая строкой n2, с возможной заменой text1 на text2. После того, как образец поиска найден, автоматически происходит переход в подрежим редактирования строки (см. ниже), где можно осуществить замену text1 на text2 («S»), продолжить поиск («F») или вручную отредактировать найденную строку.
«Еn1» - переход в подрежим редактирования строки с номером nl. В этом подрежиме допускаются следующие команды:
«CapsShift»+«5» - перемещение курсора на одну позицию влево;
«CapsShift»+«8» - перемещение курсора на одну позицию вправо;
«Enter» - завершение редактирования строки;
«Q» - завершение редактирования строки с отменой внесенных изменений;
«R» - стирание редактируемой строки;
«L» - повторный вывод на экран редактируемой строки;
«К» - удаление символа, находящегося правее курсора;
«Z» - удаление всех символов правее курсора;
«I» - переход в подрежим вставки символов, при этом на фоне мерцающего курсора отображается «*», выход из подрежима вставки происходит после нажатия «Enter»;
«X» - перемещение курсора в конец редактируемой строки и переход в подрежим вставки символов;
«С» - переход в подрежим замены символов, при этом на фоне мерцающего курсора отображается «+», выход из подрежима замены происходит после нажатия «Enter»;
«F» - поиск следующего образца поиска;
«S» - замена найденного образца поиска на заменяющий текст и поиск следующего образца
В режиме компиляции осуществляется перевод (компиляция, транслирование) текста программы на языке Си в коды микропроцессора. Переход из режима компиляции в режим редактирования производится нажатием «CapsShift»+«1». Компиляция осуществляется в два этапа. На первом этапе производится предварительная обработка текста; подсистема, которая осуществляет эту работу, называется препроцессором. Все команды препроцессора начинаются с символа «#». Сразу следует оговориться, что возможности описываемого препроцессора существенно хуже, чем фактически сложившийся стандарт, но что поделаешь, - 48 килобайт памяти и внешняя память на магнитной ленте не позволяют размахнуться слишком широко.
Итак, перейдем к командам препроцессора.
define ИМЯ ЗНАЧЕНИЕ - заменяет каждое вхождение текста. ИМЯ на текст ЗНАЧЕНИЕ. Например,
define ZERO 0
include «ИМЯфайла» - приводит к включению содержимого файла ИМЯфайла в текст программы. Поскольку текстовый буфер при этом не увеличивается то эту возможность обычно используют для разбиения больших программ, не помещающихся в текстовый буфер, на относительно небольшие фрагменты, хранящиеся в файлах. Кроме того, с помощью этой команды производится подключение библиотек стандартных подпрограмм. Например,
include «screen» - приводит к считыванию с магнитофона файла screen и включению его в текст программы.
include «A:screen» - то-же самое, но только чтение с микрорайва или дисковода (в зависимости от варианта Си-системы).
translate «ИМЯфайла» - скомпилировать программу и записать ее в файл ИМЯфайла. В последующем загрузка и запуск этой программы осуществляются из Бейсик-системы с помощью команд LOAD «ИМЯфайла»СОDЕ: RANDOMIZE USR 25200. При компиляции программы без команды #translate в памяти находятся сама Си-система, текст программы, таблицы имен, область глобальных переменных, стек, генерируемый компилятором код программы, и область свободной памяти. Все они размещены в памяти начиная с адреса 25200 и выше. Если компиляция осуществлена с командой #translate, то после завершения компиляции сгенерированный код программы перемещается в область Си-системы, уничтожая ее, а область глобальных переменных, стек и область свободной памяти расширяются, захватывая память, которая ранее была, распределена под текст программы и таблицы имен. Этот механизм нужно понимать и не волноваться, если у вас не хватает памяти во время отладки. Уменьшайте размеры массивов и отлаживайте задачу, а перед тем, как компилировать ее с командой #translate установите нужные размеры и, скорее всего памяти окажется достаточно.
include - заставляет препроцессор обработать текстовый буфер. Все остальные команды препроцессора обычно включают в текстовый буфер или файлы, подключаемые командой #include « ИМЯфайла».
ЗАМЕЧАНИЯ.
Команда #translate должна находиться в самом начале текстового буфера, или должна вводиться с клавиатуры перед командой #include.
Команда #include «ИМЯфайла» не может быть вложенной, т.е. она может встречаться только в текстовой буфере.
Переход ко второму этапу компиляции произвоДится совместным нажатием клавиш «SymbolShift» и «I» (латинское «И»). Если второй этап завершился нормально, то на экране появится сообщение «type y for run» (нажмите «y» для запуска программы). Нажатие клавиши «Y» приведет к выполнению программы, нажатие любой другой клавиши вызовет возврат в режим компиляции.
Завершим первое знакомство с Си-системой примером простейшего сеанса работы. Сначала загрузим Си-систему с ленты. После загрузки на экране появится сообщение «Save to Microdrive 1 (y/n)?». Если к вашему компьютеру подключен микродрайв, отвечайте «Y» (при этом видимо произойдет запись на микродрайв), все остальные должны отвечать «N», после чего на экране появляется текст «HISOFT С Compiler…», свидетельствующий о том, что мы оказались в режиме компиляции.
Перейдем в режим редактирования. Для этого нажмем «CapsShift»+«l» и «Enter». Теперь на экране возникнет надпись «edit:». Перейдем в подрежим ввода текста, набирая на клавиатуре «I10,10» и «Enter». После появления номера строки 10 наберем текст main() и «Enter». На экране появляется следующий номер - 20. Теперь набираем {printf («hello»); rawin ();} и «Enter». Программа введена в текстовый буфер, поэтому надо закончить ввод. Нажмем «CapsShiff+«1» и «Enter».
Скомпилируем программу. Для этого нажав «С» и «Enter» перейдем в режим компиляции. Запустим компилятор командой #include. Если никаких сообщений типа «ERROR ...» нет, а на экране только листинг программы, значит вы правильно ввели текст. В противном случае нужно вернуться в режим редактирования, внимательно просмотреть текст и исправить ошибки. Переходим ко второму этапу компиляции нажав «SymbolShiff+«I». После появления надписи «type у for run» нужно нажать «Y». Нажмем. Программа начала выполняться. Оператор printf («hello») выводит на экран текст hello. Оператор rawin() ожидает ввода с клавиатуры. Нажав любую клавишу мы завершим этот оператор, вслед за чем закончится выполнение и всей программы. На экране вновь появляется надпись «type у for run», позволяя повторно запустить программу. Мы не будем этого больше делать и нажмем «N».
Программа отлажена. Теперь оттранслируем ее и запишем сгенерированный код на ленту. Для этого наберем #translate «hel» и «Enter», затем #include и «Enter». Теперь нужно включить магнитофон на за¬пись и нажать «SymbolShift»+«I». Записанную программу можно загру¬зить командой LOAD «hel»CODE или просто LOAD «»CODE, а затем запустить на выполнение командой RANDOMIZE USR 25200.
(продолжение следует)
|