// // aegis - project change supervisor // Copyright (C) 1997, 1999, 2002-2008 Peter Miller // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see // . // #include #include #include #include #include #include #include #include #include #include #include #include #include #include tree::pointer shorthand_atime(diadic_t cmp, int n, int units) { // now tree::pointer tp1 = tree_now_new(); // {} tree::pointer tp2 = tree_this::create(); // atime({}) tree::pointer tp3 = tree_atime::create(tp2); // now - atime({}) tree::pointer tp4 = tree_subtract::create(tp1, tp3); // units rpt_value::pointer vp5 = rpt_value_integer::create(units); tree::pointer tp5 = tree_constant::create(vp5); // (now - atime({})) / units tree::pointer tp6 = tree_divide::create(tp4, tp5); rpt_value::pointer vp7 = rpt_value_integer::create(n); tree::pointer tp7 = tree_constant::create(vp7); // (now - atime({})) / units == n return cmp(tp6, tp7); } tree::pointer shorthand_ctime( diadic_t cmp, int n, int units) { // now tree::pointer tp1 = tree_now_new(); // {} tree::pointer tp2 = tree_this::create(); // ctime({}) tree::pointer tp3 = tree_ctime::create(tp2); // now - ctime({}) tree::pointer tp4 = tree_subtract::create(tp1, tp3); // units rpt_value::pointer vp5 = rpt_value_integer::create(units); tree::pointer tp5 = tree_constant::create(vp5); // (now - ctime({})) / units tree::pointer tp6 = tree_divide::create(tp4, tp5); rpt_value::pointer vp7 = rpt_value_integer::create(n); tree::pointer tp7 = tree_constant::create(vp7); // (now - ctime({})) / units == n return cmp(tp6, tp7); } tree::pointer shorthand_gid(diadic_t cmp, int n) { // {} tree::pointer tp1 = tree_this::create(); // gid({}) tree::pointer tp2 = tree_gid::create(tp1); // n rpt_value::pointer vp3 = rpt_value_integer::create(n); tree::pointer tp3 = tree_constant::create(vp3); // gid({}) == n return cmp(tp2, tp3); } tree::pointer shorthand_ino(diadic_t cmp, int n) { // {} tree::pointer tp1 = tree_this::create(); // ino({}) tree::pointer tp2 = tree_ino::create(tp1); // n rpt_value::pointer vp3 = rpt_value_integer::create(n); tree::pointer tp3 = tree_constant::create(vp3); // ino({}) == n return cmp(tp2, tp3); } tree::pointer shorthand_mode(int n) { // {} tree::pointer tp1 = tree_this::create(); // mode({}) tree::pointer tp2 = tree_mode::create(tp1); // n rpt_value::pointer vp3 = rpt_value_integer::create(n); tree::pointer tp3 = tree_constant::create(vp3); // mode({}) == n return tree_eq::create(tp2, tp3); } tree::pointer shorthand_mtime(diadic_t cmp, int n, int units) { // now tree::pointer tp1 = tree_now_new(); // {} tree::pointer tp2 = tree_this::create(); // mtime({}) tree::pointer tp3 = tree_mtime::create(tp2); // now - mtime({}) tree::pointer tp4 = tree_subtract::create(tp1, tp3); // units rpt_value::pointer vp5 = rpt_value_integer::create(units); tree::pointer tp5 = tree_constant::create(vp5); // (now - mtime({})) / units tree::pointer tp6 = tree_divide::create(tp4, tp5); // n rpt_value::pointer vp7 = rpt_value_integer::create(n); tree::pointer tp7 = tree_constant::create(vp7); // (now - mtime({})) / units == n return cmp(tp6, tp7); } tree::pointer shorthand_newer(const nstring &filename) { // {} tree::pointer tp1 = tree_this::create(); // mtime({}) tree::pointer tp2 = tree_mtime::create(tp1); // filename rpt_value::pointer vp3 = rpt_value_string::create(filename); tree::pointer tp3 = tree_constant::create(vp3); // mtime(filename) tree::pointer tp4 = tree_mtime::create(tp3); // mtime({}) > mtime(filename) return tree_gt::create(tp2, tp4); } tree::pointer shorthand_nlink(diadic_t cmp, int n) { // {} tree::pointer tp1 = tree_this::create(); // nlink({}) tree::pointer tp2 = tree_nlink::create(tp1); // n rpt_value::pointer vp3 = rpt_value_integer::create(n); tree::pointer tp3 = tree_constant::create(vp3); // nlink({}) == n return cmp(tp2, tp3); } tree::pointer shorthand_size(diadic_t cmp, int n) { // {} tree::pointer tp1 = tree_this::create(); // size({}) tree::pointer tp2 = tree_size::create(tp1); // n rpt_value::pointer vp3 = rpt_value_integer::create(n); tree::pointer tp3 = tree_constant::create(vp3); // size({}) == n return cmp(tp2, tp3); } tree::pointer shorthand_uid(diadic_t cmp, int n) { // {} tree::pointer tp1 = tree_this::create(); // uid({}) tree::pointer tp2 = tree_uid::create(tp1); // n rpt_value::pointer vp3 = rpt_value_integer::create(n); tree::pointer tp3 = tree_constant::create(vp3); // uid({}) == n return cmp(tp2, tp3); } static nstring type_name_by_pattern(const nstring &abbrev) { struct table_ty { const char *pattern; const char *name; }; static table_ty table[] = { { "Block", "block_special", }, { "Block_Special", "block_special", }, { "Character", "character_special", }, { "Character_Special", "character_special", }, { "Directory", "directory", }, { "File", "file", }, { "Link", "symbolic_link", }, { "Named_Pipe", "named_pipe", }, { "First_In_First_Out", "named_pipe", }, { "Normal", "file", }, { "Pipe", "named_pipe", }, { "Plain", "file", }, { "Socket", "socket", }, { "Symbolic_Link", "symbolic_link", }, }; for (table_ty *tp = table; tp < ENDOF(table); ++tp) if (arglex_compare(tp->pattern, abbrev.c_str(), 0)) return tp->name; sub_context_ty sc; sc.var_set_string("Name", abbrev); sc.fatal_intl(i18n("file type $name unknown")); // NOTREACHED return "unknown"; } tree::pointer shorthand_type(const nstring &abbrev) { nstring name = type_name_by_pattern(abbrev); // {} tree::pointer tp1 = tree_this::create(); // type({}) tree::pointer tp2 = tree_type::create(tp1); // name rpt_value::pointer vp3 = rpt_value_string::create(name); tree::pointer tp3 = tree_constant::create(vp3); // type({}) == name return tree_eq::create(tp2, tp3); }