// nostartup.c - Demo für Linken ohne Startup-Code
//
// Jens Gelhar 08.06.92
//
// Compileraufruf: cppc nostartup.c -gs
// bzw. "Ohne Startup" im M+Plus-Linker-Requester einstellen

#include <linkerfunc.h>
#include <stream.h>

// Die erste Funktion im ersten Hunk wird angesprungen:

void f(register __d0 int len, register __a0 char *par)
 // In Registern d0 und a0 werden die Shell-Parameter übergeben
 // Diese Register-Belegungen bremsen die Funktion übrigens gut aus,
 // deshalb sollte man in dieser Funktion nicht mehr als nötig tun.
{
  // Wichtig, wenn Small Data-Hunks existieren, und sonst auch
  // nicht verkehrt:
  GetBaseReg();

  // Initialisierungen, z. B. Dos-Lib öffnen:
  InitModules();

  par[len-1]=0;     // Normalerweise kein Nullbyte am Ende

  // Jetzt geht alles wie immer:
  cout << "Es geht auch ohne Startup-Code!"
       << "\nParameter-Länge: " << len
       << "\nParameter: " << par
       << "\n";

  // Programmende: Aufräumen, z. B. DosLibrary schließen:
  CleanupModules();

  // "exit()" darf ohne Startup-Code nicht benutzt werden!!!
  // Es ist nur so ein sinnvoller Return-Code möglich:
  len = 42;
}

