to_stdnet@stag.UUCP (03/11/89)
From: thelake!steve@stag.UUCP (Steve Yelvington)
Andrew Gray (agray@eriskay.axion.bt.co.uk) discovered a bug in the
form_alert() function of GEMFAST. The following can be used as a
replacement until Ian Lepore releases a fixed version. Compile to
fixform.o, then link it before the GEMFAST libraries. Your program will be
bigger than it needs to be, but it will work properly.
/*
* fixform.c
* kludge to replace bad form_alert() function in GEMFAST 1.0 & 1.1
* link fixform.o before aesfast.a to bind in this version
* instead of the GEMFAST function that returns the wrong values.
*/
unsigned int control[4], global[15], int_in[16], int_out[7];
unsigned int *addr_in[2], *addr_out[1];
extern unsigned char ctrl_cnts[115][3]; /* in crystal.o module of dlibs */
unsigned int *_aespb[6] = /* data to tell AES where to find its mail */
{
control,
global,
int_in,
int_out,
(unsigned int *)addr_in,
(unsigned int *)addr_out
};
/*
* function _aesop(opcode)
* sets the control arrays, kicks AES into action,
* and returns int_out[0]
*/
unsigned int _aesop(opcode)
register unsigned int opcode; /* R7/d7 */
{
control[0] = opcode;
control[1] = (int) ctrl_cnts[(opcode-10)][0];
control[2] = (int) ctrl_cnts[(opcode-10)][1];
control[3] = (int) ctrl_cnts[(opcode-10)][2];
asm(" move.l #__aespb,d1 ");
asm(" move.w #200,d0 ");
asm(" trap #2 ");
return int_out[0];
}
int form_alert(button, string)
int button; char *string;
{
int_in[0] = button;
addr_in[0] = (unsigned int *)string;
return _aesop(52);
}
/*
* UUCP: {uunet!rosevax,amdahl!bungia,chinet,killer}!orbit!thelake!steve
* ARPA: crash!orbit!thelake!steve@nosc.mil
* #member <STdNET> The ST Developers Network
*/