Annotation of coherent/g/usr/lib/uucp/tay104/uuconf/tdialc.c, revision 1.1.1.1

1.1       root        1: /* tdialc.c
                      2:    Handle a Taylor UUCP dialer command.
                      3: 
                      4:    Copyright (C) 1992 Ian Lance Taylor
                      5: 
                      6:    This file is part of the Taylor UUCP uuconf library.
                      7: 
                      8:    This library is free software; you can redistribute it and/or
                      9:    modify it under the terms of the GNU Library General Public License
                     10:    as published by the Free Software Foundation; either version 2 of
                     11:    the License, or (at your option) any later version.
                     12: 
                     13:    This library is distributed in the hope that it will be useful, but
                     14:    WITHOUT ANY WARRANTY; without even the implied warranty of
                     15:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
                     16:    Library General Public License for more details.
                     17: 
                     18:    You should have received a copy of the GNU Library General Public
                     19:    License along with this library; if not, write to the Free Software
                     20:    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
                     21: 
                     22:    The author of the program may be contacted at [email protected] or
                     23:    c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
                     24:    */
                     25: 
                     26: #include "uucnfi.h"
                     27: 
                     28: #if USE_RCS_ID
                     29: const char _uuconf_tdialc_rcsid[] = "$Id: tdialc.c,v 1.1 93/07/30 08:07:41 bin Exp Locker: bin $";
                     30: #endif
                     31: 
                     32: static int idchat P((pointer pglobal, int argc, char **argv, pointer pvar,
                     33:                     pointer pinfo));
                     34: static int iddtr_toggle P((pointer pglobal, int argc, char **argv,
                     35:                           pointer pvar, pointer pinfo));
                     36: static int idcomplete P((pointer pglobal, int argc, char **argv,
                     37:                         pointer pvar, pointer pinfo));
                     38: static int idproto_param P((pointer pglobal, int argc, char **argv,
                     39:                            pointer pvar, pointer pinfo));
                     40: static int idcunknown P((pointer pglobal, int argc, char **argv,
                     41:                         pointer pvar, pointer pinfo));
                     42: 
                     43: /* The command table for dialer commands.  The "dialer" command is
                     44:    handled specially.  */
                     45: static const struct cmdtab_offset asDialer_cmds[] =
                     46: {
                     47:   { "chat", UUCONF_CMDTABTYPE_PREFIX | 0,
                     48:       offsetof (struct uuconf_dialer, uuconf_schat), idchat },
                     49:   { "dialtone", UUCONF_CMDTABTYPE_STRING,
                     50:       offsetof (struct uuconf_dialer, uuconf_zdialtone), NULL },
                     51:   { "pause", UUCONF_CMDTABTYPE_STRING,
                     52:       offsetof (struct uuconf_dialer, uuconf_zpause), NULL },
                     53:   { "carrier", UUCONF_CMDTABTYPE_BOOLEAN,
                     54:       offsetof (struct uuconf_dialer, uuconf_fcarrier), NULL },
                     55:   { "carrier-wait", UUCONF_CMDTABTYPE_INT,
                     56:       offsetof (struct uuconf_dialer, uuconf_ccarrier_wait), NULL },
                     57:   { "dtr-toggle", UUCONF_CMDTABTYPE_FN | 0, (size_t) -1, iddtr_toggle },
                     58:   { "complete", UUCONF_CMDTABTYPE_FN | 2,
                     59:       offsetof (struct uuconf_dialer, uuconf_scomplete), idcomplete },
                     60:   { "complete-chat", UUCONF_CMDTABTYPE_PREFIX,
                     61:       offsetof (struct uuconf_dialer, uuconf_scomplete), idchat },
                     62:   { "abort", UUCONF_CMDTABTYPE_FN | 2,
                     63:       offsetof (struct uuconf_dialer, uuconf_sabort), idcomplete },
                     64:   { "abort-chat", UUCONF_CMDTABTYPE_PREFIX,
                     65:       offsetof (struct uuconf_dialer, uuconf_sabort), idchat },
                     66:   { "protocol-parameter", UUCONF_CMDTABTYPE_FN | 0,
                     67:       offsetof (struct uuconf_dialer, uuconf_qproto_params), idproto_param },
                     68:   { "seven-bit", UUCONF_CMDTABTYPE_FN | 2,
                     69:       offsetof (struct uuconf_dialer, uuconf_ireliable), _uuconf_iseven_bit },
                     70:   { "reliable", UUCONF_CMDTABTYPE_FN | 2,
                     71:       offsetof (struct uuconf_dialer, uuconf_ireliable), _uuconf_ireliable },
                     72:   { "half-duplex", UUCONF_CMDTABTYPE_FN | 2,
                     73:       offsetof (struct uuconf_dialer, uuconf_ireliable),
                     74:       _uuconf_ihalf_duplex },
                     75:   { NULL, 0, 0, NULL }
                     76: };
                     77: 
                     78: #define CDIALER_CMDS (sizeof asDialer_cmds / sizeof asDialer_cmds[0])
                     79: 
                     80: /* Handle a command passed to a dialer from a Taylor UUCP
                     81:    configuration file.  This can be called when reading the dialer
                     82:    file, the port file, or the sys file.  The return value may have
                     83:    UUCONF_CMDTABRET_KEEP set, but not UUCONF_CMDTABRET_EXIT.  It
                     84:    assigns values to the elements of qdialer.  The first time this is
                     85:    called, qdialer->uuconf_palloc should be set.  This will not set
                     86:    qdialer->uuconf_zname.  */
                     87: 
                     88: int
                     89: _uuconf_idialer_cmd (qglobal, argc, argv, qdialer)
                     90:      struct sglobal *qglobal;
                     91:      int argc;
                     92:      char **argv;
                     93:      struct uuconf_dialer *qdialer;
                     94: {
                     95:   struct uuconf_cmdtab as[CDIALER_CMDS];
                     96:   int iret;
                     97: 
                     98:   _uuconf_ucmdtab_base (asDialer_cmds, CDIALER_CMDS, (char *) qdialer, as);
                     99: 
                    100:   iret = uuconf_cmd_args ((pointer) qglobal, argc, argv, as,
                    101:                          (pointer) qdialer, idcunknown, 0,
                    102:                          qdialer->uuconf_palloc);
                    103: 
                    104:   return iret &~ UUCONF_CMDTABRET_EXIT;
                    105: }
                    106: 
                    107: /* Reroute a chat script command.  */
                    108: 
                    109: static int
                    110: idchat (pglobal, argc, argv, pvar, pinfo)
                    111:      pointer pglobal;
                    112:      int argc;
                    113:      char **argv;
                    114:      pointer pvar;
                    115:      pointer pinfo;
                    116: {
                    117:   struct sglobal *qglobal = (struct sglobal *) pglobal;
                    118:   struct uuconf_chat *qchat = (struct uuconf_chat *) pvar;
                    119:   struct uuconf_dialer *qdialer = (struct uuconf_dialer *) pinfo;
                    120: 
                    121:   return _uuconf_ichat_cmd (qglobal, argc, argv, qchat,
                    122:                            qdialer->uuconf_palloc);
                    123: }
                    124: 
                    125: /* Handle the "dtr-toggle" command, which may take two arguments.  */
                    126: 
                    127: /*ARGSUSED*/
                    128: static int
                    129: iddtr_toggle (pglobal, argc, argv, pvar, pinfo)
                    130:      pointer pglobal;
                    131:      int argc;
                    132:      char **argv;
                    133:      pointer pvar;
                    134:      pointer pinfo;
                    135: {
                    136:   struct sglobal *qglobal = (struct sglobal *) pglobal;
                    137:   struct uuconf_dialer *qdialer = (struct uuconf_dialer *) pinfo;
                    138:   int iret;
                    139: 
                    140:   if (argc < 2 || argc > 3)
                    141:     return UUCONF_SYNTAX_ERROR | UUCONF_CMDTABRET_EXIT;
                    142: 
                    143:   iret = _uuconf_iboolean (qglobal, argv[1], &qdialer->uuconf_fdtr_toggle);
                    144:   if ((iret &~ UUCONF_CMDTABRET_KEEP) != UUCONF_SUCCESS)
                    145:     return iret;
                    146: 
                    147:   if (argc < 3)
                    148:     return iret;
                    149: 
                    150:   iret |= _uuconf_iboolean (qglobal, argv[2],
                    151:                            &qdialer->uuconf_fdtr_toggle_wait);
                    152: 
                    153:   return iret;
                    154: }
                    155: 
                    156: /* Handle the "complete" and "abort" commands.  These just turn a
                    157:    string into a trivial chat script.  */
                    158: 
                    159: /*ARGSUSED*/
                    160: static int 
                    161: idcomplete (pglobal, argc, argv, pvar, pinfo)
                    162:      pointer pglobal;
                    163:      int argc;
                    164:      char **argv;
                    165:      pointer pvar;
                    166:      pointer pinfo;
                    167: {
                    168:   struct sglobal *qglobal = (struct sglobal *) pglobal;
                    169:   struct uuconf_chat *qchat = (struct uuconf_chat *) pvar;
                    170:   struct uuconf_dialer *qdialer = (struct uuconf_dialer *) pinfo;
                    171:   char *azargs[3];
                    172: 
                    173:   azargs[0] = (char *) "complete-chat";
                    174:   azargs[1] = (char *) "\"\"";
                    175:   azargs[2] = (char *) argv[1];
                    176: 
                    177:   return _uuconf_ichat_cmd (qglobal, 3, azargs, qchat,
                    178:                            qdialer->uuconf_palloc);
                    179: }
                    180: 
                    181: /* Handle the "protocol-parameter" command.  */
                    182: 
                    183: static int
                    184: idproto_param (pglobal, argc, argv, pvar, pinfo)
                    185:      pointer pglobal;
                    186:      int argc;
                    187:      char **argv;
                    188:      pointer pvar;
                    189:      pointer pinfo;
                    190: {
                    191:   struct sglobal *qglobal = (struct sglobal *) pglobal;
                    192:   struct uuconf_proto_param **pqparam = (struct uuconf_proto_param **) pvar;
                    193:   struct uuconf_dialer *qdialer = (struct uuconf_dialer *) pinfo;
                    194: 
                    195:   return _uuconf_iadd_proto_param (qglobal, argc - 1, argv + 1, pqparam, 
                    196:                                   qdialer->uuconf_palloc);
                    197: }
                    198: 
                    199: /* Give an error for an unknown dialer command.  */
                    200: 
                    201: /*ARGSUSED*/
                    202: static int
                    203: idcunknown (pglobal, argc, argv, pvar, pinfo)
                    204:      pointer pglobal;
                    205:      int argc;
                    206:      char **argv;
                    207:      pointer pvar;
                    208:      pointer pinfo;
                    209: {
                    210:   return UUCONF_SYNTAX_ERROR | UUCONF_CMDTABRET_EXIT;
                    211: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.