[comp.sys.amiga] ARexx patch??

LK-KARI@FINTUVM.BITNET (Kari Sutela) (03/15/89)

Earlier this year I reported a bug in ARexx's date()-function to Bill Hawes
and he kindly replied to me and said that he is preparing a patch to the
rexx library which should correct this and some other bugs. He promised to
send this patch to comp.binaries.amiga as well as BIX. Nevertheless, this patch
hasn't showed up in here. BTW, in a recent letter he said that his usenet-
connection has dried up - this might be the cause for its non-appearance.

Now I must ask all you with a BIX-access if it has been posted there. If so,
how could I get it? Well, I could always ask Bill himself for the patch, but
I think this patch is not too improtant - if I can get it by email, I'll
be satisfied, but it's not worth sending disks across the Atlantic. Anyway,
the bugs are minor and haven't bothered me too much.

- Kari Sutela    lk-kari@fintuvm.utu.fi OR lk-kari@fintuvm.bitnet OR
                 sutela@tucos.cs.utu.fi

PS. If you are curious about the date()-bug, try setting the system date to
Newyear's eve (Dec 31) and checking what date() returns. Amusing, isn't it.

lfk@uts.amdahl.com (Lynn Kerby) (03/27/89)

In article <709LK-KARI@FINTUVM> LK-KARI@FINTUVM.BITNET (Kari Sutela) writes:
 >Earlier this year I reported a bug in ARexx's date()-function to Bill Hawes
 >and he kindly replied to me and said that he is preparing a patch to the
 >rexx library which should correct this and some other bugs. He promised to
 >send this patch to comp.binaries.amiga as well as BIX. Nevertheless, this patch
 >hasn't showed up in here. BTW, in a recent letter he said that his usenet-
 >connection has dried up - this might be the cause for its non-appearance.
 >
 >Now I must ask all you with a BIX-access if it has been posted there. If so,
 >how could I get it? Well, I could always ask Bill himself for the patch, but
 >I think this patch is not too improtant - if I can get it by email, I'll
 >be satisfied, but it's not worth sending disks across the Atlantic. Anyway,
 >the bugs are minor and haven't bothered me too much.
 >
 >- Kari Sutela    lk-kari@fintuvm.utu.fi OR lk-kari@fintuvm.bitnet OR
 >                 sutela@tucos.cs.utu.fi
 >
 >PS. If you are curious about the date()-bug, try setting the system date to
 >Newyear's eve (Dec 31) and checking what date() returns. Amusing, isn't it.

I don't know if you would have seen this, as I posted this back in 
November of last year.  The following shar contains the source and
uuencoded binary for a patch to fix the DATE() function in rexxsyslib.library.
Read the README for details.

Lynn Kerby
---------Cut Here------
#! /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:
#	README
#	rxpatch.c
#	rxpatch.uue
# This archive created: Sun Mar 26 21:02:37 1989
# By:	Lynn Kerby (Amdahl Corporation, Sunnyvale, CA)
export PATH; PATH=/bin:/usr/bin:$PATH
if test -f 'README'
then
	echo shar: "will not over-write existing file 'README'"
else
cat << \SHAR_EOF > 'README'

This is a small program to patch (and unpatch if desired) the 
rexxsyslib.library file for AREXX v1.06.  It attempts to do
reasonable things on error, but doesn't go as far as it probably
could.  If you are not running v1.06, do not try running the
patch program!!

The problem is that the new DATE() function doesn't understand
that people like to see dates like 31-jul-88 instead of 00-aug-88.
I called Bill Hawes and he said the change was pretty minor, so
I decided to try finding the code in rexxsyslib.library that 
needed replacing.

If you don't feel like trusting my code, the change is pretty easy
to make using a filezap utility.
OFFSET	0x7c88
VER	0xb44064ee
REPL	0xb44062ee
(Using NewZAP, the mod goes at offset 0x88 in sector 63 of the file)

The program makes it a little easier.  Syntax is rxpatch [-r].  The
-r option will remove the patch if you want to get rid of it.  You 
will have to kill the Master Rexx process (via. rxc) and flush the
libraries for this to take effect.  Running rexxmast again will cause
the library to be read in from disk with the patch.

All standard disclaimers apply, and please keep a copy of the old
rexxsyslib.library around in case something goes wrong!

				Lynn Kerby
				lfk@uts.amdahl.com
				...!amdahl!lfk

SHAR_EOF
if test 1264 -ne "`wc -c < 'README'`"
then
	echo shar: "error transmitting 'README'" '(should have been 1264 characters)'
fi
fi
if test -f 'rxpatch.c'
then
	echo shar: "will not over-write existing file 'rxpatch.c'"
else
cat << \SHAR_EOF > 'rxpatch.c'
/*
 * Program to patch the DATE() function of rexxsyslib.library to correct
 *  a problem with months that have more than 30 days.
 *
 * USAGE: rxpatch1 [-r]
 *
 * The program will only open LIBS:rexxsyslib.library.  The -r option
 *  removes the patch (If you really want to).
 *
 * Written by Lynn Kerby with patch info from Bill Hawes
 *
 * No warrantees expressed or implied.  Keep a copy of the old 
 *  rexxsyslib.library around just in case.
 */

#include <fcntl.h>

unsigned long offs=62*512+0x88;
unsigned long orig=0xb44064ee;
unsigned long repl=0xb44062ee;

main(argc, argv)
int argc;
char **argv;
{
	int libfd;
	long cur;
	int undoflag = 0;

	if (argc == 2) {
		if (*argv[1]++ == '-') {
			if (*argv[1] == 'r')
				undoflag = 1;
			else
				usage();
		} else 
			usage();
	} else {
		if (argc != 1)
			usage();
	}
	
	libfd = open("LIBS:rexxsyslib.library",O_RDWR);
	if (libfd == -1) {
		write(2,"ERROR:Unable to open rexxsyslib.library\n",40);
		exit(5);
	}
	(void) lseek(libfd,offs,0);
	if ((read(libfd,&cur,4)) == -1) {
		write(2,"ERROR:Read of rexxsyslib.library failed\n",40);
		exit(5);
	}
	if (undoflag) {
		if (cur != repl) {
			write(2,"ERROR: rexxsyslib.library not patched\n",38);
		} else {
			(void) lseek(libfd,offs,0);
			(void) write(libfd,&orig,4);
		}
	} else {
		if (cur == repl) {
			write(2,"ERROR: rexxsyslib.library already patched\n",42);
		} else if (cur != orig) {
			write(2,"ERROR: verify of data failed\n",29);
		} else {
			(void) lseek(libfd,offs,0);
			(void) write(libfd,&repl,4);
		}
	}
	close(libfd);
}

usage()
{
	write(2,"USAGE: rxpatch [-r]\n",20);
	exit(0);
}

SHAR_EOF
if test 1611 -ne "`wc -c < 'rxpatch.c'`"
then
	echo shar: "error transmitting 'rxpatch.c'" '(should have been 1611 characters)'
fi
fi
if test -f 'rxpatch.uue'
then
	echo shar: "will not over-write existing file 'rxpatch.uue'"
else
cat << \SHAR_EOF > 'rxpatch.uue'
begin 755 rxpatch
M   #\P         #          (   -&    &0    $   /I   #1D[Z!.I.
M5?_X0FW_^ QM  ( "&8T(&T "B)H  12J  $#!$ +68<(&T "B)H  0,$0!R
M9@@[?  !__A@!$ZZ AY@!$ZZ AA@# QM  $ "&<$3KH""C\\  )(>@$H3KH"
MQEQ/.T#__@QM_____F8</SP *$AZ 28_/  "3KH(ZE!//SP !4ZZ";A43T)G
M+RR  C\M__Y.N@'^4$\_/  $2&W_^C\M__Y.N@/"4$^P?/__9AP_/  H2'H!
M"S\\  ).N@BF4$\_/  %3KH)=%1/2FW_^&="("W_^K"L@ IG%#\\ "9(>@$(
M/SP  DZZ"'I03V B0F<O+( "/RW__DZZ 9903S\\  1(;( &/RW__DZZ"%90
M3V!>("W_^K"L@ IF%#\\ "I(>@#M/SP  DZZ"#A03V! ("W_^K"L@ 9G%#\\
M !U(>@#Z/SP  DZZ"!I03V B0F<O+( "/RW__DZZ 3903S\\  1(;( */RW_
M_DZZ!_903S\M__Y.N@G^5$].74YU3$E"4SIR97AX<WES;&EB+FQI8G)A<GD 
M15)23U(Z56YA8FQE('1O(&]P96X@<F5X>'-Y<VQI8BYL:6)R87)Y"@!%4E)/
M4CI296%D(&]F(')E>'AS>7-L:6(N;&EB<F%R>2!F86EL960* $524D]2.B!R
M97AX<WES;&EB+FQI8G)A<GD@;F]T('!A=&-H960* $524D]2.B!R97AX<WES
M;&EB+FQI8G)A<GD@86QR96%D>2!P871C:&5D"@!%4E)/4CH@=F5R:69Y(&]F
M(&1A=&$@9F%I;&5D"@!.50  /SP %$AZ !@_/  "3KH&^%!/0F=.N@?(5$].
M74YU55-!1T4Z(')X<&%T8V@@6RUR70H  $Y5  !(YPP@."T "$ZZ!T(P!,'\
M  8D0-7L@!I*1&T*N&R #FP$2I)F$#E\  * 'G#_3-\$,$Y=3G4P+0 .2,!3
M@"\ +RT "B\23KH)2BH L+S_____3^\ #&8,3KH(_CE @!YP_V#*0J="IR\2
M3KH))D_O  Q@NDY5   _+0 ,/SP# 2\M  AA!E!/3EU.=4Y5  !(YP\P)&T 
M"$ZZ!K(F;( :> !@#C $P?P !DJS" !G#E)$N&R #FWL>@9@  #$""T  0 ,
M9S!(>/__+PI.N@B2+ !03V<@+P9.N@C*+PI.N@AD2H!03V8.3KH(;CH L'P 
MS68  (Q(> /M+PI.N@AP+ !*AE!/9F (+0    QF!'H!8&Q(> /N+PI.N@A2
M+ !03V8(3KH(,CH 8%1(>  A2'H DDZZ".XN %!/9PHO!TZZ")A83V >2'@ 
M 4AZ ((O!DZZ"%Q(>/__0J<O!DZZ"#)/[P 88"8P+0 ,P'P% +!\!0!F&"\&
M3KH'LGH$6$\Y18 ></],WPSP3EU.=3 $P?P !B>&"  P!,'\  8@0-'+,6T 
M#  $""T  P ,9Q!(>  !0J<O!DZZ!]A/[P ,, 1@PF1O<RYL:6)R87)Y    
M3E4  $CG#" X+0 (3KH%;# $P?P !B1 U>R &DI$;0JX;( .; 1*DF80.7P 
M H ></],WP0P3EU.=3 J  3 ?  #L'P  68*.7P !8 ></]@X'  ,"T #B\ 
M+RT "B\23KH'4"H L+S_____3^\ #&8,3KH'$CE @!YP_V"T( 5@L&%P0^R 
M&D7L@!JUR68.,CP $FL(=  BPE')__PI3X @+'@ !"E.@"1(YX" ""X ! $I
M9Q!+^@ (3J[_XF &0J?S7TYS0_H ($ZN_F@I0( H9@PN/  #@ =.KO^48 1.
MN@ :4$].=61O<RYL:6)R87)Y $GY  !__DYU3E4  "\*2'D  0  ,"R #L'\
M  8O $ZZ!P I0( :4$]F%$*G2'D  0  3KH&Q%!/+FR ($YU(&R &D)H  0@
M;( :,7P  0 0(&R &C%\  $ "B!L@" @+( @D*@ !%" *4" +"!L@"P@O$U!
M3EA"ITZZ!K0D0$JJ *Q83V<N+RT #"\M  @O"DZZ *XY?  !@# @;( : &B 
M   $(&R &@!H@   "D_O  Q@0DAJ %Q.N@;.2&H 7$ZZ!I I0( R(&R ,DJH
M "103V<0(&R ,B)H "0O$4ZZ!9)83R\L@#(O"DZZ F@I;( R@#903TZZ!9(@
M;( :((!.N@6T(&R &B%   9G%DAX ^U(>@ J3KH%D"!L@!HA0  ,4$\O+( V
M/RR .DZZ^7A"9TZZ ZQ03R1?3EU.=2H 3E4  $CG## D;0 0(&T "$JH *QG
M&"!M  @@* "LY8 H "!$("@ $.6 )D!@!"9L@! 0$TB 2,#0K0 ,5( Y0( \
M0J<P+( \2, O $ZZ!9(I0( ^4$]F"$S?##!.74YU$!-(@#H /P4@2U*(+P@O
M+( ^3KH!?C %2, @0-'L@#Y#^@%$$-EF_#\M  XO"B\L@#Y.N@$Z(&R /D(P
M4  Y?  !@#HP!4C T*R /B9 4HLD2T_O !00$TB .@"P?  @9QBZ?  )9Q*Z
M?  ,9PRZ?  -9P:Z?  *9@12BV#8#!, (&UZ#!, (F8N4HL@2U*+$!!(@#H 
M9QX@2E**$(6Z?  B9A ,$P B9@12BV &0BK__V "8-9@."!+4HL0$$B .@!G
M)KI\ "!G(+I\  EG&KI\  QG%+I\  UG#KI\  IG""!*4HH0A6#.($I2BD(0
M2D5F E.+4FR .F  _UI"$D*G,"R .E) 2,#E@"\ 3KH$<"E @#903V8(0FR 
M.F  _MAZ "9L@#Y@)# %2,#E@"!L@#8ABP@ ($L@"$H89OR1P%.(, A20$C 
MU\!21;IL@#IMUC %2,#E@"!L@#9"L @ 8 #^E"  ,#Q__V $,"\ #"!O  1*
M&&;\4T@B;P (4T 0V5?(__QG D(0("\ !$YU3.\#   $( @R+P ,8 (0V5?)
M__QG!E)!8 )"&%')__Q.=4Y5  !(YPXP)&T "$*G2'H CDZZ _8I0(!"4$]F
M"$S?#'!.74YU(&T #")H "0O*0 $3KH$)B@ 6$]G4DAZ &T@1"\H #9.N@/X
M)D!*@%!/9S1(> /M+PM.N@+Z+ !03V<D( ;E@"H ($4E:  ( *0E1@"<2'@#
M[4AZ #A.N@+6)4  H%!/+P1.N@/$6$\O+(!"3KH#*$*L@$)83V" :6-O;BYL
M:6)R87)Y %=)3D1/5P J $Y5  !(YPP@."T "$ZZ ' P!,'\  8D0-7L@!I*
M1&T*N&R #FP$2I)F$#E\  * 'G#_3-\$,$Y=3G4P*@ $P'P  V8*.7P !8 >
M</]@Y'  ,"T #B\ +RT "B\23KH"A"H L+S_____3^\ #&8,3KH"&CE @!YP
M_V"X( 5@M$Y5__Q(>!  0J=.N@+H*T#__ @   Q03V<22FR ,&8(("W__$Y=
M3G5.N@ &< !@]$Y5  !(>  $2'H '$ZZ ?(O $ZZ B _/  !3KH #D_O  Y.
M74YU7D,* $Y5  !*K(!&9P8@;(!&3I _+0 (3KH "%1/3EU.=4Y5__PO!# M
M  A(P"M __Q*K( :9RAX & */P1.N@#^5$]21+AL@ YM\# L@ [!_  &+P O
M+( :3KH""E!/2JR 2F<&(&R 2DZ02JR %&<*+RR %$ZZ 8983TJL@$YG""!L
M@$X@K(!22JR 5F<*+RR 5DZZ :)83TJL@%IG"B\L@%I.N@&26$]*K(!>9PHO
M+(!>3KH!@EA/2JR 8F<*+RR 8DZZ 7)83RQX  0(+@ $ 2EG%"\-2_H "DZN
M_^(J7V &0J?S7TYS2JR ,F8P2JR /F<H,"R /$C +P O+( ^3KH!8C L@#I2
M0$C Y8 O "\L@#9.N@%.3^\ $& .3KH!/"\L@#).N@%H6$\@+?_\+FR ($YU
M*!].74YU3E4  $CG#B X+0 (, 3!_  &)$#5[( :2D1M"KAL@ YL!$J29A Y
M?  "@!YP_TS?!'!.74YU""H !P $9@@O$DZZ  I83T*2< !@XB(O  0L;( H
M3N[_W"(O  0L;( H3N[_@B(O  0L;( H3N[_N"QL@"A.[O_*+&R *$[N_WQ,
M[P &  0L;( H3N[_K$SO  8 !"QL@"A.[O_B+&R *$[N_\1,[P .  0L;( H
M3N[_UDSO  X !"QL@"A.[O^^3OH  B(O  0L;( H3N[_IDSO  X !"QL@"A.
M[O_02.<!!$SO((  #"QL@"1.KO^43-\@@$YU3OH  B)O  0L;( D3N[^8DSO
M  , !"QL@"1.[O\Z(F\ !"QL@"1.[O[:+&R )$[N_WPB;P $("\ ""QL@"1.
M[O\N(&\ !"QL@"1.[OZ,+&R )")O  0@+P (3N[]V")O  0L;( D3N[^ADSO
M  , !"QL@"1.[O[.(&\ !"QL@"1.[OZ 3.\#   $+&R 0D[N_Z @;P $+&R 
M0D[N_Z8@;P $+&R 0D[N_[(   /L     0    $   5@         _(   /J
L    !@  ?(BT0&3NM$!B[@ 4                 _(   /K     0   _+J
 
end
SHAR_EOF
if test 4798 -ne "`wc -c < 'rxpatch.uue'`"
then
	echo shar: "error transmitting 'rxpatch.uue'" '(should have been 4798 characters)'
fi
fi
exit 0
#	End of shell archive
-- 
     Lynn Kerby  -  Amdahl Corporation
                    Sunnyvale, CA
                    ...amdahl!lfk
		    lfk@uts.amdahl.com

Disclaimer: Any and all opinions expressed herein are my own and do not
            necessarily represent the views of anyone, especially my
            employer.