/*
 * PrintGroups.c - Print all groups in a message base
 *
 * (c) 1992 Klaus Melchior, Stefan Becker
 *
 */

#define UMS_V11_NAMES_ONLY

#include <proto/ums.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

extern struct Library *UMSBase;

int main(int argc, char *argv[])
{
 UMSAccount *account;

 /* Check arguments */
 if (argc<3) {
  fprintf(stderr,"Usage: %s <user> <passwd>\n",argv[0]);
  exit(20);
 }

 /* Login */
 if (account=UMSLogin(argv[1],argv[2])) {
  char *group; /* Pointer to group name */

  /* First group: all private messages */
  if (group=strdup("")) {
   UMSMsgNum num=0;

   /* Print header */
   printf("Group list:\n");

   /* Set local bit 0 in all messages with NO ViewAccess */
   UMSSelectTags(account,UMSTAG_SelWriteLocal, TRUE,
                         UMSTAG_SelSet,        1,
                         UMSTAG_SelQuick,      TRUE,
                         UMSTAG_SelMask,       UMSUSTATF_ViewAccess,
                         UMSTAG_SelMatch,      0,
                         TAG_DONE);

   /* For all groups */
   for (;;) {
    /* Set local bit 0 on all messages in message group */
    UMSSelectTags(account,UMSTAG_SelWriteLocal, TRUE,
                          UMSTAG_SelSet,        1,
                          UMSTAG_SelQuick,      TRUE,
                          UMSTAG_WGroup,        group,
                          TAG_DONE);

    /* Free string */
    free(group);

    /* Search a message which has local bit 0 NOT set */
    if ((num=UMSSearchTags(account,UMSTAG_SearchLocal, TRUE,
                                   UMSTAG_SearchMask,  1,
                                   UMSTAG_SearchMatch, 0,
                                   UMSTAG_SearchQuick, TRUE,
                                   TAG_DONE)) == 0)
     /* No message found --> leave loop */
     break;

    /* Get group name */
    if (!UMSReadMsgTags(account,UMSTAG_RMsgNum, num,
                                UMSTAG_RGroup,  &group,
                                TAG_DONE)) {
     /* Print error message and quit */
     fprintf(stderr,"Error in ReadUMSMsgTags()!\n");
     break;
    }

    /* Copy group name */
    if (!(group=strdup(group))) {
     fprintf(stderr,"Couldn't copy group name !\n");
     break;
    }

    /* Print group name */
    printf("Group: %s\n",group);

    /* Free UMS message */
    UMSFreeMsg(account,num);
   }
  }

  /* Logout */
  UMSLogout(account);
 } else
  fprintf(stderr,"Couldn't login as '%s'!\n",argv[1]);

 exit(0);
}
