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

BIN
Asuro.iso

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -368,9 +368,10 @@ begin
end; end;
end; end;
if idx <> MAX_WINDOWS then begin 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]; WindowManager.Z_Order[i]:= WindowManager.Z_Order[i+1];
end; end;
WindowManager.Z_Order[MAX_WINDOWS-1]:= MAX_WINDOWS;
end; end;
end; end;
@ -580,9 +581,9 @@ var
begin begin
if WindowManager.Windows[WND] <> nil then begin if WindowManager.Windows[WND] <> nil then begin
RemoveFromZOrder(WND);
WNDCopy:= WindowManager.Windows[WND]; WNDCopy:= WindowManager.Windows[WND];
WindowManager.Windows[WND]:= nil; WindowManager.Windows[WND]:= nil;
RemoveFromZOrder(WND);
if WNDCopy^.Hooks.OnClose <> nil then WNDCopy^.Hooks.OnClose(); if WNDCopy^.Hooks.OnClose <> nil then WNDCopy^.Hooks.OnClose();
kfree(void(WNDCopy^.WND_NAME)); kfree(void(WNDCopy^.WND_NAME));
kfree(void(WNDCopy)); kfree(void(WNDCopy));
@ -694,60 +695,14 @@ var
SelectedWindow : uint32; SelectedWindow : uint32;
begin begin
{ Clear the Console_Matrix }
for y:=0 to 63 do begin for y:=0 to 63 do begin
for x:=0 to 159 do begin for x:=0 to 159 do begin
Console_Matrix[y][x]:= Default_Char; Console_Matrix[y][x]:= Default_Char;
end; end;
end; end;
if MouseDown then begin
if MovingWindow = 0 then begin { Redraw all of the Windows to the Matrix taking into account Z_Order and borders }
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;
for w:=MAX_WINDOWS-1 downto 0 do begin for w:=MAX_WINDOWS-1 downto 0 do begin
if WindowManager.Z_Order[w] = MAX_WINDOWS then continue; if WindowManager.Z_Order[w] = MAX_WINDOWS then continue;
if WindowManager.Windows[WindowManager.Z_Order[w]] <> nil then begin if WindowManager.Windows[WindowManager.Z_Order[w]] <> nil then begin
@ -798,10 +753,88 @@ begin
end; end;
end; end;
end; end;
if WindowManager.Windows[WindowManager.Z_Order[w]]^.Closed then _closeWindow(WindowManager.Z_Order[w]);
end; end;
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; 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; end;
procedure initWindows; procedure initWindows;
@ -996,6 +1029,15 @@ begin
outb($3D5, $20); outb($3D5, $20);
end; 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']; procedure init(); [public, alias: 'console_init'];
var var
fb: puint32; fb: puint32;
@ -1003,6 +1045,7 @@ var
Begin Begin
fb:= puint32(uint32(multibootinfo^.framebuffer_addr)); fb:= puint32(uint32(multibootinfo^.framebuffer_addr));
kpalloc(uint32(fb)); kpalloc(uint32(fb));
keyboard.hook(@keyhook);
initWindows; initWindows;
Console_Properties.Default_Attribute:= console.combinecolors($FFFF, $0000); Console_Properties.Default_Attribute:= console.combinecolors($FFFF, $0000);
console.clear(); console.clear();

View File

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

View File

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

View File

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

View File

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