001: #include <stdio.h>
002: #include <stdlib.h>
003: #include <string.h>
004: #include "common.h"
005:
006:
007:
008:
009:
010:
011:
012:
013: void split_path(char* fpath,char* dir,char* file,char* ext)
014: {
015: int i,len=strlen(fpath);
016:
017: for(i=len-1;i>=0;i--)
018: if(fpath[i]=='.') break;
019: strncpy(ext,fpath+i,len-i);
020: strncpy(file,fpath,i);
021: ext[len-i] = '\0'; file[i] = '\0';
022:
023: len = i;
024: for(i=len-1;i>=0;i--)
025: if(file[i]=='/') break;
026: i++;
027: strncpy(dir,file,i);
028: strncpy(file,file+i,len-i);
029: dir[i] = '\0'; file[len-i] = '\0';
030: }
031:
032:
033:
034: int Fstr_count(char* fname)
035: {
036: FILE* fp;
037: int rsc,sum_sc = 0;
038: char buf[BUFSIZ];
039: memset(buf,0,BUFSIZ);
040: if((fp=fopen(fname,"r"))==NULL){
041: fprintf(stderr,"read file[%s]: No such file or directory\n",fname);
042: return 0;
043: }
044: while((rsc=fread(buf,sizeof(char),BUFSIZ,fp))){
045: sum_sc += rsc;
046: }
047: sum_sc += rsc;
048: fclose(fp);
049: return sum_sc;
050: }
051:
052:
053:
054: void Fstr_count(char* fname,int& sum_sc,int& sum_lc,int& sum_tc)
055: {
056: FILE* fp;
057: int i,rsc;
058: char buf[BUFSIZ];
059: memset(buf,0,BUFSIZ);
060: sum_sc = sum_lc = sum_tc = 0;
061: if((fp=fopen(fname,"r"))==NULL){
062: fprintf(stderr,"read file[%s]: No such file or directory\n",fname);
063: return;
064: }
065: while((rsc=fread(buf,sizeof(char),BUFSIZ,fp))){
066: for(i=0;i<rsc;i++){
067: if(buf[i]=='\n') sum_lc++;
068: if(buf[i]=='t') sum_tc++;
069: }
070: sum_sc += rsc;
071: }
072: sum_sc += rsc;
073: fclose(fp);
074: }
075:
076:
077:
078: void str_count(char* code,int& sum_sc,int& sum_lc,int& sum_tc)
079: {
080: int i;
081: sum_sc = sum_lc = sum_tc = 0;
082: sum_sc = strlen(code);
083: for(i=0;i<sum_sc;i++){
084: if(code[i]=='\n') sum_lc++;
085: if(code[i]=='t') sum_tc++;
086: }
087: }
088:
089:
090:
091: int read_string(char* fname,int read_sc,char* inbuf)
092: {
093: FILE* fp;
094: int rsc;
095: if((fp=fopen(fname,"r"))==NULL){
096: perror("read file open");
097: return 0;
098: }
099: rsc = fread(inbuf,sizeof(char),read_sc,fp);
100: if(rsc!=read_sc) perror("read size");
101: fclose(fp);
102: return 1;
103: }
104:
105:
106:
107: int kwd_compare(const void *x, const void *y){
108: return strlen(*(char **)y) - strlen(*(char **)x);
109: }
110:
111:
112:
113: int kwd_sch(char* code,int str_len,int ki,char* kwd)
114: {
115: int i,klen = strlen(kwd);
116: if(ki+klen > str_len) return 0;
117: for(i=0;i<klen;i++){
118: if(code[ki+i] != kwd[i]) break;
119: }
120: if(i==klen) return 1;
121: return 0;
122: }
123:
124:
125:
126: int Kwd_sch(char* code,int str_len,int ki,char* kwd)
127: {
128: int i,klen = strlen(kwd);
129: if(ki+klen > str_len) return 0;
130: for(i=0;i<klen;i++){
131: if((code[ki+i]) != kwd[i] &&
132: (code[ki+i]|32) != kwd[i])
133: break;
134: }
135: if(i==klen) return 1;
136: return 0;
137: }
138:
139:
140:
141: int line_schtop(char* code,int str_len,int ki)
142: {
143: for(int i=0;ki+i<str_len;i++){
144: if(code[ki+i] == '\n') return -1;
145: if(code[ki+i] != ' ' && code[ki+i] != '\t') return i;
146: }
147: return -1;
148: }
149:
150:
151:
152: int line_schchar(char* c_code,int str_len,int ki,char fc)
153: {
154: int i;
155: unsigned char c;
156: for(i=0;ki+i<str_len;i++){
157: c = c_code[ki+i];
158: if(c == fc) break;
159: if(c == '\n') return -1;
160: }
161: return i;
162: }
163:
164:
165:
166: int line_schstr(char* c_code,int str_len,int ki,char* kwd)
167: {
168: for(int i=0;ki+i<str_len;i++){
169: if(kwd_sch(c_code,str_len,ki+i,kwd)){
170: return i;
171: }
172: if(c_code[ki+i] == '\n') return -1;
173: }
174: return -1;
175: }
176:
177:
178:
179: int ismailstr(char schstr)
180: {
181: if(schstr >= 0x30 && schstr <= 0x39)
182: return 1;
183: if(schstr >= 0x41 && schstr <= 0x5A)
184: return 1;
185: if(schstr >= 0x61 && schstr <= 0x7A)
186: return 1;
187: if(schstr == 0x5F || schstr == 0x2D || schstr == 0x2E)
188:
189: return 1;
190: return 0;
191: }
192:
193:
194:
195: int isurlstr(char schstr)
196: {
197: if(schstr == 0x32) return 0;
198: if(schstr >= 0x30 && schstr <= 0x39)
199: return 1;
200: if(schstr >= 0x41 && schstr <= 0x5A)
201: return 1;
202: if(schstr >= 0x61 && schstr <= 0x7A)
203: return 1;
204:
205: if(schstr == 0x5F || schstr == 0x2D || schstr == 0x2E ||
206: schstr == 0x7E || schstr == 0x25 || schstr == 0x26 ||
207: schstr == 0x3F || schstr == 0x2F || schstr == 0x3D ||
208: schstr == 0x3a)
209:
210:
211: return 1;
212: return 0;
213: }