home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume3 / pcmail / part04 / cico.c next >
C/C++ Source or Header  |  1989-02-03  |  5KB  |  166 lines

  1. /*++
  2. /* NAME
  3. /*      cico 1
  4. /* SUMMARY
  5. /*      uucp file transfer
  6. /* PROJECT
  7. /*      pc-mail
  8. /* PACKAGE
  9. /*      cico
  10. /* SYNOPSIS
  11. /*      cico -p password [-d debuglevel]
  12. /* DESCRIPTION
  13. /*      cico is a program that connects to a real unix host
  14. /*      for exchange of spool files. It is a simplified
  15. /*    version of the unix uucico (copy-in-copy-out) program.
  16. /*
  17. /*    Options:
  18. /* .TP
  19. /*    -p password
  20. /*    The password that cico will use when logging in on the
  21. /*    unix host.
  22. /* .TP
  23. /*    -d debuglevel
  24. /*      Set the debugging level. It makes both the local cico
  25. /*      and the remote uucico more verbose. Default debugging
  26. /*    level is 0.
  27. /* FILES
  28. /*      cico manipulates various files in the spool directory.
  29. /*    See path(5) for the implementation of the message data base.
  30. /*
  31. /*      LOGFILE         transaction logging
  32. /*    s00000        communications parameters
  33. /* SEE ALSO
  34. /*      comm(5)        communications parameters
  35. /*    status(5)    error returns
  36. /* DIAGNOSTICS
  37. /*      The program terminates with a non-zero exit status if there
  38. /*      were problems. The error status codes can be translated
  39. /*    to meaningful messages (see status(5)).
  40. /*      More technical messages are written to the logfile.
  41. /* BUGS
  42. /*    cico only supports the functions needed for exchange of
  43. /*    electronic mail. Every incoming data file is treated as
  44. /*    if it were a mail message for the user of the pc.
  45. /* AUTHOR(S)
  46. /*      W.Z. Venema
  47. /*      Eindhoven University of Technology
  48. /*      Department of Mathematics and Computer Science
  49. /*      Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  50. /* CREATION DATE
  51. /*      Sat Mar 28 19:58:06 GMT+1:00 1987
  52. /* LAST MODIFICATION
  53. /*    Wed Apr  6 00:18:29 MET 1988
  54. /* VERSION/RELEASE
  55. /*    1.6
  56. /*--*/
  57.  
  58. #include <setjmp.h>
  59. #include "defs.h"
  60. #include "logs.h"
  61. #include "params.h"
  62. #include "comm.h"
  63. #include "status.h"
  64. #include "path.h"
  65.  
  66. public int *systrap;                            /* panic button */
  67. public int dflag = 0;                           /* debug flag */
  68. #ifdef    unix
  69.     public int Debug = 0;            /* UUCP compatibility */
  70. #endif
  71.  
  72. hidden void parse_args(),sanity();              /* forward declarations */
  73.  
  74. /* main program - parse command line options and pull the ropes */
  75.  
  76. main(argc,argv)
  77. int argc;
  78. char **argv;
  79. {
  80.     register int status;                        /* most recent error code */
  81.     jmp_buf mainbuf;                            /* catch-all */
  82.  
  83.     parse_args(argc,argv);                      /* process cmd arguments */
  84.  
  85.     sanity();                                   /* check systems parameters */
  86.  
  87.     if (setjmp(systrap = mainbuf))              /* safety net in case of */
  88.     exit(E_CONFUSED);                       /* too many long jumps */
  89.  
  90.     xopen();                                    /* init comm. line */
  91.     if ((status = connect()) == 0               /* login on remote system */
  92.     && (status = startproto()) == 0) {          /* start comm. protocol */
  93.     status = switcher(MASTER);              /* use the protocol */
  94.     endproto();                             /* terminate the protocol */
  95.     }                                           /* (ignore errors) */
  96.     disconnect();                               /* as it says */
  97.     xclose();                                   /* close comm. line */
  98.  
  99.     exit(status);
  100.     /* NOTREACHED */
  101. }
  102.  
  103. /* parse_args - take care of command-line arguments */
  104.  
  105. hidden void parse_args(argc,argv)
  106. int argc;
  107. char **argv;
  108. {
  109.     while (--argc && *++argv && **argv == '-') {
  110.     switch (*++*argv) {
  111.     case 'p':
  112.         if (--argc == 0)
  113.         usage("missing password argument");
  114.         password = *++argv;
  115.         break;
  116.     case 'd':
  117.         if (--argc == 0)
  118.         usage("missing debugging level argument");
  119.         sscanf(*++argv,"%d",&dflag);
  120. #ifdef    unix
  121.         Debug = 
  122. #endif
  123.         dflag = ((dflag < 0 ? 0 : dflag) > 10 ? 10 : dflag);
  124.         break;
  125.     default:
  126.         usage(strcons("invalid option: -%s",*argv));
  127.         break;
  128.     }
  129.     }
  130.     if (argc > 0)
  131.     usage(strcons("unexpected argument: %s",*argv));
  132. }
  133.  
  134. /* sanity - some preliminary work; mainly checks on sanity */
  135.  
  136. hidden void sanity()
  137. {
  138.     register int status;
  139.     register Info *ip;
  140.  
  141.     if (status = pathinit())                            /* check environment */
  142.     exit(status);                                   /* bad environment */
  143.  
  144.     if (status = open_log())                            /* check the logfile */
  145.     exit(status);                                   /* cannot write */
  146.  
  147.     for (ip = comm = getparams(); ip->ident; ip++) {    /* check param. file */
  148.     if (ip->strval == 0 || ip->strval[0] == '\0')
  149.         exit(E_BADSETUP);                           /* incomplete setup */
  150.     debug(6)("%s %s\n",ip->ident,ip->strval ? ip->strval : "");
  151.     }
  152.     if (password == 0 || *password == 0) 
  153.     usage("no password specified");                 /* no password */
  154.  
  155.     strcpy(rmthost,ip[P_HOST].strval);            /* remote host name */
  156. }
  157.  
  158. /* usage - print error message and usage string */
  159.  
  160. usage(str)
  161. char *str;
  162. {
  163.     fprintf(stderr,"%s\nusage: cico -p password [-d debuglevel]\n",str);
  164.     exit(2);
  165. }
  166.