rohrpost

A commandline mail client to change the world as we see it.
git clone git://r-36.net/rohrpost
Log | Files | Refs | LICENSE

rohrpost.c (2303B)


      1 /*
      2  * Copy me if you can.
      3  * by 20h
      4  */
      5 
      6 #include <unistd.h>
      7 #include <stdio.h>
      8 #include <stdarg.h>
      9 #include <stdlib.h>
     10 #include <string.h>
     11 
     12 #include "ind.h"
     13 #include "arg.h"
     14 #include "cfg.h"
     15 #include "mark.h"
     16 #include "cur.h"
     17 #include "select.h"
     18 #include "sieve.h"
     19 #include "folder.h"
     20 #include "inc.h"
     21 #include "stats.h"
     22 #include "capability.h"
     23 #include "pick.h"
     24 #include "flag.h"
     25 #include "copy.h"
     26 #include "remove.h"
     27 #include "scan.h"
     28 #include "view.h"
     29 #include "part.h"
     30 #include "add.h"
     31 #include "ids.h"
     32 #include "mime.h"
     33 #include "util.h"
     34 #include "path.h"
     35 
     36 void
     37 usage(char *argv0)
     38 {
     39 	die("usage: %s [-hil] cmd [args] [range]\n", argv0);
     40 }
     41 
     42 struct command {
     43 	char *cmd;
     44 	int flags;
     45 	int (*main)(int, char **);
     46 };
     47 
     48 /* The flag whether to output it on the -i(nstall) request. */
     49 enum {
     50 	DONTINSTALL = 0x00,
     51 	DOINSTALL = 0x01
     52 };
     53 
     54 struct command cmds[] = {
     55 	{"rpadd", DOINSTALL, addmain},
     56 	{"rpcfg", DOINSTALL, configmain},
     57 	{"rpcp", DOINSTALL, copymain},
     58 	{"rpcap", DOINSTALL, capabilitymain},
     59 	{"rpflag", DONTINSTALL, flagmain},
     60 	{"rpfold", DOINSTALL, foldermain},
     61 	{"rpids", DOINSTALL, idsmain},
     62 	{"rpmv", DOINSTALL, movemain},
     63 	{"rppart", DOINSTALL, partmain},
     64 	{"rppick", DOINSTALL, pickmain},
     65 	{"rpscan", DONTINSTALL, scanmain},
     66 	{"rpsieve", DOINSTALL, sievemain},
     67 	{"rpstats", DOINSTALL, statsmain},
     68 	{"rputil", DOINSTALL, utilmain},
     69 	{"rpcur", DOINSTALL, curmain},
     70 	{"rpinc", DONTINSTALL, incmain},
     71 	{"rpmark", DOINSTALL, markmain},
     72 	{"rprm", DOINSTALL, removemain},
     73 	{"rpsel", DOINSTALL, selectmain},
     74 	{"rpview", DONTINSTALL, viewmain},
     75 	{"rppath", DOINSTALL, pathmain},
     76 };
     77 
     78 int
     79 main(int argc, char *argv[])
     80 {
     81 	int i;
     82 	char *lsl, *argv0;
     83 
     84 	for (i = 0; i < nelem(cmds); i++) {
     85 		lsl = strrchr(argv[0], '/');
     86 		if (lsl == NULL) {
     87 			lsl = argv[0];
     88 		} else {
     89 			lsl++;
     90 		}
     91 
     92 		if (!strcmp(lsl, cmds[i].cmd))
     93 			return cmds[i].main(argc, argv);
     94 	}
     95 
     96 	ARGBEGIN(argv0) {
     97 	case 'i':
     98 		for (i = 0; i < nelem(cmds); i++) {
     99 			if (cmds[i].flags & DOINSTALL)
    100 				printf("%s\n", cmds[i].cmd);
    101 		}
    102 		return 0;
    103 	case 'l':
    104 		for (i = 0; i < nelem(cmds); i++)
    105 			printf("%s\n", cmds[i].cmd);
    106 		return 0;
    107 	default:
    108 		usage(argv0);
    109 	} ARGEND;
    110 
    111 	if (argc > 0) {
    112 		for (i = 0; i < nelem(cmds); i++) {
    113 			if (!strcmp(argv[0], cmds[i].cmd))
    114 				return cmds[i].main(argc, argv);
    115 		}
    116 	}
    117 
    118 	usage(argv0);
    119 
    120 	return 1;
    121 }
    122