Annotation of coherent/g/usr/lib/uucp/tay104/uuconf/tdialc.c, revision 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.