git-svn-id: https://spexeah.com:8443/svn/Asuro@642 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c

This commit is contained in:
kieron
2018-05-01 17:34:47 +00:00
parent 8b7a8182b8
commit 6d8717a7fc
17 changed files with 148 additions and 92 deletions

View File

@ -368,9 +368,10 @@ begin
end;
end;
if idx <> MAX_WINDOWS then begin
for i:=idx to MAX_WINDOWS-1 do begin
for i:=idx to MAX_WINDOWS-2 do begin
WindowManager.Z_Order[i]:= WindowManager.Z_Order[i+1];
end;
WindowManager.Z_Order[MAX_WINDOWS-1]:= MAX_WINDOWS;
end;
end;
@ -580,9 +581,9 @@ var
begin
if WindowManager.Windows[WND] <> nil then begin
RemoveFromZOrder(WND);
WNDCopy:= WindowManager.Windows[WND];
WindowManager.Windows[WND]:= nil;
RemoveFromZOrder(WND);
if WNDCopy^.Hooks.OnClose <> nil then WNDCopy^.Hooks.OnClose();
kfree(void(WNDCopy^.WND_NAME));
kfree(void(WNDCopy));
@ -694,60 +695,14 @@ var
SelectedWindow : uint32;
begin
{ Clear the Console_Matrix }
for y:=0 to 63 do begin
for x:=0 to 159 do begin
Console_Matrix[y][x]:= Default_Char;
end;
end;
if MouseDown then begin
if MovingWindow = 0 then begin
MovingWindow:= WindowTitleMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if MovingWindow <> 0 then begin
WindowMovePos.x:= MouseXToTile(WindowManager.MousePrev.X);
WindowMovePos.y:= MouseYToTile(WindowManager.MousePrev.Y);
end else begin
MovingWindow:= MAX_WINDOWS;
end;
end;
if MovingWindow <> MAX_WINDOWS then begin
if WindowManager.Windows[MovingWindow] <> nil then begin
deltax:= WindowMovePos.x - MouseXToTile(WindowManager.MousePrev.X);
deltay:= WindowMovePos.y - MouseYToTile(WindowManager.MousePrev.Y);
WindowMovePos.x:= MouseXToTile(WindowManager.MousePrev.X);
WindowMovePos.y:= MouseYToTile(WindowManager.MousePrev.Y);
setWindowPosition(MovingWindow, WindowManager.Windows[MovingWindow]^.WND_X - deltax, WindowManager.Windows[MovingWindow]^.WND_Y - deltay);
FocusZOrder(MovingWindow);
end;
end;
end else begin
MovingWindow:= 0;
end;
if UnhandledClick then begin
if UnhandledClickLeft then begin
SelectedWindow:= WindowMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if (SelectedWindow <> 0) and (WindowManager.Windows[SelectedWindow] <> nil) and (WindowManager.Z_Order[0] = SelectedWindow) then begin
//OnClickHandler(Left)
end else begin
if SelectedWindow = 0 then SelectedWindow:= WindowTitleMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if SelectedWindow <> 0 then begin
if WindowManager.Windows[SelectedWindow] <> nil then begin
if WindowManager.Windows[SelectedWindow]^.ShellWND then FocusZOrder(SelectedWindow);
end;
end;
SelectedWindow:= ExitMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if SelectedWindow <> 0 then begin
closeWindow(SelectedWindow);
end;
end;
end;
if not UnhandledClickLeft then begin
SelectedWindow:= WindowMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if (SelectedWindow <> 0) and (WindowManager.Windows[SelectedWindow] <> nil) and (WindowManager.Z_Order[0] = SelectedWindow) then begin
//OnClickHandler(Right)
end;
end;
UnhandledClick:= false;
end;
{ Redraw all of the Windows to the Matrix taking into account Z_Order and borders }
for w:=MAX_WINDOWS-1 downto 0 do begin
if WindowManager.Z_Order[w] = MAX_WINDOWS then continue;
if WindowManager.Windows[WindowManager.Z_Order[w]] <> nil then begin
@ -798,10 +753,88 @@ begin
end;
end;
end;
if WindowManager.Windows[WindowManager.Z_Order[w]]^.Closed then _closeWindow(WindowManager.Z_Order[w]);
end;
end;
{ Handle any Clicks that have happened since last redraw }
if UnhandledClick then begin
if UnhandledClickLeft then begin
SelectedWindow:= WindowMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if (SelectedWindow <> 0) and (WindowManager.Windows[SelectedWindow] <> nil) then begin
//OnClickHandler(Left)
if (WindowManager.Z_Order[0] = SelectedWindow) or (WindowManager.Windows[SelectedWindow]^.ShellWND = false) then begin
if WindowManager.Windows[SelectedWindow]^.Hooks.OnMouseClick <> nil then begin
deltax:= MouseXToTile(WindowManager.MousePrev.X) - WindowManager.Windows[SelectedWindow]^.WND_X;
deltay:= MouseYToTile(WindowManager.MousePrev.Y) - WindowManager.Windows[SelectedWindow]^.WND_Y;
WindowManager.Windows[SelectedWindow]^.Hooks.OnMouseClick(deltax, deltay, true);
end;
end;
if (WindowManager.Z_Order[0] <> SelectedWindow) and (WindowManager.Windows[SelectedWindow]^.ShellWND) then begin
FocusZOrder(SelectedWindow);
end;
end else begin
if SelectedWindow = 0 then SelectedWindow:= WindowTitleMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if SelectedWindow <> 0 then begin
if WindowManager.Windows[SelectedWindow] <> nil then begin
if WindowManager.Windows[SelectedWindow]^.ShellWND then FocusZOrder(SelectedWindow);
end;
end;
SelectedWindow:= ExitMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if SelectedWindow <> 0 then begin
closeWindow(SelectedWindow);
end;
end;
end;
if not UnhandledClickLeft then begin
SelectedWindow:= WindowMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if (SelectedWindow <> 0) and (WindowManager.Windows[SelectedWindow] <> nil) then begin
//OnClickHandler(Right)
if (WindowManager.Z_Order[0] = SelectedWindow) or (WindowManager.Windows[SelectedWindow]^.ShellWND = false) then begin
if WindowManager.Windows[SelectedWindow]^.Hooks.OnMouseClick <> nil then begin
deltax:= MouseXToTile(WindowManager.MousePrev.X) - WindowManager.Windows[SelectedWindow]^.WND_X;
deltay:= MouseYToTile(WindowManager.MousePrev.Y) - WindowManager.Windows[SelectedWindow]^.WND_Y;
WindowManager.Windows[SelectedWindow]^.Hooks.OnMouseClick(deltax, deltay, false);
end;
end;
end;
end;
UnhandledClick:= false;
end;
{ Handle Moving Windows using MouseDown and Delta positions }
if MouseDown then begin
if MovingWindow = 0 then begin
MovingWindow:= WindowTitleMask[MouseYToTile(WindowManager.MousePrev.Y)][MouseXToTile(WindowManager.MousePrev.X)];
if MovingWindow <> 0 then begin
WindowMovePos.x:= MouseXToTile(WindowManager.MousePrev.X);
WindowMovePos.y:= MouseYToTile(WindowManager.MousePrev.Y);
end else begin
MovingWindow:= MAX_WINDOWS;
end;
end;
if MovingWindow <> MAX_WINDOWS then begin
if WindowManager.Windows[MovingWindow] <> nil then begin
deltax:= WindowMovePos.x - MouseXToTile(WindowManager.MousePrev.X);
deltay:= WindowMovePos.y - MouseYToTile(WindowManager.MousePrev.Y);
WindowMovePos.x:= MouseXToTile(WindowManager.MousePrev.X);
WindowMovePos.y:= MouseYToTile(WindowManager.MousePrev.Y);
setWindowPosition(MovingWindow, WindowManager.Windows[MovingWindow]^.WND_X - deltax, WindowManager.Windows[MovingWindow]^.WND_Y - deltay);
FocusZOrder(MovingWindow);
end;
end;
end else begin
MovingWindow:= 0;
end;
{ Console_Matrix -> Actual Screen Buffer }
redrawMatrix;
{ Handle any closed Windows ready for next redraw }
for w:=0 to MAX_WINDOWS-1 do begin
if WindowManager.Windows[w] <> nil then begin
if WindowManager.Windows[w]^.Closed then _closeWindow(w);
end;
end;
end;
procedure initWindows;
@ -996,6 +1029,15 @@ begin
outb($3D5, $20);
end;
procedure keyhook(key_info : TKeyInfo);
begin
if WindowManager.Z_Order[0] <> MAX_WINDOWS then begin
if WindowManager.Windows[WindowManager.Z_Order[0]] <> nil then begin
if WindowManager.Windows[WindowManager.Z_Order[0]]^.Hooks.OnKeyPressed <> nil then WindowManager.Windows[WindowManager.Z_Order[0]]^.Hooks.OnKeyPressed(key_info);
end;
end;
end;
procedure init(); [public, alias: 'console_init'];
var
fb: puint32;
@ -1003,6 +1045,7 @@ var
Begin
fb:= puint32(uint32(multibootinfo^.framebuffer_addr));
kpalloc(uint32(fb));
keyboard.hook(@keyhook);
initWindows;
Console_Properties.Default_Attribute:= console.combinecolors($FFFF, $0000);
console.clear();

View File

@ -3,11 +3,11 @@ unit asuro;
interface
const
VERSION = '1.0.0-632a';
VERSION = '1.0.0-634a';
VERSION_MAJOR = '1';
VERSION_MINOR = '0';
VERSION_SUB = '0';
REVISION = '632';
REVISION = '634';
RELEASE = 'a';
implementation

View File

@ -208,19 +208,18 @@ begin
console.setdefaultattribute(console.combinecolors($17E0, $0000));
console.writestringln('Asuro Booted Correctly!');
console.setdefaultattribute(console.combinecolors($FFFF, $0000));
console.writestringln('');
console.writestringln('Press any key to boot in to Asuro Terminal...');
tracer.pop_trace;
//console.writestringln('');
//console.writestringln('Press any key to boot in to Asuro Terminal...');
//tracer.pop_trace;
{ Init Progs }
shell.init();
memview.init();
console.writehexln(uint32(multibootinfo^.framebuffer_addr));
tracer.push_trace('kmain.KEYHOOK');
keyboard.hook(@temphook);
tracer.pop_trace;
//console.writehexln(uint32(multibootinfo^.framebuffer_addr));
//tracer.push_trace('kmain.KEYHOOK');
//keyboard.hook(@temphook);
//tracer.pop_trace;
tracer.push_trace('kmain.END');

View File

@ -3,7 +3,7 @@ unit shell;
interface
uses
Console, RTC;
Console, RTC, terminal;
procedure init();
@ -49,6 +49,17 @@ begin
writeIntExWND(DateTime.Seconds, Colors, Handle);
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 init();
begin
colors:= console.combinecolors($0000, $FFFF);
@ -58,6 +69,7 @@ begin
//console.clearWNDEx(Handle, colors);
console.setShellWindow(Handle, false);
console.registerEventHandler(Handle, EVENT_DRAW, void(@Draw));
console.registerEventHandler(Handle, EVENT_MOUSE_CLICK, void(@OnMouseClick));
end;
end.

View File

@ -65,7 +65,7 @@ uses
RTC;
var
TERMINAL_HWND : HWND = 1;
TERMINAL_HWND : HWND = 0;
function getTerminalHWND : uint32;
begin
@ -340,23 +340,25 @@ end;
procedure key_event(info : TKeyInfo);
begin
if (info.key_code >= 32) and (info.key_code <= 126) then begin
if bIndex < 1024 then begin
buffer[bIndex]:= info.key_code;
inc(bIndex);
console.writecharWND(char(info.key_code), TERMINAL_HWND);
if TERMINAL_HWND <> 0 then begin
if (info.key_code >= 32) and (info.key_code <= 126) then begin
if bIndex < 1024 then begin
buffer[bIndex]:= info.key_code;
inc(bIndex);
console.writecharWND(char(info.key_code), TERMINAL_HWND);
end;
end;
if info.key_code = 8 then begin //backspace
if bIndex > 0 then begin
console.backspaceWND(TERMINAL_HWND);
dec(bIndex);
buffer[bIndex]:= 0;
end;
end;
end;
if info.key_code = 8 then begin //backspace
if bIndex > 0 then begin
console.backspaceWND(TERMINAL_HWND);
dec(bIndex);
buffer[bIndex]:= 0;
if info.key_code = 13 then begin //return
process_command;
end;
end;
if info.key_code = 13 then begin //return
process_command;
end;
end;
procedure change_dir(Params : PParamList);
@ -366,11 +368,6 @@ begin
end;
end;
procedure ToggleWND1(Params : PParamList);
begin
console.toggleWNDVisible(1);
end;
procedure SendSerial(Params : PParamList);
var
success : boolean;
@ -409,22 +406,27 @@ begin
registerCommand('TEST', @test, 'Command for testing.');
registerCommand('CD', @change_dir, 'Change Directory test.');
registerCommand('PATTERN', @cockwomble, 'Print an animated pattern to the screen.');
registerCommand('TOGGLEWND1', @ToggleWND1, 'Toggle WND 1 Visibility.');
registerCommand('TIME', @printTime, 'Print the current time.');
registerCommand('SERIAL', @SendSerial, 'Send ''helloworld'' through COM1.');
console.writestringln('TERMINAL: INIT END.');
end;
procedure OnClose();
begin
TERMINAL_HWND:= 0;
end;
procedure run;
begin
TERMINAL_HWND:= newWindow(20, 10, 90, 20, 'ASURO TERMINAL');
//newWindow(10, 10, 32, 32, 'MEMVIEW');
keyboard.hook(@key_event);
console.clearWND(TERMINAL_HWND);
console.writestringWND('Asuro#', TERMINAL_HWND);
console.writestringWND(Working_Directory, TERMINAL_HWND);
console.writestringWND('> ', TERMINAL_HWND);
console.setWNDVisible(TERMINAL_HWND, true);
if TERMINAL_HWND = 0 then begin
TERMINAL_HWND:= newWindow(20, 10, 90, 20, 'ASURO TERMINAL');
console.registerEventHandler(TERMINAL_HWND, EVENT_KEY_PRESSED, void(@key_event));
console.registerEventHandler(TERMINAL_HWND, EVENT_CLOSE, void(@OnClose));
console.clearWND(TERMINAL_HWND);
console.writestringWND('Asuro#', TERMINAL_HWND);
console.writestringWND(Working_Directory, TERMINAL_HWND);
console.writestringWND('> ', TERMINAL_HWND);
end;
end;
end.