ПРОЦЕДУРЫ И ФУНКЦИИ ДАТЫ И ВРЕМЕНИ

Стандартная дата

Стандартная дата Кларион - это число дней, прошедших с 28 декабря 1800 года. Доступны даты в диапазоне от 1 января 1801 (стандартная дата 4) до 31 декабря 2099 (стандартная дата 109211). Функции работы с датой не могут вернуть правильных результатов для значений, выходящих за эти пределы. Календарь стандартной даты подстраивается для високосных лет в диапазоне доступных дат.

Обычно, в качестве стандартной даты используются данные типа LONG описанные в шаблоне даты (@D). Типа данных DATE - это формат данных, используемый менеджером записей Btrieve. Поля DATE преобразуются в LONG, содержащее стандартную дату Кларион перед выполнением любых математических операций или операций работы с датами. Таким образом, DATE стоит использовать для файловой совместимости с Btrieve, а LONG для других файловых систем.

Стандартное время

Стандартное время Кларион - это число сотых долей секунды, прошедших с полуночи. Допустимые пределы: от 1 (что мы приняли за полночь) до 8,640,00 (23:59:59:99). Стандартное время 1 точно соответствует полуночи. Хотя время и выражается с точностью до сотых долей секунды, системный таймер обновляется только 18.2 раза в секунду (приблизительно каждые 5.5 сотых секунды).

Обычно, в качестве стандартного времени используются данные типа LONG описанные в шаблоне времени (@T). Тип данных TIME используется в менеджере записей Btrieve. Поля типа TIME преобразуются в LONG, содержащее стандартное время Кларион перед выполнением любых математических операций или операций со временем. Таким образом, DATE имеет смысл использовать для файловой совместимости с Btrieve, а LONG - во всех остальных случаях.

TODAY (системная дата)



      TODAY()

Функция TODAY возвращает системную дату DOS в формате стандартной даты Кларион.

Возвращаемый тип данных: LONG

Пример:


    SETTODAY(TODAY() + 1)  !Установить завтрашнюю дату

    OrderDate = TODAY()   !Проставить на счете сегодняшнюю дату

SETTODAY (установка системной даты)



      SETTODAY(дата)

дата Числовая константа, переменная или выражение, содержащее стандартную дату.

Оператор SETTODAY устанавливает системную дату ДОС.

Пример:


     SETTODAY(TODAY() + 1)       !Установим завтрашнюю дату

CLOCK (системное время)



      CLOCK()

Функция CLOCK возвращает время дня, исходя из системного времени ДОС.

Возвращаемый тип данных: LONG

Пример:


    Time = CLOCK()           !Сохраняем системное время

    SHOW(1,1,CLOCK(),@T4)        !Показать системное время

SETCLOCK (установка системного времени)



      SETCLOCK(время)

время Числовая константа, переменная или выражение, содержащее стандартное время, выраженное в сотых долях секунды).

Оператор SETCLOCK останавливает системное время ДОС.

Пример:


    SETCLOCK(1)              ! Да настанет полночь!!!

DATE (стандартная дата)



      DATE(месяц,число,год)

месяц Числовая константа, переменная или выражение, задающее месяц.
число Числовая константа, переменная или выражение, задающее число месяца.
год Числовая константа, переменная или выражение, задающее год, в диапазоне от 00 до 99 (что означает годы 1900-1999) либо от 1801 до 2099

Функция DATE возвращает стандартную дату для заданных месяца, числа и года. Параметры МЕСЯЦ и ДЕНЬ могут иметь значения, выходящие за пределы разумного. Скажем, 13й месяц рассматривается как январь следующего года. А день 32 января рассматривается как 1е февраля. Соответственно, DATE(12,32,87), DATE(13,1,87) и DATE(1,1,88) означают один и тот же день.

Возвращаемый тип данных: LONG

Пример:


    HireDate = DATE(Hir:Month,Hir:Day,Hir:Year) !Вычисляем дату

                                                ! приема на работу

См. также: Стандартная дата

DAY (день месяца для заданной даты)



      DAY(дата)

дата Числовая константа, переменная, выражение или метка переменной типа STRING, CSTRING или PSTRING, описанной в шаблоне даты. ДАТА должна быть стандартной датой. Переменная, описанная в шаблоне даты, автоматически преобразуется в промежуточное значение - стандартную дату.

Функция DAY вычисляет число месяца (1..31) для заданной стандартной даты.

Возвращаемый тип данных: LONG

Пример:


    OutDay = DAY(TODAY())      !Какое у нас сегодня число?

    DueDay = DAY(TODAY()+2)     !Вычисляем день выплат

См. также: Стандартная дата

MONTH (месяц для заданной даты)



      MONTH(дата)

дата Числовая константа, переменная, выражение или метка переменной типа STRING, CSTRING или PSTRING, описанной в шаблоне даты. ДАТА должна быть стандартной датой. Переменная, описанная в шаблоне даты, автоматически преобразуется в промежуточное значение - стандартную дату.

Функция MONTH возвращает месяц года (1..12) для заданной стандартной даты.

Возвращаемый тип данных: LONG

Пример:


    PayMonth = MONTH(DueDate)     !Месяц выплаты

См. также: Стандартная дата

YEAR (год для заданной даты)



      YEAR(дата)

дата Числовая константа, переменная, выражение или метка переменной типа STRING, CSTRING или PSTRING, описанной в шаблоне даты. ДАТА должна быть стандартной датой. Переменная, описанная в шаблоне даты, автоматически пре образуется в промежуточное значение - стандартную дату.

Функция YEAR возвращает четыре цифры номера года для заданной стандартной даты (1801 to 2099).

Возвращаемый тип данных: LONG

Пример:


    IF YEAR(LastOrd) < YEAR(TODAY())

              !Если дата последнего счета не в этом году,

     DO StartNewYear ! то начнем новый год

    .

См. также: Стандартная дата

AGE (возраст от базовой даты)



      AGE(дата_рождения,базовая_дата)

дата_рождения Числовое выражение для стандартной даты.
базовая_дата Числовое выражение для стандартной даты. Если пропущена, то для вычислений берется системная дата ДОС.

Функция AGE возвращает строку, содержащую время, прошедшее между двумя датами. Возвращаемая строка имеет такой формат:


     1..60 дней      - 'nn DAYS'

     61 день..24 месяца  - 'nn MOS'

     2 года..999 лет   - 'nnn YRS'

Возвращаемый тип данных: STRING

Пример:


    Message = 'Работнику ' & Emp:Name & 'на сегодняшний день' |

    & AGE(Emp:DOB.TODAYo)

                !Выводим возраст работника в сообщении

См. также: Стандартная дата

ПРОЦЕДУРЫ И ФУНКЦИИ ДОС

COMMAND (командная строка)



      COMMAND(флаг[,операция])

флаг Строковая константа или переменная, содержащая искомый параметр или номер параметра в командной строке.
операция Целочисленная константа или переменная в диапазоне от 0 до 3. Если пропущена, то по умолчанию 0.

Функция COMMAND возвращает значение параметра ФЛАГ из командной строки, файла конфигурации или переменной окружения. Если ФЛАГ не найден, COMMAND возвращает пустую строку. Если ФЛАГ описан многократно, то возвращается его первое значение.

ОПЕРАЦИЯ указывает где искать:


    3   в командной строке

    2   в файле конфигурации

    1   в окружении

    0   во всех трех предыдущих, в порядке 3-2-1

COMMAND ищет выражение ФЛАГ=VALUE и возвращает VALUE. Не должно быть пробелов между ФЛАГОМ, знаком равенства и VALUE. Из конфигурационного файла или окружения возвращается все, что находится справа от знака равенства. VALUE, получаемое из командной строки считывается до первой запятой или пробела. Если пробел или запятая являются значением ФЛАГА, то все, что стоит справа от знака равенства, должно заключаться в двойные кавычки (ФЛАГ="VALUE").

Также, COMMAND ищет в командной строке ФЛАГ, перед которым стоит слэш (/). Если такое найдено, то COMMAND возвращает значение ФЛАГА без слэша. Если ФЛАГ содержит только число, то COMMAND возвращает параметр командной строки, номер которого содержится в ФЛАГЕ. Если ФЛАГ пустая строка ('') и ОПЕРАЦИЯ=3, то возвращается вся командная строка, к которой добавлен ведущий пробел.

Файл конфигурации позволяет подстраивать программу во время исполнения. Это текстовый файл, который содержит любые желаемые параметры, которые имеют смысл во время исполнения. Каждый параметр должен занимать отдельную строку. По умолчанию, имя файла конфигурации, это имя программы, к которой этот файл относится, с расширением .INI. Это имя можно изменить из командной строки параметром CLAINI=новое_имя_фалй. CLAINI не утанавливается командой SETCOMMAND.

Возвращаемый тип данных: STRING

Пример:


C:\>MYPROG CLAVM="EMS ... 16,3,6"

             !Параметр в командной строке содержит запятые

   

   C:\>MYPROG CLAINI=INITFILE.INI

              !Вместо MYPROG.INI используем INITFILE.INI

   

    RUN(COMMAND('COMSPEC',1) & '/C DIR /P')

                  !Находим местоположение command.com

                  ! и выполняем команду ДОС

   

    IF COMMAND('/N',3)        !В командной строке есть /N?

     DO SomeProcess

    .

   

    IF UPPER(COMMAND('CLAVM',0)) = 'OFF'

               !Неужели виртуальная память отключена?

     DO NoVirtualMem   ! ну тогда придется обойтись без нее :-(

    ELSE

     DO VirtualMem    ! делаем нечто, интенсивно использущее

   			! память.

    .

   

    CommandString = COMMAND(",3)  !Получаем всю командную строку

   

    SecondParm = COMMAND('2'.3)

             !Получаем из командной строки второй параметр

См. также: SETCOMMAND

MEMORY (доступная память)



      MEMORY([n])

n Числовая константа, переменная или выражение. Допустимы значения 0..4, включительно. Если пропущено, то по умолчанию - 0.

Функция MEMORY возвращает количество доступной свободной памяти в байтах. Если n=0 или n=1, то возвращается доступная стандартная (conventional) память, при n=2 возвращается количество свободной EMS, при n=3 возвращается общее количество свободной виртуальной памяти, и при n=4 возвращается размер максимального доступного блока памяти. Если n не в диапазоне 1..4, то возвращается ноль.

Возвращаемый тип данных: LONG

Пример:


    SysMem = MEMORY() !Возвращается количество

    SysMem = MEMORY(0) ! свободной

    SysMem = MEMORY(1) ! стандартной памяти

    SysMem = MEMORY(2) !Возвращается количество свободной EMS

    SysMem = MEMORY(3) !Возвращается общее количество свободной

    		  ! виртуальной памяти

    SysMem = MEMORY(4) !Возвращается наибольший виртуальный блок

PATH (текущий диск и каталог)



      PATH()

Функция PATH возвращает строку, содержащую текущий диск и каталог

Возвращаемый тип данных: STRING

Пример:


    IF PATH() = 'C:\'              !Если мы в корне

     SHOW(12,12,'Мы сейчас в корневом каталоге')! то сообщим об

   					    ! этом

См. также: SETPATH

RUNCODE (код завершения ДОС)



      RUNCODE()

Функция RUNCODE возвращает код завершения, переданный в ДОС командой, выполненной оператором RUN. Этот код выхода передается оператором HALT в программах на Кларион, и он же является ERRORLEVEL в DOS. Значение, возвращаемое функцией RUNCODE имеет тип LONG и может иметь любое значение, переданное в ДОС как код завершения порожденного процесса.

Порожденный процесс может передать в DOS только значение типа BYTE в качестве кода завершения, поэтому, в качестве кодов завершения не могут использоваться отрицательные числа. Этот факт позволяет функции RUNCODE зарезервировать некоторые значения, чтобы обрабатывать ситуации, в которых код выхода недоступен:


    -0 нормальное завершение

    -1 программа прервана по Ctri-C

    -2 программа прервана из-за критической ошибки

    -3 TSR завершил работу

    -4 программа не запустилась (проверь функцию ERROR())

Возвращаемый тип данных: LONG

Пример:


     RUN('Nextprog.exe')      !Запускаем следующую программу

     IF RUNCODE() = -4

      IF ERROR() = 'Not Enough Memory'

         !Если программа не запустилась из-за нехватки памяти

       SHOW(25,10,'Insufficient memory') ! то сообщить об этом

       RETURN           ! и завершить процедуру

      ELSE

       STOP(ERROR())        ! прервать нашу программу

     . .

См. также: RUN, RUNSMALL, HALT

SETCOMMAND (установить параметры командной строки)



      SETCOMMAND(командная_строка)

командная_строка Строковая константа, переменная или выражение, содержащее новые параметры командной строки.

SETCOMMAND позволяет программе "изнутри" задать параметры командной строки, которые может получить функция COMMAND. SETCOMMAND перекрывает любые параметры командной строки с такими же именами. Чтобы отменить параметр, начинающийся со слэша, добавь к нему знак равенства (=) в новой командной строке.

SETCOMMAND нельзя использовать для установки параметров системного уровня, которые задаются в командной строке при загрузке программы. Эти параметры, как виртуальная память (CLAVM=) или файл конфигурации программы (CLAINI=) должны быть заданы при загрузке и не могут быть изменены с помощью SETCOMMAND. Но каталог для временных файлов (CLATMP=) можно переопределить в SETCOMMAND.

Пример:


   SETCOMMAND(' /N')            !Добавляем параметр /N

   SETCOMMAND(' /N=')           !Отключаем параметр /N

См. также: COMMAND

SETPATH (изменить текущий диск и каталог)



      SETPATH(диск_и_путь)

диск_и_путь Строковая константа или метка переменной типа

   STRING, CSTRING или PSTRING, содержащей специфика-

   цию нового диска и пути. Если пропущена буква диска

   и двлеточие после нее, то подразумевается текущий

   диск.

SETPATH изменяет текущий диск и каталог ДОС. Если диск или каталог заданы неправильно, возвращается ошибка "Путь не существует" (Path Not Found) и текущий каталог не меняется.

Возвращаемые ошибки:


        03 Путь не существует

Пример:


    SETPATH('C:\LEDGER')  !Переходим в каталог бухгалтерских книг

    SETPATH(UserPath)   !Переходим в пользовательский каталог

ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

ADDRESS (адрес памяти)



      ADDRESS(переменная)

переменная Метка элемента данных.

Функцйя ADDRESS возвращает длинное целое (LONG), содержащее адрес ПЕРЕМЕННОЙ в памяти в стандартном формате сегмент:смещение. Эта функция позволяет передать адрес ПЕРЕМЕННОЙ внешним библиотекам, которы могут быть написаны на других языках. Если программа оверлейная, то после завершения процедуры, в которой использовалась значение ADDRESS, это значение не будет соответствовать истине. Это происходит из-за того, что загрузчик оверлеев выпоняет автоматическую подкачку и выгрузку сегментов.

Возвращаемый тип данных: LONG

Пример:


    MAP

     MODULE('External.Obj')   !Внешняя библиотека

      SomeProc(LONG),C     !Передаем параметры как в С

    . .

   

   Varl  CSTRING(10)       !Строка, завершающаяся нулем

       CODE

       SomeProc(ADDRESS(Varl))

              !Передаем адрес Varl во внешнюю процедуру

ERROR (сообщение об ошибке)



      ERROR()

Функция ERROR возвращает строку, содержащую описание возникшей ошибки? Если ошибок не было, то ERROR вернет пустую строку.

Возвращаемый тип данных: STRING

Пример:


    PUT(NameQueue)              !Пишем запись

    IF ERROR() = 'Queue Entry Not Found'   !Если не найдена

     ADD(NameQueue)             ! то добавим новую

      IF ERRORCODE() THEN STOP(ERROR()).

                      !Может еще какие-то ЕГГОГИ?

    .

ERRORCODE (номер кода ошибки)



      ERRORCODE()

Функция ERRORCODE возвращает номер (код) возникшей ошибки. Если ошибок не было, то ERRORCODE возвращает ноль.

Возвращаемый тип данных: LONG

Пример:


    ADD(Location)        !Добавим новую запись

    IF ERRORCODE() = 8     !Не хватает памяти?

     SHOW(1,5,'Памяти мало!') ! сообщим об этом вопиющем факте

    .

ERRORFILE (имя ошибочного файла)



      ERRORFILE()

Функция ERRORFILE возвращает имя файла, при обработке которого возникла ошибка. Если файл открыт, то возвращается его полная спецификация в формате ДОС. Если файл не открыт, то возвращается содержимое атрибута NAME оператора FILE. Если файл не открыт и оператор FILE был без атрибута NAME, то возвращается метка оператора FILE. Если ошибок не было, или возникшая ошибка не связана с файлами, то ERRORFILE возвращает пустую строку.

Возвращаемый тип данных: STRING

Пример:


    ADD(Location)            !Добавляем новый элемент

    IF ERRORCODE()

     SHOW(1,5,'Проблема с файлом ' & ERRORFILE())

                    !Вывести сообщение

     ASK             ! и подождать нажатия на кнопку

    .

IN (читать данные из порта)



      IN(порт,данные)

порт Числовая константа, переменная или выражение, задаюшее номер порта. Список разрешенных номеров портов можно найти в Техническом Руководстве по IBM PC.
данные Метка переменной типа BYTE, SHORT или USHORT. Если ДАННЫЕ типа BYTE, то из порта читается младший байт через регистр AL. Если же ДАННЫЕ типа SHORT или USHORT, то читаются два байта через регистр AX.

Оператор IN читает данные из порта ввода, исполняя машинную команду IN.

Пример:


    IN(61h,SavePPI)           !Сохраняем PPI

    IN(62h,PError)            !Нет ли ошибок четности

См. также: OUT

MAXIMUM (максимальное значение индекса массива)



      MAXIMUM(переменная,индекс)

переменная Метка переменной, описанной с атрибутом DIM.
индекс Числовая константа, переменная или выражение, задающее номер индекса. ИНДЕКС определяет, какое измерение массива передается этой функции.

Функция MAXIMUM возвращает максимальное значение заданного ИНДЕКСА для переменной-массива. Обычно это используется для определения размера массива, переданного в процедуру или функцию.

Возвращаемый тип данных: LONG

Пример:


   Array BYTE,DIM(10,12)      !Описываем двумерный массив

   

   Для массива выше: MAXIMUM(Array,1) вернет 10

             MAXIMUM(Array,2) вернет 12

   

    LOOP X# = 1 TO MAXIMUM(Array,1)

                 !Цикл до конца первого измерения

     LOOP Y# = 1 TO MAXIMUM(Array,2)

                 ! Цикл до конца второго измерения

      Array[X#,Y#] = 27  ! Каждый элемент = 27

    . .           !Конец циклов

См. также: DIM, Массивы как параметры ПРОЦЕДУР и ФУНКЦИЙ

NAME (досовское имя файла или устройства)



      NAME(метка)

  

метка Метка описания отчета или файла.

Функция NAME возвращает строку, содержащую имя в стандарте ДОС для структуры, заданной МЕТКОЙ. Для файлов, если файл открыт, возвращается полная спецификация файла в DOS (диск, путь, имя и расширение). Если файл закрыт, то возвращается содержимое атрибута NAME для этого файла.

Для отчетов, возвращается имя, заданное атрибутом DEVICE. Если отчет выводится в файл и файл открыт, то NAME вернет полную спецификацию этого файла. В противном случае, NAME вернет то, что записано в атрибуте DЕVICE. Если этого атрибута нет, то возвращается PRN.

Возвращаемый тип данных: STRING

Пример:


    OpenFile = NAME(Customer)      !Сохраняем имя открытого файла

    OutputDevice = NAME(AcctRpt)

                   !Сохраняем имя устройства, куда выводится отчет

OMITTED (проверка пропущенных параметров)



        OMITTED(номер)

номер Целочисленная константа или переменная, задающая номер проверяемого параметра.

Функция OMITTED проверяет был ли передан тот или иной параметр в процедуру или функцию. Если искомый параметр пропущен, то возвращается ИСТИНА (1). Если параметр с заданным НОМЕРОМ передан, то возвращается ЛОЖЬ (0). Любой НОМЕР после последнего переданного параметра соответствует пропущенному параметру.

Разрешается пропускать только те параметры, чей тип данных заключен в угловые скобки (<>) в прототипе процедуры или функции в MAP-структуре.

Возвращаемый тип данных: LONG

Пример:


    SomeProc(Fieldl,,Field4)



  Для вышеприведенного примера:

       OMITTED(1)   вернет  0

       OMITTED(2)   вернет  1

       OMITTED(3)   вернет  0

       OMITTED(4)   вернет  1



      PROGRAM

       MAP

        SomeFunction(строка,<LONG>),STRING     !Прототип функции

      .

      CODE

      :

      :



  SomeFunction FUNCTION(Fieldl,Date)

      CODE

      IF OMITTED(2)                 !Если не задана дата,

        Date = TODAY()              ! то подставляем системную.

См. также: Прототипы процедур и функций

OUT (записать данные в порт)



        OUT(порт,данные)

порт Числовая константа, переменная или выражение, задаюшее номер порта. Список разрешенных номеров портов можно найти в Техническом Руководстве по IBM PC.
данные Целочисленная константа, не более чем 65,535 (64К) или метка переменной типа BYTE, SHORT или USHORT. Если ДАННЫЕ типа BYTE, то в порт выводится младший байт через регистр AL. Если же ДАННЫЕ имеют тип SHORT или USHORT, то через регистр AX в порт записываются два байта.

Оператор OUT записывает данные в порт вывода, выполняя машинную команду OUT.

Пример:


    OUT(43h.Control)    !Посылаем байт управления в таймер

    OUT(61h,Speaker)    !Включаем динамик

См. также: IN

PEEK (read memory address)



        PEEK(сегмент:смещение,приемник)

сегмент:смещение Числовая константа, переменная или выражение, задающее адрес памяти. СЕГМЕНТ должен быть в двух старших байтах, а СМЕЩЕНИЕ в двух младших. Если этот параметр типа REAL, то в промежуточное значение преобрзуется только его целая часть, чтобы получить 32-хбитное целое.
приемник Метка переменной.

Оператор PEEK читает данные из памяти по адресу СЕГМЕНТ:СМЕЩЕНИЕ и записывает их в переменную ПРИЕМНИК. PEEK считывает столько байт, чколько нужно, чтобы заполнить ПРИЕМНИК.

Пример:


   Segment       USHORT

   Offset        USHORT

   Destl         BYTE

   Dest2         SHORT

   Dests         REAL

   KeyboardFlag  BYTE

      CODE

      PEEK(Segment*(256.0*256.0)+Offset,Destl)  !Читаем 1 байт

      PEEK(BSHIFT(Segment,16)+Offset,Dest2)     !Читаем 2 байта

      PEEK(BSHIFT(Segment,16)+Offset,Dest3)     !Читаем 8 байт

      PEEK(00400017h,KeyboardFlag)

      	!Читаем байт состояния клавиатуры

См. также: POKE

POKE (записать в память по адресу)



        POKE(сегмент:смещение,источник)

сегмент:смещение Числовая константа, переменная или выражение, задающее адрес памяти. СЕГМЕНТ должен быть в двух старших байтах, а СМЕЩЕНИЕ в двух младших. Если этот параметр типа REAL, то в промежуточное значение преобрзуется только его целая часть, чтобы получить 32-хбитное целое.
источник Метка переменной.

Оператор POKE записывает содержимое переменной ИСТОЧНИК в указанный дрес памяти. POKE пишет столько байт, сколько их в ИСТОЧНИКЕ.

Пример:


   Segment       USHORT

   Offset        USHORT

   Destl         BYTE

   Dest2         SHORT

   Dests         REAL

   KeyboardFlag  BYTE

      CODE

      PEEK(Segment*(256.0*256.0)+Offset,Source1)  !Пишем 1 байт

      PEEK(BSHIFT(Segment,16)+Offset,Source2)     !Пишем 2 байта

      PEEK(BSHIFT(Segment,16)+Offset,Source2)     !Пишем 8 байт

      POKE(00400017h,KeyboardFlag)   !читаем состояние клавиатуры

      KeyboardFlag = BOR(KeyboardFlag,40h)      ! включаем CAPS

      POKE(00400017h,KeyboardFlag)   !и перезаписываем состояние

См. также: PEEK

STATUS (состояние принтера/файла/диска/клавиатуры)


            STATUS(| принтер  |)

                    |   диск   |

                    |   файл   |

                    |клавиатура|

принтер Строковая константа или переменная, содержащая допостимое в ДОС название принтерного порта: LPT1, LPT2 или LPT3.
диск Строковая константа или переменная, содержащая допустимое в ДОС имя диска: A:, B:, C:, . . ., Z:.
файл Метка оператора FILE.
клавиатура Строковая константа или переменная, содержащая имя устройства: CON.

Функция STATUS возвращает текущее состояние принтера, диска, файла или клавиатуры.

STATUS(принтер) Возвращает 0, если принтер не готов и 1, если с принтером все в порядке.
STATUS(диск) Возвращает 0, если диск не готов или свободное место на диске в байтах, если диск в порядке.
STATUS(файл) Возвращает 0, если файл не открыт и режим доступа к файлу, если он открыт. Если текущий режим доступа - 0 (только для чтения, любой доступ), то возвращается код 40h (Read Only Deny None) (см. OPEN).
STATUS(клавиатура) Возвращает флаг состояния клавиатуры. Этот флаг рассматривается в виде совокупности битов в длинном целом. Значения битов приведены ниже (** означает, что бит установлен только пока клавиша нажата):

    x....... ........ Ins **

    .x...... ........ Caps Lock **

    ..x..... ........ Num Lock **

    ...x.... ........ Scroll Lock **

    ....x... ........ Режим паузы (Ctrl-Num Lock или Pause) **

    .....x.. ........ Sys Req **

    ......x. ........ Left Alt **

    .......x ........ Left Ctrl **

    ........ x....... Режим вставки

    ........ .x...... Caps Lock

    ........ ..x..... Num Lock

    ........ ...x.... Scroll Lock

    ........ ....x... Alt **

    ........ .....x.. Ctrl **

    ........ ......x. Left Shift **

    ........ .......x Right Shift **

Возвращаемый тип данных: LONG

Пример:


  IF STATUS(DataFile) % 16 = 0   !Файл открыт только для чтения?

    RETURN                       ! ну тогда отваливаем

  ELSE                           !В противном случае

    EXECUTE DiskAction           ! пишем запись на диск

      ADD(DataFile)

      PUT(DataFile)

      DELETE(DataFile)

  . .



  LOOP

    IF STATUS('A:') = 0            !Проверяем состояние диска А:

      SHOW(1,1,'Вставьте, пожалуйста, диск в дисковод A:')

      BEEP

      ASK

    ELSE

      BREAK

  . .



  LOOP

    IF STATUS('LPT1') = 0           !Проверка состояния принтера

      SHOW(1,1,'Проверьте, пожалуйста, принтер.')

      BEEP

      ASK

    ELSE

      BREAK

  . .



  LOOP

    IF BAND(STATUS('CON'),00100000b)         !Проверяем Num Lock

      SHOW(1,1,'Выключите, пожалуйста, Num Lock')

      BEEP

      ASK

    ELSE

      BREAK

  . .

См. также: OPEN

Назад | Содержание