#include #include #include #include #include #include #include typedef int (*func) (...); extern "C" { int mail$mailfile_begin (...); int mail$mailfile_end (...); int mail$mailfile_open (...); int mail$mailfile_close (...); int mail$mailfile_info_file (...); int mail$message_begin (...); int mail$message_select (...); int mail$message_end (...); } typedef struct itmlst { short buffer_length; short item_code; long buffer_address; long return_length_address; } ITMLST; struct node { struct node *next; /* Next folder name node */ char *folder_name; /* Zero terminated folder name */ }; int folder_routine(struct node *list, struct dsc$descriptor *name) { if (name->dsc$w_length) { while (list->next) list = list->next; list->next = (node *) malloc(sizeof(struct node)); list = list->next; list->next = 0; list->folder_name = (char *) malloc(name->dsc$w_length + 1); strncpy(list->folder_name,name->dsc$a_pointer,name->dsc$w_length); list->folder_name[name->dsc$w_length] = '\0'; } return(SS$_NORMAL); } void main (void) { struct node list = {0,0}; int message_context = 0, file_context = 0, messages_selected = 0, total_folders = 0, total_messages = 0; ITMLST nulllist[] = {{0,0,0,0}}, message_in_itmlst[] = { {sizeof(file_context),MAIL$_MESSAGE_FILE_CTX,(long) &file_context,0}, {0,0,0,0}}, mailfile_info_itmlst[] = { {4,MAIL$_MAILFILE_FOLDER_ROUTINE,(long) ((func) folder_routine),0}, {4,MAIL$_MAILFILE_USER_DATA,(long) &list,0}, {0,0,0,0}}, message_select_in_itmlst[] = { {0,MAIL$_MESSAGE_FOLDER,0,0}, {0,0,0,0}}, message_select_out_itmlst[] = { {sizeof(messages_selected),MAIL$_MESSAGE_SELECTED,(long) &messages_selected,0}, {0,0,0,0}}; if (mail$mailfile_begin(&file_context, nulllist, nulllist) == SS$_NORMAL) { if (mail$mailfile_open(&file_context, nulllist, nulllist) == SS$_NORMAL) { if (mail$mailfile_info_file(&file_context,mailfile_info_itmlst,nulllist) == SS$_NORMAL) { if (mail$message_begin(&message_context,message_in_itmlst,nulllist) == SS$_NORMAL) { struct node *tmp = &list; while(tmp->next) { tmp = tmp->next; message_select_in_itmlst[0].buffer_address = (long) tmp->folder_name; message_select_in_itmlst[0].buffer_length = strlen(tmp->folder_name); if (mail$message_select(&message_context,message_select_in_itmlst,message_select_out_itmlst) == SS$_NORMAL) { printf("Folder %s has %d messages\n",tmp->folder_name, messages_selected); total_messages += messages_selected; total_folders++; } } printf("Total of %d messages in %d folders\n",total_messages, total_folders); } mail$message_end(&message_context, nulllist, nulllist); } mail$mailfile_close(&file_context, nulllist, nulllist); } mail$mailfile_end(&file_context, nulllist, nulllist); } }