"Fossies" - the Fresh Open Source Software Archive

Member "xtermset-0.5.2/src/term.c" (9 Jun 2003, 3965 Bytes) of package /linux/misc/old/xtermset-0.5.2.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 /*
    2 ** Copyright (C) 2000 Breyten J. Ernsting <bje@dds.nl>
    3 **
    4 ** This program is free software; you can redistribute it and/or modify
    5 ** it under the terms of the GNU General Public License as published by
    6 ** the Free Software Foundation; either version 2 of the License, or
    7 ** (at your option) any later version.
    8 **
    9 ** This program is distributed in the hope that it will be useful,
   10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
   11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   12 ** GNU General Public License for more details.
   13 **
   14 ** You should have received a copy of the GNU General Public License
   15 ** along with this program; if not, write to the Free Software
   16 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   17 **
   18 */
   19 
   20 #include <stdio.h>
   21 #include <stdlib.h>
   22 #include <string.h>
   23   
   24 #include "xtermset.h"
   25 
   26 good_term *first_term, *cur_term;
   27 
   28 good_term *term_new(int comp_type, char *name, int len) {
   29    good_term *r;
   30 
   31    r = (good_term *)malloc(sizeof(good_term));
   32    if(r==NULL) return r;
   33   
   34    memset(r,0,sizeof(good_term));
   35    r->comp_type = comp_type;
   36    strncpy(r->name,name,len);
   37 
   38    if (first_term) {
   39       term_last();
   40       cur_term->next = r;
   41    } else {
   42       first_term = r;
   43    }
   44    cur_term = r;
   45 
   46    return r;
   47 }
   48 
   49 void term_freeall() {
   50    good_term *n = first_term;
   51 
   52    while(n) {
   53       good_term *n2;
   54       n2 = n->next;
   55       free(n);
   56       n = n2;
   57    }
   58 }
   59 
   60 good_term *term_first() {
   61    cur_term = first_term;
   62    return cur_term;
   63 }
   64 
   65 good_term *term_last() {
   66    good_term *n = cur_term;
   67    while(n->next)
   68      n = n->next;
   69    cur_term = n;
   70    return cur_term;
   71 }
   72 
   73 good_term *term_next() {
   74    if(cur_term->next) {
   75       cur_term = cur_term->next;
   76       return cur_term;
   77    } else {
   78       return NULL;
   79    }
   80 }
   81 
   82 good_term *term_prev() {
   83    good_term *n = first_term;
   84 
   85    while((n->next) && (n != cur_term))
   86       n = n->next;
   87 
   88    if(n) {
   89       cur_term = n;
   90       return cur_term;
   91    } else {
   92       return NULL;
   93    }
   94 }
   95 
   96 good_term *term_find(int comp_type, char *name) {
   97    good_term *n = first_term;
   98    int fnd = 0;
   99 
  100    while(n && (!fnd)) {
  101       fnd = ((n->comp_type == comp_type) && (strcmp(n->name,name)==0));
  102       if(!fnd)
  103          n = n->next;
  104    }
  105 
  106    if(n) {
  107       cur_term = n;
  108       return cur_term;
  109    } else {
  110       return NULL;
  111    }
  112 }
  113 
  114 void term_loadall() {
  115    FILE *fp;
  116    good_term *n;
  117    char line[MAXTERMCHARS+3];
  118    int i,j=0,l,t=0;
  119    char c;
  120 
  121    fp = fopen(TERMSDIR "/" TERMSFILE,"r");
  122 
  123    if(fp) {
  124       while(!feof(fp)) {
  125          line[0]='\0';
  126          j=t=0;
  127          for(i=0;!feof(fp);i++) {
  128             c=getc(fp);
  129             if ((c==EOF)||(c=='\n')) 
  130                break;
  131             line[i]=c;
  132          }
  133          line[i]='\0';
  134          if((line[0]=='#')||(strlen(line)==0))
  135             continue;
  136          l = strlen(line);
  137          if(line[0]=='^') {
  138             j = 1;
  139             l--;
  140             t |= toStart;
  141          }
  142          if(line[i-1] == '$') {
  143             l--;
  144             t |= toEnd;
  145          }
  146          n = term_new(t,&line[j],l);
  147       }
  148       fclose(fp);
  149    }
  150 }
  151 
  152 int is_good_term()
  153 {
  154    int igt = 0,fnd = 0;
  155    char *trm;
  156 
  157    trm = getenv("TERM");
  158 
  159    if (trm == NULL) return 0;
  160 
  161    if (term_first()) {
  162       do {
  163          fnd = 0;
  164          if (cur_term->comp_type == 0) { /* anywhere in string */
  165             fnd = (strstr(trm,cur_term->name) != NULL);
  166          } else if (cur_term->comp_type & toStart) {
  167             fnd = (strncmp(trm,cur_term->name,strlen(cur_term->name)) == 0);
  168          } else if (cur_term->comp_type & toEnd) {
  169             fnd = (strncmp(trm+(strlen(trm)-strlen(cur_term->name)),cur_term->name,strlen(cur_term->name))==0);
  170          }
  171          igt = fnd?1:0;
  172       }  while ((!fnd) && (term_next()));
  173    } else {
  174       if(strncmp(trm,"xterm",5)==0) {
  175          igt = 1;
  176       } else if (strncmp(trm,"dtterm",6)==0) {
  177          igt = 1;
  178       } else if (strncmp(trm,"rxvt",4)==0) {
  179          igt = 1;
  180       }
  181    }
  182 
  183    return igt;
  184 }