Бред, конечно, но может будет полезно. Написал библиотеку instructions.inc для языка PHP, в которой можно вызывать команды системы по их номеру, в результате исходный код вашего PHP-скрипта становится более изящным: И так, подключаем библиотеку и: Код (Text): <?php require ("instructions.inc"); def ("Cравниваем числа"); def ("<hr><h2>Результат:</h2><br />"); def ("Истина"); def ("Ложь"); faddr(1); mov ("epr", 0x11); call(); faddr (2); mov ("epr", 0x11); call(); test (1,1); $GLOBALS["bp"] ? faddr(3): faddr (4); mov ("epr", 0x11); call(); ?>
Короче исправил либу. Теперь даже так можно: Код (Text): require ("instructions.inc"); def ("Cравниваем числа"); def ("<hr><h2>Результат:</h2><br />"); def ("Истина"); def ("Ложь"); faddr(1); mov ("epr", 0x11); call(); faddr (2); mov ("epr", 0x11); call(); test (1,1); rdef("bp") ? faddr(3): faddr (4); mov ("epr", 0x11); call(); mov ("epr", 0x40); mov ("mxd1", "localhost"); mov ("mxd2", "root"); mov ("mxd3", ""); call (); test (rdef ("err"), true); echo rdef("err"); rdef ("bp")?die("mysql_error"):nop();
Добавил циклы: Код (Text): function rd(){ mov ("iop", "\nhip-hop"); mov ("epr", 0x11); call(); } mov ("lpcall","rd"); //rd() mov ("lpi",0); //for i=0; mov ("lpsig", 0x10); //i< mov ("lph", 10); loop(); Выводит "Hip-Hop" 10 раз
Тут вот какой принцип: При подключении библиотеки, всем скриптам передаются глобальные данные, которые хранятся так: HDR - хранит числа 0x44 <---> 0x4D. Нужен для идентификации сущности. EPR - Нужен ждя хранения номеров функций. Функция Call() читает данные из EPR. 0x11 - Вывести строку или 0x40 - подключиться к БД (пример) ERR - Хранит последнюю ошибку. MXD1-MXD5 - Хранят первые пять аргументов функции. BP - BooleanPointer - указатель на истинность или ложность IOP - Указатель ввода-вывода. Может хранить строки (в виде списка). Является очередью. LPSIG - Сигнатура цикла. Указывает на тип операции: 0x10 < 0x20 > 0x30 <= 0x40 >= LPI - Указатель на начало цикла LPH - Указатель на конец цикла LPCALL - Указатель на тело цикла. loop() - Включает цикл с инкрементом loopde() - с декрементом -----------_______________________------------ P.S.: Был сильно пьян, когда писал библиотеку. P.P.S.: Щас пишу среду, в которой все это будет работать. _______---------------------------------_________
Вот пример проверки статуса пользователя Код (Text): mov ("mxd1", 0); // id пользователя mov ("epr", 0xAC); // isUserOnline() call(); rdef ("bp")?mov("iop", "on"):mov("iop","off"); //if true then "on" else "off" mov ("epr", 0x11); //print () call(); Вот так все просто!
varnie Пока над этим думаю. Хочу: "делать что-то", если результат положительный То же с отрицательным то же с нулевым и так далее... Код (Text): test (число, число) это сравнивает числа...
Сделал для поверки булевских значений: jt и jf Код (Text): def ("Юзер в сети"); def ("Юзер не в сети"); mov ("mxd1", 0); mov ("epr", 0xAC); call(); function on(){ mov ("epr", 0x11); faddr(1); call();} function off(){ mov ("epr", 0x11); faddr(2); call();} mov ("epr", "on"); jt(); //перейти, если TRUE mov ("epr", "off"); jf(); //Перейти, если FALSE
По-моему меня прет нипадецки.... Щас пишу примочку: библиотеку GUI. Назвал её "e_". Пока есть ф-ции e_init, e_main и e_final. Планируется коллекция виджетов Разрабатывается механизм посылки сигналов (JScript, Layers, PHP); Планируется догнать Ajax)) (шутка)
Извращаемся дальше!!! Исходники Instructions выложу чуть позже... Вот код, который выводит на синий экран окно желтого цвета. Но окно это не простое оно содержит Hidden-слой, который смотрит на сервер. Короче, для каждого виджета, который показывается пользователю можно регистрировать какие угодно сигналы (типа MouseClicked), но обрабатывать их сервером, не перенаправляя юзера со страницы на страницу! Код (Text): require ("instructions.inc"); /** Определим функции для работы с виджетами Из библиотеки "e_" **/ define ("e_main", "e_main"); define ("e_init", "e_init"); define ("e_final", "e_final"); define ("HelloWindow", "e_window_widget"); //простое окно mov ("epr", e_init); jd (); mov ("epr", e_main); jd(); mov ("epr", "e_desktop_widget");// Грузим тело документа mov ("mxd1", "lightblue"); // задаем цвет тела jd(); //вызываем тело /** Выводим Hello **/ mov ("mxd1", "HH"); //имя окна mov ("mxd2", "top:10; left:20; background-color:yellow; width:300; height:300; position:absolute;"); //параметры окна mov ("ttl1", "Hello, World"); mov ("epr", HelloWindow); jd(); //показываем окно.
Вот кстати еще вариант, куда более сносный. Кому нужна либа - напишите. Функции: 1. mov (local в global) 2. movr (global в global) 3 cmp (global equ global) 4 je (call (функция) если true) 5 jne ( 4 - наоборот ) 6 push (значение - в стек) 7 pop (значение из стека в RBF) 8 popv Значение из стека в куда-нибудь еще 9 ars добавл. значение в глоб массив 10 agl помещает в RBF (ResultBuFfer) количество элементов глобального массива 11 agbi (array get by index) - и так понятно 12 arsi - array set by index -------- Пока все - мне хватает. call отсутствует, нафиг он не нужен
А вот таким может быть код: Код (Text): /** * Прежде, чем вывести меню, проверим, зарегистрирован ли пользователь **/ global $sidf, $regf; mov ("sidf", isset ($_GET["sid"])); mov ("regf", true); cmp ("sidf","regf"); je ("registered"); jne ("un_registered"); function un_registered() { ars ("tabs_h", "/"); ars ("tabs_w", "Главная"); ars ("tabs_h", "reg.php"); ars ("tabs_w","Регистрация"); ars ("tabs_h", "about.php"); ars ("tabs_w","О проекте"); } function fne() { die ("Срок вашей сессии истек. <form action=\"/\"><input type=\"submit\" value=\"Далее >>\"></form>"); } function registered() { global $ft_t, $file_existsz, $f2, $sid; mov ("sid", $_GET["sid"]); mov ("f2", true); mov ("file_existsz", file_exists ($_GET["sid"].".lock")); cmp ("f2","file_existsz"); jne ("fne");