📄 config.c
字号:
/* * This file is part of the Minicom Communications Program, * written by Miquel van Smoorenburg 1991/1992/1993. */#include <sys/types.h>#if defined _POSIX_SOURCE || defined(_BSD43)# include <unistd.h># include <stdlib.h>#endif#ifdef _MINIX# undef NULL /* Kludge */#endif#include <stdio.h>#include <setjmp.h>#ifdef _MINIX# undef NULL /* Kludge */#endif#include <string.h>#if defined (_MINIX) && !defined(NULL)# define NULL ((void *)0) /* Kludge */#endif#include <sys/stat.h>#if defined(_BSD43) || defined (_SYSV)# define NOSTREAMS# include <sys/file.h>#endif#include <ctype.h>#include "window.h"#include "minicom.h"#include "configsym.h"#include "keyboard.h"#include "vt100.h"/* * Configure minicom. *//* * Read in parameters. */void read_parms(){ FILE *fp; int f; char buf[64]; char *p; /* Read global parameters */ if ((fp = fopen(parfile, "r")) == (FILE *)NULL) { if (real_uid == 0) { fprintf(stderr, "minicom: WARNING: configuration file not found, using defaults\n"); sleep(1);#ifdef _ACK /* Initialize structure by hand */ readpars((FILE *)NULL, 1);#endif return; } fprintf(stderr, "minicom: there is no global configuration file %s\n", parfile); fprintf(stderr, "Ask your sysadm to create one (with minicom -s).\n"); exit(1); } readpars(fp, 1); fclose(fp); /* Read personal parameters */ if ((fp = fopen(pparfile, "r")) != (FILE *)NULL) { readpars(fp, 0); fclose(fp); } /* This code is to use old configuration files. */ for(f = PROTO_BASE; f < MAXPROTO; f++) { if (P_PNAME(f)[0] && P_PIORED(f) != 'Y' && P_PIORED(f) != 'N') { strcpy(buf, P_PNAME(f) - 2); strcpy(P_PNAME(f), buf); P_PIORED(f) = 'Y'; P_PFULL(f) = 'N'; } } p = basename(P_LOCK); if (strncmp(p, "LCK", 3) == 0) *p = 0;}/* * See if we have write access to a file. * If it is not there, see if the directory is writable. */int waccess(s)char *s;{ char *p; char buf[128]; struct stat stt; /* We use stat instead of access(s, F_OK) because I couldn't get * that to work under BSD 4.3 ... */ if (stat(s, &stt) == 0) { if (access(s, W_OK) == 0) return(A_OK_EXIST); return(-1); } strcpy(buf, s); if((p = strrchr(buf, '/')) == (char *)NULL) strcpy(buf, "."); else *p = '\0'; if (access(buf, W_OK) == 0) return(A_OK_NOTEXIST); return(-1);}/* * Read in a string, but first check to see if it's * allowed to do so. */static void pgets(w, x, y, s, len, maxl)WIN *w;int x, y;char *s;int len;int maxl;{ struct pars *p = (struct pars *)s; if ((p->flags & PRIVATE) && real_uid != 0) { werror("You are not allowed to change this parameter"); return; } wlocate(w, x, y); (void) wgets(w, s, len, maxl); p->flags |= CHANGED;}/* * Mark a variable as changed. */static void markch(s)char *s;{ struct pars *p = (struct pars *)s; p->flags |= CHANGED;}/* * Set a string to a given value, but only if we're allowed to. */static void psets(s, w)char *s, *w;{ struct pars *p = (struct pars *)s; if ((p->flags & PRIVATE) && real_uid != 0) { werror("You are not allowed to change this parameter"); return; } strcpy(s, w); p->flags |= CHANGED;}/* * Get a a character from the keyboard. Translate lower * to uppercase and '\r' to '\n'. */static int rgetch(){ int c; c = getch(); if (islower(c)) c = toupper(c); if (c == '\n' || c == '\r' || c == '\033') return('\n'); return(c);}static void dopath(){ WIN *w; int c; w = wopen(5, 5, 75, 11, BDOUBLE, stdattr, MFG, MBG, 0, 0, 1); wprintf(w, " A - Download directory : %.44s\n", P_DOWNDIR); wprintf(w, " B - Upload directory : %.44s\n", P_UPDIR); wprintf(w, " C - Script directory : %.44s\n", P_SCRIPTDIR); wprintf(w, " D - Script program : %.44s\n", P_SCRIPTPROG); wprintf(w, " E - Kermit program : %.44s\n", P_KERMIT); wlocate(w, 4, 7); wputs(w, "Change which setting? "); wredraw(w, 1); while(1) { wlocate(w, 26, 7); c = rgetch(); switch(c) { case '\n': wclose(w, 1); return; case 'A': pgets(w, 26, 0, P_DOWNDIR, 64, 64); break; case 'B': pgets(w, 26, 1, P_UPDIR, 64, 64); break; case 'C': pgets(w, 26, 2, P_SCRIPTDIR, 64, 64); break; case 'D': pgets(w, 26, 3, P_SCRIPTPROG, 64, 64); break; case 'E': pgets(w, 30, 0, P_KERMIT, 64, 64); break; default: break; } }}char *yesno(k)int k;{ return(k ? "Yes" : "No ");}/* * Input the definition of an up/download protocol. */static void inputproto(w, n)WIN *w;int n;{ int c = 0; mpars[PROTO_BASE + n].flags |= CHANGED; if (P_PNAME(n)[0] == '\0') { P_PNN(n) = 'Y'; P_PUD(n) = 'U'; P_PFULL(n) = 'N'; P_PPROG(n)[0] = 0; P_PIORED(n) = 'Y'; wlocate(w, 4, n+1); wputs(w, " "); } wlocate(w, 4, n+1); (void ) wgets(w, P_PNAME(n), 10, 64); pgets(w, 15, n+1, P_PPROG(n), 31, 64); do { wlocate(w, 48, n+1); wprintf(w, "%c", P_PNN(n)); c = rgetch(); if (c == 'Y') P_PNN(n) = 'Y'; if (c == 'N') P_PNN(n) = 'N'; } while(c != '\r' && c != '\n'); do { wlocate(w, 56, n+1); wprintf(w, "%c", P_PUD(n)); c = rgetch(); if (c == 'U') P_PUD(n) = 'U'; if (c == 'D') P_PUD(n) = 'D'; } while(c != '\r' && c != '\n'); do { wlocate(w, 64, n+1); wprintf(w, "%c", P_PFULL(n)); c = rgetch(); if (c == 'Y') P_PFULL(n) = 'Y'; if (c == 'N') P_PFULL(n) = 'N'; } while(c != '\r' && c != '\n'); do { wlocate(w, 72, n+1); wprintf(w, "%c", P_PIORED(n)); c = rgetch(); if (c == 'Y') P_PIORED(n) = 'Y'; if (c == 'N') P_PIORED(n) = 'N'; } while(c != '\r' && c != '\n');}static void doproto(){ WIN *w; int f, c; w = wopen(1, 4, 78, 18, BDOUBLE, stdattr, MFG, MBG, 0, 0, 1); wputs(w, " Name Program"); wlocate(w, 44, 0); wputs(w, "Need name Up/Down FullScr IO-Red."); for(f = 0; f < 12; f++) { wlocate(w, 1, f+1); if (P_PNAME(f)[0]) wprintf(w, "%c %-10.10s %-31.31s %c %c %c %c", 'A' + f, P_PNAME(f), P_PPROG(f), P_PNN(f), P_PUD(f), P_PFULL(f), P_PIORED(f)); else wprintf(w, "%c -", 'A' + f); } wlocate(w, 3, 14); wputs(w, "Change which setting? (SPACE to delete) "); wredraw(w, 1); do { wlocate(w, 43, 14); c = rgetch(); if (c >= 'A' && c <= 'L') inputproto(w, c - 'A'); if (c == ' ') { wlocate(w, 3, 14); wputs(w, "Delete which protocol? "); wclreol(w); c = rgetch(); if (c >= 'A' && c <= 'L') { P_PNAME(c - 'A')[0] = '\0'; mpars[PROTO_BASE + (c - 'A')].flags |= CHANGED; wlocate(w, 3, c - 'A' + 1); wclreol(w); wputs(w, " -"); } wlocate(w, 3, 14); wputs(w, "Change which setting? (SPACE to delete) "); c = ' '; } } while(c != '\n'); wclose(w, 1);}static void doserial(){ WIN *w; w = wopen(5, 5, 75, 11, BDOUBLE, stdattr, MFG, MBG, 0, 0, 1); wprintf(w, " A - Serial Device : %.46s\n", P_PORT); wprintf(w, " B - Lockfile Location: %.46s\n", P_LOCK); wprintf(w, " C - Callin Program : %.46s\n", P_CALLIN); wprintf(w, " D - Callout Program : %.46s\n", P_CALLOUT); wprintf(w, " E - Baud/Par/Bits : %s %s%s1\n", P_BAUDRATE, P_BITS, P_PARITY); wlocate(w, 4, 6); wputs(w, "Change which setting? "); wredraw(w, 1); while(1) { wlocate(w, 26, 6); switch(rgetch()) { case '\n': wclose(w, 1); return; case 'A': pgets(w, 24, 0, P_PORT, 64, 64); break; case 'B': pgets(w, 24, 1, P_LOCK, 64, 64); break; case 'C': pgets(w, 24, 2, P_CALLIN, 64, 64); break; case 'D': pgets(w, 24, 3, P_CALLOUT, 64, 64); break; case 'E': get_bbp(P_BAUDRATE, P_BITS, P_PARITY); if (portfd >= 0) m_setparms(portfd, P_BAUDRATE, P_PARITY, P_BITS); wlocate(w, 24, 4); wprintf(w, "%s %s%s1 \n", P_BAUDRATE, P_BITS, P_PARITY); if (st != NIL_WIN) mode_status(); markch(P_BAUDRATE); markch(P_BITS); markch(P_PARITY); break; default: break; } }}static void domodem(){ WIN *w; char *str; int c, x, y, ypos, maxl; w = wopen(2, 2, 77, 21, BDOUBLE, stdattr, MFG, MBG, 0, 0, 1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -