diff --git a/mdl/m_sdlcrt.pas b/mdl/m_sdlcrt.pas new file mode 100644 index 0000000..19d4e5a --- /dev/null +++ b/mdl/m_sdlcrt.pas @@ -0,0 +1,72 @@ +Unit m_SDLCRT; + +{$I M_OPS.PAS} + +(* +Goals: + +- Cross platform input and output capable of 80x25, 80x50, 132x50 +- Input events remapped as compatible with current code base +- Full screen mode in Windows, OSX, and Linux if possible +- Direct access (read only) to a virtual screen buffer something like: + TSDLScreenBuffer = Record + Line : Array[1..132] of Record + Ch : Char; + Attr : Byte; + End; +- Current X location +- Current Y location +- Current Text Attribute +- Window function to set scroll points +- GotoXY +- Clear Screen (window based) +- Clear to end of line (with current attribute) +- Set Window title +- Hide screen +- Show Buffer +- KeyPressed : Boolean +- KeyWait (Timeout in seconds or MS) : Boolean +- ReadKey (from buffer, or waits infinity if nothing) +- Ability to wait for input event based on handle for WaitForMultipleObj ? +- Ability to play a .WAV/MP3/MIDI file or at least some sound? +- How to handle shutdown and resize window events? Lock resize? +- How to handle minimize? Minimize to tray in Windows? +*) + +Interface + +Uses + SDL; + +Const + AppWindowX = 640; + AppWindowY = 480; + +Type + TSDLScreenMode = (mode_80x25, mode_80x50, mode_132x50); + + TSDLConsole = Class + InputEvent : pSDL_EVENT; + Screen : pSDL_SURFACE; + + Constructor Create; + Destructor Destroy; + End; + +Implementation + +Constructor TSDLConsole.Create; +Begin + Inherited Create; + + SDL_INIT(SDL_INIT_VIDEO OR SDL_INIT_EVENTTHREAD); +End; + +Destructor TSDLConsole.Destroy; +Begin + SDL_QUIT; + + Inherited Destroy; +End; + +End.