Подключите Ваш компьютер к проекту распределённых вычислений!
Этим Вы окажете большую помощь науке и медицине.
См. подробнее: http://solidstate.karelia.ru/~yura/pyldin/yura/computing.htm


<< Вернуться к содержанию





                ВЪВЕДЕНИЕ

        Разглеждания в тази материал  програмен продукт UniBASE е
предназначен  за  работа  с  големи  обеми  от еднообразни данни,
организирани  в  подходящи  структури  в  паметта  на  компютъра.
Продуктът е  предназначен за работа в  операционна система UniDOS
на персонален микрокомпютър ПЪЛДИН.  Този текст не е предназначен
за запознанство с компютъра или операционната система. Предполага
се, че читателят вече добре  владее работата с дискетите, както и
основните команди на UniDOS. Освен  това за препоръчване е той да
има някакъв опит в програмирането, например на езика Basic, което
ще му помогне в усвояването на работния език на продукта UniBASE.

        UniBASE  е представител  на този  клас програмни продукти
наречени   системи   за   управление   на   бази   данни  (СУБД).
Предназначението им е да улесни работата с големи обеми от данни,
организирането им в таблици,  извършването на различни операции с
тях  като  търсене  на  данни  по  някакъв  признак,  промяна  на
определени  данни,  добавяне,  премахване  и  други.  За  целта в
UniBASE е реализиран програмен език с който се задават различните
заявки  за  работа  с  данните.  С  този  език  могат да се пишат
програми, които в комплект  с данните, които обработват образуват
завършени   информационни   системи   с   най-различни  сфери  на
приложение.

        При   разработването   на   продукта   е   търсена  пълна
съвместимост на  основните файлове съхраняващи данните  с тези на
широко  разпространените  аналогични   продукти  на  персоналните
компютри от типа  IBM PC - dBase III, FoxBASE  и други. Така също
програмният  език   използван  в  UniBASE   е  много  близък   до
програмните езици на посочените продукти, и притежава голяма част
от техните  възможности. Поради това много  от разработените вече
информационни системи  на тези СУБД и  предназначени за работа на
16-битовите компютри с лекота могат  да се използват и на неговия
по-малък родственик ПЪЛДИН.

        На  тези читатели,  които нямат  опит в  работата с други
СУБД пожелаваме  повече кураж и търпение.  Усвояването на UniBASE
ще бъде за тях едно добро начало.

        Приятна работа със системата за управление на бази данни
                          U n i B A S E

                В НАЧАЛОТО

        Вие  имате  дискетата  с  програмния  продукт  UniBASE. В
следващите редове  се указва какво  е необходимо за  да можете да
работите с него.

        Вашият Пълдин трябва да  има работеща операционна система
UniDOS, а също и ROM  версия на интерпретатора на Y-код използван
за работа  с програмния език UniPASCAL.  Останалите компоненти на
UniPASCAL  не са  необходими. UniBASE  може да  работи добре  ако
вашият компютър  е снабден само  с едно флопи-дисково  устройство
тъй  като   неговите  програмни  части  не   са  големи  и  върху
програмната дискета  освен тях могат  да се съберат  и някои Ваши
файлове  с данни.  Все пак  за работа  с по-големи  файлове е  за
предпочитане  да имате  две дискетни  устройства. Много  добре би
било ако компютъра Ви е свързан чрез локална мрежа към твърд диск
на  16-битов компютър  от типа  на IBM  PC/XT. В  този случай  ще
можете да  разположите всички програмни части  на UniBASE в върху
твърдия  диск, както  и всички  ваши програми  и данни,  което ще
облекчи значително работата Ви.

        При  подготовка  на  UniBASE  за  работа  знайте, че не е
наложително  всички негови  компоненти да  са разположени  в една
директория. Така например програмата UBCREATE  ще Ви е нужна само
когато  създавате  дефинициите  на  вашите  таблици,  но не и при
работа с тях. Важно е  обаче файлът UNIBASE.DAT, съдържащ основни
дефиниции  да бъде  разположен в  същата директория,  където е  и
основната част от програмата UB.PGM, или в тази директория, която
е текуща при стартирането на системата.  След старта този файл не
е нужен по-нататък, но не трябва  да сменяте мястото на дискетата
с главната част  на програмата, тъй като  тя е нужна по  време на
работа за зареждане в  оперативната памет на различните програмни
части. Вашите  данни, както и  програмите написани на  програмния
език на  UniBASE можете да разполагате  по различни директории на
дискетите и евентуалния твърд диск,  където Ви е угодно - тяхното
разположение не влияе върху работата на UniBASE.

                ПРЕДВАРИТЕЛНИ ПОЯСНЕНИЯ

        При  излагането на  синтаксиса  на  командите в  езика на
UniBASE,  и  при  пояснението  им  се  използват  редица понятия,
смисъла на които трябва да е вече познат на читателя. Те включват
основни  елементи на  езика, основни  обекти с  които се  работи,
предварителни  уговорки  за  подразбиране  и  други общи моменти.
Предназначението на този раздел е тяхното разяснение.

        1. Основни типове данни.

        UniBASE поддържа следните основни типове данни :

           - Символни  полета. Символните полета  се използват за
запаметяване  на  символи,  които  могат  да  бъдат  въведени  от
клавиатурата. Това  са ASCII символи.  Те включват букви,  цифри,
специални знаци и интервали. Максималният размер на едно символно
поле е 255. Означават се с името CHARACTER или съкратено C.

           -  Числови  полета.  Числовите  полета  са  два  вида:
целочислени и десетични. Цялото число е число без десетична част.
Ширината на числовото поле представлява броя на цифрите, които то
може  да  съдържа  /десетичната  точка  се  брои  за една цифра/.
Означават се с името NUMERIC или съкратено N.

           -   Логически  полета.   Логическите  полета   приемат
единствен   символ,   представляващ   стойност   ИСТИНА  /  ЛЪЖА.
Логическата истина  се въвежда като  т, Т, у,  или Y. Логическата
лъжа се въвежда като F, f, N  или n. Означават се с името LOGICAL
или съкратено L.

           -  Поле  за  дати.  Нормалният  формат  за въвеждане и
извеждане  на дати  е дд.мм.гг.   Размерът на  полето е  8 байта.
Означават се с името DATE или съкратено D.


        2. Имена в UniBASE.

        За указване  на всички променливи, атрибути  на данните и
работни файлове се използват имена.  Имената могат да бъдат дълги
до 11 символа, да започват задължително  с буква и да не съдържат
вмъкнати  интервали. Името  може да  се състои  от букви, цифри и
подчерти.

        3. Файлове с които работи UniBASE.

        UniBASE използва и поддържа следните видове файлове:

              - релационни таблици        - .DBF
              - индексни файлове          - .NDX
              - програмни файлове         - .PRG
              - форматни файлове          - .FMT
              - файлове с променливи      - .VAR
              - стандартен текстов файл   - .TXT

        Всички тези файлове са стандартни файлове в операционната
система UNIDOS. Техните имена се  задават както имената на всички
други файлове в UniDOS - с име на диска и директорията, където се
намират, името на файла и  разширението му. При работа с UniBASE,
когато  е необходимо  да укажете  име  на  файл от  даден тип  от
изброените не е наложително да указвате и разширението му - то се
подразбира.  Все  пак  можете  да  слагате  и други разширения на
имената oсвен подразбраните, но те трябва да се указват от Вас. В
командите и програмите UniBASE имената на файловете се задават на
местата където това е необходимо като последователност от символи
оградена от останалите части на оператора с интервали. UniBASE не
проверява  дали посоченото име е валидно име на файл, за това  се
грижи UniDOS. Ако искате  за име на файл да посочите съдържанието
на дадена променлива, използвайте макро заместване &. Символът  &
не се смята за макро повикване във вътрешността на името на файл.

        В  следващите  редове  ще   отговорим  на  въпроса  какво
представлява всеки от тези видове файлове.

        3.1. Релационна таблица или база данни (.DBF)

        Това са  най-важните файлове с  които работи UniBASE.  Те
съдържат  в себе  си всички  Ваши  данни  от един  и същи  тип, с
еднаква структура. В тях данните са подредени в таблица от редове
и колони.  В тази  таблица колоните  съдържат отделните  атрибути
(съставни части) на Вашите данни и имат свои имена, а редовете на
таблицата са всички екземпляри от  този тип данни. Цялата таблица
занапред ще  наричаме база данни, базов  файл, релационна таблица
или просто  таблица. Редовете на таблицата  ще наричаме записи, а
колоните на  таблицата ще наричаме полета  на данните. Всяко поле
има  свое  име,   което  е  уникално  в  една   таблица,  тип  на
съдържанието  му,  и  големина.  Дефиницията  на  една релационна
таблица се създава с помощта на програмата UBCREATE, която е част
от UniBASE, и е пояснена по-нататък в това ръководство. В момента
на създаването си всяка таблица е празна, т.е. не съдържа редове,
а след  това  Вие  записвате  данните  си  в  нея  с  помощта  на
различните команди на езика на  UniBASE. Една такава таблица може
да съдържа до 65535 записа с данни.

        3.2. Индексни файлове (.NDX)

        Тези  файлове  се  генерират  от  UniBASE  с  помощта  на
подходящи  команди. Съдържат  данни във  вътрешно представяне  за
осъществяване на  бързо търсене в  базата данни. Използването  на
индексни файлове  дава възможност бързо  да се търсят  определени
данни,  а също  и да  се променя  логическата последователност на
базовия файл, като разглеждането му става в нарастващ ред.

        3.3. Програмни файлове (.PRG)

        Повечето  от своите  команди  Вие  можете да  задавате от
клавиатурата и  тогава UniBASE ще  ги изпълнява веднага.  В някои
случаи  се  налага  обаче  отделните  команди  да  се  свържат  в
програма, текста на която се записва в програмен файл. Употребата
на  програмни  файлове  също  позволява  да  се  използват всички
команди от езика на UniBASE, като например командите за цикъл, за
условен преход  и други. Когато UniBASE  приема Вашите команди от
клавиатура  ще казваме  че той  работи в  директен или в диалогов
режим,  а  когато  се  изпълняват  команди  от програмен файл, ще
казваме че се работи в програмен режим. Тези команди, които не са
достъпни в диалогов режим ще се приемат, но няма да се изпълняват
когато ги задавате  от клавиатурата, и ще Ви  се издаде подходящо
съобщение за грешка.

        3.4. Форматни файлове (.FMT)

        Някои  от   командите  в  UniBASE   дават  възможност  за
редактиране  на  съдържанието  на  базата  данни  като  при  това
оформлението  на  вида  на  екрана  може  да  бъде стандартно или
указано от  Вас. Ако за базата  данни е зададен и  форматен файл,
този форматен файл ще се използва за указването на вида на екрана
по  време на  интерактивна работа  с данните.  Форматните файлове
съдържат  последователност  от  команди   на  UniBASE,  които  се
изпълняват  автоматично  всеки  път  когато  се  извика  някоя от
командите  за интерактивна  работа с  данните. Такива  команди са
Edit,  Append,  Insert.  Въпреки  че  в  UniBASE  няма  специална
забрана,  за предпочитане  е да  се въздържате  от употребата  на
множество команди във форматните файлове. За оформление на екрана
се използват командите от групата "@", Set Color, Clear и други.


        3.5. Файлове с променливи (.VAR)

        Генерират се от UNIBASE при командата SAVE.

        3.6. Текстови файлове (.TXT)

        Тези  файлове съдържат  данни или  друга информация която
може да бъде  въведена или е изведена от  системата. Поддържат се
от почти всички продукти и  са стандартни за обмен между продукти
с различно вътрешно представяне на данните.


        4. Работни области.

        Във всеки един момент UniBASE може да работи едновременно
с 10 работни  области във всяка  от които има  по една релационна
таблица.  Една от  тези области  се нарича  текуща и  се избира с
командата Select. Всички команди върху базата данни се изпълняват
върху  таблицата, която  е  отворена  в текущата  работна област.
Всички  работни области  имат свои  имена. Тези  имена можете  да
зададете при  отварянето на таблицата  с командата Use  .. Alias.
Ако не зададете име на  областта UniBASE ще и присвои автоматично
име съответстващо на номера и, като  първата област ще има име A,
втората  B, и  т.н. Когато  в някоя  команда е  необходимо да  се
укажат полетата от текущата база данни, е достатъчно просто да се
напишат имената им. За да  се указват полетата от другите области
е необходимо преди името на полето да се напише името на областта
и "->".

        5. Математически изрази.

        Математическите   изрази   се   състоят   от   константи,
променливи,  полета  от  данни,  вградени  функции  в  UniBASE  и
аритметични и  логически операции над  тези обекти. Аритметичните
операции са +, -, *, /, **; а логическите операции са сравненията
за  равенство, различие,  >, <,   >=, <=,  както и  операциите от
булевата алгебра and, or, not.

        Следва  пълният  списък  на  двуаргументните  операции  с
инфиксен запис, които можете да използвате в изразите на UniBASE.
След името  на операцията са  дадени типовете на  двата аргумента
(отляво  и  отдясно),  а  след  знака  ":"  типа  на  резултата и
приоритета   на  операцията.   При  по-сложни   изрази  първо  се
изпълняват  операциите   с  най-голям  приоритет,   а  след  това
останалите.  Ако  искате  да  промените  реда  на  изпълнение  на
операциите можете да използвате скоби "(" и ")".

        **           N N     : N   8
        *            N N     : N   7
        /            N N     : N   7
        +            N N     : N   6
        +            C C     : C   6
        +            U N     : N   9
        -            N N     : N   6
        -            U N     : N   9
        =            N N     : L   5
        =            C C     : L   5
        =            L L     : L   5
        =            D D     : L   5
        <>             N N     : L   5
        <>             C C     : L   5
        <>             L L     : L   5
        <>             D D     : L   5
        <         N N     : L   5
        <         C C     : L   5
        <         L L     : L   5
        <         D D     : L   5
        >         N N     : L   5
        >         C C     : L   5
        >         L L     : L   5
        >         D D     : L   5
        <=        N N     : L   5
        <=        C C     : L   5
        <=        L L     : L   5
        <=        D D     : L   5
        >=        N N     : L   5
        >=        C C     : L   5
        >=        L L     : L   5
        >=        D D     : L   5
        not          U L     : L   4
        or           L L     : L   2
        and          L L     : L   3
        mod          N N     : N   7

        Вградените функции  в UniBASE се  извикват като се  укаже
името им и след това списъка на параметрите в скоби. Тези функции
които нямат  параметри се извикват  като след името  им се напише
"()",  в  противен  случай  UniBASE  ще  приеме  името  за име на
променлива.  Вградените функции  са описани  в отделен  раздел на
това ръководство.

        В математическите  изрази могат да  участват работните Ви
променливи,  които вече  сте създали,  но не  може да се създават
променливи.  При среща  на  непознато  име в  математически израз
UniBASE ще  издаде съобщение за грешка.  Използването на полетата
от текущата база  данни става като просто се  указват имената им.
Полетата  от  базите  данни  отворени  за  използване  в някоя от
другите работни области  също са достъпни, като пред  името им се
пише името  на областта и  знака "->". Ако  някое от полетата  от
текущата  база  данни  има  същото  име  като  някоя  променлива,
операцията ще бъде извършена върху полето.

        При  описанието на  командите  там  където трябва  да има
математически израз ще използваме означението "exp". Там където е
необходимо резултатът от изчислението на израза да бъде от числов
тип, ще означаваме  "expN", за изрази с резултат  от символен тип
ще пишем "expC", а за логически изрази - "cond".

        6. Обхват на действие на командите (scope).

        Много  от  командите  на  UniBASE  извършват  една и съща
операция  многократно  върху  отделните  записи  на базата данни.
Такива са командите Edit, List, Replace Sum и други. При това Вие
можете  да укажете  дали съответното  действие да  се извърши  за
всички записи от  файла или само за някаква  част от него. Можете
също така да зададете и критерий  за селекция, на който трябва да
отговарят записите които ще се обработват. Онези записи, които не
отговарят на  този критерий няма да  бъдат обработени. Освен това
можете  да  укажете  условие  при  което  да спре изпълнението на
командата.  Всичко  това  става  с  помощта  на  незадължителната
конструкция за обхват "scope" , която влиза в тези команди.

        Конструкцията  "scope"  се  състои  от три незадължителни
части и се описва така :

        scope ::=  [ All | Rest | Next expN | Record expN ]
                   [ For cond ]
                   [ While cond ]

        Тук и  по-нататък ще използваме  някои означения от  един
формален  метод  за  описание  на  езици  за програмиране наречен
разширена Бекус-Наурова форма (РБНФ). Ще предполагаме че той вече
е познат на читателя, но на места ще даваме пояснения за неговото
значение. В  нашия случай трите  части на конструкцията  scope са
заградени в средни скоби [ и  ]. Това значи, че всяка такава част
не  е  задължителна  и  може  да  се  пропусне  при задаването на
командата. Ако някоя  част на конструкцията не е  указана, то при
изпълнението  на  командата  ще  се  смята  че  тя  е указана със
съответното си подразбрано значение.

        Първата част  на обхвата се отнася  до това какъв участък
от  файла ще  се обработва.  Можете да  зададете един от четирите
варианта разделени със символа "|"  (използва се за изброяване на
алтернативни възможности, чете се "или"). Думата All означава, че
командата трябва да се изпълни  върху целия файл, като се започне
от първия логически  запис и се стигне до  последния. Думата Rest
указва останалата част на файла от  текущия запис до края му. Ако
използвате  третия  вариант,  обхвата  на  действие  ще бъде само
следващите expN (резултата от пресмятането на израза) записа, или
до края  на файла ако  в остатъка от  файла има по-малко  записи.
Последният  вариант се  използва когато  искаме операцията  да се
извърши само върху записа с указан номер - ако той съществува във
файла. Ако тази част от конструкцията е пропусната се подразбира,
че е  зададен обхват All, т.е.  работа върху целия файл,  освен в
случаите,  където  това  е  специално  указано  в  описанията  на
командите.

        Втората  част от  конструкцията задава  условие на  което
трябва  да  отговарят  записите,  за  да  бъдат  обработени.  При
изпълнението на  командата това условие ще  се проверява за всеки
запис от указания  обхват и само ако е  изпълнено ще се обработва
съответния  запис. Ако  в командата  не е  зададено For  cond, се
обработват всички записи от указания обхват.

        While  cond  се  използва,  ако  искаме  изпълнението  на
командата да спре веднага след като дадено условие се изпълни.


        7. Флагове в UniBASE.

        Поведението на  UniBASE може да  се променя с  помощта на
няколко  контролни  флага  които  се  "включват"  и "изключват" с
командата Set. Ето имената и значението на тези флагове :

        Alternate  -  контролира  дали   да  се  прави  изход  на
допълнителен файл. Ако този флаг  е ON и има отворен алтернативен
изходен файл,  целия изход който  се прави с  командата ?, ??  ще
излиза и в този файл. Нормално е изключен.

        Carry -  при командите Append  и Insert ако  е включен се
копира предишния запис. Нормално е изключен.

        Color - указва цветен или монохромен монитор се използва.
Нормално е Off - монохромен.

        Console - включва и  изключва изхода на монитор.

        Deleted - определя дали записите, маркирани за изтриване,
трябва да  бъдат включени, или  игнорирани от другите  команди на
UniBASE.

        Escape - Определя дали  една програма или изпълнението на
една  команда може  да бъде  прекъснато посредством  клавиша Esc.
Нормално е On.

        Exact - определя как ще  бъде оценено сравняването на два
символни низа. Това засяга резултата от оценката на сравняването.
Нормално е Off.

        Fields -  позволява да използвате  или игнорирате маската
от полета,  определени със командата SET  FIELDS TO. Обикновено е
Off.

        Print - включва или  изключва изхода към екрана. Нормално
Off.

        Step  -  Ако  този  флаг  е  включен  UniBASE  ще задържа
изпълнението на програмата след всяка инструкция. Тя позволява на
програмиста да  "изпълнява" програмата инструкция  по инструкция.
Тази  команда   е  средство  за   проверка  на  програми   с  цел
отстраняване на грешки. Нормално е Off.

        Talk - определя ще бъдат ли изведени на екрана отговорите
на повечето команди на UniBASE. Нормално е On.

        Unique -  определя дали при индексиране  в индексния файл
могат да влизат записи с еднакви ключове.

        8. Клавиатура.

        Редица   команди   на   UniBASE   дават   възможност   за
интерактивно въвеждане и промяна  на информацията в базите данни.
При  това  потребителският  интерфейс  е  осъществен  така, че да
позволява  лекота  при  преход  от  един  участък с информация на
екрана  на   друг  (Full  screen  editting).   В  този  режим  на
редактиране на клавишите са присвоени естествени функции които не
се  нуждаят от  пояснение  :  стрелката наляво  премества курсора
наляво,   клавиша   Home   премества   курсора   в   началото  на
информационното  поле,  End  -  в  края.  Все  пак  има  клавиши,
действието на  които трябва да бъде  пояснено. Техните функции са
активни винаги  когато на екрана  Ви се предлага  да въведете или
редактирате определена порция от информация - променлива или поле
от базата данни.

         <F2>  - възстановява оригиналното съдържание на полето.

         Само за символни полета :

         <F3>  - премахва символите наляво от курсора

         <F4>  - премахва символите надясно от курсора

         <Ins> - сменя режима : вмъкване или промяна

         <ctrl> + <Backspace> - изчиства цялото поле

                СЪЗДАВАНЕ НА БАЗИ ДАННИ

        Създаването  на   бази  данни  се  прави   с  помощта  на
програмата UBCREATE, която се  намира на Вашата програмна дискета
с UniBASE. С тази програма можете  не само да създавате нови бази
данни, но и да променяте дефиницията  на стари такива, даже ако в
тях  има  вече  въведени  записи.  При  това  старите  файлове се
запазват на диска под същото име, но с разширение .BAK.

        При  стартиране  на  програмата   можете  да  укажете  от
командната линия име на файл (подразбира се разширение .DBF). Ако
такъв  файл съществува,  ще се  премине към  промяна на  неговата
дефиниция. Ако указания  файл не бъде намерен, ще  се създаде нов
файл  с  това  име.  Ако  въобще  не  сте  указали  параметър  от
командната линия, програмата ще създаде  нов файл, като накрая на
работата при  опит да го  запишете на диска  програмата ще зададе
въпрос за името на новосъздадения файл.

        По  време на  работа  върху  дефиницията на  базата данни
програмата показва на екрана вече дефинираните полета със техните
атрибути  : име,  тип, дължина  и ако  полето е  от числов  тип и
точността  му -  броя на  позициите след  десетичната точка. Като
използвате клавишите за движение  можете да придвижите курсора до
полето  което   искате  да  промените,  и   след  това  направете
редакцията. Добавяне  на поле става по  два начина: най-открая, и
вмъкване   между  другите   вече  създадени   полета.  Добавянето
най-ототкрая става като просто придвижите курсора след последното
поле и започнете редакция. Вмъкване  на поле се прави с натискане
на  клавиш  <F7>.  В  двата  случая,  ако  не  въведете  правилно
атрибутите новосъздаденото поле ще бъде премахнато. Премахване на
поле  може  да  се  поиска  и  от  клавиатурата  с  клавиш  <F8>.
Програмата  задава  въпрос  за  потвърждение,  и при утвърдителен
отговор полето се премахва.

        За да бъде валидна дефиницията на едно поле е необходимо:
името  му да  е правилно  - т.е.  да започва  с латинска буква, а
следващите символи  ако ги има  да са само  латински букви, цифри
или символа '_' (подчертаване); дължината на полето да е правилна
- за полета от символен тип не  повече от 255 символа, за числови
- до 12 символа и до 9 след точката, а за логически и от тип дата
полета  програмата автоматично  определя дължините  им на  1 и  8
символа  съответно.  Данните  в  UniBASE  се  съхраняват така, че
големината  им в  символи е   равна на  големината им  в байтове.
Общата  големина на  записа е  равна на  сумата от  големините на
полетата  в него  плюс един  байт. Дефиницията  на един  запис се
смята за  валидна ако са  валидни всичките дефиниции  на полета в
записа, и големината на записа не надвишава 1024 байта.

        За край на  работата могат да се използват  два клавиша :
<F10> ще накара програмата да запише готовата дефиниция на диска,
и <esc> ще  прекрати работата по  дефиницията без запис  на диск.
Напомняме, че една дефиниция може да  се запише на диска само ако
тя  е валидна,  т.е. общата  дължина на  записа не надвишава 1024
байта.  Ако  това  условие   не  е  изпълнено  програмата  издава
съобщение за грешка и продължава работата.

                ОПИСАНИЕ НА КОМАНДИТЕ

        1. Команди за вход, изход и работа с променливите.

        Тези  команди  могат  да   се  изпълняват  в  директен  и
програмен  режим,  независимо  от  това  дали  в текущата работна
област има отворен файл.

---------------------------------------------------------------
        ?   { exp }
        ??  { exp }
---------------------------------------------------------------

        Командата ?/??  изчислява и извежда  стойността на израз.
Записана   с  един   въпросителен  знак,   командата  предизвиква
преминаване на  нов ред преди  извеждането на съответните  данни.
Двойният въпросителен знак извежда данните от текущата позиция на
курсора,  или на  принтера. Когато  командата е  записана само  с
въпросителен  знак, без  параметри, UNIBASE  пропуска един празен
ред.

        Тук и по-нататък програмни  конструкции оградени в такива
скоби  "{" и  "}" ще  означават, че  съответната част  може да се
повтаря неколкократно,  като между отделните  повторения се слага
запетая (",").

---------------------------------------------------------------
        @
---------------------------------------------------------------

        Това е група от команди, които се използуват за създаване
на потребителски формат за вход и  изход от базата данни. С тяхна
помощ  можете  да  задавате  подходящ  вид  на екрана. Във всички
команди от групата се  използва конструкцията coord, която указва
точните  координати  на  екрана,  където  трябва  да  се  направи
входно-изходната операция. Координатите се  указват като първо се
пише  реда  (Y  -  координатата),  а  след  това  колоната  (X  -
координатата), разделена със запетая от реда.


---------------------------------------------------------------
        @ coord [ Say exp ] [ Get var ]
---------------------------------------------------------------

        Опцията  Say  се  използува  за  извеждане  на константна
информация.

        Get се използува за въвеждане на променливи данни , които
могат  да  бъдат  или  поле  от  активен  базов  файл,или работна
променлива. Тази  част от командата  трябва да бъде  активирана с
командите Read или Append.

        UniBASE  позволява  максимално  32  команди @...Get преди
въвеждането на командата Clear Gets.


---------------------------------------------------------------
        @ coord Clear [ To coord ]
---------------------------------------------------------------

        Тази команда изтрива екрана  в правоъгълника определен от
указаните  координати.   Ако  втората  двойка   координати  не  е
зададена, подразбира се изчистване до края на екрана.


---------------------------------------------------------------
        @ coord Box To coord [ , expN ]
---------------------------------------------------------------

        Командата   се  използува   за  чертаене   на  рамка   по
правоъгълника зададен  с двете двойки  координати. С допълнително
зададено  число от 0 до 4 се определя вида на рамката. Подразбира
се стойност 1.

        0 : с интервал
        1 : с единична линия
        2 : с двойна линия
        3, 4, 5 : с други символи.

---------------------------------------------------------------
        @ coord Prompt expC
---------------------------------------------------------------

        Тази команда задава елемент от меню. Серия такива команди
създават потребителско меню, което се активира с командата Menu.


---------------------------------------------------------------
        Store Exp To { var }
---------------------------------------------------------------

        Store   създава  и   въвежда  една   или  повече  работни
променливи. Един алтернативен синтаксис е:

        var = exp

        Ако една работна променлива  вече съществува командата ще
запише  върху  старото  и  съдържание.  Един  израз  може да бъде
запаметен  в  няколко  променливи  с  помощта  на една единствена
команда Store.


---------------------------------------------------------------
        Accept [ ExpC ] To var
---------------------------------------------------------------

        Командата  Accept  служи  за  въвеждане  на  стойност  на
променлива  с   предварително  съобщение.  Въведените   данни  се
запаметяват като символен низ,  без да е необходимо използуването
на ограничители. Въвеждането на данни се завършва с <Return>.


---------------------------------------------------------------
        Input [ expC ] [ To ] var
---------------------------------------------------------------

        Командата Input се използва  в програмите за извеждане на
съобщение,   изискващо  от   потребителя  да   въведе  данни   от
клавиатурата.  Въвеждането  на  данни  завършва  с  натискане  на
RETURN. В отговор на командата  Input може да бъде въведен всеки,
валиден за UniBASE израз. Типът му определя типа на променливата,
която  се създава.  Ако в  отговор на  Input е  въведен невалиден
израз, или е натиснат <Return> се индицира синтактична грешка.


---------------------------------------------------------------
        Wait [ ExpC ] [ To var ]
---------------------------------------------------------------

        Командата  Wait спира  временно изпълнението  на програма
докато не бъде натиснат кой да е клавиш. Ако е включена опцията [
To var ] натиснатия клавиш се запаметява в посочената променлива,
която ще бъде символна променлива.


---------------------------------------------------------------
        Menu To var [ Save ]
---------------------------------------------------------------

        Активира  вече създадено  меню  чрез  серия от  команди @
coord Prompt. Избраната точка от менюто е число, което се записва
в променливата. Ако не е указано Save, изчиства всички  досегашни
@ .. Prompt команди.


---------------------------------------------------------------
        Read [ Save ]
---------------------------------------------------------------

        Активира  форматиран вход/изход  дефиниран чрез  серия от
команди  @  ..  Get  и  ако  не  е  указано Save, изчиства всички
досегашни @ .. Get команди.


---------------------------------------------------------------
        Clear
---------------------------------------------------------------

        Изчиства екрана. Курсора остава в горния ляв ъгъл.


---------------------------------------------------------------
        Clear Gets
---------------------------------------------------------------

        Командата Clear  Gets освобождава всички  променливи Get,
установени  след последното  изпълнение на  командите Clear  All,
Clear Gets и Read.

        Clear Gets не премахва работни променливи.



---------------------------------------------------------------
        Clear Memory
        Release All
---------------------------------------------------------------

        Clear  Memory  освобождава   всички  работни  променливи.
Еквивалентна е на  Release All при работа в  директен режим . Ако
тези  команди се  изпълняват от  програма, разликата  е следната:
Clear Memory освобождава всички работни променливи, ; Release All
освобождава   само   работни   променливи   в  текущата  програма
(private).


---------------------------------------------------------------
        Release { var }
---------------------------------------------------------------

        Премахва от паметта само указания списък от променливи.


---------------------------------------------------------------
        List | Display Memory [ To Print ]
---------------------------------------------------------------

        Display Memory извежда на екрана името, типа и статуса на
всяка активна работна променлива.  Максималният брой на активните
работни променливи е 32.

        В  тази  и  други  команди  за  извеждане  на  информация
започващи  с  думите  List  или  Display  разликата  между  двете
възможности е, че ако се използва Display, UniBASE ще прави паузи
когато екрана се напълни с информация  и ще изчаква да се натисне
произволен  клавиш.  Ако  е  използвана  конструкцията  To Print,
изхода от тези команди ще отива  на принтера или на файла, където
е пренасочен изхода за принтер вместо на екрана.


---------------------------------------------------------------
        List | Display Status [ To Print ]
---------------------------------------------------------------

        Подобно  на  предишната  команда  List  |  Display Status
извежда  на  екрана  или  на  принтера  информация  за вътрешното
състояние на  UniBASE. Информацията съдържа  данни за това  с кои
бази  данни  се  работи  в  момента,  индексни и форматни файлове
свързани  с тях,  релациите помежду  им, а  също и състоянието на
управляващите флаговете.


---------------------------------------------------------------
        Save To filename { var }
---------------------------------------------------------------

        Указва списък  от променливи, които да  бъдат записани на
дисковата  памет   във  файл  със  име   filename  и  подразбрано
разширение .VAR.


---------------------------------------------------------------
        Restore From filename
---------------------------------------------------------------

        Указва име  на файл с променливи,  записани там по-рано с
командата Save. Всички променливи от  файла се прочитат и добавят
в паметта.


---------------------------------------------------------------
        Eject
---------------------------------------------------------------

        Предизвиква преминаване на принтера на нова страница.

---------------------------------------------------------------
        Text ... EndText
---------------------------------------------------------------

        Text Извежда на екрана следващите няколко реда до появата
на думата EndText в началото на реда.


---------------------------------------------------------------
        Set Alternate To filename
---------------------------------------------------------------

        Задава име  на алтернативен текстов изход.  Целият вход и
изход  от екрана  с изключение   на този  свързан с  командите от
групата @ ще се записва в този файл в текстов вид.


---------------------------------------------------------------
        Close Alternate
---------------------------------------------------------------

        Прекъсва алтернативния текстов изход и затваря файла.


---------------------------------------------------------------
        Set Color To expN , expN
---------------------------------------------------------------

        Задава атрибути  за цветовете на екрана.  Първото число е
цвят на буквите, а второто -  цвят на фона. За повече подробности
около  цветовете  на  екрана  вижте  в  системната  литература за
компютъра.


---------------------------------------------------------------
        Set Device To Print | Screen
---------------------------------------------------------------

        Set  Device определя  дали командите  @ ...  Say ще бъдат
насочени  към монитора  или към  печатащото устройство. Командата
Set  Device To  Print изпраща  изхода от  командите @  ... Say на
принтер.  @... Get  се игнорират.  Подразбиращата се  команда Set
Device To Screen.



---------------------------------------------------------------
        Set Printer to filename
---------------------------------------------------------------

        Тази  команда пренасочва  изхода предназначен  за принтер
към дисков файл с указаното име.

        2. Команди за работа с базите данни.

        Това  са най-важните  команди на  UniBASE. С  тяхна помощ
можете да правите всичко, което Ви  е необходимо с Вашите данни -
да ги  записвате и съхранявате  в таблица, да  търсите по някакъв
признак, да  правите промени, да  добавяте и отстранявате  данни.
Дадена  е също  възможността чрез  командите Import  и Export  за
връзка  на данните  чрез стандартен  текстов файл  с всички други
СУБД и за всякаква друга обработка. С изключение на командите Use
и Select всички други команди от тази група могат да се използват
само ако в текущата работна област вече има базов файл отворен за
достъп и действието на командата ще се изпълни върху този файл. В
противен  случай  UniBASE  ще  издаде  съобщение  за  грешка,  че
командата не е  достъпна поради липса на отворен  за достъп файл.
Всички  тези  команди  се  изпълняват  еднакво  успешно  както от
клавиатура, така и в програмен режим.


        2.1. Команди  за работа с работните  области - отваряне и
затваряне на файл за достъп, избор на работна област.


---------------------------------------------------------------
        Select expN | name
---------------------------------------------------------------

        С  тази  команда  се  определя  дадена  работна област за
текуща. Това става или като се  укаже името на областта, или като
се  укаже  число,  което  е  валиден  номер  на област. В UniBASE
валидните номера на  области са 1..10. Ако за  номер на област се
използва числото  0 UniBASE сам  избира първата намерена  работна
област която е свободна, т.е. в нея няма отворен за достъп файл.


---------------------------------------------------------------
        Use filename [ Index { filename } ] [ Alias { name } ]
---------------------------------------------------------------

        Отваря  за  достъп  релационната   таблица  във  файла  с
указаното  име. Ако  е указан  списък от  индексни файлове, те се
асоциират  с  базата  данни,  като  първият  от  тях  става водещ
индексен  файл.  Броят  на  индексните  файлове  не  трябва  да е
по-голям от 4. Ако е указана опцията за задаване на име, това име
ще бъде присвоено на работната област.


---------------------------------------------------------------
        Set Index To { filename }
---------------------------------------------------------------

        Задава списък от индексни  файлове, които да се асоциират
с текущата база данни. Броят им не трябва да надвишава 4. Първият
файл в списъка става водещ индекс. Това значи, че всички търсения
в базата данни, както и  логическата последователност на записите
ще се определят от този индекс.


---------------------------------------------------------------
        Set Format to filename
---------------------------------------------------------------

        Задава форматен  файл, който да се  асоциира към текущата
база   данни   за   работа   в   интерактивен   вход   и   изход.
Предназначението  на  форматните  файлове  е  описано в предишния
раздел.  Всяка  работна  област  може  да  има  по един асоцииран
форматен файл, докато не се зададе друг чрез нова команда.



---------------------------------------------------------------
        Close Databases
---------------------------------------------------------------

        Затваря  базите  данни  и   асоциираните  им  индексни  и
форматни файлове от всички работни области. Избира работна област
номер 1 за текуща.

---------------------------------------------------------------
        Close Format
---------------------------------------------------------------

        Прекратява  използването  на  форматен  файл към текущата
база данни.



        В  много от  командите за  работа с  базите данни особена
роля играе флагът Fields и следващите две команди:

---------------------------------------------------------------
        Set Fields To { field }
---------------------------------------------------------------

        В тази команда се  изреждат в определена последователност
и разделени със  запетаи имената на полетата,  които ще образуват
маска върху работния файл. Докато  съществува тази маска и флагът
Fields  е включен  повечето от  командите се  държат така,  сякаш
текущата база данни  съдържа само указаните в маската  полета и в
такава последователност, в каквато те  са изброени в маската. При
това в маската могат да се включват и полета от други бази данни,
отворени за  достъп в другите работни  области (чрез знака "->").
Командата  Set  Fields  to  автоматично  включва  и флага Fields.
Маската  се дезактивира  чрез изключване  на флага,  или като  се
укаже  списък  от  полета,  коти  да  участват  в  обработката  в
командите където синтаксиса позволява  или просто чрез следващата
команда.


---------------------------------------------------------------
        Clear Fields
        Set Fields To All
---------------------------------------------------------------

        Тези  две команди  имат почти  еднакво действие.  И двете
команди  премахват маската  от  полета  над текущата  таблица, но
първата изключва флага Fields, а втората го включва.


        2.2. Команди за добавяне на данни и за извеждане на данни
в други файлове.


---------------------------------------------------------------
        Append [ Blank ]
---------------------------------------------------------------

        Ако е указано  Blank се добавя един празен  запис на края
на  файла -  всичките му  полета съдържат  интервали. В  противен
случай  се  преминава  към  интерактивно  въвеждане  на  записи и
добавянето им към края на файла. Ако се използва форматен файл то
той се изпълнява еднократно  непосредствено преди изпълнението на
командата, и се въвежда такава  информация, каквато е указано във
форматния файл с  командите @ .. Get. При  липса на форматен файл
се  въвеждат в  стандартен формат  на екрана  всичките полета  на
записа  от текущата  база данни,  или при  включена маска с флага
Fields -  само тези полета,  които са зададени  с маската. Всички
индексни  файлове, активни  по време  на изпълнение  на командата
Append ще бъдат обновени, за да бъдат отразени новите записи.


---------------------------------------------------------------
        Append From filename [ Fields { field } ] [ For cond ]
---------------------------------------------------------------
        Копира записи от определен  файл-източник в активния файл
от базата данни. Записите винаги  се добавят към края на работния
файл.  Отчита се  и маската  по полета,  освен ако  не е зададена
частта Fields  { field }. Ако  е зададено условие с  For ще бъдат
добавени само записите, за които условието е изпълнено.


---------------------------------------------------------------
        Import From filename [ Fields { field } ] [ For cond ]
                             [ Delimited With expC ]
---------------------------------------------------------------

        Работи  подобно  на  командата  Append  From,  но  файлът
източник  е  стандартен  текстов  файл.  Ако  е  зададена  частта
Delimited  With се  счита, че  полетата в  текста са  разделени с
разделител какъвто е резултата от expC.


---------------------------------------------------------------
        Copy scope To filename [ Fields { field } ]
---------------------------------------------------------------

        Копира тези записи от работния  файл, които са зададени с
обхвата   в  база   данни   с   указаното  име.   Структурата  на
новосъздадения файл  се определя от  частта Fields на  командата,
или ако  тя не е зададена  - от маската зададена  с командата Set
Fields, а  ако флага Fields  е изключен се  копира структурата на
работния файл.


---------------------------------------------------------------
        Copy Structure To filename [ Fields { field } ]
---------------------------------------------------------------

        Създава празна база  данни. Структурата на новосъздадения
файл се определя  от частта Fields на командата, или  ако тя не е
зададена  - от  маската зададена  с командата  Set Fields,  а ако
флага Fields е изключен се копира структурата на работния файл.


---------------------------------------------------------------
        Export scope To filename [ Fields { field } ]
                                 [ Delimited With expC ]
---------------------------------------------------------------

        Създава текстов  файл, в който се  записват всички записи
от текущата  база данни попаднали в  указания обхват. Записват се
указаните  полета или  маската зададена  с командата  Set Fields,
разделени с expC.  Ако не е указан разделител  с частта Delimited
With  полетата  се  записват  в  текста  непосредствено едно след
друго. Всеки запис се записва на отделен ред.


---------------------------------------------------------------
        Insert [ Blank ] [ Before ]
---------------------------------------------------------------

        Добавя  един  нов  запис  във  файла  от  базата  данни в
текущата позиция.  Клаузата Before вмъква новия  запис точно пред
текущия запис. Ако последният запис е 5, INSERT BEFORE ще създаде
нов запис 5; старият запис 5 ще стане запис 6 и т.н. Ако клаузата
Before е пропусната, новият  запис се вмъква, непосредствено след
текущия  запис.  Например,  ако  текущият  запис  е  5, Insert ще
създаде нов запис 6; старият запис 6 ще стане запис 7 и т.н.

        Ако файлът е индексиран записът  се добавя в края му; ако
записът  се  добавя  в  края  на  файла,  могат да бъдат добавени
няколко записа.

        Ако се  използва опцията Blank запис  се добавя, но данни
могат да бъдат въведени с  командите за редактиране. Ако клаузата
Blank е пропусната, Insert ще  представи новия запис за въвеждане
във интерактивен режим. Данни могат да бъдат въведени само в този
запис.




        2.3. Команди за отстраняване (изтриване) на данни.

---------------------------------------------------------------
        Delete scope
---------------------------------------------------------------

        Маркира  за  изтриване   (премахване)  всички  записи  от
работната база данни попаднали в  указания обхват. В базата данни
записите  се  маркират  за  изтриване  със  звезда  /*/ в първата
позиция  на  записа.  В  тази  команда  подразбран  обхват е само
текущия  запис, така  че ако  не е  въведен обхват  действието на
командата се извършва само върху текущия запис.


---------------------------------------------------------------
        Recall scope
---------------------------------------------------------------

        Възстановява маркираните  за изтриване записи  в активния
базов  файл.Командата няма  да възстанови  записи, които  са били
отстранени от  базата данни посредством  командите Pack или  Zap.
Ако е включен флага Deleted  , няма да бъдат възстановени записи.
В тази команда  подразбран обхват е  само текущия запис,  така че
ако не е въведен обхват  действието на командата се извършва само
върху текущия запис.


---------------------------------------------------------------
        Pack
---------------------------------------------------------------

        Премахва  записите, маркирани  за изтриване,  от активния
файл.  Всички отворени  индексни файлове  ще бъдат реиндексирани.
Пространството върху диска, използвано от изтритите записи, ще се
освободи  за  операционната  система,  когато  базовият файл бъде
затворен. Информацията  за файла в директорията  на диска може да
не бъде коректна до затварянето на файла.


---------------------------------------------------------------
        Zap
---------------------------------------------------------------

        Отстранява всички записи от  активната база данни. Всички
отворени  индексни   файлове  ще  бъдат   автоматично  затворени.
Еквивалентнаa е на Delete All и Pack, но работи по-бързо.




        2.4. Команди  за движение във  файла търсене на  запис по
ключ и промяна на съдържанието на записите.

---------------------------------------------------------------
        Skip  [ еxpN ]
---------------------------------------------------------------

        Придвижва файловия показалец напред  или назад в активния
файл от  база данни. Ако  в командата не  е включен числов  израз
expN, файловият  показалец се премества един  запис напред. Ако с
базата данни се използва и индексен файл, командата следва реда в
индекса.


---------------------------------------------------------------
        Go Top
---------------------------------------------------------------

        Премества  файловия показалец  за текущ  запис на  първия
запис във файла. Ако файлът е  индексиран за първи запис се смята
първият логически, т.е. записа с най-малък ключ.


---------------------------------------------------------------
        Go Bottom
---------------------------------------------------------------

        Премества файловия показалец за  текущ запис на последния
запис  във файла.  Ако файлът  е индексиран  за последен запис се
смята последен логически, т.е. записа с най-голям ключ.


---------------------------------------------------------------
        Go expN
---------------------------------------------------------------

        Премества файловия показалец на определен от expN запис в
активната база данни.


---------------------------------------------------------------
        Find
---------------------------------------------------------------

        Командата търси първия запис в индексния файл, чийто ключ
съвпада с определен символен низ. Провежда много бързо търсене на
записи по ключ. Ако не  бъде намерен запис с ключ, съответствуващ
на  специфицирания  символен  низ,  на  екрана  ще  бъде изведено
съобщението: Not Found.


---------------------------------------------------------------
        Locate scope
---------------------------------------------------------------

        Претърсва  активния  базов  файл  в  зададения  обхват за
запис,  който  удовлетворява   определеното  в  обхвата  условие.
Действието на  командата завършва, когато  или е намерен  желания
запис,  или  се  е  стигнало  до  края  на  обхвата.  При успешно
завършило търсене се извежда номера на намерения запис.


---------------------------------------------------------------
        Continue
---------------------------------------------------------------

        Възобновява  търсенето,  започнато  от  командата Locate.
Continue  търси следващият  запис в  активната база  данни, който
отговаря  на  условие,  указано   в  последната  команда  Locate.
Действието  на  командата  завършва,  когато  намери запис, който
удовлетворява определеното условие, или  когато се стигне края на
обхвата, дефиниран в Locate.


---------------------------------------------------------------
        Edit scope { field }
---------------------------------------------------------------

        Команда за  интерактивна промяна съдържанието  на данни в
активния   базов   файл.   На   тази   команда   влияние  оказват
предварително  зададените  форматен  файл  и  маската  по полета,
съгласно направените по-рано пояснения.


---------------------------------------------------------------
        Replace scope { field With exp }
---------------------------------------------------------------

        Променя  съдържанието  на  определени  полета  в активния
файл.  Новото   съдържание  на  тези   полета  е  резултатът   от
изчислението на  зададените изрази в  командата. Ако е  извършена
промяна  в  индексно  поле,  то  индексният  файл  трябва да бъде
актуализиран с командата Reindex.




        2.5. Команди за работа с индексните файлове

---------------------------------------------------------------
        Index On field To filename
---------------------------------------------------------------

        Index създава файл, в който  ключово поле от базата данни
е подредено по  азбучен, хронологичен или  числов ред. Индексният
файл съдържа ключово поле и  кореспондиращия номер за всеки запис
от  базата  данни.  Индексирането  е  винаги  във  възходящ  ред.
Записите  в   базовия  файл  не  се   пренареждат  физически  при
операциите  с  командата  Index.  Максималната  дължина  на  един
индексен ключ е 15 символа. Ако  е включен флага Unique и няколко
записа имат едно и също значение  на ключовото поле, в индекса се
включва само първия намерен запис.


---------------------------------------------------------------
        Reindex
---------------------------------------------------------------

        Престроява всички активни индексни файлове.


---------------------------------------------------------------
        Set Order To expN
---------------------------------------------------------------

        Установява водещ индексен файл  този, който е отворен под
номер expN в списъка  на индексните файлове. Занапред логическата
последователност на базата данни ще  се определя от този индексен
файл.  Ако expN  е 0  то тази  команда деактивира всички индексни
файлове  за  временно,  но  не  ги  затваря.  Макар  и  неактивни
индексните  файлове ще  продължат да  бъдат обновявани  при нужда
след всяка промяна в базовия файл.


---------------------------------------------------------------
        Close Index
---------------------------------------------------------------

        Затваря  достъпа до  всички индексни  файлове на текущата
база данни.  При последвали промени  във файла индексите  няма да
бъдат обновявани.



        2.6. Други команди за работа с файловете.

---------------------------------------------------------------
        List | Display scope { field } [ To Print ]
---------------------------------------------------------------
        Тази команда  се използува за преглед  на съдържанието на
базата данни в указаният обхват. Действието на командата се влияе
от  маската по  полета, ако  не е  указан след  обхвата списък от
полета,  които  да  се   покажат.  Разликата  между  варианта  на
командата с List и варианта с Display  е че в първия случай не се
прави паузи на всеки екран.


---------------------------------------------------------------
        List | Display Structure [ To Print ]
---------------------------------------------------------------

        Командата извежда  следната информация за  активната база
данни: име на файла, броя на записите, последна дата, на която са
правени промени,  пълна дефиниция на  всяко поле и  общия брой на
байтовете в записа.


---------------------------------------------------------------
        Sum scope { field } [ To { var } ]
---------------------------------------------------------------

        Командата Sum сумира изрази,  включващи числови полета за
всички или за определен набор от записи в активния базов файл.


---------------------------------------------------------------
        Average scope { field } [ To { var } ]
---------------------------------------------------------------

        Изчислява  аритметичното  средно   на  изрази,  включващи
числови полета  от група, или  от всички записи  на активен базов
файл.


---------------------------------------------------------------
        Count scope
---------------------------------------------------------------

        Извежда броя  на записите от зададения  обхват в активния
базов файл, който отговаря на указано условие.


---------------------------------------------------------------
        Join With name To filename [ Fields { field } ]
                                   [ For cond ]
---------------------------------------------------------------

        Командата Join  създава нова база  данни чрез сливане  на
определени записи и полета от текущия  базов файл и файла който е
отворен в указаната с name работна област.

        Файловият  показалец се  позиционира на  първия запис  от
активния  файл.  Всеки  запис  от  втория  файл се преценява дали
удовлетворява  условието в  клаузата For  cond. Ако  определеното
условия е  удовлетворено, към изходния файл  се добавя нов запис.
Когато  всички записи  във  втория  файл са  сканирани, файловият
показалец  се  премества  на  втория  запис  в  активния  файл  и
обработката са  повтаря. Това продължава  докато всички записи  в
активния  файл  файл  бъдат  обработени.  За  големи файлове тази
последователна обработка може да отнеме много време. Трябва да се
внимава  при  сливането  на  два  файла.  Възможно  е те да бъдат
свързани   така,  че   обектния  файл   да  надхвърли   наличното
пространство върху диска.


---------------------------------------------------------------
        Set Relation To field Into name
---------------------------------------------------------------

        Командата се използва за свързване на активния базов файл
с база данни, отворена в работна  област която се идентифицира по
име.  Ако  вторият  файл  е   индексиран,  то  всеки  път  когато
показателят за текущ запис на първият файл се премести, в индекса
на втория файл се търси значението на полето указано с field. Ако
търсенето завърши с успех, вторият  файл се позиционира на записа
с такова  значение   на  ключа.  При  неуспех   вторият  файл  се
позиционира в началото. Ако за  втория файл няма активен индексен
файл,  UniBASE  ще  приеме  релационната  връзка  само ако полето
указано с  field е числово. Тогава  при смяна на текущия  запис в
първия файл,  втория автоматично ще се  позиционира върху запис с
номер равен на стойността на полето field.

        3. Управляващи команди

        Тази   група  команди   се  използва   за  управление  на
програмата.  Дадени са  възможности за  реализиране на  основните
управляващи структури на един език и с това да се строят програми
със сложна  логика. Тъй като  това налага командите  да не се  се
използват  самостоятелно, а  във взаимодействие  с други команди,
повечето  от тях  не са  достъпни (а  не са  и нужни)  в директен
режим.


---------------------------------------------------------------
        If cond [ Then ]
           ..                   && команди
        [ Else
           ..  ]                && команди
        End If
---------------------------------------------------------------

        Това  е  програмна  команда   за  условно  изпълнение  на
команди. Тя трябва  да завършва с End If.  Всички команди след If
се изпълняват само ако условието  cond е изпълнено. Ако условието
не  е изпълнено,  тези команди   се пропускат,  и ако  е зададена
клаузата  Else  се  изпълняват  командите  след  нея. Разрешено е
вместването една в друга на няколко конструкции If.


---------------------------------------------------------------
        Do Case

           Case cond
           ..                   && команди
           Case cond
           ..                   && команди
        [ Otherwise
           .. ]                 && команди

        End Case
---------------------------------------------------------------

        Това е  команда за избор на  един вариант измежду няколко
възможни.  След командата  Do Case  в програмата  следват няколко
команди Case  cond. UniBASE проверява  верността на всяко  такова
условие последователно без да изпълнява останалите команди докато
срещне първото изпълнено условие.  След това се изпълняват всички
срещнати команди до появата на нова команда Case cond или команда
Otherwise, или End Case. Ако никое от условията на командите Case
не е изпълнено,  и е зададена клаузата Otherwise  - изпълняват се
всички  команди  от  този  клон  на  програмата. Командата винаги
трябва  да завърши  с End  Case. Разрешено  е вместването  една в
друга на няколко конструкции Do Case.


---------------------------------------------------------------
        While cond Do            |       Do While cond
            ..          && команди
            [ Loop ]
            [ Exit ]
        End While                |       End Do
---------------------------------------------------------------

        While  cond  Do  е  програмна  команда,  която  позволява
командни  инструкции между  нея и  командата End  While да  бъдат
повтаряни докато е удовлетворено условието cond. Тези две команди
позволяват  алтернативен  синтаксис  Do  While  cond  и  End  Do.
Разрешено  е  вместването  една  в  друга  на няколко конструкции
While.

        Loop  се  използва  за  връщане  в  началото на програмна
структура While. Тази команда е  идентична с командата End While.
Използва се обикновено да  предотврати изпълнението на останалите
команди в конструкцията, когато срещне някакво специално условие.

        Командата Exit прехвърля  управлението от командата вътре
в цикъла  While  на  командата,  непосредствено  следваща края на
цикъла.


---------------------------------------------------------------
        Set Procedure To filename
---------------------------------------------------------------

        Задава  име  на  програмен   файл  в  който  са  записани
множество  потребителски подпрограми.  След изпълнението  на тази
команда  всяка команда  Do filename  ще търси  в процедурния файл
процедура с име filename.


---------------------------------------------------------------
        Close Procedure
---------------------------------------------------------------

        Прекратява  достъпа  до   процедурния  файл.  Нормализира
действието на командата Do filename.


---------------------------------------------------------------
        Procedure name
---------------------------------------------------------------

        Procedure  се използва  за определяне  началото на  всяка
подпрограма  в един  процедурен файл.  Всяка отделна  в процедура
процедурния  файл  трябва  да  започва   Procedure  с  и  име  на
процедурата.


---------------------------------------------------------------
        Parameters { var }
---------------------------------------------------------------

        Parameters  присвоява  имена  на  локални  променливи  на
елементи от данни,подадени от викаща програма.

        Parameters  трябва да  бъде първата  изпълнима команда  в
получаващата  програма.  Подадените   параметри  могат  да  бъдат
всякакви  валидни   изрази.  Получаващият  списък   на  параметри
присвоява локални  имена на променливи  в списъка на  параметри в
изпращащата  DO  команда.  Броят  на  елементите  в двата списъка
трябва да съвпада. Променливите се заличават, когато управлението
бъде върнато на викащата програма.

        Ако прехвърленият параметър е работна променлива, нейната
стойност може да бъде променена.  Промяната ще бъде прехвърлена в
променливата във викащата програма.

        Ако  прехвърленият  параметър  е  константа,  тя ще стане
работна променлива в получаващата програма.

        Ако прехвърленият параметър е израз, то той се изчислява.
Резултатът от изчислението се прехвърля като работна променлива в
приемащата програма.


---------------------------------------------------------------
        Return
---------------------------------------------------------------

        С командата Return завършва  една програма, или процедура
и управлението се  връща на викащата  програма, или на  UniBASE в
интерактивен   режим,  ако   потребителя  е   извикал  програмата
директно. Освобождава всички  работни променливи, определени като
Private,  но не  влияе на  тези които  са Public.


---------------------------------------------------------------
        Private  { var }
---------------------------------------------------------------

        Списъкът от променливи създадени с тази команда е валиден
само  в   текущата  подпрограма.  След  приключването   и  те  се
освобождават.

---------------------------------------------------------------
        Public  { var }
---------------------------------------------------------------

        Създава глобални  променливи от подпрограма.  Списъкът от
променливи  в  тази  команда  се  запазва  след  приключването на
подпрограмата.


---------------------------------------------------------------
        Do name | filename [ With { var } ]
---------------------------------------------------------------

        Командата предизвиква изпълнението на един програмен файл
или  процедура  в  UniBASE.  Когато  извиканата  с  командата  Do
подпрограма завърши, управлението се  връща на викащата програма,
или на  клавиатурата. С клаузата  With може да  се зададат входни
параметри за подпрограмата. Списъка  на параметри може да съдържа
произволни изрази на UniBASE.


---------------------------------------------------------------
        Cancel
---------------------------------------------------------------

        Прекратява  изпълнението  на  всички    командни файлове,
включително прекъснатите със Suspend.


---------------------------------------------------------------
        Suspend
---------------------------------------------------------------

        Командата е  основно средство за  проверка на програми  с
цел  отстраняване на  грешки,  даваща  възможност временно  да се
прекъсва изпълнението на програмата,  да се изпълняват инструкции
от  системата  и  след  това   да  се  продължи  изпълнението  на
прекъсната програма с командата Resume.


---------------------------------------------------------------
        Resume
---------------------------------------------------------------

        Командата Resume се използва  заедно с командата Suspend.
Ако  изпълнението  на  програмата  е  било  временно  спряно  със
Suspend, то може да бъде продължено с командата Resume.


---------------------------------------------------------------
        Retry
---------------------------------------------------------------

        Командата  обикновено  се  използва  когато  трябва да се
коригират  грешки  и  повтаря  изпълнението  на  командата докато
завърши успешно.


---------------------------------------------------------------
        On Error
---------------------------------------------------------------

        Тази команда  указва действие което трябва  да се изпълни
от UniBASE  при възникване на  грешка. Остатъка от  командния ред
след  On  Error  се  запазва  и  при  грешка се интерпретира като
команда  на  UniBASE.  Ако  остатъка  е  празен  ред  -  "" не се
изпълнява никакво действие.


---------------------------------------------------------------
        On Escape
---------------------------------------------------------------

        Тази команда  указва действие което трябва  да се изпълни
от UniBASE  при натискане на клавиш  <esc>. Остатъка от командния
ред след On  Escape се запазва и се  интерпретира като команда на
UniBASE. Ако остатъка  е празен ред - ""  не се изпълнява никакво
действие.


---------------------------------------------------------------
        On Key
---------------------------------------------------------------

        Действието на командата е подобно на командата On Escape,
но се отнася за всеки натиснат клавиш.


---------------------------------------------------------------
        !, Run
---------------------------------------------------------------

        Служи за изпълнение на  команди на операционната система.
Остатъка от командния ред след знака  "!" се предава на UniDOS за
изпълнение.  Съдържанието  му  следва   да  бъде  само  някоя  от
вътрешните команди  на UniDOS, в противен  случай не се гарантира
правилното изпълнение на командата и възвръщането на управлението
в среда UniBASE.



        4. Други команди

---------------------------------------------------------------
        Quit
---------------------------------------------------------------

        Командата Quit затваря всички отворени файлове, приключва
UniBASE  и връща  управлението на  операционната система.  Това е
единственият    сигурен   начин    за   излизане    от   UniBASE.
Реинициализиране на компютъра без излизане с Quit от UniBASE може
да повреди отворените файлове и да причини загуба на данни.

---------------------------------------------------------------
        Help
---------------------------------------------------------------

        С тази  команда можете да  получите помощ за  това как да
използвате UniBASE. Това прави  разучаването на системата особено
лесно. Ако използвате командата  Help без параметър, ще попаднете
в главното   меню   на   помощната   информация,   откъдето  чрез
последователно избиране  от меню ще  намерите точно тази  помощна
информация, която Ви интересува. Друг начин за използване на тази
команда е като се въведе  параметър ключова дума, с която започва
команда, или име на вградена функция в UniBASE. В този случай ако
за  съответната  дума  има  помощна  информация,  тя  ще  Ви бъде
предоставена веднага.

        При използването  на помощ избор  от меню се  прави както
обикновено, с клавиш RETURN, а с клавиш PgUp можете да се върнете
на предишно меню, ако има такова. С клавиш esc можете да излезете
от режим помощ.

---------------------------------------------------------------
        Clear All
---------------------------------------------------------------

        Командата  затваря  всички  отворени  файлове  от  базата
данни,  освобождава всички  работни променливи  и избира  работна
област 1.


---------------------------------------------------------------
        Close All
---------------------------------------------------------------

        Затваря  всички файлове  от всички  типове -  бази данни,
форматни  и индексни  файлове, процедурният  файл и алтернативния
текстов изход.

                ОПИСАНИЕ НА ВГРАДЕНИТЕ ФУНКЦИИ

        При описанието на вградените  функции ще задаваме типа на
параметъра на  функцията (ако изобщо  има параметри) с  началните
букви на съответния тип N за Numeric, C за Character, D за Date и
L за  Logical.  В  случаите,  когато   не  е  определен  типа  на
параметъра  ще пишем  U (Undefined).  По същия  начин ще задаваме
типа  на резултата,  който връща  описваната функция,  след знака
':'.



---------------------------------------------------------------
        ABS ( N ) : N
---------------------------------------------------------------

        Връща   абсолютната   стойност   на   израза   зададен  с
параметъра.


---------------------------------------------------------------
        ASC ( C ) : N
---------------------------------------------------------------

        Връща  кодовият  номер  на  първият  символ  в параметъра
съгласно кода ASCII.


---------------------------------------------------------------
        AT ( C, C ) : N
---------------------------------------------------------------

        Ако първият параметър се среща като подниз във втория, то
функцията връща номера на символа от който започва първото такова
появяване. В противен случай резултата е 0.


---------------------------------------------------------------
        BOF ( ) : L
---------------------------------------------------------------

        Служи за  проверка дали файлът е  позициониран в началото
си.


---------------------------------------------------------------
        TYPE ( U ) : C
---------------------------------------------------------------

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


---------------------------------------------------------------
        CHR ( N ) : C
---------------------------------------------------------------

        Връща един  символ, който има кодов  номер по ASCII както
стойността на параметъра.


---------------------------------------------------------------
        COL ( ) : N
---------------------------------------------------------------

        Резултата е  номера на текущата  колона (X-координата) на
курсора върху екрана.


---------------------------------------------------------------
        SELECTED ( ) : N
---------------------------------------------------------------

        Връща  номера  на  текущата   работна  област  избрана  с
командата Select.


---------------------------------------------------------------
        DATE ( ) : D
---------------------------------------------------------------

        Връща   текущата   дата,   така   както   е  известна  на
операционната система.


---------------------------------------------------------------
        DAY ( D ) : N
---------------------------------------------------------------

        Връща  деня   от  месеца  който  на   датата  зададена  с
параметъра.


---------------------------------------------------------------
        DBF ( ) : C
---------------------------------------------------------------

        Връща името на файла във който е разположена базата данни
на диска.


---------------------------------------------------------------
        ISDELETED ( ) : L
---------------------------------------------------------------

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


---------------------------------------------------------------
        DISKSPACE ( ) : N
---------------------------------------------------------------

        Връща  количеството свободна  памет върху  текущия диск в
байтове.


---------------------------------------------------------------
        DOW ( D ) : N
---------------------------------------------------------------

        Връща деня  от седмицата на датата  параметър, като число
от 1 до 7 за дните от понеделник до неделя.


---------------------------------------------------------------
        DTOC ( D ) : C
---------------------------------------------------------------

        Тази функция превръща стойност от  тип Date в стойност от
тип Character.


---------------------------------------------------------------
        EOF ( ) : L
---------------------------------------------------------------

        Тази  функция отговаря  дали е  достигнат края  на базата
данни.


---------------------------------------------------------------
        ERRORNO ( ) : N
---------------------------------------------------------------

        Резултатът е  номера на грешката  възникнала по време  на
работа на системата. Тази стойност се пази до  първото  повикване
на  функцията, всяко следващо повикване на функцията  преди  ново
възникване на грешка ще връща стойност 0.


---------------------------------------------------------------
        EXP ( N ) : N
---------------------------------------------------------------

        Изчислява   и   връща   като   резултат  експонентата  на
параметъра.


---------------------------------------------------------------
        FIELD ( N ) : C
---------------------------------------------------------------

        Връща  името  на  полето  в  текущата  база данни с номер
зададен от параметъра.


---------------------------------------------------------------
        FILE ( C ) : L
---------------------------------------------------------------

        Проверява дали съществува файл с указаното име.


---------------------------------------------------------------
        FOUND ( ) : L
---------------------------------------------------------------

        Тази  функция  връща  .T.  ако  резултатът  от последната
команда от групата  Find, Locate и Continue е успешен,  и .F. - в
противен случай или ако текущия запис  на базата данни е сменен с
последвала друга команда.


---------------------------------------------------------------
        IIF ( L, U, U ) : U
---------------------------------------------------------------

        Тази функция  изчислява трите си  параметъра без значение
от какъв тип  са втория и третия параметър.  Ако първия параметър
има стойност истина резултат от  функцията е стойността на втория
параметър;  в противен  случай  резултат  е стойността  на третия
параметър.  Тъй  като  типа  на  резултата  от  тази функция не е
предварително  определен  използването  и  в  израз е невъзможно.
Използвайте  тази функция  само като  присвоявате резултата  и на
някоя променлива.


---------------------------------------------------------------
        INKEY ( ) : N
---------------------------------------------------------------

        Тази  функция  предизвиква  прочитане  на  един символ от
клавиатурата и връща като резултат неговия кодов номер.


---------------------------------------------------------------
        INT ( N ) : N
---------------------------------------------------------------

        Тази   функция  връща   като  резултат   цялата  част  на
параметъра.


---------------------------------------------------------------
        ISALPHA ( C ) : L
---------------------------------------------------------------

        Резултатът е  истина ако първият  символ на параметъра  е
буква  - латиница  между  'A'..'Z',  'a'..'z' или  кирилица между
'А'..'Я', 'а'..'я'.


---------------------------------------------------------------
        ISCOLOR ( ) : L
---------------------------------------------------------------

        Връща  дали  е  активен  флагът  Color.  При активен флаг
системата използва цветовете на екрана така, както са зададени от
потребителя, а  при изключен флаг се  използват само бели символи
на черен  фон за нормален  текст, и черни  символи на бял  фон за
инверсен текст.


---------------------------------------------------------------
        ISLOWER ( C ) : L
---------------------------------------------------------------

        Отговаря дали първият символ на параметъра е малка буква.


---------------------------------------------------------------
        ISUPPER ( C ) : L
---------------------------------------------------------------

        Отговаря  дали  първият  символ  на  параметъра  е главна
буква.


---------------------------------------------------------------
        LEFT ( C, N ) : C
---------------------------------------------------------------

        Тази  функция  връща  като  резултат  началната  част  на
символния  си параметър,  с  дължина  толкова символа,  колкото е
стойността на втория параметър или по-малко, ако първия параметър
не е толкова дълъг.


---------------------------------------------------------------
        LEN ( C ) : N
---------------------------------------------------------------

        Връща дължината на символния си параметър.


---------------------------------------------------------------
        LOG ( N ) : N
---------------------------------------------------------------

        Изчислява и връща естествен логаритъм от зададено число.


---------------------------------------------------------------
        LOWER ( C ) : C
---------------------------------------------------------------

        Тази функция връща символен низ подобен на параметъра си,
но в резултата всички главни букви са сменени с малки.


---------------------------------------------------------------
        LTRIM ( C ) : C
---------------------------------------------------------------

        Премахва водещите интервали в  началото на параметъра ако
ги има.


---------------------------------------------------------------
        LUPDATE ( ) : D
---------------------------------------------------------------

        Връща датата на последно обновяване на базата данни.


---------------------------------------------------------------
        MAX ( N, N ) : N
---------------------------------------------------------------

        Връща по-голямото от двете числа.


---------------------------------------------------------------
        MIN ( N, N ) : N
---------------------------------------------------------------

        Връща по-малкото от двете числа.

---------------------------------------------------------------
        MOD ( N, N ) : N
---------------------------------------------------------------

        Връща остатъка при деление първото число на второто.


---------------------------------------------------------------
        MONTH ( D ) : N
---------------------------------------------------------------

        Връща месеца от посочената дата.


---------------------------------------------------------------
        NDX ( N ) : C
---------------------------------------------------------------

        Параметъра трябва да е число от 1 до 4. Резултата е името
на индексния файл отворен към текущата база данни под този номер,
ако такъв съществува, или празен низ в противния случай.


---------------------------------------------------------------
        PCOL ( ) : N
---------------------------------------------------------------

        Връща текущата X-координата на принтера.


---------------------------------------------------------------
        PROW ( ) : N
---------------------------------------------------------------

        Връща текущата Y-координата на принтера.


---------------------------------------------------------------
        READKEY ( ) : N
---------------------------------------------------------------

        Връща число, което изразява  клавиша, с който е напусната
последната интерактивно  редактираща команда (като  Edit, Insert,
Append).


---------------------------------------------------------------
        RECCOUNT ( ) : N
---------------------------------------------------------------

        Връща броя  на записите в  текущата база данни.  При това
ако флагът Deleted е включен,  то маркираните за изтриване записи
са видими  и поради това  функцията връща общия  брой на записите
във файла. При  изключен флаг резултат от функцията  е само броят
на записите немаркирани за изтриване.


---------------------------------------------------------------
        RECNO ( ) : N
---------------------------------------------------------------

        Връща номера на текущия запис в базата данни.


---------------------------------------------------------------
        RECSIZE ( ) : N
---------------------------------------------------------------

        Връща размера на един запис в байтове.


---------------------------------------------------------------
        REPLICATE ( C, N ) : C
---------------------------------------------------------------

        Връща  символен  низ  състоящ  се  от  първият  параметър
повторен толкова пъти, колкото е вторият параметър.


---------------------------------------------------------------
        RIGHT ( C, N ) : C
---------------------------------------------------------------

        Тази  функция   връща  като  резултат   дясната  част  на
символния  си параметър,  с  дължина  толкова символа,  колкото е
стойността на втория параметър или по-малко, ако първия параметър
не е толкова дълъг.


---------------------------------------------------------------
        ROUND ( N ) : N
---------------------------------------------------------------

        Връща цяло число, резултат  от закръглянето на параметъра
си.


---------------------------------------------------------------
        RTRIM ( C ) : C
---------------------------------------------------------------

        Премахва завършващите интервали  в началото на параметъра
ако ги има.


---------------------------------------------------------------
        SPACE ( N ) : C
---------------------------------------------------------------

        Връща  символен низ  с  дължина  колкото е  стойността на
параметъра и състоящ се само от интервали.


---------------------------------------------------------------
        SQRT ( N ) : N
---------------------------------------------------------------

        Връща квадратен корен от параметъра.


---------------------------------------------------------------
        STR ( N ) : C
---------------------------------------------------------------

        Връща символното представяне на числото - параметър.

---------------------------------------------------------------
        STUFF ( C, N, N, C ) : C
---------------------------------------------------------------

        Тази  функция  се  използва  за  по-сложна  обработка  на
символни  низове. Тя  "изрязва" от  първия параметър  от символ с
номер  втория  параметър  участък  с  дължина  колкото  е  третия
параметър, и вмъква на същото място четвъртия параметър.


---------------------------------------------------------------
        SUBSTR ( C, N, N ) : C
---------------------------------------------------------------

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


---------------------------------------------------------------
        TIME ( ) : C
---------------------------------------------------------------

        Връща   текущият   час,   така   както   е   известен  на
операционната система.

---------------------------------------------------------------
        TRIM ( C ) : C
---------------------------------------------------------------

        Премахва водещите и завършващите  интервали в началото на
параметъра ако ги има.


---------------------------------------------------------------
        UPPER ( C ) : C
---------------------------------------------------------------

        Тази функция връща символен низ подобен на параметъра си,
но в резултата всички малки букви са сменени с главни.


---------------------------------------------------------------
        VAL ( C ) : N
---------------------------------------------------------------

        Превръща  символен низ  в число,  ако това  е възможно. В
противен случай издава грешка.


---------------------------------------------------------------
        YEAR ( D ) : N
---------------------------------------------------------------

        Връща годината от датата подадена чрез параметъра.