Asuro/src/prog/shell.pas
2018-10-12 20:49:03 +00:00

240 lines
8.6 KiB
ObjectPascal

{
Prog->Shell - Main Desktop UI.
@author(Kieron Morris <kjm@kieronmorris.me>)
}
unit shell;
interface
uses
Console, RTC, terminal, strings, asuro, tracer;
procedure init();
function getTaskbarColorsPtr : puint32;
function getExploreColorsPtr : puint32;
function getDesktopColorsPtr : puint32;
implementation
var
TaskBarHandle : HWND = 0;
DesktopHandle : HWND = 0;
Takbar_Colors : uint32;
Explore_Colors : uint32;
Desktop_Colors : uint32;
function getTaskbarColorsPtr : puint32;
begin
getTaskbarColorsPtr:= @Takbar_Colors;
end;
function getExploreColorsPtr : puint32;
begin
getExploreColorsPtr:= @Explore_Colors;
end;
function getDesktopColorsPtr : puint32;
begin
getDesktopColorsPtr:= @Desktop_Colors;
end;
procedure Draw();
var
DateTime : TDateTime;
i : uint32;
s : pchar;
begin
DateTime:= getDateTime;
console.clearWNDEx(TaskBarHandle, Takbar_Colors);
console.setCursorPosWND(0, 0, TaskBarHandle);
console.writeStringExWND(' TERMINAL ', Explore_Colors, TaskBarHandle);
console.writeCharExWND(#6, Takbar_Colors, TaskBarHandle);
for i:=0 to 9 do begin
s:= getWindowName(i);
if s <> nil then begin
console.writeStringExWND(s, Takbar_Colors, TaskBarHandle);
console.writeCharExWND(' ', Takbar_Colors, TaskBarHandle);
console.writeCharExWND(#6, Takbar_Colors, TaskBarHandle);
end;
end;
console.setCursorPosWND(150, 0, TaskBarHandle);
if DateTime.Hours < 10 then writeIntExWND(0, Takbar_Colors, TaskBarHandle);
writeIntExWND(DateTime.Hours, Takbar_Colors, TaskBarHandle);
writeStringExWND(':', Takbar_Colors, TaskBarHandle);
if DateTime.Minutes < 10 then writeIntExWND(0, Takbar_Colors, TaskBarHandle);
writeIntExWND(DateTime.Minutes, Takbar_Colors, TaskBarHandle);
writeStringExWND(':', Takbar_Colors, TaskBarHandle);
if DateTime.Seconds < 10 then writeIntExWND(0, Takbar_Colors, TaskBarHandle);
writeIntExWND(DateTime.Seconds, Takbar_Colors, TaskBarHandle);
end;
procedure OnMouseClick(x : uint32; y : uint32; left : boolean);
begin
//WriteIntLn(x);
//WriteIntLn(y);
if left then begin
if (y = 0) and (x < 10) then begin
terminal.run;
end;
end;
end;
procedure onBaseDraw();
var
versionSize : uint32;
versionDrawX : uint32;
releaseSize : uint32;
releaseDrawX : uint32;
begin
clearWNDEx(DesktopHandle, Desktop_Colors);
if not(StringEquals(asuro.RELEASE, 'r')) then begin
versionSize:= StringSize(asuro.VERSION) + StringSize('Asuro v');
versionDrawX:= 157 - versionSize;
setCursorPosWND(versionDrawX, 60, DesktopHandle);
writestringExWND('ASURO v', Desktop_Colors, DesktopHandle);
writestringExWND(asuro.VERSION, Desktop_Colors, DesktopHandle);
if StringEquals(asuro.RELEASE, 'rc') then begin
releaseSize:= StringSize('RELEASE CANDIDATE');
releaseDrawX:= 157 - (versionSize div 2) - (releaseSize div 2);
setCursorPosWND(releaseDrawX, 61, DesktopHandle);
writeStringExWND('RELEASE CANDIDATE', Desktop_Colors, DesktopHandle);
end;
if StringEquals(asuro.RELEASE, 'ia') then begin
releaseSize:= StringSize('INTERNAL ALPHA');
releaseDrawX:= 157 - (versionSize div 2) - (releaseSize div 2);
setCursorPosWND(releaseDrawX, 61, DesktopHandle);
writeStringExWND('INTERNAL ALPHA', Desktop_Colors, DesktopHandle);
end;
if StringEquals(asuro.RELEASE, 'a') then begin
releaseSize:= StringSize('ALPHA');
releaseDrawX:= 157 - (versionSize div 2) - (releaseSize div 2);
setCursorPosWND(releaseDrawX, 61, DesktopHandle);
writeStringExWND('ALPHA', Desktop_Colors, DesktopHandle);
end;
if StringEquals(asuro.RELEASE, 'b') then begin
releaseSize:= StringSize('BETA');
releaseDrawX:= 157 - (versionSize div 2) - (releaseSize div 2);
setCursorPosWND(releaseDrawX, 61, DesktopHandle);
writeStringExWND('BETA', Desktop_Colors, DesktopHandle);
end;
end;
end;
procedure Command_Colors(Params : PParamList);
var
Command : pchar;
Fgs, Bgs : pchar;
Fg, Bg : uint32;
exists : boolean;
begin
if ParamCount(Params) >= 3 then begin
Command:= GetParam(0, Params);
Fgs:= GetParam(1, Params);
if (Fgs[0] = 'x') or (Fgs[0] = 'X') then Fg:= HexStringToInt(@Fgs[1]) else Fg:= StringToInt(Fgs);
Bgs:= GetParam(2, Params);
if (Bgs[0] = 'x') or (Bgs[0] = 'X') then Bg:= HexStringToInt(@Bgs[1]) else Bg:= StringToint(Bgs);
exists:= false;
if StringEquals(Command, 'background') then begin
exists:= true;
Desktop_Colors:= combinecolors(Fg, Bg);
end;
if StringEquals(Command, 'taskbar') then begin
exists:= true;
Takbar_Colors:= combinecolors(Fg, Bg);
end;
if StringEquals(Command, 'window') then begin
exists:= true;
setWindowColors(combinecolors(Fg, Bg));
end;
if StringEquals(Command, 'button') then begin
exists:= true;
Explore_Colors:= combinecolors(Fg, Bg);
end;
if exists then begin
console.writestringWND('Component:', getTerminalHWND);
console.writestringWND(Command, getTerminalHWND);
console.writestringWND(' set to FG:', getTerminalHWND);
console.writeHexWND(Fg, getTerminalHWND);
console.writestringWND(' BG: ', getTerminalHWND);
console.writehexlnWND(Bg, getTerminalHWND);
end else begin
console.writestringWND('Component: ', getTerminalHWND);
console.writestringWND(Command, getTerminalHWND);
console.writestringlnWND(' not found.', getTerminalHWND);
end;
end else begin
console.writestringlnWND('Usage (Append "x" to a value to treat as Hex): ', getTerminalHWND);
console.writestringlnWND(' colors background <foreground> <background>', getTerminalHWND);
console.writestringlnWND(' colors taskbar <foreground> <background>', getTerminalHWND);
console.writestringlnWND(' colors window <foreground> <background>', getTerminalHWND);
console.writestringlnWND(' colors button <foreground> <background>', getTerminalHWND);
end;
end;
procedure Command_Background(Params : PParamList);
var
p1 : PChar;
begin
if ParamCount(Params) > 0 then begin
p1:= GetParam(0, Params);
if StringEquals(p1, 'show') then begin
console.setWNDVisible(DesktopHandle, true);
console.writestringlnWND('Background enabled.', getTerminalHWND);
end else if StringEquals(p1, 'hide') then begin
console.setWNDVisible(DesktopHandle, false);
console.writestringlnWND('Background disabled.', getTerminalHWND);
end else begin
console.writestringlnWND('Invalid option.', getTerminalHWND);
end;
end else begin
console.writestringlnWND('Invalid number of parameters.', getTerminalHWND);
end;
end;
procedure init();
begin
tracer.push_trace('shell.init.1');
Takbar_Colors:= console.combinecolors($0000, $FFFF);
tracer.push_trace('shell.init.2');
Explore_Colors:= console.combinecolors($01C3, $07EE);
tracer.push_trace('shell.init.3');
Desktop_Colors:= console.combinecolors($FFFF, $34DB);
tracer.push_trace('shell.init.4');
DesktopHandle:= Console.newWindow(0, 0, 159, 63, 'DESKTOP');
tracer.push_trace('shell.init.5');
TaskBarHandle:= Console.newWindow(0, 63, 159, 1, 'SHELL');
tracer.push_trace('shell.init.6');
console.bordersEnabled(TaskBarHandle, false);
tracer.push_trace('shell.init.7');
console.setShellWindow(TaskBarHandle, false);
tracer.push_trace('shell.init.8');
console.bordersEnabled(DesktopHandle, false);
tracer.push_trace('shell.init.9');
console.setShellWindow(DesktopHandle, false);
tracer.push_trace('shell.init.10');
console.registerEventHandler(TaskBarHandle, EVENT_DRAW, void(@Draw));
tracer.push_trace('shell.init.11');
console.registerEventHandler(TaskBarHandle, EVENT_MOUSE_CLICK, void(@OnMouseClick));
tracer.push_trace('shell.init.12');
console.registerEventHandler(DesktopHandle, EVENT_DRAW, void(@onBaseDraw));
tracer.push_trace('shell.init.13');
terminal.registerCommand('BACKGROUND', @Command_Background, 'Hide/Show background - usage: BACKGROUND <hide/show>');
tracer.push_trace('shell.init.14');
terminal.registerCommand('COLORS', @Command_Colors, 'Set the desktop colors');
end;
end.