cur.c - rohrpost - A commandline mail client to change the world as we see it.
(HTM) git clone git://r-36.net/rohrpost
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
cur.c (1444B)
---
1 /*
2 * Copy me if you can.
3 * by 20h
4 */
5
6 #include <unistd.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <stdarg.h>
10
11 #include "ind.h"
12 #include "arg.h"
13 #include "cfg.h"
14 #include "llist.h"
15 #include "cur.h"
16 #include "mark.h"
17 #include "inc.h"
18
19 void
20 curusage(char *argv0)
21 {
22 die("usage: %s [-h] [-c cfg] [msgid]\n", argv0);
23 }
24
25 int
26 curmain(int argc, char *argv[])
27 {
28 config_t *cfg;
29 mark_t *marks;
30 llistelem_t *curseq;
31 char *msgss, *selected, *cfgn, *argv0;
32 int msgs, setn;
33
34 cfgn = NULL;
35
36 ARGBEGIN(argv0) {
37 case 'c':
38 cfgn = EARGF(curusage(argv0));
39 break;
40 default:
41 curusage(argv0);
42 } ARGEND;
43
44 cfg = config_init(cfgn);
45 marks = mark_cfg(cfg);
46 config_free(cfg);
47
48 if (marks == NULL) {
49 fprintf(stderr, "Can not proceed without a selected "
50 "mailbox.\n");
51 return 1;
52 }
53
54 if (argc > 0) {
55 setn = atoi(argv[0]);
56 if (setn < 1)
57 setn = 1;
58
59 selected = config_checkgetstr(cfg, "selected");
60 msgss = inc_getstr(cfgn, selected, "messages");
61 if (msgss != NULL) {
62 msgs = atoi(msgss);
63 if (msgs > 0 && setn > msgs)
64 setn = msgs;
65 free(msgss);
66 }
67 free(selected);
68
69 msgss = smprintf("%d", setn);
70 mark_set(marks, "cur", msgss);
71 free(msgss);
72 llistelem_printdata(mark_get(marks, "cur"));
73 mark_stop(marks);
74 } else {
75 curseq = mark_get(marks, "cur");
76 if (curseq == NULL) {
77 fprintf(stderr, "No current message id is set at "
78 "all.\n");
79 return 1;
80 }
81 llistelem_printdata(curseq);
82 }
83
84 return 0;
85 }
86