"Fossies" - the Fresh Open Source Software Archive

Member "xtermset-0.5.2/src/arguments.c" (9 Jun 2003, 3209 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 argument *first,*current,*save;
   27 
   28 argument *argument_new(int style, int code, char *param) {
   29    argument *r;
   30 
   31    r = (argument *)malloc(sizeof(argument));
   32    if(r==NULL) return r;
   33 
   34    memset(r,0,sizeof(argument));
   35 
   36    r->style = style;
   37    r->command = code;
   38    if(param!=NULL)
   39       strcpy(r->param,param);
   40 
   41    r->next = NULL;
   42 
   43    if(first==NULL) {
   44       first = r;
   45       first->previous = NULL;
   46       first->next = NULL;
   47    }
   48 
   49    if(first->previous != NULL) {
   50       first->previous->next = r;
   51       r->previous=first->previous;
   52    }
   53    
   54    first->previous = r;
   55 
   56    current = r;
   57 
   58    return r;
   59 }
   60 
   61 void argument_freeall() {
   62    current = first;
   63 
   64    while(current!=NULL) {
   65       argument *n = current->next;
   66       free(current);
   67       current=n;
   68    }
   69 
   70    current = NULL;
   71 }
   72 
   73 argument *argument_first() {
   74    if(first!=NULL) {
   75       current = first;
   76       return current;
   77    } else {
   78       return NULL;
   79    }
   80 }
   81 
   82 argument *argument_last() {
   83    if(first!=NULL) {
   84       current=first->previous;
   85       return current;
   86    } else {
   87       return NULL;
   88    }
   89 }
   90 
   91 argument *argument_next() {
   92    if(current!=NULL) {
   93       if (current->next) {
   94          current = current->next;
   95          return current;
   96       } else {
   97          return NULL;
   98       }
   99    } else {
  100       return NULL;
  101    }
  102 }
  103 
  104 argument *argument_prev() {
  105    if(current!=first) {
  106       if (current->previous) {  
  107          current = current->previous;
  108          return current;
  109       } else {
  110          return NULL;
  111       }
  112    } else {
  113       return NULL;
  114    }
  115 }
  116 
  117 void argument_save() {
  118    save = current;
  119 }
  120 argument *argument_pop() {
  121    current = save;
  122    return save;
  123 }
  124 
  125 argument *argument_delete(int afree) {
  126    argument *prev,*next,*tmp;
  127    if(current!=NULL) {
  128       prev = current->previous;
  129       next = current->next;
  130       tmp = current;
  131       if(prev!=NULL) {
  132      prev->next = (tmp!=first)?next:NULL;
  133       }
  134       if(next!=NULL)
  135     next->previous = prev;
  136       if(tmp==first)
  137     first=next;
  138       if(afree) {
  139      free(tmp);
  140      return NULL;
  141       } else {
  142      return tmp;
  143       }
  144    } else {
  145       return NULL;
  146    }
  147 }
  148 
  149 argument *argument_find(int style, int code) {
  150    argument *tmp = first;
  151    int fnd = 0;
  152 
  153    while((tmp!=NULL)&&(!fnd)) {
  154       fnd=((tmp->style==style)&&(tmp->command==code));
  155       if(!fnd)
  156     tmp=tmp->next;
  157    }
  158    
  159    if(tmp) {
  160       return tmp;
  161    } else {
  162       return NULL;
  163    }
  164 }