Глава 6. Операторы канальной логики.

База данных канальной логики в данной системе реализована в виде файла оригинальной структуры. Это сделано для удобства копирования и хранения. Чтобы получить доступ к данным в этом файле из програмы ее нужно открыть. Для этого используется оператор usebas: Общий вид оператора (char ERR) (usebas (char Bas) < (char Rev) (char[] File)>) он возвращает ошибку выполнения в виде переменной char значки < > используются только для описания и обозначают что данные аргументы не обязательны. Указание типа переменной в () используется только в описании. В реальном тексте в операторе пишут только имена переменных а сами переменные объявляются в другом месте. Например, (= ERR (usebas Bas 1 File)) При успешном завершении операции в переменную Bas заносится номер открытой базы. Она используется в других операторах для указания над какой базой производятся действия. В данной реализации в системе одновременно можно открыть три базы. Варианты использования: (= ERR (usebas Bas < 0 >)) установить текущую базу процесса (используемую по умолчанию) Pr - номер процесса (по умолчанию текущий). (= ERR (usebas Bas 1|4 File)) 4 - открыть файл базы или 1 - открыть и сделать его текущим (= ERR (usebas Bas 2 File)) - Читать имя открытой базы. Коды ошибок: 0 - успех; 1 - база не инициализирована (Для Rev==0 или 2); 2 - не может открыть базу (Для Rev==1 или 4); 3 - неизвестный режим (Rev>4) 4 - Ошибка типа данных //-----------------------------------------------------------// (non)(clsbas ) - закрыть базу. (non)(savbas ) - сохранить информацию. (name)(NewSb ) - создать новый символ в базе возвращает имя символа //-----------------------------------------------------------// Прежде чем производить действия над символом нужно инициализировать переменную типа kanl его именем (char ERR) (Ini (kanl Ac) (name Nm) ) Код ошибки: 2 - Нет свободного канала. В данной реализации в одной базе можно открыть только пять каналов. 4 - ошибка типа данных. 5 - символа с таким именем не существует. (char ERR)(Del (kanl Ac)) - удалить символ. ERR==1 символ имеет связи или Mode>1. //-----------------------------------------------------------// Информационные операторы (name)(Name (kanl Ac)) - Имя открытого символа. (int) (LenKnl (kanl Ac)) - Длина канала открытого символа. (non) (Free (kanl Ac)) - Закрыть канал. (char)(TypSb (kanl Ac)) - Определение Mode символа. (сколько раз открыт один и тот же символ) //-----------------------------------------------------------// Операторы действия над каналом (name)(Node (kanl Ac) (char|int No) - Имя узла с номером No (char ERR)(AddNode (kanl Ac) (name Ad)<(ch\in No)(ch\in L)>) - Добавить L узлов в канал перед No. Если L>1 Ad должен быть массивом. По умолчанию No==0 L==1 первый узел. ERR==1 - L больше массива Ad. ERR==2 - Ad не символ. ERR==4 - ошибка типа данных. (char ERR)(DelNode (kanl Ac) <(ch\in No)(ch\in L)>) - Удалить L узлов начиная с No. По умолчанию No==1 L==1 первый узел. ERR==1 - если No>LenKnl или No<1. (char ERR)(FndKnl (kanl Ac) (name Ad)(int No)(char Rev)) Искать входимость символа в каналы Rev==0 сначала, Rev==1 продолжить. ERR==0 инициализирует Ad и No (Имя канала и под каким номером узла) ERR==1 конец поиска. ERR==4 Ошибка типа данных //-----------------------------------------------------------// Операторы работы со связями Каждый канал может иметь по 127 входящих и исходящих связей с другими каналами. Каждая связь имеет имя (char признак), чтобы указать направление по которому нужно переходить. (char ERR)(InpLnk (kanl Ac) (name Ad)(char Pr)(char Rev)) установить связь канала Ac c каналом Ad по признаку Pr. Rev==0 исходящая, Rev==1 входящая связь. ERR==1 Ad не канал. ERR==4 Ошибка типа данных. (char ERR)(RchLnk (kanl Ac) (name Ad)(char Pr)(char Rev)) поиск связей канала. Rev битовая маска (! (Rev&1)) - сначала, else - продолжить. (! (Rev&2)) - входящие, else - исходящие. (! (Rev&4)) - без признака, else - с учетом признака. ERR==0 инициализирует Ad и Pr связь канала ERR==1 конец поиска. ERR==4 Ошибка типа данных (char ERR)(DelLnk (kanl Ac)) Удаление найденой связи. Оператор работает только сразу после операторов InpLnk или RchLnk ERR==0 - удалена. ERR==1 - не найдена. //-----------------------------------------------------------// Операторы работы с данными в символе Информация в символах храниться только в структурах и считывается только в структуры такой же конструкции либо массив char достаточного размера. (char ERR)(RdSb (kanl Ac) (struct Str)) (char ERR)(RdSb (kanl Ac) (char[] Str)) - читать информацию из символа ERR==1 - Несовпадение структур или мал размер массива. ERR==4 - Ошибка типа данных ERR==5 - пустой символ. (char ERR)(WrSb (kanl Ac) (struct Str)) - Запись структуры в символ независимо от его содержания. (char ERR)(Copy (kanl Ac) (kanl Bc)) -Копировать структуру символа Ac в символ Bc ERR==4 - Ошибка типа данных