[comp.sys.hp] mh on hp 9000 series

crouch@crunchie.axion.bt.co.uk (the man whose head expanded) (07/06/89)

I've managed to get mh to run on our hp cluster; however we have a problem
with the scan command. Scan doesn't seem able to extract the dat from the
message, so when we type scan we get output such as:

 6  00/01 To:crouch@axion.b  starting getalias

    ^^^^^	This should be 07/06.

Has anyone seen this before or can suggest possible fixes.

Any help would be appreciated.

Regards,

		Chris Rouch

--------------------------------------------------------------------------
crouch@axion.bt.co.uk                RT3141, BTRL, Martlesham Heath, Ipswich
				     +44 473 646093

"A woman drove me to drink, and I didn't even have the courtesy to thank her"

gregg@cbnewsc.ATT.COM (gregg.g.wonderly) (07/07/89)

From article <1909@zaphod.axion.bt.co.uk>, by crouch@crunchie.axion.bt.co.uk (the man whose head expanded):
> I've managed to get mh to run on our hp cluster; however we have a problem
> with the scan command. Scan doesn't seem able to extract the dat from the
> message, so when we type scan we get output such as:
> 
>  6  00/01 To:crouch@axion.b  starting getalias
> 
>     ^^^^^	This should be 07/06.
> 
> Has anyone seen this before or can suggest possible fixes.

One problem that I am aware of with date processing is in
~mh/zotnet/tws/dtimep.lex.  There are others there too when you do not
pass it a strictly conforming date.

change the lines near line 203 from

[0-2]{d}{d}{d}{w} {
					tw.tw_hour = CVT2;
					tw.tw_min  = CVT2;
					BEGIN Z;
				}

to

[0-2]{d}{d}{d}{w} {
					if (tw.tw_hour) {
						cp += 2;
						tw.tw_year = CVT2;
						tw.tw_zone = ZONE(-5 * 60); /*  HACK, force EST */
					} else {
						tw.tw_hour = CVT2;
						tw.tw_min  = CVT2;
						BEGIN Z;
					}
				}

Without seeing the exact date line that you are passing it, I can not
say for sure, but this will certainly fix some problems.  Particularly,
this fixes the case where the date line does not have a Time Zone
with it (it should, but some don't).

-- 
-----
gregg.g.wonderly@att.com   (AT&T bell laboratories)

seligman@polya.Stanford.EDU (Scott Seligman) (07/08/89)

In article <1909@zaphod.axion.bt.co.uk> crouch@axion.bt.co.uk writes:
>I've managed to get mh to run on our hp cluster; however we have a problem
>with the scan command. Scan doesn't seem able to extract the dat from the
>message, so when we type scan we get output such as:
>
> 6  00/01 To:crouch@axion.b  starting getalias
>
>    ^^^^^	This should be 07/06.

I had exactly the same problem.  I fixed it by "lex"ing the file
zotnet/tws/dtimep.lex on another system.  It looks to me like 
lex on our 6.2 system was buggy.  I haven't tried it under
6.5.  Let me know if you'd like me to send you a working version
of dtimep.c, the output of lex.

Scott
seligman@polya.stanford.edu

mark@comp.vuw.ac.nz (Mark Davies) (07/09/89)

In article <10458@polya.Stanford.EDU> seligman@Polya.Stanford.EDU.Stanford.EDU (Scott Seligman) writes:
-In article <1909@zaphod.axion.bt.co.uk> crouch@axion.bt.co.uk writes:
->I've managed to get mh to run on our hp cluster; however we have a problem
->with the scan command. Scan doesn't seem able to extract the dat from the
->message, so when we type scan we get output such as:

-> 6  00/01 To:crouch@axion.b  starting getalias
->    ^^^^^	This should be 07/06.

-I had exactly the same problem.  I fixed it by "lex"ing the file
-zotnet/tws/dtimep.lex on another system.  It looks to me like 
-lex on our 6.2 system was buggy.  I haven't tried it under
-6.5.  Let me know if you'd like me to send you a working version
-of dtimep.c, the output of lex.

I had the same problem on our 835 running HPUX 3.0, and fixed it the same
way, by lexing it on another system.

cheers
mark
--
Domainised:  mark@comp.vuw.ac.nz	Bang form: ...!uunet!vuwcomp!mark

neil@yc.estec.nl (Neil Dixon) (07/10/89)

Chris,
    I seem to recall that the problem is a mismatch in the types
produced by lex, and the types in lexstring.c. I can't remember the
exact details but here's the patch.

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create the files:
#	patch.neil
# This archive created: Mon Jul 10 09:32:53 1989
export PATH; PATH=/bin:$PATH
echo shar: extracting "'patch.neil'" '(2101 characters)'
if test -f 'patch.neil'
then
	echo shar: will not over-write existing file "'patch.neil'"
else
sed 's/^	X//' << \SHAR_EOF > 'patch.neil'
	XIndex: lexstring.c
	XVersion: -r1.1/-r1.3
	X*** /tmp/md526..1	Mon Jul 10 09:32:26 1989
	X--- /tmp/md526..2	Mon Jul 10 09:32:26 1989
	X***************
	X*** 6,12 ****
	X  #define YYLMAX 256
	X  
	X  struct yysvf { 
	X! 	struct yywork *yystoff;
	X  	struct yysvf *yyother;
	X  	int *yystops;
	X  };
	X--- 6,12 ----
	X  #define YYLMAX 256
	X  
	X  struct yysvf { 
	X! 	int yystoff;
	X  	struct yysvf *yyother;
	X  	int *yystops;
	X  };
	X***************
	X*** 24,30 ****
	X  extern char yyextra[];
	X  
	X  #ifdef LEXDEBUG
	X! static int debug = 0;
	X  #endif LEXDEBUG
	X  
	X  lex_string( strptr, start_cond)
	X--- 24,30 ----
	X  extern char yyextra[];
	X  
	X  #ifdef LEXDEBUG
	X! static int debug = 1;
	X  #endif LEXDEBUG
	X  
	X  lex_string( strptr, start_cond)
	X***************
	X*** 46,56 ****
	X  		if(debug)
	X  			fprintf(stderr,"state %d\n",state-yysvec-1);
	X  # endif
	X! 		tran = state->yystoff;
	X  		if(tran == yycrank)
	X  			/* may not be any transitions */
	X  			if (state->yyother == 0 ||
	X! 			    state->yyother->yystoff == yycrank)
	X  				break;
	X  
	X  		ch = *cp++;
	X--- 46,56 ----
	X  		if(debug)
	X  			fprintf(stderr,"state %d\n",state-yysvec-1);
	X  # endif
	X! 		tran = &yycrank[state->yystoff];
	X  		if(tran == yycrank)
	X  			/* may not be any transitions */
	X  			if (state->yyother == 0 ||
	X! 			    state->yyother->yystoff == 0)
	X  				break;
	X  
	X  		ch = *cp++;
	X***************
	X*** 80,86 ****
	X  
	X  		} else if(tran < yycrank) {
	X  			/* r < yycrank */
	X! 			tran = yycrank+(yycrank-tran) + ch;
	X  # ifdef LEXDEBUG
	X  			if (debug)
	X  				fprintf(stderr,"compressed state\n");
	X--- 80,86 ----
	X  
	X  		} else if(tran < yycrank) {
	X  			/* r < yycrank */
	X! 			tran = yycrank + (yycrank - tran) + ch;
	X  # ifdef LEXDEBUG
	X  			if (debug)
	X  				fprintf(stderr,"compressed state\n");
	X***************
	X*** 111,117 ****
	X  			}
	X  		}
	X  		if ((state = state->yyother) &&
	X! 		    (tran = state->yystoff) != yycrank){
	X  # ifdef LEXDEBUG
	X  			if(debug)
	X  				fprintf(stderr,"fall back to state %d\n",
	X--- 111,117 ----
	X  			}
	X  		}
	X  		if ((state = state->yyother) &&
	X! 		    (tran = &yycrank[state->yystoff]) != yycrank){
	X  # ifdef LEXDEBUG
	X  			if(debug)
	X  				fprintf(stderr,"fall back to state %d\n",
SHAR_EOF
if test 2101 -ne "`wc -c < 'patch.neil'`"
then
	echo shar: error transmitting "'patch.neil'" '(should have been 2101 characters)'
fi
fi # end of overwriting check
#	End of shell archive
exit 0

-- 
Neil Dixon <neil@yc.estec.nl> UUCP:...!mcvax!esatst!neil, BITNET: NDIXON@ESTEC
Thermal Control & Life Support Division (YC) 
European Space Research and Technology Centre (ESTEC),
Noordwijk, The Netherlands.