1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-25 17:29:50 +00:00

Replace more linked lists by collections.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4793 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2010-08-08 15:13:53 +00:00
parent 026724482f
commit ad140bede4
4 changed files with 34 additions and 43 deletions

View File

@ -271,8 +271,8 @@ static int BinUnresolved (unsigned Name attribute ((unused)), void* D)
void BinWriteTarget (BinDesc* D, struct File* F)
/* Write a binary output file */
{
Memory* M;
{
unsigned I;
/* Place the filename in the control structure */
D->Filename = GetString (F->Name);
@ -297,11 +297,11 @@ void BinWriteTarget (BinDesc* D, struct File* F)
Print (stdout, 1, "Opened `%s'...\n", D->Filename);
/* Dump all memory areas */
M = F->MemList;
while (M) {
for (I = 0; I < CollCount (&F->MemList); ++I) {
/* Get this entry */
Memory* M = CollAtUnchecked (&F->MemList, I);
Print (stdout, 1, " Dumping `%s'\n", GetString (M->Name));
BinWriteMem (D, M);
M = M->FNext;
}
/* Close the file */

View File

@ -41,7 +41,6 @@
/* common */
#include "bitops.h"
#include "check.h"
#include "coll.h"
#include "print.h"
#include "xmalloc.h"
#include "xsprintf.h"
@ -170,13 +169,7 @@ static void FileInsert (File* F, Memory* M)
/* Insert the memory area into the files list */
{
M->F = F;
if (F->MemList == 0) {
/* First entry */
F->MemList = M;
} else {
F->MemLast->FNext = M;
}
F->MemLast = M;
CollAppend (&F->MemList, M);
}
@ -272,8 +265,7 @@ static File* NewFile (unsigned Name)
F->Name = Name;
F->Flags = 0;
F->Format = BINFMT_DEFAULT;
F->MemList = 0;
F->MemLast = 0;
InitCollection (&F->MemList);
/* Insert the struct into the list */
CollAppend (&FileList, F);
@ -298,7 +290,6 @@ static Memory* NewMemory (unsigned Name)
/* Initialize the fields */
M->Name = Name;
M->FNext = 0;
M->Attr = 0;
M->Flags = 0;
M->Start = 0;
@ -1723,7 +1714,7 @@ void CfgWriteTarget (void)
File* F = CollAtUnchecked (&FileList, I);
/* We don't need to look at files with no memory areas */
if (F->MemList) {
if (CollCount (&F->MemList) > 0) {
/* Is there an output file? */
if (SB_GetLen (GetStrBuf (F->Name)) > 0) {
@ -1753,12 +1744,15 @@ void CfgWriteTarget (void)
/* No output file. Walk through the list and mark all segments
* loading into these memory areas in this file as dumped.
*/
Memory* M = F->MemList;
while (M) {
*/
unsigned J;
for (J = 0; J < CollCount (&F->MemList); ++J) {
MemListNode* N;
/* Get this entry */
Memory* M = CollAtUnchecked (&F->MemList, J);
/* Debugging */
Print (stdout, 2, "Skipping `%s'...\n", GetString (M->Name));
@ -1773,8 +1767,6 @@ void CfgWriteTarget (void)
/* Next segment node */
N = N->Next;
}
/* Next memory area */
M = M->FNext;
}
}
}

View File

@ -38,6 +38,9 @@
/* common */
#include "coll.h"
/* ld65 */
#include "segments.h"
@ -53,10 +56,9 @@
typedef struct File File;
struct File {
unsigned Name; /* Name index of the file */
unsigned Flags;
unsigned Format; /* Output format */
struct Memory* MemList; /* List of memory areas in this file */
struct Memory* MemLast; /* Last memory area in this file */
unsigned Flags;
unsigned Format; /* Output format */
Collection MemList; /* List of memory areas in this file */
};
/* Segment list node. Needed because there are two lists (RUN & LOAD) */
@ -70,7 +72,6 @@ struct MemListNode {
typedef struct Memory Memory;
struct Memory {
unsigned Name; /* Name index of the memory section */
Memory* FNext; /* Next in file list */
unsigned Attr; /* Which values are valid? */
unsigned Flags; /* Set of bitmapped flags */
unsigned long Start; /* Start address */

View File

@ -1221,10 +1221,8 @@ void O65SetExport (O65Desc* D, unsigned Ident)
static void O65SetupSegments (O65Desc* D, File* F)
/* Setup segment assignments */
{
Memory* M;
MemListNode* N;
SegDesc* S;
{
unsigned I;
unsigned TextIdx, DataIdx, BssIdx, ZPIdx;
/* Initialize the counters */
@ -1234,14 +1232,16 @@ static void O65SetupSegments (O65Desc* D, File* F)
D->ZPCount = 0;
/* Walk over the memory list */
M = F->MemList;
while (M) {
for (I = 0; I < CollCount (&F->MemList); ++I) {
/* Get this entry */
Memory* M = CollAtUnchecked (&F->MemList, I);
/* Walk through the segment list and count the segment types */
N = M->SegList;
MemListNode* N = M->SegList;
while (N) {
/* Get the segment from the list node */
S = N->Seg;
SegDesc* S = N->Seg;
/* Check the segment type. */
switch (O65SegType (S)) {
@ -1255,8 +1255,6 @@ static void O65SetupSegments (O65Desc* D, File* F)
/* Next segment node */
N = N->Next;
}
/* Next memory area */
M = M->FNext;
}
/* Allocate memory according to the numbers */
@ -1267,14 +1265,16 @@ static void O65SetupSegments (O65Desc* D, File* F)
/* Walk again through the list and setup the segment arrays */
TextIdx = DataIdx = BssIdx = ZPIdx = 0;
M = F->MemList;
while (M) {
for (I = 0; I < CollCount (&F->MemList); ++I) {
/* Get this entry */
Memory* M = CollAtUnchecked (&F->MemList, I);
N = M->SegList;
/* Walk over the segment list and check the segment types */
MemListNode* N = M->SegList;
while (N) {
/* Get the segment from the list node */
S = N->Seg;
SegDesc* S = N->Seg;
/* Check the segment type. */
switch (O65SegType (S)) {
@ -1288,8 +1288,6 @@ static void O65SetupSegments (O65Desc* D, File* F)
/* Next segment node */
N = N->Next;
}
/* Next memory area */
M = M->FNext;
}
}