⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.c

📁 这是一个非常有价值的参考代码
💻 C
字号:
/* * avrdude - A Downloader/Uploader for AVR device programmers * Copyright (C) 2000-2004  Brian S. Dean <bsd@bsdhome.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//* $Id: config.c,v 1.14 2004/12/22 01:52:45 bdean Exp $ */#include "ac_cfg.h"#include <stdio.h>#include <stdlib.h>#include <stdarg.h>#include <string.h>#include "avr.h"#include "config.h"#include "config_gram.h"char default_programmer[MAX_STR_CONST];char default_parallel[PATH_MAX];char default_serial[PATH_MAX];char string_buf[MAX_STR_CONST];char *string_buf_ptr;LISTID       string_list;LISTID       number_list;PROGRAMMER * current_prog;AVRPART    * current_part;AVRMEM     * current_mem;LISTID       part_list;LISTID       programmers;int    lineno = 0;char * infile = NULL;#define DEBUG 0int init_config(void){  string_list  = lcreat(NULL, 0);  number_list  = lcreat(NULL, 0);  current_prog = NULL;  current_part = NULL;  current_mem  = 0;  part_list    = lcreat(NULL, 0);  programmers  = lcreat(NULL, 0);  lineno       = 1;  infile       = NULL;  return 0;}int yywrap(){  return 1;}int yyerror(char * errmsg){  fprintf(stderr, "%s at %s:%d\n", errmsg, infile, lineno);  exit(1);}TOKEN * new_token(int primary){  TOKEN * tkn;  tkn = (TOKEN *)malloc(sizeof(TOKEN));  if (tkn == NULL) {    fprintf(stderr, "new_token(): out of memory\n");    exit(1);  }  memset(tkn, 0, sizeof(TOKEN));  tkn->primary = primary;  return tkn;}void free_token(TOKEN * tkn){  if (tkn) {    switch (tkn->primary) {      case TKN_STRING:      case TKN_ID:        if (tkn->value.string)          free(tkn->value.string);        tkn->value.string = NULL;        break;    }        free(tkn);  }}void free_tokens(int n, ...){  TOKEN * t;  va_list ap;  va_start(ap, n);  while (n--) {    t = va_arg(ap, TOKEN *);    free_token(t);  }  va_end(ap);}TOKEN * number(char * text){  struct token_t * tkn;  tkn = new_token(TKN_NUMBER);  tkn->value.type   = V_NUM;  tkn->value.number = atof(text);#if DEBUG  fprintf(stderr, "NUMBER(%g)\n", tkn->value.number);#endif  return tkn;}TOKEN * hexnumber(char * text){  struct token_t * tkn;  char * e;  tkn = new_token(TKN_NUMBER);  tkn->value.type   = V_NUM;  tkn->value.number = strtoul(text, &e, 16);  if ((e == text) || (*e != 0)) {    fprintf(stderr, "error at %s:%d: can't scan hex number \"%s\"\n",            infile, lineno, text);    exit(1);  }  #if DEBUG  fprintf(stderr, "HEXNUMBER(%g)\n", tkn->value.number);#endif  return tkn;}TOKEN * string(char * text){  struct token_t * tkn;  int len;  tkn = new_token(TKN_STRING);  len = strlen(text);  tkn->value.type   = V_STR;  tkn->value.string = (char *) malloc(len+1);  if (tkn->value.string == NULL) {    fprintf(stderr, "id(): out of memory\n");    exit(1);  }  strcpy(tkn->value.string, text);#if DEBUG  fprintf(stderr, "STRING(%s)\n", tkn->value.string);#endif  return tkn;}TOKEN * id(char * text){  struct token_t * tkn;  int len;  tkn = new_token(TKN_ID);  len = strlen(text);  tkn->value.type   = V_STR;  tkn->value.string = (char *) malloc(len+1);  if (tkn->value.string == NULL) {    fprintf(stderr, "id(): out of memory\n");    exit(1);  }  strcpy(tkn->value.string, text);#if DEBUG  fprintf(stderr, "ID(%s)\n", tkn->value.string);#endif  return tkn;}TOKEN * keyword(int primary){  struct token_t * tkn;  tkn = new_token(primary);  return tkn;}void print_token(TOKEN * tkn){  if (!tkn)    return;  fprintf(stderr, "token = %d = ", tkn->primary);  switch (tkn->primary) {    case TKN_NUMBER:       fprintf(stderr, "NUMBER, value=%g", tkn->value.number);       break;    case TKN_STRING:       fprintf(stderr, "STRING, value=%s", tkn->value.string);       break;    case TKN_ID:        fprintf(stderr, "ID,     value=%s", tkn->value.string);       break;    default:           fprintf(stderr, "<other>");       break;  }  fprintf(stderr, "\n");}void pyytext(void){#if DEBUG  extern char * yytext;  fprintf(stderr, "TOKEN: \"%s\"\n", yytext);#endif}char * dup_string(char * str){  char * s;  s = strdup(str);  if (s == NULL) {    fprintf(stderr, "dup_string(): out of memory\n");    exit(1);  }  return s;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -