•  Back 
  •  Shared Libraries 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Help page 
  •  Show info about hypertext 
  •  View a new file 
Topic       : TOS - das Betriebssystem
Author      : 
Version     : tos.hyp (5. März 2013)
Subject     : Programmieren/Atari
Nodes       : 3001
Index Size  : 93602
HCP-Version : 5
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : Titel
@help       : 
@options    : +g -i -s +x +zz -t4
@width      : 70
View Ref-File11.23.8  PH_BIT3.TTP                                               TOS

/*
*
* Programm zur Manipulation des Bit 3 im Programmheader.
* MagiC benötigt dieses Bit, das i.a. Null ist, dafür, um
* dem Programm nur den minimal notwendigen Speicher zuzuweisen,
* d.h. nur Basepage+Text+Daten+Symbol+Bss.
* Wird insbesondere für alle SharedLibraries benötigt.
*
* Andreas Kromke
* 25.10.97
*
*/

#include <portab.h>
#include <tos.h>
#include <tosdefs.h>
#include <stdio.h>

/* ProgramHeader, Programmkopf für ausführbare Dateien                  */
/************************************************************************/

typedef struct {
 WORD ph_branch;         /* 0x00: muß 0x601a sein            */
 LONG ph_tlen;           /* 0x02: Länge  des TEXT - Segments */
 LONG ph_dlen;           /* 0x06: Länge  des DATA - Segments */
 LONG ph_blen;           /* 0x0a: Länge  des BSS  - Segments */
 LONG ph_slen;           /* 0x0e: Länge  der Symboltabelle   */
 LONG ph_res1;           /* 0x12: von PureC benötigt         */
 LONG ph_prgflags;       /* 0x16:  Bit 0: Heap nicht löschen */
                         /*        Bit 1: Laden ins FastRAM  */
                         /*        Bit 2: Malloc aus FastRAM */
                         /*        Bit 3: nur t+d+b+s (MagiC 5.20) */
                         /*        Bit 4,5,6,7: Speicherschutz (MiNT) */
                         /*        Bit 8: unbenutzt          */
                         /*        Bit 9: unbenutzt          */
                         /*        Bit 10: unbenutzt         */
                         /*        Bit 11: SharedText (MiNT) */
                         /*        Bit 12: unbenutzt         */
                         /*        Bit 13: unbenutzt         */
                         /*        Bit 14: unbenutzt         */
                         /*        Bit 15: unbenutzt         */
                         /*        Bits 31..28: TPA-Size     */
                         /*         (mal 128k + 128k: Mindestgr. Heap */
 WORD ph_absflag;        /* 0x1a: ungleich Null => nicht relozieren */
} PH;



WORD main( WORD argc, char *argv[] )
{
     PH ph;
     WORD ret = 0;
     LONG err;
     WORD f;

     for  (argc--,argv++; argc; argc--,argv++)
          {
          Cconws("Datei: ");
          Cconws(*argv);
          err = Fopen(*argv, RMODE_RW); /* zum Lesen+Schreiben öffnen */
          f = (WORD) err;     /* Datei-Handle */
          err = Fread(f, sizeof(PH), &ph);
          if   ((err != sizeof(PH)) || (ph.ph_branch != 0x601a))
               {
               err = EPLFMT;
               goto nextone;
               }
          Fseek(0L, f, 0);         /* Dateizeiger an den Anfang */
          ph.ph_prgflags |= 8;     /* Bit 3 setzen */
          err = Fwrite(f, sizeof(PH), &ph);

      nextone:
          if   (f > 0)
               Fclose(f);
          if   (err < 0)
               {
               printf(" => Fehler %ld", err);
               ret = (WORD) err;
               }
          Cconws("\r\n");
          }
     return(ret);
}