home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
rtsi.com
/
2014.01.www.rtsi.com.tar
/
www.rtsi.com
/
OS9
/
OSK
/
TELECOM
/
OSKBox.lzh
/
MAILBOX
/
CC
/
editusers.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-02-03
|
4KB
|
185 lines
#include <stdio.h>
#include <ctype.h>
#include "mailbox.h"
struct userstruct user;
main (argc, argv)
char *argv[];
{
char line[256];
long user_rec;
int i, userfile, found;
int mod = 0;
char *noname = "new user";
for (i = 1; i < argc; i++)
upper (argv[i]);
chdir (HOME);
if ((userfile = open ("users", 1)) <= 0) {
printf ("Error: can't open user file\n");
exit (0);
}
found = 0;
while (1) {
user_rec = lseek (userfile, 0L, 1);
if (read (userfile, &user, sizeof (user)) == 0) break;
if (strcmp (user.uscall, argv[1]) == 0) {
found = 1;
break;
}
}
close (userfile);
if (!found) {
printf ("Can't find %s, create him? ", argv[1]);
gets (line);
if (toupper (*line) != 'Y')
exit (0);
strcpy (user.usname, noname);
strcpy (user.uscall, argv[1]);
user.usopt = 0;
user.ustime = 0;
user.usdate = 0;
user.uscnt = 0;
user.usnmr = 0;
userfile = open ("users", 3);
user_rec = lseek (userfile, 0L, 2);
write (userfile, &user, sizeof (user));
close (userfile);
}
printuser (1);
printf ("\n");
printf ("Deleted user (%c): ", (user.usopt & ISDELETED) ? 'Y' : 'N');
gets (line);
if (toupper (*line) == 'Y') {
user.usopt |= ISDELETED;
goto modified;
}
else if (toupper (*line) == 'N') {
user.usopt &= ~ISDELETED;
mod = 1;
}
printf ("Callsign (%s): ", user.uscall);
gets (line);
if (*line) {
upper (line);
strncpy (user.uscall, line, sizeof (user.uscall));
mod = 1;
}
printf ("Last message (%d): ", user.usnmr);
gets (line);
if (*line) {
user.usnmr = atoi (line);
mod = 1;
}
printf ("Expert (%c): ", (user.usopt & ISEXPERT) ? 'Y' : 'N');
gets (line);
if (toupper (*line) == 'Y') {
user.usopt |= ISEXPERT;
mod = 1;
}
else if (toupper (*line) == 'N') {
user.usopt &= ~ISEXPERT;
mod = 1;
}
printf ("Persona non grata (%c): ", (user.usopt & ISPNG) ? 'Y' : 'N');
gets (line);
if (toupper (*line) == 'Y') {
user.usopt |= ISPNG;
mod = 1;
}
else if (toupper (*line) == 'N') {
user.usopt &= ~ISPNG;
mod = 1;
}
printf ("Is a BBS (%c): ", (user.usopt & ISBBS) ? 'Y' : 'N');
gets (line);
if (toupper (*line) == 'Y') {
user.usopt |= ISBBS;
mod = 1;
}
else if (toupper (*line) == 'N') {
user.usopt &= ~ISBBS;
mod = 1;
}
printf ("Is a SuperUser (%c): ", (user.usopt & ISSUPER) ? 'Y' : 'N');
gets (line);
if (toupper (*line) == 'Y') {
user.usopt |= ISSUPER;
mod = 1;
}
else if (toupper (*line) == 'N') {
user.usopt &= ~ISSUPER;
mod = 1;
}
printf ("Is Stupid (%c): ", (user.usopt & ISSTUPID) ? 'Y' : 'N');
gets (line);
if (toupper (*line) == 'Y') {
user.usopt |= ISSTUPID;
mod = 1;
}
else if (toupper (*line) == 'N') {
user.usopt &= ~ISSTUPID;
mod = 1;
}
printf ("Name (%s): ", user.usname);
gets (line);
if (*line) {
strncpy (user.usname, line, sizeof (user.usname));
mod = 1;
}
printf ("Path (%s): ", user.uspath);
gets (line);
if (*line) {
upper (line);
strncpy (user.uspath, line, sizeof (user.uspath));
mod = 1;
}
if (mod) {
modified:
userfile = open ("users", 3);
lseek (userfile, user_rec, 0);
write (userfile, &user, sizeof (user));
close (userfile);
printuser (1);
}
}
printuser (flag)
{
char *ctl =
"%-6.6s %02d%02d%02d %02d%02d %04.4d %6.6d %2d%c%c%c%c%c %-12.12s%s\n";
if (flag) {
printf ("Call Date Time Logd Msg Hm BBS SXPBSS Name Path\n");
flag = 1;
}
printf (ctl, user.uscall, (user.usdate >> 16) % 100,
(user.usdate >> 8) & 0xff, user.usdate & 0xff,
(user.ustime >> 16) & 0xff, (user.ustime >> 8) & 0xff,
user.uscnt, user.usnmr, user.usssid, (user.usopt & ISEXPERT) ? 'Y' : 'N',
(user.usopt & ISPNG) ? 'Y' : 'N',
(user.usopt & ISBBS) ? 'Y' : 'N',
(user.usopt & ISSUPER) ? 'Y' : 'N',
(user.usopt & ISSTUPID) ? 'Y' : 'N',
user.usname, user.uspath);
}
upper (s)
char *s;
{
while (*s) {
*s = toupper (*s);
s++;
}
}
strncpy (s1, s2, len)
char *s1, *s2;
{
while (*s2 && --len)
*s1++ = *s2++;
*s1 = '\0';
}