[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH 3/4] setup: Konfigurationsprogramm
+ setup: Ein tolles Konfigurationsprogramm, das im Moment so gut wie
gar nichts kann
Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
src/modules/pas/setup/Makefile.all | 4 +
src/modules/pas/setup/menu.pas | 96 ++++++++++++++++++++
src/modules/pas/setup/setup.pas | 52 +++++++++++
src/modules/pas/setup/setup_keyboard.pas | 146 ++++++++++++++++++++++++++++++
src/modules/pas/setup/setup_lpt.pas | 136 ++++++++++++++++++++++++++++
5 files changed, 434 insertions(+), 0 deletions(-)
create mode 100644 src/modules/pas/setup/Makefile.all
create mode 100644 src/modules/pas/setup/menu.pas
create mode 100644 src/modules/pas/setup/setup.pas
create mode 100644 src/modules/pas/setup/setup_keyboard.pas
create mode 100644 src/modules/pas/setup/setup_lpt.pas
diff --git a/src/modules/pas/setup/Makefile.all b/src/modules/pas/setup/Makefile.all
new file mode 100644
index 0000000..febfb1e
--- /dev/null
+++ b/src/modules/pas/setup/Makefile.all
@@ -0,0 +1,4 @@
+shopt -s extglob
+echo "LD $1/setup"
+"$COMPILER_PREFIX"ld -m elf_i386 -osetup -Ttext=0x40000000 *.o --start-group ../lib/units/*.a $2 --end-group `gcc -print-libgcc-file-name`
+strip -s setup -o $1/apps/setup
diff --git a/src/modules/pas/setup/menu.pas b/src/modules/pas/setup/menu.pas
new file mode 100644
index 0000000..89b537d
--- /dev/null
+++ b/src/modules/pas/setup/menu.pas
@@ -0,0 +1,96 @@
+unit menu;
+
+interface
+uses tui;
+
+procedure MainMenu(screen: TUIObject; frame: TUIFrame);
+function StartModule(module: String; back: boolean): boolean;
+
+implementation
+
+uses tyndur, crt, setup_keyboard, setup_lpt;
+
+function StartModule(module: String; back: boolean): boolean;
+begin
+ if module = 'keyboard' then begin
+ SetupKeyboard(back);
+ end else if module = 'lpt' then begin
+ SetupLPT(back);
+ end else begin
+ exit(false);
+ end;
+
+ exit(true);
+end;
+
+procedure MainMenu(screen: TUIObject; frame: TUIFrame);
+var
+ mainw: TUIRowContainer;
+
+ a: TUIMenu;
+ b: TUILabel;
+
+ buttons: TUIColContainer;
+ btnOk: TUIButton;
+ btnCancel: TUIButton;
+begin
+ mainw := TUIRowContainer.create(2);
+ mainw.spacer := true;
+ frame.obj := mainw;
+
+ a := TUIMenu.create(4);
+ with a do begin
+ bgcolor := 0;
+ color := 14;
+
+ AddItem('Tastaturbelegung', nil);
+ AddItem('lpt-Quellen', nil);
+ AddItem('', nil);
+ AddItem('Beenden', nil);
+ end;
+ mainw[1] := a;
+ mainw.fixed[1] := 4;
+
+ b := TUILabel.create;
+ b.content := Utf8Decode('Bitte wähle aus dem Menü das gewünschte Konfigurationsprogramm aus.');
+ mainw[0] := b;
+ mainw.prop[0] := 30;
+
+ a.selected := 0;
+ repeat
+ // Zeichnen
+ screen.align(80, 24);
+ screen.draw(1, 1);
+
+ case readkey of
+ #27:
+ case ReadEscapeSequence of
+ SK_UP:
+ begin
+ a.selected := (a.selected + 4 - 1) mod 4;
+ if a.selected = 2 then begin
+ a.selected := 1;
+ end;
+ end;
+ SK_DOWN:
+ begin
+ a.selected := (a.selected + 1) mod 4;
+ if a.selected = 2 then begin
+ a.selected := 3;
+ end;
+ end;
+ end;
+ #10:
+ case a.selected of
+ 0: StartModule('keyboard', true);
+ 1: StartModule('lpt', true);
+ 3: break;
+ end;
+ end;
+ until false;
+
+ frame.obj := nil;
+ mainw.free;
+end;
+
+end.
diff --git a/src/modules/pas/setup/setup.pas b/src/modules/pas/setup/setup.pas
new file mode 100644
index 0000000..e50a90a
--- /dev/null
+++ b/src/modules/pas/setup/setup.pas
@@ -0,0 +1,52 @@
+program setup;
+{$MODE ObjFPC}
+{$H+}
+
+uses
+ crt, tui,
+ menu;
+
+var
+ screen: TUIRowContainer;
+ title: TUILabel;
+ f: TUIFrame;
+ s: string;
+ show_menu: boolean;
+ i: integer;
+begin
+ s := '';
+ WriteLn(HexStr(dword(@s), 8));
+
+ screen := TUIRowContainer.create(2);
+ screen.bgcolor := 2;
+ screen.color := 1;
+
+ title := TUILabel.create;
+ title.content := 'tyndur-Konfiguration';
+ title.bgcolor := 1;
+ title.color := 15;
+ screen[0] := title;
+ screen.fixed[0] := 1;
+
+ f := TUIFrame.create(nil, 60, 12);
+ screen[1] := f;
+ screen.prop[1] := 1;
+
+ show_menu := true;
+ for i := 1 to system.ParamCount do begin
+ if not StartModule(system.ParamStr(i), false) then begin
+ show_menu := false;
+ break;
+ end;
+ end;
+
+ if show_menu then begin
+ MainMenu(screen, f);
+ end;
+
+ screen.free;
+
+ TextBackground(0);
+ TextColor(7);
+ ClrScr;
+end.
diff --git a/src/modules/pas/setup/setup_keyboard.pas b/src/modules/pas/setup/setup_keyboard.pas
new file mode 100644
index 0000000..879ca88
--- /dev/null
+++ b/src/modules/pas/setup/setup_keyboard.pas
@@ -0,0 +1,146 @@
+unit setup_keyboard;
+
+interface
+
+procedure SetupKeyboard(back: boolean);
+
+implementation
+
+uses sysutils, tyndur, crt, tui;
+
+procedure SetLayout(layout: String);
+var
+ f: File of byte;
+ buf: Array [1..2048] of byte;
+ path: String;
+
+ cfg: text;
+begin
+ path := 'file:/system/keymaps/' + layout + '.kbd';
+
+ if not FileExists(path) then begin
+ exit;
+ end;
+
+ Assign(f, path);
+ Reset(f, 2048);
+ BlockRead(f, buf, 1);
+ Close(f);
+
+ Assign(f, 'vterm:/keymap');
+ Rewrite(f, 2048);
+ BlockWrite(f, buf, 1);
+ Close(f);
+end;
+
+procedure SetupKeyboard(back: boolean);
+var
+ mainw: TUIRowContainer;
+
+ a: TUIMenu;
+ b: TUILabel;
+
+ buttons: TUIColContainer;
+ btnOk: TUIButton;
+ btnCancel: TUIButton;
+ screen: TUIRowContainer;
+ title: TUILabel;
+ f: TUIFrame;
+ s: string;
+ num_items: integer;
+begin
+ s := '';
+ WriteLn(HexStr(dword(@s), 8));
+
+ screen := TUIRowContainer.create(2);
+ screen.bgcolor := 2;
+ screen.color := 1;
+
+ title := TUILabel.create;
+ title.content := 'tyndur-Konfiguration: Tastaturbelegung';
+ title.bgcolor := 1;
+ title.color := 15;
+ screen[0] := title;
+ screen.fixed[0] := 1;
+
+ f := TUIFrame.create(nil, 60, 12);
+ screen[1] := f;
+ screen.prop[1] := 1;
+
+ mainw := TUIRowContainer.create(2);
+ mainw.spacer := true;
+ f.obj := mainw;
+
+ if back then begin
+ num_items := 4;
+ end else begin
+ num_items := 2;
+ end;
+
+ a := TUIMenu.create(num_items);
+ with a do begin
+ bgcolor := 0;
+ color := 14;
+
+ AddItem('Deutsch', nil);
+ AddItem('US-Amerikanisch', nil);
+ if back then begin
+ AddItem('', nil);
+ AddItem(Utf8Decode('Zurück'), nil);
+ end;
+ end;
+ mainw[1] := a;
+ mainw.fixed[1] := num_items;
+
+ b := TUILabel.create;
+ b.content := Utf8Decode('Bitte wähle aus dem Menü die richtige Tastaturbelegung aus.');
+ mainw[0] := b;
+ mainw.prop[0] := 30;
+
+ a.selected := 0;
+ repeat
+ // Zeichnen
+ screen.align(80, 24);
+ screen.draw(1, 1);
+
+ case readkey of
+ #27:
+ case ReadEscapeSequence of
+ SK_UP:
+ begin
+ a.selected := (a.selected + num_items - 1) mod num_items;
+ if a.selected = 2 then begin
+ a.selected := 1;
+ end;
+ end;
+ SK_DOWN:
+ begin
+ a.selected := (a.selected + 1) mod num_items;
+ if a.selected = 2 then begin
+ a.selected := 3;
+ end;
+ end;
+ end;
+ #10:
+ case a.selected of
+ 0:
+ begin
+ SetLayout('de');
+ break;
+ end;
+ 1:
+ begin
+ SetLayout('us');
+ break;
+ end;
+ 3: break;
+ end;
+ end;
+ until false;
+
+ f.obj := nil;
+ mainw.free;
+ screen.free;
+end;
+
+end.
diff --git a/src/modules/pas/setup/setup_lpt.pas b/src/modules/pas/setup/setup_lpt.pas
new file mode 100644
index 0000000..e4207ab
--- /dev/null
+++ b/src/modules/pas/setup/setup_lpt.pas
@@ -0,0 +1,136 @@
+unit setup_lpt;
+
+interface
+
+procedure SetupLPT(back: boolean);
+
+implementation
+
+uses sysutils, dos, tyndur, crt, tui;
+
+procedure SetRepo(repo: String);
+var
+ cfg: text;
+begin
+ Assign(cfg, 'file:/config/lpt/pkgsrc');
+ Rewrite(cfg);
+ WriteLn(cfg, 'lpt ', repo);
+ Close(cfg);
+
+ TextBackground(0);
+ TextColor(7);
+ ClrScr;
+ Exec('lpt', 'scan');
+
+ WriteLn;
+ WriteLn('Bitte eine beliebige Taste drücken');
+ readkey;
+end;
+
+procedure SetupLPT(back: boolean);
+var
+ mainw: TUIRowContainer;
+
+ a: TUIMenu;
+ b: TUILabel;
+
+ buttons: TUIColContainer;
+ btnOk: TUIButton;
+ btnCancel: TUIButton;
+ screen: TUIRowContainer;
+ title: TUILabel;
+ f: TUIFrame;
+ num_items: integer;
+begin
+ screen := TUIRowContainer.create(2);
+ screen.bgcolor := 2;
+ screen.color := 1;
+
+ title := TUILabel.create;
+ title.content := Utf8Decode('tyndur-Konfiguration: Quelle für lpt');
+ title.bgcolor := 1;
+ title.color := 15;
+ screen[0] := title;
+ screen.fixed[0] := 1;
+
+ f := TUIFrame.create(nil, 60, 12);
+ screen[1] := f;
+ screen.prop[1] := 1;
+
+ mainw := TUIRowContainer.create(2);
+ mainw.spacer := true;
+ f.obj := mainw;
+
+ if back then begin
+ num_items := 4;
+ end else begin
+ num_items := 2;
+ end;
+
+ a := TUIMenu.create(num_items);
+ with a do begin
+ bgcolor := 0;
+ color := 14;
+
+ AddItem('Stabile Version (gothmog)', nil);
+ AddItem('Entwicklerversion (current)', nil);
+ if back then begin
+ AddItem('', nil);
+ AddItem(Utf8Decode('Zurück'), nil);
+ end;
+ end;
+ mainw[1] := a;
+ mainw.fixed[1] := num_items;
+
+ b := TUILabel.create;
+ b.content := Utf8Decode('Bitte wähle aus dem Menü die Quelle für lpt aus.');
+ mainw[0] := b;
+ mainw.prop[0] := 30;
+
+ a.selected := 0;
+ repeat
+ // Zeichnen
+ screen.align(80, 24);
+ screen.draw(1, 1);
+
+ case readkey of
+ #27:
+ case ReadEscapeSequence of
+ SK_UP:
+ begin
+ a.selected := (a.selected + num_items - 1) mod num_items;
+ if a.selected = 2 then begin
+ a.selected := 1;
+ end;
+ end;
+ SK_DOWN:
+ begin
+ a.selected := (a.selected + 1) mod num_items;
+ if a.selected = 2 then begin
+ a.selected := 3;
+ end;
+ end;
+ end;
+ #10:
+ case a.selected of
+ 0:
+ begin
+ SetRepo('http://lpt.tyndur.org/gothmog/');
+ break;
+ end;
+ 1:
+ begin
+ SetRepo('http://lpt.tyndur.org/current/');
+ break;
+ end;
+ 3: break;
+ end;
+ end;
+ until false;
+
+ f.obj := nil;
+ mainw.free;
+ screen.free;
+end;
+
+end.
--
1.6.0.2