pike.git / lib / modules / Stdio.pmod / Terminfo.pmod

version» Context lines:

pike.git/lib/modules/Stdio.pmod/Terminfo.pmod:242:    else // weird    {    // ignore    }    }       return clears;    }       //! -  void create(string cap, TermcapDB|void tcdb, int|void maxrecurse) +  protected void create(string cap, TermcapDB|void tcdb, int|void maxrecurse)    {    int i=0;    while((i=search(cap, "\\\n", i))>=0) {    string capr;    if(2!=sscanf(cap[i..], "\\\n%*[ \t\r]%s", capr))    break;    cap = cap[..i-1]+capr;    }    multiset(string) clears = load_cap(cap);    if(map->tc) {
pike.git/lib/modules/Stdio.pmod/Terminfo.pmod:400:    strarr);    foreach (strnames[..sizeof(strarr)-1], string name)    if (!tmp[name])    m_delete(tmp, name);    map += tmp;    }    return 1;    }       //! -  void create(string filename) +  protected void create(string filename)    {    .File f = .File();    if (!f->open(filename, "r"))    error("Terminfo: unable to open terminfo file \"%s\"\n", filename);    int r = load_cap(f);    f->close();    if (!r)    error("Terminfo: unparsable terminfo file \"%s\"\n", filename);    }   }
pike.git/lib/modules/Stdio.pmod/Terminfo.pmod:423:   class TermcapDB {       MUTEX       protected private inherit .File;       protected private string buf="";    protected private mapping(string:int|Termcap) cache=([]);    protected private int complete_index=0;    -  void create(string|void filename) +  protected void create(string|void filename)    {    if (!filename) {    string tce = [string]getenv("TERMCAP");    if (tce && sizeof(tce) && tce[0]=='/')    filename = tce;    else if ((getenv("OSTYPE") == "msys") &&    (filename = getenv("SHELL"))) {    // MinGW    // Usually something like "C:/msys/1.0/bin/sh"    // Termcap is in "C:/msys/1.0/etc/termcap"
pike.git/lib/modules/Stdio.pmod/Terminfo.pmod:539:       return res;    }       protected private string readat(int pos)    {    rewind(pos);    return read();    }    -  array(string) _indices() +  protected array(string) _indices()    {    LOCK;    if(!complete_index) {    rewind();    while(read());    complete_index = 1;    }    UNLOCK;    return sort(indices(cache));    }    -  array(Termcap) _values() +  protected array(Termcap) _values()    {    array(object|int) res = ({});    mapping(int:string) extra = ([]);    LOCK;    if (complete_index)    res = predef::map(sort(indices(cache)),    [function(string,mapping(int:string):Termcap)]    lambda(string name, mapping(int:string) extra) {    if (!objectp(cache[name]) && !extra[cache[name]])    extra[cache[name]] = readat(cache[name]);
pike.git/lib/modules/Stdio.pmod/Terminfo.pmod:627:    buf = buf[i+1..];       continue;    }    for(j=-1; (i=search(buf,"\n",j+1))>=0; j=i);    buf = buf[j+1..];    if (!more_data()) return 0; // eof    }    }    -  Termcap load(string term, int|void maxrecurse) +  protected Termcap load(string term, int|void maxrecurse)    {    int|string|Termcap cap;       LOCK;    if (!has_index(cache, term))    {    if (!complete_index)    {    rewind();    do
pike.git/lib/modules/Stdio.pmod/Terminfo.pmod:661:    {    LOCK;    foreach(names, string name)    cache[name] = [object(Termcap)]cap;    UNLOCK;    }    }    return objectp(cap) && [object(Termcap)]cap;    }    -  Termcap `[](string name) +  protected Termcap `[](string name)    {    return load(name);    }   }      //! Terminfo database for a single directory.   class TerminfoDB {       MUTEX   
pike.git/lib/modules/Stdio.pmod/Terminfo.pmod:712:    }    }       if(sizeof(dirname)<1 || dirname[-1]!='/')    dirname += "/";       if (!get_dir(dir = dirname))    error("failed to read terminfo dir %O\n", dirname);    }    -  array(string) _indices() +  protected array(string) _indices()    {    LOCK;    if (!complete_index) {    foreach (get_dir(dir), string a)    if (sizeof(a) == 1)    foreach (get_dir(dir+a), string b)    if(!has_index(cache, b))    cache[b] = 0;    complete_index = 1;    }    UNLOCK;    return sort(indices(cache));    }    -  array(object) _values() +  protected array(object) _values()    {    return predef::map(_indices(),    [function(string:object(Terminfo))]    lambda(string name) {    return cache[name] ||    Terminfo(dir+name[..0]+"/"+name);    });    }    -  Terminfo load(string term) +  protected Terminfo load(string term)    {    Terminfo ti;       if (!sizeof(term))    return 0;    LOCK;    if (!(ti = cache[term]))    {    if (file_stat(dir+term[..0]+"/"+term)) {    // Traditional Terminfo layout.
pike.git/lib/modules/Stdio.pmod/Terminfo.pmod:760:    // MacOS X Terminfo layout.    ti = Terminfo(sprintf("%s%02x/%s", dir, term[0], term));    }    if (ti)    cache[term] = ti;    }    UNLOCK;    return ti;    }    -  Terminfo `[](string name) +  protected Terminfo `[](string name)    {    return load(name);    }   }      //! @[TerminfoDB] that merges several directorys.   class MetaTerminfoDB {    protected array(TerminfoDB) dbs = ({});       //! Create a new Meta @[TerminfoDB].
pike.git/lib/modules/Stdio.pmod/Terminfo.pmod:813:    }    if (!db) continue;    this::dbs += ({ db });    }    // werror("TerminfoDBs: %O\n", this::dbs);    if (!sizeof(this::dbs)) {    destruct(this);    }    }    -  Terminfo `[](string name) +  protected Terminfo `[](string name)    {    foreach(dbs, TerminfoDB db) {    Terminfo ti = db[name];    if (ti) return ti;    }    return 0;    }   }      protected private Termcap defterm;