2 Proprietary Rand Corporation
, 1981.
3 Further distribution of
this software
4 subject to the terms of the Rand
20 register int first
, last
;
21 int found
, range
, err
;
25 if(strcmp((cp
= name
), "all") == 0)
27 if((err
= first
= m_conv(cp
)) <= 0)
29 if(*(cp
= delimp
) && *cp
!= '-' && *cp
!= ':') {
30 baddel
: fprintf(stderr
, "Illegal argument delimiter: \"%c\"\n", *delimp
);
35 if((err
= last
= m_conv(cp
)) <= 0) {
37 fprintf(stderr
, "No %s message\n", cp
);
39 badlist
: fprintf(stderr
, "Bad message list \"%s\".\n",
43 if(last
< first
) goto badlist
;
44 if(*delimp
) goto baddel
;
45 if(first
> mp
->hghmsg
|| last
< mp
->lowmsg
) {
46 rangerr
: fprintf(stderr
, "No messages in range \"%s\".\n", name
);
51 if(first
< mp
->lowmsg
)
53 } else if(*cp
== ':') {
58 } else if(*cp
== '+') {
62 if((range
= atoi(bp
= cp
)) == 0)
64 while(isdigit(*bp
)) bp
++;
67 if((convdir
> 0 && first
> mp
->hghmsg
) ||
68 (convdir
< 0 && first
< mp
->lowmsg
))
70 if(first
< mp
->lowmsg
)
72 if(first
> mp
->hghmsg
)
74 for(last
= first
; last
>= mp
->lowmsg
&& last
<= mp
->hghmsg
;
76 if(mp
->msgstats
[last
]&EXISTS
)
84 range
= last
; last
= first
; first
= range
;
87 if(first
> mp
->hghmsg
|| first
< mp
->lowmsg
||
88 !(mp
->msgstats
[first
]&EXISTS
)) {
89 fprintf(stderr
, "Message %d doesn't exist.\n", first
);
94 while(first
<= last
) {
95 if(mp
->msgstats
[first
]&EXISTS
) {
96 if(!(mp
->msgstats
[first
]&SELECTED
)) {
98 mp
->msgstats
[first
] |= SELECTED
;
99 if(first
< mp
->lowsel
)
101 if(first
> mp
->hghsel
)
116 register char *cp
, *bp
;
123 while(isdigit(*bp
)) bp
++;
125 return (i
= atoi(cp
)) > MAXFOLDER
? MAXFOLDER
: i
;
128 while((*cp
>= 'a' && *cp
<= 'z') || *cp
== '.')
132 if(strcmp(buf
, "first") == 0)
134 else if(strcmp(buf
, "last") == 0) {
137 } else if(strcmp(buf
, "cur") == 0 || strcmp(buf
, ".") == 0)
138 return(mp
->curmsg
> 0 ? mp
->curmsg
: -1);
139 else if(strcmp(buf
, "prev") == 0) {
141 for(i
= (mp
->curmsg
<=mp
->hghmsg
)? mp
->curmsg
-1: mp
->hghmsg
;
142 i
>= mp
->lowmsg
; i
--) {
143 if(mp
->msgstats
[i
]&EXISTS
)
146 return(-1); /* non-existent message */
147 } else if(strcmp(buf
, "next") == 0) {
148 for(i
= (mp
->curmsg
>=mp
->lowmsg
)? mp
->curmsg
+1: mp
->lowmsg
;
149 i
<= mp
->hghmsg
; i
++) {
150 if(mp
->msgstats
[i
]&EXISTS
)
155 return(0); /* bad message list */