к оглавлению

КЛАРИОH. Справочное руководство

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

Математические функции.................................... 13-1
     ABS (абсолютное значение)............................ 13-1
     INRANGE (попадает ли число в заданный диапазон)...... 13-1
     INT (отсекает дробную часть)......................... 13-2
     LOGE (натуральный логарифм).......................... 13-2
     LOG10 (десятичный логарифм).......................... 13-3
     RANDOM (случайное число)............................. 13-3
     ROUND (округление числа)............................. 13-4
     SORT (квадратный корень)............................. 13-4

Тригонометрические функции................................ 13-5
     SIN (синус).......................................... 13-5
     COS (косинус)........................................ 13-6
     TAN (тангенс)........................................ 13-6
     ASIN (арксинус)...................................... 13-7
     ACOS (арккосинус).................................... 13-7
     ATAN (арктангенс).................................... 13-8

Строковые функции......................................... 13-9
     ALL (строка из повторяющихся символов)............... 13-9
     CENTER (центрирование строки)........................ 13-9
     CHR (переводит ASCII-код символа в символ)........... 13-10
     CLIP (строка без хвостовых пробелов)................. 13-10
     DEFORMAT (удаляет форматирование из числовых строк).. 13-11
     FORMAT (форматирует число по шаблону)................ 13-11
     INSTRING (позиция подстроки в строке)................ 13-12
     LEFT (строка, выравненная влево)..................... 13-13
     LEN (длина строки)................................... 13-13
     LOWER (нижний регистр)............................... 13-14
     NUMERIC (состоит ли строка только из цифр?).......... 13-14
     RIGHT (строка, выравненная вправо)................... 13-15
     SUB (возвращает подстроку строки).................... 13-15
     UPPER (верхний регистр).............................. 13-16
     VAL (код символа).................................... 13-16

Битовые функции........................................... 13-17
     BAND (побитовое И - AND)............................. 13-17
     BOR (побитовое ИЛИ - OR)............................. 13-18
     BXOR (побитовое Исключающее ИЛИ - XOR)............... 13-19
     BSHIFT (побитовый сдвиг)............................. 13-20

Процедуры и функции даты и времени........................ 13-21
     Стандартная дата..................................... 13-21
     Стандартное время.................................... 13-21
     TODAY (системная дата)............................... 13-21
     SETTODAY (установка системной даты).................. 13-22
     CLOCK (системное время).............................. 13-22
     SETCLOCK (установка системного времени).............. 13-22
     DATE (стандартная дата).............................. 13-23
     DAY (день месяца для заданной даты).................. 13-23
     MONTH (месяц для заданной даты)...................... 13-24
     YEAR (год для заданной даты)......................... 13-24
     AGE (возраст от базовой даты)........................ 13-25

Процедуры и функции ДОС................................... 13-26
     COMMAND (командная строка)........................... 13-26
     MEMORY (доступная память)............................ 13-28
     PATH (текущий диск и каталог)........................ 13-28
     RUNCODE (код завершения ДОС)......................... 13-29
     SETCOMMAND (установить параметры командной строки)... 13-30
     SETPATH (изменить текущий диск и каталог)............ 13-30

Вспомогательные процедуры и функции....................... 13-31
     ADDRESS (адрес памяти)............................... 13-31
     ERROR (сообщение об ошибке).......................... 13-31
     ERRORCODE (номер кода ошибки)........................ 13-32
     ERRORFILE (имя ошибочного файла)..................... 13-32
     IN (читать данные из порта).......................... 13-33
     MAXIMUM (максимальное значение индекса массива)...... 13-33
     NAME (досовское имя файла или устройства)............ 13-34
     OMITTED (проверка пропущенных параметров)............ 13-35
     OUT (записать данные в порт)......................... 13-36
     PEEK (прочитать память по адресу).................... 13-37
     POKE (записать в память по адресу)................... 13-38
     STATUS (состояние принтера/файла/диска/клавиатуры)... 13-39

		    МАТЕМАТИЧЕСКИЕ ФУНКЦИИ

----------------------------------------------------------------
ABS                                        (абсолютное значение)
================================================================
             ABS(выражение)
----------------------------------------------------------------

выражение           Константа, переменная или выражение.

Функция ABS возвращает абсолютное значение ВЫРАЖЕНИЯ. Абсолютное
значениевсегда положительно (или ноль).

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

Пример:

  C = ABS(A - B)   !C - абсолютное значение разницыe между A и B
  IF B < 0 THEN B = ABS(B).   !Если B отрицательно,  то  сменить
			      ! его знак

----------------------------------------------------------------
INRANGE                  (попадает ли число в заданный диапазон)
================================================================
	INRANGE(выражение,нижний_предел,верхний_предел)
----------------------------------------------------------------

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

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

верхний_предел      Числовая константа, переменная или выражение
		    задающее верхнюю границу диапазона.

Функция INRANGE сравнивает ВЫРАЖЕНИЕ с включительным  диапазоном
чисел. Если значение ВЫРАЖЕНИЯ попадает в этот диапазон, то фун-
кция  возвращает  единицу  ("ИСТИНУ").  Если же ВЫРАЖЕНИЕ больше
ВЕРХНЕГО_ПРЕДЕЛА  или  меньше  НИЖНЕГО_ПРЕДЕЛА,  то возвращается
ноль ("ЛОЖЬ").

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

Пример:

  IF INRANGE(Date % 7,1,5)     !Если день - рабочий
    DO WeekdayRate             !  то оплата обычная
  ELSE                         !Иначе
    DO WeekendRate             !  плата за работу в выходные
  .                            !конец условия

----------------------------------------------------------------
INT                                     (отсекает дробную часть)
================================================================
             INT(выражение)
----------------------------------------------------------------

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

Функция INT возвращает целую часть числового ВЫРАЖЕНИЯ. Знак ре-
зультата не меняется и округления не производится.

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

Пример:

    INT(8.5)   вернет  8
    INT(-5.9)  вернет -5

----------------------------------------------------------------
LOGE                                      (натуральный логарифм)
================================================================
             LOGE(выражение)
----------------------------------------------------------------

выражение          Числовая константа, переменная или выражение.
                   Если значение ВЫРАЖЕНИЯ меньше нуля, то  воз-
                   вращается ноль, поскольку натуральный   лога-
                   рифм не определен для отрицательных чисел.

Функция LOGE (произносится  как "loge"(ЛОУГ) )  возвращает нату-
ральный логарифм числового  ВЫРАЖЕНИЯ. Натуральный логарифм  это
показатель степени, в которую надо возвести число е, чтобы полу-
чилось заданное число. Значение e мы приняли за 2.71828182846.

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

Пример:

  LOGE(2.71828182846)  вернет 1
  LOGE(1)              вернет 0

  LogVal = LOGE(Val)   !Получить натуральный логарифм от VAL.

----------------------------------------------------------------
LOG10                                      (десятичный логарифм)
================================================================
             LOG10(выражение)
----------------------------------------------------------------

выражение          Числовая константа, переменная или выражение.
                   Если значение ВЫРАЖЕНИЯ меньше нуля, то  воз-
                   вращается ноль, поскольку десятичный логарифм
                   не определен для отрицательных чисел.

Функция LOG10 (произносится как "log ten"(ЛОГ ТЭН) )  возвращает
десятичный  логарифм  числового  ВЫРАЖЕНИЯ. Десятичный логарифм,
это показатель степени, в которую надо возвести 10, чтобы  полу-
чить заданное число.

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

Пример:

   LOG10(10)   вернет 1
   LOG10(1)    вернет 0

   LogStore = LOG10(Var)   !Сохранить десятичный логарифм от VAR

----------------------------------------------------------------
RANDOM                                         (случайное число)
================================================================
             RANDOM(нижний_предел,верхний_предел)
----------------------------------------------------------------

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

верхний_предел     Числовая константа, переменная или выражение,
		   задающее верхнюю границу диапазона.

Функция RANDOM возвращает случайное целое между НИЖНИМ и ВЕРХНИМ
ПРЕДЕЛАМИ включительно. Параметры нижний_предел и верхний_предел
могуь быть любыми числовыми выражениями, но в диапазон включает-
только их целая часть.

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

Пример:

   LOOP X# - 1 TO 6
     LottoNbr[X#] = RANDOM(1,49)     !Выбираем числа для 6 из 49
   .

----------------------------------------------------------------
ROUND                                         (округление числа)
================================================================
             ROUND(выражение,точность)
----------------------------------------------------------------

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

точность           Числовое выражение, являющееся степенью деся-
                   ти, как то: 1, 10, 100, 0.1, 0.001 и т.д. Ес-
                   ли значение не является точной степенью деся-
                   ти, то используется ближайшая меньшая степень
                   т.е. 0.55 заменится на 0.1, а 155 - на 100.

Функция ROUND возвращает значение ВЫРАЖЕНИЯ, округленное до  за-
данного ТОЧНОСТЬЮ знака.

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

Пример:

   ROUND(5163,100)      вернет 5200
   ROUND(657.50,1)      вернет 658
   ROUND(51.63594,.O1)  вернет 51.64

  Commission = ROUND(Price / Rate,.01)
                       !Округляем комиссионные до целых копеек

----------------------------------------------------------------
SQRT                                         (квадратный корень)
================================================================
             SQRT(выражение)
----------------------------------------------------------------

выражение          Числовая константа, переменная или выражение.
                   Если значение ВЫРЖЕНИЯ  меньше нуля, то  воз-
                   вращается 0.

Функция SORT возвращает квадратный корень из ВЫРАЖЕНИЯ. Если Х -
это любое положительное вещественное число, то корень квадратный
из Х, это такое число, которое, будучи умноженным само на  себя,
даст Х.

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

Пример:

  Length = SORT(X^2 + Y^2)
           !По теореме Пифагора находим расстояние от 0,0 до X,Y


		  ТРИГОНОМЕТРИЧЕСКИЕ ФУНКЦИИ

Тригонометрические функции  возвращают значения,  представляющие
углы и соотношения сторон прямоугольного треугольника  (содержа-
щего угол в 90°). Гипотенуза, это сторона трегульника,  противо-
стоящая его прямому углу. (Остальные подробности можно узнать из
любого нормального учебника тригонометрии, что по-гречески озна-
чает "измерение треугольников").

Углы выражаются  в радианах.  PI (ПИ)  - это  константа, которая
представляет соотношение между длиной окружности и ее  радиусом.
В окружности есть 2*Pl радиан (или 360 градусов).

Ниже приведены более или менее точное значение ПИ и коэффициенты
преобразований между радианами и градусами.

 Pi       EQUATE(3.1415926535898) !Значение ПИ
 Rad2Deg  EQUATE(57.295779513082) !Градусов в радиане
 Deg2Rad  EQUATE(.0174532925199)  !Радиан в градусе

----------------------------------------------------------------
SIN                                                      (синус)
================================================================
             SIN(радиан)
----------------------------------------------------------------

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

Функция SIN возвращает тригонометрический синус угла, выраженно-
го в радианах. Синус - это соотношение между длиной стороны про-
тивоположной углу и длиной гипотенузы.

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

Пример:

  Angle = 45 * Deg2Rad    !Переводим 45° в радианы
  SineAngle = SIN(Angle)  !Получаем синус угла в 45°

----------------------------------------------------------------
COS                                                    (косинус)
================================================================
             COS(радиан)
----------------------------------------------------------------

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

Функция COS возвращает тригонометрический косинус угла, выражен-
ного в радианах. Косинус  - это отношение стороны  прилегающей к
углу и гипотенузы.

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

Пример:

  Angle = 45 * Deg2Rad     !Переводим 45° в радианы
  CoSineAngle = SIN(Angle) !Получаем косинус угла в 45°

----------------------------------------------------------------
TAN                                                    (тангенс)
================================================================
             TAN(радиан)
----------------------------------------------------------------

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

Функция TAN возвращает тригонометрический тангенс угла, выражен-
ного в радианах. Тангенс - это отношение стороныы  противополож-
ной углу и стороны прилегающей к углу.

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

Пример:

  Angle = 45 * Deg2Rad      !Переводим 45° в радианы
  TangentAngle = SIN(Angle) !Получаем тангенс угла в 45°

----------------------------------------------------------------
ASIN                                                  (арксинус)
================================================================
             ASIN(выражение)
----------------------------------------------------------------

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

Функция ASIN возвращает ОБРАТНЫЙ синус. "Обратить синус" означа-
ет "получить угол, имеющий заданный синус". Возвращается угол  в
радианах.

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

Пример:

  InvSine = ASIN(SineAngle)                   !Получить арксинус

См. также: SIN

----------------------------------------------------------------
ACOS                                                (арккосинус)
================================================================
             ACOS(выражение)
----------------------------------------------------------------

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

Функция  ACOS  возвращает  ОБРАТНЫЙ  косинус. "Обратить косинус"
означает "найти  угол, имеющий  заданный косинус".  Возвращается
угол в радианах.

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

Пример:

  InvCosine = ACOS(CosineAngle)             !Получаем арккосинус

См. также: COS

----------------------------------------------------------------
ATAN                                                (арктангенс)
================================================================
             ATAN(выражение)
----------------------------------------------------------------

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

Функция  ATAN  возвращает  ОБРАТНЫЙ  тангенсю "Обратить тангенс"
означает "найти  угол, имеющий  заданный тангенс".  Возвращается
угол в радианах.

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

Пример:

  InvTangent = ATAN(TangentAngle)           !Получить арктангенс

См. также: TAN


		       СТРОКОВЫЕ ФУНКЦИИ

----------------------------------------------------------------
ALL                           (строка из повторяющихся символов)
================================================================
             ALL(строка[,длина])
----------------------------------------------------------------

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

длина               Длина  возвращаемой строки. Если  пропущена,
                    то будет возвращена строка из 255 символов.

Функция ALL  возвращает строку,  содержащую СТРОКУ,  повторенную
несколько раз.

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

Пример:

   Starline = ALL('*',25)   !Получить 25 звездочек
   Dotline = ALL('.')       !Получить 255 точек

----------------------------------------------------------------
CENTER                                    (центрирование строки)
================================================================
             CENTER(строка[,длина])
----------------------------------------------------------------

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

длина             Длина результирующей строки.  Если  пропущена,
                  то используется длина параметра СТРОКА.

Функция CENTER  сначала удаляет  ведущие и  хвостовые пробелы из
СТРОКИ, затем дополняет ее ведущими и хвостовыми пробелами  так,
чтобы строка отцентрировалась в пределах ДЛИНЫ и затем возвраща-
ет полученный результат.

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

Пример:

   CENTER('ABC',5)   вернет  ' ABC '
   CENTER('ABC   ')  вернет  ' ABC '
   CENTER('   ABC')  вернет  ' ABC '

  Message = CENTER(Message)                 !Сообщение - в центр
  Rpt:Title = CENTER(Name,60)               !Имя - в центр

----------------------------------------------------------------
CHR                       (переводит ASCII-код символа в символ)
================================================================
             CHR(код)
----------------------------------------------------------------

код                     Числовое выражение, содержащее числовой
			ASCII-код символа.

Функция CHR возвращает символ, представленный его ASCII-кодом.

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

Пример:

   Stringvar = CHR(122)    !Строчная "z"
   Stringvar = CHR(239)    !Строчная "я"

----------------------------------------------------------------
CLIP                             (строка без хвостовых пробелов)
================================================================
             CLIP(строка)
----------------------------------------------------------------

строка              Строковое выражение.

Функция CLIP удаляет  хвостовые пробелы из  строки. Возвращаемая
строка - это подстрока СТРОКИ без хвостовых пробелов. CLIP часто
используется вместе с оператором конкатенации (слияния) в  стро-
ковых выражениях.

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

Пример:

  Name = CLIP(Last) &','& CLIP(First) & Init & '.'
                                    !ФИО по военному образцу,
				    ! типа "Agarkoff, Serg P."

----------------------------------------------------------------
DEFORMAT              (удаляет форматирование из числовых строк)
================================================================
             DEFORMAT(строка[,шаблон])
----------------------------------------------------------------

строка             Строковое выражение, содержащее строку цифр.

шаблон             Шаблон формата или метка данного типа STRING,
                   CSTRING  или  PSTRING,  описанного как шаблон
                   формата. Если пропущено, то используется шаб-
                   лон,  использованный  для  СТРОКИ.  (?)  Если
                   СТРОКА описана без параметра ШАБЛОН, то  воз-
                   вращаемое значение будет содержать только  те
                   символы, которые  разрешены в  числовых конс-
                   тантах.

Функция DEFORMAT удаляет символы форматирования и строки, содер-
жащей цифры,  возвращается только  то, что  можно распознать как
число.

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

Пример:

  DialString = 'ATDT1' & DEFORMAT(Phone,@P(###)###-####P) & |
                '@13,10)'   !Составляем номер для набора модемом

  ClarionDate = DEFORMAT(dBaseDate,@D1)
              !Получаем стандартную дату из строки вида mm/dd/yy

----------------------------------------------------------------
FORMAT                            (форматирует число по шаблону)
================================================================
             FORMAT(значение,шаблон)
----------------------------------------------------------------

значение            Числовое выражение, содержащее значение  для
                    форматирования.

шаблон              Шаблон формата или метка STRING, CSTRING или
		    PSTRING описанной с параметром ШАБЛОН.

Функция FORMAT возвращает числовую строку, отформатированную со-
гласно параметру ШАБЛОН.

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

Пример:

  Rpt:SocSecNbr = FORMAT(Emp:SSN,@P###-##-####P)
         !Форматируем под номер карточки социального страхования

  Phone=FORMAT(DEFORMAT(Phone,@P###-###-####P),@P(###)###-####P)
                   !Заменяем в номере некоторые дефисы на скобки

  DateString = FORMAT(DateLong,@D1)   !Преобразуем дату в строку

----------------------------------------------------------------
INSTRING                            (позиция подстроки в строке)
================================================================
	   INSTRING(подстрока,строка[,шаг][,старт])
----------------------------------------------------------------

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

строка            Метка  переменной  типа  STRING,  CSTRING  или
		  PSTRING, в которой искать.

шаг               Числовая константа, переменная или  выражение,
                  задающее размер  шага поиска.  ШАГ=1 означает,
                  что ПОДСТРОКА будет искаться с каждого символа
                  СТРОКИ, ШАГ=2  - с  каждого второго  символа и
                  так далее. Если пропущен, то по умолчанию  ра-
                  вен длине ПОДСТРОКИ.

старт             Числовая константа, переменная или  выражение,
                  задающее начальную  точку, номер  символа, для
                  поискаring.  Если  пропущен,  поиск начнется с
                  первого символа СТРОКИ.

Функция INSTRING  проходт по  СТРОКЕ, отыскивая  в ней вхождения
ПОДСТРОКИ. Если ПОДСТРОКА найдена, то возвращается номер символа
в СТРОКЕ, с которого начинается вхождение в нее ПОДСТРОКИ.  Если
же ПОДСТРОКА не найдена, то INSTRING возвращает 0.

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

Пример:

     INSTRING('DEF','ABCDEFGHIJ',1,1)   вернет  4
     INSTRING('DEF','ABCDEFGHIJ',2,1)   вернет  0
     INSTRING('DEF','ABCDEFGHIJ',2,2)   вернет  2
     INSTRING('DEF','ABCDEFGHIJ',3,1)   вернет  2

  Extension = SUB(FileSpec,INSTRING('.',FileSpec) + 1,3)
               !Выделяем расширение из полной спецификации файла

  IF INSTRING(Search.Cus:Notes,1,1)    !Если искомая переменная
				       ! найдена, то
    Scr:Message = 'Есть такая буква!'  !  сообщить об этом
  .

----------------------------------------------------------------
LEFT                                 (строка, выравненная влево)
================================================================
             LEFT(строка[,длина])
----------------------------------------------------------------

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

длина             Числовая константа, переменная или  выражение,
                  задающее длину возвращаемой строки. Если  опу-
                  щена, то длина результата равна длине СТРОКИ.

Функция LEFT фозвращает СТРОКУ, выравненную влево. Ведущие  про-
белы удаляются из СТРОКИ.

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

Пример:

  CompanyName = LEFT(CompanyName) !Название фирмы сдвинуть влево

----------------------------------------------------------------
LEN                                               (длина строки)
================================================================
             LEN(строка)
----------------------------------------------------------------

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

Функция LEN  возвращает длину  СТРОКИ. Если  параметр СТРОКА это
метка переменной, то LEN вернет ЗАДАННУЮ ПРИ ОПИСАНИИ длину этой
переменной. Числовые значения автоматически преобразуются в про-
межуточные строковые.

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

Пример:

  IF LEN(CLIP(Title) &' '& CLIP(First) &' '& CLIP(Last)) > 30
              !Если полное ФИО не укладывается в заданную длину,
    Rpt:Name = CLIP(Title) &' '& SUB(First.1.1) &'.'& Last
              ! то вместо отчества используем инициал.
  ELSE
    Rpt:Name = CLIP(Title) &' '& CLIP(First) &' '& CLIP(Last)
              ! ну а если все в порядке, то поставим полное ФИО
  .

  Rpt:Title = CENTER(Cus:Name,LEN(Rpt:Title))
                                   !Центрируем имя в заголовке

----------------------------------------------------------------
LOWER                                           (нижний регистр)
================================================================
             LOWER(строка)
----------------------------------------------------------------

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

Функция LOWER возвращает строку, в которой все буквы - строчные.

(А.С.П. - Что не совсем верно для русского текста,с которым CLA-
RION SoftWare ну никак не хочет дружить :( )

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

Пример:

  Name = SUB(Name,1,1) & LOWER(SUB(Name,2,19))
               !Все буквы имени, кроме первой, сделаем строчными

----------------------------------------------------------------
NUMERIC                      (состоит ли строка только из цифр?)
================================================================
             NUMERIC(строка)
----------------------------------------------------------------

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

Функция NUMERIC возвращает 1 (ИСТИНУ) если строка содержит  раз-
решенное числовое значение. Она вернет 0 (ЛОЖЬ) если строка  со-
держит нецифровые символы. Разрешенные  символы, это цифры от  0
до 9, ведущий знак минус и десятичная точка.

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

Пример:

  IF NOT NUMERIC(PartNumber)    !Если номер запчасти - не число,
    DO ChkValidPart             !то проверим его на допустимость
  .                             !конец условия

----------------------------------------------------------------
RIGHT                               (строка, выравненная вправо)
================================================================
             RIGHT(строка[,длина])
----------------------------------------------------------------

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

длина             Числовая константа, переменная или  выражение,
                  задающее длину возвращаемой строки. Если  про-
                  пущена, то длина результата равна длине  СТРО-
                  КИ.

Функция RIGHT возвращает  строку, выравненную вправо.  Хвостовые
пробелы удаляются, затем строка дополняется слева ведущими  про-
белами до ДЛИНЫ.

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

Пример:

  Message = RIGHT(Message)            !Сообщение сдвинуть вправо

----------------------------------------------------------------
SUB                                (возвращает подстроку строки)
================================================================
             SUB(строка,позиция,длина)
----------------------------------------------------------------

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

позиция           Целочисленная константа, переменная или  выра-
		  жение. Ели ПОЗИЦИЯ положительна, то она задает
                  номер символа от  начала СТРОКИ, если  отрица-
                  тельная, то от конца СТРОКИ.

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

Функция SUB возвращает ДЛИНА  символов из СТРОКИ, начиная  с за-
данной ПОЗИЦИИ.

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

Пример:

  SUB('ABCDEFGHI',1,1)   вернет  'A'
  SUB('ABCDEFGHI',-1,1)  вернет  'I'
  SUB('ABCDEFGHI',4,3)   вернет  'DEF'

  Extension = SUB(FileName,INSTRING('.',FileName,1,1),3)
                                      !Получаем расширение файла

См. также: INSTRING

----------------------------------------------------------------
UPPER                                          (верхний регистр)
================================================================
             UPPER(строка)
----------------------------------------------------------------

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

Функция UPPER возвращает СТРОКУ, в которой все символы - заглав-
ные.

(А.С.П. - Что не совсем верно для русского текста,с которым CLA-
RION SoftWare ну никак не хочет дружить :( )

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

Пример:

   Name = UPPER(Name)       !Все имя вывести на верхнем регистре

----------------------------------------------------------------
VAL                                                (код символа)
================================================================
             VAL(символ)
----------------------------------------------------------------

символ              Однобайтная строка, содержащая СИМВОЛ.

Функция VAL возвращает ASCII-код СИМВОЛА.

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

Пример:

  VAL('я')  вернет  239
  VAT('z')  вернет  122

  CharVal = VAL(StrChar)
                    !Получить ASCII-код символа из StrChar


			БИТОВЫЕ ФУНКЦИИ

JOKE:
- Что такое бит?
- Это байт за вычетом налогов.
- Что такое байт?
- [восемь раз объясняется, что такое бит]
- А что же такое килобайт?
- Ну, это очень долго объяснять...

----------------------------------------------------------------
BAND                                         (побитовое И - AND)
================================================================
             BAND(значение,маска)
----------------------------------------------------------------

значение           Числовая константа, переменная или выражение,
                   задающее битовое значение, на которое  накла-
                   дывается МАСКА. ЗНАЧЕНИЕ, при  необходимости,
                   преобразуется к типу LONG перед операцией.

маска              Числовая константа, переменная или выражение,
                   задающее  битовую  маску.  При необходимости,
                   МАСКА преобразуется к типу LONG перед  выпол-
                   нением операции.

Функция BAND сравнивает ЗНАЧЕНИЕ с МАСКОЙ, выполняя оперцию  ЛО-
ГИЧЕСКОЕ И над каждым битом. Возвращается длинное целое, в кото-
ром единицы будут только в тех местах, где они были и в ЗНАЧЕНИИ
и в МАСКЕ, в остальных местах будут нули.

BAND обычно используется для  выяснения значения одного или  не-
скольких бит (0 или 1) в переменной.

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

Пример:

  BAND(0110b,0010b)     вернет 0010b     !0110b = 6, 0010b = 2

RateType  BYTE                 !Тип оклада
Female    EQUATE(0001b)        !Маска для женщин
Male      EQUATE(0010b)        !Маска для мужчин
Over25    EQUATE(0100b)        !Маска для тех, кто старше 25 лет

       CODE
  IF BAND(RateType,Female) |       !Если женщина
      AND BAND(RateType,Over25     ! старше 25 лет,
    DO BaseRate                    ! то премия - обычная
  ELSIF BAND(RateType,Male)        !Если мужчина,
    DO AdjBase                     ! то подправить размер премии
  .                                !End if

----------------------------------------------------------------
BOR                                         (побитовое ИЛИ - OR)
================================================================
             BOR(значение,маска)
----------------------------------------------------------------

значение           Числовая константа, переменная или выражение,
                   задающее битовое значение, на которое  накла-
                   дывается МАСКА. ЗНАЧЕНИЕ, при  необходимости,
                   преобразуется к типу LONG перед операцией.

маска              Числовая константа, переменная или выражение,
                   задающее  битовую  маску.  При необходимости,
                   МАСКА преобразуется к типу LONG перед  выпол-
                   нением операции.

Функция BOR сравнивает ЗНАЧЕНИЕ с МАСКОЙ, выполняя операцию  ЛО-
ГИЧЕСКОЕ ИЛИ над каждым битом. Возвращается длинное целое, в ко-
тором единице будут равны те биты, которые были единицами либо в
ЗНАЧЕНИИ, либо в  МАСКЕ либо и  там и там,  остальные биты будут
нулями.

BOR обычно используется для того, чтобы принудительно установить
один или несколько битов переменной в единицу.

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

Пример:

  BOR(0110b,0010b)  вернет 0110b  !0110b = 6, 0010b = 2

RateType  BYTE                 !Тип оклада
Female    EQUATE(0001b)        !Маска для женщин
Male      EQUATE(0010b)        !Маска для мужчин
Over25    EQUATE(0100b)        !Маска для тех, кто старше 25 лет

      CODE
      RateType = BOR(RateType,Over25) !Установить признак "стар-
                                      ! ше 25 лет"
      RateType = BOR(RateType,Male)   !Установить признак "оклад
				      ! мужчин"

----------------------------------------------------------------
BXOR                           (Побитовое Исключающее ИЛИ - XOR)
================================================================
             BXOR(значение,маска)
----------------------------------------------------------------

значение           Числовая константа, переменная или выражение,
                   задающее битовое значение, на которое  накла-
                   дывается МАСКА. ЗНАЧЕНИЕ, при  необходимости,
                   преобразуется к типу LONG перед операцией.

маска              Числовая константа, переменная или выражение,
                   задающее  битовую  маску.  При необходимости,
                   МАСКА преобразуется к типу LONG перед  выпол-
                   нением операции.

Функция BXOR сравнивает ЗНАЧЕНИЕ с МАСКОЙ, выполняя операцию ЛО-
ГИЧЕСКОЕ ИСКЛЮЧАЮЩЕЕ ИЛИ над каждым битом. Возвращается  длинное
целое, в котором в единицу будут установлены только те биты, ко-
торые были единицами и в ЗНАЧЕНИИ и в МАСКЕ. Те биты, которые не
совпали в МАСКЕ  и ЗНАЧЕНИИ, а  также те, которые  были нулями и
там и там, будут нулями.

BXOR обычно используется для переключения из 1 в 0 или  наоборот
одного или нескольки битов переменной.

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

Пример:

  BXOR(0110b,0010b)  вернет  0100b    !0110b=6, 0100b=4, 0010b=2

RateType  BYTE                 !Тип оклада
Female    EQUATE(0001b)        !Маска для женщин
Male      EQUATE(0010b)        !Маска для мужчин
Over25    EQUATE(0100b)        !Маска для тех, кто старше 25 лет
Over65    EQUATE(1100b)        !Маска для тех, кто старше 65 лет

       CODE
  RateType = BXOR(RateType,Over65) !Инвертировать признак "стар-
				   ! ше 65 лет"

----------------------------------------------------------------
BSHIFT                                         (побитовый сдвиг)
================================================================
             BSHIFT(значение,счетчик)
----------------------------------------------------------------

значение           Числовая константа, переменная или выражение.
                   При необходимости, преобразуется к типу LONG
		   перед операцией.

счетчик            Числовая константа, переменная или выражение,
                   задающее на сколько бит нужно сдвинуть ЗНАЧЕ-
                   НИЕ. Если СЧЕТЧИК положителен, значение сдви-
                   гается ВЛЕВО, если отрицателен - то ВПРАВО.

Функция BSHIFT сдвигает биты ЗНАЧЕНИЯ на СЧЕТЧИК битов. ЗНАЧЕНИЕ
может быть сдвинуто ВЛЕВО (от младших битов к старшим) или ВПРА-
ВО (от старших к младшим), освобождающиеся места заполняются ну-
лями.

(А.С.П. - можно сказать, что BSHIFT умножает (СЧЕТЧИК>0) или де-
лит (СЧЕТЧИК<0) ЗНАЧЕНИЕ на  2 в степени СЧЕТЧИК.  Скажем, чтобы
умножить Х на 16 можно выполнить либо А=Х*16 либо А=BSHIFT(X,4),
причем последнее выражение выполнится быстрее первого, поскольку
обычно реализуется на уровне процессорной команды сдвига. В ФОР-
ТЕ используется именно этот принцип)

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

Пример:

  BSHIFT(0110b,1)   вернет 1100b
  BSHIFT(0110b,-1)  вернет 0011b

  Varswitch = BSHIFT(20,3)           !Умножаем на 8
  Varswitch = BSHIFT(Varswitch,-2)   !Делим на 4

(А.С.П. - когда я писал свое примечание, я еще не смотрел на две
предыдущие строки :)


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

----------------------------------------------------------------
  Стандартная дата
================================================================

Стандартная дата Кларион - это число дней, прошедших с 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 в  программах на Кларион,  и он же  является ER-
RORLEVEL в  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=)  можно переопределить  в SETCOM-
MAND.

Пример:

  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()).
                                     !Может еще какие-то ЕГГОГИ?
  .

См. также: ПРИЛОЖЕНИЕ B

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

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

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

Пример:

  ADD(Location)                !Добавим новую запись
  IF ERRORCODE() = 8          !Не хватает памяти?
    SHOW(1,5,'Памяти мало!')  !  сообщим об этом вопиющем факте
  .

См. также: ПРИЛОЖЕНИЕ B

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

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

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

Пример:

  ADD(Location)                       !Добавляем новый элемент
  IF ERRORCODE()
    SHOW(1,5,'Проблема с файлом ' & ERRORFILE())
                                 !Вывести сообщение
    ASK                          ! и подождать нажатия на кнопку
  .

См. также: ПРИЛОЖЕНИЕ B

----------------------------------------------------------------
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(строка,),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

Перевод всей документации выполнил Сергей АгАрков.

к оглавлению

Знаете ли Вы, что спецификация - это документ, описывающий соглашение между разработчиками и пользователями. Разработчик берется написать модуль, а пользователь соглашается не полагаться на знания о том, как именно этот модуль реализован, т.е. не предполагать ничего такого, что не было бы указано в спецификации. Такое соглашение позволяет разделить анализ реализации от собственно использования программы. Спецификации дают возможность создавать логические основы, позволяющие успешно "разделять и властвовать".

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution