ScummVM API documentation
kernel.h
1/* ScummVM - Graphic Adventure Engine
2 *
3 * ScummVM is the legal property of its developers, whose names
4 * are too numerous to list here. Please refer to the COPYRIGHT
5 * file distributed with this source distribution.
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 *
20 */
21
22#ifndef SCI_ENGINE_KERNEL_H
23#define SCI_ENGINE_KERNEL_H
24
25#include "common/scummsys.h"
26#include "common/debug.h"
27#include "common/rect.h"
28#include "common/str-array.h"
29
30#include "sci/engine/selector.h"
31#include "sci/engine/vm_types.h" // for reg_t
32#include "sci/engine/vm.h"
33
34namespace Sci {
35
42struct Node; // from segment.h
43struct List; // from segment.h
44struct SelectorCache; // from selector.h
45struct SciWorkaroundEntry; // from workarounds.h
46
102
103//#define DEBUG_PARSER // enable for parser debugging
104
105// ---- Kernel signatures -----------------------------------------------------
106
107// Kernel functions that have been added for ScummVM script patches to call
108enum {
109 kScummVMSleepId = 0xe0, // sleeps for a delay while remaining responsive
110#ifdef ENABLE_SCI32
111 kScummVMSaveLoadId = 0xe1 // launches ScummVM's save/load dialog
112#endif
113};
114
115// internal kernel signature data
116enum {
117 SIG_TYPE_NULL = 0x01, // may be 0:0 [0]
118 SIG_TYPE_INTEGER = 0x02, // may be 0:* [i], automatically also allows null
119 SIG_TYPE_UNINITIALIZED = 0x04, // may be FFFF:* -> not allowable, only used for comparison
120 SIG_TYPE_OBJECT = 0x08, // may be object [o]
121 SIG_TYPE_REFERENCE = 0x10, // may be reference [r]
122 SIG_TYPE_LIST = 0x20, // may be list [l]
123 SIG_TYPE_NODE = 0x40, // may be node [n]
124 SIG_TYPE_ERROR = 0x80, // happens, when there is a identification error - only used for comparison
125 SIG_IS_INVALID = 0x100, // ptr is invalid [!] -> invalid offset
126 SIG_IS_OPTIONAL = 0x200, // is optional
127 SIG_NEEDS_MORE = 0x400, // needs at least one additional parameter following
128 SIG_MORE_MAY_FOLLOW = 0x800 // may have more parameters of the same type following
129};
130
131// this does not include SIG_TYPE_UNINITIALIZED, because we can not allow uninitialized values anywhere
132#define SIG_MAYBE_ANY (SIG_TYPE_NULL | SIG_TYPE_INTEGER | SIG_TYPE_OBJECT | SIG_TYPE_REFERENCE | SIG_TYPE_LIST | SIG_TYPE_NODE)
133
134// ----------------------------------------------------------------------------
135
136/* Generic description: */
137typedef reg_t KernelFunctionCall(EngineState *s, int argc, reg_t *argv);
138
140 KernelFunctionCall *function;
141 const char *name;
142 uint16 *signature;
143 const SciWorkaroundEntry *workarounds;
144 bool debugLogging;
145 bool debugBreakpoint;
146};
147
149 KernelFunctionCall *function;
150 const char *name;
151 uint16 *signature;
152 const SciWorkaroundEntry *workarounds;
153 KernelSubFunction *subFunctions;
154 uint16 subFunctionCount;
155};
156
157class Kernel {
158public:
163 ~Kernel();
164
165 uint getSelectorNamesSize() const;
166 const Common::String &getSelectorName(uint selector);
167 int findKernelFuncPos(Common::String kernelFuncName);
168
169 uint getKernelNamesSize() const;
170 const Common::String &getKernelName(uint number) const;
171 Common::String getKernelName(uint number, uint subFunction) const;
172
178 int findSelector(const char *selectorName) const;
179
180 // Script dissection/dumping functions
181 void dissectScript(int scriptNumber, Vocabulary *vocab);
182 void dumpScriptObject(const SciSpan<const byte> &script, SciSpan<const byte> object);
183 void dumpScriptClass(const SciSpan<const byte> &script, SciSpan<const byte> clazz);
184
199 bool signatureMatch(const uint16 *sig, int argc, const reg_t *argv);
200
201 // Prints out debug information in case a signature check fails
202 void signatureDebug(Common::String &signatureDetails, const uint16 *sig, int argc, const reg_t *argv);
203
211 uint16 findRegType(reg_t reg);
212
213 /******************** Text functionality ********************/
226 Common::String lookupText(reg_t address, int index);
227
237
238private:
242 void loadSelectorNames();
243
248 Common::StringArray checkStaticSelectorNames();
249
253 void findSpecificSelectors(Common::StringArray &selectorNames);
254
258 void mapSelectors();
259
263 void mapFunctions(GameFeatures *features);
264
265 ResourceManager *_resMan;
266 SegManager *_segMan;
267
268 // Kernel-related lists
269 Common::StringArray _selectorNames;
270 Common::StringArray _kernelNames;
271
272 const Common::String _invalid;
273};
274
275/******************** Kernel functions ********************/
276
277reg_t kStrLen(EngineState *s, int argc, reg_t *argv);
278reg_t kGetFarText(EngineState *s, int argc, reg_t *argv);
279reg_t kReadNumber(EngineState *s, int argc, reg_t *argv);
280reg_t kStrCat(EngineState *s, int argc, reg_t *argv);
281reg_t kStrCmp(EngineState *s, int argc, reg_t *argv);
282reg_t kSetSynonyms(EngineState *s, int argc, reg_t *argv);
283reg_t kLock(EngineState *s, int argc, reg_t *argv);
284reg_t kPalette(EngineState *s, int argc, reg_t *argv);
285reg_t kPalVary(EngineState *s, int argc, reg_t *argv);
286reg_t kAssertPalette(EngineState *s, int argc, reg_t *argv);
287reg_t kPortrait(EngineState *s, int argc, reg_t *argv);
288reg_t kNumCels(EngineState *s, int argc, reg_t *argv);
289reg_t kNumLoops(EngineState *s, int argc, reg_t *argv);
290reg_t kDrawCel(EngineState *s, int argc, reg_t *argv);
291reg_t kCoordPri(EngineState *s, int argc, reg_t *argv);
292reg_t kPriCoord(EngineState *s, int argc, reg_t *argv);
293reg_t kShakeScreen(EngineState *s, int argc, reg_t *argv);
294reg_t kSetCursor(EngineState *s, int argc, reg_t *argv);
295reg_t kMoveCursor(EngineState *s, int argc, reg_t *argv);
296reg_t kPicNotValid(EngineState *s, int argc, reg_t *argv);
297reg_t kOnControl(EngineState *s, int argc, reg_t *argv);
298reg_t kDrawPic(EngineState *s, int argc, reg_t *argv);
299reg_t kGetPort(EngineState *s, int argc, reg_t *argv);
300reg_t kSetPort(EngineState *s, int argc, reg_t *argv);
301reg_t kNewWindow(EngineState *s, int argc, reg_t *argv);
302reg_t kDisposeWindow(EngineState *s, int argc, reg_t *argv);
303reg_t kCelWide(EngineState *s, int argc, reg_t *argv);
304reg_t kCelHigh(EngineState *s, int argc, reg_t *argv);
305reg_t kSetJump(EngineState *s, int argc, reg_t *argv);
306reg_t kDirLoop(EngineState *s, int argc, reg_t *argv);
307reg_t kDoAvoider(EngineState *s, int argc, reg_t *argv);
308reg_t kGetAngle(EngineState *s, int argc, reg_t *argv);
309reg_t kGetDistance(EngineState *s, int argc, reg_t *argv);
310reg_t kRandom(EngineState *s, int argc, reg_t *argv);
311reg_t kAbs(EngineState *s, int argc, reg_t *argv);
312reg_t kSqrt(EngineState *s, int argc, reg_t *argv);
313reg_t kTimesSin(EngineState *s, int argc, reg_t *argv);
314reg_t kTimesCos(EngineState *s, int argc, reg_t *argv);
315reg_t kCosMult(EngineState *s, int argc, reg_t *argv);
316reg_t kSinMult(EngineState *s, int argc, reg_t *argv);
317reg_t kTimesTan(EngineState *s, int argc, reg_t *argv);
318reg_t kTimesCot(EngineState *s, int argc, reg_t *argv);
319reg_t kCosDiv(EngineState *s, int argc, reg_t *argv);
320reg_t kSinDiv(EngineState *s, int argc, reg_t *argv);
321reg_t kValidPath(EngineState *s, int argc, reg_t *argv);
322reg_t kMapKeyToDir(EngineState *s, int argc, reg_t *argv);
323reg_t kGlobalToLocal(EngineState *s, int argc, reg_t *argv);
324reg_t kLocalToGlobal(EngineState *s, int argc, reg_t *argv);
325reg_t kWait(EngineState *s, int argc, reg_t *argv);
326reg_t kRestartGame16(EngineState *s, int argc, reg_t *argv);
327reg_t kDeviceInfo(EngineState *s, int argc, reg_t *argv);
328reg_t kGetEvent(EngineState *s, int argc, reg_t *argv);
329reg_t kCheckFreeSpace(EngineState *s, int argc, reg_t *argv);
330reg_t kFlushResources(EngineState *s, int argc, reg_t *argv);
331reg_t kGetSaveFiles(EngineState *s, int argc, reg_t *argv);
332reg_t kSetDebug(EngineState *s, int argc, reg_t *argv);
333reg_t kCheckSaveGame(EngineState *s, int argc, reg_t *argv);
334reg_t kSaveGame(EngineState *s, int argc, reg_t *argv);
335reg_t kRestoreGame(EngineState *s, int argc, reg_t *argv);
336reg_t kFileIO(EngineState *s, int argc, reg_t *argv);
337reg_t kGetTime(EngineState *s, int argc, reg_t *argv);
338reg_t kHaveMouse(EngineState *s, int argc, reg_t *argv);
339reg_t kJoystick(EngineState *s, int argc, reg_t *argv);
340reg_t kGameIsRestarting(EngineState *s, int argc, reg_t *argv);
341reg_t kGetCWD(EngineState *s, int argc, reg_t *argv);
342reg_t kSort(EngineState *s, int argc, reg_t *argv);
343reg_t kStrEnd(EngineState *s, int argc, reg_t *argv);
344reg_t kMemory(EngineState *s, int argc, reg_t *argv);
345reg_t kAvoidPath(EngineState *s, int argc, reg_t *argv);
346reg_t kParse(EngineState *s, int argc, reg_t *argv);
347reg_t kSaid(EngineState *s, int argc, reg_t *argv);
348reg_t kStrCpy(EngineState *s, int argc, reg_t *argv);
349reg_t kStrAt(EngineState *s, int argc, reg_t *argv);
350reg_t kEditControl(EngineState *s, int argc, reg_t *argv);
351reg_t kDrawControl(EngineState *s, int argc, reg_t *argv);
352reg_t kHiliteControl(EngineState *s, int argc, reg_t *argv);
353reg_t kClone(EngineState *s, int argc, reg_t *argv);
354reg_t kDisposeClone(EngineState *s, int argc, reg_t *argv);
355reg_t kCanBeHere(EngineState *s, int argc, reg_t *argv);
356reg_t kCantBeHere(EngineState *s, int argc, reg_t *argv);
357reg_t kSetNowSeen(EngineState *s, int argc, reg_t *argv);
358reg_t kInitBresen(EngineState *s, int argc, reg_t *argv);
359reg_t kDoBresen(EngineState *s, int argc, reg_t *argv);
360reg_t kBaseSetter(EngineState *s, int argc, reg_t *argv);
361reg_t kAddToPic(EngineState *s, int argc, reg_t *argv);
362reg_t kAnimate(EngineState *s, int argc, reg_t *argv);
363reg_t kDisplay(EngineState *s, int argc, reg_t *argv);
364reg_t kGraph(EngineState *s, int argc, reg_t *argv);
365reg_t kFormat(EngineState *s, int argc, reg_t *argv);
366reg_t kDoSound(EngineState *s, int argc, reg_t *argv);
367reg_t kAddMenu(EngineState *s, int argc, reg_t *argv);
368reg_t kSetMenu(EngineState *s, int argc, reg_t *argv);
369reg_t kGetMenu(EngineState *s, int argc, reg_t *argv);
370reg_t kDrawStatus(EngineState *s, int argc, reg_t *argv);
371reg_t kDrawMenuBar(EngineState *s, int argc, reg_t *argv);
372reg_t kMenuSelect(EngineState *s, int argc, reg_t *argv);
373
374reg_t kLoad(EngineState *s, int argc, reg_t *argv);
375reg_t kUnLoad(EngineState *s, int argc, reg_t *argv);
376reg_t kScriptID(EngineState *s, int argc, reg_t *argv);
377reg_t kDisposeScript(EngineState *s, int argc, reg_t *argv);
378reg_t kIsObject(EngineState *s, int argc, reg_t *argv);
379reg_t kRespondsTo(EngineState *s, int argc, reg_t *argv);
380reg_t kNewList(EngineState *s, int argc, reg_t *argv);
381reg_t kDisposeList(EngineState *s, int argc, reg_t *argv);
382reg_t kNewNode(EngineState *s, int argc, reg_t *argv);
383reg_t kFirstNode(EngineState *s, int argc, reg_t *argv);
384reg_t kLastNode(EngineState *s, int argc, reg_t *argv);
385reg_t kEmptyList(EngineState *s, int argc, reg_t *argv);
386reg_t kNextNode(EngineState *s, int argc, reg_t *argv);
387reg_t kPrevNode(EngineState *s, int argc, reg_t *argv);
388reg_t kNodeValue(EngineState *s, int argc, reg_t *argv);
389reg_t kAddAfter(EngineState *s, int argc, reg_t *argv);
390reg_t kAddToFront(EngineState *s, int argc, reg_t *argv);
391reg_t kAddToEnd(EngineState *s, int argc, reg_t *argv);
392reg_t kFindKey(EngineState *s, int argc, reg_t *argv);
393reg_t kDeleteKey(EngineState *s, int argc, reg_t *argv);
394reg_t kMemoryInfo(EngineState *s, int argc, reg_t *argv);
395reg_t kGetSaveDir(EngineState *s, int argc, reg_t *argv);
396reg_t kTextSize(EngineState *s, int argc, reg_t *argv);
397reg_t kIsItSkip(EngineState *s, int argc, reg_t *argv);
398reg_t kGetMessage(EngineState *s, int argc, reg_t *argv);
399reg_t kMessage(EngineState *s, int argc, reg_t *argv);
400reg_t kDoAudio(EngineState *s, int argc, reg_t *argv);
401reg_t kDoSync(EngineState *s, int argc, reg_t *argv);
402reg_t kMemorySegment(EngineState *s, int argc, reg_t *argv);
403reg_t kIntersections(EngineState *s, int argc, reg_t *argv);
404reg_t kMergePoly(EngineState *s, int argc, reg_t *argv);
405reg_t kResCheck(EngineState *s, int argc, reg_t *argv);
406reg_t kSetQuitStr(EngineState *s, int argc, reg_t *argv);
407reg_t kShowMovie(EngineState *s, int argc, reg_t *argv);
408reg_t kSetVideoMode(EngineState *s, int argc, reg_t *argv);
409reg_t kStrSplit(EngineState *s, int argc, reg_t *argv);
410reg_t kPlatform(EngineState *s, int argc, reg_t *argv);
411reg_t kTextColors(EngineState *s, int argc, reg_t *argv);
412reg_t kTextFonts(EngineState *s, int argc, reg_t *argv);
413reg_t kShow(EngineState *s, int argc, reg_t *argv);
414reg_t kRemapColors(EngineState *s, int argc, reg_t *argv);
415reg_t kRemapColorsKawa(EngineState *s, int argc, reg_t *argv);
416reg_t kDummy(EngineState *s, int argc, reg_t *argv);
417reg_t kEmpty(EngineState *s, int argc, reg_t *argv);
418reg_t kStub(EngineState *s, int argc, reg_t *argv);
419reg_t kStubNull(EngineState *s, int argc, reg_t *argv);
420reg_t kKawaHacks(EngineState *s, int argc, reg_t *argv);
421reg_t kKawaDbugStr(EngineState *s, int argc, reg_t *argv);
422
423#ifdef ENABLE_SCI32
424// SCI2 Kernel Functions
425reg_t kSetCursor32(EngineState *s, int argc, reg_t *argv);
426reg_t kSetNowSeen32(EngineState *s, int argc, reg_t *argv);
427reg_t kBaseSetter32(EngineState *s, int argc, reg_t *argv);
428reg_t kShakeScreen32(EngineState *s, int argc, reg_t *argv);
429reg_t kPlatform32(EngineState *s, int argc, reg_t *argv);
430reg_t kGlobalToLocal32(EngineState *s, int argc, reg_t *argv);
431reg_t kLocalToGlobal32(EngineState *s, int argc, reg_t *argv);
432
433reg_t kDoAudio32(EngineState *s, int argc, reg_t *argv);
434reg_t kDoAudioInit(EngineState *s, int argc, reg_t *argv);
435reg_t kDoAudioWaitForPlay(EngineState *s, int argc, reg_t *argv);
436reg_t kDoAudioPlay(EngineState *s, int argc, reg_t *argv);
437reg_t kDoAudioStop(EngineState *s, int argc, reg_t *argv);
438reg_t kDoAudioPause(EngineState *s, int argc, reg_t *argv);
439reg_t kDoAudioResume(EngineState *s, int argc, reg_t *argv);
440reg_t kDoAudioPosition(EngineState *s, int argc, reg_t *argv);
441reg_t kDoAudioRate(EngineState *s, int argc, reg_t *argv);
442reg_t kDoAudioVolume(EngineState *s, int argc, reg_t *argv);
443reg_t kDoAudioGetCapability(EngineState *s, int argc, reg_t *argv);
444reg_t kDoAudioBitDepth(EngineState *s, int argc, reg_t *argv);
445reg_t kDoAudioDistort(EngineState *s, int argc, reg_t *argv);
446reg_t kDoAudioMixing(EngineState *s, int argc, reg_t *argv);
447reg_t kDoAudioChannels(EngineState *s, int argc, reg_t *argv);
448reg_t kDoAudioPreload(EngineState *s, int argc, reg_t *argv);
449reg_t kDoAudioFade(EngineState *s, int argc, reg_t *argv);
450reg_t kDoAudioHasSignal(EngineState *s, int argc, reg_t *argv);
451reg_t kDoAudioSetLoop(EngineState *s, int argc, reg_t *argv);
452reg_t kDoAudioPan(EngineState *s, int argc, reg_t *argv);
453reg_t kDoAudioPanOff(EngineState *s, int argc, reg_t *argv);
454
455reg_t kRobot(EngineState *s, int argc, reg_t *argv);
456reg_t kRobotOpen(EngineState *s, int argc, reg_t *argv);
457reg_t kRobotShowFrame(EngineState *s, int argc, reg_t *argv);
458reg_t kRobotGetFrameSize(EngineState *s, int argc, reg_t *argv);
459reg_t kRobotPlay(EngineState *s, int argc, reg_t *argv);
460reg_t kRobotGetIsFinished(EngineState *s, int argc, reg_t *argv);
461reg_t kRobotGetIsInitialized(EngineState *s, int argc, reg_t *argv);
462reg_t kRobotClose(EngineState *s, int argc, reg_t *argv);
463reg_t kRobotGetCue(EngineState *s, int argc, reg_t *argv);
464reg_t kRobotPause(EngineState *s, int argc, reg_t *argv);
465reg_t kRobotGetFrameNo(EngineState *s, int argc, reg_t *argv);
466reg_t kRobotSetPriority(EngineState *s, int argc, reg_t *argv);
467
468reg_t kPlayVMD(EngineState *s, int argc, reg_t *argv);
469reg_t kPlayVMDOpen(EngineState *s, int argc, reg_t *argv);
470reg_t kPlayVMDInit(EngineState *s, int argc, reg_t *argv);
471reg_t kPlayVMDClose(EngineState *s, int argc, reg_t *argv);
472reg_t kPlayVMDIgnorePalettes(EngineState *s, int argc, reg_t *argv);
473reg_t kPlayVMDGetStatus(EngineState *s, int argc, reg_t *argv);
474reg_t kPlayVMDPlayUntilEvent(EngineState *s, int argc, reg_t *argv);
475reg_t kPlayVMDShowCursor(EngineState *s, int argc, reg_t *argv);
476reg_t kPlayVMDStartBlob(EngineState *s, int argc, reg_t *argv);
477reg_t kPlayVMDStopBlobs(EngineState *s, int argc, reg_t *argv);
478reg_t kPlayVMDAddBlob(EngineState *s, int argc, reg_t *argv);
479reg_t kPlayVMDDeleteBlob(EngineState *s, int argc, reg_t *argv);
480reg_t kPlayVMDSetBlackoutArea(EngineState *s, int argc, reg_t *argv);
481reg_t kPlayVMDRestrictPalette(EngineState *s, int argc, reg_t *argv);
482reg_t kPlayVMDSetPlane(EngineState *s, int argc, reg_t *argv);
483
484reg_t kShowMovie32(EngineState *s, int argc, reg_t *argv);
485reg_t kShowMovieWin(EngineState *s, int argc, reg_t *argv);
486reg_t kShowMovieWinOpen(EngineState *s, int argc, reg_t *argv);
487reg_t kShowMovieWinInit(EngineState *s, int argc, reg_t *argv);
488reg_t kShowMovieWinPlay(EngineState *s, int argc, reg_t *argv);
489reg_t kShowMovieWinClose(EngineState *s, int argc, reg_t *argv);
490reg_t kShowMovieWinCue(EngineState *s, int argc, reg_t *argv);
491reg_t kShowMovieWinGetDuration(EngineState *s, int argc, reg_t *argv);
492reg_t kShowMovieWinPlayUntilEvent(EngineState *s, int argc, reg_t *argv);
493reg_t kShowMovieWinInitDouble(EngineState *s, int argc, reg_t *argv);
494
495reg_t kSave(EngineState *s, int argc, reg_t *argv);
496reg_t kSaveGame32(EngineState *s, int argc, reg_t *argv);
497reg_t kRestoreGame32(EngineState *s, int argc, reg_t *argv);
498reg_t kGetSaveFiles32(EngineState *s, int argc, reg_t *argv);
499reg_t kCheckSaveGame32(EngineState *s, int argc, reg_t *argv);
500reg_t kMakeSaveCatName(EngineState *s, int argc, reg_t *argv);
501reg_t kMakeSaveFileName(EngineState *s, int argc, reg_t *argv);
502
503reg_t kSetHotRectangles(EngineState *s, int argc, reg_t *argv);
504reg_t kIsHiRes(EngineState *s, int argc, reg_t *argv);
505reg_t kListAt(EngineState *s, int argc, reg_t *argv);
506
507reg_t kArray(EngineState *s, int argc, reg_t *argv);
508reg_t kArrayNew(EngineState *s, int argc, reg_t *argv);
509reg_t kArrayGetSize(EngineState *s, int argc, reg_t *argv);
510reg_t kArrayGetElement(EngineState *s, int argc, reg_t *argv);
511reg_t kArraySetElements(EngineState *s, int argc, reg_t *argv);
512reg_t kArrayFree(EngineState *s, int argc, reg_t *argv);
513reg_t kArrayFill(EngineState *s, int argc, reg_t *argv);
514reg_t kArrayCopy(EngineState *s, int argc, reg_t *argv);
515reg_t kArrayCompare(EngineState *s, int argc, reg_t *argv);
516reg_t kArrayDuplicate(EngineState *s, int argc, reg_t *argv);
517reg_t kArrayGetData(EngineState *s, int argc, reg_t *argv);
518reg_t kArrayByteCopy(EngineState *s, int argc, reg_t *argv);
519
520reg_t kString(EngineState *s, int argc, reg_t *argv);
521reg_t kStringNew(EngineState *s, int argc, reg_t *argv);
522reg_t kStringGetChar(EngineState *s, int argc, reg_t *argv);
523reg_t kStringFree(EngineState *s, int argc, reg_t *argv);
524reg_t kStringCompare(EngineState *s, int argc, reg_t *argv);
525reg_t kStringLength(EngineState *s, int argc, reg_t *argv);
526reg_t kStringFormat(EngineState *s, int argc, reg_t *argv);
527reg_t kStringFormatAt(EngineState *s, int argc, reg_t *argv);
528reg_t kStringToInteger(EngineState *s, int argc, reg_t *argv);
529reg_t kStringTrim(EngineState *s, int argc, reg_t *argv);
530reg_t kStringToUpperCase(EngineState *s, int argc, reg_t *argv);
531reg_t kStringToLowerCase(EngineState *s, int argc, reg_t *argv);
532reg_t kStringReplaceSubstring(EngineState *s, int argc, reg_t *argv);
533reg_t kStringReplaceSubstringEx(EngineState *s, int argc, reg_t *argv);
534
535reg_t kScrollWindowCreate(EngineState *s, int argc, reg_t *argv);
536reg_t kScrollWindowAdd(EngineState *s, int argc, reg_t *argv);
537reg_t kScrollWindowPageUp(EngineState *s, int argc, reg_t *argv);
538reg_t kScrollWindowPageDown(EngineState *s, int argc, reg_t *argv);
539reg_t kScrollWindowUpArrow(EngineState *s, int argc, reg_t *argv);
540reg_t kScrollWindowDownArrow(EngineState *s, int argc, reg_t *argv);
541reg_t kScrollWindowHome(EngineState *s, int argc, reg_t *argv);
542reg_t kScrollWindowEnd(EngineState *s, int argc, reg_t *argv);
543reg_t kScrollWindowWhere(EngineState *s, int argc, reg_t *argv);
544reg_t kScrollWindowGo(EngineState *s, int argc, reg_t *argv);
545reg_t kScrollWindowModify(EngineState *s, int argc, reg_t *argv);
546reg_t kScrollWindowHide(EngineState *s, int argc, reg_t *argv);
547reg_t kScrollWindowShow(EngineState *s, int argc, reg_t *argv);
548reg_t kScrollWindowDestroy(EngineState *s, int argc, reg_t *argv);
549
550reg_t kMulDiv(EngineState *s, int argc, reg_t *argv);
551
552reg_t kRemapColors32(EngineState *s, int argc, reg_t *argv);
553reg_t kRemapColorsOff(EngineState *s, int argc, reg_t *argv);
554reg_t kRemapColorsByRange(EngineState *s, int argc, reg_t *argv);
555reg_t kRemapColorsByPercent(EngineState *s, int argc, reg_t *argv);
556reg_t kRemapColorsToGray(EngineState *s, int argc, reg_t *argv);
557reg_t kRemapColorsToPercentGray(EngineState *s, int argc, reg_t *argv);
558reg_t kRemapColorsBlockRange(EngineState *s, int argc, reg_t *argv);
559
560reg_t kAddScreenItem(EngineState *s, int argc, reg_t *argv);
561reg_t kUpdateScreenItem(EngineState *s, int argc, reg_t *argv);
562reg_t kDeleteScreenItem(EngineState *s, int argc, reg_t *argv);
563
564reg_t kCreateTextBitmap(EngineState *s, int argc, reg_t *argv);
565reg_t kBitmap(EngineState *s, int argc, reg_t *argv);
566reg_t kBitmapCreate(EngineState *s, int argc, reg_t *argv);
567reg_t kBitmapDestroy(EngineState *s, int argc, reg_t *argv);
568reg_t kBitmapDrawView(EngineState *s, int argc, reg_t *argv);
569reg_t kBitmapDrawText(EngineState *s, int argc, reg_t *argv);
570reg_t kBitmapDrawColor(EngineState *s, int argc, reg_t *argv);
571reg_t kBitmapSetOrigin(EngineState *s, int argc, reg_t *argv);
572reg_t kBitmapCreateFromView(EngineState *s, int argc, reg_t *argv);
573reg_t kBitmapGetInfo(EngineState *s, int argc, reg_t *argv);
574
575reg_t kAddPlane(EngineState *s, int argc, reg_t *argv);
576reg_t kDeletePlane(EngineState *s, int argc, reg_t *argv);
577reg_t kUpdatePlane(EngineState *s, int argc, reg_t *argv);
578reg_t kMovePlaneItems(EngineState *s, int argc, reg_t *argv);
579reg_t kSetShowStyle(EngineState *s, int argc, reg_t *argv);
580reg_t kSetPalStyleRange(EngineState *s, int argc, reg_t *argv);
581reg_t kGetHighPlanePri(EngineState *s, int argc, reg_t *argv);
582reg_t kFrameOut(EngineState *s, int argc, reg_t *argv);
583reg_t kCelHigh32(EngineState *s, int argc, reg_t *argv);
584reg_t kCelWide32(EngineState *s, int argc, reg_t *argv);
585
586reg_t kIsOnMe(EngineState *s, int argc, reg_t *argv); // kOnMe for SCI2, kIsOnMe for SCI2.1
587reg_t kInPolygon(EngineState *s, int argc, reg_t *argv);
588reg_t kObjectIntersect(EngineState *s, int argc, reg_t *argv);
589
590reg_t kListIndexOf(EngineState *s, int argc, reg_t *argv);
591reg_t kListEachElementDo(EngineState *s, int argc, reg_t *argv);
592reg_t kListFirstTrue(EngineState *s, int argc, reg_t *argv);
593reg_t kListAllTrue(EngineState *s, int argc, reg_t *argv);
594reg_t kListSort(EngineState *s, int argc, reg_t *argv);
595
596reg_t kEditText(EngineState *s, int argc, reg_t *argv);
597reg_t kInputText(EngineState *s, int argc, reg_t *argv);
598reg_t kSetScroll(EngineState *s, int argc, reg_t *argv);
599
600reg_t kPaletteSetFromResource32(EngineState *s, int argc, reg_t *argv);
601reg_t kPaletteFindColor32(EngineState *s, int argc, reg_t *argv);
602reg_t kPaletteSetFade(EngineState *s, int argc, reg_t *argv);
603reg_t kPaletteSetGamma(EngineState *s, int argc, reg_t *argv);
604
605reg_t kPalCycle(EngineState *s, int argc, reg_t *argv);
606reg_t kPalCycleSetCycle(EngineState *s, int argc, reg_t *argv);
607reg_t kPalCycleDoCycle(EngineState *s, int argc, reg_t *argv);
608reg_t kPalCyclePause(EngineState *s, int argc, reg_t *argv);
609reg_t kPalCycleOn(EngineState *s, int argc, reg_t *argv);
610reg_t kPalCycleOff(EngineState *s, int argc, reg_t *argv);
611
612reg_t kPalVarySetVary(EngineState *s, int argc, reg_t *argv);
613reg_t kPalVarySetPercent(EngineState *s, int argc, reg_t *argv);
614reg_t kPalVaryGetPercent(EngineState *s, int argc, reg_t *argv);
615reg_t kPalVaryOff(EngineState *s, int argc, reg_t *argv);
616reg_t kPalVaryMergeTarget(EngineState *s, int argc, reg_t *argv);
617reg_t kPalVarySetTime(EngineState *s, int argc, reg_t *argv);
618reg_t kPalVarySetTarget(EngineState *s, int argc, reg_t *argv);
619reg_t kPalVarySetStart(EngineState *s, int argc, reg_t *argv);
620reg_t kPalVaryMergeStart(EngineState *s, int argc, reg_t *argv);
621
622// SCI2.1 Kernel Functions
623reg_t kMorphOn(EngineState *s, int argc, reg_t *argv);
624reg_t kText(EngineState *s, int argc, reg_t *argv);
625reg_t kTextSize32(EngineState *s, int argc, reg_t *argv);
626reg_t kTextWidth(EngineState *s, int argc, reg_t *argv);
627reg_t kList(EngineState *s, int argc, reg_t *argv);
628reg_t kCD(EngineState *s, int argc, reg_t *argv);
629reg_t kCheckCD(EngineState *s, int argc, reg_t *argv);
630reg_t kGetSavedCD(EngineState *s, int argc, reg_t *argv);
631reg_t kAddPicAt(EngineState *s, int argc, reg_t *argv);
632reg_t kAddBefore(EngineState *s, int argc, reg_t *argv);
633reg_t kMoveToFront(EngineState *s, int argc, reg_t *argv);
634reg_t kMoveToEnd(EngineState *s, int argc, reg_t *argv);
635reg_t kGetWindowsOption(EngineState *s, int argc, reg_t *argv);
636reg_t kWinHelp(EngineState *s, int argc, reg_t *argv);
637reg_t kMessageBox(EngineState *s, int argc, reg_t *argv);
638reg_t kGetConfig(EngineState *s, int argc, reg_t *argv);
639reg_t kGetSierraProfileInt(EngineState *s, int argc, reg_t *argv);
640reg_t kPrintDebug(EngineState *s, int argc, reg_t *argv);
641
642reg_t kCelInfo(EngineState *s, int argc, reg_t *argv);
643reg_t kCelInfoGetOriginX(EngineState *s, int argc, reg_t *argv);
644reg_t kCelInfoGetOriginY(EngineState *s, int argc, reg_t *argv);
645reg_t kCelInfoGetPixel(EngineState *s, int argc, reg_t *argv);
646reg_t kCelLink(EngineState *s, int argc, reg_t *argv);
647reg_t kCelLinkGetX(EngineState *s, int argc, reg_t *argv);
648reg_t kCelLinkGetY(EngineState *s, int argc, reg_t *argv);
649
650reg_t kSetLanguage(EngineState *s, int argc, reg_t *argv);
651reg_t kScrollWindow(EngineState *s, int argc, reg_t *argv);
652reg_t kPointSize(EngineState *s, int argc, reg_t *argv);
653reg_t kSetFontRes(EngineState *s, int argc, reg_t *argv);
654reg_t kFont(EngineState *s, int argc, reg_t *argv);
655reg_t kAddLine(EngineState *s, int argc, reg_t *argv);
656reg_t kUpdateLine(EngineState *s, int argc, reg_t *argv);
657reg_t kDeleteLine(EngineState *s, int argc, reg_t *argv);
658
659reg_t kWinDLL(EngineState *s, int argc, reg_t *argv);
660
661// SCI 2.1 Middle Mac modified kDoSound
662reg_t kDoSoundMac32(EngineState *s, int argc, reg_t *argv);
663
664// SCI3 Kernel functions
665reg_t kPlayDuck(EngineState *s, int argc, reg_t *argv);
666reg_t kPlayDuckPlay(EngineState *s, int argc, reg_t *argv);
667reg_t kPlayDuckSetFrameOut(EngineState *s, int argc, reg_t *argv);
668reg_t kPlayDuckOpen(EngineState *s, int argc, reg_t *argv);
669reg_t kPlayDuckClose(EngineState *s, int argc, reg_t *argv);
670reg_t kPlayDuckSetVolume(EngineState *s, int argc, reg_t *argv);
671reg_t kWebConnect(EngineState *s, int argc, reg_t *argv);
672reg_t kWinExec(EngineState *s, int argc, reg_t *argv);
673#endif
674
675reg_t kDoSoundInit(EngineState *s, int argc, reg_t *argv);
676reg_t kDoSoundPlay(EngineState *s, int argc, reg_t *argv);
677reg_t kDoSoundDispose(EngineState *s, int argc, reg_t *argv);
678reg_t kDoSoundMute(EngineState *s, int argc, reg_t *argv);
679reg_t kDoSoundStop(EngineState *s, int argc, reg_t *argv);
680reg_t kDoSoundStopAll(EngineState *s, int argc, reg_t *argv);
681reg_t kDoSoundPause(EngineState *s, int argc, reg_t *argv);
682reg_t kDoSoundResumeAfterRestore(EngineState *s, int argc, reg_t *argv);
683reg_t kDoSoundMasterVolume(EngineState *s, int argc, reg_t *argv);
684reg_t kDoSoundUpdate(EngineState *s, int argc, reg_t *argv);
685reg_t kDoSoundFade(EngineState *s, int argc, reg_t *argv);
686reg_t kDoSoundGetPolyphony(EngineState *s, int argc, reg_t *argv);
687reg_t kDoSoundUpdateCues(EngineState *s, int argc, reg_t *argv);
688reg_t kDoSoundSendMidi(EngineState *s, int argc, reg_t *argv);
689reg_t kDoSoundGlobalReverb(EngineState *s, int argc, reg_t *argv);
690reg_t kDoSoundSetHold(EngineState *s, int argc, reg_t *argv);
691reg_t kDoSoundGetAudioCapability(EngineState *s, int argc, reg_t *argv);
692reg_t kDoSoundSuspend(EngineState *s, int argc, reg_t *argv);
693reg_t kDoSoundSetVolume(EngineState *s, int argc, reg_t *argv);
694reg_t kDoSoundSetPriority(EngineState *s, int argc, reg_t *argv);
695reg_t kDoSoundSetLoop(EngineState *s, int argc, reg_t *argv);
696
697reg_t kGraphGetColorCount(EngineState *s, int argc, reg_t *argv);
698reg_t kGraphDrawLine(EngineState *s, int argc, reg_t *argv);
699reg_t kGraphSaveBox(EngineState *s, int argc, reg_t *argv);
700reg_t kGraphRestoreBox(EngineState *s, int argc, reg_t *argv);
701reg_t kGraphFillBoxBackground(EngineState *s, int argc, reg_t *argv);
702reg_t kGraphFillBoxForeground(EngineState *s, int argc, reg_t *argv);
703reg_t kGraphFillBoxAny(EngineState *s, int argc, reg_t *argv);
704reg_t kGraphUpdateBox(EngineState *s, int argc, reg_t *argv);
705reg_t kGraphRedrawBox(EngineState *s, int argc, reg_t *argv);
706reg_t kGraphAdjustPriority(EngineState *s, int argc, reg_t *argv);
707reg_t kGraphSaveUpscaledHiresBox(EngineState *s, int argc, reg_t *argv);
708
709reg_t kPalVaryInit(EngineState *s, int argc, reg_t *argv);
710reg_t kPalVaryReverse(EngineState *s, int argc, reg_t *argv);
711reg_t kPalVaryGetCurrentStep(EngineState *s, int argc, reg_t *argv);
712reg_t kPalVaryDeinit(EngineState *s, int argc, reg_t *argv);
713reg_t kPalVaryChangeTarget(EngineState *s, int argc, reg_t *argv);
714reg_t kPalVaryChangeTicks(EngineState *s, int argc, reg_t *argv);
715reg_t kPalVaryPauseResume(EngineState *s, int argc, reg_t *argv);
716
717reg_t kPaletteSetFromResource(EngineState *s, int argc, reg_t *argv);
718reg_t kPaletteSetFlag(EngineState *s, int argc, reg_t *argv);
719reg_t kPaletteUnsetFlag(EngineState *s, int argc, reg_t *argv);
720reg_t kPaletteSetIntensity(EngineState *s, int argc, reg_t *argv);
721reg_t kPaletteFindColor(EngineState *s, int argc, reg_t *argv);
722reg_t kPaletteAnimate(EngineState *s, int argc, reg_t *argv);
723reg_t kPaletteSave(EngineState *s, int argc, reg_t *argv);
724reg_t kPaletteRestore(EngineState *s, int argc, reg_t *argv);
725
726reg_t kFileIOOpen(EngineState *s, int argc, reg_t *argv);
727reg_t kFileIOClose(EngineState *s, int argc, reg_t *argv);
728reg_t kFileIOReadRaw(EngineState *s, int argc, reg_t *argv);
729reg_t kFileIOWriteRaw(EngineState *s, int argc, reg_t *argv);
730reg_t kFileIOUnlink(EngineState *s, int argc, reg_t *argv);
731reg_t kFileIOReadString(EngineState *s, int argc, reg_t *argv);
732reg_t kFileIOWriteString(EngineState *s, int argc, reg_t *argv);
733reg_t kFileIOSeek(EngineState *s, int argc, reg_t *argv);
734reg_t kFileIOFindFirst(EngineState *s, int argc, reg_t *argv);
735reg_t kFileIOFindNext(EngineState *s, int argc, reg_t *argv);
736reg_t kFileIOExists(EngineState *s, int argc, reg_t *argv);
737reg_t kFileIORename(EngineState *s, int argc, reg_t *argv);
738reg_t kFileIOCopy(EngineState *s, int argc, reg_t *argv);
739#ifdef ENABLE_SCI32
740reg_t kFileIOReadByte(EngineState *s, int argc, reg_t *argv);
741reg_t kFileIOWriteByte(EngineState *s, int argc, reg_t *argv);
742reg_t kFileIOReadWord(EngineState *s, int argc, reg_t *argv);
743reg_t kFileIOWriteWord(EngineState *s, int argc, reg_t *argv);
744reg_t kFileIOGetCWD(EngineState *s, int argc, reg_t *argv);
745reg_t kFileIOIsValidDirectory(EngineState *s, int argc, reg_t *argv);
746#endif
747
748// Custom ScummVM kernel functions
749reg_t kScummVMSleep(EngineState *s, int argc, reg_t *argv);
750#ifdef ENABLE_SCI32
751reg_t kScummVMSaveLoad(EngineState *s, int argc, reg_t *argv);
752#endif
753
756} // End of namespace Sci
757
758#endif // SCI_ENGINE_KERNEL_H
Definition: str.h:59
Definition: features.h:56
Definition: kernel.h:157
KernelFunctionArray _kernelFuncs
Definition: kernel.h:187
Common::String lookupText(reg_t address, int index)
uint16 findRegType(reg_t reg)
Kernel(ResourceManager *resMan, SegManager *segMan)
bool signatureMatch(const uint16 *sig, int argc, const reg_t *argv)
SelectorCache _selectorCache
Definition: kernel.h:185
int findSelector(const char *selectorName) const
void loadKernelNames(GameFeatures *features)
Definition: resource.h:327
Definition: util.h:251
Definition: seg_manager.h:48
Definition: vocabulary.h:188
Definition: console.h:28
Definition: lobject.h:332
Definition: state.h:100
Definition: kernel.h:148
Definition: kernel.h:139
Definition: workarounds.h:49
Definition: selector.h:33
Definition: vm_types.h:39