From 591dbd09fa6d7bf008fcce916c36fe7f8d88071c Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Sat, 8 Oct 2005 19:16:27 +0000 Subject: [PATCH] In tty setup the network records are automatic removed --- ChangeLog | 2 + html/Makefile | 2 +- html/images/tty.png | Bin 7422 -> 10755 bytes html/images/tty1.png | Bin 6982 -> 12090 bytes html/images/tty2.png | Bin 6770 -> 11771 bytes html/images/tty3.png | Bin 6633 -> 0 bytes html/setup/ttyinfo.html | 20 +- lib/mbselib.h | 2 +- mbsetup/ledit.c | 56 ++-- mbsetup/m_tty.c | 636 ++++++++++++++++++++-------------------- 10 files changed, 366 insertions(+), 352 deletions(-) delete mode 100644 html/images/tty3.png diff --git a/ChangeLog b/ChangeLog index 056ff0f6..aa643a01 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,6 +23,8 @@ v0.81.0 07-Oct-2005 mbsetup: Removed settings for users screenlength. + In tty setup the network records are automatic removed. The + setting for auth log is removed (was never used). lang: Removed prompts 64, 80 and 81. Changed prompt 348. diff --git a/html/Makefile b/html/Makefile index 02348882..885e9aae 100644 --- a/html/Makefile +++ b/html/Makefile @@ -25,7 +25,7 @@ H_IMAGES = images/b_arrow.png images/magic.png images/nodes1.png \ images/filefind.png images/nodelist1.png images/tty.png \ images/files.png images/nodelist2.png images/tty1.png \ images/go_to.png images/nodelist3.png images/tty2.png \ - images/hatch.png images/nodelist4.png images/tty3.png \ + images/hatch.png images/nodelist4.png \ images/language.png images/nodelist5.png images/uarrow.png \ images/larrow.png images/users.png images/doors2.png \ images/mbse.png images/taskmgr.png images/mbsebbs-s.png \ diff --git a/html/images/tty.png b/html/images/tty.png index e2ba6d7ea0bb6fa05f995bf15d39152921ba2671..04c589f524263c60ec73c1adf341be0424912a1b 100644 GIT binary patch literal 10755 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 literal 7422 zcmcI}c{o(>-~XL$d@M~dnxs&nVeBQPXq0J;Er+pY3uA4wmbIApU_q1o`&y z0RRMvx;iERa6ka;@ZsfT|01iHZvX%%Fg76J*@pmp1YjM|KZ4)jNy-!ULC-+X@YwMB zZ?OJ*9k_yz?%1D2C+TQ3l9v}(!%XAaN@0WS_XSl(f3 zpwU~jApTTYisx4wq!VIunuBtak%}K0&iC6oGc`+7Po)cAqzu53S)7+IENuXzyPc; zz_Akp4ge4U!2U_j5&(^V?@A4GGBAK83`*APd{^+?ti8BeUJUj0WG_HV0$}L?RtSKF z1+}>PB`|6SI0XQX7i8d0_%fCS9v!Cl?nO!>a5x;%l9OWv;8=jO7Pt-9F)+(4VOA|~ zZ4iqim<4!QV0M`II%cncFalT#01Z08BH4K^IPfx#>}3ffYI$+Iz5)xrboBrvPLYkh zz$Bof0g}jt;Q*63faV0eD;Nx8a*~Bc*Yff%aJezSG7GS3*<*q^1tt#zG~&s^0%K*4 z#X{HC^49y+RShg7I9a^xd{#IXm_Qv3z;#Kmau~1>fJhrJ1w^_(R zcVRIpsa=*1M||4njy-5I9pJq$a>EKNkh$xkCGa6Th8ra?d~Z4MJM1$s!~7`j;4tcK zC1cb=BLV9Fln_|q52|=>`L7-x`}v}PcI-82*yyot1`RDOT(?|CawOxodT)K?J}-VK z;6z?6D`9MCbn9?q8mKySYso&eB!-WgPoqDdJk2O>mX&jT{Iwv@&}NwNQH0T`DFBhi zZ*Pi}vbOPAD+Yhzt9LqU385PIoIe0>9-j70|2pzpMpljp?848%E&8p+x1#RR3L6L^ zAtI;Ai2+jeTvv-(~BnpsadN4JbAX?bo3kllGI z1(fXgSB9A8O9b^cmITd+S-9T%$zLVT&i8pXO$-R)pt{5gYFE1R^z7Qx4*{W* zmRnNT<;CJyxvsI{v<97n2Nm#&n~T}cwBCKN|9FuR_vAv$_F}zH=mMp=68Vy@zl?owv=a8=^X~m_u&oYtLSLy5+^_F$ALVInaRkm5M}(8 z+8C07uNpoC1H*86Jc{unlV*=)^{qE$!z(sgD%r~j&BS=o$B!3lilhugml`bd%=04R zLv^92VWU+CL+Op8=k`)hOn)ifs2@u;mx;dzLC0*f-( zGVUnsV37mL=Ulx5X6j#S1xH$&A$MR{L+WvGwsHx185|^w2(e35IhPOVOu^= zDV}tHPe?Vb876)(jN$sOZ+!mA+Y=@(iPWWlZ}!kCzEu}b#Fyn~Hb~JM{gmkZaIDKS zlD+g1r%J_EE;58NoGhfp|3-`83uvq4^TnZx_R~?`liz>D!3l*7uA%dfKT|yO%gz~( zoqcE@Ed6(}XSK7%qRfFfQr+WhRiR@2#PrU2X@x3TwY%gl6#i$YH#*yASKUQu4O%T` zi)uP^@NTX&QxWlyhsWSRr7t8m3ikxH4!RnyBH@D?;3Zb zq}L|9pg_yo38^@ix$ZiEhZfQG1hem!hR|dsv-$#*{>@V}n`7%8jFhn5OC&#k*K7jA zLi6>u?+H=M1Dd8BR+nDDdS*`X{B5C@Q2(jr{3G(u8-gQ$v|g)gEE~x$D{Shx(URKV z)I%{XWEjBIbDo2m!-__I_QSECMWpx3zvR9GdsKFPjl7T?VGc z^u{&q+Ubtn22zg{DeB)KC}xJ4R6TPnv1CT^a`;p$<0huEt1@2XTlM?NeL<3QS{n`G zaa6$plvz!oMY4*X#OBkn_yYd9cfMZ(?Ugo4CL+w{x-qRwSPs0O=^6w|pk?;g4hgo2 zM|0HF5q8)QXWmv?fa=ieY;O-nEpTh`t#kaZo=(;Bu(jBtw>NK*tsFZhuB{9#e=m+z z9WBa#<@e1Kk@IyTGwuD0v;lh^{1+dhce3isJFd606!jCM<)U+KAuNg!>bpT(x|t1A zeXNL3{$~aCHh{NHH3Za#+fATJ#x#`+j{Vn5GjUVbfZm{^{o_O#c{x{+{+9D0eT zFw+_(t(#X8hv*(t)ylg<-l^ECA|bu=Dur56$fzSvevgjb^OZ^bL2j41W|?r~#H6YO zTygAeAtJawMDu@uNn(_iT*`L~Ws04ISt223=N-u${)k{fzwxNE=eo{yVq;BF6=G*g zdl@Klr9j44f@q-7oi**4lZv%IQJBOj)_l!DGX(4Pu!AG15Ow8_6!! zxJ|UeZaMCbZG~8?$=^NBi96mFW}0X&NEB1W2k*%QZodgxIA`zyOC{Qo50EWLE*y^X z_4$VWqIE!`^g3C7Earq5AIz7uBe!sTB4N$E^J?DdQ>LVQwmif0nU?5qXU?>PcmB3l zl=ZNpjqZ^@f?{2T^%7E>pZOYj7Po@)Oj^ZX>i93Qc>GW7x`jDO8Kd`P;+M41TxdZy z?Yu<1`u+SDNv~a!W8_~whfwha^yT;n<3=LP=M87w3Zv;@l~ML4Pu-?z#kM@3Co*HP zo$i_py7%+|_macwguiJe;>Ov))s@&F!!J^0*kF z*hXGosIgPtZ`BlhsHrkF>;Zp*j#Hla17?UOrlo81lF`WJO378Q9^S(_tUnQ=*?Prm z@pg@>#j@z9Us2(u<%C=dDO;WdRe}4Od);FcCCJtmJStzE@kLv8UVG()P-ZO-o_>kc z$bDI@1V5}^#e}BTszW$cUSum1E-uU@o%>aUa4e85LX28?mBJ-Glw#^l)_@~YaXeE` zP_9w@Zf|yj`2AXWnnm2~*GNa6}NHt*sc!*AnEH44o_YR1yaeEg?%+jmuqAk-Q&aB3qXpYXRFeC79p z_r{OjAolS!PsggNzdGf5cy5i+$(2X#kx9*=j)c7x^bL-zlUO_lF|qlhx8fKagR@Z5Vui?JUUx+^NAeg_aVg| zY5Yc$xWJmpm1$ZXvNLu*X#DKIKtF>XE_C-ILroFQ%iC^)Et;JDSh1Ijy+qKO|6{_tPdrDN3 zT??pj4`sIaFHIVgm>PP;tt5PJdeA~}o8Yq#;&)GZR{n}?6gOD+7kTkzuKnCah>6=hoZ#{wcB;B!*hJyAt4Z7Ol`Swsqai#)1Ac1uA`?*>><)z#Xo?)aoNer ze7|Ywl&ap3W0tlT`%2xE;WLK2qEUGqB=kg7eIVVsVvp z%NjkmH2Q-$DtY>RHT81(@i;+ZEVD`c{xRK&w17r7VOx~kt(=^YgW6EmI+ZHmpOlMP z4$;h{-kb@ms@W$NWb9EO#(=r-W`gBoEg!dT`OMTCQ}#2Bid=X*oV_-kzKe+kU9Y~T zxDfs5>c`7z{cRa<$@i#=8>x_Q+nB9re2pKx$3}M+Qh9-RWXa^`A_h!l_REp z7=Ls^~=gU@Ub_r<%~ZeF74nvfI%Y)!^_R-LDwu_~2chWr$h zVtO6llLpJp>z#7U{Uu=*7t(HXB|vsHBZJ1)$WfVU54_`yc5jTz;rZG69?CNwFZPX% zJrqf2F^M4M>&rRM*&uc;gj7qbYmcUtJ10KlNn#FgT0xV7iJeJ5$`MxTrY}5T)n0NM zHBxI0H!GSJWUMbfo5*C1{|T4GmIC7`KRaEIkHMh=NmP%Gn+m3`)kW=^mL=_cX+asH zn@xR2pD@amizsIh%b(+ac*vU|By*1 zCt41FC2L&a%3RaC^|X!cewX!KUl(CFA+G}>E-y2~0}hm8^Y*pHCS`cF+Z4ANQ+%5U z3VENo$(Y)PHHs55o6EZk8;deKDmCxoVP**VRSKxxy%mg_euqyBQYJu+u#QCOF}ar6 za>Q4Z+VNFfOPMU}f1n5f7e=`l4=jEA7tnWMY;cMoS@ z|EC_x2xEA~5Ee`(#T?tjb4-N~kJ?Umyj38<)zP1jcnu0*MA^PtFsLlJ-V<)sqa zOd+o`E+rWPB9m}O!S5&3J)!+g9l3wq+JD=7=46UDa;1k;<^AfS*q$H`Y_h;u(P$74Vh)B9rWgcrwM6aEBeXq zU-<;V*l(xq&DGkPoz{-8XQq(%vIZz<^Un8|i=Jwmp~X8v83-c0@Vqs4HtBa$}M+$ukFJ(m9?J;q&jnceN| z@_6ucTw{XLL-Bbsdvg3w)!}zU-d0NO4lHC0P()1)st>s%ebse`S_T|TdcVG4-ni6h z6xp!|!9tOj1R~)vTR;D;#MIaG;=khUSl07*sovfAvLqW3kpv=KOd=V_2}w%MTpthm zz~hsWhgl9K8DE%W*YSCo261{%Y@Qhj*0fB3sq77ASLfl(V@j#Mibs<@%0-J1!U;kQ zb_KG2Onvx4+@MBk-*D!hg8THefIr4qFq~N-Qo8?v<_Rl^4cM+R0oIfca?fL`rTUP{ zD!bb;d(SR8JnQOdL9aSR;%~fGS#>DRkYTk&WS|q|RA{i?1Kng9%>*qX*X zPeKRJg(-_}p2Pk#^_)CJyeRl;TeKUZr^z>8-|U7avF_{KY<`E@8eu(P&EW?Lv+oKR zd-{IzYi1|IwM8d*=UvSchz4=sz*&T-OLUQFG*8qRF&`i6p}c$7oygi2vM)I{ z$=_VY+q>O=>lMd+{5`=G+>7YGYht7ix;@gES#jEiylb4!^LsuPq35UPYbW#%emN_A zSv2d%C;n3zH1Ad$_Z3J`eYp*G?8k4z`)*zGGlp0vW%K&#M2{6_dcb+xZQO>ClOu8* zGxax2-DXPHe1`UjFm_q1KAW3Qlg{#+S7NyzT~G^&(}oV}>s+PtwnrbToYt4C+Y&eX zrxlnf_##%Y`($G=GH9vQ#02GcE6Q}V=AlSx>Ce1r3?o3k(~%{R|8F|pRwU2J#C zu$b2GjPN6GOL%!GXn9!WYsnP`bA&LVgFA!$wQMc;bFphZqu*)>Ghvv<9a4w${%W`Y zX}%sjtzEiFyZKjHb(;yv5xI0I{R~foI9J!erB~CcWU%&F#gLvrCa&gXc~(ECVgg?t z=~8B2kaAW_p<0kVI)A&X-^Nw=l)`q41w@P|oO&Ou6|WH`&96{P@&| z>Cu~Zp%XP%_=2lWBeP{|N6QHX5ucKzhK{FSJ=3h+bz35X_SMUppwO;8v_0$Hi_Ahy z-g`23%J3}zLj*C~o_%(41-h3(lM2hGosNpxx=6!#a`+<^Zx3m}vQsL|zc`iT^kfap zJIl0Y>j|l!j3uPYW9LU@Z#6|y@p@!flZw6IN; zvVOsY<c?1Y{hL9|Zru))oLRlO3q3SV@^E7+z>X#%NuR+sD zM!0VB2Qk_H*RNh0$VNSWr1wCP#1y`tXx4uzyhcVVulnADUA?NoS6LkbZGuY~bD5#Z zWH;+%XVX@>>`kUpf^61FGiYtXE!M-LKc@wPs5mJ*ZKynY%CvKn3JW!5zvoIdoH6fY zuS|6Wqf!gSl{}Xe--I&FCU-%ki-p}))_zqt2uV`1hHsd>KQrIn+S$;@Eu0@)1RsB) zKH}q(c4INFbIS5ynL|fbyV=Id4M#fyG=He(a}lZO!MzL!V)PNQadFjfadO5<%Cp^3 zNTE+rgYs%&UB#sx2`&a&u&ka$Zr0(=x4prgwwuZ|1yqmYt;~WF1Ji!?0$Y0e(>Ol6 z8sxIZ)Z{szY3B#x8q;4qxXV7ZCCON2ws(6N->E7HkGwRvrDEj$6K3G}s#$`~_n(1f zM-4-+9=5^y_!(U&@Un03!%hsU?@>PwnQ}LJF8dl?*d@VTrTyPy(*Ip_ON!PDqvDPl zKw!VLStnnemk@r(Fz3HtuhhaCLE4DHsMm!j>iZYZJWjD+v*07JUuXhA#2e`poOKBQ EKj3M-$p8QV diff --git a/html/images/tty1.png b/html/images/tty1.png index aecf5500e947051c35c683778e5ca735174e84ab..6b0dc3e0b5d45af7f1be3f956e830cc6e1abd72e 100644 GIT binary patch literal 12090 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 Raic|mlAOA1rL_5{{{fKkt6Ts8 literal 6982 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 literal 6770 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 I%>Bmy00H7f6aWAK diff --git a/html/setup/ttyinfo.html b/html/setup/ttyinfo.html index 4ec1015d..c5a7b0b1 100644 --- a/html/setup/ttyinfo.html +++ b/html/setup/ttyinfo.html @@ -14,22 +14,20 @@
-
Last update 29-Dec-2001
+
Last update 08-Oct-2005

MBSE BBS Setup - TTY Lines.

Introduction.

-For each line your bbs has you must setup a tty line. This also includes -console lines (for local login), network lines for internet and lan connections -and X-terminal connections, ISDN lines, and Analogue modem lines. If a call -comes in over a tty you didn't define, that call is refused. So if you are -directly connected to the internet, and have only 5 network tty's defined, -then maximum 5 users are allowed to telnet to your bbs via the internet. +For each modem or ISDN line your bbs has you must setup a tty line. +This also includes console lines (for local login). Since version 0.81.0 +you don't need to setup network lines anymore, these are now buildin. +If a call comes in over a (modem or ISDN) tty you didn't define, that call is refused.

One thing about the portspeed, this is only needed for devices connected to -serial ports such as modems and external ISDN adapters. For network tty's and -internal ISDN cards this should be set to zero. If you set it to some other value, -things still word but you will get error messages in the logs. +serial ports such as modems and external ISDN adapters. +For internal ISDN cards this should be set to zero. If you set it to some other value, +things still work but you will get error messages in the logs.

A note about the EMSI flags, this must match your modem capabilities, if not dialout will not work correct. It is used to see which line to use to call @@ -48,7 +46,6 @@ may represent combined ISDN and analogue flags but the flags that belong to a mo Fido Flags The EMSI flags for this line, include your modem flags here! Line Type Can be POTS, ISDN, Network and Local. Available Is this line available for use. -Auth. log Not in use yet. Honor ZMH Deny users during ZMH on this line. Deleted If this line must be deleted. Callout Allow calling other systems from this line. @@ -63,7 +60,6 @@ may represent combined ISDN and analogue flags but the flags that belong to a mo Overview of tty ports

A analogue modem port at COM1

A ISDN channel

-A network (internet telnet) port

BackBack to index  HomeBack to main index diff --git a/lib/mbselib.h b/lib/mbselib.h index 0da65c81..3ba0dacf 100644 --- a/lib/mbselib.h +++ b/lib/mbselib.h @@ -1517,7 +1517,7 @@ struct _ttyinfo { char flags[31]; /* Fidonet capabilty flags */ int type; /* Pots/ISDN/Netw/Local */ unsigned available : 1; /* Available flag */ - unsigned authlog : 1; /* Is speed logged */ + unsigned xauthlog : 1; unsigned honor_zmh : 1; /* Honor ZMH on this line */ unsigned deleted : 1; /* Is deleted */ unsigned callout : 1; /* Callout allowed */ diff --git a/mbsetup/ledit.c b/mbsetup/ledit.c index 2e8be7fa..c6165bb4 100644 --- a/mbsetup/ledit.c +++ b/mbsetup/ledit.c @@ -1673,45 +1673,51 @@ int edit_msgkinds(int y, int x, int val) char *getlinetype(int val) { - switch (val) { - case POTS: return (char *)"POTS "; - case ISDN: return (char *)"ISDN "; - case NETWORK: return (char *)"Network"; - case LOCAL: return (char *)"Local "; - default: return NULL; - } + switch (val) { + case POTS: return (char *)"POTS "; + case ISDN: return (char *)"ISDN "; + case NETWORK: return (char *)"Network"; + case LOCAL: return (char *)"Local "; + default: return NULL; + } } void show_linetype(int y, int x, int val) { - mbse_mvprintw(y, x, getlinetype(val)); + mbse_mvprintw(y, x, getlinetype(val)); } int edit_linetype(int y, int x, int val) { - int ch; + int ch; - showhelp((char *)"Toggle ^Line Type^ with spacebar, press whene done."); - do { - set_color(YELLOW, BLUE); - show_linetype(y, x, val); - - ch = readkey(y, x, YELLOW, BLUE); - - if (ch == ' ') { - if (val < LOCAL) - val++; - else - val = POTS; - } - } while (ch != KEY_ENTER && ch != '\012'); - set_color(WHITE, BLACK); + showhelp((char *)"Toggle ^Line Type^ with spacebar, press whene done."); + do { + set_color(YELLOW, BLUE); show_linetype(y, x, val); - return val; + + ch = readkey(y, x, YELLOW, BLUE); + + if (ch == ' ') { + if (val < LOCAL) { + val++; + /* + * Network is for buildin linetypes only and cannot be selected. + */ + if (val == NETWORK) + val++; + } else { + val = POTS; + } + } + } while (ch != KEY_ENTER && ch != '\012'); + set_color(WHITE, BLACK); + show_linetype(y, x, val); + return val; } diff --git a/mbsetup/m_tty.c b/mbsetup/m_tty.c index cf774619..2fd443cf 100644 --- a/mbsetup/m_tty.c +++ b/mbsetup/m_tty.c @@ -50,47 +50,18 @@ int TtyUpdated = 0; int CountTtyinfo(void) { FILE *fil; - char ffile[PATH_MAX]; + char *ffile; int count = 0, i; + ffile = calloc(PATH_MAX, sizeof(char)); snprintf(ffile, PATH_MAX, "%s/etc/ttyinfo.data", getenv("MBSE_ROOT")); + if ((fil = fopen(ffile, "r")) == NULL) { if ((fil = fopen(ffile, "a+")) != NULL) { ttyinfohdr.hdrsize = sizeof(ttyinfohdr); ttyinfohdr.recsize = sizeof(ttyinfo); fwrite(&ttyinfohdr, sizeof(ttyinfohdr), 1, fil); -#if defined(__linux__) - /* - * Only seen on Linux systems - */ - for (i = 0; i < 16; i++) { - count++; - memset(&ttyinfo, 0, sizeof(ttyinfo)); - snprintf(ttyinfo.comment, 41, "Network port %d", count); - snprintf(ttyinfo.tty, 7, "pts/%d", i); - snprintf(ttyinfo.speed, 21, "10 mbit"); - snprintf(ttyinfo.flags, 31, "IBN,IFC,XX"); - ttyinfo.type = NETWORK; - ttyinfo.available = TRUE; - snprintf(ttyinfo.name, 36, "Network port #%d", count); - fwrite(&ttyinfo, sizeof(ttyinfo), 1, fil); - } -#endif - - for (i = 0; i < 16; i++) { - count++; - memset(&ttyinfo, 0, sizeof(ttyinfo)); - snprintf(ttyinfo.comment, 41, "Network port %d", count); - snprintf(ttyinfo.tty, 7, "ttyp%x", i); - snprintf(ttyinfo.speed, 21, "10 mbit"); - snprintf(ttyinfo.flags, 31, "IBN,IFC,XX"); - ttyinfo.type = NETWORK; - ttyinfo.available = TRUE; - snprintf(ttyinfo.name, 36, "Network port #%d", count); - fwrite(&ttyinfo, sizeof(ttyinfo), 1, fil); - } - #if defined(__linux__) /* * Linux has 6 virtual consoles @@ -98,7 +69,7 @@ int CountTtyinfo(void) for (i = 0; i < 6; i++) { memset(&ttyinfo, 0, sizeof(ttyinfo)); snprintf(ttyinfo.comment, 41, "Console port %d", i+1); - snprintf(ttyinfo.tty, 7, "tty%d", i); + snprintf(ttyinfo.tty, 7, "tty%d", i+1); snprintf(ttyinfo.speed, 21, "10 mbit"); ttyinfo.type = LOCAL; ttyinfo.available = TRUE; @@ -195,15 +166,19 @@ int CountTtyinfo(void) fclose(fil); chmod(ffile, 0640); Syslog('+', "Creaded new %s with %d ttys", ffile, count); + free(ffile); return count; - } else + } else { + free(ffile); return -1; + } } fread(&ttyinfohdr, sizeof(ttyinfohdr), 1, fil); fseek(fil, 0, SEEK_END); count = (ftell(fil) - ttyinfohdr.hdrsize) / ttyinfohdr.recsize; fclose(fil); + free(ffile); return count; } @@ -218,48 +193,64 @@ int CountTtyinfo(void) int OpenTtyinfo(void); int OpenTtyinfo(void) { - FILE *fin, *fout; - char fnin[PATH_MAX], fnout[PATH_MAX]; - long oldsize; + FILE *fin, *fout; + char *fnin, *fnout; + long oldsize; - snprintf(fnin, PATH_MAX, "%s/etc/ttyinfo.data", getenv("MBSE_ROOT")); - snprintf(fnout, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); - if ((fin = fopen(fnin, "r")) != NULL) { - if ((fout = fopen(fnout, "w")) != NULL) { - fread(&ttyinfohdr, sizeof(ttyinfohdr), 1, fin); - /* - * In case we are automatic upgrading the data format - * we save the old format. If it is changed, the - * database must always be updated. - */ - oldsize = ttyinfohdr.recsize; - if (oldsize != sizeof(ttyinfo)) { - TtyUpdated = 1; - Syslog('+', "Updated %s, format changed", fnin); - } else - TtyUpdated = 0; - ttyinfohdr.hdrsize = sizeof(ttyinfohdr); - ttyinfohdr.recsize = sizeof(ttyinfo); - fwrite(&ttyinfohdr, sizeof(ttyinfohdr), 1, fout); + fnin = calloc(PATH_MAX, sizeof(char)); + fnout = calloc(PATH_MAX, sizeof(char)); + snprintf(fnin, PATH_MAX, "%s/etc/ttyinfo.data", getenv("MBSE_ROOT")); + snprintf(fnout, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); - /* - * The datarecord is filled with zero's before each - * read, so if the format changed, the new fields - * will be empty. - */ - memset(&ttyinfo, 0, sizeof(ttyinfo)); - while (fread(&ttyinfo, oldsize, 1, fin) == 1) { - fwrite(&ttyinfo, sizeof(ttyinfo), 1, fout); - memset(&ttyinfo, 0, sizeof(ttyinfo)); - } + if ((fin = fopen(fnin, "r")) != NULL) { + if ((fout = fopen(fnout, "w")) != NULL) { + fread(&ttyinfohdr, sizeof(ttyinfohdr), 1, fin); + /* + * In case we are automatic upgrading the data format + * we save the old format. If it is changed, the + * database must always be updated. + */ + oldsize = ttyinfohdr.recsize; + if (oldsize != sizeof(ttyinfo)) { + TtyUpdated = 1; + Syslog('+', "Updated %s, format changed", fnin); + } else + TtyUpdated = 0; + ttyinfohdr.hdrsize = sizeof(ttyinfohdr); + ttyinfohdr.recsize = sizeof(ttyinfo); + fwrite(&ttyinfohdr, sizeof(ttyinfohdr), 1, fout); - fclose(fin); - fclose(fout); - return 0; - } else - return -1; + /* + * The datarecord is filled with zero's before each + * read, so if the format changed, the new fields + * will be empty. + */ + memset(&ttyinfo, 0, sizeof(ttyinfo)); + while (fread(&ttyinfo, oldsize, 1, fin) == 1) { + /* + * If network ports available, set updated so the records will + * be deleted during close. + */ + if (ttyinfo.type == NETWORK) { + TtyUpdated = 1; + ttyinfo.deleted = TRUE; + ttyinfo.available = FALSE; + } + fwrite(&ttyinfo, sizeof(ttyinfo), 1, fout); + memset(&ttyinfo, 0, sizeof(ttyinfo)); + } + + fclose(fin); + fclose(fout); + free(fnin); + free(fnout); + return 0; } - return -1; + } + + free(fnin); + free(fnout); + return -1; } @@ -267,88 +258,100 @@ int OpenTtyinfo(void) void CloseTtyinfo(int); void CloseTtyinfo(int force) { - char fin[PATH_MAX], fout[PATH_MAX]; - FILE *fi, *fo; - st_list *tty = NULL, *tmp; + char *fin, *fout; + FILE *fi, *fo; + st_list *tty = NULL, *tmp; - snprintf(fin, PATH_MAX, "%s/etc/ttyinfo.data", getenv("MBSE_ROOT")); - snprintf(fout, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); + fin = calloc(PATH_MAX, sizeof(char)); + fout = calloc(PATH_MAX, sizeof(char)); + snprintf(fin, PATH_MAX, "%s/etc/ttyinfo.data", getenv("MBSE_ROOT")); + snprintf(fout, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); - if (TtyUpdated == 1) { - if (force || (yes_no((char *)"Database is changed, save changes") == 1)) { - working(1, 0, 0); - fi = fopen(fout, "r"); - fo = fopen(fin, "w"); - fread(&ttyinfohdr, ttyinfohdr.hdrsize, 1, fi); - fwrite(&ttyinfohdr, ttyinfohdr.hdrsize, 1, fo); + if (TtyUpdated == 1) { + if (force || (yes_no((char *)"Database is changed, save changes") == 1)) { + working(1, 0, 0); + fi = fopen(fout, "r"); + fo = fopen(fin, "w"); + fread(&ttyinfohdr, ttyinfohdr.hdrsize, 1, fi); + fwrite(&ttyinfohdr, ttyinfohdr.hdrsize, 1, fo); - while (fread(&ttyinfo, ttyinfohdr.recsize, 1, fi) == 1) - if (!ttyinfo.deleted) - fill_stlist(&tty, ttyinfo.comment, ftell(fi) - ttyinfohdr.recsize); - sort_stlist(&tty); + while (fread(&ttyinfo, ttyinfohdr.recsize, 1, fi) == 1) + if (!ttyinfo.deleted) + fill_stlist(&tty, ttyinfo.comment, ftell(fi) - ttyinfohdr.recsize); + sort_stlist(&tty); - for (tmp = tty; tmp; tmp = tmp->next) { - fseek(fi, tmp->pos, SEEK_SET); - fread(&ttyinfo, ttyinfohdr.recsize, 1, fi); - fwrite(&ttyinfo, ttyinfohdr.recsize, 1, fo); - } + for (tmp = tty; tmp; tmp = tmp->next) { + fseek(fi, tmp->pos, SEEK_SET); + fread(&ttyinfo, ttyinfohdr.recsize, 1, fi); + fwrite(&ttyinfo, ttyinfohdr.recsize, 1, fo); + } - tidy_stlist(&tty); - fclose(fi); - fclose(fo); - unlink(fout); - chmod(fin, 0640); - Syslog('+', "Updated \"ttyinfo.data\""); - if (!force) - working(6, 0, 0); - return; - } + tidy_stlist(&tty); + fclose(fi); + fclose(fo); + unlink(fout); + chmod(fin, 0640); + Syslog('+', "Updated \"ttyinfo.data\""); + if (!force) + working(6, 0, 0); + free(fin); + free(fout); + return; } - chmod(fin, 0640); - working(1, 0, 0); - unlink(fout); + } + + free(fin); + free(fout); + chmod(fin, 0640); + working(1, 0, 0); + unlink(fout); } int AppendTtyinfo(void) { - FILE *fil; - char ffile[PATH_MAX]; + FILE *fil; + char *ffile; - snprintf(ffile, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); - if ((fil = fopen(ffile, "a")) != NULL) { - memset(&ttyinfo, 0, sizeof(ttyinfo)); - fwrite(&ttyinfo, sizeof(ttyinfo), 1, fil); - fclose(fil); - TtyUpdated = 1; - return 0; - } else - return -1; + ffile = calloc(PATH_MAX, sizeof(char)); + snprintf(ffile, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); + + if ((fil = fopen(ffile, "a")) != NULL) { + memset(&ttyinfo, 0, sizeof(ttyinfo)); + fwrite(&ttyinfo, sizeof(ttyinfo), 1, fil); + fclose(fil); + TtyUpdated = 1; + free(ffile); + return 0; + } + + free(ffile); + return -1; } + void TtyScreen(void) { - clr_index(); - set_color(WHITE, BLACK); - mbse_mvprintw( 5, 6, "6. EDIT TTY LINE"); - set_color(CYAN, BLACK); - mbse_mvprintw( 7, 6, "1. Comment"); - mbse_mvprintw( 8, 6, "2. TTY Device"); - mbse_mvprintw( 9, 6, "3. Phone nr."); - mbse_mvprintw(10, 6, "4. Line Speed"); - mbse_mvprintw(11, 6, "5. Fido Flags"); - mbse_mvprintw(12, 6, "6. Line Type"); - mbse_mvprintw(13, 6, "7. Available"); - mbse_mvprintw(14, 6, "8. Auth. log"); - mbse_mvprintw(15, 6, "9. Honor ZMH"); - mbse_mvprintw(16, 6, "10. Deleted"); - mbse_mvprintw(17, 6, "11. Callout"); + clr_index(); + set_color(WHITE, BLACK); + mbse_mvprintw( 5, 6, "6. EDIT TTY LINE"); + set_color(CYAN, BLACK); + mbse_mvprintw( 7, 6, "1. Comment"); + mbse_mvprintw( 8, 6, "2. TTY Device"); + mbse_mvprintw( 9, 6, "3. Phone nr."); + mbse_mvprintw(10, 6, "4. Line Speed"); + mbse_mvprintw(11, 6, "5. Fido Flags"); + mbse_mvprintw(12, 6, "6. Line Type"); + mbse_mvprintw(13, 6, "7. Available"); + mbse_mvprintw(14, 6, "8. Honor ZMH"); + mbse_mvprintw(15, 6, "9. Deleted"); + mbse_mvprintw(16, 6, "10. Callout"); - mbse_mvprintw(15,31, "12. Portspeed"); - mbse_mvprintw(16,31, "13. Modemtype"); - mbse_mvprintw(17,31, "14. EMSI name"); + mbse_mvprintw(14,31, "11. Portspeed"); + mbse_mvprintw(15,31, "12. Modemtype"); + mbse_mvprintw(16,31, "13. EMSI name"); } @@ -358,206 +361,215 @@ void TtyScreen(void) */ int EditTtyRec(int Area) { - FILE *fil; - char mfile[PATH_MAX]; - long offset; - int j; - unsigned long crc, crc1; + FILE *fil; + char *mfile; + long offset; + int j; + unsigned long crc, crc1; - clr_index(); - working(1, 0, 0); - IsDoing("Edit Ttyinfo"); + clr_index(); + working(1, 0, 0); + IsDoing("Edit Ttyinfo"); + mfile = calloc(PATH_MAX, sizeof(char)); + snprintf(mfile, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); + + if ((fil = fopen(mfile, "r")) == NULL) { + working(2, 0, 0); + free(mfile); + return -1; + } - snprintf(mfile, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); - if ((fil = fopen(mfile, "r")) == NULL) { - working(2, 0, 0); - return -1; - } - - offset = sizeof(ttyinfohdr) + ((Area -1) * sizeof(ttyinfo)); - if (fseek(fil, offset, 0) != 0) { - working(2, 0, 0); - return -1; - } - - fread(&ttyinfo, sizeof(ttyinfo), 1, fil); + offset = sizeof(ttyinfohdr) + ((Area -1) * sizeof(ttyinfo)); + if (fseek(fil, offset, 0) != 0) { + working(2, 0, 0); fclose(fil); - crc = 0xffffffff; - crc = upd_crc32((char *)&ttyinfo, crc, sizeof(ttyinfo)); - TtyScreen(); - - for (;;) { - set_color(WHITE, BLACK); - show_str( 7,21,40, ttyinfo.comment); - show_str( 8,21, 6, ttyinfo.tty); - show_str( 9,21,25, ttyinfo.phone); - show_str(10,21,20, ttyinfo.speed); - show_str(11,21,30, ttyinfo.flags); - show_linetype(12,21, ttyinfo.type); - show_bool(13,21, ttyinfo.available); - show_bool(14,21, ttyinfo.authlog); - show_bool(15,21, ttyinfo.honor_zmh); - show_bool(16,21, ttyinfo.deleted); - show_bool(17,21, ttyinfo.callout); - show_int( 15,45, ttyinfo.portspeed); - show_str( 16,45,30,ttyinfo.modem); - show_str( 17,45,35,ttyinfo.name); + free(mfile); + return -1; + } - j = select_menu(14); - switch(j) { - case 0: crc1 = 0xffffffff; - crc1 = upd_crc32((char *)&ttyinfo, crc1, sizeof(ttyinfo)); - if (crc != crc1) { - if (yes_no((char *)"Record is changed, save") == 1) { - working(1, 0, 0); - if ((fil = fopen(mfile, "r+")) == NULL) { - working(2, 0, 0); - return -1; - } - fseek(fil, offset, 0); - fwrite(&ttyinfo, sizeof(ttyinfo), 1, fil); - fclose(fil); - TtyUpdated = 1; - working(6, 0, 0); - } + fread(&ttyinfo, sizeof(ttyinfo), 1, fil); + fclose(fil); + crc = 0xffffffff; + crc = upd_crc32((char *)&ttyinfo, crc, sizeof(ttyinfo)); + TtyScreen(); + + for (;;) { + set_color(WHITE, BLACK); + show_str( 7,21,40, ttyinfo.comment); + show_str( 8,21, 6, ttyinfo.tty); + show_str( 9,21,25, ttyinfo.phone); + show_str(10,21,20, ttyinfo.speed); + show_str(11,21,30, ttyinfo.flags); + show_linetype(12,21, ttyinfo.type); + show_bool(13,21, ttyinfo.available); + show_bool(14,21, ttyinfo.honor_zmh); + show_bool(15,21, ttyinfo.deleted); + show_bool(16,21, ttyinfo.callout); + show_int( 14,45, ttyinfo.portspeed); + show_str( 15,45,30,ttyinfo.modem); + show_str( 16,45,35,ttyinfo.name); + + j = select_menu(13); + switch(j) { + case 0: crc1 = 0xffffffff; + crc1 = upd_crc32((char *)&ttyinfo, crc1, sizeof(ttyinfo)); + if (crc != crc1) { + if (yes_no((char *)"Record is changed, save") == 1) { + working(1, 0, 0); + if ((fil = fopen(mfile, "r+")) == NULL) { + working(2, 0, 0); + free(mfile); + return -1; + } + fseek(fil, offset, 0); + fwrite(&ttyinfo, sizeof(ttyinfo), 1, fil); + fclose(fil); + TtyUpdated = 1; + working(6, 0, 0); + } + } + IsDoing("Browsing Menu"); + free(mfile); + return 0; + case 1: E_STR( 7,21,40,ttyinfo.comment, "The ^Comment^ for this record") + case 2: E_STR( 8,21,7, ttyinfo.tty, "The ^Device name^ of this tty line") + case 3: E_STR( 9,21,25,ttyinfo.phone, "The ^Phone number^ or ^Hostname^ or ^IP address^ of this tty line") + case 4: E_STR( 10,21,20,ttyinfo.speed, "The ^Speed^ of this device") + case 5: E_STR( 11,21,30,ttyinfo.flags, "The ^Fidonet Capability Flags^ for this tty line") + case 6: ttyinfo.type = edit_linetype(12,21, ttyinfo.type); + if (ttyinfo.type == POTS) { + if (!ttyinfo.portspeed) + ttyinfo.portspeed = 57600; + } else { + ttyinfo.portspeed = 0; + } + break; + case 7: ttyinfo.available = edit_bool(13,21, ttyinfo.available, + (char *)"Switch if this tty line is ^Available^ for use."); + if (ttyinfo.available) { + if ((ttyinfo.type == POTS) || (ttyinfo.type == ISDN)) { + ttyinfo.callout = TRUE; + ttyinfo.honor_zmh = TRUE; } - IsDoing("Browsing Menu"); - return 0; - case 1: E_STR( 7,21,40,ttyinfo.comment, "The ^Comment^ for this record") - case 2: E_STR( 8,21,7, ttyinfo.tty, "The ^Device name^ of this tty line") - case 3: E_STR( 9,21,25,ttyinfo.phone, "The ^Phone number^ or ^Hostname^ or ^IP address^ of this tty line") - case 4: E_STR( 10,21,20,ttyinfo.speed, "The ^Speed^ of this device") - case 5: E_STR( 11,21,30,ttyinfo.flags, "The ^Fidonet Capability Flags^ for this tty line") - case 6: ttyinfo.type = edit_linetype(12,21, ttyinfo.type); if (ttyinfo.type == POTS) { if (!ttyinfo.portspeed) ttyinfo.portspeed = 57600; } else { ttyinfo.portspeed = 0; } - break; - case 7: ttyinfo.available = edit_bool(13,21, ttyinfo.available, - (char *)"Switch if this tty line is ^Available^ for use."); - if (ttyinfo.available) { - if ((ttyinfo.type == POTS) || (ttyinfo.type == ISDN)) { - ttyinfo.callout = TRUE; - ttyinfo.authlog = TRUE; - ttyinfo.honor_zmh = TRUE; - } - if (ttyinfo.type == POTS) { - if (!ttyinfo.portspeed) - ttyinfo.portspeed = 57600; - } else { - ttyinfo.portspeed = 0; - } - } - break; - case 8: E_BOOL(14,21, ttyinfo.authlog, "Is mgetty ^Auth^ logging available") - case 9: E_BOOL(15,21, ttyinfo.honor_zmh,"Honor ^Zone Mail Hour^ on this tty line") - case 10:E_BOOL(16,21, ttyinfo.deleted, "Is this tty line ^deleted") - case 11:E_BOOL(17,21, ttyinfo.callout, "Is this line available for ^calling out^") - case 12:E_INT (15,45, ttyinfo.portspeed,"The ^locked speed^ of this tty port (only for modems)") - case 13:strcpy(ttyinfo.modem, PickModem((char *)"6.13")); TtyScreen(); break; - case 14:E_STR( 17,45,30,ttyinfo.name, "The ^EMSI name^ for this tty line") - } + } + break; + case 8: E_BOOL(14,21, ttyinfo.honor_zmh,"Honor ^Zone Mail Hour^ for bbs users on this tty") + case 9: E_BOOL(15,21, ttyinfo.deleted, "Is this tty line ^deleted") + case 10:E_BOOL(16,21, ttyinfo.callout, "Is this line available for ^calling out^") + case 11:E_INT (14,45, ttyinfo.portspeed,"The ^locked speed^ of this tty port (only for modems)") + case 12:if ((ttyinfo.type == POTS) || (ttyinfo.type == ISDN)) { + strcpy(ttyinfo.modem, PickModem((char *)"6.12")); + TtyScreen(); + } + break; + case 13:E_STR( 16,45,30,ttyinfo.name, "The ^EMSI name^ for this tty line") } + } - return 0; + return 0; } void EditTtyinfo(void) { - int records, i, o, x, y; - char pick[12]; - FILE *fil; - char temp[PATH_MAX]; - long offset; + int records, i, o, x, y; + char pick[12]; + FILE *fil; + char temp[PATH_MAX]; + long offset; + clr_index(); + working(1, 0, 0); + IsDoing("Browsing Menu"); + if (config_read() == -1) { + working(2, 0, 0); + return; + } + + records = CountTtyinfo(); + if (records == -1) { + working(2, 0, 0); + return; + } + + if (OpenTtyinfo() == -1) { + working(2, 0, 0); + return; + } + o = 0; + + for (;;) { clr_index(); - working(1, 0, 0); - IsDoing("Browsing Menu"); - if (config_read() == -1) { - working(2, 0, 0); - return; - } - - records = CountTtyinfo(); - if (records == -1) { - working(2, 0, 0); - return; - } - - if (OpenTtyinfo() == -1) { - working(2, 0, 0); - return; - } - o = 0; - - for (;;) { - clr_index(); - set_color(WHITE, BLACK); - mbse_mvprintw( 5, 4, "6. TTY LINES SETUP"); + set_color(WHITE, BLACK); + mbse_mvprintw( 5, 4, "6. TTY LINES SETUP"); + set_color(CYAN, BLACK); + if (records != 0) { + snprintf(temp, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); + if ((fil = fopen(temp, "r")) != NULL) { + fread(&ttyinfohdr, sizeof(ttyinfohdr), 1, fil); + x = 2; + y = 7; set_color(CYAN, BLACK); - if (records != 0) { - snprintf(temp, PATH_MAX, "%s/etc/ttyinfo.temp", getenv("MBSE_ROOT")); - if ((fil = fopen(temp, "r")) != NULL) { - fread(&ttyinfohdr, sizeof(ttyinfohdr), 1, fil); - x = 2; - y = 7; - set_color(CYAN, BLACK); - for (i = 1; i <= 20 ; i++) { - if (i == 11) { - x = 42; - y = 7; - } - if ((o + i) <= records) { - offset = sizeof(ttyinfohdr) + (((o + i) - 1) * ttyinfohdr.recsize); - fseek(fil, offset, 0); - fread(&ttyinfo, ttyinfohdr.recsize, 1, fil); - if (ttyinfo.available) - set_color(CYAN, BLACK); - else - set_color(LIGHTBLUE, BLACK); - snprintf(temp, 81, "%3d. %-6s %-25s", o+i, ttyinfo.tty, ttyinfo.comment); - temp[37] = 0; - mbse_mvprintw(y, x, temp); - y++; - } - } - fclose(fil); - } - } - strcpy(pick, select_record(records, 20)); - - if (strncmp(pick, "-", 1) == 0) { - CloseTtyinfo(FALSE); - return; - } - - if (strncmp(pick, "A", 1) == 0) { - working(1, 0, 0); - if (AppendTtyinfo() == 0) { - records++; - working(1, 0, 0); - } else - working(2, 0, 0); - } - - if (strncmp(pick, "N", 1) == 0) - if ((o + 20) < records) - o = o + 20; - - if (strncmp(pick, "P", 1) == 0) - if ((o - 20) >= 0) - o = o - 20; - - if ((atoi(pick) >= 1) && (atoi(pick) <= records)) { - EditTtyRec(atoi(pick)); - o = ((atoi(pick) -1) / 20) * 20; + for (i = 1; i <= 20 ; i++) { + if (i == 11) { + x = 42; + y = 7; + } + if ((o + i) <= records) { + offset = sizeof(ttyinfohdr) + (((o + i) - 1) * ttyinfohdr.recsize); + fseek(fil, offset, 0); + fread(&ttyinfo, ttyinfohdr.recsize, 1, fil); + if (ttyinfo.deleted) + set_color(LIGHTRED, BLACK); + else if (ttyinfo.available) + set_color(CYAN, BLACK); + else + set_color(LIGHTBLUE, BLACK); + snprintf(temp, 81, "%3d. %-6s %-25s", o+i, ttyinfo.tty, ttyinfo.comment); + temp[37] = 0; + mbse_mvprintw(y, x, temp); + y++; + } } + fclose(fil); + } } + strcpy(pick, select_record(records, 20)); + + if (strncmp(pick, "-", 1) == 0) { + CloseTtyinfo(FALSE); + return; + } + + if (strncmp(pick, "A", 1) == 0) { + working(1, 0, 0); + if (AppendTtyinfo() == 0) { + records++; + working(1, 0, 0); + } else + working(2, 0, 0); + } + + if (strncmp(pick, "N", 1) == 0) + if ((o + 20) < records) + o = o + 20; + + if (strncmp(pick, "P", 1) == 0) + if ((o - 20) >= 0) + o = o - 20; + + if ((atoi(pick) >= 1) && (atoi(pick) <= records)) { + EditTtyRec(atoi(pick)); + o = ((atoi(pick) -1) / 20) * 20; + } + } } @@ -625,7 +637,6 @@ int tty_doc(FILE *fp, FILE *toc, int page) add_webtable(wp, (char *)"Fido flags", ttyinfo.flags); add_webtable(wp, (char *)"Equipment", getlinetype(ttyinfo.type)); add_webtable(wp, (char *)"Available", getboolean(ttyinfo.available)); - add_webtable(wp, (char *)"Auth. log", getboolean(ttyinfo.authlog)); add_webtable(wp, (char *)"Honor ZMH", getboolean(ttyinfo.honor_zmh)); add_webtable(wp, (char *)"Callout", getboolean(ttyinfo.callout)); add_webtable(wp, (char *)"Modem type", ttyinfo.modem); @@ -643,7 +654,6 @@ int tty_doc(FILE *fp, FILE *toc, int page) fprintf(fp, " Fido flags %s\n", ttyinfo.flags); fprintf(fp, " Equipment %s\n", getlinetype(ttyinfo.type)); fprintf(fp, " Available %s\n", getboolean(ttyinfo.available)); - fprintf(fp, " Auth. log %s\n", getboolean(ttyinfo.authlog)); fprintf(fp, " Honor ZMH %s\n", getboolean(ttyinfo.honor_zmh)); fprintf(fp, " Callout %s\n", getboolean(ttyinfo.callout)); fprintf(fp, " Modem type %s\n", ttyinfo.modem);