Annotation of coherent/g/usr/lib/uucp/tay104/uuconf.h, revision 1.1

1.1     ! root        1: /* uuconf.h
        !             2:    Header file for UUCP configuration routines.
        !             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 use of an object file which uses material from this header
        !            23:    file, and from no other portion of the uuconf library, is
        !            24:    unrestricted, as described in paragraph 4 of section 5 of version 2
        !            25:    of the GNU Library General Public License (this sentence is merely
        !            26:    informative, and does not modify the License in any way).
        !            27: 
        !            28:    The author of the program may be contacted at [email protected] or
        !            29:    c/o Infinity Development Systems, P.O. Box 520, Waltham, MA 02254.
        !            30:    */
        !            31: 
        !            32: #ifndef UUCONF_H
        !            33: 
        !            34: #define UUCONF_H
        !            35: 
        !            36: #include <stdio.h>
        !            37: 
        !            38: /* The macro UUCONF_ANSI_C may be used to override __STDC__.  */
        !            39: #ifndef UUCONF_ANSI_C
        !            40: #ifdef __STDC__
        !            41: #define UUCONF_ANSI_C 1
        !            42: #else /* ! defined (__STDC__) */
        !            43: #define UUCONF_ANSI_C 0
        !            44: #endif /* ! defined (__STDC__) */
        !            45: #endif /* ! defined (UUCONF_ANSI_C) */
        !            46: 
        !            47: #if UUCONF_ANSI_C
        !            48: #define UUCONF_CONST const
        !            49: typedef void *UUCONF_POINTER;
        !            50: #include <stddef.h>
        !            51: typedef size_t UUCONF_SIZE_T;
        !            52: #else
        !            53: #define UUCONF_CONST
        !            54: typedef char *UUCONF_POINTER;
        !            55: typedef unsigned int UUCONF_SIZE_T;
        !            56: #endif
        !            57: 
        !            58: /* The field names of each of the following structures begin with
        !            59:    "uuconf_".  This is to avoid any conflicts with user defined
        !            60:    macros.  The first character following the "uuconf_" string
        !            61:    indicates the type of the field.
        !            62: 
        !            63:    z -- a string (char *)
        !            64:    c -- a count (normally int)
        !            65:    i -- an integer value (normally int)
        !            66:    f -- a boolean value (normally int)
        !            67:    b -- a single character value (char or int)
        !            68:    t -- an enum (enum XX)
        !            69:    s -- a structure (struct XX)
        !            70:    u -- a union (union XX)
        !            71:    q -- a pointer to a structure (struct XX *)
        !            72:    p -- a pointer to something other than a string
        !            73:    */
        !            74: 
        !            75: /* The information which is kept for a chat script.  */
        !            76: 
        !            77: struct uuconf_chat
        !            78: {
        !            79:   /* The script itself.  This is a NULL terminated list of expect/send
        !            80:      pairs.  The first string is an expect string.  A string starting
        !            81:      with a '-' indicates subsend string; the following strings which
        !            82:      start with '-' are subexpect/subsend strings.  This field may be
        !            83:      NULL, in which case there is no chat script (but pzprogram may
        !            84:      hold a program to run).  */
        !            85:   char **uuconf_pzchat;
        !            86:   /* The chat program to run.  This is a NULL terminated list of
        !            87:      arguments; element 0 if the program.  May be NULL, in which case
        !            88:      there is no program.  */
        !            89:   char **uuconf_pzprogram;
        !            90:   /* The timeout in seconds to use for expect strings in the chat
        !            91:      script.  */
        !            92:   int uuconf_ctimeout;
        !            93:   /* The NULL terminated list of failure strings.  If any of these
        !            94:      strings appear, the chat script is aborted.  May be NULL, in
        !            95:      which case there are no failure strings.  */
        !            96:   char **uuconf_pzfail;
        !            97:   /* Non-zero if incoming characters should be stripped to seven bits
        !            98:      (by anding with 0x7f).  */
        !            99:   int uuconf_fstrip;
        !           100: };
        !           101: 
        !           102: /* The information which is kept for a time specification.  This is a
        !           103:    linked list of structures.  Each element of the list represents a
        !           104:    span of time, giving a starting time and an ending time.  The time
        !           105:    only depends on the day of the week, not on the day of the month or
        !           106:    of the year.  The time is only specified down to the minute, not
        !           107:    down to the second or below.  The list is sorted by starting time.
        !           108: 
        !           109:    The starting and ending time are expressed in minutes since the
        !           110:    beginning of the week, which is considered to be 12 midnight on
        !           111:    Sunday.  Thus 60 is 1 am on Sunday, 1440 (== 60 * 24) is 12
        !           112:    midnight on Monday, and the largest possible value is 10080 (== 60
        !           113:    * 24 * 7) which is 12 midnight on the following Sunday.
        !           114: 
        !           115:    Each span of time has a value associated with it.  This is the
        !           116:    lowest grade or the largest file size that may be transferred
        !           117:    during that time, depending on the source of the time span.  When
        !           118:    time specifications overlap, the value used for the overlap is the
        !           119:    higher grade or the smaller file size.  Thus specifying
        !           120:    ``call-timegrade z Any'' and ``call-timegrade Z Mo'' means that
        !           121:    only grade Z or higher may be sent on Monday, since Z is the higer
        !           122:    grade of the overlapping spans.  The final array wil have no
        !           123:    overlaps.
        !           124: 
        !           125:    Each span also has a retry time associated with it.  This permits
        !           126:    different retry times to be used at different times of day.  The
        !           127:    retry time is only relevant if the span came from a ``time'' or
        !           128:    ``timegrade'' command for a system.  */
        !           129: 
        !           130: struct uuconf_timespan
        !           131: {
        !           132:   /* Next element in list.  */
        !           133:   struct uuconf_timespan *uuconf_qnext;
        !           134:   /* Starting minute (-1 at the end of the array).  */
        !           135:   int uuconf_istart;
        !           136:   /* Ending minute.  */
        !           137:   int uuconf_iend;
        !           138:   /* Value for this span (lowest grade or largest file that may be
        !           139:      transferred at this time).  */
        !           140:   long uuconf_ival;
        !           141:   /* Retry time.  */
        !           142:   int uuconf_cretry;
        !           143: };
        !           144: 
        !           145: /* The information which is kept for protocol parameters.  Protocol
        !           146:    parameter information is stored as an array of the following
        !           147:    structures.  */
        !           148: 
        !           149: struct uuconf_proto_param
        !           150: {
        !           151:   /* The name of the protocol to which this entry applies.  This is
        !           152:      '\0' for the last element of the array.  */
        !           153:   int uuconf_bproto;
        !           154:   /* Specific entries for this protocol.  This points to an array
        !           155:      ending in an element with a uuconf_cargs field of 0.  */
        !           156:   struct uuconf_proto_param_entry *uuconf_qentries;
        !           157: };
        !           158: 
        !           159: /* Each particular protocol parameter entry is one of the following
        !           160:    structures.  */
        !           161: 
        !           162: struct uuconf_proto_param_entry
        !           163: {
        !           164:   /* The number of arguments to the ``protocol-parameter'' command
        !           165:      (not counting ``protocol-parameter'' itself).  This is 0 for the
        !           166:      last element of the array.  */
        !           167:   int uuconf_cargs;
        !           168:   /* The actual arguments to the ``protocol-parameter'' command; this
        !           169:      is an array with cargs entries.  */
        !           170:   char **uuconf_pzargs;
        !           171: };
        !           172: 
        !           173: /* The information which is kept for a system.  The zname and zalias
        !           174:    fields will be the same for all alternates.  Every other fields is
        !           175:    specific to the particular alternate in which it appears (although
        !           176:    most will be the same for all alternates).  */
        !           177: 
        !           178: struct uuconf_system
        !           179: {
        !           180:   /* The name of the system.  */
        !           181:   char *uuconf_zname;
        !           182:   /* A list of aliases for the system.  This is a NULL terminated list
        !           183:      of strings.  May be NULL, in which case there are no aliases.  */
        !           184:   char **uuconf_pzalias;
        !           185:   /* A linked list of alternate call in or call out information.  Each
        !           186:      alternative way to call this system occupies an element of this
        !           187:      list.  May be NULL, in which case there are no alternates.  */
        !           188:   struct uuconf_system *uuconf_qalternate;
        !           189:   /* The name for this particular alternate.  May be NULL, in which
        !           190:      case this alternate does not have a name.  */
        !           191:   char *uuconf_zalternate;
        !           192:   /* If non-zero, this alternate may be used for calling out.  */
        !           193:   int uuconf_fcall;
        !           194:   /* If non-zero, this alternate may be used for accepting a call.  */
        !           195:   int uuconf_fcalled;
        !           196:   /* The times at which this system may be called.  The ival field of
        !           197:      each uuconf_timespan structure is the lowest grade which may be
        !           198:      transferred at that time.  The cretry field is the number of
        !           199:      minutes to wait before retrying the call, or 0 if it was not
        !           200:      specified.  May be NULL, in which case the system may never be
        !           201:      called.  */
        !           202:   struct uuconf_timespan *uuconf_qtimegrade;
        !           203:   /* The times at which to request a particular grade of the system
        !           204:      when calling it, and the grades to request.  The ival field of
        !           205:      each uuconf_timespan structure is the lowest grade which the
        !           206:      other system should transfer at that time.  May be NULL, in which
        !           207:      case there are no grade restrictions.  */
        !           208:   struct uuconf_timespan *uuconf_qcalltimegrade;
        !           209:   /* The maximum number of times to retry calling this system.  If
        !           210:      this is 0, there is no limit.  */
        !           211:   int uuconf_cmax_retries;
        !           212:   /* The number of minutes to wait between successful calls to a
        !           213:      system.  */
        !           214:   int uuconf_csuccess_wait;
        !           215:   /* The size restrictions by time for local requests during a locally
        !           216:      placed call.  The ival field of each uuconf_timespan structure is
        !           217:      the size in bytes of the largest file which may be transferred at
        !           218:      that time.  May be NULL, in which case there are no size
        !           219:      restrictions.  */
        !           220:   struct uuconf_timespan *uuconf_qcall_local_size;
        !           221:   /* The size restrictions by time for remote requests during a
        !           222:      locally placed call.  May be NULL.  */
        !           223:   struct uuconf_timespan *uuconf_qcall_remote_size;
        !           224:   /* The size restrictions by time for local requests during a
        !           225:      remotely placed call.  May be NULL.  */
        !           226:   struct uuconf_timespan *uuconf_qcalled_local_size;
        !           227:   /* The size restrictions by time for remote requests during a
        !           228:      remotely placed call.  May be NULL.  */
        !           229:   struct uuconf_timespan *uuconf_qcalled_remote_size;
        !           230:   /* Baud rate, or speed.  Zero means any baud rate.  If ihighbaud is
        !           231:      non-zero, this is the low baud rate of a range.  */
        !           232:   long uuconf_ibaud;
        !           233:   /* If non-zero, ibaud is the low baud rate of a range and ihighbaud
        !           234:      is the high baud rate.  */
        !           235:   long uuconf_ihighbaud;
        !           236:   /* Port name to use.  May be NULL.  If an HDB configuration file
        !           237:      contains a modem class (alphabetic characters preceeding the baud
        !           238:      rate), the class is appended to the port name.  */
        !           239:   char *uuconf_zport;
        !           240:   /* Specific port information, if the system entry includes port
        !           241:      information.  May be NULL.  */
        !           242:   struct uuconf_port *uuconf_qport;
        !           243:   /* Phone number to call, or address to use for a TCP connection.
        !           244:      May be NULL, in which case a dialer script may not use \D or \T
        !           245:      for this system, and a TCP port will use the system name.  */
        !           246:   char *uuconf_zphone;
        !           247:   /* Chat script to use when logging in to the system.  */
        !           248:   struct uuconf_chat uuconf_schat;
        !           249:   /* Login name to use for \L in the login chat script.  This should
        !           250:      normally be accessed via uuconf_callout.  If it is "*",
        !           251:      uuconf_callout will look it up in the call out file.  This may be
        !           252:      NULL, in which case the login script may not use \L.  */
        !           253:   char *uuconf_zcall_login;
        !           254:   /* Password to use for \P in the login chat script.  This should
        !           255:      normally be accessed via uuconf_callout.  If it is "*",
        !           256:      uuconf_callout will look it up in the call out file.  This may be
        !           257:      NULL, in which case the login script may not use \P.  */
        !           258:   char *uuconf_zcall_password;
        !           259:   /* The login name this system must use when calling in.  This may be
        !           260:      different for different alternates.  This should only be examined
        !           261:      if uuconf_fcalled is TRUE.  If this is NULL or "ANY" then
        !           262:      uuconf_validate must be called to make sure that whatever login
        !           263:      name was used is permitted for this machine.  */
        !           264:   char *uuconf_zcalled_login;
        !           265:   /* If non-zero, then when this system calls in the call should not
        !           266:      be allowed to proceed and the system should be called back.  */
        !           267:   int uuconf_fcallback;
        !           268:   /* If non-zero, then conversation sequence numbers should be used
        !           269:      with this system.  */
        !           270:   int uuconf_fsequence;
        !           271:   /* A list of protocols to use with this system.  Each protocol has a
        !           272:      single character name.  May be NULL, in which case any known
        !           273:      protocol may be used.  */
        !           274:   char *uuconf_zprotocols;
        !           275:   /* Array of protocol parameters.  Ends in an entry with a
        !           276:      uuconf_bproto field of '\0'.  May be NULL.  */
        !           277:   struct uuconf_proto_param *uuconf_qproto_params;
        !           278:   /* Chat script to run when called by this system.  */
        !           279:   struct uuconf_chat uuconf_scalled_chat;
        !           280:   /* Debugging level to set during a conversation.  May be NULL.  */
        !           281:   char *uuconf_zdebug;
        !           282:   /* Maximum remote debugging level this system may request.  May be
        !           283:      NULL.  */
        !           284:   char *uuconf_zmax_remote_debug;
        !           285:   /* Non-zero if the remote system may request us to send files from
        !           286:      the local system to the remote.  */
        !           287:   int uuconf_fsend_request;
        !           288:   /* Non-zero if the remote system may request us to receive files
        !           289:      from the remote system to the local.  */
        !           290:   int uuconf_frec_request;
        !           291:   /* Non-zero if local requests are permitted when calling this
        !           292:      system.  */
        !           293:   int uuconf_fcall_transfer;
        !           294:   /* Non-zero if local requests are permitted when this system calls
        !           295:      in.  */
        !           296:   int uuconf_fcalled_transfer;
        !           297:   /* NULL terminated list of directories from which files may be sent
        !           298:      by local request.  */
        !           299:   char **uuconf_pzlocal_send;
        !           300:   /* NULL terminated list of directories from which files may be sent
        !           301:      by remote request.  */
        !           302:   char **uuconf_pzremote_send;
        !           303:   /* NULL terminated list of directories into which files may be
        !           304:      received by local request.  */
        !           305:   char **uuconf_pzlocal_receive;
        !           306:   /* NULL terminated list of directories into which files may be
        !           307:      received by remote request.  */
        !           308:   char **uuconf_pzremote_receive;
        !           309:   /* Path to use for command execution.  This is a NULL terminated
        !           310:      list of directories.  */
        !           311:   char **uuconf_pzpath;
        !           312:   /* NULL terminated List of commands that may be executed.  */
        !           313:   char **uuconf_pzcmds;
        !           314:   /* Amount of free space to leave when accepting a file from this
        !           315:      system, in bytes.  */
        !           316:   long uuconf_cfree_space;
        !           317:   /* NULL terminated list of systems that this system may forward
        !           318:      from.  May be NULL if there are no systems from which files may
        !           319:      be forwarded.  The list may include "ANY".  */
        !           320:   char **uuconf_pzforward_from;
        !           321:   /* NULL terminated list of systems that this system may forward to.
        !           322:      May be NULL if there are no systems to which files may be
        !           323:      forwarded.  The list may include "ANY".  */
        !           324:   char **uuconf_pzforward_to;
        !           325:   /* The public directory to use for this sytem.  */
        !           326:   const char *uuconf_zpubdir;
        !           327:   /* The local name to use for this remote system.  May be NULL if the
        !           328:      usual local name should be used.  */
        !           329:   char *uuconf_zlocalname;
        !           330:   /* Memory allocation block for the system.  */
        !           331:   UUCONF_POINTER uuconf_palloc;
        !           332: };
        !           333: 
        !           334: /* Types of ports.  */
        !           335: 
        !           336: enum uuconf_porttype
        !           337: {
        !           338:   /* Unknown port type.  A port of this type should never be returned
        !           339:      by the uuconf functions.  */
        !           340:   UUCONF_PORTTYPE_UNKNOWN,
        !           341:   /* Read from standard input and write to standard output.  Not
        !           342:      normally used.  */
        !           343:   UUCONF_PORTTYPE_STDIN,
        !           344:   /* A modem port.  */
        !           345:   UUCONF_PORTTYPE_MODEM,
        !           346:   /* A direct connect port.  */
        !           347:   UUCONF_PORTTYPE_DIRECT,
        !           348:   /* A TCP port.  Not supported on all systems.  */
        !           349:   UUCONF_PORTTYPE_TCP,
        !           350:   /* A TLI port.  Not supported on all systems.  */
        !           351:   UUCONF_PORTTYPE_TLI
        !           352: };
        !           353: 
        !           354: /* Additional information for a stdin port (there is none).  */
        !           355: 
        !           356: struct uuconf_stdin_port
        !           357: {
        !           358:   int uuconf_idummy;
        !           359: };
        !           360: 
        !           361: /* Additional information for a modem port.  */
        !           362: 
        !           363: struct uuconf_modem_port
        !           364: {
        !           365:   /* The device name.  May be NULL, in which case the port name is
        !           366:      used instead.  */
        !           367:   char *uuconf_zdevice;
        !           368:   /* The device name to send the dialer chat script to.  May be NULL,
        !           369:      in which case the chat script is sent to the usual device.  */
        !           370:   char *uuconf_zdial_device;
        !           371:   /* The default baud rate (speed).  If zero, there is no default.  */
        !           372:   long uuconf_ibaud;
        !           373:   /* The low baud rate, if a range is used.  If zero, a range is not
        !           374:      used and ihighbaud should be ignored.  */
        !           375:   long uuconf_ilowbaud;
        !           376:   /* The high baud rate, if ilowbaud is non-zero.  */
        !           377:   long uuconf_ihighbaud;
        !           378:   /* Non-zero if the port supports carrier detect.  */
        !           379:   int uuconf_fcarrier;
        !           380:   /* A NULL terminated sequence of dialer/token pairs (element 0 is a
        !           381:      dialer name, element 1 is a token, etc.)  May be NULL, in which
        !           382:      case qdialer should not be NULL.  */
        !           383:   char **uuconf_pzdialer;
        !           384:   /* Specific dialer information.  Only used if pzdialer is NULL.  */
        !           385:   struct uuconf_dialer *uuconf_qdialer;
        !           386: };
        !           387: 
        !           388: /* Additional information for a direct connect port.  */
        !           389: 
        !           390: struct uuconf_direct_port
        !           391: {
        !           392:   /* The device name.  May be NULL, in which case the port name is
        !           393:      used instead.  */
        !           394:   char *uuconf_zdevice;
        !           395:   /* The baud rate (speed).  */
        !           396:   long uuconf_ibaud;
        !           397: };
        !           398: 
        !           399: /* Additional information for a TCP port.  */
        !           400: 
        !           401: struct uuconf_tcp_port
        !           402: {
        !           403:   /* The TCP port number to use.  May be a name or a number.  May be
        !           404:      NULL, in which case "uucp" is looked up using getservbyname.  */
        !           405:   char *uuconf_zport;
        !           406: };
        !           407: 
        !           408: /* Additional information for a TLI port.  */
        !           409: 
        !           410: struct uuconf_tli_port
        !           411: {
        !           412:   /* Device name to open.  May be NULL, in which case the port name is
        !           413:      used.  */
        !           414:   char *uuconf_zdevice;
        !           415:   /* Whether this port should be turned into a stream, permitting the
        !           416:      read and write calls instead of the t_rcv and t_send calls.  */
        !           417:   int uuconf_fstream;
        !           418:   /* A NULL terminated list of modules to push after making the
        !           419:      connection.  May be NULL, in which case if fstream is non-zero,
        !           420:      then "tirdwr" is pushed onto the stream, and otherwise nothing is
        !           421:      pushed.  */
        !           422:   char **uuconf_pzpush;
        !           423:   /* A NULL terminated sequence of dialer/token pairs (element 0 is a
        !           424:      dialer name, element 1 is a token, etc.)  May be NULL.  If
        !           425:      element 0 is TLI or TLIS, element 1 is used as the address to
        !           426:      connect to; otherwise uuconf_zphone from the system information
        !           427:      is used.  */
        !           428:   char **uuconf_pzdialer;
        !           429:   /* Address to use when operating as a server.  This may contain
        !           430:      escape sequences.  */
        !           431:   char *uuconf_zservaddr;
        !           432: };
        !           433: 
        !           434: /* Information kept for a port.  */
        !           435: 
        !           436: struct uuconf_port
        !           437: {
        !           438:   /* The name of the port.  */
        !           439:   char *uuconf_zname;
        !           440:   /* The type of the port.  */
        !           441:   enum uuconf_porttype uuconf_ttype;
        !           442:   /* The list of protocols supported by the port.  The name of each
        !           443:      protocol is a single character.  May be NULL, in which case any
        !           444:      protocol is permitted.  */
        !           445:   char *uuconf_zprotocols;
        !           446:   /* Array of protocol parameters.  Ends in an entry with a
        !           447:      uuconf_bproto field of '\0'.  May be NULL.  */
        !           448:   struct uuconf_proto_param *uuconf_qproto_params;
        !           449:   /* The set of reliability bits.  */
        !           450:   int uuconf_ireliable;
        !           451:   /* The lock file name to use.  */
        !           452:   char *uuconf_zlockname;
        !           453:   /* Memory allocation block for the port.  */
        !           454:   UUCONF_POINTER uuconf_palloc;
        !           455:   /* The type specific information.  */
        !           456:   union
        !           457:     {
        !           458:       struct uuconf_stdin_port uuconf_sstdin;
        !           459:       struct uuconf_modem_port uuconf_smodem;
        !           460:       struct uuconf_direct_port uuconf_sdirect;
        !           461:       struct uuconf_tcp_port uuconf_stcp;
        !           462:       struct uuconf_tli_port uuconf_stli;
        !           463:     } uuconf_u;
        !           464: };
        !           465: 
        !           466: /* Information kept about a dialer.  */
        !           467: 
        !           468: struct uuconf_dialer
        !           469: {
        !           470:   /* The name of the dialer.  */
        !           471:   char *uuconf_zname;
        !           472:   /* The chat script to use when dialing out.  */
        !           473:   struct uuconf_chat uuconf_schat;
        !           474:   /* The string to send when a `=' appears in the phone number.  */
        !           475:   char *uuconf_zdialtone;
        !           476:   /* The string to send when a `-' appears in the phone number.  */
        !           477:   char *uuconf_zpause;
        !           478:   /* Non-zero if the dialer supports carrier detect.  */
        !           479:   int uuconf_fcarrier;
        !           480:   /* The number of seconds to wait for carrier after the chat script
        !           481:      is complete.  Only used if fcarrier is non-zero.  Only supported
        !           482:      on some systems.  */
        !           483:   int uuconf_ccarrier_wait;
        !           484:   /* If non-zero, DTR should be toggled before dialing.  Only
        !           485:      supported on some systems.  */
        !           486:   int uuconf_fdtr_toggle;
        !           487:   /* If non-zero, sleep for 1 second after toggling DTR.  Ignored if
        !           488:      fdtr_toggle is zero.  */
        !           489:   int uuconf_fdtr_toggle_wait;
        !           490:   /* The chat script to use when a call is complete.  */
        !           491:   struct uuconf_chat uuconf_scomplete;
        !           492:   /* The chat script to use when a call is aborted.  */
        !           493:   struct uuconf_chat uuconf_sabort;
        !           494:   /* Array of protocol parameters.  Ends in an entry with a
        !           495:      uuconf_bproto field of '\0'.  May be NULL.  */
        !           496:   struct uuconf_proto_param *uuconf_qproto_params;
        !           497:   /* The set of reliability bits.  */
        !           498:   int uuconf_ireliable;
        !           499:   /* Memory allocation block for the dialer.  */
        !           500:   UUCONF_POINTER uuconf_palloc;
        !           501: };
        !           502: 
        !           503: /* Reliability bits for the ireliable field of ports and dialers.
        !           504:    These bits are used to decide which protocol to run.  A given
        !           505:    protocol will have a set of these bits, and each of them must be
        !           506:    turned on for the port before we will permit that protocol to be
        !           507:    used.  This will be overridden by the zprotocols field.  */
        !           508: 
        !           509: /* Whether a set of reliability bits is given.  If this bit is not
        !           510:    set, then there is no reliability information.  */
        !           511: #define UUCONF_RELIABLE_SPECIFIED (01)
        !           512: 
        !           513: /* Set if the connection is eight bit transparent.  */
        !           514: #define UUCONF_RELIABLE_EIGHT (02)
        !           515: 
        !           516: /* Set if the connection is error-free.  */
        !           517: #define UUCONF_RELIABLE_RELIABLE (04)
        !           518: 
        !           519: /* Set if the connection is end-to-end reliable (e.g. TCP).  */
        !           520: #define UUCONF_RELIABLE_ENDTOEND (010)
        !           521: 
        !           522: /* Set if the connection is full-duplex; that is, no time consuming
        !           523:    line turnaround is required before sending data in the reverse
        !           524:    direction.  If the connection is truly half-duplex, in the sense
        !           525:    that communication can only flow in one direction, UUCP can not be
        !           526:    used.  */
        !           527: #define UUCONF_RELIABLE_FULLDUPLEX (020)
        !           528: 
        !           529: /* UUCP grades range from 0 to 9, A to Z, a to z in order from highest
        !           530:    to lowest (work of higher grades is done before work of lower
        !           531:    grades).  */
        !           532: 
        !           533: /* The highest grade.  */
        !           534: #define UUCONF_GRADE_HIGH ('0')
        !           535: 
        !           536: /* The lowest grade.  */
        !           537: #define UUCONF_GRADE_LOW ('z')
        !           538: 
        !           539: /* Whether a character is a legal grade (requires <ctype.h>).  */
        !           540: #define UUCONF_GRADE_LEGAL(b) (isalnum ((unsigned) (b)))
        !           541: 
        !           542: /* Return < 0 if the first grade should be done before the second
        !           543:    grade, == 0 if they are the same, or > 0 if the first grade should
        !           544:    be done after the second grade.  On an ASCII system, this can just
        !           545:    be b1 - b2.  */
        !           546: #define UUCONF_GRADE_CMP(b1, b2) (uuconf_grade_cmp ((b1), (b2)))
        !           547: 
        !           548: /* Most of the uuconf functions returns an error code.  A value of
        !           549:    zero (UUCONF_SUCCESS) indicates success.  */
        !           550: 
        !           551: /* If this bit is set in the returned error code, then the
        !           552:    uuconf_errno function may be used to obtain the errno value as set
        !           553:    by the function which caused the failure.  */
        !           554: #define UUCONF_ERROR_ERRNO (0x100)
        !           555: 
        !           556: /* If this bit is set in the returned error code, then the
        !           557:    uuconf_filename function may be used to get the name of a file
        !           558:    associated with the error.  */
        !           559: #define UUCONF_ERROR_FILENAME (0x200)
        !           560: 
        !           561: /* If this bit is set in the returned error code, then the
        !           562:    uuconf_lineno function may be used to get a line number associated
        !           563:    with the error; normally if this is set UUCONF_ERROR_FILENAME will
        !           564:    also be set.  */
        !           565: #define UUCONF_ERROR_LINENO (0x400)
        !           566: 
        !           567: /* There are two UUCONF_CMDTABRET bits that may be set in the return
        !           568:    value of uuconf_cmd_line or uuconf_cmd_args, described below.  They
        !           569:    do not indicate an error, but instead give instructions to the
        !           570:    calling function, often uuconf_cmd_file.  They may also be set in
        !           571:    the return value of a user function listed in a uuconf_cmdtab
        !           572:    table, in which case they will be honored by uuconf_cmd_file.  */
        !           573: 
        !           574: /* This bit means that the memory occupied by the arguments passed to
        !           575:    the function should be preserved, and not overwritten or freed.  It
        !           576:    refers only to the contents of the arguments; the contents of the
        !           577:    argv array itself may always be destroyed.  If this bit is set in
        !           578:    the return value of uuconf_cmd_line or uuconf_cmd_args, it must be
        !           579:    honored.  It will be honored by uuconf_cmd_file.  This may be
        !           580:    combined with an error code or with UUCONF_CMDTABRET_EXIT, although
        !           581:    neither uuconf_cmd_file or uuconf_cmd_line will do so.  */
        !           582: #define UUCONF_CMDTABRET_KEEP (0x800)
        !           583: 
        !           584: /* This bit means that uuconf_cmd_file should exit, rather than go on
        !           585:    to read and process the next line.  If uuconf_cmd_line or
        !           586:    uuconf_cmd_args encounter an error, the return value will have this
        !           587:    bit set along with the error code.  A user function may set this
        !           588:    bit with or without an error; the return value of the user function
        !           589:    will be returned by uuconf_cmd_file, except that the
        !           590:    UUCONF_CMDTABRET_KEEP and UUCONF_CMDTABRET_EXIT bits will be
        !           591:    cleared.  */
        !           592: #define UUCONF_CMDTABRET_EXIT (0x1000)
        !           593: 
        !           594: /* This macro may be used to extract the specific error value.  */
        !           595: #define UUCONF_ERROR_VALUE(i) ((i) & 0xff)
        !           596: 
        !           597: /* UUCONF_ERROR_VALUE will return one of the following values.  */
        !           598: 
        !           599: /* Function succeeded.  */
        !           600: #define UUCONF_SUCCESS (0)
        !           601: /* Named item not found.  */
        !           602: #define UUCONF_NOT_FOUND (1)
        !           603: /* A call to fopen failed.  */
        !           604: #define UUCONF_FOPEN_FAILED (2)
        !           605: /* A call to fseek failed.  */
        !           606: #define UUCONF_FSEEK_FAILED (3)
        !           607: /* A call to malloc or realloc failed.  */
        !           608: #define UUCONF_MALLOC_FAILED (4)
        !           609: /* Syntax error in file.  */
        !           610: #define UUCONF_SYNTAX_ERROR (5)
        !           611: /* Unknown command.  */
        !           612: #define UUCONF_UNKNOWN_COMMAND (6)
        !           613: 
        !           614: #if UUCONF_ANSI_C
        !           615: 
        !           616: /* For each type of configuration file (Taylor, V2, HDB), there are
        !           617:    separate routines to read various sorts of information.  There are
        !           618:    also generic routines, which call on the appropriate type specific
        !           619:    routines.  The library can be compiled to read any desired
        !           620:    combination of the configuration file types.  This affects only the
        !           621:    generic routines, as it determines which type specific routines
        !           622:    they call.  Thus, on a system which, for example, does not have any
        !           623:    V2 configuration files, there is no need to include the overhead of
        !           624:    the code to parse the files and the time to look for them.
        !           625:    However, a program which specifically wants to be able to parse
        !           626:    them can call the V2 specific routines.
        !           627: 
        !           628:    The uuconf functions all take as an argument a pointer to uuconf
        !           629:    global information.  This must be initialized by any the
        !           630:    initialization routines (the generic one and the three file type
        !           631:    specific ones) before any of the other uuconf functions may be
        !           632:    called.  */
        !           633: 
        !           634: /* Initialize the configuration file reading routines.  The ppglobal
        !           635:    argument should point to a generic pointer (a void *, or, on older
        !           636:    compilers, a char *) which will be initialized and may then be
        !           637:    passed to the other uuconf routines.  The zprogram argument is the
        !           638:    name of the program for which files should be read.  A NULL is
        !           639:    taken as "uucp", and reads the standard UUCP configuration files.
        !           640:    The only other common argument is "cu", but any string is
        !           641:    permitted.  The zname argument is the name of the Taylor UUCP
        !           642:    config file; if it is NULL, the default config file will be read.
        !           643:    If not reading Taylor UUCP configuration information, the argument
        !           644:    is ignored.  This function must be called before any of the other
        !           645:    uuconf functions.
        !           646: 
        !           647:    Note that if the zname argument is obtained from the user running
        !           648:    the program, the program should be careful to revoke any special
        !           649:    privileges it may have (e.g. on Unix call setuid (getuid ()) and
        !           650:    setgid (getgid ())).  Otherwise various sorts of spoofing become
        !           651:    possible.  */
        !           652: extern int uuconf_init (void **uuconf_ppglobal,
        !           653:                        const char *uuconf_zprogram,
        !           654:                        const char *uuconf_zname);
        !           655: 
        !           656: /* Adjust the configuration file global pointer for a new thread.  The
        !           657:    library is fully reentrant (with the exception of the function
        !           658:    uuconf_error_string, which calls strerror, which on some systems is
        !           659:    not reentrant), provided that each new thread that wishes to call
        !           660:    the library calls this function and uses the new global pointer
        !           661:    value.  The ppglobal argument should be set to the address of the
        !           662:    global pointer set by any of the init functions; it will be
        !           663:    modified to become a new global pointer.  */
        !           664: extern int uuconf_init_thread (void **uuconf_ppglobal);
        !           665: 
        !           666: /* Get the names of all known systems.  This sets sets *ppzsystems to
        !           667:    point to an array of system names.  The list of names is NULL
        !           668:    terminated.  The array is allocated using malloc, as is each
        !           669:    element of the array, and they may all be passed to free when they
        !           670:    are no longer needed.  If the falias argument is 0, the list will
        !           671:    not include any aliases; otherwise, it will.  */
        !           672: extern int uuconf_system_names (void *uuconf_pglobal,
        !           673:                                char ***uuconf_ppzsystems,
        !           674:                                int uuconf_falias);
        !           675: 
        !           676: /* Get the information for the system zsystem.  This sets the fields
        !           677:    in *qsys.  This will work whether zsystem is the official name of
        !           678:    the system or merely an alias.  */
        !           679: extern int uuconf_system_info (void *uuconf_pglobal,
        !           680:                               const char *uuconf_zsystem,
        !           681:                               struct uuconf_system *uuconf_qsys);
        !           682: 
        !           683: /* Get information for an unknown (anonymous) system.  The
        !           684:    uuconf_zname field of the returned system information will be NULL.
        !           685:    If no information is available for unknown systems, this will
        !           686:    return UUCONF_NOT_FOUND.  This does not run the HDB remote.unknown
        !           687:    shell script.  */
        !           688: extern int uuconf_system_unknown (void *uuconf_pglobal,
        !           689:                                  struct uuconf_system *uuconf_qsys);
        !           690: 
        !           691: /* Get information for the local system.  Normally the local system
        !           692:    name should first be looked up using uuconf_system_info.  If that
        !           693:    returns UUCONF_NOT_FOUND, this function may be used to get an
        !           694:    appropriate set of defaults.  The uuconf_zname field of the
        !           695:    returned system information may be NULL.  */
        !           696: extern int uuconf_system_local (void *uuconf_pglobal,
        !           697:                                struct uuconf_system *uuconf_qsys);
        !           698: 
        !           699: /* Free the memory occupied by system information returned by
        !           700:    uuconf_system_info, uuconf_system_unknown, uuconf_system_local, or
        !           701:    any of the configuration file type specific routines described
        !           702:    below.  After this is called, the contents of the structure shall
        !           703:    not be referred to.  */
        !           704: extern int uuconf_system_free (void *uuconf_pglobal,
        !           705:                               struct uuconf_system *uuconf_qsys);
        !           706: 
        !           707: #ifdef __OPTIMIZE__
        !           708: #define uuconf_system_free(qglob, q) \
        !           709:   (uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
        !           710: #endif
        !           711: 
        !           712: /* Find a matching port.  This will consider each port in turn.
        !           713: 
        !           714:    If the zname argument is not NULL, the port's uuconf_zname field
        !           715:    must match it.
        !           716: 
        !           717:    If the ibaud argument is not zero and the ihighbaud argument is
        !           718:    zero, the port's baud rate, if defined, must be the same (if the
        !           719:    port has a range of baud rates, ibaud must be within the range).
        !           720:    If ibaud and ihighbaud are both not zero, the port's baud rate, if
        !           721:    defined, must be between ibaud and ihighbaud inclusive (if the port
        !           722:    has a range of baud rates, the ranges must intersect).  If the port
        !           723:    has no baud rate, either because it is a type of port for which
        !           724:    baud rate is not defined (e.g. a TCP port) or because the
        !           725:    uuconf_ibaud field is 0, the ibaud and ihighbaud arguments are
        !           726:    ignored.
        !           727: 
        !           728:    If the pifn argument is not NULL, the port is passed to pifn, along
        !           729:    with the pinfo argument (which is otherwise ignored).  If pifn
        !           730:    returns UUCONF_SUCCESS, the port matches.  If pifn returns
        !           731:    UUCONF_NOT_FOUND, a new port is sought.  Otherwise the return value
        !           732:    of pifn is returned from uuconf_find_port.  The pifn function may
        !           733:    be used to further restrict the port, such as by modem class or
        !           734:    device name.  It may also be used to lock the port, if appropriate;
        !           735:    in this case, if the lock fails, pifn may return UUCONF_NOT_FOUND
        !           736:    to force uuconf_find_port to continue searching for a port.
        !           737: 
        !           738:    If the port matches, the information is set into uuconf_qport, and
        !           739:    uuconf_find_port returns UUCONF_SUCCESS.  */
        !           740: extern int uuconf_find_port (void *uuconf_pglobal,
        !           741:                             const char *uuconf_zname,
        !           742:                             long uuconf_ibaud,
        !           743:                             long uuconf_ihighbaud,
        !           744:                             int (*uuconf_pifn) (struct uuconf_port *,
        !           745:                                                 void *uuconf_pinfo),
        !           746:                             void *uuconf_pinfo,
        !           747:                             struct uuconf_port *uuconf_qport);
        !           748: 
        !           749: /* Free the memory occupied by system information returned by
        !           750:    uuconf_find_port (or any of the configuration file specific
        !           751:    routines described below).  After this is called, the contents of
        !           752:    the structure shall not be referred to.  */
        !           753: extern int uuconf_port_free (void *uuconf_pglobal,
        !           754:                             struct uuconf_port *uuconf_qport);
        !           755: 
        !           756: #ifdef __OPTIMIZE__
        !           757: #define uuconf_port_free(qglob, q) \
        !           758:   (uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
        !           759: #endif
        !           760: 
        !           761: /* Get the names of all known dialers.  This sets sets *ppzdialers to
        !           762:    point to an array of dialer names.  The list of names is NULL
        !           763:    terminated.  The array is allocated using malloc, as is each
        !           764:    element of the array, and they may all be passed to free when they
        !           765:    are no longer needed.  */
        !           766: extern int uuconf_dialer_names (void *uuconf_pglobal,
        !           767:                                char ***uuconf_ppzdialers);
        !           768: 
        !           769: /* Get the information for the dialer zdialer.  This sets the fields
        !           770:    in *qdialer.  */
        !           771: extern int uuconf_dialer_info (void *uuconf_pglobal,
        !           772:                               const char *uuconf_zdialer,
        !           773:                               struct uuconf_dialer *uuconf_qdialer);
        !           774: 
        !           775: /* Free the memory occupied by system information returned by
        !           776:    uuconf_dialer_info (or any of the configuration file specific
        !           777:    routines described below).  After this is called, the contents of
        !           778:    the structure shall not be referred to.  */
        !           779: extern int uuconf_dialer_free (void *uuconf_pglobal,
        !           780:                               struct uuconf_dialer *uuconf_qsys);
        !           781: 
        !           782: #ifdef __OPTIMIZE__
        !           783: #define uuconf_dialer_free(qglob, q) \
        !           784:   (uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
        !           785: #endif
        !           786: 
        !           787: /* Get the local node name.  If the node name is not specified
        !           788:    (because no ``nodename'' command appeared in the config file) this
        !           789:    will return UUCONF_NOT_FOUND, and some system dependent function
        !           790:    must be used to determine the node name.  Otherwise it will return
        !           791:    a pointer to a constant string, which should not be freed.  */
        !           792: extern int uuconf_localname (void *uuconf_pglobal,
        !           793:                             const char **pzname);
        !           794: 
        !           795: /* Get the local node name that should be used, given a login name.
        !           796:    This function will check for any special local name that may be
        !           797:    associated with the login name zlogin (as set by the ``myname''
        !           798:    command in a Taylor configuration file, or the MYNAME field in a
        !           799:    Permissions entry).  This will set *pzname to the node name.  If no
        !           800:    node name can be determined, *pzname will be set to NULL and the
        !           801:    function will return UUCONF_NOT_FOUND; in this case some system
        !           802:    dependent function must be used to determine the node name.  If the
        !           803:    function returns UUCONF_SUCCESS, *pzname will be point to an
        !           804:    malloced buffer.  */
        !           805: extern int uuconf_login_localname (void *uuconf_pglobal,
        !           806:                                   const char *uuconf_zlogin,
        !           807:                                   char **pzname);
        !           808: 
        !           809: /* Get the name of the UUCP spool directory.  This will set *pzspool
        !           810:    to a constant string, which should not be freed.  */
        !           811: extern int uuconf_spooldir (void *uuconf_pglobal,
        !           812:                            const char **uuconf_pzspool);
        !           813: 
        !           814: /* Get the name of the default UUCP public directory.  This will set
        !           815:    *pzpub to a constant string, which should not be freed.  Note that
        !           816:    particular systems may use a different public directory.  */
        !           817: extern int uuconf_pubdir (void *uuconf_pglobal,
        !           818:                          const char **uuconf_pzpub);
        !           819: 
        !           820: /* Get the name of the UUCP lock directory.  This will set *pzlock to
        !           821:    a constant string, which should not be freed.  */
        !           822: extern int uuconf_lockdir (void *uuconf_pglobal,
        !           823:                           const char **uuconf_pzlock);
        !           824: 
        !           825: /* Get the name of the UUCP log file.  This will set *pzlog to a
        !           826:    constant string, which should not be freed.  */
        !           827: extern int uuconf_logfile (void *uuconf_pglobal,
        !           828:                           const char **uuconf_pzlog);
        !           829: 
        !           830: /* Get the name of the UUCP statistics file.  This will set *pzstats
        !           831:    to a constant string, which should not be freed.  */
        !           832: extern int uuconf_statsfile (void *uuconf_pglobal,
        !           833:                             const char **uuconf_pzstats);
        !           834: 
        !           835: /* Get the name of the UUCP debugging file.  This will set *pzdebug to
        !           836:    a constant string, which should not be freed.  */
        !           837: extern int uuconf_debugfile (void *uuconf_pglobal,
        !           838:                             const char **uuconf_pzdebug);
        !           839: 
        !           840: /* Get the default debugging level to use.  This basically gets the
        !           841:    argument of the ``debug'' command from the Taylor UUCP config file.
        !           842:    It will set *pzdebug to a constant string, which should not be
        !           843:    freed.  */
        !           844: extern int uuconf_debuglevel (void *uuconf_pglobal,
        !           845:                              const char **uuconf_pzdebug);
        !           846: 
        !           847: /* Get the maximum number of simultaneous uuxqt executions.  This will
        !           848:    set *pcmaxuuxqt to the number.  Zero indicates no maximum.  */
        !           849: extern int uuconf_maxuuxqts (void *uuconf_pglobal,
        !           850:                             int *uuconf_pcmaxuuxqt);
        !           851: 
        !           852: /* Check a login name and password.  This checks the Taylor UUCP
        !           853:    password file (not /etc/passwd).  It will work even if
        !           854:    uuconf_taylor_init was not called.  If the login name exists and
        !           855:    the password is correct, this returns UUCONF_SUCCESS.  If the login
        !           856:    does not exist, or the password is wrong, this returns
        !           857:    UUCONF_NOT_FOUND.  Other errors are also possible.  */
        !           858: extern int uuconf_callin (void *uuconf_pglobal,
        !           859:                          const char *uuconf_zlogin,
        !           860:                          const char *uuconf_zpassword);
        !           861: 
        !           862: /* Get the callout login name and password for a system.  This will
        !           863:    set both *pzlog and *pzpass to a string allocated by malloc, or to
        !           864:    NULL if the value is not found.  If neither value is found, the
        !           865:    function will return UUCONF_NOT_FOUND.  */
        !           866: extern int uuconf_callout (void *uuconf_pglobal,
        !           867:                           const struct uuconf_system *uuconf_qsys,
        !           868:                           char **uuconf_pzlog,
        !           869:                           char **uuconf_pzpass);
        !           870: 
        !           871: /* See if a login name is permitted for a system.  This will return
        !           872:    UUCONF_SUCCESS if it is permitted or UUCONF_NOT_FOUND if it is
        !           873:    invalid.  This simply calls uuconf_taylor_validate or returns
        !           874:    UUCONF_SUCCESS, depending on the value of HAVE_TAYLOR_CONFIG.  */
        !           875: extern int uuconf_validate (void *uuconf_pglobal,
        !           876:                            const struct uuconf_system *uuconf_qsys,
        !           877:                            const char *uuconf_zlogin);
        !           878: 
        !           879: /* Get the name of the HDB remote.unknown shell script, if using
        !           880:    HAVE_HDB_CONFIG.  This does not actually run the shell script.  If
        !           881:    the function returns UUCONF_SUCCESS, the name will be in *pzname,
        !           882:    which will point to an malloced buffer.  If it returns
        !           883:    UUCONF_NOT_FOUND, then there is no script to run.  */
        !           884: extern int uuconf_remote_unknown (void *uuconf_pglobal,
        !           885:                                  char **pzname);
        !           886: 
        !           887: /* Translate a dial code.  This sets *pznum to an malloced string.
        !           888:    This will look up the entire zdial string in the dialcode file, so
        !           889:    for normal use the alphabetic prefix should be separated.  */
        !           890: extern int uuconf_dialcode (void *uuconf_pglobal,
        !           891:                            const char *uuconf_zdial,
        !           892:                            char **uuconf_pznum);
        !           893: 
        !           894: /* Compare two grades, returning < 0 if b1 should be executed before
        !           895:    b2, == 0 if they are the same, or > 0 if b1 should be executed
        !           896:    after b2.  This can not fail, and does not return a standard uuconf
        !           897:    error code; it is normally called via the macro UUCONF_GRADE_CMP,
        !           898:    defined above.  */
        !           899: extern int uuconf_grade_cmp (int uuconf_b1, int uuconf_b2);
        !           900: 
        !           901: #else /* ! UUCONF_ANSI_C */
        !           902: 
        !           903: extern int uuconf_init ();
        !           904: extern int uuconf_init_thread ();
        !           905: extern int uuconf_system_names ();
        !           906: extern int uuconf_system_info ();
        !           907: extern int uuconf_system_unknown ();
        !           908: extern int uuconf_system_local ();
        !           909: extern int uuconf_system_free ();
        !           910: extern int uuconf_find_port ();
        !           911: extern int uuconf_port_free ();
        !           912: extern int uuconf_dialer_names ();
        !           913: extern int uuconf_dialer_info ();
        !           914: extern int uuconf_dialer_free ();
        !           915: extern int uuconf_localname ();
        !           916: extern int uuconf_login_localname ();
        !           917: extern int uuconf_spooldir ();
        !           918: extern int uuconf_lockdir ();
        !           919: extern int uuconf_pubdir ();
        !           920: extern int uuconf_logfile ();
        !           921: extern int uuconf_statsfile ();
        !           922: extern int uuconf_debugfile ();
        !           923: extern int uuconf_debuglevel ();
        !           924: extern int uuconf_maxuuxqts ();
        !           925: extern int uuconf_callin ();
        !           926: extern int uuconf_callout ();
        !           927: extern int uuconf_remote_unknown ();
        !           928: extern int uuconf_validate ();
        !           929: extern int uuconf_grade_cmp ();
        !           930: 
        !           931: #ifdef __OPTIMIZE__
        !           932: #define uuconf_system_free(qglob, q) \
        !           933:   (uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
        !           934: #define uuconf_port_free(qglob, q) \
        !           935:   (uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
        !           936: #define uuconf_dialer_free(qglob, q) \
        !           937:   (uuconf_free_block ((q)->uuconf_palloc), UUCONF_SUCCESS)
        !           938: #endif
        !           939: 
        !           940: #endif /* ! UUCONF_ANSI_C */
        !           941: 
        !           942: #if UUCONF_ANSI_C
        !           943: 
        !           944: /* Initialize the Taylor UUCP configuration file reading routines.
        !           945:    This must be called before calling any of the Taylor UUCP
        !           946:    configuration file specific routines.  The ppglobal argument should
        !           947:    point to a generic pointer.  Moreover, before calling this function
        !           948:    the pointer either must be set to NULL, or must have been passed to
        !           949:    one of the other uuconf init routines.  The zprogram argument is
        !           950:    the name of the program for which files should be read.  If NULL,
        !           951:    it is taken as "uucp", which means to read the standard UUCP files.
        !           952:    The zname argument is the name of the config file.  If it is NULL,
        !           953:    the default config file will be used.
        !           954: 
        !           955:    Note that if the zname argument is obtained from the user running
        !           956:    the program, the program should be careful to revoke any special
        !           957:    privileges it may have (e.g. on Unix call setuid (getuid ()) and
        !           958:    setgid (getgid ())).  Otherwise various sorts of spoofing become
        !           959:    possible.  */
        !           960: extern int uuconf_taylor_init (void **uuconf_pglobal,
        !           961:                               const char *uuconf_zprogram,
        !           962:                               const char *uuconf_zname);
        !           963: 
        !           964: /* Get the names of all systems listed in the Taylor UUCP
        !           965:    configuration files.  This sets *ppzsystems to point to an array of
        !           966:    system names.  The list of names is NULL terminated.  The array is
        !           967:    allocated using malloc, as is each element of the array.  If the
        !           968:    falias argument is 0, the list will not include any aliases;
        !           969:    otherwise, it will.  */
        !           970: extern int uuconf_taylor_system_names (void *uuconf_pglobal,
        !           971:                                       char ***uuconf_ppzsystems,
        !           972:                                       int uuconf_falias);
        !           973: 
        !           974: /* Get the information for system zsystem from the Taylor UUCP
        !           975:    configuration files.  This will set *qsys.   */
        !           976: extern int uuconf_taylor_system_info (void *uuconf_pglobal,
        !           977:                                      const char *uuconf_zsystem,
        !           978:                                      struct uuconf_system *uuconf_qsys);
        !           979: 
        !           980: /* Get information for an unknown (anonymous) system.  This returns
        !           981:    the values set by the ``unknown'' command in the main configuration
        !           982:    file.  If the ``unknown'' command was not used, this will return
        !           983:    UUCONF_NOT_FOUND.  */
        !           984: extern int uuconf_taylor_system_unknown (void *uuconf_pglobal,
        !           985:                                         struct uuconf_system *uuconf_qsys);
        !           986: 
        !           987: /* Find a port from the Taylor UUCP configuration files.  The
        !           988:    arguments and return values are identical to those of
        !           989:    uuconf_find_port.  */
        !           990: extern int uuconf_taylor_find_port (void *uuconf_pglobal,
        !           991:                                    const char *uuconf_zname,
        !           992:                                    long uuconf_ibaud,
        !           993:                                    long uuconf_ihighbaud,
        !           994:                                    int (*uuconf_pifn) (struct uuconf_port *,
        !           995:                                                        void *uuconf_pinfo),
        !           996:                                    void *uuconf_pinfo,
        !           997:                                    struct uuconf_port *uuconf_qport);
        !           998: 
        !           999: /* Get the names of all dialers listed in the Taylor UUCP
        !          1000:    configuration files.  This sets *ppzdialers to point to an array of
        !          1001:    dialer names.  The list of names is NULL terminated.  The array is
        !          1002:    allocated using malloc, as is each element of the array.  */
        !          1003: extern int uuconf_taylor_dialer_names (void *uuconf_pglobal,
        !          1004:                                       char ***uuconf_ppzdialers);
        !          1005: 
        !          1006: /* Get the information for the dialer zdialer from the Taylor UUCP
        !          1007:    configuration files.  This sets the fields in *qdialer.  */
        !          1008: extern int uuconf_taylor_dialer_info (void *uuconf_pglobal,
        !          1009:                                      const char *uuconf_zdialer,
        !          1010:                                      struct uuconf_dialer *uuconf_qdialer);
        !          1011: 
        !          1012: /* Get the local node name that should be used, given a login name,
        !          1013:    considering only the ``myname'' command in the Taylor UUCP
        !          1014:    configuration files.  If the function returns UUCONF_SUCCESS,
        !          1015:    *pzname will point to an malloced buffer.  */
        !          1016: extern int uuconf_taylor_login_localname (void *uuconf_pglobal,
        !          1017:                                          const char *uuconf_zlogin,
        !          1018:                                          char **pzname);
        !          1019: 
        !          1020: /* Get the callout login name and password for a system from the
        !          1021:    Taylor UUCP configuration files.  This will set both *pzlog and
        !          1022:    *pzpass to a string allocated by malloc, or to NULL if the value is
        !          1023:    not found.  If neither value is found, the function will return
        !          1024:    UUCONF_NOT_FOUND.  */
        !          1025: extern int uuconf_taylor_callout (void *uuconf_pglobal,
        !          1026:                                  const struct uuconf_system *uuconf_qsys,
        !          1027:                                  char **uuconf_pzlog,
        !          1028:                                  char **uuconf_pzpass);
        !          1029: 
        !          1030: /* See if a login name is permitted for a system.  This will return
        !          1031:    UUCONF_SUCCESS if it is permitted or UUCONF_NOT_FOUND if it is
        !          1032:    invalid.  This checks whether the login name appears in a
        !          1033:    called-login command with a list of system which does not include
        !          1034:    the system qsys.  */
        !          1035: extern int uuconf_taylor_validate (void *uuconf_pglobal,
        !          1036:                                   const struct uuconf_system *uuconf_qsys,
        !          1037:                                   const char *uuconf_zlogin);
        !          1038: 
        !          1039: #else /* ! UUCONF_ANSI_C */
        !          1040: 
        !          1041: extern int uuconf_taylor_init ();
        !          1042: extern int uuconf_taylor_system_names ();
        !          1043: extern int uuconf_taylor_system_info ();
        !          1044: extern int uuconf_taylor_system_unknown ();
        !          1045: extern int uuconf_taylor_find_port ();
        !          1046: extern int uuconf_taylor_dialer_names ();
        !          1047: extern int uuconf_taylor_dialer_info ();
        !          1048: extern int uuconf_taylor_login_localname ();
        !          1049: extern int uuconf_taylor_callout ();
        !          1050: extern int uuconf_taylor_validate ();
        !          1051: 
        !          1052: #endif /* ! UUCONF_ANSI_C */
        !          1053: 
        !          1054: #if UUCONF_ANSI_C
        !          1055: 
        !          1056: /* Initialize the V2 configuration file reading routines.  This must
        !          1057:    be called before any of the other V2 routines are called.  The
        !          1058:    ppglobal argument should point to a generic pointer.  Moreover,
        !          1059:    before calling this function the pointer either must be set to
        !          1060:    NULL, or must have been passed to one of the other uuconf init
        !          1061:    routines.  */
        !          1062: extern int uuconf_v2_init (void **uuconf_ppglobal);
        !          1063: 
        !          1064: /* Get the names of all systems listed in the V2 configuration files.
        !          1065:    This sets *ppzsystems to point to an array of system names.  The
        !          1066:    list of names is NULL terminated.  The array is allocated using
        !          1067:    malloc, as is each element of the array.  If the falias argument is
        !          1068:    0, the list will not include any aliases; otherwise, it will.  */
        !          1069: extern int uuconf_v2_system_names (void *uuconf_pglobal,
        !          1070:                                   char ***uuconf_ppzsystems,
        !          1071:                                   int uuconf_falias);
        !          1072: 
        !          1073: /* Get the information for system zsystem from the V2 configuration
        !          1074:    files.  This will set *qsys.  */
        !          1075: extern int uuconf_v2_system_info (void *uuconf_pglobal,
        !          1076:                                  const char *uuconf_zsystem,
        !          1077:                                  struct uuconf_system *uuconf_qsys);
        !          1078: 
        !          1079: /* Find a port from the V2 configuration files.  The arguments and
        !          1080:    return values are identical to those of uuconf_find_port.  */
        !          1081: extern int uuconf_v2_find_port (void *uuconf_pglobal,
        !          1082:                                const char *uuconf_zname,
        !          1083:                                long uuconf_ibaud,
        !          1084:                                long uuconf_ihighbaud,
        !          1085:                                int (*uuconf_pifn) (struct uuconf_port *,
        !          1086:                                                    void *uuconf_pinfo),
        !          1087:                                void *uuconf_pinfo,
        !          1088:                                struct uuconf_port *uuconf_qport);
        !          1089: 
        !          1090: #else /* ! UUCONF_ANSI_C */
        !          1091: 
        !          1092: extern int uuconf_v2_init ();
        !          1093: extern int uuconf_v2_system_names ();
        !          1094: extern int uuconf_v2_system_info ();
        !          1095: extern int uuconf_v2_find_port ();
        !          1096: 
        !          1097: #endif /* ! UUCONF_ANSI_C */
        !          1098: 
        !          1099: #if UUCONF_ANSI_C
        !          1100: 
        !          1101: /* Initialize the HDB configuration file reading routines.  This
        !          1102:    should be called before any of the other HDB routines are called.
        !          1103:    The ppglobal argument should point to a generic pointer.  Moreover,
        !          1104:    before calling this function the pointer either must be set to
        !          1105:    NULL, or must have been passed to one of the other uuconf init
        !          1106:    routines.  The zprogram argument is used to match against a
        !          1107:    "services" string in Sysfiles.  A NULL or "uucp" argument is taken
        !          1108:    as "uucico".  */
        !          1109: extern int uuconf_hdb_init (void **uuconf_ppglobal,
        !          1110:                            const char *uuconf_zprogram);
        !          1111: 
        !          1112: /* Get the names of all systems listed in the HDB configuration files.
        !          1113:    This sets *ppzsystems to point to an array of system names.  The
        !          1114:    list of names is NULL terminated.  The array is allocated using
        !          1115:    malloc, as is each element of the array.  If the falias argument is
        !          1116:    0, the list will not include any aliases; otherwise, it will (an
        !          1117:    alias is created by using the ALIAS= keyword in the Permissions
        !          1118:    file).  */
        !          1119: extern int uuconf_hdb_system_names (void *uuconf_pglobal,
        !          1120:                                    char ***uuconf_ppzsystems,
        !          1121:                                    int uuconf_falias);
        !          1122: 
        !          1123: /* Get the information for system zsystem from the HDB configuration
        !          1124:    files.  This will set *qsys.  */
        !          1125: extern int uuconf_hdb_system_info (void *uuconf_pglobal,
        !          1126:                                   const char *uuconf_zsystem,
        !          1127:                                   struct uuconf_system *uuconf_qsys);
        !          1128: 
        !          1129: 
        !          1130: /* Get information for an unknown (anonymous) system.  If no
        !          1131:    information is available for unknown systems, this will return
        !          1132:    UUCONF_NOT_FOUND.  This does not run the remote.unknown shell
        !          1133:    script.  */
        !          1134: extern int uuconf_hdb_system_unknown (void *uuconf_pglobal,
        !          1135:                                      struct uuconf_system *uuconf_qsys);
        !          1136: 
        !          1137: /* Find a port from the HDB configuration files.  The arguments and
        !          1138:    return values are identical to those of uuconf_find_port.  */
        !          1139: extern int uuconf_hdb_find_port (void *uuconf_pglobal,
        !          1140:                                 const char *uuconf_zname,
        !          1141:                                 long uuconf_ibaud,
        !          1142:                                 long uuconf_ihighbaud,
        !          1143:                                 int (*uuconf_pifn) (struct uuconf_port *,
        !          1144:                                                     void *uuconf_pinfo),
        !          1145:                                 void *uuconf_pinfo,
        !          1146:                                 struct uuconf_port *uuconf_qport);
        !          1147: 
        !          1148: /* Get the names of all dialers listed in the HDB configuration files.
        !          1149:    This sets *ppzdialers to point to an array of dialer names.  The
        !          1150:    list of names is NULL terminated.  The array is allocated using
        !          1151:    malloc, as is each element of the array.  */
        !          1152: extern int uuconf_hdb_dialer_names (void *uuconf_pglobal,
        !          1153:                                    char ***uuconf_ppzdialers);
        !          1154: 
        !          1155: /* Get the information for the dialer zdialer from the HDB
        !          1156:    configuration files.  This sets the fields in *qdialer.  */
        !          1157: extern int uuconf_hdb_dialer_info (void *uuconf_pglobal,
        !          1158:                                   const char *uuconf_zdialer,
        !          1159:                                   struct uuconf_dialer *uuconf_qdialer);
        !          1160: 
        !          1161: /* Get the local node name that should be used, given a login name,
        !          1162:    considering only the MYNAME field in the HDB Permissions file.  If
        !          1163:    the function returns UUCONF_SUCCESS, *pzname will point to an
        !          1164:    malloced buffer.  */
        !          1165: extern int uuconf_hdb_login_localname (void *uuconf_pglobal,
        !          1166:                                       const char *uuconf_zlogin,
        !          1167:                                       char **pzname);
        !          1168: 
        !          1169: /* Get the name of the HDB remote.unknown shell script.  This does not
        !          1170:    actually run the shell script.  If the function returns
        !          1171:    UUCONF_SUCCESS, the name will be in *pzname, which will point to an
        !          1172:    malloced buffer.  */
        !          1173: extern int uuconf_hdb_remote_unknown (void *uuconf_pglobal,
        !          1174:                                      char **pzname);
        !          1175: 
        !          1176: #else /* ! UUCONF_ANSI_C */
        !          1177: 
        !          1178: extern int uuconf_hdb_init ();
        !          1179: extern int uuconf_hdb_system_names ();
        !          1180: extern int uuconf_hdb_system_info ();
        !          1181: extern int uuconf_hdb_system_unknown ();
        !          1182: extern int uuconf_hdb_find_port ();
        !          1183: extern int uuconf_hdb_dialer_names ();
        !          1184: extern int uuconf_hdb_dialer_info ();
        !          1185: extern int uuconf_hdb_localname ();
        !          1186: extern int uuconf_hdb_remote_unknown ();
        !          1187: 
        !          1188: #endif /* ! UUCONF_ANSI_C */
        !          1189: 
        !          1190: #if UUCONF_ANSI_C
        !          1191: 
        !          1192: /* This function will set an appropriate error message into the buffer
        !          1193:    zbuf, given a uuconf error code.  The buffer will always be null
        !          1194:    terminated, and will never be accessed beyond the length cbuf.
        !          1195:    This function will return the number of characters needed for the
        !          1196:    complete message, including the null byte.  If this is less than
        !          1197:    the cbytes argument, the buffer holds a truncated string.  */
        !          1198: extern int uuconf_error_string (void *uuconf_pglobal, int ierror,
        !          1199:                                char *zbuf, UUCONF_SIZE_T cbuf);
        !          1200: 
        !          1201: /* If UUCONF_ERROR_ERRNO is set in a return value, this function may
        !          1202:    be used to retrieve the errno value.  This will be the value of
        !          1203:    errno as set by the system function which failed.  However, some
        !          1204:    system functions, notably some stdio routines, may not set errno,
        !          1205:    in which case the value will be meaningless.  This function does
        !          1206:    not return a uuconf error code, and it cannot fail.  */
        !          1207: extern int uuconf_error_errno (void *uuconf_pglobal);
        !          1208: 
        !          1209: /* If UUCONF_ERROR_FILENAME is set in a return value, this function
        !          1210:    may be used to retrieve the file name.  This function does not
        !          1211:    return a uuconf error code, and it cannot fail.  The string that it
        !          1212:    returns a pointer to is not guaranteed to remain allocated across
        !          1213:    the next call to a uuconf function (other than one of the three
        !          1214:    error retrieving functions).  */
        !          1215: extern const char *uuconf_error_filename (void *uuconf_pglobal);
        !          1216: 
        !          1217: /* If UUCONF_ERROR_LINENO is set in a return value, this function may
        !          1218:    be used to retrieve the line number.  This function does not return
        !          1219:    a uuconf error code, and it cannot fail.  */
        !          1220: extern int uuconf_error_lineno (void *uuconf_pglobal);
        !          1221: 
        !          1222: #else /* ! UUCONF_ANSI_C */
        !          1223: 
        !          1224: extern int uuconf_error_string ();
        !          1225: extern int uuconf_error_errno ();
        !          1226: extern UUCONF_CONST char *uuconf_error_filename ();
        !          1227: extern int uuconf_error_lineno ();
        !          1228: 
        !          1229: #endif /* ! UUCONF_ANSI_C */
        !          1230: 
        !          1231: /* The uuconf package also provides a few functions which can accept
        !          1232:    commands and parcel them out according to a table.  These are
        !          1233:    publically visible, partially in the hopes that they will be
        !          1234:    useful, but mostly because the rest of the Taylor UUCP package uses
        !          1235:    them.  */
        !          1236: 
        !          1237: /* The types of entries allowed in a command table (struct
        !          1238:    uuconf_cmdtab).  Each type defines how a particular command is
        !          1239:    interpreted.  Each type will either assign a value to a variable or
        !          1240:    call a function.  In all cases, a line of input is parsed into
        !          1241:    separate fields, separated by whitespace; comments beginning with
        !          1242:    '#' are discarded, except that a '#' preceeded by a backslash is
        !          1243:    retained.  The first field is taken as the command to execute, and
        !          1244:    the remaining fields are its arguments.  */
        !          1245: 
        !          1246: /* A boolean value.  Used for a command which accepts a single
        !          1247:    argument, which must begin with 'y', 'Y', 't', or 'T' for true (1)
        !          1248:    or 'n', 'N', 'f', or 'F' for false (0).  The corresponding variable
        !          1249:    must be an int.  */
        !          1250: #define UUCONF_CMDTABTYPE_BOOLEAN (0x12)
        !          1251: 
        !          1252: /* An integer value.  Used for a command which accepts a single
        !          1253:    argument, which must be an integer.  The corresponding variable
        !          1254:    must be an int.  */
        !          1255: #define UUCONF_CMDTABTYPE_INT (0x22)
        !          1256: 
        !          1257: /* A long value.  Used for a command which accepts a single value,
        !          1258:    which must be an integer.  The corresponding variable must be a
        !          1259:    long.  */
        !          1260: #define UUCONF_CMDTABTYPE_LONG (0x32)
        !          1261: 
        !          1262: /* A string value.  Used for a command which accepts a string
        !          1263:    argument.  If there is no argument, the variable will be set to
        !          1264:    point to a zero byte.  Otherwise the variable will be set to point
        !          1265:    to the string.  The corresponding variable must be a char *.  The
        !          1266:    memory pointed to by the variable after it is set must not be
        !          1267:    modified.  */
        !          1268: #define UUCONF_CMDTABTYPE_STRING (0x40)
        !          1269: 
        !          1270: /* A full string value.  Used for a command which accepts a series of
        !          1271:    string arguments separated by whitespace.  The corresponding
        !          1272:    variable must be a char **.  It will be set to an NULL terminated
        !          1273:    array of the arguments.  The memory occupied by the array itself,
        !          1274:    and by the strings within it, must not be modified.  */
        !          1275: #define UUCONF_CMDTABTYPE_FULLSTRING (0x50)
        !          1276: 
        !          1277: /* A function.  If this command is encountered, the command and its
        !          1278:    arguments are passed to the corresponding function.  They are
        !          1279:    passed as an array of strings, in which the first string is the
        !          1280:    command itself, along with a count of strings.  This value may be
        !          1281:    or'red with a specific number of required arguments;
        !          1282:    UUCONF_CMDTABTYPE_FN | 1 accepts no additional arguments besides
        !          1283:    the command itself, UUCONF_CMDTABTYPE_FN | 2 accepts 1 argument,
        !          1284:    etc.  UUCONF_CMDTABTYPE_FN | 0, accepts any number of additional
        !          1285:    arguments.  */
        !          1286: #define UUCONF_CMDTABTYPE_FN (0x60)
        !          1287: 
        !          1288: /* A prefix function.  The string in the table is a prefix; if a
        !          1289:    command is encountered with the same prefix, the corresponding
        !          1290:    function will be called as for UUCONF_CMDTABTYPE_FN.  The number of
        !          1291:    arguments may be or'red in as with UUCONF_CMDTABTYPE_FN.  */
        !          1292: #define UUCONF_CMDTABTYPE_PREFIX (0x70)
        !          1293: 
        !          1294: /* This macro will return the particular type of a CMDTABTYPE.  */
        !          1295: #define UUCONF_TTYPE_CMDTABTYPE(i) ((i) & 0x70)
        !          1296: 
        !          1297: /* This macro will return the required number of arguments of a
        !          1298:    CMDTABTYPE.  If it is zero, there is no restriction.  */
        !          1299: #define UUCONF_CARGS_CMDTABTYPE(i) ((i) & 0x0f)
        !          1300: 
        !          1301: /* When a function is called via UUCONF_CMDTABTYPE_FN or
        !          1302:    UUCONF_CMDTABTYPE_PREFIX, it may return any uuconf error code (see
        !          1303:    above).  However, it will normally return one of the following:
        !          1304: 
        !          1305:    UUCONF_CMDTABRET_CONTINUE: Take no special action.  In particular,
        !          1306:    the arguments passed to the function may be overwritten or freed.
        !          1307: 
        !          1308:    UUCONF_CMDTABRET_KEEP: The memory occupied by the arguments passed
        !          1309:    to the function must be preserved.  Continue processing commands.
        !          1310: 
        !          1311:    UUCONF_CMDTABRET_EXIT: If reading commands from a file, stop
        !          1312:    processing.  The arguments passed to the function may be
        !          1313:    overwritten or freed.
        !          1314: 
        !          1315:    UUCONF_CMDTABRET_KEEP_AND_EXIT: Stop processing any file.  The
        !          1316:    memory occupied by the arguments passed to the function must be
        !          1317:    preserved.
        !          1318: 
        !          1319:    These values are interpreted by uuconf_cmd_file.  The
        !          1320:    uuconf_cmd_line and uuconf_cmd_args functions may return
        !          1321:    UUCONF_CMDTABRET_KEEP.  It they get an error, they will return an
        !          1322:    error code with UUCONF_CMDTABRET_EXIT set.  Also, of course, they
        !          1323:    may return any value that is returned by one of the user functions
        !          1324:    in the uuconf_cmdtab table.  */
        !          1325: 
        !          1326: /* UUCONF_CMDTABRET_KEEP and UUCONF_CMDTABRET_EXIT are defined above,
        !          1327:    with the error codes.  */
        !          1328: 
        !          1329: #define UUCONF_CMDTABRET_CONTINUE UUCONF_SUCCESS
        !          1330: #define UUCONF_CMDTABRET_KEEP_AND_EXIT \
        !          1331:   (UUCONF_CMDTABRET_KEEP | UUCONF_CMDTABRET_EXIT)
        !          1332: 
        !          1333: /* When a function is called via CMDTABTYPE_FN or CMDTABTYPE_PREFIX,
        !          1334:    it is passed five arguments.  This is the type of a pointer to such
        !          1335:    a function.  The uuconf global information structure is passed in
        !          1336:    for convenience in calling another uuconf function.  The arguments
        !          1337:    to the command are passed in (the command itself is the first
        !          1338:    argument) along with a count and the value of the pvar field from
        !          1339:    the uuconf_cmdtab structure in which the function pointer was
        !          1340:    found.  The pinfo argument to the function is taken from the
        !          1341:    argument to uuconf_cmd_*.  */
        !          1342: 
        !          1343: #if UUCONF_ANSI_C
        !          1344: typedef int (*uuconf_cmdtabfn) (void *uuconf_pglobal,
        !          1345:                                int uuconf_argc,
        !          1346:                                char **uuconf_argv,
        !          1347:                                void *uuconf_pvar,
        !          1348:                                void *uuconf_pinfo);
        !          1349: #else
        !          1350: typedef int (*uuconf_cmdtabfn) ();
        !          1351: #endif
        !          1352: 
        !          1353: /* A table of commands is an array of the following structures.  The
        !          1354:    final element of the table should have uuconf_zcmd == NULL.  */
        !          1355: 
        !          1356: struct uuconf_cmdtab
        !          1357: {
        !          1358:   /* Command name.  */
        !          1359:   UUCONF_CONST char *uuconf_zcmd;
        !          1360:   /* Command type (one of CMDTABTYPE_*).  */
        !          1361:   int uuconf_itype;
        !          1362:   /* If not CMDTABTYPE_FN or CMDTABTYPE_PREFIX, the address of the
        !          1363:      associated variable.  Otherwise, a pointer value to pass to the
        !          1364:      function pifn.  */
        !          1365:   UUCONF_POINTER uuconf_pvar;
        !          1366:   /* The function to call if CMDTABTYPE_FN or CMDTABTYPE_PREFIX.  */
        !          1367:   uuconf_cmdtabfn uuconf_pifn;
        !          1368: };
        !          1369: 
        !          1370: /* Bit flags to pass to uuconf_processcmds.  */
        !          1371: 
        !          1372: /* If set, case is significant when checking commands.  Normally case
        !          1373:    is ignored.  */
        !          1374: #define UUCONF_CMDTABFLAG_CASE (0x1)
        !          1375: 
        !          1376: /* If set, a backslash at the end of a line may be used to include the
        !          1377:    next physical line in the logical line.  */
        !          1378: #define UUCONF_CMDTABFLAG_BACKSLASH (0x2)
        !          1379: 
        !          1380: #if UUCONF_ANSI_C
        !          1381: 
        !          1382: /* Read commands from a file, look them up in a table, and take the
        !          1383:    appropriate action.  This continues reading lines from the file
        !          1384:    until EOF, or until a function returns with UUCONF_CMDTABRET_EXIT
        !          1385:    set, or until an error occurs.  The qtab argument must point to a
        !          1386:    table of struct uuconf_cmdtab; the last element in the table should
        !          1387:    have uuconf_zcmd == NULL.  When a UUCONF_CMDTABTYPE_FN or
        !          1388:    UUCONF_CMDTABTYPE_PREFIX command is found, the pinfo argument will
        !          1389:    be passed to the called function.  If an a command is found that is
        !          1390:    not in the table, then if pfiunknownfn is NULL the unknown command
        !          1391:    is ignored; otherwise it is passed to pfiunknownfn, which should
        !          1392:    return a uuconf return code which is handled as for any other
        !          1393:    function (the pvar argument to pfiunknownfn will always be NULL).
        !          1394:    The iflags argument is any combination of the above
        !          1395:    UUCONF_CMDTABFLAG bits.  The pblock argument may also be a memory
        !          1396:    block, as returned by uuconf_malloc_block (described below), in
        !          1397:    which case all memory preserved because of UUCONF_CMDTABRET_KEEP
        !          1398:    will be added to the block so that it may be freed later; it may
        !          1399:    also be NULL, in which case any such memory is permanently lost.
        !          1400: 
        !          1401:    This function initially sets the internal line number to 0, and
        !          1402:    then increments it as each line is read.  It is permitted for any
        !          1403:    called function to use the uuconf_lineno function to obtain it.  If
        !          1404:    this function is called when not at the start of a file, the value
        !          1405:    returned by uuconf_lineno (which is, in any case, only valid if an
        !          1406:    error code with UUCONF_ERROR_LINENO set is returned) must be
        !          1407:    adjusted by the caller.
        !          1408: 
        !          1409:    This returns a normal uuconf return value, as described above.  */
        !          1410: extern int uuconf_cmd_file (void *uuconf_pglobal,
        !          1411:                            FILE *uuconf_e,
        !          1412:                            const struct uuconf_cmdtab *uuconf_qtab,
        !          1413:                            void *uuconf_pinfo,
        !          1414:                            uuconf_cmdtabfn uuconf_pfiunknownfn,
        !          1415:                            int uuconf_iflags,
        !          1416:                            void *pblock);
        !          1417: 
        !          1418: /* This utility function is just like uuconf_cmd_file, except that it
        !          1419:    only operates on a single string.  If a function is called via
        !          1420:    qtab, its return value will be the return value of this function.
        !          1421:    UUCONF_CMDTABFLAG_BACKSLASH is ignored in iflags.  The string z is
        !          1422:    modified in place.  The return value may include the
        !          1423:    UUCONF_CMDTABRET_KEEP and, on error, the UUCONF_CMDTABRET_EXIT
        !          1424:    bits, which should be honored by the calling code.  */
        !          1425: extern int uuconf_cmd_line (void *uuconf_pglobal,
        !          1426:                            char *uuconf_z,
        !          1427:                            const struct uuconf_cmdtab *uuconf_qtab,
        !          1428:                            void *uuconf_pinfo,
        !          1429:                            uuconf_cmdtabfn uuconf_pfiunknownfn,
        !          1430:                            int uuconf_iflags,
        !          1431:                            void *pblock);
        !          1432: 
        !          1433: /* This utility function is just like uuconf_cmd_line, except it is
        !          1434:    given a list of already parsed arguments.  */
        !          1435: extern int uuconf_cmd_args (void *uuconf_pglobal,
        !          1436:                            int uuconf_cargs,
        !          1437:                            char **uuconf_pzargs,
        !          1438:                            const struct uuconf_cmdtab *uuconf_qtab,
        !          1439:                            void *uuconf_pinfo,
        !          1440:                            uuconf_cmdtabfn uuconf_pfiunknownfn,
        !          1441:                            int uuconf_iflags,
        !          1442:                            void *pblock);
        !          1443: 
        !          1444: #else /* ! UUCONF_ANSI_C */
        !          1445: 
        !          1446: extern int uuconf_cmd_file ();
        !          1447: extern int uuconf_cmd_line ();
        !          1448: extern int uuconf_cmd_args ();
        !          1449: 
        !          1450: #endif /* ! UUCONF_ANSI_C */
        !          1451: 
        !          1452: #if UUCONF_ANSI_C
        !          1453: 
        !          1454: /* The uuconf_cmd_file function may allocate memory permanently, as
        !          1455:    for setting a UUCONF_CMDTABTYPE_STRING value, in ways which are
        !          1456:    difficult to free up.  A memory block may be used to record all
        !          1457:    allocated memory, so that it can all be freed up at once at some
        !          1458:    later time.  These functions do not take a uuconf global pointer,
        !          1459:    and are independent of the rest of the uuconf library.  */
        !          1460: 
        !          1461: /* Allocate a block of memory.  If this returns NULL, then malloc
        !          1462:    returned NULL, and errno is whatever malloc set it to.  */
        !          1463: extern void *uuconf_malloc_block (void);
        !          1464: 
        !          1465: /* Allocate memory within a memory block.  If this returns NULL, then
        !          1466:    malloc returned NULL, and errno is whatever malloc set it to.  */
        !          1467: extern void *uuconf_malloc (void *uuconf_pblock,
        !          1468:                            UUCONF_SIZE_T uuconf_cbytes);
        !          1469: 
        !          1470: /* Add a block returned by the generic malloc routine to a memory
        !          1471:    block.  This returns zero on success, non-zero on failure.  If this
        !          1472:    fails (returns non-zero), then malloc returned NULL, and errno is
        !          1473:    whatever malloc set it to.  */
        !          1474: extern int uuconf_add_block (void *uuconf_pblock, void *uuconf_padd);
        !          1475: 
        !          1476: /* Free a value returned by uuconf_malloc from a memory block.  In the
        !          1477:    current implementation, this will normally not do anything, but it
        !          1478:    doesn't hurt.  No errors can occur.  */
        !          1479: extern void uuconf_free (void *uuconf_pblock, void *uuconf_pfree);
        !          1480: 
        !          1481: /* Free an entire memory block, including all values returned by
        !          1482:    uuconf_malloc from it and all values added to it with
        !          1483:    uuconf_add_block.  No errors can occur.  */
        !          1484: extern void uuconf_free_block (void *uuconf_pblock);
        !          1485: 
        !          1486: #else /* ! UUCONF_ANSI_C */
        !          1487: 
        !          1488: extern UUCONF_POINTER uuconf_malloc_block ();
        !          1489: extern UUCONF_POINTER uuconf_malloc ();
        !          1490: extern int uuconf_add_block ();
        !          1491: extern /* void */ uuconf_free ();
        !          1492: extern /* void */ uuconf_free_block ();
        !          1493: 
        !          1494: #endif /* ! UUCONF_ANSI_C */
        !          1495: 
        !          1496: #endif /* ! defined (UUCONF_H) */

unix.superglobalmegacorp.com

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