dect
/
asl
Archived
13
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
asl/asmfnums.c

168 lines
3.4 KiB
C

/* asmfnums.c */
/*****************************************************************************/
/* AS-Portierung */
/* */
/* Verwaltung von Datei-Nummern */
/* */
/* Historie: 15. 5.1996 Grundsteinlegung */
/* 25. 7.1998 GetFileName jetzt mit int statt Byte */
/* Verwaltung Adreßbereiche */
/* Caching FileCount */
/* 16. 8.1998 Ruecksetzen Adressbereiche */
/* */
/*****************************************************************************/
#include "stdinc.h"
#include <string.h>
#include "strutil.h"
#include "chunks.h"
#include "asmdef.h"
#include "asmsub.h"
#include "asmfnums.h"
#ifdef HAS64
#define ADRMAX 9223372036854775807ll;
#else
#define ADRMAX 4294967295l;
#endif
typedef struct _TToken
{
struct _TToken *Next;
LargeWord FirstAddr,LastAddr;
char *Name;
} TToken,*PToken;
static PToken FirstFile;
static int FileCount;
void InitFileList(void)
BEGIN
FirstFile=Nil; FileCount=0;
END
void ClearFileList(void)
BEGIN
PToken F;
while (FirstFile!=Nil)
BEGIN
F=FirstFile->Next;
free(FirstFile->Name);
free(FirstFile);
FirstFile=F;
END
FileCount=0;
END
static PToken SearchToken(int Num)
BEGIN
PToken Lauf=FirstFile;
while (Num>0)
BEGIN
if (Lauf==Nil) return Nil;
Num--; Lauf=Lauf->Next;
END
return Lauf;
END
void AddFile(char *FName)
BEGIN
PToken Lauf,Neu;
if (GetFileNum(FName)!=-1) return;
Neu=(PToken) malloc(sizeof(TToken));
Neu->Next=Nil;
Neu->Name=strdup(FName);
Neu->FirstAddr=ADRMAX;
Neu->LastAddr=0;
if (FirstFile==Nil) FirstFile=Neu;
else
BEGIN
Lauf=FirstFile;
while (Lauf->Next!=Nil) Lauf=Lauf->Next;
Lauf->Next=Neu;
END
FileCount++;
END
Integer GetFileNum(char *Name)
BEGIN
PToken FLauf=FirstFile;
int Cnt=0;
while ((FLauf!=Nil) AND (strcmp(FLauf->Name,Name)!=0))
BEGIN
Cnt++;
FLauf=FLauf->Next;
END
return (FLauf==Nil)?(-1):(Cnt);
END
char *GetFileName(int Num)
BEGIN
PToken Lauf=SearchToken(Num);
static char *Dummy="";
return (Lauf==Nil)?(Dummy):(Lauf->Name);
END
Integer GetFileCount(void)
BEGIN
return FileCount;
END
void AddAddressRange(int File, LargeWord Start, LargeWord Len)
BEGIN
PToken Lauf=SearchToken(File);
if (Lauf==Nil) return;
if (Start<Lauf->FirstAddr) Lauf->FirstAddr=Start;
if ((Len+=Start-1)>Lauf->LastAddr) Lauf->LastAddr=Len;
END
void GetAddressRange(int File, LargeWord *Start, LargeWord *End)
BEGIN
PToken Lauf=SearchToken(File);
if (Lauf==Nil)
BEGIN
*Start=ADRMAX; *End=0;
END
else
BEGIN
*Start=Lauf->FirstAddr; *End=Lauf->LastAddr;
END
END
void ResetAddressRanges(void)
BEGIN
PToken Run;
for (Run=FirstFile; Run!=Nil; Run=Run->Next)
BEGIN
Run->FirstAddr=ADRMAX;
Run->LastAddr=0;
END
END
void asmfnums_init(void)
BEGIN
FirstFile=Nil; FileCount=0;
END