/* Copyright (c) Microsoft Corporation. Licensed under the MIT License. */ /*************************************************************************** Author: ShonK Project: Kauai Reviewed: Copyright (c) Microsoft Corporation Script compiler for gob based scripts. The real compilation is done at the SCCB class level. The SCCG class just provides mapping of identifiers to opcodes for GOB specific script primitives. ***************************************************************************/ #include "kidframe.h" ASSERTNAME RTCLASS(SCCG) SZOP _rgszopSccg[] = { { kopCreateChildGob, PszLit("CreateChildGob") }, { kopCreateChildThis, PszLit("CreateChildThis") }, { kopDestroyGob, PszLit("DestroyGob") }, { kopDestroyThis, PszLit("DestroyThis") }, { kopResizeGob, PszLit("ResizeGob") }, { kopResizeThis, PszLit("ResizeThis") }, { kopMoveRelGob, PszLit("MoveRelGob") }, { kopMoveRelThis, PszLit("MoveRelThis") }, { kopMoveAbsGob, PszLit("MoveAbsGob") }, { kopMoveAbsThis, PszLit("MoveAbsThis") }, { kopGidThis, PszLit("GidThis") }, { kopGidParGob, PszLit("GidParGob") }, { kopGidParThis, PszLit("GidParThis") }, { kopGidNextSib, PszLit("GidNextSib") }, { kopGidPrevSib, PszLit("GidPrevSib") }, { kopGidChild, PszLit("GidChild") }, { kopFGobExists, PszLit("FGobExists") }, { kopCreateClock, PszLit("CreateClock") }, { kopDestroyClock, PszLit("DestroyClock") }, { kopStartClock, PszLit("StartClock") }, { kopStopClock, PszLit("StopClock") }, { kopTimeCur, PszLit("TimeCur") }, { kopSetAlarm, PszLit("SetAlarm") }, { kopEnqueueCid, PszLit("EnqueueCid") }, { kopAlert, PszLit("Alert") }, { kopRunScriptGob, PszLit("RunScriptGob") }, { kopRunScriptThis, PszLit("RunScriptThis") }, { kopStateGob, PszLit("StateGob") }, { kopStateThis, PszLit("StateThis") }, { kopChangeStateGob, PszLit("ChangeStateGob") }, { kopChangeStateThis, PszLit("ChangeStateThis") }, { kopAnimateGob, PszLit("AnimateGob") }, { kopAnimateThis, PszLit("AnimateThis") }, { kopSetPictureGob, PszLit("SetPictureGob") }, { kopSetPictureThis, PszLit("SetPictureThis") }, { kopSetRepGob, PszLit("SetRepGob") }, { kopSetRepThis, PszLit("SetRepThis") }, { kopXMouseGob, PszLit("XMouseGob") }, { kopXMouseThis, PszLit("XMouseThis") }, { kopYMouseGob, PszLit("YMouseGob") }, { kopYMouseThis, PszLit("YMouseThis") }, { kopGidUnique, PszLit("GidUnique") }, { kopXGob, PszLit("XGob") }, { kopXThis, PszLit("XThis") }, { kopYGob, PszLit("YGob") }, { kopYThis, PszLit("YThis") }, { kopZGob, PszLit("ZGob") }, { kopZThis, PszLit("ZThis") }, { kopSetZGob, PszLit("SetZGob") }, { kopSetZThis, PszLit("SetZThis") }, { kopSetColorTable, PszLit("SetColorTable") }, { kopCell, PszLit("Cell") }, { kopCellNoPause, PszLit("CellNoPause") }, { kopGetModifierState, PszLit("GetModifierState") }, { kopChangeModifierState, PszLit("ChangeModifierState") }, { kopCreateHelpGob, PszLit("CreateHelpGob") }, { kopCreateHelpThis, PszLit("CreateHelpThis") }, { kopTransition, PszLit("Transition") }, { kopGetEdit, PszLit("GetEdit") }, { kopSetEdit, PszLit("SetEdit") }, { kopAlertStr, PszLit("AlertStr") }, { kopGetProp, PszLit("GetProp") }, { kopSetProp, PszLit("SetProp") }, { kopLaunch, PszLit("Launch") }, { kopPlayGob, PszLit("PlayGob") }, { kopPlayThis, PszLit("PlayThis") }, { kopPlayingGob, PszLit("PlayingGob") }, { kopPlayingThis, PszLit("PlayingThis") }, { kopStopGob, PszLit("StopGob") }, { kopStopThis, PszLit("StopThis") }, { kopCurFrameGob, PszLit("CurFrameGob") }, { kopCurFrameThis, PszLit("CurFrameThis") }, { kopCountFramesGob, PszLit("CountFramesGob") }, { kopCountFramesThis, PszLit("CountFramesThis") }, { kopGotoFrameGob, PszLit("GotoFrameGob") }, { kopGotoFrameThis, PszLit("GotoFrameThis") }, { kopFilterCmdsGob, PszLit("FilterCmdsGob") }, { kopFilterCmdsThis, PszLit("FilterCmdsThis") }, { kopDestroyChildrenGob, PszLit("DestroyChildrenGob") }, { kopDestroyChildrenThis, PszLit("DestroyChildrenThis") }, { kopPlaySoundThis, PszLit("PlaySoundThis") }, { kopPlaySoundGob, PszLit("PlaySoundGob") }, { kopStopSound, PszLit("StopSound") }, { kopStopSoundClass, PszLit("StopSoundClass") }, { kopPlayingSound, PszLit("PlayingSound") }, { kopPlayingSoundClass, PszLit("PlayingSoundClass") }, { kopPauseSound, PszLit("PauseSound") }, { kopPauseSoundClass, PszLit("PauseSoundClass") }, { kopResumeSound, PszLit("ResumeSound") }, { kopResumeSoundClass, PszLit("ResumeSoundClass") }, { kopPlayMouseSoundGob, PszLit("PlayMouseSoundGob") }, { kopPlayMouseSoundThis, PszLit("PlayMouseSoundThis") }, { kopRunScriptCnoGob, PszLit("RunScriptCnoGob") }, { kopRunScriptCnoThis, PszLit("RunScriptCnoThis") }, { kopWidthGob, PszLit("WidthGob") }, { kopWidthThis, PszLit("WidthThis") }, { kopHeightGob, PszLit("HeightGob") }, { kopHeightThis, PszLit("HeightThis") }, { kopSetNoSlipGob, PszLit("SetNoSlipGob") }, { kopSetNoSlipThis, PszLit("SetNoSlipThis") }, { kopFIsDescendent, PszLit("FIsDescendent") }, { kopPrint, PszLit("Print") }, { kopPrintStr, PszLit("PrintStr") }, { kopSetMasterVolume, PszLit("SetMasterVolume") }, { kopGetMasterVolume, PszLit("GetMasterVolume") }, { kopStartLongOp, PszLit("StartLongOp") }, { kopEndLongOp, PszLit("EndLongOp") }, { kopSetToolTipSourceGob, PszLit("SetToolTipSourceGob") }, { kopSetToolTipSourceThis, PszLit("SetToolTipSourceThis") }, { kopSetAlarmGob, PszLit("SetAlarmGob") }, { kopSetAlarmThis, PszLit("SetAlarmThis") }, { kopModalHelp, PszLit("ModalHelp") }, { kopFlushUserEvents, PszLit("FlushUserEvents") }, { kopStreamGob, PszLit("StreamGob") }, { kopStreamThis, PszLit("StreamThis") }, { kopPrintStat, PszLit("PrintStat") }, { kopPrintStrStat, PszLit("PrintStrStat") }, { opNil, pvNil }, }; AROP _rgaropSccg[] = { { kopCreateChildGob, PszLit("CreateChildGob"), 3, 0, 0, fFalse }, { kopCreateChildThis, PszLit("CreateChildThis"), 2, 0, 0, fFalse }, { kopDestroyGob, PszLit("DestroyGob"), 1, 0, 0, fTrue }, { kopDestroyThis, PszLit("DestroyThis"), 0, 0, 0, fTrue }, { kopResizeGob, PszLit("ResizeGob"), 3, 0, 0, fTrue }, { kopResizeThis, PszLit("ResizeThis"), 2, 0, 0, fTrue }, { kopMoveRelGob, PszLit("MoveRelGob"), 3, 0, 0, fTrue }, { kopMoveRelThis, PszLit("MoveRelThis"), 2, 0, 0, fTrue }, { kopMoveAbsGob, PszLit("MoveAbsGob"), 3, 0, 0, fTrue }, { kopMoveAbsThis, PszLit("MoveAbsThis"), 2, 0, 0, fTrue }, { kopGidThis, PszLit("GidThis"), 0, 0, 0, fFalse }, { kopGidParGob, PszLit("GidParGob"), 1, 0, 0, fFalse }, { kopGidParThis, PszLit("GidParThis"), 0, 0, 0, fFalse }, { kopGidNextSib, PszLit("GidNextSib"), 1, 0, 0, fFalse }, { kopGidPrevSib, PszLit("GidPrevSib"), 1, 0, 0, fFalse }, { kopGidChild, PszLit("GidChild"), 1, 0, 0, fFalse }, { kopFGobExists, PszLit("FGobExists"), 1, 0, 0, fFalse }, { kopCreateClock, PszLit("CreateClock"), 1, 0, 0, fFalse }, { kopDestroyClock, PszLit("DestroyClock"), 1, 0, 0, fTrue }, { kopStartClock, PszLit("StartClock"), 2, 0, 0, fTrue }, { kopStopClock, PszLit("StopClock"), 1, 0, 0, fTrue }, { kopTimeCur, PszLit("TimeCur"), 1, 0, 0, fFalse }, { kopSetAlarm, PszLit("SetAlarm"), 2, 0, 0, fTrue }, { kopEnqueueCid, PszLit("EnqueueCid"), 6, 0, 0, fTrue }, { kopAlert, PszLit("Alert"), 0, 1, 1, fTrue }, { kopRunScriptGob, PszLit("RunScriptGob"), 2, 1, 0, fFalse }, { kopRunScriptThis, PszLit("RunScriptThis"), 1, 1, 0, fFalse }, { kopStateGob, PszLit("StateGob"), 1, 0, 0, fFalse }, { kopStateThis, PszLit("StateThis"), 0, 0, 0, fFalse }, { kopChangeStateGob, PszLit("ChangeStateGob"), 2, 0, 0, fTrue }, { kopChangeStateThis, PszLit("ChangeStateThis"), 1, 0, 0, fTrue }, { kopAnimateGob, PszLit("AnimateGob"), 2, 0, 0, fTrue }, { kopAnimateThis, PszLit("AnimateThis"), 1, 0, 0, fTrue }, { kopSetPictureGob, PszLit("SetPictureGob"), 2, 0, 0, fTrue }, { kopSetPictureThis, PszLit("SetPictureThis"), 1, 0, 0, fTrue }, { kopSetRepGob, PszLit("SetRepGob"), 2, 0, 0, fTrue }, { kopSetRepThis, PszLit("SetRepThis"), 1, 0, 0, fTrue }, { kopXMouseGob, PszLit("XMouseGob"), 1, 0, 0, fFalse }, { kopXMouseThis, PszLit("XMouseThis"), 0, 0, 0, fFalse }, { kopYMouseGob, PszLit("YMouseGob"), 1, 0, 0, fFalse }, { kopYMouseThis, PszLit("YMouseThis"), 0, 0, 0, fFalse }, { kopGidUnique, PszLit("GidUnique"), 0, 0, 0, fFalse }, { kopXGob, PszLit("XGob"), 1, 0, 0, fFalse }, { kopXThis, PszLit("XThis"), 0, 0, 0, fFalse }, { kopYGob, PszLit("YGob"), 1, 0, 0, fFalse }, { kopYThis, PszLit("YThis"), 0, 0, 0, fFalse }, { kopZGob, PszLit("ZGob"), 1, 0, 0, fFalse }, { kopZThis, PszLit("ZThis"), 0, 0, 0, fFalse }, { kopSetZGob, PszLit("SetZGob"), 2, 0, 0, fTrue }, { kopSetZThis, PszLit("SetZThis"), 1, 0, 0, fTrue }, { kopSetColorTable, PszLit("SetColorTable"), 1, 0, 0, fTrue }, { kopCell, PszLit("Cell"), 4, 0, 0, fTrue }, { kopCellNoPause, PszLit("CellNoPause"), 4, 0, 0, fTrue }, { kopGetModifierState, PszLit("GetModifierState"), 0, 0, 0, fFalse }, { kopChangeModifierState, PszLit("ChangeModifierState"), 2, 0, 0, fTrue }, { kopCreateHelpGob, PszLit("CreateHelpGob"), 2, 0, 0, fFalse }, { kopCreateHelpThis, PszLit("CreateHelpThis"), 1, 0, 0, fFalse }, { kopTransition, PszLit("Transition"), 5, 0, 0, fTrue }, { kopGetEdit, PszLit("GetEdit"), 2, 0, 0, fTrue }, { kopSetEdit, PszLit("SetEdit"), 2, 0, 0, fTrue }, { kopAlertStr, PszLit("AlertStr"), 0, 1, 1, fTrue }, { kopGetProp, PszLit("GetProp"), 1, 0, 0, fFalse }, { kopSetProp, PszLit("SetProp"), 2, 0, 0, fTrue }, { kopLaunch, PszLit("Launch"), 1, 0, 0, fFalse }, { kopPlayGob, PszLit("PlayGob"), 1, 0, 0, fTrue }, { kopPlayThis, PszLit("PlayThis"), 0, 0, 0, fTrue }, { kopPlayingGob, PszLit("PlayingGob"), 1, 0, 0, fFalse }, { kopPlayingThis, PszLit("PlayingThis"), 0, 0, 0, fFalse }, { kopStopGob, PszLit("StopGob"), 1, 0, 0, fTrue }, { kopStopThis, PszLit("StopThis"), 0, 0, 0, fTrue }, { kopCurFrameGob, PszLit("CurFrameGob"), 1, 0, 0, fFalse }, { kopCurFrameThis, PszLit("CurFrameThis"), 0, 0, 0, fFalse }, { kopCountFramesGob, PszLit("CountFramesGob"), 1, 0, 0, fFalse }, { kopCountFramesThis, PszLit("CountFramesThis"), 0, 0, 0, fFalse }, { kopGotoFrameGob, PszLit("GotoFrameGob"), 2, 0, 0, fTrue }, { kopGotoFrameThis, PszLit("GotoFrameThis"), 1, 0, 0, fTrue }, { kopFilterCmdsGob, PszLit("FilterCmdsGob"), 4, 0, 0, fTrue }, { kopFilterCmdsThis, PszLit("FilterCmdsThis"), 3, 0, 0, fTrue }, { kopDestroyChildrenGob, PszLit("DestroyChildrenGob"), 1, 0, 0, fTrue }, { kopDestroyChildrenThis, PszLit("DestroyChildrenThis"), 0, 0, 0, fTrue }, { kopPlaySoundThis, PszLit("PlaySoundThis"), 7, 0, 0, fFalse }, { kopPlaySoundGob, PszLit("PlaySoundGob"), 8, 0, 0, fFalse }, { kopStopSound, PszLit("StopSound"), 1, 0, 0, fTrue }, { kopStopSoundClass, PszLit("StopSoundClass"), 2, 0, 0, fTrue }, { kopPlayingSound, PszLit("PlayingSound"), 1, 0, 0, fFalse }, { kopPlayingSoundClass, PszLit("PlayingSoundClass"), 2, 0, 0, fFalse }, { kopPauseSound, PszLit("PauseSound"), 1, 0, 0, fTrue }, { kopPauseSoundClass, PszLit("PauseSoundClass"), 2, 0, 0, fTrue }, { kopResumeSound, PszLit("ResumeSound"), 1, 0, 0, fTrue }, { kopResumeSoundClass, PszLit("ResumeSoundClass"), 2, 0, 0, fTrue }, { kopPlayMouseSoundGob, PszLit("PlayMouseSoundGob"), 3, 0, 0, fTrue }, { kopPlayMouseSoundThis, PszLit("PlayMouseSoundThis"), 2, 0, 0, fTrue }, { kopRunScriptCnoGob, PszLit("RunScriptCnoGob"), 2, 1, 0, fFalse }, { kopRunScriptCnoThis, PszLit("RunScriptCnoThis"), 1, 1, 0, fFalse }, { kopWidthGob, PszLit("WidthGob"), 1, 0, 0, fFalse }, { kopWidthThis, PszLit("WidthThis"), 0, 0, 0, fFalse }, { kopHeightGob, PszLit("HeightGob"), 1, 0, 0, fFalse }, { kopHeightThis, PszLit("HeightThis"), 0, 0, 0, fFalse }, { kopSetNoSlipGob, PszLit("SetNoSlipGob"), 2, 0, 0, fTrue }, { kopSetNoSlipThis, PszLit("SetNoSlipThis"), 1, 0, 0, fTrue }, { kopFIsDescendent, PszLit("FIsDescendent"), 2, 0, 0, fFalse }, { kopPrint, PszLit("Print"), 0, 1, 1, fTrue }, { kopPrintStr, PszLit("PrintStr"), 0, 1, 1, fTrue }, { kopSetMasterVolume, PszLit("SetMasterVolume"), 1, 0, 0, fTrue }, { kopGetMasterVolume, PszLit("GetMasterVolume"), 0, 0, 0, fFalse }, { kopStartLongOp, PszLit("StartLongOp"), 0, 0, 0, fTrue }, { kopEndLongOp, PszLit("EndLongOp"), 1, 0, 0, fTrue }, { kopSetToolTipSourceGob, PszLit("SetToolTipSourceGob"), 2, 0, 0, fTrue }, { kopSetToolTipSourceThis, PszLit("SetToolTipSourceThis"), 1, 0, 0, fTrue }, { kopSetAlarmGob, PszLit("SetAlarmGob"), 4, 0, 0, fTrue }, { kopSetAlarmThis, PszLit("SetAlarmThis"), 3, 0, 0, fTrue }, { kopModalHelp, PszLit("ModalHelp"), 2, 0, 0, fFalse }, { kopFlushUserEvents, PszLit("FlushUserEvents"), 1, 0, 0, fTrue }, { kopStreamGob, PszLit("StreamGob"), 2, 0, 0, fTrue }, { kopStreamThis, PszLit("StreamThis"), 1, 0, 0, fTrue }, { kopPrintStat, PszLit("PrintStat"), 0, 1, 1, fTrue }, { kopPrintStrStat, PszLit("PrintStrStat"), 0, 1, 1, fTrue }, { opNil, pvNil, 0, 0, 0, fTrue }, }; /*************************************************************************** Map a string to an operator. ***************************************************************************/ long SCCG::_OpFromStn(PSTN pstn) { AssertThis(0); AssertPo(pstn, 0); long op; if (opNil != (op = _OpFromStnRgszop(pstn, _rgszopSccg))) return op; return SCCG_PAR::_OpFromStn(pstn); } /*************************************************************************** Map an op code to a string. ***************************************************************************/ bool SCCG::_FGetStnFromOp(long op, PSTN pstn) { AssertThis(0); AssertPo(pstn, 0); if (_FGetStnFromOpRgszop(op, pstn, _rgszopSccg)) return fTrue; return SCCG_PAR::_FGetStnFromOp(op, pstn); } /*************************************************************************** Map a string to an operator with argument information (for in-fix compiler). ***************************************************************************/ bool SCCG::_FGetOpFromName(PSTN pstn, long *pop, long *pclwFixed, long *pclwVar, long *pcactMinVar, bool *pfVoid) { if (_FGetArop(pstn, _rgaropSccg, pop, pclwFixed, pclwVar, pcactMinVar, pfVoid)) { return fTrue; } return SCCG_PAR::_FGetOpFromName(pstn, pop, pclwFixed, pclwVar, pcactMinVar, pfVoid); } /*************************************************************************** Return the current version number of the script compiler. ***************************************************************************/ short SCCG::_SwCur(void) { return kswCurSccg; } /*************************************************************************** Return the back version number of the script compiler. Versions back to here can read this script. ***************************************************************************/ short SCCG::_SwBack(void) { return kswBackSccg; } /*************************************************************************** Return the min version number of the script compiler. We can read scripts back to this version. ***************************************************************************/ short SCCG::_SwMin(void) { return kswMinSccg; }