git-svn-id: https://spexeah.com:8443/svn/Asuro@762 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c
This commit is contained in:
parent
ec0feedeec
commit
f0e013db2e
184
src/prog/edit.pas
Normal file
184
src/prog/edit.pas
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
{
|
||||||
|
Prog->edit - Simple text editor
|
||||||
|
|
||||||
|
@author(Aaron Hance <ah@aaronhance.me>)
|
||||||
|
}
|
||||||
|
unit edit;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
console, terminal, keyboard, shell, strings, tracer, storagemanagement, lmemorymanager, util;
|
||||||
|
|
||||||
|
procedure init();
|
||||||
|
|
||||||
|
implementation
|
||||||
|
const
|
||||||
|
width = 60;
|
||||||
|
height = 20;
|
||||||
|
var
|
||||||
|
Handle : HWND = 0;
|
||||||
|
Colors : uint32;
|
||||||
|
ColorsSel : uint32;
|
||||||
|
position : uint32; //////////////////////////////
|
||||||
|
fileName : pchar;
|
||||||
|
extension : pchar = 'txt';
|
||||||
|
//chars : array[0..(height * width)] of char;
|
||||||
|
chars : pchar;
|
||||||
|
mousePos : uint32 =0;
|
||||||
|
|
||||||
|
|
||||||
|
procedure OnClose();
|
||||||
|
begin
|
||||||
|
Handle:= 0;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure Draw();
|
||||||
|
var
|
||||||
|
y : uint32;
|
||||||
|
pos : uint32;
|
||||||
|
begin
|
||||||
|
push_trace('edit.draw');
|
||||||
|
if Handle <> 0 then begin
|
||||||
|
clearWNDEx(Handle, Colors);
|
||||||
|
for y:=0 to (width * height)-1 do begin
|
||||||
|
pos := y;
|
||||||
|
if y = mousePos then begin
|
||||||
|
writecharexWND(chars[pos], ColorsSel, Handle);
|
||||||
|
end else begin
|
||||||
|
writecharexWND(chars[pos], Colors, Handle);
|
||||||
|
end;
|
||||||
|
if (chars[pos] = char(0)) then break; // need to not do this at the end maybe...
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure shiftBuffer(start : uint32);
|
||||||
|
var
|
||||||
|
buffer : pchar;
|
||||||
|
begin
|
||||||
|
buffer := stringnew(stringSize(chars) + 1);
|
||||||
|
memset(uint32(buffer), 0, stringSize(chars) + 1);
|
||||||
|
|
||||||
|
memcpy(uint32(chars), uint32(@buffer[1]), stringSize(chars));
|
||||||
|
memcpy(uint32(chars), uint32(buffer), start);
|
||||||
|
|
||||||
|
kfree(puint32(chars));
|
||||||
|
chars:= buffer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure OnKeyPressed(info : TKeyInfo);
|
||||||
|
var
|
||||||
|
i : uint32;
|
||||||
|
pos : uint32;
|
||||||
|
begin
|
||||||
|
//writeintlnWND(info.key_code, getTerminalHWND());
|
||||||
|
if (info.CTRL_DOWN and (info.key_code = 115)) then begin
|
||||||
|
//SAVE FILE
|
||||||
|
storagemanagement.writeNewFile(fileName, extension, puint32(chars), stringSize(chars));
|
||||||
|
writestringlnWND('saved', getTerminalHWND());
|
||||||
|
//writeintlnWND(stringSize(chars), getTerminalHWND());
|
||||||
|
end else begin
|
||||||
|
//delete key
|
||||||
|
if (info.key_code = 8) then begin
|
||||||
|
//console.backspaceWND(Handle);
|
||||||
|
if mousePos > 0 then mousePos -=1;
|
||||||
|
chars[mousePos] := char(32);
|
||||||
|
end else if info.key_code = 20 then begin
|
||||||
|
mousePos +=1;
|
||||||
|
end else if info.key_code = 19 then begin
|
||||||
|
mousePos -=1;
|
||||||
|
end else if info.key_code = 18 then begin
|
||||||
|
if mousePos < width * height-1 then begin
|
||||||
|
mousePos += width;
|
||||||
|
end;
|
||||||
|
end else if info.key_code = 16 then begin
|
||||||
|
if mousePos > width+1 then begin
|
||||||
|
mousePos -= width;
|
||||||
|
end;
|
||||||
|
end else begin
|
||||||
|
if mousePos < stringSize(chars) then begin
|
||||||
|
shiftBuffer(mousePos + 1);
|
||||||
|
end;
|
||||||
|
chars[mousePos] := char(info.key_code);
|
||||||
|
//writecharexWND(char(info.key_code), Colors, Handle);
|
||||||
|
mousePos +=1;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure run(Params : PParamList);
|
||||||
|
var
|
||||||
|
buffer : puint32;
|
||||||
|
bytes : puint32;
|
||||||
|
error : puint32;
|
||||||
|
test : pchar;
|
||||||
|
begin
|
||||||
|
tracer.push_trace('edit.run');
|
||||||
|
|
||||||
|
fileName := stringCopy(getParam(0, Params));
|
||||||
|
|
||||||
|
bytes := puint32(kalloc(4));
|
||||||
|
bytes^ := 0;
|
||||||
|
buffer := kalloc(4);
|
||||||
|
error := storagemanagement.readfile(fileName, extension, buffer, bytes);
|
||||||
|
|
||||||
|
if error^ = 1 then begin
|
||||||
|
//file doesn't exists, make new
|
||||||
|
writestringlnWND('File does not exist, will save as a new file.', getTerminalHWND());
|
||||||
|
console.redrawWindows();
|
||||||
|
chars := pchar(kalloc(sizeof(char) * (width * height) * 10));
|
||||||
|
memset(uint32(puint32(chars)), 0, sizeof(char) * (width * height));
|
||||||
|
end else begin
|
||||||
|
//load file from buffer
|
||||||
|
writestringlnWND('File exsists, loading', getTerminalHWND());
|
||||||
|
console.redrawWindows();
|
||||||
|
//chars := pchar(buffer);
|
||||||
|
chars := pchar(kalloc(bytes^));
|
||||||
|
memset(uint32(chars), 0, bytes^);
|
||||||
|
|
||||||
|
|
||||||
|
if uint32(puint32(chars)) = 0 then begin
|
||||||
|
console.writestringlnWND('unable to allocate memory for file.', getTerminalHWND());
|
||||||
|
console.writestringWND('attempted to allocate: ', getTerminalHWND());
|
||||||
|
console.writeintWND(bytes^, getTerminalHWND());
|
||||||
|
redrawWindows();
|
||||||
|
|
||||||
|
exit;
|
||||||
|
end;
|
||||||
|
|
||||||
|
//memset(uint32(chars), 0, bytes^ * 2);
|
||||||
|
//memcpy(uint32(buffer), uint32(chars), uint32(bytes^));
|
||||||
|
memcpy(uint32(buffer^), uint32(puint32(chars)), uint32(bytes^));
|
||||||
|
end;
|
||||||
|
|
||||||
|
// kfree(buffer);
|
||||||
|
// kfree(bytes);
|
||||||
|
// kfree(error);
|
||||||
|
|
||||||
|
if Handle = 0 then begin
|
||||||
|
Handle:= newWindow(20, 40, width, height, 'Edit');
|
||||||
|
registerEventHandler(Handle, EVENT_DRAW, void(@Draw));
|
||||||
|
registerEventHandler(Handle, EVENT_CLOSE, void(@OnClose));
|
||||||
|
registerEventHandler(Handle, EVENT_KEY_PRESSED, void(@OnKeyPressed));
|
||||||
|
writestringlnWND('Edit Started.', getTerminalHWND);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
clearWNDEx(Handle, Colors);
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure init();
|
||||||
|
begin
|
||||||
|
tracer.push_trace('edit.init');
|
||||||
|
Colors:= combineColors($0000, $FFFF);
|
||||||
|
ColorsSel:= combineColors($FFFF, $0000);
|
||||||
|
terminal.registerCommand('EDIT', @Run, 'Edit those jucy text files');
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
Loading…
x
Reference in New Issue
Block a user