DERMOTT@DREA-XX.ARPA.UUCP (03/04/87)
BUGS in MicroEmacs 3.8b for ATARI and MEGAMAX
I picked up the sources for MicroEmacs 3.8b (dated Feb 13 87)from
SIMTEL20. I'm using a ATARI 1040 ST with Megamax compiler V1.1 .
The sources needed several changes.
Features of ATARI ST and MEGAMAX compiler.
1/ Raw terminal input returns ASCII value and scan code in one long word.
ASCII value is 0 for function keys. The scan codes for function keys are
the same as codes in MSDOS.
2/ Megamax is a one pass compliler so static functions must be declared
before they are called
3/ With Megamax short is 8 bits ,int is 16 bits and long is 32 bits.
4/ Program sections must be less than 32k each so the overlay statement
is used to break up large programs.
5/ Apparent bug in compiler (v 1.1) in statement of form
#if FLAG
*pointer = *foo;
#endif
Putting a comment after the #if statement clears it up.
Found Bugs in MicroEmacs 3.8b
1/ In estruct.h IBMMONO is not defined.
2/ In estruct.h all short's should be changed to SHORT (ie int).
Important for KEYTAB.
3/ Since estruct.h defines system constants it should be #include'd
at beginning of every file. Change in main.c,word.c.
4/ In st520.c grez is not declared
5/ In st520.c term is not initialized properly. First 7 lines
should be same as in vt52.c i.e.
TERM term = {
NROWS - 1,
NROWS - 1,
NCOLS,
NCOLS,
MARGIN,
SCRSIZ,
NPAUSE,
6/ In search.c all static functions must be declared before use.
7/ In search.c bug in compiler . Adding comment fixes it.
Also Megamax supports struct assigns so include it.
#if MEGAMAX | MWC86 | AZTEC | MSC | VMS | USG | BSD | V7 /* add comment */
*rtpcm++ = *--mcptr;
8/ in termio.c Scancode is never returned so special function
keys are not detected. add code:
#if ST520
long ch;
int ch2;
/*
* blink the cursor only if nothing is happening, this keeps the
* cursor on steadily during movement making it easier to track
*/
STcurblink(TRUE); /* the cursor blinks while we wait */
ch = Bconin(2);
STcurblink(FALSE); /* the cursor is steady while we work */
STscancode = (ch >> 16) & 0xff;
/* return scancode if ASCII is 0 */
ch2 = 255 & (int)ch;
if(ch2 == 0)return(SPEC|STscancode);
else return(ch2);
#endif
9/ In spawn.c line 573 change MWC_86 to MWC86 .
10/ In search.c 1st arg to ldelete() must be a long. Cast it.
ldelete((long)rlength,FALSE)
ldelete((long)slength,FALSE)
11/ In fileio.c in ffputline() it is not necessary to add
a car. return before newline since fputc does this.
12/ In ebind.h the default bindings under ST520 are not very useful.
The function keys return the same codes as MSDOS so use the MSDOS
bindings.
I think that's all.
David Dermott DERMOTT@DREA.arpa
Dartmouth Nova Scotia Canada
-------