亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? myutil.c

?? disksim是一個非常優秀的磁盤仿真工具
?? C
?? 第 1 頁 / 共 2 頁
字號:
  for(c = 0; c < lp_max_mod; c++) {    for(d = 0; d < lp_modules[c]->modvars_len; d++) {      printf("%s::%s\n", lp_modules[c]->name, 	     lp_modules[c]->modvars[d].name);    }  }}void dummy (struct lp_block *b) {   fprintf(stderr, "*** error: %s cannot be declared at top-level.\n",	  b->name);  exit(1);}struct lp_list *lp_list_add(struct lp_list *l, 			    struct lp_value *v){  int c, newlen;  for(c = 0; c < l->values_len; c++) {    if(!l->values[c]) goto done;  }  newlen = 2 * c * sizeof(struct lp_value *);  l->values = realloc(l->values, newlen);  bzero(l->values + c, newlen / 2);  l->values_len *= 2; done:  l->values_pop++;  l->values[c] = v;    return l;}/* maps a modtype and parameter name to a nonnegative numeric * representation.  -1 returned on error */int lp_param_name(int m, char *n){  int c = 0;  if(!RANGE(m,0,lp_max_mod)) return -1;  if(!n) return -1;  while((c < lp_modules[m]->modvars_len)	&& strcmp(lp_modules[m]->modvars[c].name, n)) c++;  if(c >= lp_modules[m]->modvars_len) {    return -1;  }  else {    return c;  }}int lp_mod_name(char *n) {  int c = 0;  if(!n) return -1;  while((c < lp_max_mod) && strcmp(lp_modules[c]->name, n)) c++;  if(c >= lp_max_mod) {    return -1;  }  else {    return c;  }}/* get the base type of name */char *lp_lookup_base_type(char *name, int *n) {  int c;  for(c = 0; c < lp_typetbl_len; c++) {    if(lp_typetbl[c]) {      if(!strcmp(name, lp_typetbl[c]->sub)) {	if(lp_typetbl[c]->super) {	  return lp_lookup_base_type(lp_typetbl[c]->super, n);	}	else {	  break;	}      }    }  }  if(n) *n = c;  return name;}char *lp_lookup_type(char *name, int *n) {  int c;  for(c = 0; c < lp_typetbl_len; c++) {    if(lp_typetbl[c]) {      if(!strcmp(name, lp_typetbl[c]->sub)) {	if(n) *n = c;	return lp_typetbl[c]->super;      }    }  }  return 0;}/* find the specification for name or return 0 if it doesn't exist. * New "wildcard" behavior: if name is null, return the first * spec in the typetbl with non-zero parent -- i.e. only  * match a user-provided spec, not a builtin type! */struct lp_block *lp_lookup_spec(char *name) {  int c;  for(c = 0; c < lp_typetbl_len; c++)     if(lp_typetbl[c]) {      if(!name) {	if(lp_typetbl[c]->super) {	  return lp_typetbl[c]->spec;	}      }      else if(!strcmp(name, lp_typetbl[c]->sub)) {	return lp_typetbl[c]->spec;      }    }  return 0;}struct lp_tlt *lp_new_tl_topo(struct lp_topospec *t, char *source_file){  struct lp_tlt *result = calloc(1, sizeof(*result));  result->source_file = source_file;  result->what = TLT_TOPO;  result->it.topo = t;  lp_add_tlt(result);  return result;}struct lp_tlt *lp_new_tl_inst(struct lp_inst *i, char *source_file){  struct lp_tlt *result = calloc(1, sizeof(*result));  result->source_file = source_file;  result->what = TLT_INST;  result->it.inst = i;  lp_add_tlt(result);  return result;}struct lp_tlt *lp_new_tl_block(struct lp_block *b, char *source_file){  struct lp_tlt *result = calloc(1, sizeof(*result));  result->source_file = source_file;  result->what = TLT_BLOCK;  result->it.block = b;  lp_add_tlt(result);  return result;}void lp_add_tlt(struct lp_tlt *tlt) {  int c;  int found = 0;  for(c = 0; c < lp_tlts_len; c++) {    if(!lp_tlts[c]) {      found = c; break;    }  }  if(!found) {    int newlen = lp_tlts_len ? 2 * lp_tlts_len : 2;    int zerocnt = lp_tlts_len ? lp_tlts_len : 2;        int newsize = newlen * sizeof(struct lp_tlts *);    zerocnt *= sizeof(struct lp_tlts *);    lp_tlts = realloc(lp_tlts, newsize);    memset(lp_tlts + lp_tlts_len, 0, zerocnt);    found = lp_tlts_len;    lp_tlts_len = newlen;  }  lp_tlts[c] = tlt;}int lp_add_type(char *newt, char *parent) {  int c;  int newlen;  struct lp_subtype *st = calloc(1, sizeof(*st));  st->super = strdup(parent); st->sub = strdup(newt);  if(!lp_lookup_type(newt,0)) {    for(c = 0; c < lp_typetbl_len; c++)       if(!lp_typetbl[c]) {	goto done;      }    newlen = lp_typetbl_len ? 2 * lp_typetbl_len : 2;    lp_typetbl = realloc(lp_typetbl, newlen * sizeof(int *));    bzero(lp_typetbl + c, c * sizeof(int *));    lp_typetbl_len = newlen;  }  else return -1;    done:  lp_typetbl[c] = st;  return 0;}int lp_add_param(struct lp_param ***b, int *plen,		 struct lp_param *p){  int c;  /* look for dupe params */  for(c = 0; c < *plen; c++) {    if(!(*b)[c]) continue;    if(!strcmp((*b)[c]->name, p->name)) {      fprintf(stderr, "*** error: redefined %s\n", p->name);      return -1;    }  }  for(c = 0; c < *plen; c++) {    if(!(*b)[c]) {      (*b)[c] = p;      break;    }  }  if(c == *plen) {    /* didn't find a free slot -- double the array */    int newlen = 2 * (*plen) + 1;    (*b) = realloc((*b), newlen * sizeof(int *));    bzero((int *)(*b) + *plen, ((*plen) + 1) * sizeof(int*));    (*b)[(*plen)] = p;    *plen = newlen;  }  return 0;}/* copy all of the params in parent not defined in child into * child */int lp_setup_subtype(struct lp_block *parent,		     struct lp_block *child){  int c, d;  for(c = 0; c < parent->params_len; c++) {    int found = 0;    for(d = 0; d < child->params_len; d++) {      if(!strcmp(child->params[d]->name, parent->params[c]->name)) {	found = 1;      }    }    if(!found) {      lp_add_param(&child->params, &child->params_len, parent->params[c]);    }  }  return 0;}void lp_init_typetbl(void) {  int c;  lp_typetbl = calloc(lp_max_mod, sizeof(struct subtype *));  for(c = 0; c < lp_max_mod; c++) {    lp_typetbl[c] = malloc(sizeof(struct lp_subtype));    bzero(lp_typetbl[c], sizeof(struct lp_subtype));    lp_typetbl[c]->sub = strdup(lp_modules[c]->name);  }  lp_typetbl_len = lp_max_mod;}void lp_release_typetbl(void) {  int c;  for(c = 0; c < lp_typetbl_len; c++) {    if(!lp_typetbl[c]) continue;    if(lp_typetbl[c]->spec)      destroy_block(lp_typetbl[c]->spec);    if(lp_typetbl[c]->sub)      free(lp_typetbl[c]->sub);    if(lp_typetbl[c]->super)       free(lp_typetbl[c]->super);     free(lp_typetbl[c]);  }  free(lp_typetbl);}/* splits s into a trailing number (i) and the leading part */int dumb_split(char *s, char **t, int *i) {  int c = strlen(s) - 1;    while(c && isdigit(s[c])) c--;  if(!c) return -1;  c++;  (*i) = atoi(&s[c]);  *t = strdup(s);  (*t)[c] = 0;  return 0;}/* separate 'foo:bar' into 'foo' and 'bar' */int dumb_split2(char *s, char **s1, char **s2) {  int c = 0;  (*s1) = strdup(s);  while(s[c] && (s[c] != ':')) c++;  (*s1)[c] = 0;  if(s[c]) (*s2) = strdup(s + c + 1);  else return -1;  return 0;}static int param_override(struct lp_block *b, 			  char *pname,			  char *pval) {  int c;    for(c = 0; c < b->params_len; c++) {    if(!b->params[c]) continue;    if(!strcmp(b->params[c]->name, pname)) {      switch(b->params[c]->v->t) {      case I:	b->params[c]->v->v.i = atoi(pval);	break;      case D:	b->params[c]->v->v.d = atof(pval);	break;      case S:	free(b->params[c]->v->v.s);	b->params[c]->v->v.s = strdup(pval);	return 0;	break;      default:	ddbg_assert(0);      }      return -1;    }   }    return -1;}			  int range_match(char *range, char *name) {  char *base1, *base2, *base3;  char r1[128], r2[128];  int i1, i2, i3;  if(!strcmp(range, name)) { return 1; }  if(!strcmp(range, "*")) return 1;  if(sscanf(range, "%s .. %s", r1, r2) != 2) {     char *prefix; int junk;    dumb_split(name, &prefix, &junk);    /* i.e. driver* matches driver2 and driver and driver2344 but not     * driverqux      */    if((strlen(range) == ( strlen(prefix) + 1)) &&       !strncmp(range,prefix,strlen(prefix)) &&       (range[strlen(prefix)] == '*')) return 1;    return 0;   }    dumb_split(r1, &base1, &i1);  dumb_split(r2, &base2, &i2);  if(strcmp(base1, base2) || (i1 < 0) || (i2 < i1)) {    fprintf(stderr, "*** error: bad range \"%s .. %s\"\n", r1, r2);    return 0;  }  dumb_split(name, &base3, &i3);  if(!strcmp(base3, base2) && (i3 >= i1) && (i3 <= i2)) {    return 1;  }  else {    return 0;  }}/* instantiate a component with overrides  * tname type to instantiate, * cname name of instantiated component * loader is the module loader function for tname */int *lp_override_inst(struct lp_block *spec, 		  char *cname, 		  lp_modloader_t loader,		  char **overrides,		  int overrides_len){  int c, d;  struct lp_block *spec_copy;  char *p1, *p2;   int *result;    spec_copy = copy_block(spec);  for(c = 0; c < overrides_len; c += 3) {    if(range_match(overrides[c], cname)) {            /* overrides[c+2] could be an int, a real, a string or a list or       * a block.  need parser to deal with lists and blocks       * reasonably so we aren't going to deal with them here */           if(!dumb_split2(overrides[c+1], &p1, &p2)) {	/* descend hierarchy */	for(d = 0; d < spec_copy->params_len; d++) {	  if(!spec_copy->params[d]) continue;	  if(!strcmp(p1, spec_copy->params[d]->name)) {	    if(spec_copy->params[d]->v->t != BLOCK) {	      fprintf(stderr, "*** error: tried to recurse through non-block parameter.\n");	      return 0;	    }	    else {	      param_override(spec_copy->params[d]->v->v.b, p2, 			     overrides[c+2]);	    }	  }	}      }      else {	param_override(spec_copy, 		       overrides[c+1], 		       overrides[c+2]);	      }    }  }  if(!check_types(spec_copy)) {    result = loader(spec_copy, 0);  }  // XXX don't leak (segfaults)  //  destroy_block(spec_copy);  return result; }extern void libparamparse(void);extern void libparamlex(void);int lp_loadfile(FILE *in, 		struct lp_tlt ***tlts, 		int *tlts_len, 		char *infile,		char **cli_overrides,		int cli_overrides_len) {  char *lp_sp;  char *dirc;  char *dir;    int stdout_save;  int devnull;  top_file = 0;  lp_lineno = 1;  dirc = strdup(infile);  dir = dirname(dirc);  lp_filename = infile;  lp_cwd = dir;  libparamin = in;  overrides = cli_overrides;  overrides_len = cli_overrides_len;  // do the searchpath  lp_sp = getenv("LP_PATH");  if(lp_sp) {    char *p = lp_sp;    char *colon;        lp_searchpath = calloc(LP_MAX_SP, sizeof(char*));    while(*p) {      colon = strchr(p, ':');      if(colon) {	char *next;  	*colon = 0;	next = colon+1;	lp_searchpath[lp_searchpath_len++] = strdup(p);  	p = next;      }      else {	lp_searchpath[lp_searchpath_len++] = strdup(p);	break;      }    }  }  // this creates a fresh array every time its run so caller   // is responsible for freeing it  lp_tlts = 0;  lp_tlts_len = 0;    fflush(stdout);  stdout_save = dup(1);  devnull = open("/dev/null", O_RDONLY);  dup2(devnull, 1);  libparamparse();  fflush(stdout);  dup2(stdout_save, 1);  close(devnull);  close(stdout_save);  if(tlts) {    *tlts = lp_tlts;  }  if(tlts_len) {    *tlts_len = lp_tlts_len;  }  return 0;}#define LP_STACK_MAX 32intlp_loadparams(void *it, struct lp_block *b, struct lp_mod *m) {  int c;  int needed = 0;  int param_stack[LP_STACK_MAX];  int stack_ptr = 0;  // index of first free slot  // XXX not static size  char *paramvec = calloc(m->modvars_len, sizeof(char));  // This is pretty gross; there should be a better solution.  // dirname() munges its operand.  Its result may also be a static  // buffer somewhere, hence the 2 copies.  char *tmp = strdup(b->source_file);  lp_cwd = strdup(dirname(tmp));  //  free(tmp);   for(c = 0; c < b->params_len; c++) {    int pnum, deps;        if(!b->params[c]) continue;      TOP:    pnum = lp_param_name(lp_mod_name(m->name), b->params[c]->name);        // Don't initialize things more than once.    // Should warn here, probably.    if(BIT_TEST(paramvec, pnum)) continue;            if(stack_ptr > 0) {      for(c = 0; c < b->params_len; c++) {	if(lp_param_name(lp_mod_name(m->name), b->params[c]->name) == needed)	  goto FOUND;      }      break;    }  FOUND:      deps = m->param_deps[pnum](paramvec);    if(deps > -1) {      ddbg_assert(stack_ptr < LP_STACK_MAX);      param_stack[stack_ptr++] = c;      needed = deps;      continue;    }    else {      switch(PTYPE(b->params[c])) {      case I:     	((lp_paramloader_int)m->param_loaders[pnum])(it, IVAL(b->params[c])); 	break;       case D:     	((lp_paramloader_double)m->param_loaders[pnum])(it, DVAL(b->params[c])); 	break;       case S:     	((lp_paramloader_string)m->param_loaders[pnum])(it, SVAL(b->params[c])); 	break;       case LIST:  	((lp_paramloader_list)m->param_loaders[pnum])(it, LVAL(b->params[c])); 	 break; 	       case BLOCK:      default:    	((lp_paramloader_block)m->param_loaders[pnum])(it, BVAL(b->params[c])); 	break;       }    }    BIT_SET(paramvec, pnum);    if(stack_ptr > 0) {       c = param_stack[--stack_ptr];       goto TOP;      }  }  for(c = 0; c < m->modvars_len; c++) {    if(m->modvars[c].req && !BIT_TEST(paramvec,c)) {      fprintf(stderr, "*** error: in %s spec -- missing required parameter %s\n", m->name, m->modvars[c].name);      break;    }  }  free(paramvec);  return 0; // ???}char *lp_search_path(char *cwd, char *name){  char *cand = calloc(LP_PATH_MAX, sizeof(char));  struct stat s;  int i;    if(name[0] == '/')    if(stat(name, &s))      goto fail;  snprintf(cand, LP_PATH_MAX, "%s/%s", cwd, name);  if(!stat(cand, &s))    goto succ;      for(i = 0; i < lp_searchpath_len; i++) {    snprintf(cand, LP_PATH_MAX, 	     "%s/%s", lp_searchpath[i], name);    if(!stat(cand, &s)) {      goto succ;    }  } fail:  free(cand);  return 0; succ:  return cand;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品视频一二三区| 国产九九视频一区二区三区| 成人福利在线看| 久久精品男人的天堂| 成人动漫一区二区三区| 国产成人av电影| 日韩理论在线观看| 欧美揉bbbbb揉bbbbb| 丝袜亚洲另类欧美| 精品欧美久久久| 国产99久久久精品| 国产91精品入口| 成人av免费网站| 欧美午夜寂寞影院| 国产69精品一区二区亚洲孕妇 | 欧美日韩久久久一区| 久久电影网电视剧免费观看| 国产人伦精品一区二区| 制服视频三区第一页精品| 成人一区二区视频| 国内精品第一页| 丝袜亚洲另类欧美综合| 久久精品二区亚洲w码| 国产精品一区二区久久精品爱涩| av电影天堂一区二区在线观看| 日韩成人一级片| 日韩理论片在线| 视频一区二区中文字幕| 国产精品一区在线观看乱码 | 国产酒店精品激情| 色综合中文字幕| 国产精品一品视频| 在线观看视频一区二区| 成人中文字幕电影| 欧美日韩色综合| 国产日韩欧美一区二区三区乱码| 亚洲裸体xxx| 日韩视频一区二区三区 | 欧美一区国产二区| 欧美日韩不卡一区| 欧美高清在线一区| 国产精品久久久久久久裸模| 中文字幕av一区二区三区高| 日韩精品一级二级 | 欧美日韩视频第一区| 欧美极品xxx| 精品制服美女久久| 国产精品1区2区3区在线观看| 一本一道久久a久久精品| 在线观看三级视频欧美| 久久网站最新地址| 国产午夜精品久久久久久免费视| 亚洲主播在线播放| 午夜精品久久久久久久久久久| 亚洲第一成人在线| 婷婷成人激情在线网| 白白色 亚洲乱淫| 久久久久久久久久看片| 国产精品久久一卡二卡| 久久成人免费网| 欧美精品久久天天躁| 欧美mv日韩mv| 日韩成人免费看| 精品1区2区3区| 亚洲精品综合在线| 99久久精品一区二区| 欧美日韩国产成人在线91| 亚洲同性同志一二三专区| 成人免费看片app下载| 久久精品亚洲精品国产欧美kt∨| 免费成人你懂的| 不卡的av网站| 欧美激情一区在线| 99久久久国产精品| 伊人开心综合网| 欧日韩精品视频| 亚洲va天堂va国产va久| 欧美日韩国产综合视频在线观看| 亚洲成av人综合在线观看| 欧美羞羞免费网站| 男女男精品网站| 亚洲精品一线二线三线无人区| 亚洲美女电影在线| 色综合天天综合| 亚洲永久精品大片| 欧美嫩在线观看| 久久精品国产色蜜蜜麻豆| 精品国产91久久久久久久妲己| 精品无码三级在线观看视频| 精品播放一区二区| 不卡视频免费播放| 亚洲国产sm捆绑调教视频| 大胆亚洲人体视频| 亚洲欧美一区二区三区极速播放 | 亚洲国产欧美在线| 91麻豆精品国产91久久久使用方法 | 亚洲国产精品ⅴa在线观看| av高清久久久| 亚洲电影在线播放| 精品久久久久久无| 99久久婷婷国产综合精品 | 26uuu亚洲综合色| 成人黄色777网| 日韩国产精品久久| 久久久久国产成人精品亚洲午夜| 97精品国产97久久久久久久久久久久| 一区二区三区在线视频观看58| 波多野结衣中文字幕一区| 一区二区三区中文字幕在线观看| 91麻豆精品国产91久久久久久久久 | 欧美mv日韩mv国产网站app| 国产成人免费视频网站高清观看视频 | 日韩av网站在线观看| 久久精品免视看| 日本电影亚洲天堂一区| 亚洲欧美偷拍三级| 日韩三级.com| 91国偷自产一区二区使用方法| 久久精品国产精品亚洲综合| 亚洲黄色免费电影| 2024国产精品| 在线成人小视频| 白白色亚洲国产精品| 精品一区二区三区影院在线午夜| 亚洲色图20p| 久久欧美中文字幕| 91精品国产综合久久精品app | 久久久精品人体av艺术| 精品视频在线免费观看| 成人教育av在线| 精品一区二区三区香蕉蜜桃| 午夜精品成人在线视频| 亚洲色欲色欲www| 久久精品视频免费| 欧美α欧美αv大片| 91麻豆精品国产无毒不卡在线观看 | 欧美日韩国产在线观看| 波多野结衣精品在线| 国内精品久久久久影院薰衣草| 天涯成人国产亚洲精品一区av| 亚洲欧美日韩精品久久久久| 国产免费久久精品| 国产日韩精品一区二区三区在线| 日韩你懂的电影在线观看| 国内精品国产成人国产三级粉色| 日韩电影在线观看一区| 亚洲成人在线网站| 亚洲国产视频在线| 亚洲成a人v欧美综合天堂下载 | 蜜臂av日日欢夜夜爽一区| 精品免费国产二区三区| 欧美一区二区三区爱爱| 91麻豆精品国产91久久久更新时间 | 在线国产电影不卡| 欧美性videosxxxxx| 欧美日韩一区视频| 欧美狂野另类xxxxoooo| 91麻豆精品国产91久久久更新时间 | 日韩欧美亚洲一区二区| 欧美剧在线免费观看网站| 欧美群妇大交群中文字幕| 欧美三级电影网| 91精品国产综合久久久蜜臀粉嫩 | 日韩一区二区影院| 日韩精品一区二区三区在线| 精品久久久久av影院| 国产婷婷一区二区| 亚洲精品亚洲人成人网在线播放| 一个色在线综合| 日韩主播视频在线| 国产伦理精品不卡| 免费看欧美美女黄的网站| 韩国三级电影一区二区| 成人午夜短视频| 欧美在线色视频| 欧美白人最猛性xxxxx69交| 国产欧美日本一区二区三区| 亚洲人成伊人成综合网小说| 午夜电影网一区| 国产黄色91视频| 欧美亚洲国产一区二区三区va| 这里只有精品99re| 中文字幕精品一区二区精品绿巨人| 亚洲精品国产视频| 美美哒免费高清在线观看视频一区二区 | 亚洲欧美韩国综合色| 丝袜a∨在线一区二区三区不卡| 久久国产精品色婷婷| 91亚洲国产成人精品一区二三| 国产成人欧美日韩在线电影| 色噜噜狠狠色综合中国| 精品久久人人做人人爱| 一区二区三区欧美视频| 韩国视频一区二区| 欧美在线观看视频在线| 久久久亚洲精品石原莉奈| 亚洲国产日韩精品| 成人午夜视频在线观看| 欧美一级片在线观看| 亚洲天堂中文字幕|