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