]>
diplodocus.org Git - nmh/blob - docs/historical/mh-nov-1983/cmds/folder.c
10 int all
, hdrflag
, foldp
;
12 char folder
[128], *folds
[NFOLDERS
];
13 int msgtot
, foldtot
, totonly
, fshort
;
15 struct swit switches
[] = {
21 "noheader", 0, /* 5 */
38 register char *cp
, *curm
;
41 int up
, down
, j
, def_short
;
42 char *arguments
[50], **argp
, **ap
;
46 register struct direct
*dir
;
49 setbuf(stdout
, _sobuf
);
56 if(argv
[0][strlen(argv
[0])-1] == 's') /* Plural name?? */
58 cp
= r1bindex(argv
[0], '/');
59 if((cp
= m_find(cp
)) != NULL
) {
60 ap
= brkstring(cp
= getcpy(cp
), " ", "\n");
61 ap
= copyip(ap
, arguments
);
68 switch(smatch(++cp
, switches
)) {
69 case -2:ambigsw(cp
, switches
); /* ambiguous */
72 case -1:fprintf(stderr
, "folder: -%s unknown\n", cp
);
74 case 0: all
++; continue; /* -all */
75 case 1: down
++; continue; /* -down */
77 case 3: fshort
= 0; continue; /* -nofast */
78 case 4: hdrflag
= -1; continue; /* -header */
79 case 5: hdrflag
= 0; continue; /* -noheader */
80 case 6: fpack
= 1; continue; /* -pack */
81 case 7: fpack
= 0; continue; /* -nopack */
82 case 8: fshort
= 1; continue; /* -short */
83 case 9: all
++; totonly
= 1; /* -total */
85 case 10:if(totonly
) all
--; /* -nototal */
87 case 11:up
++; continue; /* -up */
89 case 12:help("folder [+folder] [msg] [switches]",
92 case 13:debug
++; /* -debug */
97 fprintf(stderr
, "Only one folder at a time.\n");
102 fprintf(stderr
, "Only one current may be given.\n");
111 for(np
= m_defs
; np
; np
= np
->n_next
) {
112 if(!ssequal("cur-", np
->n_name
))
116 printf("%s\n", np
->n_name
+4);
118 addfold(np
->n_name
+4);
125 execl(lsproc
, "mh-ls", "-x", cp
, 0);
126 fprintf(stderr
, "Can't exec: ");
131 fprintf(stderr
, "Can't chdir to: ");
135 if((cp
= m_find(pfolder
)) == NULL
)
140 (void) readdir(dirp
);
141 (void) readdir(dirp
);
142 while (dir
= readdir(dirp
)) {
143 if (stat(dir
->d_name
, &stbf
) < 0 ||
144 (stbf
.st_mode
& S_IFMT
) != S_IFDIR
)
146 addfold(dir
->d_name
);
149 for(i
= 0; i
< foldp
; i
++) {
150 pfold(folds
[i
], 0); fflush(stdout
);
154 printf("TOTAL= %3d message%c in %d Folder%s.\n",
155 msgtot
, msgtot
!=1? 's':' ',
156 foldtot
, foldtot
!=1? "s":"");
160 cp
= copy(argfolder
, folder
);
162 cp
= copy(m_getfolder(), folder
);
164 while(cp
> folder
&& *cp
!= '/') --cp
;
169 copy(listname
, copy("/", cp
));
172 if(pfold(folder
, curm
) && argfolder
)
173 m_replace(pfolder
, argfolder
);
188 if(foldp
>= NFOLDERS
) {
189 fprintf(stderr
, "More than %d folders!!\n", NFOLDERS
);
193 for(i
= 0; i
< foldp
; i
++)
194 if(compare(cp
, folds
[i
]) < 0) {
195 for(j
= foldp
- 1; j
>= i
; j
--)
196 folds
[j
+1] = folds
[j
];
209 register char *mailfile
;
210 register int msgnum
, hole
;
211 char newmsg
[8], oldmsg
[8];
213 mailfile
= m_maildir(fold
);
214 if(chdir(mailfile
) < 0) {
215 fprintf(stderr
, "Can't chdir to: ");
220 printf("%s\n", fold
);
225 msgtot
+= mp
->nummsg
;
227 printf("pfold: %s message flags: 0%o\n", fold
, mp
->msgflags
);
228 if(fpack
&& (mp
->msgflags
& READONLY
) == 0) {
230 printf("Would normally be packing folder %s\n", fold
);
233 for(msgnum
= mp
->lowmsg
, hole
= 1; msgnum
<= mp
->hghmsg
; msgnum
++) {
234 if(mp
->msgstats
[msgnum
]&EXISTS
) {
236 copy(m_name(hole
), newmsg
);
237 copy(m_name(msgnum
), oldmsg
);
238 if(link(oldmsg
, newmsg
) == -1 ||
239 unlink(oldmsg
) == -1) {
240 fprintf(stderr
, "Error moving %s to ", oldmsg
);
244 mp
->msgstats
[hole
] = mp
->msgstats
[msgnum
];
245 if(msgnum
== mp
->lowsel
)
247 if(msgnum
== mp
->hghsel
)
255 mp
->hghmsg
= hole
- 1;
264 fprintf(stderr
, "Can't set current msg to range: %s\n", curm
);
267 m_setcur(mp
->curmsg
= mp
->hghsel
);
270 printf("\t\tFolder # of messages ( range ); cur msg (other files)\n");
271 printf("%22s", fold
);
272 if(strcmp(folder
, fold
) == 0)
277 printf("has no messages");
279 printf("has %3d message%s (%3d-%3d)",
280 mp
->nummsg
, (mp
->nummsg
==1)?" ":"s",
281 mp
->lowmsg
, mp
->hghmsg
);
282 if(mp
->curmsg
>= mp
->lowmsg
&& mp
->curmsg
<= mp
->hghmsg
)
283 printf("; cur=%3s", m_name(mp
->curmsg
));
285 if(mp
->selist
|| mp
->others
) {
288 printf("%s", listname
);
308 register char *c1
, *c2
;
313 if(i
= *c1
++ - *c2
++)