ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 8


                   CHAPTER 3 - Описание переменных

Операторы описания.......................................... 3-1
     BYTE (однобайтное беззнаковое целое)................... 3-1
     SHORT (двухбайтное целое со знаком).................... 3-2
     USHORT (двухбайтное беззнаковое целое)................. 3-3
     LONG (четырехбайтное целое со знаком).................. 3-4
     ULONG (четырехбайтное целое без знака)................. 3-5
     SREAL (четырехбайтное вещественное со знаком).......... 3-6
     REAL (восьмибайтное вещественное со знаком)............ 3-7
     DECIMAL (упакованное десятичное фикс. длины со знаком). 3-8
     PDECIMAL (то же, что и DECIMAL)........................ 3-9
     STRING (строка фиксированной длины).................... 3-10
     CSTRING (строка фикс. длины, завершающаяся нулем)...... 3-11
     PSTRING (строка со встроенным байтом длины)............ 3-12
     DATE (четырехбайтная дата)............................. 3-13
     TIME (четырехбайтное время)............................ 3-14
     GROUP (составная структура данных)..................... 3-15
     LIKE (определяемые пользователем типы данных).......... 3-16

Неявные переменные.......................................... 3-17

Элементы шаблонов........................................... 3-18
     Отображение чисел и валюты............................. 3-18
     Отображение научной нотации.(экспоненциальный формат).. 3-20
     Отображения даты....................................... 3-21
     Отображения времени.................................... 3-22
     Отображение "по образцу"............................... 3-23
     Key-in Template Pictures............................... 3-24
     Отображения строк...................................... 3-26
Атрибуты переменных......................................... 3-27
     PRE (префикс метки).................................... 3-27
     DIM (размерность массива).............................. 3-28
     Массивы как параметры ПРОЦЕДУР и ФУНКЦИЙ............... 3-29
     EXTERNAL (переменная, описанная вне программы)......... 3-30
     NAME (внешнее имя переменной).......................... 3-31
     OVER (разделяет место в памяти)........................ 3-33
Директивы компилятора....................................... 3-34
     EQUATE (назначить метку)............................... 3-34
     SIZE (размер памяти в байтах).......................... 3-35

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
BYTE                               (однобайтное целое без знака)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка   BYTE(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

    Формат:       однобайтная переменная
                  АДДДДДДДДДДДДДДДДДДДДЩ
    Биты:         7                    0
    Диапазон:     0..255

initial value    Числовая константа. Если опущена, то подразуме-
                 вается ноль.

DIM              Размерность(и) переменной как массива.

OVER             Разделяет один и тот же участок памяти с другой
		 переменной

NAME             Залает альтернативное, "внешнее" имя для поля.

EXTERNAL         Указывает, что переменная описывается и  память
                 под  нее выделяется во  внешней  библиотеке. НЕ
                 разрешено для описаний FILE, QUEUE и GROUP.

BYTE описывает однобйтное беззнаковое целое. Присвоение значения
выходящего за пределы  диапазона  приводит к непредсказуемым ре-
зультатам.

Пример:

Countl  BYTE                  !Declare one byte integer
Count2  BYTE,OVER(Countl)     !Declare OVER the one byte integer
Count3  BYTE,DIM(4)           !Declare it an array of 4 bytes
Count4  BYTE(5)               !Declare with initial value
Count5  BYTE,EXTERNAL         !Declare as external
Count6  BYTE,NAME('SixCount') !Declare with external name

ExampleFile  FILE,DRIVER('Clarion')   !Declare a file
Record         RECORD
CountS           BYTE,NAME('Counter')!Declare with external name
             . .

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
SHORT                              (двухбайтное целое со знаком)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка SHORT(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

         знак   значение
Формат: АДДДБДДДДДДДДДДДДДДДДДЩ
Биты:     15                  0

Диапазон:  -32,768..32,767

initial value    Числовая константа. Если опущена, то подразуме-
                 вается ноль.

DIM              Размерность(и) переменной как массива.

OVER             Разделяет место в памяти с другой переменной.

NAME             Задает внешнее имя поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

SHORT описывает  двухбайтное целое  со  знаком в  формате целого
слова Intel 8086. Старший бит в этой конфигурации - знаковый бит
(0 = плюс,  1 = минус.  Отрицательные значения  представляются в
стандартном дополнении до двух. Присвоение  значения, выходящего
за пределы диапазона SHORT дает к непредсказуемые результатам.

Пример:

Count2  SHORT,OVER(Countl)     !Declare OVER the two-byte signed
                               !  integer
Count3  SHORT,DIM(4)           !Declare it an array of 4 shorts
Count4  SHORT(5)               !Declare with initial value
Count5  SHORT,EXTERNAL         !Declare as external
Count6  SHORT,NAME('SixCount') !Declare with external name

Examp]eFile     FILE,DRIVER('Clarion')    !Declare a file
Record            RECORD
Count7              SHORT,NAME('Counter') !Declare with external
                . .                       !  name

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
USHORT                               (two-byte unsigned integer)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка USHORT(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Формат:      значение
        АДДДДДДДДДДДДДДДДЩ
Биты:    15              0


Диапазон:  0..65,535

initial value    Числовая константа. Если опущена, the initial
                 value is zero.

DIM              Размерность(и) переменной как массива.

OVER             Разделяет место в памяти с другой переменной.

NAME             Задает внешнее имя для переменной.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

USHORT  описывает двухбайтное  целое без  знака в  формате слова
Intel 8086. В этой конфигурации  НЕТ знакового  бита. Присвоение
значения, выходящего за пределы диапазона  USHORT приводит к не-
предсказуемым результатам.

Пример:

Countl  USHORT              !Declare two-byte unsigned integer
Count2  USHORT,OVER(Countl) !Declare OVER the two-byte unsi gned
                            !  integer
Counts  USHORT.DIM(4)       !Declare it an array of  4  unsigned
                            !  shorts
Count4  USHORT(5)           !Declare with initial value
Count5  USHORT,EXTERNAL     !Declare as external
Count6  USHORT,NAME('SixCount') !Declare with external name

ExampleFile    FILE,DRIVER('Btrieve')     !Declare a file
Record           RECORD
Count7             USHORT,NAME('Counter') !Declare with external
               . .                        !  name

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
LONG                            (четырехбайтное целое со знаком)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка LONG(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Формат:  знак   значение
        АДДДБДДДДДДДДДДДДДДДЩ
Биты:   31                  0

Диапазон:  -2,147,483,648..2,147,483,647

initial value    Числовая константа.  Если опущена, подразумева-
                 ется ноль.

DIM              Размерность(и) переменной как массива.

OVER             Разделяет место в памяти с другой переменной.

NAME             Задает внешнее имя для переменной.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

LONG описывает четырехбайтное целое со знаком в формате длинного
целого Intel 8086. Старший  бит - знаковый,  (0 - положительное,
1 - отрицательное).  Отрицательные   значения  представляются  в
стандартном дполнении до  двух. Присвоение  значения, выходящего
за  пределы диапазона LONG, приводит к непредсказуемым результа-
там

Пример:

Countl    LONG              !Declare four-byte signed integer
Count2    LONG,OVER(Countl) !Declare  OVER  the four-byte signed
                            !  integer
Count3    LONG,DIM(4)       !Declare it an array of 4 longs
Count4    LONG(5)           !Declare with initial value
Count5    LONG,EXTERNAL     !Declare as external
Counts    LONG,NAME('SixCount') !Declare with external name

ExampleFile  FILE,DRIVER('Clarion')   !Declare a file
Record         RECORD
Count7           LONG,NAME('Counter')!Declare with external name
             . .

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
ULONG                           (четырехбайтное целое без знака)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка ULONG(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

    Формат:       значение
               АДДДДДДДДДДДДДЩ
   Биты:        31           0
Диапазон:         0..4,294,967,295
initial value   Числовая константа. Если опущена, то подразуме-
                вается ноль.

DIM             Размерность(и) переменной как массива.

OVER            Разделяет место в памяти с другой переменной.

NAME            Задает внешнее имя переменной.

EXTERNAL        Указывает  на то, что  переменная описана и па-
                мять под нее выделена во внешней библиотеке. НЕ
                разрешено с описаниями FILE, QUEUE или GROUP.

ULONG описывает четырехбайтное целое без знака в формате длинно-
го  целого  Intel 8086. В  этой конфигурации НЕТ знакового бита.
Присвоение значения, выходящего за пределы диапазона  ULONG дает
непредсказуемые результаты.

Пример:

Countl  ULONG                !Declare four-byte unsigned integer
Count2  ULONG,OVER(Countl)    !Declare OVER four-byte unsigned                   integer
Count3  ULONG,DIM(4)    !Declare it an array of 4 unsigned longs
Count4  ULONG(5)              !Declare with initial value
Count5  ULONG,EXTERNAL        !Declare as external
Counts  ULONG,NAME('SixCount')!Declare with external name

Examp]eFile     FILE,DRIVER('Btrieve')    !Declare a file
Record            RECORD
Count7              ULONG,NAME('Counter') !Declare with external
                . .                       ! name

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
SREAL                    (четырехбайтное вещественное со знаком)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка SREAL(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Формат:  Знак     порядок        мантисса
        АДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДЩ
Биты:     31               23                 0

Диапазон:  0, +/- 1.17549435e-38 .. 3.40282347e+38
                                          (6 значащих цифр)

initial value     Числовая константа. Если опущена, подразумева-
                  ется ноль.

DIM               Размерность(и) переменной как массива.

OVER              Разделяет место в памяти с другой переменной.

NAME              Specify an alternate, "external" name for  the
                  field.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

SREAL описывает четырехбайтную числовую переменную со знаком с
плавающей запятой в формате короткого целого Intel 8087 (одинар-
ной точности). Присвоение значения, выходящего за пределы диапа-
зона SREAL приводит к непредсказуемым результатам.

Пример:

Countl  SREAL           !Declare four-byte signed floating point
Count2  SREAL,OVER(Countl)      !Declare OVER the four-byte
      signed floating point
Count3  SREAL,DIM(4)            !Declare it an array of 4 floats
Count4  SREAL(5)                !Declare with initial value
Count5  SREAL,EXTERNAL          !Declare as external
Count6  SREAL,NAME('SixCount')  !Declare with external name

ExampleFile FILE,DRIVER('Btrieve')     !Declare a file
Record        RECORD
Count7          SREAL,NAME('Counter')!Declare with external name
            . .

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
REAL                      (восьмибайтное вещественное со знаком)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка REAL(initial value)[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

   Формат:        знак    порядок         мантисса
                АДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДЩ
   Bits:           63               52                  0

Диапазон: 0,+/-2.22507385850720le-308..+/- 1.79769313496231e+308
                                         (15 значащих цифр)

initial value    Числовая константа. Если опущена, подразумева-
                 ется ноль.

DIM              Размерность(и) переменной как массива.

OVER             Разделяет место в памяти с другой переменной.

NAME             Задает "внешнее" имя для поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

REAL описывает восмибайтное вещественное число со знаком в  фор-
мате длинного вещественного  Intel 8087 (двойной  точности. При-
свение числа,  выходящего за  пределы диапазона  REAL приводит к
непредсказуемым результатам.

Пример:

Countl  REAL           !Declare eight-byte signed floating point
Count2  REAL,OVER(Countl)  !Declare OVER the eight-byte
        signed floating point
Count3  REAL,DIM(4)        !Declare it an array of 4 rlelals
Count4  REAL(5)            !Declare with initial value
Count5  REAL,EXTERNAL      !Declare as external
Count6  REAL,NAME('SixCount') !Declare with external name

ExampleFile  FILE,DRIVER('Clarion')  !Declare  a file
Record         RECORD
Count5           REAL,NAME('Counter')!Declare with external name
             . .

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
DECIMAL
    (упакованное десятичное число фиксированной длины со знаком)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка DECIMAL(length[,places][,initial value])[,DIM()][,OVER()]
	                                    [,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Формат:
   s d15 d14 d13 d12 d11 d10  d9  d8  d7  d6 d5  d4 d3 d2 d1 d0
  АДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДБДДБДДБДДБДДЩ
   60                                                          0
Биты:
Диапазон:  -999,999,999,999,999..999,999,999,999,999

length           ТРЕБУЕМАЯ числовая константа, содержащая  общее
		 число десятичных цифр (в целой и дробной частях
                 вместе взятых) в переменной. Максимальная длина
                 15.

places           Числовая константа, уточняющая количество  цифр
                 в дробной части (справа от десятичной точки)  в
                 переменной. Она  должна быть  меньше или  равна
                 параметру length. Если опущена, то  описываемая
                 переменная считается целочисленной.

initial value    Числовая константа. Если опущена, то по умолча-
                 нию - ноль.

DIM              Размерность(и) переменной как массива.

OVER             Разделяет место в памяти с другой переменной.

NAME             Задает "внешнее" имя поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

DECIMAL описывает переменную переменной длины со знаком, в фор-
мате BCD (binary-coded-decimal) Intel 8087. Каждый байт в
DECIMAL хранит две десятиные цифры (по 4 бита на цифру). Самый
левый байт хранит знак числа в своем старшем ниббле (0 = плюс,
что-нибудь другое - минус) и одну десятичную цифру. Таким обра-
зом, переменные типа DECIMAL всегда содержат нечетное число цифр
(скажем, DECIMAL(10) и DECIMAL(11) оба занимают по 6 байт. При-
свение DECIMAL-переменным значений, выходящих за пределы DECIMAL
приводит к непредсказуемым результатам.

Пример:

Countl  DECIMAL(5,O)   !Declare three-byte signed packed decimal
Count2  DECIMAL(5),OVER(Countl) !Declare OVER the three-byte
       signed packed decimal
Count3  DECIMAL(5.0),DIM(4)   !Declare it an array of 4 decimals
Count4  DECIMAL(5,0,5)               !Declare with initial value
Count5  DECIMAL(5,O),EXTERNAL        !Declare as external
Count6  DECIMAL(5,O),NAME('SixCount')!Declare with external name
ExampleFile FILE,DRIVER('Clarion')   !Declare a file
Record        RECOROD
Count7          DECIMAL(5,O),NAME('Counter 1)     !Declare with
            . .                                   !external name

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
PDECIMAL                                  (то же, что и DECIMAL)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка PDECIMAL(length[,places][,iinitial value])[,DIM()]
		[,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Формат:
   dl5 dl4 d13 dl2 d11 d10  d9  d8  d7  d6 d5  d4 d3 d2 d1 d0 s
  АДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДДБДДБДДБДДБДДБДДБДЩ
   63                                                        5 0
Биты:

Диапазон:  -999,999,999,999,999..999,999,999,999,999

length           ТРЕБУЕМАЯ числовая константа, содержащая  общее
		 число десятичных цифр (в целой и дробной частях
                 вместе взятых) в переменной. Максимальная длина
                 15.

places           Числовая константа, уточняющая количество  цифр
                 в дробной части (справа от десятичной точки)  в
                 переменной. Она  должна быть  меньше или  равна
                 параметру length. Если опущена, то  описываемая
                 переменная считается целочисленной.

initial value    Числовая константа. Если опущена, то по умолча-
                 нию - ноль.

DIM              Размерность(и) переменной как массива.

OVER             Разделяет место в памяти с другой переменной.

NAME             Задает "внешнее" имя поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

PDECIMAL  описывает  переменной  длины  десятичную переменную со
знаком в формате Btrieve и IBM/EBCDIC. Каждый байт PDECIMAL  со-
держит две десятичные  цифры, по 4  бита на цифру.  Самый правый
байт содержит знак в своем младшем ниббле (OFh или OCh  позитив-
ный,  ODh  негативный  и  одну  десятичную цифру. Таким образом,
PDECIMAL-переменные всегда содержат строго "нечетное" число цифр
(скажем, PDECIMAL(10) и PDECIMAL(ll) используют по 6 байт). При-
своение числа,  выходящего за  диапазон PDECIMAL  приводит к не-
предсказуемым результатам.

Пример:

Countl  PDECIMAL(5,O)  !Declare three-byte signed packed decimal
Count2  PDECIMAL(5),OVER(Countl)!Declare OVER the three-byte
      signed packed decimal
Count3  PDECIMAL(5,O),DIM(4)  !Declare it an array of 4 decimals
Count4  PDECIMAL(5,0,5)         !Declare with initial value
Count5  PDECIMAL(5,O),EXTERNAL  !Declare as external
Count6  PDECIMAL(5,O),NAME('SixCount')!Declare with external name
ExampleFile FILE,DRIVER('Btrieve')    !Declare a file
Record        RECORD
Count7          PDECIMAL(5,O),NAME('Counter')    !Declare with
            . .                                  ! external name

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
STRING                              (строка фиксированной длины)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
              і    length     і
метка STRING(іstring constantі)[,DIM()][,OVER()][,NAME()]
              і    picture    і                      [,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Формат:           Фиксированное число байт.

Диапазон:         От 1 до 65,535 байт.

length            Числовая константа, которая задает размер стро
                  ки в байтах. При использовани этого параметра,
                  строка инициализируется пробелами.

string constant   Начальное значение строки. Длина STRING-a уста
                  навливается (в байтах) по длине этой строковой
                  константы.

picture           Используется для форматирования значений, при-
                  своенных строке. Длина такой строки, это коли-
                  чество байт, достаточное для хранения формати-
                  рованной  строки. Строка инициализируется про-
		  белами.

DIM               Размерность(и) переменной как массива.

OVER              Разделяет место в памяти с другой переменной.

NAME             Задает "внешнее" имя поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

STRING описывает символьную строку фиксированной длины.

Пример:

Name       STRING(20)                !Declare 20 byte name field
NameArray  STRING(l),DIM(20),OVER(Name) !Declare array over name
                                        !  field
Company    STRING('Clarion Software, Inc.,) !The software
                                            ! company - 22 bytes
Phone      STRING(@P(###)###-####P)     !Phone number field - 13
                                        !  bytes
ExampleFile   FILE,DRIVER('Clarion')    !Declare a file
Record          RECORD
NameField         STRING(20),NAME('Name') !Declare with external
              . .                         !  name

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
CSTRING        (строка фиксированной длины, завершающаяся нулем)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
              і    length     і
метка CSTRING(іstring constantі)[,DIM()][,OVER()][,NAME()]
              і    picture    і                      [,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Формат:           Фиксированное число байт.

Диапазон:         От 1 до 65,535 байт.

length            Числовая константа, которая задает размер стро
                  ки в байтах, включая место для нулевого симво-
		  ла. При  использовани этого параметра,  строка
		  инициализируется пробелами.

string constant   Начальное значение строки.Длина CSTRING-a уста
                  навливается (в байтах) по длине этой строковой
                  константы плюс завершающий нулевой символ.

picture           Используется для форматирования значений, при-
                  своенных строке. Длина такой строки, это коли-
                  чество байт, достаточное для хранения формати-
                  рованной строки и завершающего нулевого симво-
		  ла. Строка инициализируется пробелами.

DIM               Размерность(и) переменной как массива.

OVER              Разделяет место в памяти с другой переменной.

NAME             Задает "внешнее" имя поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

CSTRING описывает символьную строку, завершающуюся нулевым  сим-
волом (ASCII  NULL). Она  соответствует строкам,  используемым в
языке C и  типу данных "ZSTRING"  в Btrieve Record  Manager. Под
CSTRING в памяти выделяется участок постоянной длины, при  этом,
завершающий нулефой символ помещается в конец введенных  данных.
CSTRING во  время исполнения  преобразовывается в  промежуточный
тип STRING. Тип CSTRING имеет смысл употреблять для  совместимо-
сти с внешними файлами и/или процедурами.

Пример:
Name       CSTRING(21) !Declare 21 byte field - 20 bytes data
OtherName  CSTRING(21),OVER(Name) !Declare field over name field
Contact    CSTRING(21),DIM(4)     !Array 21 byte fields - 80
                                  !  bytes data Company
Company    CSTRING('Clarion Software, Inc.') !23  byte string 22
                                             ! bytes data
Phone      CSTRING(@P(###)###-####p) !Declare  14 bytes 13 bytes
                                     !  data
ExampleFile       FILE,DRIVER('Btrieve') !Declare a file
Record              RECORD
NameField             CSTRING(21),NAME('ZstringField')
                                     !Declare with external name
                  . .

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
PSTRING            (строка со встроенным байтом-счетчиком длины)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
              і    length     і
метка PSTRING(іstring constantі)[,DIM()][,OVER()][,NAME()]
              і    picture    і                      [,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Формат:           Фиксированное число байт.

Диапазон:         От 1 до 255 байт.

length            Числовая константа, которая задает размер стро
                  ки в байтах, включая место для  первого по по-
		  рядку байта, в  котором  хранится  длина такой
		  строки.

string constant   Начальное значение строки.Длина PSTRING-a уста
                  навливается (в байтах) по длине этой строковой
                  константы плюс начальный байт-счетчик.

picture           Используется для форматирования значений, при-
                  своенных строке. Длина такой строки, это коли-
                  чество байт, достаточное для хранения формати-
                  рованной строки и начального байта длины.

DIM               Размерность(и) переменной как массива.

OVER              Разделяет место в памяти с другой переменной.

NAME             Задает "внешнее" имя поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

PSTRING описывает  символьную строку  с ведущим  байтом длины  и
длиной, заданной для этой  строки.. Она соответствует типу,  ис-
пользуемому в Паскале и типу данных "LSTRING" из Btrieve  Record
Manager. Место в памяти под нее выделяется постоянной длины,  но
байт длины содержит число  символов, реально хранящихся в  такой
переменной. Во время исполнения, PSTRING преобразуется в STRING.
Тип PSTRING имеет смысл употреблять для совместимости с внешними
файлами и/или процедурами.

Пример:

Name      PSTRING(21)     !Declare 21 byte field - 20 bytes data
OtherName PSTRING(21),OVER(Name)!Declare field over name field
Contact   PSTRING(21),DIM(4)!Array 21 byte fields - 80 bytes data
Company   PSTRING('Clarion Software,Inc.')   !23 byte string - 22
                                             !  bytes data
Phone     PSTRING(@P(###)###-####P) !Declare 14  bytes - 13 bytes
                                    !  data
ExampleFile  FILE,DRIVER('Btrieve') !Declare a file
Record         RECORD
NameField        PSTRING(21),NAME('LstringField')
             . .                    !Declare with external name

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
DATE                                       (четырехбайтная дата)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка       DATE[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Формат:         год  мм дд
              АДДБДДБДДБДДЩ

Диапазон:         год: 1..9999
                месяц: 1..12
                 день: 1..31

DIM             Размерность(и) переменной как массива.

OVER            Разделяет место в памяти с другой переменной.

NAME             Задает "внешнее" имя поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

DATE описывает четырех байтную переменную типа даты. Этот формат
соответствует типу поля "DATE"  в Btrieve Record Manager.  DATE,
используемые в  числовых выражениях,  преобразовываются в  число
дней, прошедших с 28 декабря 1800 года (стандартная  кларионовс-
кая дата, обычно хранится  как LONG). Допустимый диапазон  стан-
дартной кларионовской даты - от 1 января 1801 года по 31 декабря
2099 года. Использование значений, выходящих за пределы  данного
диапазона, приводит к непредсказуемым результатам. Тип DATE име-
ет смысл употреблять для совместимости с внешними файлами  и/или
процедурами.

Пример:

DueDate      DATE                 !Declare a date field
OtherDate    DATE,OVER(DueDate)   !Declare field over date field
ContactDate  DATE,DIM(4)          !Array of 4 date fields

ExampleFile   FILE,DRIVER('Btrieve') !Declare a file
Record          RECORD
DateRecd          DATE,NAME('DateField')
              . .                    !Declare with external name

См. также: Standard Date

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
TIME                                      (четырехбайтное время)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка       TIME[,DIM()][,OVER()][,NAME()][,EXTERNAL]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Формат:  чч мм сс ст
        АДДБДДБДДБДДЩ

Диапазон:          часы: 0..23
                 минуты: 0..59
                секунда: 0..59
            секунды/100: 0..99

DIM             Размерность(и) переменной как массива.

OVER            Разделяет место в памяти с другой переменной.

NAME             Задает "внешнее" имя поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.

TIME описывает четырехбайтную переменную типа времени. Этот фор-
мат соответствует  типу поля  "TIME" в  Btrieve Record  Manager.
TIME  используемые  в  числовых  выражениях, преобразовываются в
число  сотых  долей  секунды,  прошедших с полуночи (стандартное
кларионовское время, обычно хранится  как LONG). Тип DATE  имеет
смысл  употреблять  для  совместимости  с внешними файлами и/или
процедурами.

Пример:

ChkoutTime  TIME                   !Declare checkout time field
OtherTime   TIME,OVER(CheckoutTime)!Declare field over time field
ContactTime TIME,DIM(4)            !Array of 4 time fields

ExampleFile FILE,DRIVER('Btrieve')    !Declare a file
Record        RECORD
TimeRecd        TIME,NAME('TimeField')!Declare with external name
            . .

См. также: Standard Time

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
GROUP                               (составная структура данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
метка      GROUP[,PRE()][,DIM()][,OVER()][,NAME()][,EXTERNAL]
              declarations
            .
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

declarations     Одно или более  последовательных описаний пере-
		 менных.

PRE              Метка-префикс для переменных этой структуры.

DIM              Размерность переменных как массива.

OVER             Разделяет одно и то же место в  памяти с другой
                 переменной или структурой.

NAME             Задает "внешнее" имя поля.

EXTERNAL         Указывает  на то, что  переменная описана и па-
                 мять под нее выделена во внешней библиотеке. НЕ
                 разрешено с описаниями FILE, QUEUE или GROUP.


(SPA - Мне кажется, что они противоречат сами себе - пишут,  что
атрибут external не разрешен для group, а  сами указывают его  в
списке возможных параметров...)

Структура GROUP позволяет обращаться к нескольким переменным  по
одной метке. Это может  использоваться для измерения (?)  набора
переменных, или для присвоения или сравнения наборов  переменных
одним оператором. В больших сложных программах, структуры  GROUP
удобны для подержки наборов связанных разнотипных данных.  GROUP
должна завершаться точкой или оператором END.

При обращении оператора или  выражения к переменной типа  GROUP,
GROUP рассамтривается как STRING, составленная из всех  перемен-
ных этой структуры. Структура GROUP может быть вложена в  другую
структуру данных, как например, RECORD или другая GROUP.

Из-за  внутреннего  представления,  числовые  переменные  (кроме
DECIMAL) описанные в группе не совсем корректно  обрабатываются,
при использовании их как строк. По этой причине, построение клю-
ча, в котором используются поля типа GROUP, содержащие  числовые
переменные, может привест к неожиданной последовательности срав-
нения (collating sequence).

Пример:

NameGroup    GROUP,PRE(Nme)           !Name group
First          STRING(20)             ! first name
Middle        STRING(L)               ! middle initial
Last          STRING(20)              ! last name
             .                        !End group declaration

DateTimeGrp  GROUP,PRE(Dtg),DIM(10)   !Date/time array
Date           LONG
Time           LONG
             .                        !End group declaration

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
LIKE                    (определяемые пользователем типы данных)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
новое_описание LIKE(выглядит_как)[,DIM()][,OVER()][,PRE()]
                                                       [,NAME()]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

новое_описание                Метка описания нового типа данных.

выгдядит_как     Метка описания элемента данных, чье определение
                 будет использовано.

LIKE говорит компилятору определить новое_описание используя  то
же описание, что и для выглядит_как, включая все атрибуты.

Новое_описание может использовать атрибуты DIM и OVER. Если  вы-
глядит_как имело атрибут DIM, то новое_описание сразу будет мас-
сивом. Если в будущем  атрибут DIM добавится к  новому_описанию,
то размерности массива определятся в будущем (???).

Атрибуты PRE и NAME могут быть использованы, если надо. Если вы-
глядит_как уже имеет эти атрибуты, новое_описание унаследует  их
и может привести к ошибке компилятора. Чтобы исправить это поло-
жение,  задай  принудительно  PRE  или NAME для нового_описания,
чтобы перекрыть унаследованный(е) атрибут(ы).

Пример:

Amount       REAL            !Описываем поле
QTDAmount    LIKE(Amount)    !Используем то же описание
YTDAmount    LIKE(OTDAmount) !И еще раз
MonthlyAmts  LIKE(Amount),DIM(12)!То же описание, но для массива
                                 !из 12 элементов
AmtPrPerson  LIKE(MonthlyAmts),DIM(10)
          !То же описание, но уже для 120 элементов (12,10)

Construct  GROUP,PRE(Con)          !Описываем группу
Fieldl       LIKE(Amount)          !  con:field1 - real
Field2       STRING(10)            !  con:field2 - string(10)
           .
NewGroup   LIKE(Construct),PRE(New)!Описываем новую группу с
                                   !  new:field1 - real
                                   !  new:field2 - string(10)
AmountFile  FILE,DRIVER('Clarion'),PRE(Amt)
Record        RECORD
Amount          REAL               !Define a field
OTDAmount       LIKE(Amount)       !Use same definition
            . .

См. также: DIM, OVER, PRE, NAME

		      НЕЯВНЫЕ ПЕРЕМЕННЫЕ

Неявные переменные НЕ описываются в описаниях данных. Они созда-
ются компилятором, когда он встречает их впервые. Любая  неявная
переменная,  использованная  области  описания глобальных данных
(между ключевыми словами PROGRAM и CODE) это "Глобальные  Стати-
ческие Данные". Любая неявная переменная между ключевыми словами
MEMBER  и  PROCEDURE  (или  FUNCTION) это "Локальные Статические
Данные". Все остальные неявные переменные - это "Локальные Дина-
мические данные".

Неявные переменные обычно  используются для: индексов  массивов,
флагов true/false, промежуточных переменных в сложных вычислени-
ях; как управляющие переменные циклов, итд. Язык Clarion предла-
гает три типа неявных переменных:

#       Неявная LONG-переменная, ее метка (имя) завершается сим-
        волом # (решетка, номер).

$       Знак доллара указывает на неявную REAL-переменную, метка
        котороя завершается символом $ (доллар).

"       Двойная кавычка (не путать с двумя апострофами!) означа-
	ет неявную  32хбайтную строку.  Имя такой  переменной за
	канчивается символом " (кавычка или двойная кавычка).

Пример:

   LOOP Counter# - 1 TO 10                 !Implicit LONG
     ArrayField[Counter#] = Counter# * 2   !Initialize an array
   .
   Address"=CLIP(City) & ','&State &' '&ZIP!Implicit STRING(32)
   SHOW(12,16,Address")       !Used to display a temporary value

   Percent$ = ROUND((Quota/Sales),.1) * 100  !Implicit REAL
   SHOW(15,22,Percent$,@P%<<<.##P)
                              !Used to display a temporary value

См. также: Глобальные, Локальные, Статические, и Динамические
данные.


		       ЭЛЕМЕНТЫ ШАБЛОНОВ

Элементы шаблонов  предлагают формат  масок для  просмотра и/или
редактирования переменных. Элементы шаблонов можно  использовать
как параметры  для описания  переменных типа  STRING, ENTRY, или
STRING  OPTION  в  SCREEN-структурах;  как  параметры операторов
STRING в REPORT-структурах;  как параметры некоторых  процедур и
функций Клариона; или, как параметры описаний STRING, CSTRING  и
PSTRING. Есть семь типов элементов шаблонов: числовые и  валюта,
научная нотация, дата, время, образец, key-in template и строки.

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Шаблоны чисел и валюты
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
        @N[валюта][знак][заполнение]размер[группирование][места]
                                               [валюта][знак][B]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

@N              Все шаблоны чисел и валюты начинаются с @N.

валюта          Либо знак доллара ($) либо строковая  константа,
                заключенная в тильды (~). Если есть признак зна-
                ка и нет  признака заполнения, то  символ валюты
                будет "плавать" возле старшей левой цифры.  Если
                же  есть  признак  заполнения,  то символ валюты
                остается в  крайней левой  позиции. Если  символ
                валюты стоит после  размера и группирования,  то
                он  будет  располагаться  в  конце показываемого
                числа.

знак            Задает формат вывода отрицательных чисел.   Если
                тире стоит перед ЗАПОЛНЕНИЕМ и РАЗМЕРом, то  от-
                рицательные  числа  будут  выводиться  с ведущим
                знаком "минус". Если же тире идет после РАЗМЕРа,
                ГРУППИРОВАНИя, places, и ВАЛЮТы, то числа  будут
                выводиться с хвостовым минусом. Если в обоих по-
                зициях, предназначенных для ЗНАКа стоят  скобки,
                то отрицательные числа будут выводиться без  ми-
                нуса, но заключенными в скобки.

заполнение      Указывает вид ведущих нулей - нули, пробелы  или
                звездочки (*). Если ЗАПОЛНЕНИЕ опущено, то веду-
                щие пробелы подавляются.

               0 Ведущие нули выводятся, ГРУППИРОВАНИЕ подавлено
               - Вместо нулей - пробелы, ГРУППИРОВАНИЕ подавлено
               * Вместо ведущих нулей выводятся звездочки

размер          РАЗМЕР требуется, чтобы указать общее число зна-
                чащих цифр для вывода, включая количество цифр в
                признаке МЕСТА и всех символов форматирования.

группирование   Признак ГРУППИРОВАНИя  (кроме запятой,   которая
                принимается  по  умолчанию)  может  быть помещен
                справа  от  РАЗМЕРа,  для  указания  разделителя
                групп из трех цифр.

                . Порождает точки    - Порождает тире
                _ Порождает пробелы (НЕ подчеркивания!)

места           Задает  символ десятичного  разделителя и  число
                цифр в дробной части. Число цифр в дробной части
                должно быть меньше, чем РАЗМЕР. Десятичным  раз-
                делителем может быть точка (.), слабое  ударение
                ('), или буква "v" (только для описания  формата
		хранения STRING-полей, а не для вывода).

                 . Точка порождает точку как десятичный раздели-
                   тель
                 ` Слабое ударение  порождает запятую как  деся-
                   тичный разделитель.
                 v НЕ  порождает десятичный  разделитель (только
		   для хранения STRING-полей)

B               Если значение нулевое, то число выводится в виде
                пробелов.

Элементы шаблонов чисел и валюты форматируют числа для вывода на
экран или в отчет. Если значение больше, чем можно вывести в те-
кущем шаблоне, такое значение выводится в виде строки из звездо-
чек.

Пример:

Число    Результат  Формат
@N9      4,550,000  Девять   цифр,  группирование  запятыми  (по
		    умолчанию)
@N_9B    4550000    Девять цифр, без группирования, ведущие нули
                    выводятся как пробелы
@N09     004550000  Девять цифр, ведущие нули выводятся
@N*9     ***45,000  Девять цифр, заполнение звездочками, группи-
                    рование запятыми
@N9_     4 550 000  Девять цифр, группирование пробелами
@N9.     4.550.000  Девять цифр, группирование точками

Десятич. Результат  Формат
дробь
@N9.2    4,550.75   Две цифры в дробной части, десятичный разде-
		    литель - точка
@N_9.2B   4550.75   То же, без группирования,  если ноль, то вы-
                    водится строка пробелов.
@N_9'2    4550,75   Две цифры в дробной части, десятичный разде-
		    литель - запятая
@N9.'2   4.550,75   Десятичный разделитель - запятая,  группиро-
		    вание точками
@N9_'2   4 550,75   Десятичный разделитель - запятая, г руппиро-
		    вание пробелами


Со знак- Результат  Формат
ом
@N-9.2B  -2,347.25  Ведущий минус, если ноль,  то вывести пустую
		    строку
@N9.2-    2,347.25- Хвостовой минус
@N(10.2) (2,347.25) Вывести в скобках, если отрицательное

Знак доллара   Результат   Формат
 @N$9.2B       $2,347.25   Ведущий знак доллара,  вывести пустую
			   строку, если ноль
 @N$10.2-      $2,347.25-  Ведущий знак  доллара,  хвостовой ми-
                           нус, если отрицательное
 @N$(11.2)     $(2,347.25) Ведущий знак доллара, вывести в скоб-
                           ках, если отрицательное
Национальные валюты   Результат               Формат
 @N12_'2~ F~             1 5430,50 F          Франция
 @N~L. ~12'           L. 1.430.050            Италия
 @N~L~12.2               L1,240.50            Великобритания
 @N~kr~12'2             kr1.430,50            Норвегия
 @N~DM~12'2             DM1.430,50            Германия
 @N12_'2~ mk~             1 430,50 mk         Финляндия
 @N12'2~ kr~              1,430.50 kr         Швеция

Только храниене  Шаблоны:

Variablel      STRING(@N_6v2) !Шесть  байт хранятся БЕЗ десятич-
                              !ного разделителя
      CODE
      Variablel = 1234.56 !Храним в виде '123456'
      SHOW(1,1,Variablel,@N_7.2)
                          !Выводим с десятичн. точкой: '1234.56'

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Шаблоны научной нотации
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             @Em.n[B]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

@E      Все шаблоны научной нотации начинаются с @E.

m       Общее число символов в формате, предлагаемом данным шаб-
        лоном.

n       Число цифр после десятичной точки.

B       Если число равно нулю, то вывести пустую строку.

Шаблоны научной  нотации форматируют  очен большие  или же очень
маленькие числа. Вывод в виде десятичного числа в степени  деся-
ти.

Пример:
    Шаблон        Значение       Результат
    @E9.0         1,967,865     .20e+007
    @E12.1        1,967,865    1.9679e+006
    @E12.1B               0
    @E12.1       -1,967,865   -1.9679e+006
    @E12.1       .000000032    3.2000e-008

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Шаблоны даты
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             @Dn[s][B]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

@D      Все шаблоны даты начинаются с @D.

n       Номер шаблоны даты. Допустимые номера от 1 до 16.

s       Разделитель. Слэш (/) ставится между днем, месяцем и го-
        дом в большинстве шаблонов даты. Можно использовать аль-
        тернативные разделители, как то:

        . Порождает точки  ` (слабое ударение) порождает запятые
        - Порождает тире   _ (подчеркивание) порождает пробелы

B       Вывести пустую строку, если число равно нулю.

Даты можно хранить в числовых переменных (обычно LONG), DATE-по-
лях (для совместимости  с Btrieve), или  в STRINGах описанных  в
виде  дат.  Дата,  хранящаяся  в  числовой переменной называется
Стандартной Кларионовской датой.  Ее зачение представляет  собой
количество дней, прошедших с  28 декабря 1800 года.  Шаблон даты
преобразует это число в один из форматов даты.

Для ввода данных нельзя использовать шаблоны @D3, @D4, @D7 и @D8
поскольку в них требуется вводить не только цифры, но и буквы.

Пример:

   Шаблон    Формат             Результат

   @Dl       mm/dd/yy           10/31/59
   @D2       mm/dd/yyyy         10/31/1959
   @D3       mmm dd, yyyy       OCT 31,1959
   @D4       mmmmmmmmm dd, yyyy October 31, 1959
   @D5       dd/mm/yy           31/10/59
   @D6       dd/mm/yyyy         31/10/1959
   @D7       dd mmm yy          31 OCT 59
   @D8       dd mmm yyyy        31 OCT 1959
   @D9       yy/mm/dd           59/10/31
   @D10      yyyy/mm/dd         1959/10/31
   @D11      yymmdd             591031
   @D12      yyyymmdd           19591031
   @D13      mm/yy              10/59
   @014      mm/yyyy            10/1959
   @D15      yy/mm              59/10
   @D16      yyyy/mm            1959/10
 ------ Альтернативные разделители ----------
   @Dl.      mm.dd.yy      Разделитель - точка
   @D2-      mm-dd-yyyy    Разделитель - тире
   @D5_      dd mm  yy     Подчеркивание порождает разделитель
			   пробел
   @D6`      dd,mm,yyyy    Слабое ударение порождает разделитель
			   запятую

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Шаблоны времени
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             @Tn[s][B]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

@T      Все шаблоны времени начинаются с @T.

n       Номер формата времени. Допустимые номера форматов - от 1
        до 6.

s       Разделитель. Двоеточие (:) ставится по умолчанию между
        часами, минутами и секундами в большинстве форматов вре-
        мени. Можно использовать альтернативные разделители, как
        то:

         . Порождает точки ' (слабое ударение) порождает запятые
         - Порождает тире  _ (подчеркивание) порождает пробелы

B       Если значение равно нулю, то вывести пустую строку.

Время можно хранить в числовой переменной (обычно LONG), в TIME-
полях (для совместимости сBtrieve), или в STRINGах, описанных  в
формате времени. Время, хранящееся в числовой переменной называ-
ется стандартныс кларионовским временем. Оно представляет из се-
бя количество сотых долей секунды, прошедших с полуночи.  Шаблон
времени переводит это число в один из 6 форматов времени.

Нельзя использовать  для ввода  шаблоны (@T3  и @T6),  в которых
требуется вводить не только цифры, но и буквы.

Пример:

   Шаблон    Формат         Результат

   @T1       hh:mm          17:30
   @T2       hhmm           1730
   @T3       hh:mmXM        5:30PM
   @T4       hh:mm:ss       17:30:00
   @T5       hhmmss         173000
   @T6       hh:mm:ssXM     5:30:00PM
 ------ Альтернативные разделители ------------
   @T1.      hh.mm         Разделитель - точка
   @T1-      hh-mm         Разделитель - тире
   @T3_      hh mmXM       Подчеркивание порождает пробелы
   @T4'      hh,mm,ss      Слабое ударение порождает запятые

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Шаблоны "по образцу"
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             @p[<][#][x]P[B]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

@P      Все шаблоны "по образцу" начинаются с разделителя @P и
        заканчиваются разделителем P. Регистр обоих разделетелей
        должен быть один и тот же.

<       Целочисленная позиция. Если в этой позиции ноль,  то вы-
	вести пробел.

#       Целочисленная позиция. В этой позиции вывести цифру, не-
	зависимо от ее значения.

x       Необязательный символ для вывода. Эти символы будут при-
        сутствовать в выводной строке.

p       Все шаблоны "по образцу" должны заканчиваться на P. Если
	разделитель @p введен на нижнем регистре,  то и конечный
        разделитель P тоже должен быть в нижнем регистре.

B       Если ВСЕ число равно нулю, то вывести пустую строку.

Шаблоны "по образцу" содержат необязательные целочисленные пози-
ции и необязательные символы редактирования. Любой символ  кроме
< или  # считается  символом редактирования,  который появится в
форматированной строке-результате. Разделители  @P и P  чувстви-
тельны к регистру, на котором они введены. Это сделано для того,
чтобы, если скажем, надо  ввести символ "Р", то  можно использо-
вать разделители "р" и наоборот.

Пример:
   Шаблон            Значение   Результат
   @P###-##-####P    215846377  215-84-6377
   @P<#/##/##P       103159     10/31/59
   @P(###)###-####P  3057854555 (305)785-4555
   @P###/###-####P   7854555    000/785-4555
   @p<#:##PMp        530        5:30PM
   @P<#'<#"P         506        5' 6"
   @P<#Ib. <#oz.P    902        91b. 2oz.
   @P4##A-#P         112        411A-2

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Key-in Template Pictures
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             @K[@][#][<][x][\][?][^][_][і]K[B]
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

@K      Все key-in template шаблоны начинаются разделителем @K и
	завершаюися  разделителем  K.  Регистр  обоих "К" должен
        быть одним и тем же.

@       Разрешены только буквы на верхнем и нижнем регистрах.

#       Разрешены целые числа от 0 до 9.

<       У целых чисел выводить лидирующие нули пробелами.

x       Представляет необязательные постоянные символы для пока-
        за (любые символы, пригодные  для вывода на экран).  Эти
	символы попадают без изменений в результирующую строку.

\       Следующий за \ символ выводить на экран как  печатаемый.
        Так можно включить в результирующую строку любые символы
        форматирования (@,#,<,\,?,^,_,і) как обычные  печатаемые
	символы.

?       В этой позиции может быть любой символ.

^       В этой позиции разрешены только буквы на верхнем регист-
        ре.

-       В этой позиции разрешены только буквы на нижнем регистре

|       Ограничитель. Только данные введенные до | и  печатаемые
        символы, введенные до | будут помещены в  результирующую
	строку.

K       Все key-in  template шаблоны  завершаются символом  "K".
        Если разделитель @k был введен на нижнем регистре, то  и
        завершающий k должен быть введен на нижнем регистре.

B       Если ВСЕ число рано нулю, то вывести пустую строку.

Key-in шаблоны могут  содержать целочисленные позиции  ( # <  ),
символьные позиции ( @ ^ _ ), места для любых символов ( ? ),  и
печатаемые символы. Любой символ, кроме символов форматирования,
рассматривается как печатаемый, который попадает в форматирован-
ную строку-результат.  Разделители @K  иd K  чувствительны к ре-
гистру по той же причине, что и @P и P в шаблонах "по образцу".

Key-in  Шаблоны  специфичны  для  полей  типа STRING, PSTRING, и
CSTRING  для возможности произвольного редактирования и  проерки
допустимости поля. Использование key-in шаблонов, содержащих лю-
бые алфавитные индикаторы ( @ ^ _ ) с полями для ввода чисел да-
ет непредсказуемые результаты.

Поскольку использование режима вставки для key-in шаблонов,  мо-
жет также привести к непредсказуемым результатам, то key-in шаб-
лоны всегда принимают данные в режиме надпечатки, даже если есть
атрибут INS.

Пример:
    Шаблон           Введено значение   Строка-результат
    @K###-##-###K       215846377       215-84-6377
    @K####і-####K           33064             33064
    @K####і-####K       330643597        33064-3597
    @K<# ^^^ ##K          10AUG59         10 AUG 59
    @K(###)@@@-##\@##K 305abc4555    (305)abc-45@55
    @K###/?##-####K       7854555      000/785-4555
    @k<#:##^Mk               530P            5:30PM
    @K<#' <#"K                506              5' 6"
    @K4#_#A-#K               1g12            41glA-2

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Строковые шаблоны
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             @Slength
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

@S      Все строковые шаблоны начинаются с @S.

length  Определяет количество символов в шаблоне формата.

Строковый  шаблон  описывает  НЕформатированную  строку заданной
длины.

Пример:

Name          STRING(@S20)          !20-символьное поле-строка

		      АТРИБУТЫ ПЕРЕМЕННЫХ

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
PRE                                              (префикс метки)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             PRE(prefix)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

prefix  Допустимые  символы - буквы,  цифры от 0  до 9 и  символ
        подчеркивания. Префикс  должен ничинаться  с буквы  и не
        должен быть зарезервированм словом.

Атрибут PRE предусматривает  префикс метки для  сложных структур
данных. Он используется для  того, чтобы различать переменные  с
одинаковыми именами в разных  структурах. При обращении к  пере-
менной исполняемымы  операторами, при  присвоениях и  передаче в
списках параметров,  префикс присоединяется  к метке  двоеточием
(Pre:Метка). PRE  можно использовать  со следующими  структурами
данных:

        DETAIL    FILE      FOOTER
        GROUP     HEADER    OPTION
        QUEUE     RECORD    REPEAT
        REPORT    SCREEN

Пример:

MasterFile    FILE,DRIVER('Clarion'),PRE(Mst)    !Declare master
Record          RECORD                           !  file layout
AcctNumber        LONG
              . .
Detail      FILE,DRIVER('Clarion'),PRE(Dtl)      !Declare detail
                                                 !  file layout
Record        RECORD
AcctNumber      LONG
            . .
         GROUP,PRE(Mem)     !Declare some memory variables
Message    STRING(30)
Page       LONG
Line       LONG
Device     STRING(30)
         .
        CODE
        IF Dtl:AcctNumber <> Mst:AcctNumber !Is it a new account
           Mem:Message     -   'New   Account' ! display message
           DO MatchMaster                      !  get new record
        .

См. также:  Зарезервированные слова

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
DIM                                        (размерность массива)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             DIM(измерение,....,измерение)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
измерение  Числовая константа, которая задает количество элемен-
           тов в данном измерении массива.
Атрибут DIM объявляет перемнную-массив. Такая переменная  повто-
ряется столько раз, сколько указано в параметрах ИЗМЕРЕНИЕ. Мно-
гомерные массивы можно  рассматривать как вложенные  одномерные.
Каждое измерение массива имеет соответствующий индекс. Таким об-
разом, обращаясь  к переменной  - элементу  трехмерного массива,
надо указать три индекса. Хотя на число измеренний не накладыва-
ется ограничений, но рамер массива не должен превышать  65,520б.
С атрибутом DIM можно использовать следующие типы данных:

SHORT   REAL      STRING    CSTRING  PSTRING
ULONG   USHORT    SREAL     DATE      TIME

Индексы однозначно определяют конкретный элемент массива. Список
индексов содержит индексы для каждого ИЗМЕРЕНИЯ массива. В спис-
ке, индексы отделяются друг от друга запятыми, а весь списоу за-
ключается в квадратные скобки ([ ]).  Индекс может быть числовой
константой,  выражением  или  функцией.  Если надо обратиться ко
всему массиву целиком, то надо использовать метку этого  массива
без списка индексов.

Структура GROUP - особый случай. Каждый уровень вложенности  до-
бавляет индексы  и GROUP  и ее  переменным. Данные,  описанные в
GROUP можно использовать точно так же, как и собственно GROUP.

Пример:

Screen   GROUP                   !Текст на экране
Row        GROUP,DIM(25)         !25 строк
Pos          GROUP,DIM(80)       !Две тысячи знакомест
Attr           BYTE              !Байт атрибута
Char           BYTE              !Собственно символ
         . . .                   !Завершаем все три группы
В предыдущей группе:
Screen        это 4,000байтная GROUP
Row[1]        это 160байтная GROUP
Pos[1,1]      это 2хбайтная GROUP
Attr[1,1]     это BYTE
Char[1,1]     это BYTE

Month   STRING(10),DIM(12)       !Размерность для месяца - 12
        CODE
        CLEAR(Month)          !Весь массив заполнить пробелами
        Month[1] = 'January'  !Заполнить массив названиями
        Month[2] = 'February'
        MonthE3] = 'March'

См. также: MAXIMUM

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Массивы как параметры процедур и функций
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН

Массив можно передать в  PROCEDURE или FUNCTION. Прототип,  опи-
санный в MAP-структуре должен описывать тип данных "массив"  как
параметр-переменную ("передается  по адресу")  с пустым  списком
индексов. Вызывающий оператор  может передать массив  в ROCEDURE
или FUNCTION.

Пример:

     PROGRAM
      MAP
        MainProc
        AddCount(*LONG[,],*LONG[,]) !Передаем 2 двумерных
      .                             !масива типа LONG
      CODE
      MainProc

MainProc        PROCEDURE

TotalCount        LONG,DIM(10,10)
CurrentCnt        LONG,DIM(10,10)
      CODE
      AddCount(TotalCount,CurrentCnt)!Вызывая процедуру, переда-
                                     !ем ей массивы

AddCount        PROCEDURE(Tot,Cur)  !Процедуре нужны два массива
   CODE
   LOOP I# = 1 TO MAXIMUM(Tot,1)  !Цикл по первому индексу
     LOOP J# = 1 TO MAXIMUM(Tot,2)!Цикл по второму индексу
       Tot[I#,J#l += Cur[I#,J#]   !  увеличить TotalCount на
   . .                            !  CurrentCnt
   CLEAR(Cur)                     !Очистить массив CurrentCnt
   RETURN

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

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
EXTERNAL                              (переменная описана извне)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             EXTERNAL
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

Атрибут EXTERNAL  указывает на  то, что  переменная, которой  он
присвоен, описана во внешней библиотеке. Таким образом, перемен-
ная с атрибутом EXTERNAL определена и может использоваться  кла-
рионовским кодом, но  под нее не  будет выделена память.  Память
для такой переменной выделяется самой внешней библиотекой.  Этот
атрибут позволяет Clarion-программам иметь доступ к полям,  опи-
санным как PUBLIC во внешних библиотеках.

EXTERNAL допустим только для переменных, описанных ВНЕ  структур
FILE, QUEUE или GROUP.

Пример:

        PROGRAM
        MAP
          MODULE('External.Obj')
            AddCount,PASCAL!External library with PASCAL
        . .                !         calling  convention
TotalCount  LONG,EXTERNAL !Variable declared in external library

См. также: NAME

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
NAME                                       (указать внешнее имя)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             NAME([ іconstant і])
                    іvariable і
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

constant  Строковая константа.

variable  Метка STRING-переменной, описанной в области описания
          глобальных данных или в области описания данных моду-
          ля-члена.

Атрибут NAME задает "внешнее" имя. Он полностью независим от ат-
рибута EXTERNAL -  между ними не  требуется никакой связи,  хотя
оба этих атрибута могут быть у одной и той же переменной.

Атрибут NAME можно использовать в прототипах процедур и функций,
применять к FILE,  KEY, INDEX, MEMO,  любому полю, описанному  в
FILE или QUEUE структурах, или к любому полю вне структуры.  Ат-
рибут NAME имеет различные свойства, в зависимости от того,  где
он использован.

NAME(константа) можно задать в прототипах процедур или  функций.
Константа  -  это  внешнее  имя,  используемое компоновщиком для
идентификации процедуры или функции из внешней библиотеки.

Атрибуты NAME(константа)  или NAME(переменная)  в описании  FILE
задает ДОСовскую спецификацию полного имени файла. Если констан-
та или переменная  не содержит диск  и путь, то  подразумеваются
текущие диск и каталог. Если опущено расширение файла, то подра-
зумевается расширение, стандартное для данного файлового драйве-
ра. Некоторые файловые драйверы требуют, чтобы KEYи, INDEXы, или
MEMO-поля были  в отдельных  файлах. Таким  образом, NAME  можно
применить к описаниям KEY, INDEX или MEMO. Атрибут NAME без кон-
станты  или  переменной,  ссылается  на метку того описательного
оператора, к которому он был применен (включая префикс, если та-
ковой указан).

NAME(константа)  может  применятся  к  любому полю, описанному в
структуре RECORD. Это позволяет использовать имена полей, не на-
рушающих ограничений на имена, накладываемые отдельными файловы-
ми драйверами.

NAME(константа) можно применять к любому полю в структуре QUEUE.
Так достигается возможность динамических сортировок во время ис-
полнения.

NAME(константа) можно также  применять к любой  переменной, опи-
санной вне какой-либо структуры. Это дает возможность  компонов-
щику по внешнему имени идентифицировать переменную, описанную во
внешней библиотеке. Если переменная имеет еще атрибут  EXTERNAL,
то она описана, и память под нее выделяется самой внешней библи-
отекой. Без атрибута  EXTERNAL, такая переменная  описывается, и
память под нее выделяется в кларионовской программе, и она явля-
ется внешней по отношению ко внешней библиотеке.

Пример:

         PROGRAM
         MAP
           MODULE('External.Obj')
             AddCount(LONG),LONG,C,NAME('_AddCount')
                             !C function named ' AddCount,
         . .
Cust FILE,PRE(Cus),NAME(CustName) !Filename in CustName variable
CustKey  KEY('Name'),NAME('c:\data\cust.idx')
       				  !Declare key,cust.idx
Record   RECORD
Name       STRING(20),NAME        !Default NAME to 'Cus:Name'
         .                        !End file declaration
SortOue QUEUE,PRE(Que)
Fieldl    STRING(10),NAME('FirstField') !QUEUE SORT NAME
Field2    LONG,NAME('SecondField')      !QUEUE SORT NAME
        .
CurrentCnt  LONG,EXTERNAL,NAME('Cur')  !Field declared public in
                                     ! external library as 'Cur'
TotalCnt        LONG,NAME('Tot')   !Field declared external
                                   !in external library as 'Tot'

См. также: прототипы  процедур  и  функций,  FILE,  KEY,  INDEX,
	   QUEUE, EXTERNAL

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
OVER                                  (разделяет место в памяти)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
             OVER(переменная)
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
переменная  Метка переменной, которая уже занимает память,  под-
            лежащую разделу.

Атрибут OVER позволяет ссылаться на один и тот же участок памяти
двумя разными путями. Поле,  описанное с атрибутом OVER,  должно
быть НЕ больше, чем переменная, поверх которой она накладывается
(хотя, конечно, она может быть меньше).

(SPA. Для тех кому это трудно понять сразу, как мне было в  свое
время, скажу что этот механизм аналогичен паскалевским записям с
вариантами)

Поле в структуре GROUP НЕ может быть описано поверх  переменной,
которая находится ВНЕ этой  структуры GROUP. Также, нельзя  опи-
сать поле поверх перемнной, которая является частью списка пара-
метров процедуры или функции.

Пример:

    CustNote      FILE,PRE(Csn)       !Declare CustNote file
    Notes           MEMO(2000)        !The memo field
    Record          RECORD
    CustID            LONG
                  . .
    CsnMemoRow    STRING(IO),DIM(200),OVER(Csn:Notes) !Csn:Notes
                                 !можно рассматривать как одно
                                 !целое или блоками по 10 байт
См. также: DIM

		     ДИРЕКТИВЫ КОМПИЛЯТОРА

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
EQUATE                                         (назначить метку)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
                   і label   і
метка       EQUATE(іconstant і)
                   і picture і
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

метка         Метка исполняемого оператора. Используется для
              присвоения оператору еще одной метки.

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

picture       Элемент шаблона. Дает сокращенное имя шаблону. Тем
              не менее, форматтеры  экранов и отчетов  в кларио-
              новском редакторе не распознают назначенные  метки
              как разрешенные шаблоны.

Директива EQUATE не занимает память во время исполнения. Она ис-
пользуется для присвоения метки другой мекте или константе. Мет-
ка директивы EQUATE не может быть такой же, как ее параметр.

Пример:
    Init        EQUATE(SetUpProg)  !Обзовем процедуру по другому
    Off         EQUATE(0)          !Off означает нуль
    On          EQUATE(1)          !On означает один
    Pi          EQUATE(3.1415927)  !Значение числа ПИ
    EnterMsg    EQUATE('Press Ctrl-Enter to SAVE')
    SocSecPic   EQUATE(@P###-##-##IfltP) !Формат номера карточки
					 !социального страхован.

См. также: Зарезервированные слова

ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
SIZE                                    (размер памяти в байтах)
НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН
                  і label   і
             SIZE(іconstant і)
                  і picture і
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД

метка         Метка ранее описанной переменной.

constant      Числовая или символьная константа.

picture       Элемент шаблона.

SIZE заставляет компилятор сообщить количество памяти (в байтах)
выделенной для хранения параметра.

Пример:
SavRec    STRING(1),DIM(SIZE(Cus:Record)
                        !Строк столько же, каков размер записи
StringVar STRING(SIZE('Clarion Software, Inc.'))
                        !Строка должна быть достаточной для этой
			!константы длины
LOOP I# = 1 TO SIZE(ParseString)
                        !Цикл по все символам строки
PicLen = SIZE(@P(###)###-####P) !Сохраняем размер шаблона



Яндекс цитирования