Improved backup format to support rompointers into large rom objects.

This commit is contained in:
claudiol 2018-10-23 13:14:03 -04:00
parent 9b7da8235f
commit d0fe76e118
39 changed files with 243 additions and 124 deletions

View file

@ -13,7 +13,7 @@
// CONVERT A POINTER INTO A ROMPTR ID
// IF IT FAILS, RETURNS 0
WORD rplConvertToRomptrID(WORDPTR ptr)
UBINT64 rplConvertToRomptrID(WORDPTR ptr)
{
BINT libnum=MAXLIBNUMBER;
BINT SavedOpcode;
@ -30,9 +30,9 @@ WORD rplConvertToRomptrID(WORDPTR ptr)
(*han)();
if(RetNum==OK_CONTINUE) return ObjectID;
if(RetNum==OK_CONTINUE) return ((UBINT64)ObjectID) | (((UBINT64)ObjectIDHash)<<32);
}
--libnum;
libnum=rplGetNextLib(libnum);
}
CurOpcode=SavedOpcode;
@ -45,7 +45,7 @@ WORD rplConvertToRomptrID(WORDPTR ptr)
// RETURNS 0 IF NOT A VALID ID
// OR NOT RECOGNIZED BY ITS LIBRARIES
WORDPTR rplConvertIDToPTR(WORD romptrid)
WORDPTR rplConvertIDToPTR(UBINT64 romptrid)
{
if(!ISROMPTRID(romptrid)) return 0;
@ -61,6 +61,7 @@ WORDPTR rplConvertIDToPTR(WORD romptrid)
if(!han) return 0;
RetNum=ERR_INVALID;
ObjectID=romptrid;
ObjectIDHash=romptrid>>32;
(*han)();
@ -137,23 +138,23 @@ BINT rplBackup(int (*writefunc)(unsigned int,void *),void *OpaqueArgument)
sections[k].nitems=DirsTop-Directories;
sections[k].offwords=offset;
offset+=sections[k].nitems;
offset+=sections[k].nitems*2;
++k;
// SYSTEM POINTERS
sections[k].start=(WORDPTR)GC_PTRUpdate;
sections[k].nitems=MAX_GC_PTRUPDATE;
sections[k].nitems=(MAX_GC_PTRUPDATE);
sections[k].offwords=offset;
offset+=sections[k].nitems;
offset+=sections[k].nitems*2;
++k;
// STACK
sections[k].start=(WORDPTR)DStk;
sections[k].nitems=DSTop-DStk;
sections[k].nitems=(DSTop-DStk);
sections[k].offwords=offset;
offset+=sections[k].nitems;
offset+=sections[k].nitems*2;
++k;
// FILL ALL OTHER SECTIONS
@ -177,6 +178,13 @@ BINT rplBackup(int (*writefunc)(unsigned int,void *),void *OpaqueArgument)
++writeoff;
}
// WRITE ALL 10 SECTIONS nitems
for(k=0;k<10;++k) {
if(!writefunc(sections[k].nitems,OpaqueArgument)) return 0;
++writeoff;
}
// TODO: WRITE OTHER SYSTEM VARIABLES HERE
// FILL THE HEADER SECTION
@ -210,11 +218,11 @@ BINT rplBackup(int (*writefunc)(unsigned int,void *),void *OpaqueArgument)
// VALID POINTER INTO TEMPOB, CONVERT INTO FILE OFFSET
if(!writefunc( (BINT)(ptr-TempOb)+ sections[1].offwords,OpaqueArgument)) return 0;
} else {
// IF THE OBJECT IS NOT IN TEMPOB IS IN ROM
// IF THE OBJECT IS NOT IN TEMPOB, IS IN ROM
// CONVERT TO ROMPTR ID
WORD id=rplConvertToRomptrID(ptr);
UBINT64 id=rplConvertToRomptrID(ptr);
if(!id) {
// INVALID POINTER! NEED TO FIX THE MEMORY BEFORE DOING BACKUP
@ -222,10 +230,16 @@ BINT rplBackup(int (*writefunc)(unsigned int,void *),void *OpaqueArgument)
return 0;
}
if(!writefunc(id,OpaqueArgument)) return 0;
if(ROMPTRID_OFF(id)==31) {
++writeoff;
if(!writefunc((id>>32),OpaqueArgument)) return 0;
}
}
++writeoff;
}
while(writeoff<sections[4].offwords) { if(!writefunc(0,OpaqueArgument)) return 0; ++writeoff; }
// DUMP SYSTEM POINTERS
for(k=0;k<sections[4].nitems;++k) {
ptr=GC_PTRUpdate[k];
@ -234,7 +248,7 @@ BINT rplBackup(int (*writefunc)(unsigned int,void *),void *OpaqueArgument)
if(!writefunc( (BINT)(ptr-TempOb)+ sections[1].offwords,OpaqueArgument)) return 0;
} else {
WORD id;
UBINT64 id;
if(!ptr) {
// NULL POINTER, STORE AS-IS
id=0;
@ -253,10 +267,17 @@ BINT rplBackup(int (*writefunc)(unsigned int,void *),void *OpaqueArgument)
}
}
if(!writefunc(id,OpaqueArgument)) return 0;
if(ROMPTRID_OFF(id)==31) {
++writeoff;
if(!writefunc((id>>32),OpaqueArgument)) return 0;
}
}
++writeoff;
}
while(writeoff<sections[5].offwords) { if(!writefunc(0,OpaqueArgument)) return 0; ++writeoff; }
// DUMP DATA STACK POINTERS
for(k=0;k<sections[5].nitems;++k) {
ptr=DStk[k];
@ -265,14 +286,14 @@ BINT rplBackup(int (*writefunc)(unsigned int,void *),void *OpaqueArgument)
if(!writefunc( (BINT)(ptr-TempOb)+ sections[1].offwords,OpaqueArgument)) return 0;
} else {
WORD id;
UBINT64 id;
// SPECIAL CASE - HANDLE OFFSET NUMBERS STORED INSIDE THE STACK
if((PTR2NUMBER)ptr<=(UBINT64)sections[5].nitems) {
// THIS IS A NUMBER, NOT A POINTER
// IN THE STACK, THESE ARE STACK MARKERS
// REPLACE WITH THE ACTUAL NUMBER, BUT USE NEGATIVE OFFSET TO DISTINGUISH IT FROM FILE OFFSETS
id=-((PTR2NUMBER)ptr);
// REPLACE WITH A SPECIAL ROMPTRID FOR LIBRARY 0, ID=63, offset=31
id=(((UBINT64)((PTR2NUMBER)ptr))<<32) | MKROMPTRID(0,63,31);
}
else {
// IF THE OBJECT IS NOT IN TEMPOB IS IN ROM
@ -286,10 +307,17 @@ BINT rplBackup(int (*writefunc)(unsigned int,void *),void *OpaqueArgument)
if(!writefunc(id,OpaqueArgument)) return 0;
if(ROMPTRID_OFF(id)==31) {
++writeoff;
if(!writefunc((id>>32),OpaqueArgument)) return 0;
}
}
++writeoff;
}
while(writeoff<sections[6].offwords) { if(!writefunc(0,OpaqueArgument)) return 0; ++writeoff; }
return 1;
}
@ -329,10 +357,15 @@ BINT rplRestoreBackup(BINT includestack,WORD (*readfunc)(void *),void *OpaqueArg
{
sections[k].offwords=readfunc(OpaqueArgument);
++offset;
if(k>0) sections[k-1].nitems=sections[k].offwords-sections[k-1].offwords;
}
// READ nitems, RESTORE FROM OFFSETS IF NOTE PRESENT (BACKWARDS COMPATIBLE WITH OLD BACKUP FORMAT)
for(k=0;k<10;++k)
{
sections[k].nitems=readfunc(OpaqueArgument);
++offset;
if((k>0) && (sections[k-1].nitems==0)) sections[k-1].nitems=sections[k].offwords-sections[k-1].offwords;
}
// RESET RPL ENVIRONMENT
// ERASE ALL RPL MEMORY IN PREPARATION FOR RESTORE
@ -375,7 +408,7 @@ BINT rplRestoreBackup(BINT includestack,WORD (*readfunc)(void *),void *OpaqueArg
// RESIZE ALL SECTIONS TO THE REQUESTED SIZE
if(sections[0].nitems+TEMPBLOCKSLACK>1024) growTempBlocks(sections[0].nitems+TEMPBLOCKSLACK);
if(sections[1].nitems+sections[2].nitems>1024) growTempOb(sections[1].nitems+sections[2].nitems);
if(sections[3].nitems+DIRSLACK>1024) growDirs(sections[3].nitems+DIRSLACK);
if((sections[3].nitems)+DIRSLACK>1024) growDirs(sections[3].nitems+DIRSLACK);
if(includestack) {
if(sections[5].nitems+DSTKSLACK>1024) growDirs(sections[5].nitems+DSTKSLACK);
}
@ -384,7 +417,7 @@ BINT rplRestoreBackup(BINT includestack,WORD (*readfunc)(void *),void *OpaqueArg
// SKIP TO THE PROPER FILE OFFSET
while(offset!=1024) { readfunc(OpaqueArgument); ++offset; }
while(offset<1024) { readfunc(OpaqueArgument); ++offset; }
// HERE'S THE START OF TEMPBLOCKS
for(k=0;k<sections[0].nitems;++k) {
@ -396,6 +429,9 @@ BINT rplRestoreBackup(BINT includestack,WORD (*readfunc)(void *),void *OpaqueArg
TempBlocksEnd=TempBlocks+sections[0].nitems;
while(offset<sections[1].offwords) { readfunc(OpaqueArgument); ++offset; }
// HERE'S THE START OF TEMPOB
for(k=0;k<sections[1].nitems;++k)
{
@ -407,6 +443,9 @@ BINT rplRestoreBackup(BINT includestack,WORD (*readfunc)(void *),void *OpaqueArg
TempObEnd=TempOb+sections[1].nitems;
while(offset<sections[2].offwords) { readfunc(OpaqueArgument); ++offset; }
// AFTER TEMPOB
for(k=0;k<sections[2].nitems;++k)
{
@ -416,13 +455,22 @@ BINT rplRestoreBackup(BINT includestack,WORD (*readfunc)(void *),void *OpaqueArg
}
if(Exceptions) return -1;
while(offset<sections[3].offwords) { readfunc(OpaqueArgument); ++offset; }
// HERE'S THE START OF THE DIRECTORIES
for(k=0;k<sections[3].nitems;++k)
{
data=readfunc(OpaqueArgument);
if(ISROMPTRID(data)) Directories[k]=rplConvertIDToPTR(data);
if(ISROMPTRID(data)) {
WORD hash=0;
if(ROMPTRID_OFF(data)==31) {
hash=readfunc(OpaqueArgument);
++offset;
}
Directories[k]=rplConvertIDToPTR( ((UBINT64)data) | (((UBINT64)hash)<<32));
}
else Directories[k]=TempOb+(data-sections[1].offwords);
if(Directories[k]==0) ++errors; // JUST COUNT THE ERRORS BUT DON'T STOP, RECOVER AS MUCH AS POSSIBLE
++offset;
@ -431,15 +479,25 @@ BINT rplRestoreBackup(BINT includestack,WORD (*readfunc)(void *),void *OpaqueArg
DirsTop=Directories+sections[3].nitems;
while(offset<sections[4].offwords) { readfunc(OpaqueArgument); ++offset; }
// HERE'S THE START OF SYSTEM POINTERS
for(k=0;k<sections[4].nitems;++k)
{
data=readfunc(OpaqueArgument);
if(ISROMPTRID(data)) {
GC_PTRUpdate[k]=rplConvertIDToPTR(data);
// EARLIER VERSIONS WOULD CONVERT INVALID POINTERS INTO POINTERS TO zero_bint
if(GC_PTRUpdate[k]==(WORDPTR)zero_bint) GC_PTRUpdate[k]=0;
WORD hash=0;
if(ROMPTRID_OFF(data)==31) {
hash=readfunc(OpaqueArgument);
++offset;
}
GC_PTRUpdate[k]=rplConvertIDToPTR(((UBINT64)data) | (((UBINT64)hash)<<32));
}
else {
if(!data) GC_PTRUpdate[k]=0; // RESTORE NULL POINTERS
@ -460,15 +518,30 @@ BINT rplRestoreBackup(BINT includestack,WORD (*readfunc)(void *),void *OpaqueArg
if(includestack) {
// OPTIONALLY EXTRACT THE DATA STACK
while(offset<sections[5].offwords) { readfunc(OpaqueArgument); ++offset; }
DStkProtect=DStkBottom=DStk;
for(k=0;k<sections[5].nitems;++k)
{
data=readfunc(OpaqueArgument);
if(ISROMPTRID(data)) DStk[k]=rplConvertIDToPTR(data);
if(ISROMPTRID(data)) {
WORD hash=0;
if(ROMPTRID_OFF(data)==31) {
hash=readfunc(OpaqueArgument);
++offset;
}
if(data==MKROMPTRID(0,63,31)) {
DStk[k]=NUMBER2PTR(hash);
DStkProtect=DStkBottom=DStk+k+1;
}
else DStk[k]=rplConvertIDToPTR(((UBINT64)data) | (((UBINT64)hash)<<32));
}
else {
if(((BINT)data)<=0) {
// THESE WERE NUMBERS USED IN THE STACK SNAPSHOTS
// OLD FORMAT - THESE WERE NUMBERS USED IN THE STACK SNAPSHOTS
DStk[k]=NUMBER2PTR(-(BINT)data);
DStkProtect=DStkBottom=DStk+k+1;
}

View file

@ -685,18 +685,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -1865,18 +1865,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -1754,18 +1754,18 @@ case NUMINT:
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -619,7 +619,7 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
//libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
@ -631,7 +631,7 @@ void LIB_HANDLER()
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
//libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
//libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
RetNum=ERR_NOTMINE;
return;

View file

@ -1651,18 +1651,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectPTR = ID
// ObjectPTR
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -2612,18 +2612,18 @@ case TVARSE:
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -7021,14 +7021,14 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
RetNum=ERR_NOTMINE;
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;

View file

@ -1695,18 +1695,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -212,14 +212,14 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
RetNum=ERR_NOTMINE;
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;

View file

@ -286,14 +286,14 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
RetNum=ERR_NOTMINE;
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;

View file

@ -1804,18 +1804,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;

View file

@ -5422,18 +5422,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;

View file

@ -2963,18 +2963,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -1772,18 +1772,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -3048,18 +3048,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -4014,18 +4014,18 @@ case FACTORS:
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -2372,7 +2372,7 @@ case TEVAL:
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
@ -2380,11 +2380,11 @@ case TEVAL:
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -5002,14 +5002,14 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
RetNum=ERR_NOTMINE;
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;

View file

@ -3000,18 +3000,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:
// THIS OPCODE RECEIVES A POINTER TO AN OBJECT FROM THIS LIBRARY AND MUST

View file

@ -1082,14 +1082,14 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
RetNum=ERR_NOTMINE;
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;

View file

@ -754,18 +754,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -2471,18 +2471,18 @@ case SDPATH:
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -826,18 +826,18 @@ case EDINSERT:
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -1132,18 +1132,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -1279,18 +1279,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -1018,18 +1018,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -2106,18 +2106,18 @@ case SCLVIEW:
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -2713,18 +2713,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -228,18 +228,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -138,7 +138,15 @@ void libGetRomptrID(BINT libnum,WORDPTR *table,WORDPTR ptr)
while(table[idx]) {
if( (ptr>=table[idx]) && (ptr<table[idx]+rplObjSize(table[idx]))) {
BINT offset=ptr-table[idx];
ObjectID=MKROMPTRID(libnum,idx,offset);
if(offset>30) {
ObjectID=MKROMPTRID(libnum,idx,31); // MARK OFFSET=31 TO INDICATE OFFSET EXCEEDS THE OFFSET
ObjectIDHash=libComputeHash(ptr);
}
else {
ObjectID=MKROMPTRID(libnum,idx,offset);
ObjectIDHash=0;
}
RetNum=OK_CONTINUE;
return;
}
@ -148,7 +156,7 @@ void libGetRomptrID(BINT libnum,WORDPTR *table,WORDPTR ptr)
return;
}
void libGetPTRFromID(WORDPTR *table,WORD id)
void libGetPTRFromID(WORDPTR *table,WORD id,WORD hash)
{
BINT idx=0;
while(table[idx]) ++idx;
@ -156,7 +164,33 @@ void libGetPTRFromID(WORDPTR *table,WORD id)
RetNum=ERR_NOTMINE;
return;
}
ObjectPTR=table[ROMPTRID_IDX(id)]+ROMPTRID_OFF(id);
if(ROMPTRID_OFF(id)<31) ObjectPTR=table[ROMPTRID_IDX(id)]+ROMPTRID_OFF(id);
else {
// SCAN THE OBJECT TO FIND A MATCHING HASH
WORDPTR scan=table[ROMPTRID_IDX(id)],ptr;
WORDPTR end=rplSkipOb(scan);
BINT len;
WORD exhash;
scan+=31; // MINIMUM OFFSET FOR A SEARCH
while(scan<end) {
exhash=115127;
ptr=scan;
while(ptr<end) {
exhash=((exhash<<13)-exhash)+ *ptr;
++ptr;
if(exhash==hash) {
// FOUND AN OBJECT, CHECK FOR VALIDITY
if(rplObjSize(scan)==ptr-scan) {
ObjectPTR=scan;
RetNum=OK_CONTINUE;
}
}
}
++scan;
}
}
RetNum=OK_CONTINUE;
}
@ -271,6 +305,16 @@ while(object!=end) {
return hash;
}
WORD libComputeHash2(WORDPTR start,BINT nwords)
{
WORDPTR end=start+nwords;
WORD hash=115127;
while(start!=end) {
hash=((hash<<13)-hash)+ *start;
++start;
}
return hash;
}
// FINDS A TEXT MESSAGE IN A TABLE IN THE FORM

View file

@ -1016,18 +1016,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -1531,14 +1531,14 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
RetNum=ERR_NOTMINE;
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;

View file

@ -988,7 +988,7 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
@ -999,7 +999,7 @@ void LIB_HANDLER()
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;

View file

@ -1723,18 +1723,18 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -352,14 +352,14 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
RetNum=ERR_NOTMINE;
return;
case OPCODE_ROMID2PTR:
// THIS OPCODE GETS A UNIQUE ID AND MUST RETURN A POINTER TO THE OBJECT IN ROM
// ObjectID = ID
// ObjectID = ID, ObjectIDHash=hash
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;

View file

@ -164,7 +164,7 @@ void LIB_HANDLER()
// THIS OPCODE RECEIVES A POINTER TO AN RPL OBJECT IN ROM, EXPORTED BY THIS LIBRARY
// AND CONVERTS IT TO A UNIQUE ID FOR BACKUP PURPOSES
// ObjectPTR = POINTER TO ROM OBJECT
// LIBBRARY RETURNS: ObjectID=new ID, RetNum=OK_CONTINUE
// LIBBRARY RETURNS: ObjectID=new ID, ObjectIDHash=hash, RetNum=OK_CONTINUE
// OR RetNum=ERR_NOTMINE IF THE OBJECT IS NOT RECOGNIZED
libGetRomptrID(LIBRARY_NUMBER,(WORDPTR *)ROMPTR_TABLE,ObjectPTR);
@ -175,7 +175,7 @@ void LIB_HANDLER()
// LIBRARY RETURNS: ObjectPTR = POINTER TO THE OBJECT, AND RetNum=OK_CONTINUE
// OR RetNum= ERR_NOTMINE;
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID);
libGetPTRFromID((WORDPTR *)ROMPTR_TABLE,ObjectID,ObjectIDHash);
return;
case OPCODE_CHECKOBJ:

View file

@ -174,11 +174,12 @@ void libProbeCmds(char *libnames[], BINT tokeninfo[], int numcmds);
void libGetInfo(WORD opcode,char *libnames[],WORD libopcodes[],BINT tokeninfo[],int numcmds);
void libGetInfo2(WORD opcode, char *libnames[], BINT tokeninfo[], int numcmds);
void libGetRomptrID(BINT libnum,WORDPTR *table,WORDPTR ptr);
void libGetPTRFromID(WORDPTR *table,WORD id);
void libGetPTRFromID(WORDPTR *table,WORD id,WORD hash);
void libAutoCompleteNext(BINT libnum,char *libnames[],int numcmds);
void libAutoCompletePrev(BINT libnum,char *libnames[],int numcmds);
void libFindMsg(BINT message,WORDPTR table);
WORD libComputeHash(WORDPTR object);
WORD libComputeHash2(WORDPTR start,BINT nwords);

View file

@ -114,6 +114,7 @@ UBINT ArgNum1,ArgNum2,ArgNum3,RetNum;
#define BlankLen ArgNum2
#define DecompHints ArgNum2
#define ObjectIDHash ArgNum2
#define CurrentConstruct ArgNum3
#define SuggestedOpcode ArgNum3