builtins.cxx

Go to the documentation of this file.
00001 // @(#)root/editline:$Id: builtins.cxx 30194 2009-09-16 12:19:46Z axel $
00002 // Author: Mary-Louise Gill, 2009
00003 
00004 ////////////////////////////////////////////////////////////////////////
00005 // This file is part of the liblineedit code. See el.fH for the
00006 // full license (BSD).
00007 // File added by stephan@s11n.net, 28 Nov 2004
00008 ////////////////////////////////////////////////////////////////////////
00009 
00010 #include "builtins.h"
00011 #include "editline.h"
00012 #include <string>
00013 #include <vector>
00014 #include <map>
00015 
00016 
00017 typedef std::vector<ElBuiltin_t*> BuiltinVec_t;
00018 typedef std::map<std::string, ElBuiltin_t> BuiltinMap_t;
00019 
00020 /**
00021    Returns the internal map of builtin functions.
00022  */
00023 BuiltinMap_t&
00024 el_internal_builtins() {
00025    static BuiltinMap_t el_builtins;
00026    return el_builtins;
00027 }
00028 
00029 
00030 void
00031 el_builtins_init() {    // internal func
00032 
00033    if (0 == el_internal_builtins().size()) {
00034       el_register_function("el-bind", map_bind, "Bind keyboard commands.");             //   // map.fH/c
00035       el_register_function("el-echotc", term_echotc, "???");             // term.fH/c
00036       el_register_function("el-edit", el_editmode, "Toggle line-editing mode on and off.");             // el.fH/c
00037       el_register_function("el-history", hist_list, "Show command history.");             // hist.fH/c
00038       el_register_function("el-telltc", term_telltc, "???");             // term.fH/c
00039       el_register_function("el-settc", term_settc, "???");             // term.fH/c
00040       el_register_function("el-setty", tty_stty, "???");             // tty.fH/c
00041       el_register_function("el-help", el_func_show_function_list, "Shows list of built-in functions.");
00042       el_register_function("el-rl-reset", el_func_readline_reinit, "Re-initializes readline compatibility layer.");
00043    }
00044 }
00045 
00046 
00047 int el_builtins_bogo_register = (el_builtins_init(), 0);
00048 
00049 
00050 void
00051 el_register_function(const char* name, ElBuiltin_t::handler_func f, const char* help) {
00052    el_internal_builtins()[name] = ElBuiltin_t(name, f, help);
00053 }
00054 
00055 
00056 BuiltinVec_t el_builtins_vec;
00057 ElBuiltin_t**
00058 el_builtins_list(int* count) {
00059    BuiltinMap_t::iterator it = el_internal_builtins().begin();
00060    BuiltinMap_t::iterator et = el_internal_builtins().end();
00061    el_builtins_vec.clear();
00062    *count = 0;
00063 
00064    for ( ; et != it; ++it) {
00065       el_builtins_vec.push_back(&(*it).second);
00066       ++*count;
00067    }
00068    // fprintf( stderr, "el_builtins_list() size=%d\n", *count );
00069    return &el_builtins_vec[0];
00070 }
00071 
00072 
00073 /**
00074    Calls rl_initialize(), to reset the internal EditLine_t to a sane
00075    state.
00076  */
00077 int
00078 el_func_readline_reinit(EditLine_t* el, int, const char**) {
00079    fprintf(el->fOutFile,
00080            "Reinitializing readline compatibility interface.\n");
00081    int ret = rl_initialize();
00082    return ret;
00083 }
00084 
00085 
00086 /**
00087    Shows list of built-in functions via el->fOutFile.
00088  */
00089 int
00090 el_func_show_function_list(EditLine_t* el, int, const char**) {
00091    fprintf(el->fOutFile, "List of libeditline builtin functions:\n");
00092    BuiltinMap_t::iterator it = el_internal_builtins().begin();
00093    BuiltinMap_t::iterator et = el_internal_builtins().end();
00094    ElBuiltin_t* bi = 0;
00095 
00096    for ( ; et != it; ++it) {
00097       bi = &((*it).second);
00098       fprintf(el->fOutFile,
00099               "%-32s\t\t%s\n",
00100               (bi->fName),
00101               ((NULL != bi->fHelp) ? bi->fHelp : "")
00102       );
00103    }
00104    return 0;
00105 }
00106 
00107 
00108 ElBuiltin_t*
00109 el_builtin_by_name(const char* name) {
00110    BuiltinMap_t::iterator it = el_internal_builtins().find(name);
00111    BuiltinMap_t::iterator et = el_internal_builtins().end();
00112 
00113    if (et == it) {
00114       return NULL;
00115    }
00116    return &(*it).second;
00117 }

Generated on Tue Jul 5 14:11:37 2011 for ROOT_528-00b_version by  doxygen 1.5.1