Subversion Repositories shark

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 pj 1
/*
2
 *
3
 *
4
 */
5
 
6
#include <stdio.h>
7
#include <stdlib.h>
8
#include <string.h>
9
#include <ctype.h>
10
 
11
#define MAXTOKENSIZE 128
12
 
13
static char string[MAXTOKENSIZE];
14
static char buffer[MAXTOKENSIZE*8];
15
static FILE *fin;
16
int line;
17
static int flags;
18
static char *lasttoken,*token;
19
 
20
int init_tokenizer(char *filename,int fl)
21
{
22
  fin=fopen(filename,"rt");
23
  if (fin==NULL) return -1;
24
 
25
  line=0;
26
  buffer[0]='\0';
27
  strtok(buffer," \n");
28
  flags=fl;
29
  lasttoken=NULL;
30
  token=NULL;
31
  return 0;
32
}
33
 
34
void ungettoken(void)
35
{
36
  if (flags&0x02) {fprintf(stderr,"<<UNGET>>"); fflush(stderr); }
37
  if (lasttoken!=NULL) abort();
38
  lasttoken=token;
39
}
40
 
41
char *gettoken(void)
42
{
43
  char *s;
44
 
45
  if (lasttoken!=NULL) {
46
    token=lasttoken;
47
    lasttoken=NULL;
48
    if (flags&0x02) {fprintf(stderr,"<%s>",token); fflush(stderr); }
49
    return token;
50
  }
51
 
52
  s=strtok(NULL," \n");
53
 
54
  if (s==NULL) {
55
    for (;;) {
56
      s=fgets(buffer,sizeof(buffer),fin);
57
      line++;
58
      if (flags&0x1) {fprintf(stderr,"[%i]",line); fflush(stderr); }
59
      if (s==NULL) {
60
        if (flags&0x03) {fprintf(stderr,"\n"); fflush(stderr); }       
61
        return NULL;
62
      }
63
      s=strtok(buffer," \n");
64
      if (s!=NULL) {
65
        if (*s=='#') continue;
66
        break;
67
      }
68
    }
69
  }
70
 
71
  if (*s=='\"') {
72
    /* Well, the strings are returned with a \" on first character */
73
    char *p;
74
    strcpy(string,s);
75
    p=strchr(string+1,'\"');
76
    if (p!=NULL) {
77
      *p='\0';
78
      if (flags&0x02) {fprintf(stderr,"<%s>",string); fflush(stderr); }
79
      return token=string;
80
    }
81
    s=strtok(NULL,"\"");
82
    if (s==NULL) {
83
      if (flags&0x03) {fprintf(stderr,"\n"); fflush(stderr); }
84
      return NULL;
85
    }
86
    strcat(string," ");
87
    strcat(string,s);
88
    p=strchr(string+1,'\"');
89
    if (p!=NULL) *p='\0';
90
    if (flags&0x02) {fprintf(stderr,"<%s>",string); fflush(stderr); }
91
    return token=string;
92
  }
93
 
94
  if (flags&0x02) {fprintf(stderr,"<%s>",s); fflush(stderr); }
95
  return token=s;
96
}
97
 
98
int done_tokenizer(void)
99
{
100
  return fclose(fin);
101
}
102
 
103
#if 0
104
int main(int argc, char *argv[])
105
{
106
  char *s;
107
  init_tokenizer(argv[1]);
108
  while ((s=gettoken())!=NULL) {
109
    printf("<%s>\n",s);
110
  }
111
  done_tokenizer();
112
}
113
#endif
114
 
115
 
116