]>
diplodocus.org Git - nmh/blob - docs/historical/mh-nov-1983/subs/m_convert.c
12 register int first
, last
;
13 int found
, group
, range
, err
;
17 if(strcmp((cp
= name
), "all") == 0)
19 if((err
= first
= m_conv(cp
)) <= 0)
21 if(*(cp
= delimp
) && *cp
!= '-' && *cp
!= ':') {
22 baddel
: fprintf(stderr
, "Illegal argument delimiter: \"%c\"\n", *delimp
);
27 if((err
= last
= m_conv(cp
)) <= 0) {
29 fprintf(stderr
, "No %s message\n", cp
);
31 badlist
: fprintf(stderr
, "Bad message list \"%s\".\n", name
);
34 if(last
< first
) goto badlist
;
35 if(*delimp
) goto baddel
;
36 if(first
> mp
->hghmsg
|| last
< mp
->lowmsg
) {
37 rangerr
: fprintf(stderr
, "No messages in range \"%s\".\n", name
);
42 if(first
< mp
->lowmsg
)
44 } else if(*cp
== ':') {
49 } else if(*cp
== '+') {
53 if((range
= atoi(bp
= cp
)) == 0)
55 while(*bp
>= '0' && *bp
<= '9') bp
++;
58 if((convdir
> 0 && first
> mp
->hghmsg
) ||
59 (convdir
< 0 && first
< mp
->lowmsg
))
61 if(first
< mp
->lowmsg
)
63 if(first
> mp
->hghmsg
)
65 for(last
= first
; last
>= mp
->lowmsg
&& last
<= mp
->hghmsg
;
67 if(mp
->msgstats
[last
]&EXISTS
)
75 range
= last
; last
= first
; first
= range
;
78 if(first
> mp
->hghmsg
|| first
< mp
->lowmsg
||
79 !(mp
->msgstats
[first
]&EXISTS
)) {
80 fprintf(stderr
, "Message %d doesn't exist.\n", first
);
85 while(first
<= last
) {
86 if(mp
->msgstats
[first
]&EXISTS
) {
87 if(!(mp
->msgstats
[first
]&SELECTED
)) {
89 mp
->msgstats
[first
] |= SELECTED
;
90 if(first
< mp
->lowsel
)
92 if(first
> mp
->hghsel
)
107 register char *cp
, *bp
;
113 if(*cp
>= '0' && *cp
<= '9') {
114 while(*bp
>= '0' && *bp
<= '9') bp
++;
119 while((*cp
>= 'a' && *cp
<= 'z') || *cp
== '.')
123 if(strcmp(buf
, "first") == 0)
125 else if(strcmp(buf
, "last") == 0) {
128 } else if(strcmp(buf
, "cur") == 0 || strcmp(buf
, ".") == 0)
129 return(mp
->curmsg
> 0 ? mp
->curmsg
: -1);
130 else if(strcmp(buf
, "prev") == 0) {
132 for(i
= (mp
->curmsg
<=mp
->hghmsg
)? mp
->curmsg
-1: mp
->hghmsg
;
133 i
>= mp
->lowmsg
; i
--) {
134 if(mp
->msgstats
[i
]&EXISTS
)
137 return(-1); /* non-existent message */
138 } else if(strcmp(buf
, "next") == 0) {
139 for(i
= (mp
->curmsg
>=mp
->lowmsg
)? mp
->curmsg
+1: mp
->lowmsg
;
140 i
<= mp
->hghmsg
; i
++) {
141 if(mp
->msgstats
[i
]&EXISTS
)
146 return(0); /* bad message list */