Работа в консоли
В FreeBasic есть определенное кол-во команд для работы в консоли. Консоль в FreeBasic сделана настолько удобной, как ни в одном другом современном языке Basic. Так в любой из статей в примерах достаточно было просто указать оператор ? и за ним значение. Этого было достаточно в системе Windows, для того чтобы вывести это значение в консоль. Для системы Linux все примеры работают точно так же , за исключением примеров с функциями Windows API. Разработчики сохранили легендарные консольные операторы первых диалектов Basic: Print , Input , Cls , Inkey По сути в первых диалектах все происходило в консоли. Помню время, когда на уроках информатики за популярным в то время советским УКНЦ , я впервые не в рамках уроков, познакомился с первым бейсиковским оператором: ? Какова же была моя радость, когда в FreeBasic я увидел его. Прелесть консольных операторов в том, что их одинакого можно использовать как в текстовом режиме , так и в графическом. Ведь команда Screen с цифрой больше нуля открывает уже не стандартное окно консоли, вызываемое с помощью CMD.exe , а окно с графическим режимом отображения. Огромное кол-во демосцен и игр написано в графическом режиме консоли. Однако в этой статье мы ограничимся только рассмотрением текстового режима.
Запись значений в окно консоли
Для записи значений в окно консоли есть три оператора:
- Print или ? - обычная запись в окно консоли
- Print Using - запись с форматированием текста
- Write - еще одна возможная запись, отличающаяся от Print
Сначала поговорим об операторе Print
Если нужно выводить несколько значений слитно, то достаточно передавать аргументы, разделяя оператором ;
Пример:
Print 1; "77" Sleep
Вот так! Ничего не надо преобразовывать, оператор Print все сделает сам и выведет в консоль цифру 177.
Если встанет необходимость выводить аргументы раздельно с табуляцией, то вместо оператора ; нужно использовать оператор ,
Пример:
Print 1 , "77" Sleep
Команда Print на самом деле очень многофункциональная команда. Ее
использование далеко не ограничивается в работе с консолью. В других статьях мы
это разберем.
Команда Print Using позволяет записывать значения с использованием расширенного форматирования. У этой команды два параметра:
- любая строка, содержащая символы нужного форматирования
- список аргументов
Принцип ее таков:
Берется строка из первого параметра как основа, далее в зависимости от специальных символов форматирования, размещенных в ней, размещаются аргументы из второго параметра, которых может быть несколько. Специальные символы подразделяются на 2 группы:
- для работы со строковыми типами аргументов
- ! - печатает первый символ строки аргумента
- \\ - печатает пару символов строки аргумента, кол-во печатываемых символов может изменяеться кол-вом пробелов между \ \
- & - печатает всю строку
- для работы с числовыми типами аргументов
- # - резервирование места для одной цифры из аргумента п печать. Кол-во цифр регулируется кол-вом этого символа
- & - печатает все число
- . - ставится точка между # для определения дробных чисел
- , - ставится между символами # для разделения числа в группы по три цифры
- + - ставится тандемом с # для вывода знака числа
- ^^^^ - ставится между символами # и дает возможность записи экспоненциального представления числа. Число при этом округляется.
Если нужно в строке использовать один из выше описанных символов не для
форматирования, а просто как часть строки, то перед этими символами нужно
ставить знак нижнего подчеркивания _ , пример _!
Если при использовании
форматирующих символов, места для всех цифр не хватает, то перед числом
выводится знак %
А теперь общий пример для всех используемых форматирующих символов:
Print Using " The value & seconds "; 1 , 555588 Print Using " The value & seconds "; 1 , "555588" Print Using " The value & seconds and & millisecond"; 1,"0.555588" Print Using " The value ### seconds"; 199 Print Using " The value # seconds"; 199 Print Using " The first simvol= !"; "freebasic" Print Using " The five simvols= \ \"; "freebasic" Print Using " The value= ###.##"; 667.766 Print Using " The value= #####"; 667.766 Print Using " The value= ####,##"; 667766 Print Using " The value= ###^^^^#"; 667766 Print Using " The value= _#_#_#_# & "; 667766 Print Using "+###"; 3; -3 Print Using "###+"; 3; -3 Sleep
Оператор Write имеет в себе полезную возможность записывать список
значений для вывода в консоль через запятую без табуляции.
Пример:
Write 10,20,30 Print 10,20,30 Sleep
Разница между print и write очевидна. Оператор Write так же не ограничивается консолью и имеет в себе другие возможности и об этом мы тоже поговорим в отдельной статье.
Форматирование с помощью SPC
Команда SPC позволяет разделять слова нужным кол-вом пробелов. У нее всего один параметр: число нужных пробелов. Пример:
? "FreeBasic"; Spc(20) ;"on 1 place among Basic" Sleep
Форматирование с помощью TAB
Команда TAB позволяет переносить слова на нужный столбец в консоли. У нее всего один параметр: число нужных отступов. Если на этой же строке есть запись и перенос следующего слова попадает на один из занятых символом мест, то команда TAB перенесет слово на другую строку. Пример:
Print "foo"; Tab(5) ; "bar" Print "hello" ; Tab(3) ; "world" Sleep
Установка или получение кол-ва столбцов и строк консоли
Данной возможностью обладает одна функция Width. Если ее использовать для получения значений, то она работает без параметров. Ее возвращаемое значение кол-ва строк и столбцов находится в одном 32 битном числе. Они находятся в двух половинках числа, каждое в своих 16 битах. И чтобы получить их по отдельности, нужно применить дополнительно соответствующие функции Loword для столбцов и Hiword для строк. Пример:
Dim As Integer w w = Width Print "rows: " & Hiword(w) Print "cols: " & Loword(w) Sleep
Для того, чтобы установить нужные кол-ва строк и(или) столбцов консоли,
вам просто надо вызвать функцию WIDTH с одним или с двумя параметрами. Оба
являются необязательными , первый кол-во столбцов, второй кол-во строк.
Пример:
Width 100,65 Sleep
Или можно так (изменяем только строки):
Width ,65 Sleep
Установка рабочей области для вывода текстовой информации
Такую возможность предоставляет функция VIEW PRINT. Она имеет два параметра:
- первая устанавливаемая вами рабочая строка
- последняя рабочая строка
View Print 10 To 11 Print 10,20,30,40 Sleep
В данном примере весь текст будет находится только на 10 строке.
Получение расположения курсора
Для получения положения курсора в строке можно применить функцию
POS
Для получения номера самой строки можно использовать функцию CsrLin
Print "The cursor is on position:"; Pos Print "The cursor is on row:"; Csrlin Sleep
Установка позиции курсора
Для установки позиции курсора можно использовать функцию Locate. Она имеет три параметра:
-
номер строки
-
номер столбца
-
флаг установки курсора (если 0 , не отображать курсор) .
Пример:
Locate 10,20,0 Print "FreeBasic" Sleep
Получение вводимых значений от пользователя
Данную возможность предоставляет команда Input, имеющая в себе два параметра:
-
Текст подсказка для пользователя, выводимая в консоль
-
Список переменных, разделенных запятой, для присвоения им значения(й), которые вводит пользователь (вводить несколько переменных надо с использованием запятых)
Пример:
Dim As Integer A,B Input "Input 3 numbers ",A,B Print A,B Sleep
Кроме команды Input есть еще две функции. Одна носит тоже название
Input(), но имеет другой синтаксис записи и другую возможность. Вторая имеет
название Line Input() и возвращает только строковое значение введенной
пользователем строки в консоль.
Функция Input() имеет один параметр: кол-во
вводимых символов от пользователя. Данная фича может быть полезна, когда нужно
определить ограничение ввода. Кроме того функция не ждет от пользователя
подтверждения ввода с помощью клавиши ENTER. Как только нужное кол-во будет
введено, она завершает свою работу, возвращая введенное значение. При вводе
символы не видны.
Функция Line Input() имеет два параметра как у команды
Input и ее синтаксис записи ничем не отличается с той лишь разницей, что эта
функция может получать только один аргумент. Ее главное назначение ввод строки,
содержащей запятые. Ведь у команды Input запятые используются для разделения
вводимых аргументов.
Dim As String A A=Input (1) Print A Line Input "Input string: ",A Print A Sleep
Возвращение нажатой клавиши
Для получения строкового представления нажатой клавиши пользователем есть функция InKey.
Пример: (перед запуском примера не забудьте переключить раскладку на английскую и выключить CAPS LOCK.)
Print "press q to quit" Do Loop Until Inkey = "q"
Для получения ASCII кода нажатой клавиши можно использовать функцию GetKey
Print "press q to quit" Do ? Chr(Getkey) Loop Until Getkey = Asc("q")
Очистка экрана консоли
Команда CLS позволяет очищать консоль цветом фона (по умолчанию черный).
Пример:
Print 10 Sleep(2000) Cls Sleep
Ниже рассматриваемая функция COLOR может изменять цвет фона
Изменение и получение цвета выводимой информации
Для того, чтобы изменить цвет текста и цвет фона в консоли можно использовать функцию COLOR, которая имеет два параметра:
- Цвет текста
- Цвет фона текста
Color(1,2) Print "FreeBasic" Color(3,4) Print "FreeBasic" Sleep
Однако если использовать команду CLS , то можно изменить не только цвет фона текста, но и цвет всего консольного окна
Color(11,1) Cls Print "FreeBasic" Color(12) Print "FreeBasic" Sleep
Для того, чтобы получить цвета текста и фона, можно использовать либо эту
же функцию COLOR , либо функцию Screen , которую рассмотрим ниже.
Как и в случае с функцией WIDTH , рассмотренной выше, при получения значения цвета с помощью COLOR , данная функция возвращает сразу оба значения в одно 32 битное число. И получить отдельно цвет текста и фона можно так же с помощью функций Loword (цвет текста) и Hiword (цвет фона)
Пример:
Dim As Integer All ALL = Color ? Loword(ALL) ? Hiword(ALL) Sleep
Получение символа из консоли
Для получения символа имеющего место в консоли, можно применить функцию Screen, которая имеет 3 параметра:
- номер строки
- номер столбца
- флаг (если будет 0, то возвращается ASCII код символа, в противном случае функция возвратит значение цвета фона и цвета текста)
Пример:
Print "FreeBasic" ? Chr(Screen(1,5)) Sleep
В данном примере мы не только получили ASCII символ, находящийся в 1
строке и в 5 столбце из консоли, но и преобразовали его сразу функцией CHR. В
примере мы не стали использовать третий параметр, поскольку для получения
символа он не требуется. Но если использовать данную функцию для получения
цвета, то в третьем параметре нужно передать единичку. Я покажу пример получения
цвета с помощью Screen, но объяснять его не буду, поскольку в нем приходится
использовать битовые операторы для преобразования, которые мы с вами не
рассматривали. Понимание их работы не самое простое и изучение их достойно
отдельной главы.
Пример:
Color 4, 11 Print "Z" Dim As Uinteger col, fg, bg col = Screen(1, 1, 1) fg = col And &HF bg = (col Shr 4) Print fg,bg Sleep
Я думаю для текстового режима консоли информации более чем достаточно. На
самом деле, в FreeBasic трудно провести грань между текстовым и графическим
режимом, особенно это касается системы Linux.
Всего доброго!
содержание | назад | вперед