📄 mkdb.c
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <ctype.h>Biobuf in;Biobuf out;enum{ Empty, Sys, Dk, Ip, Domain,};intiscomment(char *name){ return *name == '#';}/* * is this a fully specified datakit name? */intisdk(char *name){ int slash; slash = 0; for(; *name; name++){ if(isalnum(*name)) continue; if(*name == '/'){ slash = 1; continue; } return 0; } return slash;}/* * Is this an internet domain name? */intisdomain(char *name){ int dot = 0; int alpha = 0; for(; *name; name++){ if(isalpha(*name) || *name == '-'){ alpha = 1; continue; } if(*name == '.'){ dot = 1; continue; } if(isdigit(*name)) continue; return 0; } return dot && alpha;}/* * is this an ip address? */intisip(char *name){ int dot = 0; for(; *name; name++){ if(*name == '.'){ dot = 1; continue; } if(isdigit(*name)) continue; return 0; } return dot;}char tup[64][64];int ttype[64];int ntup;voidtprint(void){ int i, tab; char *p; tab = 0; for(i = 0; i < ntup; i++){ if(ttype[i] == Sys){ Bprint(&out, "sys = %s\n", tup[i]); tab = 1; ttype[i] = Empty; break; } } for(i = 0; i < ntup; i++){ if(ttype[i] == Empty) continue; if(tab) Bprint(&out, "\t"); tab = 1; switch(ttype[i]){ case Domain: Bprint(&out, "dom=%s\n", tup[i]); break; case Ip: Bprint(&out, "ip=%s\n", tup[i]); break; case Dk: p = strrchr(tup[i], '/'); if(p){ p++; if((*p == 'C' || *p == 'R') && strncmp(tup[i], "nj/astro/", p-tup[i]) == 0) Bprint(&out, "flavor=console "); } Bprint(&out, "dk=%s\n", tup[i]); break; case Sys: Bprint(&out, "sys=%s\n", tup[i]); break; } }}#define NFIELDS 64/* * make a database file from a merged uucp/inet database */voidmain(void){ int n, i, j; char *l; char *fields[NFIELDS]; int ftype[NFIELDS]; int same, match; Binit(&in, 0, OREAD); Binit(&out, 1, OWRITE); ntup = 0; while(l = Brdline(&in, '\n')){ l[Blinelen(&in)-1] = 0; n = getfields(l, fields, NFIELDS, 1, " \t"); same = 0; for(i = 0; i < n; i++){ if(iscomment(fields[i])){ n = i; break; } if(isdomain(fields[i])){ ftype[i] = Domain; for(j = 0; j < ntup; j++) if(ttype[j] == Domain && strcmp(fields[i], tup[j]) == 0){ same = 1; ftype[i] = Empty; break; } } else if(isip(fields[i])) ftype[i] = Ip; else if(isdk(fields[i])) ftype[i] = Dk; else ftype[i] = Sys; } if(!same && ntup){ tprint(); ntup = 0; } for(i = 0; i < n; i++){ match = 0; for(j = 0; j < ntup; j++){ if(ftype[i] == ttype[j] && strcmp(fields[i], tup[j]) == 0){ match = 1; break; } } if(!match){ ttype[ntup] = ftype[i]; strcpy(tup[ntup], fields[i]); ntup++; } } } if(ntup) tprint(); exits(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -