diff --git a/include/log_action.h b/include/log_action.h index 135a7cee1ba06b9336087801ee2e0fc0bd78f257..887727af600115b4542329dcfdb2369849c391dd 100644 --- a/include/log_action.h +++ b/include/log_action.h @@ -1,12 +1,12 @@ #ifndef LOG_ACTION_H #define LOG_ACTION_H -#include"logdef.h" +#include "logdef.h" #include "gate.h" #include "wire.h" #include "page.h" #include "label.h" -#include<limits.h> +#include <limits.h> typedef enum { @@ -38,7 +38,7 @@ typedef enum act_readgate, act_connectgate, act_disconnectgate, - act_configgate, + act_configgate, act_configchgate, act_configrelgate, act_confignode, @@ -210,7 +210,6 @@ typedef struct log_action_t log_kattrrec *actkattr; unsigned char *actproc; - int pagechanged[log_maxpages]; log_page *pages[log_maxpages]; /* TODO use a variable size array or a list */ size_t numpages; /**< number of pages */ log_nrec *nbase; @@ -333,10 +332,8 @@ typedef struct log_action_t long gattrstamp; /** Changes to gate attributes */ long sigstamp; /** Changes to signal table */ long loadstamp; /** A page was loaded */ - long pagestamp[log_maxpages]; long colorstamp; /** Color assignment have changes */ - long resetstamp; /* Simulation has been reset */ - log_regrec *pageregions[log_maxpages]; + long resetstamp; /* Simulation has been reset */ long markerstamp; /** Page markers moved */ log_krec *probekind; diff --git a/include/page.h b/include/page.h index 3d94e920679a8584e1a506f865af66b62f3a367c..8b818bbb3b6b4114d685e6234eb4c3a25b8b738b 100644 --- a/include/page.h +++ b/include/page.h @@ -21,7 +21,8 @@ typedef struct log_page { log_vwrec *vwbase; /* base vertical wire of the page */ log_lrec *lbase; /* base label of page */ log_brec *bbase; /* base box of page */ - log_regrec *pageregions; + log_regrec *pageregions; /* base region of page */ + long pagestamp; int pagechanged; } log_page; diff --git a/src/log.c b/src/log.c index 11e9ee2e86f48803b0642f9e171ff186a853dc8c..d83040248660a03148342eb494abcc0371b3a950 100644 --- a/src/log.c +++ b/src/log.c @@ -2540,11 +2540,11 @@ static void setupregion(log_regrec **r, short pagenum) { if (*r != NULL) { - if (*r == gg.pageregions[(*r)->pagenum - 1]) - gg.pageregions[(*r)->pagenum - 1] = (*r)->next; + if (*r == gg.pages[(*r)->pagenum - 1]->pageregions) + gg.pages[(*r)->pagenum - 1]->pageregions = (*r)->next; else { - r2 = gg.pageregions[(*r)->pagenum - 1]; + r2 = gg.pages[(*r)->pagenum - 1]->pageregions; while (r2 != NULL && r2->next != *r) r2 = r2->next; if (r2 != NULL) @@ -2564,8 +2564,8 @@ static void setupregion(log_regrec **r, short pagenum) (*r)->y2 = 32767; stamp(&(*r)->regstamp); (*r)->info = (na_long)0; - (*r)->next = gg.pageregions[pagenum - 1]; - gg.pageregions[pagenum - 1] = *r; + (*r)->next = gg.pages[pagenum - 1]->pageregions; + gg.pages[pagenum - 1]->pageregions = *r; } @@ -14443,9 +14443,7 @@ static void initialize() yoff0 = 0; gatecount[0] = 0; gg.nbase = NULL; - gg.pagechanged[0] = false; - stamp(gg.pagestamp); - gg.pageregions[0] = NULL; + stamp(&gg.pages[0]->pagestamp); curfilename[0] = NULL; initbuf(©buf); nodeconflictbase = NULL; diff --git a/src/logsim.c b/src/logsim.c index e7f50db82093d0f6384804d597455215347d5dc1..a16bc26ad1d225329b57ab4057791d1c9858d7a6 100644 --- a/src/logsim.c +++ b/src/logsim.c @@ -302,7 +302,7 @@ void Log_16_ledgate2(log_16_action *act) break; } } - + if ((((unsigned long)WITH1->vars) & (1L << 0)) != 0 && (((unsigned long)WITH1->vars) & (1L << 1)) != 0) { @@ -450,7 +450,7 @@ void Log_16_clock(log_16_action *act) WITH1->vars = (na_long)(((unsigned long)WITH1->vars) & (~(1L << 1))); WITH1->vars = (na_long)(((unsigned long)WITH1->vars) | (((long)TEMP) << 1)); } - + if (WITH->refrflag || ((((unsigned long)WITH1->vars) & (1L << 3)) != 0) != ((((unsigned long)WITH1->vars) & (1L << 2)) != 0)) { diff --git a/src/logsimh.c b/src/logsimh.c index a93efd6cb626e9b71da046dd1e36fb7e87cbbb85..3dd1b619f6c796aef43558d76f3b879acefdf202 100644 --- a/src/logsimh.c +++ b/src/logsimh.c @@ -4834,7 +4834,7 @@ static void updatehdef(hdefrec *hdef) if (hdef->defreg != NULL) newstamp = hdef->defreg->regstamp; else - newstamp = WITH->pagestamp[j - 1]; + newstamp = WITH->pages[j - 1]->pagestamp; dep = hdef->depends; while (dep != NULL && dep->hdefstamp == dep->hdef->curstamp) diff --git a/src/page.c b/src/page.c index af5d307b4d966bf24e6c437264ce3ee687704632..df219aae5b8e0b1b27ed4f076764a32c0a66aeae 100644 --- a/src/page.c +++ b/src/page.c @@ -10,9 +10,9 @@ void chpage(short pg) { log_regrec *region; - stamp(&gg.pagestamp[pg - 1]); - gg.pagechanged[pg - 1] = true; - region = gg.pageregions[pg - 1]; + stamp(&gg.pages[pg - 1]->pagestamp); + gg.pages[pg - 1]->pagechanged = true; + region = gg.pages[pg - 1]->pageregions; while (region != NULL) { stamp(®ion->regstamp); @@ -25,9 +25,9 @@ void chpageplace(short pg, short x1, short y1, short x2, short y2) { log_regrec *r; - stamp(&gg.pagestamp[pg - 1]); - gg.pagechanged[pg - 1] = true; - r = gg.pageregions[pg - 1]; + stamp(&gg.pages[pg - 1]->pagestamp); + gg.pages[pg - 1]->pagechanged = true; + r = gg.pages[pg - 1]->pageregions; if (r == NULL) return; sortshints(&x1, &x2); @@ -51,12 +51,12 @@ int pageempty(short pg) int pagenull(short pg) { - return (pageempty(pg) && gg.pageregions[pg - 1] == NULL); + return (pageempty(pg) && gg.pages[pg - 1]->pageregions == NULL); } int pagechanged(short pg) { - return (gg.pagechanged[pg - 1] && !pageempty(pg)); + return (gg.pages[pg - 1]->pagechanged && !pageempty(pg)); } @@ -92,9 +92,9 @@ void newpage(short pg) gg.pages[i]->vwbase = NULL; gg.pages[i]->lbase = NULL; gg.pages[i]->bbase = NULL; - gg.pagechanged[i] = false; - stamp(&gg.pagestamp[i]); - gg.pageregions[i] = NULL; + gg.pages[i]->pagechanged = false; + stamp(&gg.pages[i]->pagestamp); + gg.pages[i]->pageregions = NULL; curfilename[i] = NULL; vlsimode[i] = vlsi; } @@ -204,13 +204,16 @@ int pagembb(short pg, short *x1, short *y1, short *x2, short *y2) log_page *page_alloc() { log_page *newpage = Malloc(sizeof(log_page)); - + newpage->gbase = NULL; newpage->sbase = NULL; newpage->hwbase = NULL; newpage->vwbase = NULL; newpage->lbase = NULL; newpage->bbase = NULL; + newpage->pageregions = NULL; + newpage->pagechanged = false; + newpage->pagestamp = 0; return newpage; } diff --git a/src/pagereader.c b/src/pagereader.c index 9a16f86352a27be8ed4d2807d5ebc67108e9a2e8..6d9998bde227c67f4665fecf3490934f3f0d48c1 100644 --- a/src/pagereader.c +++ b/src/pagereader.c @@ -187,7 +187,7 @@ void loadpage(char *filename_, char *reason_) garbagecoll(); stamp(&gg.loadstamp); - stamp(&gg.pagestamp[gg.curpage - 1]); + stamp(&gg.pages[gg.curpage - 1]->pagestamp); if (ver < 5) { loadlog30(&V.f, ver); @@ -540,7 +540,7 @@ void loadpage(char *filename_, char *reason_) if (V.ip != NULL) Free(V.ip); chpage((int)gg.curpage); - gg.pagechanged[gg.curpage - 1] = false; + gg.pages[gg.curpage - 1]->pagechanged = false; if (curfilename[gg.curpage - 1] == NULL) curfilename[gg.curpage - 1] = (char *)Malloc(256); strcpy(curfilename[gg.curpage - 1], filename); @@ -818,7 +818,7 @@ void readpage(char *filename_, char *reason) fclose(f); f = NULL; chpage((int)gg.curpage); - gg.pagechanged[gg.curpage - 1] = false; + gg.pages[gg.curpage - 1]->pagechanged = false; if (curfilename[gg.curpage - 1] == NULL) curfilename[gg.curpage - 1] = (char *)Malloc(256); strcpy(curfilename[gg.curpage - 1], filename); diff --git a/src/pagewriter.c b/src/pagewriter.c index 27dd67aeb6962ca40996b4df247b68e6b64e536f..3cbd4d17cc4589e6113c970fbc903635a3367a5f 100644 --- a/src/pagewriter.c +++ b/src/pagewriter.c @@ -482,7 +482,7 @@ void savepage(short pgnum, char *filename_) if (f != NULL) fclose(f); f = NULL; - gg.pagechanged[pgnum - 1] = false; + gg.pages[pgnum - 1]->pagechanged = false; if (curfilename[pgnum - 1] == NULL) curfilename[pgnum - 1] = (char *)Malloc(256); strcpy(curfilename[pgnum - 1], filename);