]> code.citadel.org Git - citadel.git/blob - citadel/userlist.c
2bf663c05a76376f31d66cce133a7912590a8db0
[citadel.git] / citadel / userlist.c
1 #include <stdlib.h>
2 #include <unistd.h>
3 #include <stdio.h>
4 #include <string.h>
5 #include <time.h>
6 #include "citadel.h"
7 #include <unistd.h>
8 #include "ipc.h"
9
10 /*
11  * num_parms()  -  discover number of parameters...
12  */
13 int num_parms(char *source)
14 {
15         int a;
16         int count = 1;
17
18         for (a=0; a<strlen(source); ++a) 
19                 if (source[a]=='|') ++count;
20         return(count);
21         }
22
23
24 /*
25  * extract()  -  extract a parameter from a series of "|" separated...
26  */
27 void extract(char *dest, char *source, int parmnum)
28 {
29         char buf[256];
30         int count = 0;
31         int n;
32
33         n = num_parms(source);
34
35         if (parmnum >= n) {
36                 strcpy(dest,"");
37                 return;
38                 }
39         strcpy(buf,source);
40         if ( (parmnum == 0) && (n == 1) ) {
41                 strcpy(dest,buf);
42                 return;
43                 }
44
45         while (count++ < parmnum) do {
46                 strcpy(buf,&buf[1]);
47                 } while( (strlen(buf)>0) && (buf[0]!='|') );
48         if (buf[0]=='|') strcpy(buf,&buf[1]);
49         for (count = 0; count<strlen(buf); ++count)
50                 if (buf[count] == '|') buf[count] = 0;
51         strcpy(dest,buf);
52         }
53
54 /*
55  * extract_int()  -  extract an int parm w/o supplying a buffer
56  */
57 int extract_int(char *source, int parmnum)
58 {
59         char buf[256];
60         
61         extract(buf,source,parmnum);
62         return(atoi(buf));
63         }
64
65
66 /*
67  * extract_long()  -  extract an long parm w/o supplying a buffer
68  */
69 long extract_long(char *source, int parmnum)
70 {
71         char buf[256];
72         
73         extract(buf,source,parmnum);
74         return(atol(buf));
75         }
76
77
78 void logoff(int code)
79 {
80         exit(code);
81         }
82
83 void userlist(void) { 
84         char buf[256];
85         char fl[256];
86         struct tm *tmbuf;
87         long lc;
88
89         serv_puts("LIST");
90         serv_gets(buf);
91         if (buf[0]!='1') {
92                 printf("%s\n",&buf[4]);
93                 return;
94                 }
95         printf("       User Name           Num  L  LastCall  Calls Posts\n");
96         printf("------------------------- ----- - ---------- ----- -----\n");
97         while (serv_gets(buf), strcmp(buf,"000")) {
98                 extract(fl,buf,0);
99                 printf("%-25s ",fl);
100                 printf("%5ld %d ",extract_long(buf,2),
101                         extract_int(buf,1));
102                 lc = extract_long(buf,3);
103                 tmbuf = (struct tm *)localtime(&lc);
104                 printf("%02d/%02d/%04d ",
105                         (tmbuf->tm_mon+1),
106                         tmbuf->tm_mday,
107                         (tmbuf->tm_year + 1900));
108                 printf("%5ld %5ld\n",
109                         extract_long(buf,4),extract_long(buf,5));
110                 }
111         printf("\n");
112         }
113
114
115 int main(int argc, char **argv)
116 {
117         char buf[256];
118
119         attach_to_server(argc,argv);
120         serv_gets(buf);
121         if ((buf[0]!='2')&&(strncmp(buf,"551",3))) {
122                 fprintf(stderr,"%s: %s\n",argv[0],&buf[4]);
123                 logoff(atoi(buf));
124                 }
125
126         userlist();
127
128         serv_puts("QUIT");
129         serv_gets(buf);
130         exit(0);
131         }
132
133
134 #ifndef HAVE_STRERROR
135 /*
136  * replacement strerror() for systems that don't have it
137  */
138 char *strerror(int e)
139 {
140         static char buf[32];
141
142         sprintf(buf,"errno = %d",e);
143         return(buf);
144         }
145 #endif
146
147
148
149
150