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

📄 rwconf.c

📁 minicom2.0源代码
💻 C
字号:
/* * rwconf.c	Routines to deal with ASCII configuration files. * *		This file is part of the minicom communications package, *		Copyright 1991-1996 Miquel van Smoorenburg. * *		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. * *	When adding options, remember to add them here in the mpars structure *	AND to the macro definitions in configsym.h. * * // fmg 12/20/93 - kludged in color "support" (hey, it works) * // fmg 2/15/94 - added 9 x MAC_LEN char macros for F1 to F10 which can be *                  save to a specified file so that old defaults file *                  works with these patches. TODO: make these alloc *                  memory dynamically... it's nice to have a 15K macro *                  _WHEN_ it's being (not like now with -DMAC_LEN) :-) * // jl  23.06.97 - changed mdropdtr to numeric * // jl  04.09.97 - conversion table filename added to mpars table * // jl  22.02.98 - file selection window setting added to mpars table * // acme 26.02.98 - i18n * // acme 18.03.98 - more i18n * // jl  05.04.98 - added the multifile parameter for transfer protocols *    jl  06.07.98 - added option P_CONVCAP *    jl  28.11.98 - added P_SHOWSPD *    jl  05.04.99 - logging options *    er  18-Apr-99 - added P_MULTILINE for "multiline" *    jl  10.02.2000 - added P_STOPB */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "rcsid.h"RCSID("$Id: rwconf.c,v 1.6 2000/06/02 21:33:22 walker Exp $")#include "port.h"#include "minicom.h"#include "intl.h"#define ADM_CHANGE	1#define USR_CHANGE	2#if _HAVE_MACROS/* fmg macros stuff */#define MAX_MACS        10       /* fmg - header files? what's that... */struct macs mmacs[] = {  { "",       PUBLIC,   "pmac1" },  { "",       PUBLIC,   "pmac2" },  { "",       PUBLIC,   "pmac3" },  { "",       PUBLIC,   "pmac4" },  { "",       PUBLIC,   "pmac5" },  { "",       PUBLIC,   "pmac6" },  { "",       PUBLIC,   "pmac7" },  { "",       PUBLIC,   "pmac8" },  { "",       PUBLIC,   "pmac9" },  { "",       PUBLIC,   "pmac10" },  /* That's all folks */  { "",                 0,         (char *)NULL },};#endifstruct pars mpars[] = {  /* Protocols */  /* Warning: minicom assumes the first 12 entries are these proto's ! */  { "YUNYYzmodem",	PUBLIC,   "pname1" },  { "YUNYYymodem",	PUBLIC,   "pname2" },  { "YUNYNxmodem",	PUBLIC,   "pname3" },  { "NDNYYzmodem",	PUBLIC,   "pname4" },  { "NDNYYymodem",	PUBLIC,   "pname5" },  { "YDNYNxmodem",	PUBLIC,   "pname6" },  { "YUYNNkermit",	PUBLIC,   "pname7" },  { "NDYNNkermit",	PUBLIC,   "pname8" },  { "YUNYNascii",	PUBLIC,   "pname9" },  { "",			PUBLIC,   "pname10" },  { "",			PUBLIC,   "pname11" },  { "",			PUBLIC,   "pname12" },#ifdef __linux__  { "/usr/bin/sz -vv -b",	PUBLIC,   "pprog1" },  { "/usr/bin/sb -vv",		PUBLIC,   "pprog2" },  { "/usr/bin/sx -vv",		PUBLIC,   "pprog3" },  { "/usr/bin/rz -vv -b -E",	PUBLIC,   "pprog4" },  { "/usr/bin/rb -vv",		PUBLIC,   "pprog5" },  { "/usr/bin/rx -vv",		PUBLIC,   "pprog6" },  { "/usr/bin/kermit -i -l %l -s", PUBLIC, "pprog7" },  { "/usr/bin/kermit -i -l %l -r", PUBLIC, "pprog8" },#else  /* Most sites have this in /usr/local, except Linux. */  { "/usr/local/bin/sz -vv",	PUBLIC,   "pprog1" },  { "/usr/local/bin/sb -vv",	PUBLIC,   "pprog2" },  { "/usr/local/bin/sx -vv",	PUBLIC,   "pprog3" },  { "/usr/local/bin/rz -vv",	PUBLIC,   "pprog4" },  { "/usr/local/bin/rb -vv",	PUBLIC,   "pprog5" },  { "/usr/local/bin/rx -vv",	PUBLIC,   "pprog6" },  { "/usr/local/bin/kermit -i -l %l -s", PUBLIC, "pprog7" },  { "/usr/local/bin/kermit -i -l %l -r", PUBLIC, "pprog8" },#endif  { "/usr/bin/ascii-xfr -dsv", PUBLIC,   "pprog9" },  { "",			PUBLIC,   "pprog10" },  { "",			PUBLIC,   "pprog11" },  { "",			PUBLIC,   "pprog12" },  /* Serial port & friends */  { DFL_PORT,		PRIVATE,  "port" },  { CALLIN,		PRIVATE,  "callin" },  { CALLOUT,		PRIVATE,  "callout" },  { UUCPLOCK,		PRIVATE,  "lock" },  { DEF_BAUD,		PUBLIC,   "baudrate" },  { "8",		PUBLIC,   "bits" },  { "N",		PUBLIC,   "parity" },  { "1",		PUBLIC,   "stopbits" },  /* Kermit the frog */  { KERMIT,		PRIVATE,  "kermit" },  { N_("Yes"),		PRIVATE,  "kermallow" },  { N_("No"),		PRIVATE,  "kermreal" },  { "3",		PUBLIC,   "colusage" },  /* The script program */  { "runscript",	PUBLIC,   "scriptprog" },  /* Modem parameters */  { "~^M~AT S7=45 S0=0 L1 V1 X4 &c1 E1 Q0^M",   PUBLIC,   "minit" },  { "^M~ATZ^M~",	PUBLIC,   "mreset" },  { "ATDT",		PUBLIC,   "mdialpre" },  { "^M",		PUBLIC,   "mdialsuf" },  { "ATDP",		PUBLIC,   "mdialpre2" },  { "^M",		PUBLIC,   "mdialsuf2" },  { "ATX1DT",		PUBLIC,   "mdialpre3" },  { ";X4D^M",		PUBLIC,   "mdialsuf3" },  { "CONNECT",		PUBLIC,   "mconnect" },  { "NO CARRIER",	PUBLIC,   "mnocon1" },  { "BUSY",		PUBLIC,   "mnocon2" },  { "NO DIALTONE",	PUBLIC,   "mnocon3" },  { "VOICE",		PUBLIC,   "mnocon4" },  { "~~+++~~ATH^M",	PUBLIC,   "mhangup" },  { "^M",		PUBLIC,   "mdialcan" },  { "45",		PUBLIC,   "mdialtime" },  { "2",		PUBLIC,   "mrdelay" },  { "10",		PUBLIC,   "mretries" },  { "1",		PUBLIC,   "mdropdtr" },   /* jl 23.06.97 */  { "No",		PUBLIC,   "mautobaud" },  { "d",		PUBLIC,   "showspeed" },  /* d=DTE, l=line speed */  { "",			PUBLIC,   "updir" },  { "",			PUBLIC,   "downdir" },  { "",			PUBLIC,   "scriptdir" },  { "^A",		PUBLIC,   "escape-key" },  { "BS",		PUBLIC,   "backspace" },  { N_("enabled"),	PUBLIC,   "statusline" },  { N_("Yes"),		PUBLIC,   "hasdcd" },  { N_("Yes"),		PUBLIC,   "rtscts" },  { N_("No"),		PUBLIC,   "xonxoff" },  { "D",		PUBLIC,   "zauto" },  /* fmg 1/11/94 colors */  /* MARK updated 02/17/95 to be more like TELIX. After all its configurable */  { "YELLOW",           PUBLIC,   "mfcolor" },  { "BLUE",             PUBLIC,   "mbcolor" },  { "WHITE",            PUBLIC,   "tfcolor" },  { "BLACK",            PUBLIC,   "tbcolor" },  { "WHITE",            PUBLIC,   "sfcolor" },  { "RED",              PUBLIC,   "sbcolor" },  /* fmg 2/20/94 macros */  { ".macros",          PUBLIC,   "macros" },  { "",                 PUBLIC,   "changed" },  { "Yes",		PUBLIC,   "macenab" },  /* Continue here with new stuff. */  { "Yes",		PUBLIC,   "sound"  },  /* MARK updated 02/17/95 - History buffer size */  { "2000",             PUBLIC,   "histlines" },  /* Character conversion table - jl / 04.09.97 */  { "",                	PUBLIC,    "convf" },  { "Yes",		PUBLIC,	   "convcap" },  /* Do you want to use the filename selection window? */  { "Yes",		PUBLIC,	   "fselw" },  /* Do you want to be prompted for the download directory? */  { "No",		PUBLIC,    "askdndir" },  /* Logfile options - jl 05.04.99 */#ifdef LOGFILE  { LOGFILE,		PUBLIC,    "logfname" },#else  { "/dev/null",       	PUBLIC,    "logfname" },#endif  { "Yes",		PUBLIC,    "logconn" },  { "Yes",		PUBLIC,    "logxfer" },  { "No", 		PUBLIC,    "multiline"},  /* That's all folks */  { "",                 0,         (char *)NULL },}; #if _HAVE_MACROS/* * fmg - Write the macros to a file. */int writemacs(fp, all)FILE *fp;int all;{  struct macs *m;  for(m = mmacs; m->desc; m++)        if ((all && (m->flags & ADM_CHANGE))        || ((m->flags & PUBLIC) && (m->flags & USR_CHANGE)))                fprintf(fp, "%s %-16.16s %s\n", m->flags &                        PUBLIC ? "pu" : "pr", m->desc, m->value);  return(0);}#endif/* * Write the parameters to a file. */int writepars(fp, all)FILE *fp;int all;{  struct pars *p;  if (all)	fprintf(fp, _("# Machine-generated file - use \"minicom -s\" to change parameters.\n"));  else	fprintf(fp, _("# Machine-generated file - use setup menu in minicom to change parameters.\n"));  for(p = mpars; p->desc; p++)  	if ((all && (p->flags & ADM_CHANGE)) ||  	   ((p->flags & PUBLIC) && (p->flags & USR_CHANGE)))  		fprintf(fp, "%s %-16.16s %s\n",  			p->flags & PUBLIC ? "pu" : "pr", p->desc, p->value);  return(0);}/* * Read the parameters from a file. */int readpars(fp, init)FILE *fp;int init;{  struct pars *p;  char line[80];  char *s;  int public;  int dosleep = 0;  if (init) strcpy(P_SCRIPTPROG, "runscript");  while(fgets(line, 80, fp) != (char *)0) {  	s = strtok(line, "\n\t ");	if (s == NULL) continue;  	/* Here we have pr for private and pu for public */  	public = -1;  	if (strcmp(s, "pr") == 0) {  		public = 0;  		s = strtok((char *)NULL, "\n\t ");  	}  	if (strcmp(line, "pu") == 0) {  		public = 1;  		s = strtok((char *)NULL, "\n\t ");  	}	if (s == NULL || public < 0) continue;  	/* Don't read private entries if prohibited */  	if (!init && public == 0) continue;  	for(p = mpars; p->desc != (char *)0; p++) {  		if (strcmp(p->desc, s) == 0) {			/* See if this makes sense. */			if (((p->flags & PRIVATE) && public) ||			    ((p->flags & PUBLIC)  && !public)) {				fprintf(stderr,			_("** Parameter %s is %s, but is marked %s in %s config file\n"),					s,					(p->flags & PRIVATE) ? _("private") : _("public"),					public ? _("public") : _("private"),					init ? _("global") : _("personal"));				dosleep = 1;			}			/* See if user is allowed to change this flag. */			if ((p->flags & PRIVATE) && public == 1) {				fprintf(stderr,		       _("== Attempt to change private parameter %s - denied.\n"),					p->desc);				dosleep = 1;				continue;			}  			/* Set value */  			if ((s = strtok((char *)NULL, "\n")) == (char *)0)  				s = "";  			while(*s && (*s == '\t' || *s == ' ')) s++;			/* We must be prepared for config files saved before			   the P_MUL parameter was added. So, we make room			   for P_MUL if necessary - jl 5.4.98 */			if (!strncmp(p->desc,"pname",(size_t) 5)) {			  if (s[4] != 'N' && s[4] != 'Y') {			    memmove (s+5, s+4, strlen(s+4));			    *(s+4)='N';			  }			}  			/* If the same as default, don't mark as changed */  			if (strcmp(p->value, s) == 0) {  				p->flags = 0;  			} else {				if (init)					p->flags |= ADM_CHANGE;				else					p->flags |= USR_CHANGE;  				strcpy(p->value, s);  			}#if 0 /* Ehm. This makes no sense, Mike. */  			/* Set flags */  			p->flags |= (public ? PUBLIC : PRIVATE);  			p->flags &= ~(public ? PRIVATE : PUBLIC);#endif  			break;  		}  	}  }  /* To get over a bug in minicom 1.60 :( */  if (strcmp(P_BAUDRATE, "Curr") == 0) strcpy(P_BAUDRATE, "38400");  if (dosleep) sleep(3);  return(0);}#if _HAVE_MACROS/* * fmg - Read the macros from a file. */int readmacs(fp, init)FILE *fp;int init;{  struct        macs *m;  char          line[MAC_LEN];  int           public, max_macs=MAX_MACS+1;  char          *s;  while(fgets(line, MAC_LEN, fp) != (char *)0 && max_macs--) {        s = strtok(line, "\n\t ");        /* Here we have pr for private and pu for public */        public = 0;        if (strcmp(s, "pr") == 0) {                public = 0;                s = strtok((char *)NULL, "\n\t ");        }        if (strcmp(line, "pu") == 0) {                public = 1;                s = strtok((char *)NULL, "\n\t ");        }        /* Don't read private entries if prohibited */        if (!init && public == 0) continue;        for(m = mmacs; m->desc != (char *)0; m++) {                if (strcmp(m->desc, s) == 0) {                                ;                        /* Set value */                        if ((s = strtok((char *)NULL, "\n")) == (char *)0)                                s = "";                        while(*s && (*s == '\t' || *s == ' ')) s++;                        /* If the same as default, don't mark as changed */                        if (strcmp(m->value, s) == 0) {                                m->flags = 0;                        } else {                                if (init)                                        m->flags |= ADM_CHANGE;                                else                                        m->flags |= USR_CHANGE;                                strcpy(m->value, s);                        }#if 0                        /* Set flags */                        m->flags |= (public ? PUBLIC : PRIVATE);#endif                        break;                }        }  }  return(0);}#endif

⌨️ 快捷键说明

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