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

This commit is contained in:
kieron
2018-05-02 17:17:58 +00:00
parent 191f0a8159
commit b42c7641e6
35 changed files with 265 additions and 165 deletions

View File

@ -7,8 +7,8 @@ uses
procedure copyMAC(src : puint8; dst : puint8);
procedure copyIPv4(src : puint8; dst : puint8);
procedure writeMACAddress(mac : puint8);
procedure writeIPv4Address(ip : puint8);
procedure writeMACAddress(mac : puint8; WND : HWND);
procedure writeIPv4Address(ip : puint8; WND : HWND);
function MACEqual(mac1 : puint8; mac2 : puint8) : boolean;
function IPEqual(ip1 : puint8; ip2 : puint8) : boolean;
function newPacketContext : PPacketContext;
@ -48,33 +48,33 @@ begin
pop_trace;
end;
procedure writeIPv4Address(ip : puint8);
procedure writeIPv4Address(ip : puint8; WND : HWND);
var
i : integer;
begin
push_trace('netutils.writeIPv4Address');
console.writeint(ip[0]);
console.writeintWND(ip[0], WND);
for i:=1 to 3 do begin
console.writestring('.');
console.writeint(ip[i]);
console.writestringWND('.', WND);
console.writeintWND(ip[i], WND);
end;
console.writestringln(' ');
console.writestringlnWND(' ', WND);
pop_trace;
end;
procedure writeMACAddress(mac : puint8);
procedure writeMACAddress(mac : puint8; WND : HWND);
var
i : integer;
begin
push_trace('netutils.writeMACAddress');
console.writehexpair(mac[0]);
console.writehexpairWND(mac[0], WND);
for i:=1 to 5 do begin
console.writestring(':');
console.writehexpair(mac[i]);
console.writestringWND(':', WND);
console.writehexpairWND(mac[i], WND);
end;
console.writestringln(' ');
console.writestringlnWND(' ', WND);
pop_trace;
end;

View File

@ -71,18 +71,18 @@ begin
push_trace('ipv4.terminal_command_ifconfig');
if paramCount(params) > 2 then begin
end else begin
writestring(' MAC: ');
writeMACAddress(net.GetMAC);
writestring(' IPv4: ');
writeIPv4Address(@Config.Address[0]);
writestring(' Gateway: ');
writeIPv4Address(@Config.Gateway[0]);
writestring(' Netmask: ');
writeIPv4Address(@Config.Netmask[0]);
writestringWND(' MAC: ', getTerminalHWND);
writeMACAddress(net.GetMAC, getTerminalHWND);
writestringWND(' IPv4: ', getTerminalHWND);
writeIPv4Address(@Config.Address[0], getTerminalHWND);
writestringWND(' Gateway: ', getTerminalHWND);
writeIPv4Address(@Config.Gateway[0], getTerminalHWND);
writestringWND(' Netmask: ', getTerminalHWND);
writeIPv4Address(@Config.Netmask[0], getTerminalHWND);
if Config.UP then
writestringln(' NetUP: true')
writestringlnWND(' NetUP: true', getTerminalHWND)
else
writestringln(' NetUP: false');
writestringlnWND(' NetUP: false', getTerminalHWND);
end;
pop_trace;
end;

View File

@ -438,7 +438,7 @@ end;
procedure console_command_mac(params : PParamList);
begin
push_trace('E1000.console_command_mac');
writeMACAddress(@mac[0]);
writeMACAddress(@mac[0], getTerminalHWND);
pop_trace;
end;
@ -474,6 +474,7 @@ begin
TestPacket[26]:= mac[4];
TestPacket[27]:= mac[5];
sendPacket(void(@TestPacket[0]), 42);
writeStringlnWND('E1000 ARP Testpacket Sent.', getTerminalHWND);
pop_trace;
end;
@ -513,7 +514,7 @@ begin
load:= false;
end else begin
console.output('E1000 Driver', 'MAC Address: ');
writeMACAddress(@mac[0]);
writeMACAddress(@mac[0], 0);
startLink();

View File

@ -255,8 +255,8 @@ begin
fileSystems:= ll_New(sizeof(TFilesystem));
terminal.registerCommand('DISK', @disk_command, 'Disk utility');
terminal.registerCommand('VOLUME', @volume_command, 'Volume utility');
terminal.registerCommand('mkdir', @mkdir_command, 'Volume utility');
terminal.registerCommand('ls', @ls_command, 'Volume utility');
terminal.registerCommandEx('mkdir', @mkdir_command, 'Volume utility', true);
terminal.registerCommandEx('ls', @ls_command, 'Volume utility', true);
pop_trace();
end;

View File

@ -67,15 +67,15 @@ var
implementation
procedure writeBusType(Bus : TBusIdentifier);
procedure writeBusType(Bus : TBusIdentifier; WND : HWND);
begin
case Bus of
biUnknown : console.writestring('Unknown');
biANY : console.writestring('ANY');
bii2c : console.writestring('i2c');
biPCI : console.writestring('PCI');
biPCIe : console.writestring('PCIe');
biUSB : console.writestring('USB');
biUnknown : console.writestringWND('Unknown', WND);
biANY : console.writestringWND('ANY', WND);
bii2c : console.writestringWND('i2c', WND);
biPCI : console.writestringWND('PCI', WND);
biPCIe : console.writestringWND('PCIe', WND);
biUSB : console.writestringWND('USB', WND);
end;
end;
@ -93,29 +93,29 @@ begin
i:= 1;
while Drv <> nil do begin
if Drv^.Loaded then begin
console.writeint(i);
console.writestring(') ');
console.writestring(Drv^.Driver_Name);
console.writestring(' - Bus: ');
writeBusType(Drv^.Identifier^.Bus);
console.writestringln(' ');
console.writestring(' [');
console.writeHex(Drv^.Identifier^.id0);
console.writestring('-');
console.writeHex(Drv^.Identifier^.id1);
console.writestring('-');
console.writeHex(Drv^.Identifier^.id2);
console.writestring('-');
console.writeHex(Drv^.Identifier^.id3);
console.writestring('-');
console.writeHex(Drv^.Identifier^.id4);
console.writeintWND(i, getTerminalHWND);
console.writestringWND(') ', getTerminalHWND);
console.writestringWND(Drv^.Driver_Name, getTerminalHWND);
console.writestringWND(' - Bus: ', getTerminalHWND);
writeBusType(Drv^.Identifier^.Bus, getTerminalHWND);
console.writestringlnWND(' ', getTerminalHWND);
console.writestringWND(' [', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id0, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id1, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id2, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id3, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id4, getTerminalHWND);
ex:= Drv^.Identifier^.ex;
while ex <> nil do begin
console.writestring('-');
console.writeHex(ex^.idN);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(ex^.idN, getTerminalHWND);
ex:= ex^.ex;
end;
console.writestringln(']');
console.writestringlnWND(']', getTerminalHWND);
i:= i + 1;
end;
Drv:= Drv^.Next;
@ -134,30 +134,30 @@ begin
Drv:= Root;
i:= 1;
while Drv <> nil do begin
console.writeint(i);
console.writestring(') ');
console.writestring(Drv^.Driver_Name);
console.writestring(' - Bus: ');
writeBusType(Drv^.Identifier^.Bus);
console.writestring(' - Loaded: ');
if Drv^.Loaded then console.writestringln('true') else console.writestringln('false');
console.writestring(' [');
console.writeHex(Drv^.Identifier^.id0);
console.writestring('-');
console.writeHex(Drv^.Identifier^.id1);
console.writestring('-');
console.writeHex(Drv^.Identifier^.id2);
console.writestring('-');
console.writeHex(Drv^.Identifier^.id3);
console.writestring('-');
console.writeHex(Drv^.Identifier^.id4);
console.writeintWND(i, getTerminalHWND);
console.writestringWND(') ', getTerminalHWND);
console.writestringWND(Drv^.Driver_Name, getTerminalHWND);
console.writestringWND(' - Bus: ', getTerminalHWND);
writeBusType(Drv^.Identifier^.Bus, getTerminalHWND);
console.writestringWND(' - Loaded: ', getTerminalHWND);
if Drv^.Loaded then console.writestringlnWND('true', getTerminalHWND) else console.writestringlnWND('false', getTerminalHWND);
console.writestringWND(' [', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id0, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id1, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id2, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id3, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Drv^.Identifier^.id4, getTerminalHWND);
ex:= Drv^.Identifier^.ex;
while ex <> nil do begin
console.writestring('-');
console.writeHex(ex^.idN);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(ex^.idN, getTerminalHWND);
ex:= ex^.ex;
end;
console.writestringln(']');
console.writestringlnWND(']', getTerminalHWND);
i:= i + 1;
Drv:= Drv^.Next;
end;
@ -175,35 +175,35 @@ begin
Dv:= Dev;
i:= 1;
while Dv <> nil do begin
console.writeint(i);
console.writestring(') ');
console.writestring(Dv^.Device_Name);
console.writestring(' - Bus: ');
writeBusType(Dv^.Identifier^.Bus);
console.writestringln(' ');
console.writestring(' [');
console.writeHex(Dv^.Identifier^.id0);
console.writestring('-');
console.writeHex(Dv^.Identifier^.id1);
console.writestring('-');
console.writeHex(Dv^.Identifier^.id2);
console.writestring('-');
console.writeHex(Dv^.Identifier^.id3);
console.writestring('-');
console.writeHex(Dv^.Identifier^.id4);
console.writeintWND(i, getTerminalHWND);
console.writestringWND(') ', getTerminalHWND);
console.writestringWND(Dv^.Device_Name, getTerminalHWND);
console.writestringWND(' - Bus: ', getTerminalHWND);
writeBusType(Dv^.Identifier^.Bus, getTerminalHWND);
console.writestringlnWND(' ', getTerminalHWND);
console.writestringWND(' [', getTerminalHWND);
console.writeHexWND(Dv^.Identifier^.id0, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Dv^.Identifier^.id1, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Dv^.Identifier^.id2, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Dv^.Identifier^.id3, getTerminalHWND);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(Dv^.Identifier^.id4, getTerminalHWND);
ex:= Dv^.Identifier^.ex;
while ex <> nil do begin
console.writestring('-');
console.writeHex(ex^.idN);
console.writestringWND('-', getTerminalHWND);
console.writeHexWND(ex^.idN, getTerminalHWND);
ex:= ex^.ex;
end;
console.writestringln(']');
console.writestringlnWND(']', getTerminalHWND);
if Dv^.Driver_Loaded then begin
console.writestring(' Driver Loaded: ');
console.writestringWND(' Driver Loaded: ', getTerminalHWND);
if Dv^.Driver <> nil then begin
console.writestringln(Dv^.Driver^.Driver_Name);
console.writestringlnWND(Dv^.Driver^.Driver_Name, getTerminalHWND);
end else begin
console.writestringln('Unknown')
console.writestringlnWND('Unknown', getTerminalHWND)
end;
end;
i:= i + 1;
@ -212,6 +212,35 @@ begin
pop_trace;
end;
procedure terminal_command_dev(Params : PParamList);
var
p1 : pchar;
begin
if paramCount(Params) > 0 then begin
p1:= getParam(0, Params);
if StringEquals(p1, 'drivers') then begin
terminal_command_drivers(Params);
end;
if StringEquals(p1, 'devices') then begin
terminal_command_devices(Params);
end;
if StringEquals(p1, 'driverex') then begin
terminal_command_driversex(Params);
end;
end else begin
writeStringlnWND('Driver Management Interface', getTerminalHWND);
writeStringlnWND(' ', getTerminalHWND);
writeStringlnWND('An interface to the drivermanagement portion of the kernel.', getTerminalHWND);
writeStringlnWND(' ', getTerminalHWND);
writeStringlnWND('Usage: ', getTerminalHWND);
writeStringlnWND(' dev drivers - Print a list of loaded drivers.', getTerminalHWND);
writeStringlnWND(' dev devices - Print a list of registered devices.', getTerminalHWND);
writeStringlnWND(' dev driverex - Print a list of all available drivers.', getTerminalHWND);
writeStringlnWND(' ', getTerminalHWND)
end;
end;
{ Main Functions }
function copy_identifier(DeviceID : PDeviceIdentifier) : PDeviceIdentifier;
@ -288,9 +317,10 @@ end;
procedure init;
begin
push_trace('driver_management.init');
terminal.registerCommand('DRIVERSEX', @terminal_command_driversex, 'List all available drivers.');
terminal.registerCommand('DRIVERS', @terminal_command_drivers, 'List loaded drivers.');
terminal.registerCommand('DEVICES', @terminal_command_devices, 'List devices.');
terminal.registerCommand('DEV', @terminal_command_dev, 'Driver Management Interface.');
//terminal.registerCommand('DRIVERSEX', @terminal_command_driversex, 'List all available drivers.');
//terminal.registerCommand('DRIVERS', @terminal_command_drivers, 'List loaded drivers.');
//terminal.registerCommand('DEVICES', @terminal_command_devices, 'List devices.');
pop_trace;
end;

View File

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

View File

@ -12,23 +12,15 @@ unit kernel;
interface
uses
multiboot,
multiboot, bios_data_area,
util,
gdt,
idt,
isr,
irq,
gdt, idt, isr, irq, tss,
TMR_0_ISR,
console,
bios_data_area,
keyboard,
mouse,
vmemorymanager,
pmemorymanager,
lmemorymanager,
keyboard, mouse,
vmemorymanager, pmemorymanager, lmemorymanager,
tracer,
drivermanagement,
tss,
scheduler,
PCI,
Terminal,
@ -54,24 +46,19 @@ procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall;
implementation
procedure temphook(ignored : TKeyInfo);
begin
Terminal.run;
end;
procedure terminal_command_meminfo(params : PParamList);
begin
push_trace('kernel.terminal_command_meminfo');
console.writestring('Lower Memory = ');
console.writeint(multibootinfo^.mem_lower);
console.writestringln('KB');
console.writestring('Higher Memory = ');
console.writeint(multibootinfo^.mem_upper);
console.writestringln('KB');
console.writestring('Total Memory = ');
console.writeint(((multibootinfo^.mem_upper + 1000) div 1024) + 1);
console.writestringln('MB');
console.writestringWND('Lower Memory = ', getTerminalHWND);
console.writeintWND(multibootinfo^.mem_lower, getTerminalHWND);
console.writestringlnWND('KB', getTerminalHWND);
console.writestringWND('Higher Memory = ', getTerminalHWND);
console.writeintWND(multibootinfo^.mem_upper, getTerminalHWND);
console.writestringlnWND('KB', getTerminalHWND);
console.writestringWND('Total Memory = ', getTerminalHWND);
console.writeintWND(((multibootinfo^.mem_upper + 1000) div 1024) + 1, getTerminalHWND);
console.writestringlnWND('MB', getTerminalHWND);
pop_trace;
end;
@ -83,8 +70,8 @@ begin
if ParamCount(params) > 1 then begin
bsod(getparam(0, params), getparam(1, params));
end else begin
console.writestringln('Invalid number of params.');
console.writestringln('Usage: bsod <error> <info>');
console.writestringlnWND('Invalid number of params.', getTerminalHWND);
console.writestringlnWND('Usage: bsod <error> <info>', getTerminalHWND);
end;
pop_trace;
@ -157,7 +144,8 @@ begin
{ Console Init }
console.init();
//serial.init();
{ Serial Init }
serial.init();
{ Call Tracer }
tracer.init();
@ -209,9 +197,6 @@ 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;
{ Init Progs }
shell.init();
@ -220,11 +205,6 @@ begin
{ Init Splash }
splash.init();
//console.writehexln(uint32(multibootinfo^.framebuffer_addr));
//tracer.push_trace('kmain.KEYHOOK');
//keyboard.hook(@temphook);
//tracer.pop_trace;
tracer.push_trace('kmain.END');
while true do begin

View File

@ -80,7 +80,14 @@ var
begin
tracer.push_trace('memview.run');
if ParamCount(Params) < 1 then begin
writestringlnWND('No memory location specified!', getTerminalHWND);
writestringlnWND('Memview Utility', getTerminalHWND);
writestringlnWND(' ', getTerminalHWND);
writestringlnWND('A tool to display the bytes stored at a memory location for debugging.', getTerminalHWND);
writestringlnWND('UP/DOWN on the keyboard can be used to decrement/increment the view location by 16-bytes.', getTerminalHWND);
writestringlnWND(' ', getTerminalHWND);
writestringlnWND('Usage: ', getTerminalHWND);
writestringlnWND(' memview <dLocation> - Display 176 bytes @ <dLocation>', getTerminalHWND);
writestringlnWND(' ', getTerminalHWND);
end else begin
loc:= GetParam(0, Params);
if StringEquals(loc, 'close') then begin

View File

@ -37,6 +37,7 @@ type
TCommandMethod = procedure(params : PParamList);
TCommand = record
registered : boolean;
hidden : boolean;
command : pchar;
method : TCommandMethod;
description : pchar;
@ -52,6 +53,7 @@ var
procedure run;
procedure init;
procedure registerCommand(command : pchar; method : TCommandMethod; description : pchar);
procedure registerCommandEx(command : pchar; method : TCommandMethod; description : pchar; hide : boolean);
function getParams(buf : TCommandBuffer) : PParamList;
function paramCount(params : PParamList) : uint32;
function getParam(index : uint32; params : PParamList) : pchar;
@ -209,15 +211,27 @@ end;
procedure help(params : PParamList);
var
i, j : uint32;
longestCommand : uint32;
len : uint32;
i : uint32;
begin
longestCommand:= 0;
for i:=0 to 65534 do begin
if (Commands[i].Registered) and not(Commands[i].hidden) then begin
if stringSize(Commands[i].command) > longestCommand then longestCommand:= stringSize(Commands[i].command);
end;
end;
console.writestringlnWND('Registered Commands: ', TERMINAL_HWND);
for i:=0 to 65534 do begin
if Commands[i].Registered then begin
if (Commands[i].Registered) and not(Commands[i].hidden) then begin
console.writestringWND(' ', TERMINAL_HWND);
console.writestringWND(Commands[i].command, TERMINAL_HWND);
console.writestringWND(' - ', TERMINAL_HWND);
len:= longestCommand - StringSize(Commands[i].command);
for j:=0 to len do begin
writeStringWND(' ', TERMINAL_HWND);
end;
console.writestringWND('- ', TERMINAL_HWND);
console.writestringlnWND(Commands[i].description, TERMINAL_HWND);
end;
end;
@ -282,6 +296,21 @@ begin
while Commands[index].registered = true do inc(index);
Commands[index].registered:= true;
Commands[index].Command:= command;
Commands[index].hidden:= false;
Commands[index].method:= method;
Commands[index].description:= description;
end;
procedure registerCommandEx(command : pchar; method : TCommandMethod; description : pchar; hide : boolean);
var
index : uint32;
begin
index:= 0;
while Commands[index].registered = true do inc(index);
Commands[index].registered:= true;
Commands[index].Command:= command;
Commands[index].hidden:= hide;
Commands[index].method:= method;
Commands[index].description:= description;
end;
@ -408,12 +437,8 @@ begin
registerCommand('CLEAR', @clear, 'Clear the Screen.');
registerCommand('HELP', @help, 'Lists all registered commands and their description.');
registerCommand('ECHO', @echo, 'Echo''s text to the terminal.');
registerCommand('TESTPARAMS', @testParams, 'Tests param parsing.');
registerCommand('TEST', @test, 'Command for testing.');
registerCommand('CD', @change_dir, 'Change Directory test.');
registerCommand('PATTERN', @cockwomble, 'Print an animated pattern to the screen.');
registerCommand('TIME', @printTime, 'Print the current time.');
registerCommand('SERIAL', @SendSerial, 'Send ''helloworld'' through COM1.');
registerCommandEx('SERIAL', @SendSerial, 'Send ''helloworld'' through COM1.', true);
registerCommand('REBOOT', @Reboot, 'Reboot the system.');
console.writestringln('TERMINAL: INIT END.');
end;
@ -426,7 +451,7 @@ end;
procedure run;
begin
if TERMINAL_HWND = 0 then begin
TERMINAL_HWND:= newWindow(20, 10, 90, 20, 'ASURO TERMINAL');
TERMINAL_HWND:= newWindow(20, 10, 90, 30, 'ASURO TERMINAL');
console.registerEventHandler(TERMINAL_HWND, EVENT_KEY_PRESSED, void(@key_event));
console.registerEventHandler(TERMINAL_HWND, EVENT_CLOSE, void(@OnClose));
console.clearWND(TERMINAL_HWND);

View File

@ -85,20 +85,20 @@ var
list : PScheduler_Entry;
begin
console.writestringln('ThreadID - Priority - Delta');
console.writestringlnWND('ThreadID - Priority - Delta', getTerminalHWND);
list:= Root_Task;
console.writeint(list^.ThreadID);
console.writestring(' - ');
console.writeint(list^.Priority);
console.writestring(' - ');
console.writeintln(list^.Delta);
console.writeintWND(list^.ThreadID, getTerminalHWND);
console.writestringWND(' - ', getTerminalHWND);
console.writeintWND(list^.Priority, getTerminalHWND);
console.writestringWND(' - ', getTerminalHWND);
console.writeintlnWND(list^.Delta, getTerminalHWND);
list:= PScheduler_Entry(list^.Next);
while list <> Root_Task do begin
console.writeint(list^.ThreadID);
console.writestring(' - ');
console.writeint(list^.Priority);
console.writestring(' - ');
console.writeintln(list^.Delta);
console.writeintWND(list^.ThreadID, getTerminalHWND);
console.writestringWND(' - ', getTerminalHWND);
console.writeintWND(list^.Priority, getTerminalHWND);
console.writestringWND(' - ', getTerminalHWND);
console.writeintlnWND(list^.Delta, getTerminalHWND);
list:= PScheduler_Entry(list^.Next);
end;
end;
@ -115,7 +115,7 @@ begin
Tick:= 0;
Active:= False;
TMR_0_ISR.hook(uint32(@delta));
terminal.registerCommand('TASKS', @terminal_command_tasks, 'List Active Processes.');
//terminal.registerCommand('TASKS', @terminal_command_tasks, 'List Active Processes.');
console.outputln('SCHEDULER','INIT END.');
end;

View File

@ -13,7 +13,7 @@ function get_trace_N(idx : uint32) : pchar;
implementation
uses
console, lmemorymanager, util, strings, serial;
console, lmemorymanager, util, strings, serial, terminal;
const
MAX_TRACE = 40;
@ -22,6 +22,60 @@ var
t_ready : Boolean;
Locked : Boolean;
Traces : Array[0..MAX_TRACE-1] of PChar;
c_lock : Boolean = false;
procedure terminal_command_tracer(Params : PParamList);
var
p1, p2 : PChar;
count : uint32;
i : uint32;
t : PChar;
begin
if ParamCount(Params) > 0 then begin
p1:= getParam(0, Params);
if StringEquals(p1, 'list') then begin
count:= 5;
if ParamCount(Params) > 1 then begin
count:= stringToInt(getParam(1, Params));
if count > MAX_TRACE-1 then count:= MAX_TRACE-1;
end;
for i:=0 to count do begin
writeStringWND('[-', getTerminalHWND);
writeintWND(i, getTerminalHWND);
writeStringWND('] ', getTerminalHWND);
t:= get_trace_N(i);
if t <> nil then writeStringWND(t, getTerminalHWND);
writeStringLnWND(' ', getTerminalHWND);
end;
end;
if StringEquals(p1, 'disable') then begin
if TRACER_ENABLE then begin
t_ready:= false;
writeStringLnWND('Tracer disabled.', getTerminalHWND);
end else begin
writeStringLnWND('Tracer is disabled by the system and it''s status cannot be changed.', getTerminalHWND);
end;
end;
if StringEquals(p1, 'enable') then begin
if TRACER_ENABLE then begin
t_ready:= true;
writeStringLnWND('Tracer enabled.', getTerminalHWND);
end else begin
writeStringLnWND('Tracer is disabled by the system and it''s status cannot be changed.', getTerminalHWND);
end;
end;
end else begin
writeStringLnWND('System Trace Utility', getTerminalHWND);
writeStringLnWND(' ', getTerminalHWND);
writeStringLnWND('Usage: ', getTerminalHWND);
writeStringLnWND(' tracer list <Count> - Print the last <count> traces.', getTerminalHWND);
writeStringLnWND(' tracer disable - Disable Tracer.', getTerminalHWND);
writeStringLnWND(' tracer enable - Enable Tracer.', getTerminalHWND);
writeStringLnWND(' ', getTerminalHWND);
end;
end;
procedure freeze;
begin
@ -36,13 +90,15 @@ begin
if TRACER_ENABLE then begin
if t_ready then begin
if not Locked then begin
Locked:= true;
if Traces[MAX_TRACE-1] <> nil then kfree(void(Traces[MAX_TRACE-1]));
for i:=MAX_TRACE-1 downto 1 do begin
Traces[i]:= Traces[i-1];
if not c_lock then begin
Locked:= true;
if Traces[MAX_TRACE-1] <> nil then kfree(void(Traces[MAX_TRACE-1]));
for i:=MAX_TRACE-1 downto 1 do begin
Traces[i]:= Traces[i-1];
end;
Traces[0]:= StringCopy(t_name);
Locked:= false;
end;
Traces[0]:= StringCopy(t_name);
Locked:= false;
end;
end;
end;
@ -70,6 +126,7 @@ begin
t_ready:= true;
push_trace('kmain');
end;
terminal.registerCommand('TRACER', @terminal_command_tracer, 'System.Tracer Interface.');
end;
function get_trace_count : uint32;