Программа просмотрщик текстовых списков в базе короткая для вызова из projtr

((struct txt_b) (char str[81])) // Структура текстовой строки // Структура окна просмотра текста ((struct v_t) ((struct wiers) wt) ((struct rmk) r info) (char dx) ) ((struct Met) (char m_txt[20] m_l) (name m_N)) ((extern) ((struct edstr) E) ((struct v_t) v_t) ((struct txt_b) txt_b) ((struct spec) spec) ((struct Met) Met)(name n_M) ((int) C (ESC 27)(CR 13)(SP 32) (PGUP 5)(PGDW 4) // ctrl E ctrl D (UPKEY 28)(DOWNKEY 31) // ctrl " ctrl ? ) (name NIL Nm) (func info find_met) ((char) Str[81] (cX 10) (cY 25) fg_ini) (int i n) (kanl Ac) (addr ut) (name Smb_dn[3]) // список данных ) ((defun view_ch)((addr util)(name nm)(char bs)(int Cmd))() // Cmd: 't' - просмотр текст списка. 's' - информация о символе // 'm' - структура метки. 'M' - Редактор струк.метки (Adr ut util) (usebas KL_Bas) // Список данных (Ini Ac KL_progr ) (= Smb_dn (Node Ac 1)) (Ini Ac Smb_dn) (= Smb_dn[1] (Node Ac 1))(= Smb_dn[2] (Node Ac 2)) (call ut.ut.get_scr 1 1 80 25 Smb_dn[2] KL_Bas) (Ini Ac Smb_dn[1])(RdSb Ac v_t) (Free Ac) (= v_t.wt.f_Dr (= v_t.wt.f_Destr ut.ut.ret)) (setq v_t.wt.f_Rd "v_txt_Rd") (setq find_met "find_met") (setq info "info") // Монитор команд (Ini Ac nm bs) (((cond (||(== Cmd 'm')(== Cmd 'M'))) ((if (RdSb Ac Met)) (metka errstr) (call ut.ut.zapr "No struct")(goto END1)) (= n_M nm) (= nm Met.m_N) (Ini Ac nm bs) ((if (RdSb Ac spec)) (goto errstr)) (((cond (== Cmd 'm')) (push 0 'n')(push 0 'm')) (push 0 'M')) ) ((cond (||(== Cmd 't')(== Cmd 's'))) ((if (RdSb Ac spec)) (goto errstr)) ((if (== Cmd 's')) (call info nm) (goto END1))) (goto END1)) // Просмотрщик текста (= v_t.wt.Head nm) (Ini v_t.wt.Ac v_t.wt.Head bs) (= v_t.wt.SBas bs) (Adr v_t.wt.e_buf Str) (= v_t.wt.Tnom (= v_t.wt.Nnom 1)) (= v_t.wt.Cnom (LenKnl v_t.wt.Ac)) (metka H1) (call ut.ut.ramka v_t.r) (+ (= i v_t.r.X1) 3) (call ut.ut.tatr 10)(call ut.ut.goxy i v_t.r.Y1) (call ut.ut.print spec.Nam) (call ut.ut.w_Regen v_t.wt) ((while) (call ut.ut.tatr 10)(call ut.ut.goxy i v_t.r.Y2) (sprint Str "(%3d%) %3d%-%3d% " v_t.wt.Cnom v_t.wt.Nnom (-(+(= n v_t.wt.Nnom) v_t.wt.Col))) (call ut.ut.print Str) (call ut.ut.tatr 15)(call ut.ut.goxy 1 cY) (call ut.ut.print "view_ch ")(call ut.ut.clreol) (call ut.ut.goxy cX cY)(= C (call ut.ut.keybd)) (((cond (== C ESC))(break)) ((cond (|| (== C DOWNKEY)(== C PGDW))) (= v_t.wt.Tnom n) (metka M1) (push 0 C) (= C (call ut.ut.w_move v_t.wt)) ((if (> C 0)) (break)) ) ((cond (|| (== C UPKEY)(== C PGUP))) (= v_t.wt.Tnom v_t.wt.Nnom) (goto M1)) // Вывод справочной информации ((cond (== C 'i')) (call ut.ut.zapr "Up,Dn,PgUp,PgDn-перемещение;") (call ut.ut.zapr "m-поиск по метке; M-ввод текста метки; ESC-выход") ) // Поиск метки ((cond (== C 'm')) (= C (call ut.ut.zapr "Поиск метки n - сначала; t - от текущей")) ((if (== C CR)) (= C 't')) ((if (|| (== C 'n')(== C 't'))) (((cond (call find_met C)) (= v_t.wt.Tnom (= v_t.wt.Nnom i)) ) (call ut.ut.zapr "Метка не найдена") ) ) (goto H1)) // Ввод текста для поиска ((cond (== C 'M')) (push 0 Met.m_txt 20) (pop 0 Str 20) (call ut.ut.tatr 10) (call ut.ut.goxy 1 cY) (call ut.ut.print "Текст метки [19]:") (+(= E.X 19))(= E.Y cY)(= E.Len (= E.L 19))(Adr E.S Str) (call ut.ut.Ini_ed E 0) ((while) (= C (call ut.ut.edstr E)) (((cond (== C ESC)) (break)) ((cond (== C CR)) (push 0 Str 20) (pop 0 Met.m_txt 20) (= i 19) ((while i) ((if (!= Met.m_txt[(- i)] SP)) (+ i)(break))) (= Met.m_l i) ((if (== Cmd 'M')) (Ini Ac n_M bs)(WrSb Ac Met)) (break)) )) ) )) (metka END1) (Free Ac) (Free v_t.wt.Ac) (call ut.ut.put_scr 1 1 Smb_dn[2] KL_Bas) // (call ut.ut.del_kust Smb_dn[2] KL_Bas) ) ((defun v_txt_Rd)((int n))() (((cond (> n v_t.wt.Cnom)) // Вывод пустой строки (= v_t.wt.e_buf 0) (sprint v_t.wt.e_buf "%-80s%" v_t.wt.e_buf)) ((if (Ini v_t.wt.Bc (Node v_t.wt.Ac n) v_t.wt.SBas )) (return 1)) (RdSb v_t.wt.Bc txt_b) (sprint v_t.wt.e_buf "%-80s%" txt_b.str) (Free v_t.wt.Bc)) (return 0)) // Программа поиска метки ((defun find_met)((int z))((int q p)(addr A B)) (Adr B Met.m_txt) (= n (LenKnl v_t.wt.Ac)) (((cond (== z 'n')) (= i 1)) (+(= i v_t.wt.Tnom))) ((while (<= i n)) ((if (Ini v_t.wt.Bc (Node v_t.wt.Ac i) v_t.wt.SBas)) (return 0)) (RdSb v_t.wt.Bc txt_b) (Free v_t.wt.Bc) (= q 0) ((while (< q 81)) ((if (== txt_b.str[q] Met.m_txt)) (= p 0)(Adr A txt_b.str[q]) (>< B) ((while (< p Met.m_l)) (++ A)(++ B)(+ p) ((if (!= A B)) (break))) ((if (== p Met.m_l)) // (print "Метка найдена %d%" i) (inkey) (return i)) ) (+ q)) (+ i)) (return 0)) // Вывод информации о символе из структуры spec ((defun info)((name N))((char x y)(addr gbuf)) (Adr gbuf Str) (call ut.ut.ramka v_t.info) (+(= y v_t.info.Y1))(+(= x v_t.info.X1)) (call ut.ut.tatr v_t.info.At1) (call ut.ut.goxy x y) (sprint gbuf " Simbol: %Nm%" N) (call ut.ut.print gbuf) (call ut.ut.goxy x (+ y)) (sprint gbuf " Nam: %s%" spec.Nam) (call ut.ut.print gbuf) (call ut.ut.goxy x (+ y)) (sprint gbuf " Typ: %s% Len=%d%" spec.typ spec.Len) (call ut.ut.print gbuf) (call ut.ut.goxy x (+ y)) (sprint gbuf " Дата создания: %02d%:%02d%:%d%" spec.datm.day spec.datm.mou spec.datm.year) (call ut.ut.print gbuf) (call ut.ut.goxy x (+ y)) (sprint gbuf " Время создания: %02d%:%02d%:%02d%" spec.datm.hour spec.datm.min spec.datm.sec) (call ut.ut.print gbuf) (call ut.ut.zapr "Key") )