annotate example/regex/ppe/grep.c @ 1467:d585a7614cd5 draft

look like working now.
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 15 Jul 2012 17:33:50 +0900
parents 2abd68a1ac2a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1198
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 #include <stdio.h>
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #include <stdlib.h>
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 #include <sys/mman.h>
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 #include <sys/types.h>
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 #include <sys/stat.h>
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 #include <fcntl.h>
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 #include <unistd.h>
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 #include <string.h>
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 typedef unsigned char UCHAR;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 typedef unsigned char* UCHARP;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 typedef enum BOOL {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 FALSE = 0,
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 TRUE = 1
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 } BOOL;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 typedef struct ENV {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 // BOOL print_count;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 // BOOL print_filename;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 bool print_count;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 bool print_filename;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 int count;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 char *filename;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 } *ENVP;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 void filter(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 void predict(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 void reject(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 void accept(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 void s0(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 #define __REGEX__ "h.s"
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 UCHARP get_line_beg(UCHARP p, UCHARP beg) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 while(p > beg) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 if ((*--p) == '\n') return p+1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 return beg;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 void print_line(UCHARP beg, UCHARP end) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 fwrite(beg, sizeof(char), (end - beg + 1), stdout);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 void grep(int fd, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 caddr_t file_mmap;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 UCHARP buf, end, beg;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 off_t size;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 struct stat sb;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 if (fstat(fd, &sb)) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 fprintf(stderr, "can't fstat %s\n", env->filename);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 exit(0);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 size = sb.st_size;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 file_mmap = (char*)mmap(NULL, size, PROT_READ, MAP_SHARED, fd, (off_t)0);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 if (file_mmap == (caddr_t)-1) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 fprintf(stderr, "can't mmap %s\n", env->filename);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 exit(0);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
63
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 beg = buf = (UCHARP) file_mmap;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 end = beg + size - 1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 env->count = 0;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
67
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 s0(beg, beg, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 munmap(file_mmap, size);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 return;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 void stdingrep(ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 char buf_[BUFSIZ];
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 UCHARP buf, beg, end;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 buf = beg = (UCHARP) buf_;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 while (fgets(buf_, BUFSIZ, stdin) != NULL) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 env->count = 0;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 end = buf + strlen(buf_) - 1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 s0(beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 int main(int argc, char* argv[]) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 int i, fd, opt, with_filename = 0;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
88
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 ENVP env = (ENVP)calloc(sizeof(ENVP), 1);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 while ((opt=getopt(argc, argv, "chH")) != -1) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 switch (opt) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 case 'c':
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 env->print_count = 1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 break;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 case 'h':
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 with_filename = -1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 break;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 case 'H':
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 with_filename = 1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 break;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 default:
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 fprintf(stderr, "invalid option.");
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 exit(0);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
107
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 if (optind == argc) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 if (with_filename) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 /* handle -h/-H as help */
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 printf("grep pattern: %s\n", __REGEX__);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 exit(1);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 } else {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 stdingrep(env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 } else {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 switch (with_filename) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 case 0: //default
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 if (argc == optind + 1) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 /* just grep 1 file. */
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 env->print_filename = false;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 } else {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 /* grep 1 more files. */
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 env->print_filename = true;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 break;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 // option
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 case -1:
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 env->print_filename = false;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 break;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 case 1:
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 env->print_filename = true;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 break;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 default: break;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 for (i = optind; i < argc; i++) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 fd = open(argv[i], O_RDONLY, 0666);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 if (fd == 0) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 printf("%d, %s\n", i, argv[i]);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 fprintf(stderr, "can't open %s:", argv[i]);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 continue;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 env->filename = argv[i];
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 grep(fd, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 close(fd);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
148
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 return 0;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
150 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 void s1(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 void s2(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
153 void s3(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 void s4(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 void s5(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 void s6(UCHARP beg, UCHARP buf, UCHARP end, ENVP env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
157
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 void s0(UCHARP beg, UCHARP buf, UCHARP end, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
159 return filter(beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
161
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 void filter(UCHARP beg, UCHARP buf, UCHARP end, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 static const UCHARP key = (UCHARP)"h";
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
164 int i, len = 1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 loop:
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 while ((buf = (UCHARP)memchr(buf, key[0], end-buf))) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 for(i = 1; i < len; i++) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 if (buf[i] != key[i]) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
169 buf++;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 goto loop;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
171 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 goto next;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 return reject(beg, end, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 next:
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 return s1(beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
179
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 void s1(UCHARP beg, UCHARP buf, UCHARP end, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 static void (*tbl[256])(UCHARP, UCHARP, UCHARP, ENVP) = {[0 ... 255] = (void*)s1, /* NL */ [10] = (void*)reject, /* h */ [104] = (void*)s2 };
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 if (buf > end) return tbl['\n'](beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 return tbl[*buf++](beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
185
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 void s2(UCHARP beg, UCHARP buf, UCHARP end, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 static void (*tbl[256])(UCHARP, UCHARP, UCHARP, ENVP) = {[0 ... 255] = (void*)s3, /* NL */ [10] = (void*)reject, /* h */ [104] = (void*)s4};
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 if (buf > end) return tbl['\n'](beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 return tbl[*buf++](beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 void s3(UCHARP beg, UCHARP buf, UCHARP end, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 static void (*tbl[256])(UCHARP, UCHARP, UCHARP, ENVP) = {[0 ... 255] = (void*)s1, /* NL */ [10] = (void*)reject, /* h */ [104] = (void*)s2, /* s */ [115] = (void*)s5};
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 if (buf > end) return tbl['\n'](beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 return tbl[*buf++](beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 void s4(UCHARP beg, UCHARP buf, UCHARP end, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 static void (*tbl[256])(UCHARP, UCHARP, UCHARP, ENVP) = {[0 ... 255] = (void*)s3, /* NL */ [10] = (void*)reject, /* h */ [104] = (void*)s4, /* s */ [115] = (void*)s6};
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 if (buf > end) return tbl['\n'](beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 return tbl[*buf++](beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
203
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 void s5(UCHARP beg, UCHARP buf, UCHARP end, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 return accept(beg, buf - 1, end, env);}
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
206
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 void s6(UCHARP beg, UCHARP buf, UCHARP end, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 return accept(beg, buf - 1, end, env);}
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
209
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 void
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 accept(UCHARP beg, UCHARP buf, UCHARP end, ENVP env)
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
212 {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 if (buf < beg) buf = beg;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
214 UCHARP ret = (buf < end) ? (UCHARP) memchr(buf, '\n', (end - buf)) : NULL;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
215 if (env->print_count) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
216 env->count++;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 if (ret == NULL) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
218 if (env->print_filename) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
219 printf("%s:", env->filename);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 printf("%d\n", env->count);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 return;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 beg = buf = ret + 1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 } else {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 beg = get_line_beg(buf, beg);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 if (env->print_filename) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 printf("%s:", env->filename);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 if (ret == NULL) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 print_line(beg, end);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 return;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 print_line(beg, ret);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 beg = buf = ret + 1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 return s0(beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
239
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 void
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 reject(UCHARP beg, UCHARP buf, UCHARP end, ENVP env) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 UCHARP ret;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 if (buf >= end) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 ret = NULL;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 } else {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 if (*(buf-1) == '\n') {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 ret = buf-1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 } else {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 ret = (UCHARP)memchr(buf, '\n', (end - buf));
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 if (ret == NULL) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 if (env->print_count) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 if (env->print_filename) {
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 printf("%s:", env->filename);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 printf("%d\n", env->count);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 return;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 }
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 beg = buf = ret + 1;
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 return s0(beg, buf, end, env);
2abd68a1ac2a add example/regex
Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 }