diff -rc mutt-0.47/dirlist.c mutt-0.47.mc/dirlist.c *** mutt-0.47/dirlist.c Fri Oct 4 14:40:17 1996 --- mutt-0.47.mc/dirlist.c Thu Oct 17 12:34:32 1996 *************** *** 128,134 **** if (S_ISDIR(s.st_mode)) sprintf(buffer, "Directory"); else { ! sprintf(buffer, "(%7d bytes)", (int)s.st_size); } LOCAL.entries[LOCAL.max] = (struct folder_file *)safe_malloc(sizeof(struct folder_file)); --- 128,142 ---- if (S_ISDIR(s.st_mode)) sprintf(buffer, "Directory"); else { ! int mesgs; ! int new; ! char folder[STRING]; ! ! snprintf(folder,sizeof(folder),"%s/%s",d,de->d_name); ! if (count_folder_mail(folder,s,&mesgs,&new)) ! sprintf(buffer, "(%7d bytes)\t%d/%d",(int)s.st_size,new,mesgs); ! else ! sprintf(buffer, "(%7d bytes)", (int)s.st_size); } LOCAL.entries[LOCAL.max] = (struct folder_file *)safe_malloc(sizeof(struct folder_file)); *************** *** 167,172 **** --- 175,237 ---- snprintf(fmt, sizeof(fmt), "%%-%ds %%-%ds", LOCAL.namelen, LOCAL.desclen); snprintf(s, slen, fmt, LOCAL.entries[num]->name, LOCAL.entries[num]->desc); } + + int count_folder_mail (char *folder, struct stat s, int *mesgs, int *new) + { + FILE *fp; + char buffer[STRING]; + char garbage[STRING]; + int in_header = TRUE; + int status = FALSE; + + *mesgs = 0; + *new = 0; + dprint(1,(debugfile, "count_folder_mail(): start (%s).\n",folder)); + if ((s.st_size == 0) || (S_ISDIR(s.st_mode))) return 0; + + if ((fp = fopen(folder,"r")) == NULL) return 0; + + /* Check if a folder by checking for From as first thing in file */ + fgets(buffer, sizeof(buffer), fp); + if (is_from(buffer,garbage,sizeof(garbage))) (*mesgs)++; + else return 0; + + while (fgets(buffer, sizeof(buffer), fp) != 0) { + if ((index(buffer, '\n') == NULL) && (!feof(fp))) { + /* Finish reading to end of line (but discard, since we don't care */ + int c; + + while ((c = getc(fp)) != EOF && c != '\n'); + } + + if ((!in_header) && (is_from(buffer,garbage,sizeof(garbage)))) { + in_header = TRUE; + (*mesgs)++; + dprint(2,(debugfile, "count_folder_mail(): mesg %d.\n",*mesgs)); + } + else if (in_header) { + if (!strncmp(buffer,"Status:",7)) { + status = TRUE; + if (!strchr(buffer,'R') && !strchr(buffer,'O')) (*new)++; + } + else if (buffer[0] == '\n') { + in_header = FALSE; + if (status == FALSE) (*new)++; + else status = FALSE; + } + } + } + fclose(fp); + + return 1; + } + + + + + + + void folder_select (const char *d, char *f) {