*** ../mh-6.7-dist/Patchlevel Fri Dec 14 13:23:45 1990 --- Patchlevel Thu Jan 10 09:21:00 1991 *************** *** 1 **** ! MH.6.7 patch.1 --- 1 ---- ! MH.6.7 patch.1a *** ../mh-6.7-dist/conf/doc/ADMIN.rf Fri Dec 14 13:23:48 1990 --- conf/doc/ADMIN.rf Mon Jan 7 16:14:25 1991 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: ADMIN.rf,v 2.11 90/04/09 20:28:27 sources Exp $ .po +.75i --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: ADMIN.rf,v 2.13 91/01/07 16:14:24 mh Exp $ .po +.75i *************** *** 173,174 **** --- 173,182 ---- .. + .de Uh + .ad + .sp + .ti .25i + .b "\\$1" + .sp + .fi + .. .de Hh *************** *** 708,710 **** The capabilities discussed here should not be used on a production basis, ! as they are either experimental or are useful for debugging \fIMH\fR. --- 716,719 ---- The capabilities discussed here should not be used on a production basis, ! as they are either experimental, are useful for debugging \fIMH\fR, or ! are otherwise not recommended. *************** *** 742,744 **** `\-dashmunging' and `\-nodashmunging' which enable or disable ! the prepending of `\-\ ' in forwarded messages. --- 751,754 ---- `\-dashmunging' and `\-nodashmunging' which enable or disable ! the prepending of `\-\ ' in forwarded messages. To use ! `\-nodashmunging', you must use an \fImhl\fR filter file. *** ../mh-6.7-dist/conf/doc/MH.rf Fri Dec 14 13:23:49 1990 --- conf/doc/MH.rf Fri Jan 25 15:49:37 1991 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: MH.rf,v 1.11 90/04/10 21:20:18 sources Exp $ .po +.75i --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: MH.rf,v 1.15 91/01/25 15:49:34 mh Exp $ .po +.75i *************** *** 974,975 **** --- 974,983 ---- .. + .de Uh + .ad + .sp + .ti -.25i + .b "\\$1" + .sp + .fi + .. .de Hh *************** *** 1116,1117 **** --- 1124,1126 ---- .so mh-profile.me + .so mh-sequence.me .so ap.me *************** *** 1120,1121 **** --- 1129,1131 ---- .so install-mh.me + .so fmtdump.me .so post.me *************** *** 1193,1194 **** --- 1203,1214 ---- argument. + .pp + A restricted form of message ranges are allowed with user\-defined + sequences. The form \*(lqname:n\*(rq, specifies up to the first `n' messages + which are part of the user\-defined sequence `name'. + A leading plus sign is allowed on `n', but is ignored. + The interpretation of n is overridden if n is preceded + by a minus sign; + `\-n' always means up to the last `n' messages which are part of the + sequence `name'. + .pp Although all \fIMH\fR commands expand user\-defined sequences as appropriate, *************** *** 1223,1225 **** Hence, if the named sequence already existed, ! the sequence is destroyed prior to being re\-defined (nothing happens to the messages that were a part of this sequence, --- 1243,1245 ---- Hence, if the named sequence already existed, ! the sequence is destroyed prior to being re-defined (nothing happens to the messages that were a part of this sequence, *************** *** 1912,1914 **** .in 1i ! .ta \w'signed-number 'u +\w':= 'u +\w'user-defined-sequence 'u msgs := msgspec | --- 1932,1934 ---- .in 1i ! .ta \w'user-defined-sequence 'u +\w':= 'u +\w'user-defined-sequence 'u msgs := msgspec | *************** *** 1931,1933 **** ! msg-range := msg\*(lq-\*(rqmsg | \*(lqall\*(rq --- 1951,1953 ---- ! msg-range := msg\*(lq\-\*(rqmsg | \*(lqall\*(rq *************** *** 1937,1940 **** signed-number := \*(lq+\*(rq | ! \*(lq-\*(rq | .re --- 1957,1963 ---- signed-number := \*(lq+\*(rq | ! \*(lq\-\*(rq | + + user-defined-sequence := | + * .re *** ../mh-6.7-dist/conf/doc/comp.rf Fri Dec 14 13:23:53 1990 --- conf/doc/comp.rf Mon Dec 17 16:29:37 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: comp.rf,v 1.5 90/04/05 15:12:17 sources Exp $ .SC COMP 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: comp.rf,v 1.6 90/12/17 16:29:30 mh Exp $ .SC COMP 1 *************** *** 70,71 **** --- 70,73 ---- + The `\-editor\ editor' switch indicates the editor to + use for the initial edit. Upon exiting from the editor, *************** *** 96,98 **** .Sa ! dist(1), forw(1), repl(1), send(1), whatnow(1) .De --- 98,100 ---- .Sa ! dist(1), forw(1), repl(1), send(1), whatnow(1), mh-profile(5) .De *** /dev/null Fri Jan 25 16:03:46 1991 --- conf/doc/fmtdump.rf Fri Jan 25 15:47:32 1991 *************** *** 0 **** --- 1,19 ---- + .\" @(MHWARNING) + .\" @(#)$Id: fmtdump.rf,v 1.2 91/01/25 15:47:30 mh Exp $ + .SC FMTDUMP 8 + .NA + fmtdump \- decode \fIMH\fP format files + .SY + @(MHETCPATH)/fmtdump formatfile + .DE + \fIFmtdump\fR is a program that parses an \fIMH\fP format file + and produces a pseudo-language listing of the how \fIMH\fP + interprets the file. + .Sa + mh-format(8), mh-sequences(8) + .Co + None + .Bu + The output may not be useful unless you are familiar + with the internals of the mh-format subroutines. + .En *** ../mh-6.7-dist/conf/doc/folder.rf Fri Dec 14 13:23:53 1990 --- conf/doc/folder.rf Tue Dec 18 14:28:15 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: folder.rf,v 1.5 90/04/05 15:12:37 sources Exp $ .SC FOLDER 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: folder.rf,v 1.6 90/12/18 14:28:05 mh Exp $ .SC FOLDER 1 *************** *** 108,110 **** If the specified (or default) folder doesn't exist, ! the user will be queried if the folder should be created. (This is the easy way to create an empty folder for use later.) --- 108,112 ---- If the specified (or default) folder doesn't exist, ! the user will be queried as to whether the folder should be created. ! When standard input is not a tty, the folder is ! created without any query. (This is the easy way to create an empty folder for use later.) *** ../mh-6.7-dist/conf/doc/forw.rf Fri Dec 14 13:23:53 1990 --- conf/doc/forw.rf Tue Dec 18 14:40:13 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: forw.rf,v 1.9 90/04/05 15:08:44 sources Exp $ .SC FORW 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: forw.rf,v 1.10 90/12/18 14:40:06 mh Exp $ .SC FORW 1 *************** *** 115,116 **** --- 115,117 ---- when received, the message is suitable for bursting by \fIburst\fR\0(1). + This follows the Internet RFC\-934 guidelines. *************** *** 207,208 **** --- 208,213 ---- \fIDist\fR and \fIrepl\fR don't have this problem. + + To avoid prepending the leading dash characters in forwarded messages, + there is a `\-nodashmunging' option. See the \*(lqHidden Features\*(rq + section of the \fIMH Administrator's Guide\fR for more details. .En *** ../mh-6.7-dist/conf/doc/mark.rf Fri Dec 14 13:23:54 1990 --- conf/doc/mark.rf Wed Dec 26 17:03:35 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: mark.rf,v 1.5 90/04/05 15:12:51 sources Exp $ .SC MARK 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: mark.rf,v 1.6 90/12/26 17:03:28 mh Exp $ .SC MARK 1 *************** *** 80,83 **** .in +.25i ! The name used to denote a message sequence must consist solely of ! alphabetic characters, and can not be one of the \*(lqreserved\*(rq message names --- 80,84 ---- .in +.25i ! The name used to denote a message sequence must consist of ! an alphabetic character followed by zero or more ! alphanumeric characters, and can not be one of the \*(lqreserved\*(rq message names *************** *** 88,92 **** ! The name used to denote a message sequence can not occur as part of a ! message range, e.g., constructs like \*(lqseen:20\*(rq or ! \*(lqseen\-10\*(rq are forbidden. .in -.25i --- 89,95 ---- ! Message ranges with user\-defined ! sequence names are restricted to the form \*(lqname:n\*(rq or ! \*(lqname:-n\*(rq, and refer to the first or last `n' messages ! of the sequence `name', respectively. ! Constructs of the form \*(lqname1\-name2\*(rq are forbidden. .in -.25i *** ../mh-6.7-dist/conf/doc/mh-chart.rf Fri Dec 14 13:23:55 1990 --- conf/doc/mh-chart.rf Mon Jan 7 11:13:56 1991 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: mh-chart.rf,v 2.9 90/04/08 18:22:55 sources Exp $ .if '\*(ZZ'-man' \{\ --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: mh-chart.rf,v 2.10 91/01/07 11:13:54 mh Exp $ .if '\*(ZZ'-man' \{\ *************** *** 383,384 **** --- 383,385 ---- \%[\-reverse] \%[\-noreverse] + \%[\-file filename] \%[\-help] *** ../mh-6.7-dist/conf/doc/mh-format.rf Fri Dec 14 13:23:55 1990 --- conf/doc/mh-format.rf Fri Jan 11 09:17:56 1991 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: mh-format.rf,v 1.26 90/04/05 15:09:13 sources Exp $ .SC MH\-FORMAT 5 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: mh-format.rf,v 1.29 91/01/11 09:17:35 mh Exp $ .SC MH\-FORMAT 5 *************** *** 31,33 **** A format string consists of ordinary text, and special ! multi\-character \fIescape\fR sequences which begin with `%'. When specifying a format string, --- 31,33 ---- A format string consists of ordinary text, and special ! multi-character \fIescape\fR sequences which begin with `%'. When specifying a format string, *************** *** 39,41 **** There are three types of \fIescape\fR sequences: ! header \fIcomponents\fR, built\-in \fIfunctions\fR, and, flow \fIcontrol\fR. --- 39,41 ---- There are three types of \fIescape\fR sequences: ! header \fIcomponents\fR, built-in \fIfunctions\fR, and, flow \fIcontrol\fR. *************** *** 54,67 **** A \fIfunction\fR escape is specified as `%(\fIfunction\fR\^)'. ! All functions are built\-in, and most have a string or numeric value. ! .ne 7 ! A \fIcontrol\fR escape is one of: `%<', `%|', or `%>'. ! These form one of four conditional execution constructs with the ! following syntax: ! .sp 1 .nf ! %<(\fIfunction\fR\^)Command-String%> ! %<{\fIcomponent\fR\^}Command-String%> ! %<(\fIfunction\fR\^)Then-Command-String%|Else-Command-String%> ! %<{\fIcomponent\fR\^}Then-Command-String%|Else-Command-String%> .fi --- 54,73 ---- A \fIfunction\fR escape is specified as `%(\fIfunction\fR\^)'. ! All functions are built-in, and most have a string or numeric value. ! .ne 12 ! .Uh "Control-flow escapes" ! A \fIcontrol\fR escape is one of: `%<', `%?', `%|', or `%>'. ! These are combined into the conditional execution construct: ! .sp .nf ! % .fi *************** *** 68,86 **** .sp These constructs may be nested without ambiguity. ! In the first two forms of the construct, ! if the function or component value is non\-zero (for integer\-valued escapes), ! or non\-empty (for string\-valued escapes), ! then everything up to the corresponding `%>' ! is interpreted, otherwise, skip to the corresponding '%>' and ! start interpreting again. ! In the second two forms of the construct, ! the first command string is interpreted ! if the function or component value is non\-zero or non\-null, ! and the second command string is interpreted otherwise. Only one ! of the command strings will be interpreted. ! Interpreting the '%|' control escape causes ! a skip to the corresponding '%>'. .ne 10 --- 74,132 ---- .sp + Extra white space is shown here only for clarity. These constructs may be nested without ambiguity. + They form a general \fBif\-elseif\-else\-endif\fP block where + only one of the \fIformat text\fP segments is interpreted. ! The `%<' and `%?' control escapes causes a condition to be evaluated. ! This condition ! may be either a \fIcomponent\fP or a \fIfunction\fP. ! The four constructs have the following syntax: ! .sp 1 ! .nf ! %<{component} ! %<(function) ! %?{component} ! %?(function) ! .fi ! .sp ! These control escapes test whether ! the function or component value is non-zero (for integer-valued escapes), ! or non-empty (for string-valued escapes). ! If this test evaulates true, ! then the format text ! up to the next corresponding control escape ! (one of `%|', `%?', or `%>') ! is interpreted normally. ! Next, ! all format text up to the corresponding `%>' control ! escape (if any) is skipped. ! The `%>' control escape is not interpreted; ! normal ! interpretation resumes after the `%>' escape. + If the test evaluates false, however, + then the format text + up to the next corresponding control escape + (again, one of `%|', `%?', or `%>') + is skipped, instead of being interpreted. + If the control escape encountered was `%?', + then the condition associated with that control escape is + evaluated, and interpretation + proceeds after that test + as described in the previous paragraph. + If the control escape encountered was `%|', + then the format text + up to the corresponding `%>' escape + is interpreted normally. + As above, + the `%>' escape is not interpreted and normal + interpretation resumes after the `%>' escape. + + The `%?' control escape and its following format text + is optional, and may be included zero or more times. + The `%|' control escape and its following format text + is also optional, and may be included zero or one times. + + .Uh "Function escapes" .ne 10 *************** *** 119,120 **** --- 165,167 ---- .\" return values + .Uh "Return values" Component escapes write the value of their message header in \fIstr\fR. *************** *** 157,159 **** .\" dat literal int ? ! nonzero expr boolean \fInum\fR is non\-zero zero expr boolean \fInum\fR is zero --- 204,206 ---- .\" dat literal int ? ! nonzero expr boolean \fInum\fR is non-zero zero expr boolean \fInum\fR is zero *************** *** 160,162 **** null expr boolean \fIstr\fR is empty ! nonnull expr boolean \fIstr\fR is non\-empty void expr Set \fIstr\fR or \fInum\fR --- 207,209 ---- null expr boolean \fIstr\fR is empty ! nonnull expr boolean \fIstr\fR is non-empty void expr Set \fIstr\fR or \fInum\fR *************** *** 165,167 **** .\" compflag comp integer Set \fInum\fR to component flags bits ! trim expr trim trailing white\-space from \fIstr\fR putstr expr print \fIstr\fR --- 212,214 ---- .\" compflag comp integer Set \fInum\fR to component flags bits ! trim expr trim trailing white-space from \fIstr\fR putstr expr print \fIstr\fR *************** *** 202,204 **** tws date string official 822 rendering ! pretty date string user\-friendly rendering nodate date integer \fIstr\fR not a date string --- 249,251 ---- tws date string official 822 rendering ! pretty date string user-friendly rendering nodate date integer \fIstr\fR not a date string *************** *** 216,218 **** proper addr string official 822 rendering ! friendly addr string user\-friendly rendering pers addr string the personal name* --- 263,266 ---- proper addr string official 822 rendering ! friendly addr string user-friendly rendering ! addr addr string mbox@host or host!mbox rendering* pers addr string the personal name* *************** *** 241,243 **** .ti +.5i ! %<(mymbox{from} To: %{to}%> --- 289,291 ---- .ti +.5i ! %<(mymbox{from}) To: %{to}%> *************** *** 326,328 **** if the message is from me, ! print `To:' followed by a \*(lquser\-friendly\*(rq rendering of the first address in the \*(lqTo:\*(rq field. --- 374,376 ---- if the message is from me, ! print `To:' followed by a \*(lquser-friendly\*(rq rendering of the first address in the \*(lqTo:\*(rq field. *************** *** 361,363 **** ! If the \fIformataddr\fR result is non\-null, it is printed as an address (with line folding if needed) in a field \fIwidth\fR --- 409,411 ---- ! If the \fIformataddr\fR result is non-null, it is printed as an address (with line folding if needed) in a field \fIwidth\fR *************** *** 377,379 **** ! If the result is non\-null, it is printed as above with a leading label of \*(lqcc: \*(rq. --- 425,427 ---- ! If the result is non-null, it is printed as above with a leading label of \*(lqcc: \*(rq. *************** *** 401,403 **** .ti +.5i ! -------- .fi --- 449,451 ---- .ti +.5i ! \-\-\-\-\-\-\-\- .fi *************** *** 407,412 **** \*(lqYour message of \*(rq. If the date was parseable, it is ! output in official format, otherwise it is output as\-is. The message-id is included if present. ! As with all plain\-text, ! the row of dashes are output as\-is. --- 455,460 ---- \*(lqYour message of \*(rq. If the date was parseable, it is ! output in official format, otherwise it is output as-is. The message-id is included if present. ! As with all plain-text, ! the row of dashes are output as-is. *************** *** 413,415 **** This last part is a good example for a little more elaboration. ! Here's that part again in pseudo\-code: .sp 1 --- 461,463 ---- This last part is a good example for a little more elaboration. ! Here's that part again in pseudo-code: .sp 1 *** ../mh-6.7-dist/conf/doc/mh-profile.rf Fri Dec 14 13:23:56 1990 --- conf/doc/mh-profile.rf Tue Dec 18 12:49:22 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: mh-profile.rf,v 1.7 90/04/05 15:09:46 sources Exp $ .SC MH\-PROFILE 5 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: mh-profile.rf,v 1.8 90/12/18 12:49:13 mh Exp $ .SC MH\-PROFILE 5 *************** *** 218,219 **** --- 218,222 ---- the file $HOME/.signature is consulted. + Your signature will be added to the address \fIsend\fP + puts in the \*(lqFrom:\*(rq header; + do not include an address in the signature text. (profile, no default) *** /dev/null Fri Jan 25 16:03:46 1991 --- conf/doc/mh-sequence.rf Wed Jan 9 11:34:46 1991 *************** *** 0 **** --- 1,228 ---- + .\" @(MHWARNING) + .\" @(#)$Id: mh-sequence.rf,v 1.9 91/01/09 11:34:34 mh Exp $ + .SC MH\-SEQUENCE 5 + .NA + mh\-sequence \- sequence specification for MH message system + .SY + most \fIMH\fR commands + .DE + Most \fIMH\fP commands accept a `msg' or `msgs' specification, where + `msg' indicates one message and `msgs' indicates one or more + messages. + To designate a message, you may use either its number (e.g., 1, 10, 234) + or one of these \*(lqreserved\*(rq message names: + .in +.5i + .sp 1 + .nf + .ta +\w'\fIName\fP 'u + \fIName\fP \fIDescription\fR + first the first message in the folder + last the last message in the folder + cur the most recently accessed message + prev the message numerically preceding \*(lqcur\*(rq + next the message numerically following \*(lqcur\*(rq + .re + .fi + .in -.5i + + In commands that take a `msg' argument, the default is \*(lqcur\*(rq. + As a shorthand, \*(lq\&.\*(rq is equivalent to \*(lqcur\*(rq. + + For example: In a folder containing five messages numbered 5, 10, 94, + 177 and 325, \*(lqfirst\*(rq is 5 and \*(lqlast\*(rq is 325. + If \*(lqcur\*(rq is 94, then \*(lqprev\*(rq is 10 and \*(lqnext\*(rq + is 177. + + The word `msgs' indicates that one or more messages may be specified. + Such a specification consists of one message designation or of several message + designations separated by spaces. + A message designation consists either + of a message name as defined above, or a message range. + + A message range is specified as \*(lqname1\-name2\*(rq + or \*(lqname:n\*(rq, + where `name', `name1' and `name2' are message names, and `n' is an integer. + + The specification \*(lqname1\-name2\*(rq + designates all currently-existing messages from `name1' to `name2' inclusive. + The message name \*(lqall\*(rq is a shorthand for the message + range \*(lqfirst\-last\*(rq. + + The specification \*(lqname:n\*(rq designates up to `n' messages. + These messages start with `name' if `name' is a message number + or one of the reserved names \*(lqfirst\*(rq \*(lqcur\*(rq, or \*(lqnext\*(rq, + The messages end with `name' if `name' is \*(lqprev\*(rq or \*(lqlast\*(rq. + The interpretation of `n' may be overridden by preceding `n' with + a plus or minus sign; `+n' always means up to `n' messages starting + with `name', and `\-n' always means up to `n' messages ending + with `name'. + + In commands which accept a `msgs' argument, the default is either + \*(lqcur\*(rq or \*(lqall\*(rq, depending on which makes more sense. + Repeated specifications of the same message have the same effect as + a single specification of the message. + + .Uh "User\-Defined Message Sequences" + In addition to the \*(lqreserved\*(rq (pre-defined) message names given above, + \fIMH\fP supports user-defined sequence names. + User-defined sequences allow the \fIMH\fR user a tremendous amount of power + in dealing with groups of messages in the same folder + by allowing the user to bind a group of messages to a meaningful symbolic + name. + + The name used to denote a message sequence must consist of + an alphabetic character followed by zero or more + alphanumeric characters, and can not be one of the \*(lqreserved\*(rq + message names above. + After defining a sequence, + it can be used wherever an \fIMH\fR command expects a `msg' or `msgs' + argument. + + Some forms of message ranges are allowed with user-defined + sequences. The + specification \*(lqname:n\*(rq may be used, and it + designates up to the first `n' messages (or last `n' messages for `\-n') + which are elements of the user-defined sequence `name'. + + The specifications \*(lqname:next\*(rq and \*(lqname:prev\*(rq + may also be used, and they designate the + next or previous message (relative to the current message) + which is an element of the user-defined sequence `name'. + The specificaitions + \*(lqname:first\*(rq and \*(lqname:last\*(rq are equivalent + to \*(lqname:1\*(rq and \*(lqname:\-1\*(rq, respectively. + The specification \*(lqname:cur\*(rq is not allowed + (use just \*(lqcur\*(rq instead). + The syntax of these message range + specifcations is subject to change + in the future. + + User-defined sequence names + are specific to each folder. + They are defined using the \fIpick\fP and \fImark\fP commands. + + .Uh "Public and Private User-Defined Sequences" + There are two varieties of sequences: \fIpublic\fR sequences + and \fIprivate\fR sequences. + \fIPublic\fR sequences of a folder are accessible to any \fIMH\fR user that + can read that folder and are kept in the \&.mh\(rusequences file in the folder. + \fIPrivate\fR sequences are accessible only to the \fIMH\fR user that defined + those sequences and are kept in the user's \fIMH\fR context file. + By default, + \fIpick\fR and \fImark\fR create \fIpublic\fR sequences + if the folder for which the sequences are being defined is writable by the + \fIMH\fR user. + Otherwise, \fIprivate\fR sequences are created. + This can be overridden with the `\-public' and `\-private' switches + to \fImark\fP. + + .Uh "Sequence Negation" + \fIMH\fP provides the ability to select all messages + not elements of a user-defined sequence. To do this, + the user should define the entry + \*(lqSequence\-Negation\*(rq in the \fIMH\fR profile file; + its value may be any string. + This string is then used to preface an existing user-defined + sequence name. This specification then refers to those messages + not elements of the specified sequence name. + For example, if the profile entry is: + + .ti +.5i + Sequence\-Negation:\^ not + + then anytime an \fIMH\fR command is given \*(lqnotfoo\*(rq as a `msg' or + `msgs' argument, + it would substitute all messages that are not elements of the sequence + \*(lqfoo\*(rq. + + Obviously, + the user should beware of defining sequences with names that + begin with the value of the + \*(lqSequence\-Negation\*(rq profile entry. + + .Uh "The Previous Sequence" + \fIMH\fR provides the ability + to remember the `msgs' or + `msg' argument last given to an \fIMH\fR command. + The entry \*(lqPrevious\-Sequence\*(rq should be defined in the + \fIMH\fR profile; its value should be a sequence name or multiple + sequence names separated by spaces. + If this entry is defined, when + when an \fIMH\fP command finishes, + it will define the sequence(s) named in the value of this entry to be + those messages that were specified to the command. + Hence, a profile entry of + + .ti +.5i + Previous\-Sequence:\^ pseq + + directs any \fIMH\fR command that accepts a `msg' or `msgs' argument to + define the sequence \*(lqpseq\*(rq as those messages when it finishes. + + \fBNote:\fP there can be a performance penalty in using the + \*(lqPrevious\-Sequence\*(rq facility. + If it is used, + \fBall\fP \fIMH\fR programs have to write the sequence information + to the \&.mh\(rusequences file for + the folder each time they run. + If the \*(lqPrevious\-Sequence\*(rq profile entry is not included, + only \fIpick\fR and \fImark\fR will write to the \&.mh\(rusequences file. + + .Uh "The Unseen Sequence" + Finally, some users like to indicate messages which have not been + previously seen by them. + Both \fIinc\fR and \fIshow\fR honor the profile entry + \*(lqUnseen\-Sequence\*(rq to support this activity. + This entry in the \&.mh\(ruprofile should be defined + as one or more sequence names separated by spaces. + If there is a value for \*(lqUnseen\-Sequence\*(rq in the profile, + then whenever \fIinc\fR places new messages in a folder, + the new messages will also be added to the sequence(s) named + in the value of this entry. + Hence, a profile entry of + + .ti +.5i + Unseen\-Sequence:\^ unseen + + directs \fIinc\fR to add new messages to the sequence \*(lqunseen\*(rq. + Unlike the behavior of the \*(lqPrevious\-Sequence\*(rq entry in the profile, + however, the sequence(s) will \fBnot\fR be zeroed by \fIinc\fP. + + Similarly, + whenever \fIshow\fR (or \fInext\fR or \fIprev\fR\^) displays a message, + that message will be removed + from any sequences named by the + \*(lqUnseen\-Sequence\*(rq entry in the profile. + + .Fi + ^$HOME/\&.mh\(ruprofile~^The user profile + ^/context~^The user context + ^/\&.mh\(rusequences~^Public sequences for + .Pr + ^Sequence\-Negation:~^To designate messages not in a sequence + .Ps + ^Previous\-Sequence:~^The last message specification given + .Ps + ^Unseen\-Sequence:~^Those messages not yet seen by the user + .Sa + mh(1), mark(1), pick(1), mh-profile(5) + .De + None + .Co + All + .Bu + User-defined sequences are stored in the \&.mh\(rusequences file + as a series of message specifications separated by spaces. + If a user-defined sequence contains too many individual + message specifications, + that line in the file may become too long for \fIMH\fP to handle. + This will generate the error message \*(lq\&.mh\(rusequences is + poorly formatted\*(rq. You'll have to edit the file by hand to + remove the offending line. + + This can happen to users who define the \*(lqPrevious\-Sequence\*(rq entry in + the \fIMH\fP profile + and have a folder containing many messages with gaps in the numbering. + A workaround for large folders is to minimize numbering gaps by using + \*(lqfolder\ \-pack\*(rq often. + .En *** ../mh-6.7-dist/conf/doc/mh-tailor.rf Fri Dec 14 13:23:56 1990 --- conf/doc/mh-tailor.rf Mon Jan 7 16:13:31 1991 *************** *** 1,13 **** .\" @(MHWARNING) ! .\" @(#)$Id: mh-tailor.rf,v 2.9 90/04/09 09:33:58 sources Exp $ ! .if !'\*(ZZ'-man' \{\ ! .rm SS ! .de SS ! .sp ! .in .25i ! .b "\\s-2\&\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6\\s0" ! .sp ! .in .5i ! .. ! .\} .SC MH\-TAILOR 5 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: mh-tailor.rf,v 2.11 91/01/07 16:13:27 mh Exp $ .SC MH\-TAILOR 5 *************** *** 87,89 **** A value of \*(lq0\*(rq means to use \fIflock\fR if available, ! standard \fIBellMail\fR locking otherwise. A value of \*(lq1\*(rq means to use \fIBellMail\fR locking always --- 77,81 ---- A value of \*(lq0\*(rq means to use \fIflock\fR if available, ! or \fIlockf\fR if \fBLOCKF\fP was defined when building \fIMH\fP. ! On non-\fBBSD42\fP systems, ! standard \fIBellMail\fR locking is used. A value of \*(lq1\*(rq means to use \fIBellMail\fR locking always *************** *** 97,99 **** The name of the directory for making locks. ! If your system doesn't have the \fIflock\fR syscall, then this directory is used when creating locks. --- 89,91 ---- The name of the directory for making locks. ! If your system doesn't have the \fIflock\fR or \fIlockf\fP syscalls, then this directory is used when creating locks. *************** *** 123,125 **** .\" @BEGIN: MF ! .SS "Mail Filtering" These options are only available if you compiled \fIMH\fP with --- 115,118 ---- .\" @BEGIN: MF ! .in -.5i ! .Uh "Mail Filtering" These options are only available if you compiled \fIMH\fP with *************** *** 155,157 **** .\" @BEGIN: MHMTS ! .SS "Stand-Alone Delivery" These options are only available if you compiled \fIMH\fP --- 148,151 ---- .\" @BEGIN: MHMTS ! .in -.5i ! .Uh "Stand-Alone Delivery" These options are only available if you compiled \fIMH\fP *************** *** 216,218 **** .\" @BEGIN: SMTP ! .SS "The \*(lq/smtp\*(rq MTS Suffix" These options are only available if you compiled \fIMH\fP with --- 210,213 ---- .\" @BEGIN: SMTP ! .in -.5i ! .Uh "The `/smtp' MTS Suffix" These options are only available if you compiled \fIMH\fP with *************** *** 257,259 **** .\" @BEGIN: SENDMTS ! .SS "SendMail" This option is only available if you compiled \fIMH\fP to --- 252,255 ---- .\" @BEGIN: SENDMTS ! .in -.5i ! .Uh "SendMail" This option is only available if you compiled \fIMH\fP to *************** *** 268,270 **** .\" @BEGIN: POP ! .SS "Post Office Protocol" This option is only available if you compiled \fIMH\fP with POP --- 264,267 ---- .\" @BEGIN: POP ! .in -.5i ! .Uh "Post Office Protocol" This option is only available if you compiled \fIMH\fP with POP *************** *** 282,284 **** .\" @BEGIN: BBSERVER ! .SS "BBoards Delivery" This option is only available if you compiled \fIMH\fP with --- 279,282 ---- .\" @BEGIN: BBSERVER ! .in -.5i ! .Uh "BBoards Delivery" This option is only available if you compiled \fIMH\fP with *************** *** 293,295 **** .\" @BEGIN: BPOP ! .SS "BBoards & The POP" These options are only available if you compiled \fIMH\fP with --- 291,294 ---- .\" @BEGIN: BPOP ! .in -.5i ! .Uh "BBoards & The POP" These options are only available if you compiled \fIMH\fP with *************** *** 323,325 **** .\" @BEGIN: NNTP ! .SS "BBoards & The NNTP" This option is only available if you compiled \fIMH\fP with --- 322,325 ---- .\" @BEGIN: NNTP ! .in -.5i ! .Uh "BBoards & The NNTP" This option is only available if you compiled \fIMH\fP with *************** *** 335,337 **** .in -.5i ! A few words on locking: --- 335,337 ---- .in -.5i ! .Uh "File Locking" A few words on locking: *************** *** 343,346 **** The \*(lqlockstyle\*(rq variable can take on three values: 0, 1, 2. ! A value of 0 says to use the flock syscall if you're running on 4.2BSD, ! (otherwise use a locking style of 1). A value of 1 or 2 specifies that a file should be created whose existence --- 343,350 ---- The \*(lqlockstyle\*(rq variable can take on three values: 0, 1, 2. ! A value of 0 is useful on \fBBSD42\fP systems. ! If you included the \fBLOCKF\fP option when building \fIMH\fP, the ! \fIlockf\fP syscall is used, otherwise the \fIflock\fP syscall is used. ! If you're not on a 4.2BSD system, ! a locking style of 0 is considered the same as locking style 1. ! A value of 1 or 2 specifies that a file should be created whose existence *** ../mh-6.7-dist/conf/doc/mh.rf Fri Dec 14 13:23:56 1990 --- conf/doc/mh.rf Mon Jan 7 16:56:42 1991 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: mh.rf,v 1.9 90/04/05 15:08:50 sources Exp $ .if '\*(ZZ'-man' \{\ --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: mh.rf,v 1.10 91/01/07 16:56:36 mh Exp $ .if '\*(ZZ'-man' \{\ *************** *** 201,202 **** --- 201,203 ---- ^mh\-profile (5)~^\- user customization for MH message system + ^mh\-sequence (5)~^\- sequence specification for MH message system .sp 1 *** ../mh-6.7-dist/conf/doc/next.rf Fri Dec 14 13:23:58 1990 --- conf/doc/next.rf Mon Dec 17 16:03:38 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: next.rf,v 1.5 90/04/05 15:13:47 sources Exp $ .SC NEXT 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: next.rf,v 1.6 90/12/17 16:03:31 mh Exp $ .SC NEXT 1 *************** *** 32,35 **** `+folder' defaults to the current folder - .Ds - `\-format' .Ds --- 32,33 ---- *** ../mh-6.7-dist/conf/doc/pick.rf Fri Dec 14 13:23:58 1990 --- conf/doc/pick.rf Tue Dec 18 14:57:43 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: pick.rf,v 1.5 90/04/05 15:14:01 sources Exp $ .SC PICK 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: pick.rf,v 1.6 90/12/18 14:57:30 mh Exp $ .SC PICK 1 *************** *** 85,86 **** --- 85,92 ---- + Note that since the `\-date' switch is a pattern matching operation (as + described above), + to find messages sent on a certain date + the pattern string must match the text of the + \*(lqDate:\*(rq field of the message. + Independent of any pattern matching operations requested, *************** *** 92,99 **** the `\-datefield\ field' switch may be used. ! \fIPick\fR will actually parse the date fields in each of the messages specified in `msgs' ! (unlike the `\-date' switch described above which does a pattern matching ! operation), ! and compare them to the date/time specified by use of the `\-after' ! and `\-before' switches. If `\-after' is given, --- 98,104 ---- the `\-datefield\ field' switch may be used. ! ! With `\-before' and `\-after', ! \fIpick\fR will actually parse the date fields in each of the messages specified in `msgs' ! and compare them to the date/time specified. If `\-after' is given, *************** *** 111,112 **** --- 116,118 ---- All defaults are taken from the current date, time, and timezone. + In addition to 822\-style dates, *************** *** 115,117 **** and the special dates ! \*(lqtoday\*(rq, \*(lqyesterday\*(rq, and \*(lqtomorrow\*(rq. All days of the week are judged to refer to a day in the past --- 121,124 ---- and the special dates ! \*(lqtoday\*(rq, \*(lqyesterday\*(rq (24 hours ago), ! and \*(lqtomorrow\*(rq (24 hours from now). All days of the week are judged to refer to a day in the past *************** *** 120,121 **** --- 127,129 ---- not \*(lqthis\ saturday\*(rq). + Finally, in addition to these special specifications, *** ../mh-6.7-dist/conf/doc/prev.rf Fri Dec 14 13:23:59 1990 --- conf/doc/prev.rf Mon Dec 17 16:03:40 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: prev.rf,v 1.5 90/04/05 15:14:42 sources Exp $ .SC PREV 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: prev.rf,v 1.6 90/12/17 16:03:39 mh Exp $ .SC PREV 1 *************** *** 32,35 **** `+folder' defaults to the current folder - .Ds - `\-format' .Ds --- 32,33 ---- *** ../mh-6.7-dist/conf/doc/prompter.rf Fri Dec 14 13:23:59 1990 --- conf/doc/prompter.rf Tue Dec 18 15:12:08 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: prompter.rf,v 1.6 90/04/05 15:09:05 sources Exp $ .SC PROMPTER 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: prompter.rf,v 1.7 90/12/18 15:12:01 mh Exp $ .SC PROMPTER 1 *************** *** 102,103 **** --- 102,112 ---- None + .Hh + The `\-rapid' option is particularly useful with \fIforw\fP, and + `\-noprepend' is useful with \fIcomp\ \-use\fP. + + The user may wish to link \fIprompter\fR under several names + (e.g., \*(lqrapid\*(rq) and give appropriate switches + in the profile entries under these names (e.g., \*(lqrapid: -rapid\*(rq). + This facilitates invoking prompter differently for + different \fIMH\fP commands (e.g., \*(lqforw: -editor rapid\*(rq). .Bu *** ../mh-6.7-dist/conf/doc/refile.rf Fri Dec 14 13:24:00 1990 --- conf/doc/refile.rf Fri Jan 25 15:22:04 1991 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: refile.rf,v 1.5 90/04/05 15:14:54 sources Exp $ .SC REFILE 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: refile.rf,v 1.8 91/01/14 16:43:06 mh Exp $ .SC REFILE 1 *************** *** 13,14 **** --- 13,15 ---- \%[\-file\ file] + \%[\-rmmproc program] \%[\-normmproc] +folder ... *************** *** 61,66 **** If `\-link' is not specified (or `\-nolink' is specified), ! the filed messages will be removed (\fIunlink\fR\0(2)) from the ! source folder, ! similar to the way \fImv\fR\0(1) works. If the user has a profile component such as --- 62,68 ---- If `\-link' is not specified (or `\-nolink' is specified), ! the filed messages will be removed from the ! source folder, by renaming them with a site-dependent prefix (usually ! a comma). + .ne 4 If the user has a profile component such as *************** *** 69,73 **** ! then instead of simply renaming the message file, ! \fIrefile\fR ! will call the named program to delete the file. --- 71,79 ---- ! then \fIrefile\fR ! will instead call the named program to delete the message files. ! The user may specify `\-rmmproc program' on the command line ! to override this profile specification. ! The \`-normmproc' option forces ! the message files to be deleted ! by renaming them as described above. *************** *** 106,107 **** --- 112,118 ---- See \fImh\-profile\fR\0(1) for information concerning the previous sequence. + .Bu + Since \fIrefile\fR uses your \fIrmmproc\fP to delete the message, + the \fIrmmproc\fP must \fBNOT\fP call \fIrefile\fP without + specifying `\-normmproc', + or you will create an infinte loop. .En *** ../mh-6.7-dist/conf/doc/repl.rf Fri Dec 14 13:24:00 1990 --- conf/doc/repl.rf Mon Dec 17 16:00:43 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: repl.rf,v 1.9 90/04/05 15:09:27 sources Exp $ .SC REPL 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: repl.rf,v 1.10 90/12/17 16:00:35 mh Exp $ .SC REPL 1 *************** *** 209,212 **** `\-nocc\ all' at ATHENA sites, `\-cc\ all' otherwise - .Ds - `\-format' .Ds --- 209,210 ---- *** ../mh-6.7-dist/conf/doc/rmm.rf Fri Dec 14 13:24:00 1990 --- conf/doc/rmm.rf Fri Jan 25 15:22:30 1991 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: rmm.rf,v 1.5 90/04/05 15:15:12 sources Exp $ .SC RMM 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: rmm.rf,v 1.10 91/01/25 15:22:28 mh Exp $ .SC RMM 1 *************** *** 53,54 **** --- 53,59 ---- If a folder is given, it will become the current folder. + .Bu + Since \fIrefile\fR uses your \fIrmmproc\fP to delete the message, + the \fIrmmproc\fP must \fBNOT\fP call \fIrefile\fP without + specifying `\-normmproc', + or you will create an infinte loop. .En *** ../mh-6.7-dist/conf/doc/scan.rf Fri Dec 14 13:24:01 1990 --- conf/doc/scan.rf Mon Jan 7 11:13:54 1991 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: scan.rf,v 1.8 90/04/05 15:10:08 sources Exp $ .SC SCAN 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: scan.rf,v 1.9 91/01/07 11:13:47 mh Exp $ .SC SCAN 1 *************** *** 14,15 **** --- 14,16 ---- \%[\-reverse] \%[\-noreverse] + \%[\-file filename] \%[\-help] *************** *** 96,98 **** Also, if no date header was present in the message, the \fIfunction\fR ! escapes which operate on {\fIdate\|} will return values for the date of last modification of the message file itself. --- 97,99 ---- Also, if no date header was present in the message, the \fIfunction\fR ! escapes which operate on {\fIdate\fP\|} will return values for the date of last modification of the message file itself. *************** *** 99,100 **** --- 100,102 ---- + \fIscan\fR will update the \fIMH\fR context prior to starting the listing, *************** *** 140,142 **** any following headers with the same component name are ignored. ! .br The switch `\-reverse', makes \fIscan\fR list the messages --- 142,144 ---- any following headers with the same component name are ignored. ! .sp The switch `\-reverse', makes \fIscan\fR list the messages *************** *** 143,144 **** --- 145,152 ---- in reverse order; this should be considered a bug. + .sp + The `\-file filename' switch allows the user to obtain a \fIscan\fP + listing of a maildrop file as produced by \fIpackf\fP. This listing + includes every message in the file. The user should use \fImsh\fP + for more selective processing of the file. `\-reverse' is ignored + with this option. .En *** ../mh-6.7-dist/conf/doc/tmac.h Fri Dec 14 13:24:02 1990 --- conf/doc/tmac.h Mon Jan 7 16:12:51 1991 *************** *** 1,5 **** .\" @(MHWARNING) ! .\" @(#)$Id: tmac.h,v 1.5 90/04/05 15:40:17 sources Exp $ .\" Try to keep only one copy of the documentation around .\" by re-defining macros and so forth. .\" --- 1,5 ---- .\" @(MHWARNING) ! .\" @(#)$Id: tmac.h,v 1.6 91/01/07 16:12:37 mh Exp $ .\" Try to keep only one copy of the documentation around .\" by re-defining macros and so forth. .\" *************** *** 66,69 **** --- 66,73 ---- .. .de ip .IP "\\$1" \\$2 + .. + .de Uh + .ne 4 + .SS "\\$1" .. *** ../mh-6.7-dist/conf/doc/whatnow.rf Fri Dec 14 13:24:02 1990 --- conf/doc/whatnow.rf Tue Dec 18 15:44:41 1990 *************** *** 1,3 **** .\" @(MHWARNING) ! .\" @(#)$Id: whatnow.rf,v 1.6 90/04/05 15:09:20 sources Exp $ .SC WHATNOW 1 --- 1,3 ---- .\" @(MHWARNING) ! .\" @(#)$Id: whatnow.rf,v 1.7 90/12/18 15:44:22 mh Exp $ .SC WHATNOW 1 *************** *** 24,26 **** prompts the user with \*(lqWhat now?\*(rq and awaits a response. ! The valid responses are .nf --- 24,27 ---- prompts the user with \*(lqWhat now?\*(rq and awaits a response. ! The valid responses are: ! .nf *************** *** 111,112 **** --- 112,120 ---- it with a leading comma); failure of a later edit preverves the draft. + + If \fIwhatnowproc\fR is \fIwhatnow\fR, + then \fIcomp\fR, \fIdist\fP, \fIforw\fP, and \fIrepl\fP use + a built\-in \fIwhatnow\fR, + and do not actually run the \fIwhatnow\fR program. + Hence, if you define your own \fIwhatnowproc\fR, + don't call it \fIwhatnow\fR since it won't be run. *** /dev/null Fri Jan 25 16:03:46 1991 --- conf/examples/uci.sun Fri Jan 25 09:27:34 1991 *************** *** 0 **** --- 1,39 ---- + # uci.sun - for a Sun3 or Sun4 running Sun OS 4.1 + bin /usr/local + bbhome /usr/bboards + etc /usr/local/lib/mh + mail /usr/spool/mail + mailgroup off + mandir /usr/man + manuals local + chown /etc/chown + editor prompter + remove mv -f + mts mmdf2/smtp + bboards nntp + bbdelivery off + mf off + pop on + options BIND + options BSD42 + options BSD43 + options DBM + options LOCKF + options MHE + options MHRC + options NFS + options POP2 + options RPATHS + options RPOP + options SUN40 + options SUNVIBUG + options TYPESIG=void + options WHATNOW + options UCI + #options ZONEINFO + ldoptions -s + ldoptlibs -ldbm + curses -lcurses -ltermcap + ranlib on + sharedlib on + slibdir /usr/local/lib *** ../mh-6.7-dist/conf/makefiles/doc Fri Dec 14 13:24:08 1990 --- conf/makefiles/doc Fri Jan 25 15:49:13 1991 *************** *** 4,6 **** # @(MHWARNING) ! # @(#)$Id: doc,v 2.10 90/04/08 15:06:00 sources Exp $ ############################################################################## --- 4,6 ---- # @(MHWARNING) ! # @(#)$Id: doc,v 2.12 91/01/25 15:49:10 mh Exp $ ############################################################################## *************** *** 60,65 **** MAN5 = mh-alias.$(EXT5) mh-format.$(EXT5) mh-mail.$(EXT5) \ ! mh-profile.$(EXT5) ! man5 = mh-alias mh-format mh-mail mh-profile ! inst-man5= inst-mh-alias inst-mh-format inst-mh-mail inst-mh-profile ! Tman5 = mh-alias.man mh-format.man mh-mail.man mh-profile.man --- 60,67 ---- MAN5 = mh-alias.$(EXT5) mh-format.$(EXT5) mh-mail.$(EXT5) \ ! mh-profile.$(EXT5) mh-sequence.$(EXT5) ! man5 = mh-alias mh-format mh-mail mh-profile mh-sequence ! inst-man5= inst-mh-alias inst-mh-format inst-mh-mail inst-mh-profile \ ! inst-mh-sequence ! Tman5 = mh-alias.man mh-format.man mh-mail.man mh-profile.man \ ! mh-sequence.man *************** *** 66,73 **** MAN8 = ap.$(EXT8) conflict.$(EXT8) dp.$(EXT8) install-mh.$(EXT8) \ ! post.$(EXT8) mh-tailor.$(EXT8) ! man8 = ap conflict dp install-mh post mh-tailor inst-man8= inst-ap inst-conflict inst-dp inst-install-mh inst-post \ ! inst-mh-tailor Tman8 = ap.man conflict.man dp.man install-mh.man post.man \ ! mh-tailor.man --- 68,75 ---- MAN8 = ap.$(EXT8) conflict.$(EXT8) dp.$(EXT8) install-mh.$(EXT8) \ ! post.$(EXT8) mh-tailor.$(EXT8) fmtdump.$(EXT8) ! man8 = ap conflict dp install-mh post mh-tailor fmtdump inst-man8= inst-ap inst-conflict inst-dp inst-install-mh inst-post \ ! inst-mh-tailor inst-fmtdump Tman8 = ap.man conflict.man dp.man install-mh.man post.man \ ! mh-tailor.man fmtdump.man *************** *** 278,279 **** --- 280,290 ---- + inst-fmtdump: $(MANDIR)/$(DIR8)/fmtdump.$(EXT8) + + $(MANDIR)/$(DIR8)/fmtdump.$(EXT8): fmtdump.man + -$(REMOVE) $@ zfmtdump.man + cp fmtdump.man $@ + -@chmod $(MANPROT) $@ + -@ls -l $@ + -@echo "" + inst-forw: $(MANDIR)/$(DIR1)/forw.$(EXT1) *************** *** 368,369 **** --- 379,389 ---- + inst-mh-sequence: $(MANDIR)/$(DIR5)/mh-sequence.$(EXT5) + + $(MANDIR)/$(DIR5)/mh-sequence.$(EXT5): mh-sequence.man + -$(REMOVE) $@ zmh-sequence.man + cp mh-sequence.man $@ + -@chmod $(MANPROT) $@ + -@ls -l $@ + -@echo "" + inst-mhook: $(MANDIR)/$(DIR1)/mhook.$(EXT1) *************** *** 621,622 **** --- 641,643 ---- dp: dp.man + fmtdump: fmtdump.man folder: folder.man *************** *** 631,632 **** --- 652,654 ---- mh-profile: mh-profile.man + mh-sequence: mh-sequence.man mh-tailor: mh-tailor.man *************** *** 665,667 **** whatnow.me whom.me mh-alias.me mh-format.me mh-mail.me \ ! mh-profile.me ap.me conflict.me dp.me install-mh.me post.me \ @BEGIN: TMA --- 687,690 ---- whatnow.me whom.me mh-alias.me mh-format.me mh-mail.me \ ! mh-profile.me mh-sequence.me \ ! ap.me conflict.me dp.me install-mh.me fmtdump.me post.me \ @BEGIN: TMA *** ../mh-6.7-dist/conf/makefiles/support/bboards Fri Dec 14 13:24:09 1990 --- conf/makefiles/support/bboards Tue Dec 18 13:34:39 1990 *************** *** 4,6 **** # @(MHWARNING) ! # @(#)$Id: bboards,v 2.7 90/04/05 15:16:08 sources Exp $ ############################################################################## --- 4,6 ---- # @(MHWARNING) ! # @(#)$Id: bboards,v 2.9 90/12/18 13:34:38 mh Exp $ ############################################################################## *************** *** 28,29 **** --- 28,35 ---- CC = @(MHCOMPILER) + @BEGIN: STDLIB + LD = @(MHCOMPILER) + @END: STDLIB + @BEGIN: SHAREDLIB + LD = LD_LIBRARY_PATH=../../sbr @(MHCOMPILER) + @END: SHAREDLIB @BEGIN: OPTIM *************** *** 45,47 **** LDLIBS2 = $(LIBES2) $(LDOPTLIB) ! LDLIBS2 = ../../config/config.o -Bdynamic -L../../sbr -lmh \ $(LIBES1) $(LDOPTLIB) --- 51,53 ---- LDLIBS2 = $(LIBES2) $(LDOPTLIB) ! LDLIBS2 = ../../config/config.o -Bdynamic @(SLDFLAG) -lmh \ $(LIBES1) $(LDOPTLIB) *************** *** 120,122 **** xbbaka: bbaka.o $(LIBES1) ! $(CC) $(LDFLAGS) -o $@ bbaka.o $(LDLIBS1) --- 126,128 ---- xbbaka: bbaka.o $(LIBES1) ! $(LD) $(LDFLAGS) -o $@ bbaka.o $(LDLIBS1) *************** *** 141,143 **** xbbexp: bbexp.o ../../uip/dropsbr.o $(LIBES2) ! $(CC) $(LDFLAGS) -o $@ bbexp.o ../../uip/dropsbr.o $(LDLIBS2) --- 147,149 ---- xbbexp: bbexp.o ../../uip/dropsbr.o $(LIBES2) ! $(LD) $(LDFLAGS) -o $@ bbexp.o ../../uip/dropsbr.o $(LDLIBS2) *************** *** 162,164 **** xbbtar: bbtar.o $(LIBES1) ! $(CC) $(LDFLAGS) -o $@ bbtar.o $(LDLIBS1) --- 168,170 ---- xbbtar: bbtar.o $(LIBES1) ! $(LD) $(LDFLAGS) -o $@ bbtar.o $(LDLIBS1) *** ../mh-6.7-dist/conf/makefiles/support/pop Fri Dec 14 13:24:09 1990 --- conf/makefiles/support/pop Tue Dec 18 13:34:38 1990 *************** *** 4,6 **** # @(MHWARNING) ! # @(#)$Id: pop,v 2.7 90/11/05 16:06:03 mh Exp $ ############################################################################## --- 4,6 ---- # @(MHWARNING) ! # @(#)$Id: pop,v 2.9 90/12/18 13:34:33 mh Exp $ ############################################################################## *************** *** 26,27 **** --- 26,33 ---- CC = @(MHCOMPILER) + @BEGIN: STDLIB + LD = @(MHCOMPILER) + @END: STDLIB + @BEGIN: SHAREDLIB + LD = LD_LIBRARY_PATH=../../sbr @(MHCOMPILER) + @END: SHAREDLIB @BEGIN: OPTIM *************** *** 43,45 **** LDLIBS2 = ../../config/config.o ../../config/version.o \ ! -Bdynamic -L../../sbr -lmh $(LIBES1) $(LDOPTLIB) @END: SHAREDLIB --- 49,51 ---- LDLIBS2 = ../../config/config.o ../../config/version.o \ ! -Bdynamic @(SLDFLAG) -lmh $(LIBES1) $(LDOPTLIB) @END: SHAREDLIB *************** *** 95,97 **** ../../uip/dropsbr.o $(LIBES2) ! $(CC) $(LDFLAGS) -o $@ popd.o popser.o syslog.o \ ../../uip/dropsbr.o $(LDLIBS2) --- 101,103 ---- ../../uip/dropsbr.o $(LIBES2) ! $(LD) $(LDFLAGS) -o $@ popd.o popser.o syslog.o \ ../../uip/dropsbr.o $(LDLIBS2) *************** *** 118,120 **** xpopaka: popaka.o $(LIBES1) ! $(CC) $(LDFLAGS) -o $@ popaka.o $(LDLIBS1) --- 124,126 ---- xpopaka: popaka.o $(LIBES1) ! $(LD) $(LDFLAGS) -o $@ popaka.o $(LDLIBS1) *************** *** 142,144 **** xpopwrd: popwrd.o $(LIBES1) ! $(CC) $(LDFLAGS) -o $@ popwrd.o $(LDLIBS1) --- 148,150 ---- xpopwrd: popwrd.o $(LIBES1) ! $(LD) $(LDFLAGS) -o $@ popwrd.o $(LDLIBS1) *************** *** 172,174 **** xsmtpd: smtpd.o syslog.o ! $(CC) $(LDFLAGS) -o $@ smtpd.o syslog.o --- 178,180 ---- xsmtpd: smtpd.o syslog.o ! $(LD) $(LDFLAGS) -o $@ smtpd.o syslog.o *** ../mh-6.7-dist/conf/makefiles/uip Fri Dec 14 13:24:10 1990 --- conf/makefiles/uip Fri Jan 25 15:50:23 1991 *************** *** 4,6 **** # @(MHWARNING) ! # @(#)$Id: uip,v 2.9 90/04/05 15:17:01 sources Exp $ ############################################################################## --- 4,6 ---- # @(MHWARNING) ! # @(#)$Id: uip,v 2.12 91/01/25 15:50:18 mh Exp $ ############################################################################## *************** *** 103,104 **** --- 103,110 ---- CC = @(MHCOMPILER) + @BEGIN: STDLIB + LD = @(MHCOMPILER) + @END: STDLIB + @BEGIN: SHAREDLIB + LD = LD_LIBRARY_PATH=../sbr @(MHCOMPILER) + @END: SHAREDLIB @BEGIN: OPTIM *************** *** 118,120 **** ../zotnet/libzot.a ! LDLIBES = ../config/config.o -Bdynamic -L../sbr -lmh \ ../mts/libmts.a ../zotnet/libzot.a --- 124,126 ---- ../zotnet/libzot.a ! LDLIBES = ../config/config.o -Bdynamic @(SLDFLAG) -lmh \ ../mts/libmts.a ../zotnet/libzot.a *************** *** 133,135 **** MISC = ap conflict dp install-mh mhl post rcvdist rcvpack rcvstore \ ! rcvtty \ @BEGIN: SENDMTS --- 139,141 ---- MISC = ap conflict dp install-mh mhl post rcvdist rcvpack rcvstore \ ! rcvtty fmtdump \ @BEGIN: SENDMTS *************** *** 147,149 **** inst-post inst-rcvdist inst-rcvpack inst-rcvstore inst-rcvtty \ ! $(IMTSMISC) \ @BEGIN: SENDMTS --- 153,155 ---- inst-post inst-rcvdist inst-rcvpack inst-rcvstore inst-rcvtty \ ! inst-fmtdump $(IMTSMISC) \ @BEGIN: SENDMTS *************** *** 158,160 **** LMISC = l-ap l-conflict l-dp l-install-mh l-mhl l-post l-rcvdist \ ! l-rcvpack l-rcvstore l-rcvtty $(LMTSMISC) $(LBBMISC) \ @BEGIN: SENDMTS --- 164,167 ---- LMISC = l-ap l-conflict l-dp l-install-mh l-mhl l-post l-rcvdist \ ! l-rcvpack l-rcvstore l-rcvtty l-fmtdump \ ! $(LMTSMISC) $(LBBMISC) \ @BEGIN: SENDMTS *************** *** 169,171 **** TMISC = xap xconflict xdp xinstall-mh xmhl xpost xrcvdist xrcvpack \ ! xrcvstore xrcvtty $(TMTSMISC) $(TBBMISC) $(TPOPMISC) \ $(TSMTSMISC) \ --- 176,179 ---- TMISC = xap xconflict xdp xinstall-mh xmhl xpost xrcvdist xrcvpack \ ! xrcvstore xrcvtty xfmtdump \ ! $(TMTSMISC) $(TBBMISC) $(TPOPMISC) \ $(TSMTSMISC) \ *************** *** 217,219 **** xali: ali.o aliasbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ ali.o aliasbr.o $(LDLIBS) --- 225,227 ---- xali: ali.o aliasbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ ali.o aliasbr.o $(LDLIBS) *************** *** 237,239 **** xanno: anno.o annosbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ anno.o annosbr.o $(LDLIBS) --- 245,247 ---- xanno: anno.o annosbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ anno.o annosbr.o $(LDLIBS) *************** *** 254,256 **** xap: ap.o trmsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ ap.o trmsbr.o $(LDLIBS) $(LDCURSES) --- 262,264 ---- xap: ap.o trmsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ ap.o trmsbr.o $(LDLIBS) $(LDCURSES) *************** *** 278,280 **** xbbc: bbc.o $(PSHLIB) $(LIBES) ! $(CC) $(LDFLAGS) -o $@ bbc.o $(PSHLIB) $(LDLIBS) --- 286,288 ---- xbbc: bbc.o $(PSHLIB) $(LIBES) ! $(LD) $(LDFLAGS) -o $@ bbc.o $(PSHLIB) $(LDLIBS) *************** *** 298,300 **** xbbl: bbl.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ bbl.o $(LDLIBS) --- 306,308 ---- xbbl: bbl.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ bbl.o $(LDLIBS) *************** *** 315,317 **** xburst: burst.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ burst.o $(LDLIBS) --- 323,325 ---- xburst: burst.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ burst.o $(LDLIBS) *************** *** 332,334 **** xcipher: cipher.o $(TMALIB) $(LIBES) ! $(CC) $(LDFLAGS) -o $@ cipher.o $(TMALIB) $(LDLIBS) --- 340,342 ---- xcipher: cipher.o $(TMALIB) $(LIBES) ! $(LD) $(LDFLAGS) -o $@ cipher.o $(TMALIB) $(LDLIBS) *************** *** 350,352 **** whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ comp.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) --- 358,360 ---- whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ comp.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) *************** *** 369,371 **** xconflict: conflict.o aliasbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ conflict.o aliasbr.o $(LDLIBS) --- 377,379 ---- xconflict: conflict.o aliasbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ conflict.o aliasbr.o $(LDLIBS) *************** *** 386,388 **** xdecipher: decipher.o $(TMALIB) $(LIBES) ! $(CC) $(LDFLAGS) -o $@ decipher.o $(TMALIB) $(LDLIBS) --- 394,396 ---- xdecipher: decipher.o $(TMALIB) $(LIBES) ! $(LD) $(LDFLAGS) -o $@ decipher.o $(TMALIB) $(LDLIBS) *************** *** 404,406 **** whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ dist.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) --- 412,414 ---- whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ dist.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) *************** *** 423,425 **** xdp: dp.o trmsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ dp.o trmsbr.o $(LDLIBS) $(LDCURSES) --- 431,433 ---- xdp: dp.o trmsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ dp.o trmsbr.o $(LDLIBS) $(LDCURSES) *************** *** 428,429 **** --- 436,454 ---- + inst-fmtdump: $(ETCDIR)/fmtdump + + $(ETCDIR)/fmtdump: xfmtdump + -$(REMOVE) $@ zfmtdump + cp xfmtdump $@ + -@chmod $(PGMPROT) $@ + -@ls -l $@ + -@echo "" + + fmtdump: xfmtdump + + xfmtdump: fmtdump.o trmsbr.o $(LIBES) + $(LD) $(LDFLAGS) -o $@ fmtdump.o $(LDLIBS) $(LDCURSES) + + l-fmtdump:; $(LINT) $(LFLAGS) fmtdump.c $(LLIBS) + + inst-folders: inst-folder *************** *** 444,446 **** xfolder: folder.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ folder.o $(LDLIBS) --- 469,471 ---- xfolder: folder.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ folder.o $(LDLIBS) *************** *** 462,464 **** whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ forw.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) --- 487,489 ---- whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ forw.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) *************** *** 493,495 **** dropsbr.o trmsbr.o $(POPLIB) $(TMALIB) $(LIBES) ! $(CC) $(LDFLAGS) -o $@ inc.o scansbr.o \ dropsbr.o trmsbr.o $(POPLIB) $(TMALIB) $(LDLIBS) \ --- 518,520 ---- dropsbr.o trmsbr.o $(POPLIB) $(TMALIB) $(LIBES) ! $(LD) $(LDFLAGS) -o $@ inc.o scansbr.o \ dropsbr.o trmsbr.o $(POPLIB) $(TMALIB) $(LDLIBS) \ *************** *** 513,515 **** xinstall-mh: install-mh.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ install-mh.o $(LDLIBS) --- 538,540 ---- xinstall-mh: install-mh.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ install-mh.o $(LDLIBS) *************** *** 530,532 **** xkdsc: kdsc.o $(KDSLIB) $(LIBES) ! $(CC) $(LDFLAGS) -o $@ kdsc.o $(KDSLIB) $(LDLIBS) --- 555,557 ---- xkdsc: kdsc.o $(KDSLIB) $(LIBES) ! $(LD) $(LDFLAGS) -o $@ kdsc.o $(KDSLIB) $(LDLIBS) *************** *** 547,549 **** xmark: mark.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ mark.o $(LDLIBS) --- 572,574 ---- xmark: mark.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ mark.o $(LDLIBS) *************** *** 565,567 **** mhlsbr.o trmsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ mhl.o \ mhlsbr.o trmsbr.o $(LDLIBS) $(LDCURSES) --- 590,592 ---- mhlsbr.o trmsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ mhl.o \ mhlsbr.o trmsbr.o $(LDLIBS) $(LDCURSES) *************** *** 584,586 **** xmhmail: mhmail.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ mhmail.o $(LDLIBS) --- 609,611 ---- xmhmail: mhmail.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ mhmail.o $(LDLIBS) *************** *** 601,603 **** xmhpath: mhpath.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ mhpath.o $(LDLIBS) --- 626,628 ---- xmhpath: mhpath.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ mhpath.o $(LDLIBS) *************** *** 625,627 **** xmsgchk: msgchk.o $(POPLIB) $(LIBES) ! $(CC) $(LDFLAGS) -o $@ msgchk.o $(POPLIB) $(LDLIBS) --- 650,652 ---- xmsgchk: msgchk.o $(POPLIB) $(LIBES) ! $(LD) $(LDFLAGS) -o $@ msgchk.o $(POPLIB) $(LDLIBS) *************** *** 644,646 **** $(PSHLIB) $(LIBES) ! $(CC) $(LDFLAGS) -o $@ msh.o mshcmds.o vmhsbr.o \ picksbr.o scansbr.o dropsbr.o mhlsbr.o trmsbr.o \ --- 669,671 ---- $(PSHLIB) $(LIBES) ! $(LD) $(LDFLAGS) -o $@ msh.o mshcmds.o vmhsbr.o \ picksbr.o scansbr.o dropsbr.o mhlsbr.o trmsbr.o \ *************** *** 665,667 **** xpackf: packf.o dropsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ packf.o dropsbr.o $(LDLIBS) --- 690,692 ---- xpackf: packf.o dropsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ packf.o dropsbr.o $(LDLIBS) *************** *** 682,684 **** xpick: pick.o picksbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ pick.o picksbr.o $(LDLIBS) --- 707,709 ---- xpick: pick.o picksbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ pick.o picksbr.o $(LDLIBS) *************** *** 707,709 **** aliasbr.o $(MTSBRS) $(TMALIB) $(LIBES) ! $(CC) $(LDFLAGS) -o $@ post.o \ aliasbr.o $(MTSBRS) $(TMALIB) $(LDLIBS) --- 732,734 ---- aliasbr.o $(MTSBRS) $(TMALIB) $(LIBES) ! $(LD) $(LDFLAGS) -o $@ post.o \ aliasbr.o $(MTSBRS) $(TMALIB) $(LDLIBS) *************** *** 726,728 **** xprompter: prompter.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ prompter.o $(LDLIBS) --- 751,753 ---- xprompter: prompter.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ prompter.o $(LDLIBS) *************** *** 743,745 **** xrcvdist: rcvdist.o distsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ rcvdist.o distsbr.o $(LDLIBS) --- 768,770 ---- xrcvdist: rcvdist.o distsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ rcvdist.o distsbr.o $(LDLIBS) *************** *** 760,762 **** xrcvpack: rcvpack.o dropsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ rcvpack.o dropsbr.o $(LDLIBS) --- 785,787 ---- xrcvpack: rcvpack.o dropsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ rcvpack.o dropsbr.o $(LDLIBS) *************** *** 777,779 **** xrcvstore: rcvstore.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ rcvstore.o $(LDLIBS) --- 802,804 ---- xrcvstore: rcvstore.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ rcvstore.o $(LDLIBS) *************** *** 799,801 **** scansbr.o trmsbr.o ttyw.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ rcvtty.o \ scansbr.o trmsbr.o ttyw.o $(LDLIBS) $(LDCURSES) --- 824,826 ---- scansbr.o trmsbr.o ttyw.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ rcvtty.o \ scansbr.o trmsbr.o ttyw.o $(LDLIBS) $(LDCURSES) *************** *** 818,820 **** xrefile: refile.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ refile.o $(LDLIBS) --- 843,845 ---- xrefile: refile.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ refile.o $(LDLIBS) *************** *** 836,838 **** whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ repl.o replsbr.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) --- 861,863 ---- whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ repl.o replsbr.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) *************** *** 858,860 **** xrmail: rmail.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ rmail.o $(LDLIBS) --- 883,885 ---- xrmail: rmail.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ rmail.o $(LDLIBS) *************** *** 875,877 **** xrmf: rmf.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ rmf.o $(LDLIBS) --- 900,902 ---- xrmf: rmf.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ rmf.o $(LDLIBS) *************** *** 892,894 **** xrmm: rmm.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ rmm.o $(LDLIBS) --- 917,919 ---- xrmm: rmm.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ rmm.o $(LDLIBS) *************** *** 910,912 **** scansbr.o trmsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ scan.o \ scansbr.o trmsbr.o $(LDLIBS) $(LDCURSES) --- 935,937 ---- scansbr.o trmsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ scan.o \ scansbr.o trmsbr.o $(LDLIBS) $(LDCURSES) *************** *** 930,932 **** sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ send.o \ sendsbr.o annosbr.o distsbr.o $(LDLIBS) --- 955,957 ---- sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ send.o \ sendsbr.o annosbr.o distsbr.o $(LDLIBS) *************** *** 958,960 **** mhlsbr.o trmsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ show.o \ mhlsbr.o trmsbr.o $(LDLIBS) $(LDCURSES) --- 983,985 ---- mhlsbr.o trmsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ show.o \ mhlsbr.o trmsbr.o $(LDLIBS) $(LDCURSES) *************** *** 984,986 **** xsbboards: sbboards.o dropsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ sbboards.o dropsbr.o $(LDLIBS) --- 1009,1011 ---- xsbboards: sbboards.o dropsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ sbboards.o dropsbr.o $(LDLIBS) *************** *** 1001,1003 **** xslocal: slocal.o aliasbr.o dropsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ slocal.o aliasbr.o dropsbr.o $(LDLIBS) --- 1026,1028 ---- xslocal: slocal.o aliasbr.o dropsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ slocal.o aliasbr.o dropsbr.o $(LDLIBS) *************** *** 1018,1020 **** xsortm: sortm.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ sortm.o $(LDLIBS) --- 1043,1045 ---- xsortm: sortm.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ sortm.o $(LDLIBS) *************** *** 1038,1040 **** xspop: spop.o dropsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ spop.o dropsbr.o $(LDLIBS) --- 1063,1065 ---- xspop: spop.o dropsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ spop.o dropsbr.o $(LDLIBS) *************** *** 1059,1061 **** xspost: spost.o aliasbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ spost.o aliasbr.o $(LDLIBS) --- 1084,1086 ---- xspost: spost.o aliasbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ spost.o aliasbr.o $(LDLIBS) *************** *** 1077,1079 **** xtma: tma.o $(TMALIB) $(LIBES) ! $(CC) $(LDFLAGS) -o $@ tma.o $(TMALIB) $(LDLIBS) --- 1102,1104 ---- xtma: tma.o $(TMALIB) $(LIBES) ! $(LD) $(LDFLAGS) -o $@ tma.o $(TMALIB) $(LDLIBS) *************** *** 1094,1096 **** xumhook: umhook.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ umhook.o $(LDLIBS) $(LDCURSES) --- 1119,1121 ---- xumhook: umhook.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ umhook.o $(LDLIBS) $(LDCURSES) *************** *** 1111,1113 **** xvmh: vmh.o vmhsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ vmh.o vmhsbr.o $(LDLIBS) $(LDCURSES) --- 1136,1138 ---- xvmh: vmh.o vmhsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ vmh.o vmhsbr.o $(LDLIBS) $(LDCURSES) *************** *** 1117,1119 **** xvmhtest: vmhtest.o vmhsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ vmhtest.o vmhsbr.o $(LDLIBS) --- 1142,1144 ---- xvmhtest: vmhtest.o vmhsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ vmhtest.o vmhsbr.o $(LDLIBS) *************** *** 1133,1135 **** whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ whatnow.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) --- 1158,1160 ---- whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ whatnow.o \ whatnowsbr.o sendsbr.o annosbr.o distsbr.o $(LDLIBS) *************** *** 1152,1154 **** xwhom: whom.o distsbr.o $(LIBES) ! $(CC) $(LDFLAGS) -o $@ whom.o distsbr.o $(LDLIBS) --- 1177,1179 ---- xwhom: whom.o distsbr.o $(LIBES) ! $(LD) $(LDFLAGS) -o $@ whom.o distsbr.o $(LDLIBS) *************** *** 1216,1218 **** # xpickle: pickle.o $(LIBES) ! # $(CC) $(LDFLAGS) -o $@ pickle.o $(LDLIBS) # --- 1241,1243 ---- # xpickle: pickle.o $(LIBES) ! # $(LD) $(LDFLAGS) -o $@ pickle.o $(LDLIBS) # *************** *** 1392,1393 **** --- 1417,1423 ---- #forw.o: /usr/include/sys/stat.h + fmtdump.o: fmtdump.c + fmtdump.o: ../h/mh.h + fmtdump.o: ../h/formatsbr.h + fmtdump.o: ../h/fmtcompile.h + #fmtdump.o: /usr/include/stdio.h inc.o: inc.c *** ../mh-6.7-dist/conf/mh-gen.8 Fri Dec 14 13:24:11 1990 --- conf/mh-gen.8 Thu Jan 24 08:28:05 1991 *************** *** 1,2 **** ! .\" @(#)$Id: mh-gen.8,v 2.50 90/11/21 09:27:52 mh Exp Locker: mh $ .\" uneven inter-word spacing (nroff line adjusting) hampers readability --- 1,2 ---- ! .\" @(#)$Id: mh-gen.8,v 2.54 91/01/24 08:27:50 mh Exp $ .\" uneven inter-word spacing (nroff line adjusting) hampers readability *************** *** 425,426 **** --- 425,433 ---- .ti -.5i + LOCKF + .br + Directs \fIMH\fP to use the \fBlockf()\fP system call for UNIX-style + locking instead of \fBflock()\fP. If you're using NFS to read or + write maildrops, you should enable this option. + + .ti -.5i locname *************** *** 578,579 **** --- 585,600 ---- .ti -.5i + SUNVIBUG + .br + This option causes + \fIMH\fP to return to the \*(lqWhat now?\*(rq + prompt if your initial editor is \fBvi\fP + and it exits with non-zero status. + Use on Sun OS 4.1 and other systems where the + \fB/usr/ucb/vi\fP editor was changed to + exit with its status equal to the number of pseudo-\*(lqerrors\*(rq + encountered during the edit. This causes a problem for programs that + test the exit status of their editor and abort if the status is non-zero. + (This includes \fIMH\fP and programs like \fB/usr/etc/vipw\fP). + + .ti -.5i SYS5 *************** *** 723,736 **** .br ! The directory where the MH shared library should go. ! You'll need to manually run \fIldconfig\fP\0(8) whenever a new ! shared object is installed on the system. ! If you want to ! put it somewhere other than \fB/usr/lib\fP or \fB/usr/local/lib\fP ! (not advisable), you'll probably have to run \fIldconfig\fR\0(8) on ! that directory, or ! alter the environment variable \fBLD_LIBRARY_PATH\fP for each ! user wishing to use the MH system (this is messy). See ! \fIld\fR\0(1) for more information about how to do this. .ti -.5i --- 744,755 ---- .br ! The directory where the \fIMH\fP shared library should go. ! Since some \fIMH\fP programs are setuid, they'll only look for ! the library in \*(lqtrusted\*(rq locations. Putting the library ! somewhere besides \fB/usr/lib\fP or \fB/usr/local/lib\fP is not advisable. + You may need to run \fIldconfig\fP\0(8) manually whenever a new + shared object is installed on the system. + See \fIld\fR\0(1) for more information about using shared libraries. + .ti -.5i *************** *** 777,780 **** .PP ! Now install the configured files into the source areas. (On SYSTEM 5 ! systems you may need to use \*(lqmake sys5\*(rq to compile mhconfig.) .sp 1 --- 796,801 ---- .PP ! Now install the configured files into the source areas. (On SYS5 ! systems, or other systems where you get complaints about ! \*(lq_index\*(rq and \*(lq_rindex\*(rq being undefined, ! you should use \*(lqmake sys5\*(rq to compile mhconfig.) .sp 1 *** ../mh-6.7-dist/conf/mhconfig.c Fri Dec 14 13:24:11 1990 --- conf/mhconfig.c Fri Jan 25 14:48:48 1991 *************** *** 1,17 **** /* mhconfig.c - configure MH */ /* cc [-DSYS5] mhconfig.c -o mhconfig */ #ifndef lint ! static char ident[] = "@(#)$Id: mhconfig.c,v 2.26 90/11/05 16:24:55 mh Exp $"; #endif lint #include #include ! #ifdef SYS5 #define index strchr #define rindex strrchr #endif SYS5 extern char *strcpy(), *malloc(), *index(), *rindex(); #ifdef notdef extern char *sprintf(); /* rely on stdio.h to declare this */ --- 1,21 ---- /* mhconfig.c - configure MH */ /* cc [-DSYS5] mhconfig.c -o mhconfig */ #ifndef lint ! static char ident[] = "@(#)$Id: mhconfig.c,v 2.30 91/01/25 14:48:44 mh Exp $"; #endif lint #include #include ! #ifdef hpux ! #define SYS5 ! #endif #ifdef SYS5 #define index strchr #define rindex strrchr #endif SYS5 + static void insopt(), mkopts(); + extern char *strcpy(), *malloc(), *index(), *rindex(); #ifdef notdef extern char *sprintf(); /* rely on stdio.h to declare this */ *************** *** 368,377 **** fprintf (fp, "/^@BEGIN: RANLIB$/,/^@END: RANLIB$/d\n"); } ! if (strcmp (sharedlib, "on") == 0) { fprintf (fp, "/^@BEGIN: SHAREDLIB$/d\n/^@END: SHAREDLIB$/d\n"); fprintf (fp, "/^@BEGIN: STDLIB$/,/^@END: STDLIB$/d\n"); fprintf (fp, "s%%@(SLIBDIR)%%%s%%g\n",slibdir); } else { fprintf (fp, "/^@BEGIN: STDLIB$/d\n/^@END: STDLIB$/d\n"); --- 372,385 ---- fprintf (fp, "/^@BEGIN: RANLIB$/,/^@END: RANLIB$/d\n"); } ! if (strcmp (sharedlib, "on") == 0 || strcmp (sharedlib, "secure") == 0) { fprintf (fp, "/^@BEGIN: SHAREDLIB$/d\n/^@END: SHAREDLIB$/d\n"); fprintf (fp, "/^@BEGIN: STDLIB$/,/^@END: STDLIB$/d\n"); fprintf (fp, "s%%@(SLIBDIR)%%%s%%g\n",slibdir); + if (strcmp (sharedlib, "secure") == 0) + fprintf (fp, "s%%@(SLDFLAG)%%-L%s%%g\n",slibdir); + else + fprintf (fp, "s%%@(SLDFLAG)%%%%g\n"); } else { fprintf (fp, "/^@BEGIN: STDLIB$/d\n/^@END: STDLIB$/d\n"); *************** *** 683,691 **** add_option ("SPRINTFTYPE=int"); } ! if (strcmp (sharedlib, "on") && strcmp (sharedlib, "off")) ! adios (NULLCP, "sharedlib should be either \"on\" or \"off\", not %s", ! sharedlib); if (strcmp (tma, "on") && strcmp (tma, "off")) adios (NULLCP, "tma should be either \"on\" or \"off\", not %s", tma); --- 691,701 ---- add_option ("SPRINTFTYPE=int"); } ! if (strcmp (sharedlib, "on") && strcmp (sharedlib, "off") ! && strcmp (sharedlib, "secure")) ! adios (NULLCP, ! "sharedlib should be either \"on\", \"off\", or \"secure\", not %s", ! sharedlib); if (strcmp (tma, "on") && strcmp (tma, "off")) adios (NULLCP, "tma should be either \"on\" or \"off\", not %s", tma); *************** *** 770,776 **** *bp++ = *s++; } (void) strcpy (bp, "\", "); ! myopts = stradd (buffer, myopts); } --- 780,786 ---- *bp++ = *s++; } (void) strcpy (bp, "\", "); ! insopt (buffer); } *************** *** 777,783 **** end_myopt () { printf ("\n"); (void) fflush (stdout); ! myopts = stradd ("NULL};", myopts); } --- 787,793 ---- end_myopt () { printf ("\n"); (void) fflush (stdout); ! mkopts(); myopts = stradd ("NULL};", myopts); } *************** *** 898,901 **** --- 908,955 ---- (void) fputc ('\n', stderr); exit (1); + } + + /* quick and dirty ordering of options for readability */ + + struct opt { + char *s; + struct opt *n; + }; + + static struct opt *optp = (struct opt *)NULL; + + static void + insopt(s) + char *s; /* string for sorting */ + { + struct opt *p, + *np, + *lp = (struct opt *)NULL; + + if ((np = (struct opt *) malloc ((unsigned) sizeof (struct opt))) == + (struct opt *)NULL) + adios (NULL, "unable to malloc opt"); + np -> s = strdup(s); + np -> n = (struct opt *)NULL; + + for (p = optp; p; lp = p, p = p -> n) { + if (strcmp (p->s, s) > 0) + break; + } + if (p) + np -> n = p; + if (lp) + lp -> n = np; + else + optp = np; + } + + static void + mkopts() + { + struct opt *p; + + for (p = optp; p; p = p -> n) + myopts = stradd (p->s, myopts); } *** ../mh-6.7-dist/h/fmtcompile.h Fri Dec 14 13:24:15 1990 --- h/fmtcompile.h Thu Dec 27 17:04:19 1990 *************** *** 1,4 **** ! /* @(#)$Id: fmtcompile.h,v 1.4 90/04/05 15:06:42 sources Exp $ */ /* Format Types */ /* -------------*/ --- 1,4 ---- ! /* @(#)$Id: fmtcompile.h,v 1.5 90/12/27 17:04:12 mh Exp $ */ /* Format Types */ /* -------------*/ *************** *** 58,102 **** #define FT_LS_PATH 48 /* set "str" to route part of addr */ #define FT_LS_GNAME 49 /* set "str" to group part of addr */ #define FT_LS_NOTE 50 /* set "str" to comment part of addr */ ! #define FT_LS_822ADDR 51 /* set "str" to 822 format addr */ ! #define FT_LS_FRIENDLY 52 /* set "str" to "friendly" format addr */ ! #define FT_LV_HOSTTYPE 53 /* set "value" to addr host type */ ! #define FT_LV_INGRPF 54 /* set "value" to addr in-group flag */ ! #define FT_LV_NOHOSTF 55 /* set "value" to addr no-host flag */ /* Date Coercion */ ! #define FT_LOCALDATE 56 /* Coerce date to local timezone */ ! #define FT_GMTDATE 57 /* Coerce date to gmt */ /* pre-format processing */ ! #define FT_PARSEDATE 58 /* parse comp into a date (tws) struct */ ! #define FT_PARSEADDR 59 /* parse comp into a mailaddr struct */ ! #define FT_FORMATADDR 60 /* let external routine format addr */ ! #define FT_MYMBOX 61 /* do "mymbox" test on comp */ /* misc. */ #ifdef VAN ! #define FT_ADDTOSEQ 62 /* add current msg to a sequence */ #endif /* conditionals & control flow (must be last) */ ! #define FT_SAVESTR 63 /* save current str reg */ ! #define FT_DONE 64 /* stop formatting */ ! #define FT_NOP 65 /* nop */ ! #define FT_GOTO 66 /* (relative) goto */ ! #define FT_IF_S_NULL 67 /* test if "str" null */ ! #define FT_IF_S 68 /* test if "str" non-null */ ! #define FT_IF_V_EQ 69 /* test if "value" = literal */ ! #define FT_IF_V_NE 70 /* test if "value" != literal */ ! #define FT_IF_V_GT 71 /* test if "value" > literal */ ! #define FT_IF_MATCH 72 /* test if "str" contains literal */ ! #define FT_IF_AMATCH 73 /* test if "str" starts with literal */ ! #define FT_S_NULL 74 /* V = 1 if "str" null */ ! #define FT_S_NONNULL 75 /* V = 1 if "str" non-null */ ! #define FT_V_EQ 76 /* V = 1 if "value" = literal */ ! #define FT_V_NE 77 /* V = 1 if "value" != literal */ ! #define FT_V_GT 78 /* V = 1 if "value" > literal */ ! #define FT_V_MATCH 79 /* V = 1 if "str" contains literal */ ! #define FT_V_AMATCH 80 /* V = 1 if "str" starts with literal */ #define IF_FUNCS FT_S_NULL /* start of "if" functions */ --- 58,103 ---- #define FT_LS_PATH 48 /* set "str" to route part of addr */ #define FT_LS_GNAME 49 /* set "str" to group part of addr */ #define FT_LS_NOTE 50 /* set "str" to comment part of addr */ ! #define FT_LS_ADDR 51 /* set "str" to mbox@host */ ! #define FT_LS_822ADDR 52 /* set "str" to 822 format addr */ ! #define FT_LS_FRIENDLY 53 /* set "str" to "friendly" format addr */ ! #define FT_LV_HOSTTYPE 54 /* set "value" to addr host type */ ! #define FT_LV_INGRPF 55 /* set "value" to addr in-group flag */ ! #define FT_LV_NOHOSTF 56 /* set "value" to addr no-host flag */ /* Date Coercion */ ! #define FT_LOCALDATE 57 /* Coerce date to local timezone */ ! #define FT_GMTDATE 58 /* Coerce date to gmt */ /* pre-format processing */ ! #define FT_PARSEDATE 59 /* parse comp into a date (tws) struct */ ! #define FT_PARSEADDR 60 /* parse comp into a mailaddr struct */ ! #define FT_FORMATADDR 61 /* let external routine format addr */ ! #define FT_MYMBOX 62 /* do "mymbox" test on comp */ /* misc. */ #ifdef VAN ! #define FT_ADDTOSEQ 63 /* add current msg to a sequence */ #endif /* conditionals & control flow (must be last) */ ! #define FT_SAVESTR 64 /* save current str reg */ ! #define FT_DONE 65 /* stop formatting */ ! #define FT_NOP 66 /* nop */ ! #define FT_GOTO 67 /* (relative) goto */ ! #define FT_IF_S_NULL 68 /* test if "str" null */ ! #define FT_IF_S 69 /* test if "str" non-null */ ! #define FT_IF_V_EQ 70 /* test if "value" = literal */ ! #define FT_IF_V_NE 71 /* test if "value" != literal */ ! #define FT_IF_V_GT 72 /* test if "value" > literal */ ! #define FT_IF_MATCH 73 /* test if "str" contains literal */ ! #define FT_IF_AMATCH 74 /* test if "str" starts with literal */ ! #define FT_S_NULL 75 /* V = 1 if "str" null */ ! #define FT_S_NONNULL 76 /* V = 1 if "str" non-null */ ! #define FT_V_EQ 77 /* V = 1 if "value" = literal */ ! #define FT_V_NE 78 /* V = 1 if "value" != literal */ ! #define FT_V_GT 79 /* V = 1 if "value" > literal */ ! #define FT_V_MATCH 80 /* V = 1 if "str" contains literal */ ! #define FT_V_AMATCH 81 /* V = 1 if "str" starts with literal */ #define IF_FUNCS FT_S_NULL /* start of "if" functions */ *** ../mh-6.7-dist/sbr/fmtcompile.c Fri Dec 14 13:25:34 1990 --- sbr/fmtcompile.c Thu Jan 10 08:35:44 1991 *************** *** 1,4 **** --- 1,7 ---- /* fmtcompile.c - "compile" format strings for fmtscan */ + #ifndef lint + static char ident[] = "@(#)$Id: fmtcompile.c,v 1.9 91/01/10 08:35:40 mh Exp $"; + #endif lint #include "../h/mh.h" #include "../h/addrsbr.h" *************** *** 108,113 **** --- 111,117 ---- "path", TF_COMP, FT_LS_PATH, FT_PARSEADDR, TFL_PUTS, "gname", TF_COMP, FT_LS_GNAME, FT_PARSEADDR, TFL_PUTS, "note", TF_COMP, FT_LS_NOTE, FT_PARSEADDR, TFL_PUTS, + "addr", TF_COMP, FT_LS_ADDR, FT_PARSEADDR, TFL_PUTS, "proper", TF_COMP, FT_LS_822ADDR, FT_PARSEADDR, TFL_PUTS, "type", TF_COMP, FT_LV_HOSTTYPE, FT_PARSEADDR, TFL_PUTN, "ingrp", TF_COMP, FT_LV_INGRPF, FT_PARSEADDR, TFL_PUTN, *************** *** 235,241 **** cp = compile(format_string); if (*cp) { ! CERROR("extra '%>' or '%|'"); } NEW(FT_DONE,0,0); *fmt = formatvec; --- 239,245 ---- cp = compile(format_string); if (*cp) { ! CERROR("extra '%>', '%|' or '%?'"); } NEW(FT_DONE,0,0); *fmt = formatvec; *************** *** 275,280 **** --- 279,285 ---- case '|': case '>': + case '?': return (cp); case '<': *************** *** 512,554 **** register char *sp; { register char *cp = sp; ! register struct format *fexpr, *fif, *felse; ! register int c; ! if ((c = *cp++) == '{') { ! cp = do_name(cp, 0); ! fp->f_type = FT_LS_COMP; ! LV (FT_IF_S, 0); ! } ! else if (c == '(') { ! cp = do_func(cp); ! /* see if we can merge the load and the "if" */ ! if (ftbl->f_type >= IF_FUNCS) ! fp->f_type = ftbl->extra; ! else { ! LV (FT_IF_V_NE, 0); } } - else { - CERROR("'(' or '{' expected"); - } - fexpr = fp; - cp = compile (cp); - if ((c = *cp++) == '|') { - LV(FT_GOTO, 0); - fif = fp; - felse = next_fp; - cp = compile(cp); - fif->f_skip = next_fp - fif; - c = *cp++; - } - else - felse = next_fp; if (c != '>') { CERROR("'>' expected."); } ! fexpr->f_skip = felse - fexpr; return (cp); } --- 517,580 ---- register char *sp; { register char *cp = sp; ! register struct format *fexpr, ! *fif = (struct format *)NULL; ! register int c = '<'; ! for (;;) { ! if (c == '<') { /* doing an IF */ ! if ((c = *cp++) == '{') /*}*/{ ! cp = do_name(cp, 0); ! fp->f_type = FT_LS_COMP; ! LV (FT_IF_S, 0); ! } ! else if (c == '(') { ! cp = do_func(cp); ! /* see if we can merge the load and the "if" */ ! if (ftbl->f_type >= IF_FUNCS) ! fp->f_type = ftbl->extra; ! else { ! LV (FT_IF_V_NE, 0); ! } ! } ! else { ! CERROR("'(' or '{' expected"); /*}*/ ! } } + + fexpr = fp; /* loc of [ELS]IF */ + cp = compile (cp); /* compile IF TRUE stmts */ + if (fif) + fif->f_skip = next_fp - fif; + + if ((c = *cp++) == '|') { /* the last ELSE */ + LV(FT_GOTO, 0); + fif = fp; /* loc of GOTO */ + fexpr->f_skip = next_fp - fexpr; + + fexpr = (struct format *)NULL;/* no extra ENDIF */ + + cp = compile (cp); /* compile ELSE stmts */ + fif->f_skip = next_fp - fif; + c = *cp++; + } + else if (c == '?') { /* another ELSIF */ + LV(FT_GOTO, 0); + fif = fp; /* loc of GOTO */ + fexpr->f_skip = next_fp - fexpr; + + c = '<'; /* impersonate an IF */ + continue; + } + break; } if (c != '>') { CERROR("'>' expected."); } ! ! if (fexpr) /* IF ... [ELSIF ...] ENDIF */ ! fexpr->f_skip = next_fp - fexpr; return (cp); } *** ../mh-6.7-dist/sbr/formatsbr.c Fri Dec 14 13:25:34 1990 --- sbr/formatsbr.c Wed Jan 9 22:35:25 1991 *************** *** 1,4 **** --- 1,7 ---- /* formatsbr.c - format string interpretation */ + #ifndef lint + static char ident[] = "@(#)$Id: formatsbr.c,v 1.12 91/01/09 22:34:45 mh Exp $"; + #endif lint #include "../h/mh.h" #include "../h/addrsbr.h" *************** *** 398,412 **** ljust = 0; if ((i = fmt->f_width) < 0) { i = -i; ! ljust++; /* XXX should do something with this */ } ! if (i > 0 && strlen(str) > i) str[i] = '\0'; xp = str; xp += strlen(str) - 1; while (xp > str && isspace(*xp)) *xp-- = '\0'; } break; --- 401,417 ---- ljust = 0; if ((i = fmt->f_width) < 0) { i = -i; ! ljust++; } ! if (!ljust && i > 0 && strlen(str) > i) str[i] = '\0'; xp = str; xp += strlen(str) - 1; while (xp > str && isspace(*xp)) *xp-- = '\0'; + if (ljust && i > 0 && strlen(str) > i) + str += strlen(str) - i; } break; *************** *** 558,563 **** --- 563,569 ---- case FT_LV_NOHOSTF: value = fmt->f_comp->c_mn->m_nohost; break; + case FT_LS_ADDR: case FT_LS_FRIENDLY: #ifdef BERK str = fmt->f_comp->c_mn->m_mbox; *************** *** 566,571 **** --- 572,579 ---- str = fmt -> f_comp -> c_text; break; } + if (fmt -> f_type == FT_LS_ADDR) + goto unfriendly; if ((str = mn -> m_pers) == NULL) if ((str = mn -> m_note)) { (void) strcpy (buffer, str); *************** *** 581,588 **** else break; } ! } else ! switch (mn -> m_type) { case LOCALHOST: str = mn -> m_mbox; break; --- 589,597 ---- else break; } ! } else { ! unfriendly: ; ! switch (mn -> m_type) { case LOCALHOST: str = mn -> m_mbox; break; *************** *** 600,605 **** --- 609,615 ---- else str = mn -> m_text; break; + } } #endif BERK break; *** ../mh-6.7-dist/sbr/m_convert.c Fri Dec 14 13:25:36 1990 --- sbr/m_convert.c Wed Jan 9 11:19:38 1991 *************** *** 1,14 **** /* m_convert.c - parse a message sequence and set SELECTED */ #include "../h/mh.h" #include #include - #define BADLST (-1) #define BADMSG (-2) #define BADRNG (-3) #define BADNEW (-4) #define BADNUM (-5) #define FIRST 1 #define LAST 2 --- 1,17 ---- /* m_convert.c - parse a message sequence and set SELECTED */ + #ifndef lint + static char ident[] = "@(#)$Id: m_convert.c,v 1.6 91/01/09 11:19:24 mh Exp $"; + #endif lint #include "../h/mh.h" #include #include #define BADMSG (-2) #define BADRNG (-3) #define BADNEW (-4) #define BADNUM (-5) + #define BADLST (-6) #define FIRST 1 #define LAST 2 *************** *** 42,47 **** --- 45,52 ---- break; default: + if (err < 0) + goto badmsg; return 1; } *************** *** 254,262 **** register struct msgs *mp; register char *cp; { int bits, found, ! inverted; register int i, j; register char *dp; --- 259,270 ---- register struct msgs *mp; register char *cp; { + char *bp = (char *)NULL; int bits, found, ! inverted, ! range = 0, /* no range */ ! first = 0; register int i, j; register char *dp; *************** *** 267,281 **** if (inverted = (dp = m_find (nsequence)) && *dp && ssequal (dp, cp)) cp += strlen (dp); bits = FFATTRSLOT; for (i = 0; mp -> msgattrs[i]; i++) if (strcmp (mp -> msgattrs[i], cp) == 0) break; if (mp -> msgattrs[i] == NULL) return OK; found = 0; ! for (j = mp -> lowmsg; j <= mp -> hghmsg; j++) if ((mp -> msgstats[j] & EXISTS) && inverted ? !(mp -> msgstats[j] & (1 << (bits + i))) : mp -> msgstats[j] & (1 << (bits + i))) { --- 275,340 ---- if (inverted = (dp = m_find (nsequence)) && *dp && ssequal (dp, cp)) cp += strlen (dp); + convdir = 1; + for (dp = cp; *dp && isalnum(*dp); dp++) + continue; + if (*dp == ':') { + bp = dp++; + + range = 1; + if (isalpha (*dp)) { /* optimize? */ + if (strcmp (dp, "prev") == 0) { + convdir = -1; + first = (mp -> curmsg > 0) && (mp -> curmsg <= mp -> hghmsg) + ? mp -> curmsg - 1 + : mp -> hghmsg; + } + else if (strcmp (dp, "next") == 0) { + convdir = 1; + first = (mp -> curmsg >= mp -> lowmsg) + ? mp -> curmsg + 1 + : mp -> lowmsg; + } + else if (strcmp (dp, "first") == 0) { + convdir = 1; + } + else if (strcmp (dp, "last") == 0) { + convdir = -1; + } + else + return BADLST; + } + else { /* a numeric range */ + if (*dp == '+') + dp++; + else if (*dp == '-') { + dp++; + convdir = -1; + } + if ((range = atoi(dp)) == 0) + return BADLST; + while (isdigit (*dp)) + dp++; + if (*dp) + return BADLST; + } + + *bp = '\0'; /* terminate sequence name */ + } + + bits = FFATTRSLOT; for (i = 0; mp -> msgattrs[i]; i++) if (strcmp (mp -> msgattrs[i], cp) == 0) break; + if (bp) + *bp = ':'; /* restore sequence name */ if (mp -> msgattrs[i] == NULL) return OK; found = 0; ! for (j = first ? first : (convdir > 0) ? mp -> lowmsg : mp -> hghmsg; ! j >= mp -> lowmsg && j <= mp -> hghmsg; j += convdir) if ((mp -> msgstats[j] & EXISTS) && inverted ? !(mp -> msgstats[j] & (1 << (bits + i))) : mp -> msgstats[j] & (1 << (bits + i))) { *************** *** 288,297 **** --- 347,360 ---- mp -> hghsel = j; } found++; + if (range && found >= range) + break; /* we've done enough */ } if (found > 0) return found; + if (first) + return BADMSG; advise (NULLCP, "sequence %s %s", cp, inverted ? "full" : "empty"); return NOTOK; } *** /dev/null Fri Jan 25 16:03:46 1991 --- uip/fmtdump.c Fri Jan 25 15:38:08 1991 *************** *** 0 **** --- 1,425 ---- + #ifndef lint + static char ident[] = "@(#)$Id: fmtdump.c,v 1.2 91/01/25 15:38:06 mh Exp $"; + #endif + /* + * fmtdump - compile format file and dump out instructions + * + * usage: + * + * fmtdump [formatfile] + * + */ + + #include "../h/mh.h" + #include "../h/formatsbr.h" + #include "../h/fmtcompile.h" + #include + + static struct format *lvec[128]; + static lused = 0; + + char *f_typestr(), *c_typestr(); + static int findlabel(); + + void + main(argc, argv) + int argc; + char **argv; + { + int n; + struct format *fmt; + char *file = "scan.format"; + char *str; + + if (argc > 1) + file = argv[1]; + + /* Read format file into memory */ + str = new_fs(file, 0, 0); + + /* Compile format */ + n = fmt_compile(str, &fmt); + + /* Dump format */ + dumpall(fmt); + exit(0); + } + + dumpall(fmth) + register struct format *fmth; + { + int i; + register struct format *fmt, *addr; + + /* Assign labels */ + for (fmt = fmth; fmt; ++fmt) { + i = fmt->f_type; + if (i == FT_IF_S || + i == FT_IF_S_NULL || + i == FT_IF_V_EQ || + i == FT_IF_V_NE || + i == FT_IF_V_GT || + i == FT_IF_MATCH || + i == FT_IF_AMATCH || + i == FT_GOTO) { + addr = fmt + fmt->f_skip; + if (findlabel(addr) < 0) + assignlabel(addr); + } + if (fmt->f_type == FT_DONE) + break; + } + + /* Dump them out! */ + for (fmt = fmth; fmt; ++fmt) { + dumpone(fmt); + if (fmt->f_type == FT_DONE) + break; + } + } + + dumpone(fmt) + register struct format *fmt; + { + register int i; + + if ((i = findlabel(fmt)) >= 0) + printf("L%d:", i); + putchar('\t'); + + fputs(f_typestr((int)fmt->f_type), stdout); + + switch (fmt->f_type) { + + case FT_COMP: + case FT_LS_COMP: + case FT_LV_COMPFLAG: + case FT_LV_COMP: + printf(", comp "); + litputs(fmt->f_comp->c_name); + if (fmt->f_comp->c_type) + printf(", c_type %s", c_typestr(fmt->f_comp->c_type)); + if (fmt->f_comp->c_flags) + printf(", c_flags %d", fmt->f_comp->c_flags); + break; + + case FT_LV_SEC: + case FT_LV_MIN: + case FT_LV_HOUR: + case FT_LV_MDAY: + case FT_LV_MON: + case FT_LS_MONTH: + case FT_LS_LMONTH: + case FT_LS_ZONE: + case FT_LV_YEAR: + case FT_LV_WDAY: + case FT_LS_DAY: + case FT_LS_WEEKDAY: + case FT_LV_YDAY: + case FT_LV_ZONE: + case FT_LV_CLOCK: + case FT_LV_RCLOCK: + case FT_LV_DAYF: + case FT_LV_ZONEF: + case FT_LV_DST: + case FT_LS_822DATE: + case FT_LS_PRETTY: + case FT_LOCALDATE: + case FT_GMTDATE: + case FT_PARSEDATE: + printf(", c_name "); + litputs(fmt->f_comp->c_name); + if (fmt->f_comp->c_type) + printf(", c_type %s", c_typestr(fmt->f_comp->c_type)); + if (fmt->f_comp->c_flags) + printf(", c_flags %d", fmt->f_comp->c_flags); + break; + + case FT_LS_PERS: + case FT_LS_MBOX: + case FT_LS_HOST: + case FT_LS_PATH: + case FT_LS_GNAME: + case FT_LS_NOTE: + case FT_LS_822ADDR: + case FT_LV_HOSTTYPE: + case FT_LV_INGRPF: + case FT_LV_NOHOSTF: + case FT_LS_FRIENDLY: + case FT_PARSEADDR: + case FT_MYMBOX: + printf(", c_name "); + litputs(fmt->f_comp->c_name); + if (fmt->f_comp->c_type) + printf(", c_type %s", c_typestr(fmt->f_comp->c_type)); + if (fmt->f_comp->c_flags) + printf(", c_flags %d", fmt->f_comp->c_flags); + break; + + case FT_COMPF: + printf(", width %d, fill '", fmt->f_width); + litputc(fmt->f_fill); + printf("' name "); + litputs(fmt->f_comp->c_name); + if (fmt->f_comp->c_type) + printf(", c_type %s", c_typestr(fmt->f_comp->c_type)); + if (fmt->f_comp->c_flags) + printf(", c_flags %d", fmt->f_comp->c_flags); + break; + + case FT_STRF: + case FT_NUMF: + printf(", width %d, fill '", fmt->f_width); + litputc(fmt->f_fill); + putchar('\''); + break; + + case FT_LIT: + #ifdef FT_LIT_FORCE + case FT_LIT_FORCE: + #endif + putchar(' '); + litputs(fmt->f_text); + break; + + case FT_LITF: + printf(", width %d, fill '", fmt->f_width); + litputc(fmt->f_fill); + printf("' "); + litputs(fmt->f_text); + break; + + case FT_CHAR: + putchar(' '); + putchar('\''); + litputc(fmt->f_char); + putchar('\''); + break; + + case FT_IF_S: + case FT_IF_S_NULL: + case FT_IF_MATCH: + case FT_IF_AMATCH: + case FT_GOTO: + i = findlabel(fmt + fmt->f_skip); + printf(" L%d", i); + break; + + case FT_IF_V_EQ: + case FT_IF_V_NE: + case FT_IF_V_GT: + i = findlabel(fmt + fmt->f_skip); + printf(" %d goto L%d", fmt->f_value, i); + break; + + case FT_V_EQ: + case FT_V_NE: + case FT_V_GT: + case FT_LV_LIT: + case FT_LV_PLUS_L: + case FT_LV_MINUS_L: + case FT_LV_DIVIDE_L: + printf(" value %d", fmt->f_value); + break; + + case FT_LS_LIT: + printf(" str "); + litputs(fmt->f_text); + break; + + case FT_LS_TRIM: + printf(", width %d", fmt->f_width); + break; + + case FT_LV_DAT: + printf(", value dat[%d]", fmt->f_value); + break; + } + putchar('\n'); + } + + static int + findlabel(addr) + register struct format *addr; + { + register int i; + + for (i = 0; i < lused; ++i) + if (addr == lvec[i]) + return(i); + return(-1); + } + + assignlabel(addr) + register struct format *addr; + { + lvec[lused++] = addr; + } + + char * + f_typestr(t) + int t; + { + static char buf[32]; + + switch (t) { + case FT_COMP: return("COMP"); + case FT_COMPF: return("COMPF"); + case FT_LIT: return("LIT"); + case FT_LITF: return("LITF"); + #ifdef FT_LIT_FORCE + case FT_LIT_FORCE: return("LIT_FORCE"); + #endif + case FT_CHAR: return("CHAR"); + case FT_NUM: return("NUM"); + case FT_NUMF: return("NUMF"); + case FT_STR: return("STR"); + case FT_STRF: return("STRF"); + case FT_STRFW: return("STRFW"); + case FT_PUTADDR: return("PUTADDR"); + case FT_LS_COMP: return("LS_COMP"); + case FT_LS_LIT: return("LS_LIT"); + case FT_LS_TRIM: return("LS_TRIM"); + case FT_LV_COMP: return("LV_COMP"); + case FT_LV_COMPFLAG: return("LV_COMPFLAG"); + case FT_LV_LIT: return("LV_LIT"); + case FT_LV_DAT: return("LV_DAT"); + case FT_LV_STRLEN: return("LV_STRLEN"); + case FT_LV_PLUS_L: return("LV_PLUS_L"); + case FT_LV_MINUS_L: return("LV_MINUS_L"); + case FT_LV_DIVIDE_L: return("LV_DIVIDE_L"); + case FT_LV_CHAR_LEFT: return("LV_CHAR_LEFT"); + case FT_LS_MONTH: return("LS_MONTH"); + case FT_LS_LMONTH: return("LS_LMONTH"); + case FT_LS_ZONE: return("LS_ZONE"); + case FT_LS_DAY: return("LS_DAY"); + case FT_LS_WEEKDAY: return("LS_WEEKDAY"); + case FT_LS_822DATE: return("LS_822DATE"); + case FT_LS_PRETTY: return("LS_PRETTY"); + case FT_LV_SEC: return("LV_SEC"); + case FT_LV_MIN: return("LV_MIN"); + case FT_LV_HOUR: return("LV_HOUR"); + case FT_LV_MDAY: return("LV_MDAY"); + case FT_LV_MON: return("LV_MON"); + case FT_LV_YEAR: return("LV_YEAR"); + case FT_LV_YDAY: return("LV_YDAY"); + case FT_LV_WDAY: return("LV_WDAY"); + case FT_LV_ZONE: return("LV_ZONE"); + case FT_LV_CLOCK: return("LV_CLOCK"); + case FT_LV_RCLOCK: return("LV_RCLOCK"); + case FT_LV_DAYF: return("LV_DAYF"); + case FT_LV_DST: return("LV_DST"); + case FT_LV_ZONEF: return("LV_ZONEF"); + case FT_LS_PERS: return("LS_PERS"); + case FT_LS_MBOX: return("LS_MBOX"); + case FT_LS_HOST: return("LS_HOST"); + case FT_LS_PATH: return("LS_PATH"); + case FT_LS_GNAME: return("LS_GNAME"); + case FT_LS_NOTE: return("LS_NOTE"); + case FT_LS_822ADDR: return("LS_822ADDR"); + case FT_LS_FRIENDLY: return("LS_FRIENDLY"); + case FT_LV_HOSTTYPE: return("LV_HOSTTYPE"); + case FT_LV_INGRPF: return("LV_INGRPF"); + case FT_LV_NOHOSTF: return("LV_NOHOSTF"); + case FT_LOCALDATE: return("LOCALDATE"); + case FT_GMTDATE: return("GMTDATE"); + case FT_PARSEDATE: return("PARSEDATE"); + case FT_PARSEADDR: return("PARSEADDR"); + case FT_FORMATADDR: return("FORMATADDR"); + case FT_MYMBOX: return("MYMBOX"); + #ifdef FT_ADDTOSEQ + case FT_ADDTOSEQ: return("ADDTOSEQ"); + #endif + case FT_SAVESTR: return("SAVESTR"); + case FT_DONE: return("DONE"); + case FT_NOP: return("NOP"); + case FT_GOTO: return("GOTO"); + case FT_IF_S_NULL: return("IF_S_NULL"); + case FT_IF_S: return("IF_S"); + case FT_IF_V_EQ: return("IF_V_EQ"); + case FT_IF_V_NE: return("IF_V_NE"); + case FT_IF_V_GT: return("IF_V_GT"); + case FT_IF_MATCH: return("IF_MATCH"); + case FT_IF_AMATCH: return("IF_AMATCH"); + case FT_S_NULL: return("S_NULL"); + case FT_S_NONNULL: return("S_NONNULL"); + case FT_V_EQ: return("V_EQ"); + case FT_V_NE: return("V_NE"); + case FT_V_GT: return("V_GT"); + case FT_V_MATCH: return("V_MATCH"); + case FT_V_AMATCH: return("V_AMATCH"); + default: + (void)sprintf(buf, "/* ??? #%d */", t); + return(buf); + } + } + + #define FNORD(v, s) if (t & (v)) { \ + if (i++ > 0) \ + strcat(buf, "|"); \ + strcat(buf, s); } + + char * + c_typestr(t) + int t; + { + register int i; + static char buf[64]; + + buf[0] = '\0'; + if (t & ~(CT_ADDR|CT_DATE|CT_MYMBOX|CT_ADDRPARSE)) + (void)sprintf(buf, "0x%x ", t); + strcat(buf, "<"); + i = 0; + FNORD(CT_ADDR, "ADDR"); + FNORD(CT_DATE, "DATE"); + FNORD(CT_MYMBOX, "MYMBOX"); + FNORD(CT_ADDRPARSE, "ADDRPARSE"); + strcat(buf, ">"); + return(buf); + #undef FNORD + } + + litputs(s) + register char *s; + { + if (s) { + putc('"', stdout); + while (*s) + litputc(*s++); + putc('"', stdout); + } else + fputs("", stdout); + } + + litputc(c) + char c; + { + if (c & ~ 0177) { + putc('M', stdout); + putc('-', stdout); + c &= 0177; + } + if (c < 0x20 || c == 0177) { + if (c == '\b') { + putc('\\', stdout); + putc('b', stdout); + } else if (c == '\f') { + putc('\\', stdout); + putc('f', stdout); + } else if (c == '\n') { + putc('\\', stdout); + putc('n', stdout); + } else if (c == '\r') { + putc('\\', stdout); + putc('r', stdout); + } else if (c == '\t') { + putc('\\', stdout); + putc('t', stdout); + } else { + putc('^', stdout); + putc(c ^ 0x40, stdout); /* DEL to ?, others to alpha */ + } + } else + putc(c, stdout); + } *** ../mh-6.7-dist/uip/mhlsbr.c Fri Dec 14 13:26:05 1990 --- uip/mhlsbr.c Fri Jan 25 14:49:56 1991 *************** *** 1,6 **** /* mhlsbr.c - implement the "nifty" message lister */ #ifndef lint ! static char ident[] = "@(#)$Id: mhlsbr.c,v 1.14 90/04/05 14:58:08 sources Exp $"; #endif lint #include "../h/mh.h" --- 1,6 ---- /* mhlsbr.c - implement the "nifty" message lister */ #ifndef lint ! static char ident[] = "@(#)$Id: mhlsbr.c,v 1.16 91/01/25 14:49:46 mh Exp $"; #endif lint #include "../h/mh.h" *************** *** 661,666 **** --- 661,668 ---- return ptoi (name, &c1 -> c_cwidth); if (uleq (name, "length")) return ptoi (name, &c1 -> c_length); + if (uleq (name, "nodashmunging")) + return (dashflg = 0); for (ap = triples; ap -> t_name; ap++) if (uleq (ap -> t_name, name)) { *************** *** 1503,1509 **** --- 1505,1513 ---- #include #include #include + #ifndef hpux #include + #endif static int doface (c1) register struct mcomp *c1; *** ../mh-6.7-dist/uip/mshcmds.c Fri Dec 14 13:26:06 1990 --- uip/mshcmds.c Tue Jan 15 09:46:58 1991 *************** *** 1,6 **** /* mshcmds.c - command handlers in msh */ #ifndef lint ! static char ident[] = "@(#)$Id: mshcmds.c,v 1.5 90/04/05 15:01:41 sources Exp $"; #endif lint #include "../h/mh.h" --- 1,6 ---- /* mshcmds.c - command handlers in msh */ #ifndef lint ! static char ident[] = "@(#)$Id: mshcmds.c,v 1.6 91/01/14 16:48:39 mh Exp $"; #endif lint #include "../h/mh.h" *************** *** 468,474 **** "src +folder", 0, #define FIFILE 6 "file file", 0, ! #define FIHELP 7 "help", 4, NULL, NULL --- 468,478 ---- "src +folder", 0, #define FIFILE 6 "file file", 0, ! #define FIPROC 7 ! "rmmproc program", 0, ! #define FINPRC 8 ! "normmproc", 0, ! #define FIHELP 9 "help", 4, NULL, NULL *************** *** 523,528 **** --- 527,534 ---- case FISRC: case FIDRFT: case FIFILE: + case FIPROC: + case FINPRC: advise (NULLCP, "sorry, -%s not allowed!", fileswit[i].sw); return; } *************** *** 1717,1741 **** "filter filterfile", 0, #define REFRMSW 11 "form formfile", 0, ! #define REFRSW 12 ! "format", 5, ! #define RENFRSW 13 ! "noformat", 7, ! #define REINSW 14 "inplace", 0, ! #define RENINSW 15 "noinplace", 0, ! #define REQUSW 16 "query", 0, ! #define RENQUSW 17 "noquery", 0, ! #define REWHTSW 18 "whatnowproc program", 0, ! #define RENWTSW 19 "nowhatnow", 0, ! #define REWIDSW 20 "width columns", 0, ! #define REHELP 21 "help", 4, NULL, NULL --- 1723,1743 ---- "filter filterfile", 0, #define REFRMSW 11 "form formfile", 0, ! #define REINSW 12 "inplace", 0, ! #define RENINSW 13 "noinplace", 0, ! #define REQUSW 14 "query", 0, ! #define RENQUSW 15 "noquery", 0, ! #define REWHTSW 16 "whatnowproc program", 0, ! #define RENWTSW 17 "nowhatnow", 0, ! #define REWIDSW 19 "width columns", 0, ! #define REHELP 20 "help", 4, NULL, NULL *************** *** 1777,1784 **** case RENINSW: continue; - case REFRSW: - case RENFRSW: case REQUSW: case RENQUSW: case RENDFSW: --- 1779,1784 ---- *** ../mh-6.7-dist/uip/refile.c Fri Dec 14 13:26:09 1990 --- uip/refile.c Mon Jan 14 16:27:27 1991 *************** *** 1,6 **** /* refile.c - file messages away */ #ifndef lint ! static char ident[] = "@(#)$Id: refile.c,v 1.4 90/04/05 15:02:18 sources Exp $"; #endif lint #include "../h/mh.h" --- 1,6 ---- /* refile.c - file messages away */ #ifndef lint ! static char ident[] = "@(#)$Id: refile.c,v 1.5 91/01/14 16:27:20 mh Exp $"; #endif lint #include "../h/mh.h" *************** *** 31,37 **** #define FILESW 6 "file file", 0, ! #define HELPSW 7 "help", 4, NULL, NULL --- 31,42 ---- #define FILESW 6 "file file", 0, ! #define RPROCSW 7 ! "rmmproc program", 0, ! #define NRPRCSW 8 ! "normmproc", 0, ! ! #define HELPSW 9 "help", 4, NULL, NULL *************** *** 138,143 **** --- 143,156 ---- if (!(cp = *argp++) || *cp == '-') adios (NULLCP, "missing argument to %s", argp[-2]); files[filep++] = path (cp, TFILE); + continue; + + case RPROCSW: + if (!(rmmproc = *argp++) || *rmmproc == '-') + adios (NULLCP, "missing argument to %s", argp[-2]); + continue; + case NRPRCSW: + rmmproc = (char *)0; continue; } if (*cp == '+' || *cp == '@') { *** ../mh-6.7-dist/uip/replsbr.c Fri Dec 14 13:26:09 1990 --- uip/replsbr.c Fri Jan 25 14:08:57 1991 *************** *** 1,6 **** /* replsbr.c - routines to help repl along... */ #ifndef lint ! static char ident[] = "@(#)$Id: replsbr.c,v 1.9 90/11/05 11:38:43 mh Exp $"; #endif lint #include "../h/mh.h" --- 1,6 ---- /* replsbr.c - routines to help repl along... */ #ifndef lint ! static char ident[] = "@(#)$Id: replsbr.c,v 1.10 91/01/17 15:29:27 mh Exp $"; #endif lint #include "../h/mh.h" *************** *** 132,137 **** --- 132,142 ---- FINDCOMP (cptr, "fcc"); if (cptr) cptr->c_text = getcpy (fcc); + } + if (cp = getenv("USER")) { + FINDCOMP (cptr, "user"); + if (cptr) + cptr->c_text = getcpy(cp); } if (!ccme) (void) ismymbox ((struct mailname *)0); /* XXX */ *** ../mh-6.7-dist/uip/show.c Fri Dec 14 13:26:11 1990 --- uip/show.c Wed Dec 19 08:48:51 1990 *************** *** 1,6 **** /* show.c - list messages */ #ifndef lint ! static char ident[] = "@(#)$Id: show.c,v 1.2 90/04/05 15:03:16 sources Exp $"; #endif lint #include "../h/mh.h" --- 1,6 ---- /* show.c - list messages */ #ifndef lint ! static char ident[] = "@(#)$Id: show.c,v 1.3 90/12/19 08:48:39 mh Exp $"; #endif lint #include "../h/mh.h" *************** *** 246,252 **** if (nshow) proc = "/bin/cat"; else { ! (void) putenv ("mhfolder", folder); if (strcmp (r1bindex (showproc, '/'), "mhl") == 0) { vec[0] = "mhl"; (void) mhl (vecp, vec); --- 246,253 ---- if (nshow) proc = "/bin/cat"; else { ! if (folder) ! (void) putenv ("mhfolder", folder); if (strcmp (r1bindex (showproc, '/'), "mhl") == 0) { vec[0] = "mhl"; (void) mhl (vecp, vec); *** ../mh-6.7-dist/uip/slocal.c Fri Dec 14 13:26:11 1990 --- uip/slocal.c Thu Jan 10 14:39:20 1991 *************** *** 1,6 **** /* slocal.c - MH style mailer to write to a local user's mailbox */ #ifndef lint ! static char ident[] = "@(#)$Id: slocal.c,v 1.8 90/04/05 14:58:46 sources Exp $"; #endif lint /* This program implements mail delivery in the MH/MMDF style. --- 1,6 ---- /* slocal.c - MH style mailer to write to a local user's mailbox */ #ifndef lint ! static char ident[] = "@(#)$Id: slocal.c,v 1.9 91/01/10 14:39:00 mh Exp $"; #endif lint /* This program implements mail delivery in the MH/MMDF style. *************** *** 515,527 **** break; } ! if (accept) { ! if (status == NOTOK) { ! won = 0; ! break; ! } won++; - } } (void) fclose (fp); --- 515,522 ---- break; } ! if (accept && status == OK) won++; } (void) fclose (fp); *** ../mh-6.7-dist/uip/sortm.c Fri Dec 14 13:26:11 1990 --- uip/sortm.c Wed Dec 19 10:02:32 1990 *************** *** 1,7 **** /* sortm.c - sort messages in a folder by date/time */ /* 21Apr90 do subject sorts too - from V. Jacobson */ #ifndef lint ! static char ident[] = "@(#)$Id: sortm.c,v 1.12 90/04/05 15:02:27 sources Exp $"; #endif lint #include "../h/mh.h" --- 1,7 ---- /* sortm.c - sort messages in a folder by date/time */ /* 21Apr90 do subject sorts too - from V. Jacobson */ #ifndef lint ! static char ident[] = "@(#)$Id: sortm.c,v 1.14 90/12/19 10:02:16 mh Exp $"; #endif lint #include "../h/mh.h" *************** *** 499,522 **** char *newname, oldname[BUFSIZ]; ! nxt = mlist[msg] - smsgs; ! mlist[msg] = 0; ! old = smsgs[nxt].s_msg; ! new = smsgs[msg].s_msg; ! (void) strcpy (oldname, m_name (old)); ! newname = m_name (new); ! if (verbose) ! printf ("message %d becomes message %d\n", old, new); ! if (rename (oldname, newname) == NOTOK) ! adios (newname, "unable to rename %s to", oldname); ! mp->msgstats[new] = mp->msgstats[old]; ! if (mp->curmsg == old) ! m_setcur (mp, new); ! if (nxt != endmsg) ! rename_chain (mp, mlist, nxt, endmsg); } static void --- 499,528 ---- char *newname, oldname[BUFSIZ]; ! for (;;) { ! nxt = mlist[msg] - smsgs; /* mlist[msg] is a ptr into smsgs */ ! mlist[msg] = (struct smsg *)0; ! old = smsgs[nxt].s_msg; ! new = smsgs[msg].s_msg; ! (void) strcpy (oldname, m_name (old)); ! newname = m_name (new); ! if (verbose) ! printf ("message %d becomes message %d\n", old, new); ! if (rename (oldname, newname) == NOTOK) ! adios (newname, "unable to rename %s to", oldname); ! mp->msgstats[new] = mp->msgstats[old]; ! if (mp->curmsg == old) ! m_setcur (mp, new); ! if (nxt == endmsg) ! break; ! ! msg = nxt; ! } ! /* if (nxt != endmsg); */ ! /* rename_chain (mp, mlist, nxt, endmsg); */ } static void *************** *** 530,540 **** new; short stats; char f1[BUFSIZ], - f2[BUFSIZ], tmpfil[BUFSIZ]; register struct smsg *sp; ! (void) strcpy (tmpfil, m_scratch ("", invo_name)); for (i = 0; i < nmsgs; i++) { if (! (sp = mlist[i])) --- 536,545 ---- new; short stats; char f1[BUFSIZ], tmpfil[BUFSIZ]; register struct smsg *sp; ! (void) strcpy (tmpfil, m_name (mp->hghmsg + 1)); for (i = 0; i < nmsgs; i++) { if (! (sp = mlist[i])) *** ../mh-6.7-dist/uip/ttyw.c Fri Dec 14 13:26:12 1990 --- uip/ttyw.c Fri Jan 25 14:49:57 1991 *************** *** 12,18 **** --- 12,20 ---- #include #include #include + #ifndef hpux #include + #endif #include "ttyd.h" #include "ttym.c" *** ../mh-6.7-dist/uip/whatnowsbr.c Fri Dec 14 13:26:14 1990 --- uip/whatnowsbr.c Wed Jan 23 15:43:36 1991 *************** *** 1,6 **** /* whatnowsbr.c - the WhatNow shell */ #ifndef lint ! static char ident[] = "@(#)$Id: whatnowsbr.c,v 1.6 90/04/05 14:59:26 sources Exp $"; #endif lint #include "../h/mh.h" --- 1,6 ---- /* whatnowsbr.c - the WhatNow shell */ #ifndef lint ! static char ident[] = "@(#)$Id: whatnowsbr.c,v 1.10 91/01/23 15:43:31 mh Exp $"; #endif lint #include "../h/mh.h" *************** *** 335,351 **** default: if (status = pidwait (pid, NOTOK)) { if (((status & 0xff00) != 0xff00) && (!reedit || (status & 0x00ff))) if (!use && (status & 0xff00) && ! (rename (file, m_backup (file)) != NOTOK)) { ! advise (NULLCP, "problems with edit--%s deleted", file); } else advise (NULLCP, "problems with edit--%s preserved", file); ! status = -2; break; } reedit++; --- 335,362 ---- default: if (status = pidwait (pid, NOTOK)) { + #ifdef SUNVIBUG + if ((cp = r1bindex (*ed, '/')) + && strcmp (cp, "vi") == 0 + && (status & 0x00ff) == 0) + status = 0; + else { + #endif if (((status & 0xff00) != 0xff00) && (!reedit || (status & 0x00ff))) if (!use && (status & 0xff00) && ! (rename (file, cp = m_backup (file)) != NOTOK)) { ! advise (NULLCP, "problems with edit--draft left in %s", ! cp); } else advise (NULLCP, "problems with edit--%s preserved", file); ! status = -2; /* maybe "reedit ? -2 : -1"? */ break; + #ifdef SUNVIBUG + } + #endif } reedit++; *** ../mh-6.7-dist/zotnet/mts/lock.c Fri Dec 14 13:26:24 1990 --- zotnet/mts/lock.c Fri Jan 25 09:46:47 1991 *************** *** 1,6 **** /* lock.c - universal locking routines */ #ifndef lint ! static char ident[] = "@(#)$Id: lock.c,v 2.3 90/04/05 15:04:28 sources Exp $"; #endif lint #ifdef MMDFONLY --- 1,6 ---- /* lock.c - universal locking routines */ #ifndef lint ! static char ident[] = "@(#)$Id: lock.c,v 2.4 91/01/18 08:43:29 mh Exp Locker: mh $"; #endif lint #ifdef MMDFONLY *************** *** 24,29 **** --- 24,33 ---- #include #ifdef LOCKF #include + #include + #ifndef F_ULOCK + #include + #endif #endif LOCKF