Математические функции.................................... 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
Перевод всей документации выполнил Сергей АгАрков.
Знаете ли Вы, что спецификация - это документ, описывающий соглашение между разработчиками и пользователями. Разработчик берется написать модуль, а пользователь соглашается не полагаться на знания о том, как именно этот модуль реализован, т.е. не предполагать ничего такого, что не было бы указано в спецификации. Такое соглашение позволяет разделить анализ реализации от собственно использования программы. Спецификации дают возможность создавать логические основы, позволяющие успешно "разделять и властвовать".