[comp.sys.amiga] Lattice startup code questions

rlcarr@athena.mit.edu (Rich Carreiro) (02/19/89)

I have some questions about C startup code - what exactly does it have
to do?  I waslooking through the KICKSTART GUIDE TO THE AMIGA and saw the
following:

/* OurStart.c - simple startup code */
#include <exec/types.h>
#define KNOWN_ADDRESS 4

extern APTR OpenLibrary();
extern VOID CloseLibrary();

APTR SysBase;
APTR DOSBase;

OurStart()
{
   SysBase = *((APTR *) KNOWN_ADDRESS);
   DOSBase = OpenLibrary("dos.library",0);

   main();
   CloseLibrary(DOSBase);
}

and to be used with it:

/* beep.c - link with ourstart.o */
#include <exec/types.h>

extern APTR OpenLibrary();
extern VOID CloseLibrary(), DisplayBeep();

APTR IntuitionBase;

main()
{
   int i;

   IntuitionBase = OpenLibrary("intuition.library",29);

   if (IntuitionBase != 0) {

      for (i=0;i<6;i++) {
	DisplayBeep();
        Delay(5);
      }
   CloseLibrary(IntuitionBase);
   }
}

I compile each with 'lc -v filename' and they compile fine.  I next do
'blink from ourstart.o+beep.o to beep lib lib:amiga.lib' [I have
Latice 5.02]  and it links fine.  When I run it, instant Guru 4.  When
I recompile with debug information and do a 
'blink from ourstart.o+beep.o to beep lib lib:amiga.lib addsym' and
to a 'cpr beep' cpr comes up, displays the source starting at OurStart(), 
not main(), and then locks up.  I can move slider bars and MachII keeps working
but cpr won't respond to anything.  Note that beep.c works fine if I link
it with c.o, lc.lib, and amiga.lib.  Also, when I link with ourstart.o, cpr
reports that beep has 2 modules, while if I link with c.o et al., cpr says
there is only one module.  I have looked through c.a to get an idea of what
it is doing, but I don't know assembly.

Finally, all the books on C pertaining to the Amiga talk about linking
with the AStartup.obj and LStartup.obj startup codes.  I have gathered
that LStartup.obj is now c.o and is used when you want Lattice library
(lc.lib) I/O.  Astartup.obj was used when you didn't care about UNIX
commend line emulation and wanted Amiga, not lattice I/O - in this
even you also linked amiga.lib AHEAD of lc.lib.  My question is - with
Lattice 5.02, what is the equivalent of Astartup.obj?

Any answers, comments, corrections to any of this will be more than
appreciated.

ARPA:    rlcarr@athena.mit.edu
UUCP:    {wherever}!mit-eddie!mit-athena!rlcarr
BITNET:  rlcarr%athena.mit.edu@MITVMA.mit.edu

*******************************************************************************
* Rich Carreiro                 "Back off man, I'm a scientist."              *
* rlcarr@athena.mit.edu                - Dr. Peter Venkman                    *
*******************************************************************************