/*ScianSnap.c
Eric Pepke
14 January 1993
Routines for variable snapshots in SciAn
*/
#include "Scian.h"
#include "ScianTypes.h"
#include "ScianIDs.h"
#include "ScianLists.h"
#include "ScianErrors.h"
#include "ScianSnap.h"
#include "ScianWindows.h"
#include "ScianObjWindows.h"
#include "ScianSymbols.h"
#include "ScianGarbageMan.h"
#include "ScianMethods.h"
ObjPtr snapshotClass; /*Class for all snapshots*/
#ifdef PROTO
ObjPtr TakeSnapshot(ObjPtr object)
#else
ObjPtr TakeSnapshot(object)
ObjPtr object;
#endif
/*Takes a snapshot of object*/
{
ObjPtr list;
ObjPtr retVal;
retVal = NewObject(snapshotClass, 0L);
SetVar(retVal, REPOBJ, object);
list = GetVar(object, SNAPVARS);
if (list)
{
ThingListPtr runner;
runner = LISTOF(list);
while (runner)
{
NameTyp id;
id = GetSymbolID(runner -> thing);
if (id)
{
SetVar(retVal, id, GetVar(object, id));
}
runner = runner -> next;
}
}
return retVal;
}
#ifdef PROTO
void ApplySnapshot(ObjPtr snapshot)
#else
void ApplySnapshot(snapshot)
ObjPtr snapshot;
#endif
/*Applies snapshot to its object*/
{
ObjPtr list;
ObjPtr object;
object = GetVar(snapshot, REPOBJ);
list = GetVar(object, SNAPVARS);
if (list && object)
{
ThingListPtr runner;
ObjPtr value;
runner = LISTOF(list);
while (runner)
{
NameTyp id;
id = GetSymbolID(runner -> thing);
if (id)
{
if (id == VALUE)
{
value = GetVar(snapshot, VALUE);
SetValue(object, value);
}
else
{
SetVar(object, id, GetVar(snapshot, id));
}
}
runner = runner -> next;
}
ImInvalid(object);
}
}
void InitSnapshots()
/*Initializes snapshot system*/
{
snapshotClass = NewObject(NULLOBJ, 0L);
AddToReferenceList(snapshotClass);
}
void KillSnapshots()
/*Kills the snapshot system*/
{
RemoveFromReferenceList(snapshotClass);
}
|