home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 4 / CDPD_IV.bin / networking / uucp / amigauucpsrc / dnews / subs.c < prev    next >
C/C++ Source or Header  |  1994-06-29  |  2KB  |  133 lines

  1.  
  2. /*
  3.  *  SUBS.C
  4.  */
  5.  
  6. #include <exec/types.h>
  7. #include "defs.h"
  8. #include <libraries/dos.h>
  9. #include <fcntl.h>
  10.  
  11. Prototype void FindUser(char *, int);
  12. Prototype void ScanNewsDirs(void (*)(), long);
  13. Prototype char *FindField(FILE *, char *);
  14. Prototype int  FileExists(char *);
  15.  
  16. void ScanSubDir(void (*)(), long, char *, short, char *);
  17.  
  18. typedef struct FileInfoBlock FIB;
  19.  
  20. void
  21. FindUser(buf, bufsiz)
  22. char *buf;
  23. int bufsiz;
  24. {
  25.     char *user;
  26.  
  27.     user = GetUserName();
  28.  
  29.     if (user == NULL) {
  30.     user = "FuBar";
  31.     printf("No UserName env: var or Config var !\n");
  32.     }
  33.     strncpy(buf, user, bufsiz - 1);
  34.     buf[bufsiz] = 0;
  35. }
  36.  
  37. void
  38. ScanNewsDirs(vect, arg)
  39. void (*vect)();
  40. long arg;
  41. {
  42.     BPTR lock;
  43.     BPTR oldLock;
  44.     __aligned FIB fib;
  45.     char *cfdir = GetConfigDir(UUNEWS);
  46.     char *tmp;
  47.  
  48.     if (tmp = malloc(1024)) {
  49.     if (lock = Lock(cfdir, SHARED_LOCK)) {
  50.         oldLock = CurrentDir(lock);
  51.  
  52.         if (Examine(lock, &fib)) {
  53.         while (ExNext(lock, &fib)) {
  54.             if (fib.fib_DirEntryType > 0)
  55.             ScanSubDir(vect, arg, tmp, 0, fib.fib_FileName);
  56.         }
  57.         }
  58.         CurrentDir(oldLock);
  59.         UnLock(lock);
  60.     }
  61.     }
  62. }
  63.  
  64. void
  65. ScanSubDir(vect, arg, buf, i, segName)
  66. void (*vect)();
  67. long arg;
  68. char *buf;
  69. short i;
  70. char *segName;
  71. {
  72.     BPTR lock;
  73.     BPTR oldLock;
  74.     __aligned FIB fib;
  75.  
  76.     if (lock = Lock(segName, SHARED_LOCK)) {
  77.     i += sprintf(buf + i, "%s%s", ((i == 0) ? "" : "."), segName);
  78.  
  79.     (*vect)(segName, buf, arg);
  80.  
  81.     oldLock = CurrentDir(lock);
  82.     if (Examine(lock, &fib)) {
  83.         while (ExNext(lock, &fib)) {
  84.         if (fib.fib_DirEntryType > 0) {
  85.             ScanSubDir(vect, arg, buf, i, fib.fib_FileName);
  86.             buf[i] = 0;
  87.         }
  88.         }
  89.     }
  90.     CurrentDir(oldLock);
  91.     UnLock(lock);
  92.     }
  93. }
  94.  
  95.  
  96. char *
  97. FindField(fi, field)
  98. FILE *fi;
  99. char *field;
  100. {
  101.     short len = strlen(field);
  102.  
  103.     if (fi) {
  104.     rewind(fi);
  105.     while (fgets(TmpBuf, sizeof(TmpBuf), fi) && TmpBuf[0] != '\n') {
  106.         if (strnicmp(TmpBuf, field, len) == 0) {
  107.         field = TmpBuf + len;
  108.         while (*field == ' ' || *field == 9)
  109.             ++field;
  110.         for (len = strlen(field) - 1; len >= 0 && (field[len] == ' ' || field[len] == 9 || field[len] == '\n'); --len);
  111.         ++len;
  112.         field[len] = 0;
  113.         return(strdup(field));
  114.         }
  115.     }
  116.     }
  117.     return(NULL);
  118. }
  119.  
  120. int
  121. FileExists(file)
  122. char *file;
  123. {
  124.     int fd;
  125.  
  126.     if ((fd = open(file, O_RDONLY)) >= 0) {
  127.     close(fd);
  128.     return(1);
  129.     }
  130.     return(0);
  131. }
  132.  
  133.