[Oberon] FPGA - OberonV4 Dialogs
Jörg Straube
joerg.straube at iaeth.ch
Fri Nov 23 21:16:03 CET 2018
Possibly you have to take care of the differences of INTEGER in Oberon-2 (two bytes) and Oberon-07 (four bytes)
Jörg
Am 23.11.2018 um 19:57 schrieb Tomas Kral <thomas.kral at email.cz>:
>> So, while loading you have to properly allocate your pointer data
>> structure again with NEW.
>
> Hi,
>
> I have recoded in revised Oberon so far,
> Dialogs.Mod, Dialog.Mod, DialogFrames.Mod, Display1.Mod, In.Mod, ...
>
> I am testing on `Test.Dlg', trying to understand `Dlg' file structure,
> just by opening it.
>
> Dialog.Open Test.Dlg ~
>
> which fails on `h' TRAP 1 in `Dialogs.Mod', index out of range I guess.
>
> PROCEDURE LoadP (p: Panel; VAR r: Files.Rider);
> (** reads the panel from rider r *)
> VAR cnt, end1, end2, h: INTEGER; o, prev: Object; module: Modules.ModuleName; name: ARRAY 32 OF CHAR;
> tab1: ARRAY maxItems OF Modules.ModuleName; tab2: ARRAY maxItems OF ARRAY 32 OF CHAR;
> pos: LONGINT;
> BEGIN
> p.contents := NIL; prev := NIL; Files.ReadInt(r, cnt); (*COPY ("", p.cmd)*) p.cmd[0] := 0X; end1 := 0; end2 := 0;
> WHILE cnt # 0 DO DEC (cnt);
> pos := Files.Pos (r); Files.ReadInt (r, h);
> IF h < end1 THEN module := tab1[h]
> ELSE Files.Set (r, Files.Base (r), pos); Files.ReadString (r, module); tab1[end1] := module; INC (end1)
> END;
> pos := Files.Pos (r); Files.ReadInt (r, h);
> IF h < end2 THEN (*COPY (tab2[h], name)*) name := tab2[h];
> ELSE Files.Set (r, Files.Base (r), pos); Files.ReadString (r, name);
> (*COPY (name, tab2[end2]);*) tab2[end2] := name; INC (end2)
> END;
> (** TODO load module and let it init itself instead using Types.Mod *)
> (*Types.NewObj (o, Types.This (Modules.ThisMod (module), name)); ASSERT (o # NIL);*)
> NEW(o); ASSERT (o # NIL); Init(o);
> o.do.Load (o, r); o.panel := p;
> IF prev # NIL THEN prev.next := o ELSE p.contents := o END;
> prev := o
> END;
> Files.ReadString (r, p.cmd);
> p.do.Restore (p)
> END LoadP;
>
>
> Dumping `Test.Dlg'...
>
> 00000000 05 00 44 69 61 6c 6f 67 42 75 74 74 6f 6e 73 00 |..DialogButtons.|
> 00000010 49 74 65 6d 44 65 73 63 00 50 72 69 6e 74 00 4d |ItemDesc.Print.M|
> 00000020 79 45 64 69 74 2e 50 72 69 6e 74 00 00 00 81 29 |yEdit.Print....)|
> 00000030 00 e0 5e f8 ff 80 1a 06 00 40 0d 03 00 00 53 79 |..^...... at ....Sy|
> 00000040 6e 74 61 78 31 30 2e 53 63 6e 2e 46 6e 74 00 44 |ntax10.Scn.Fnt.D|
> 00000050 69 61 6c 6f 67 53 74 61 74 69 63 54 65 78 74 73 |ialogStaticTexts|
> 00000060 00 49 74 65 6d 44 65 73 63 00 44 72 61 66 74 00 |.ItemDesc.Draft.|
> 00000070 00 00 30 df 18 00 00 ad f8 ff 80 1a 06 00 40 0d |..0........... at .|
> 00000080 03 00 00 01 01 00 53 79 6e 74 61 78 31 30 2e 53 |......Syntax10.S|
> 00000090 63 6e 2e 46 6e 74 00 64 72 61 66 74 00 44 69 61 |cn.Fnt.draft.Dia|
> 000000a0 6c 6f 67 43 68 65 63 6b 42 6f 78 65 73 00 49 74 |logCheckBoxes.It|
> 000000b0 65 6d 44 65 73 63 00 64 72 61 66 74 00 00 00 20 |emDesc.draft... |
> 000000c0 0b 20 00 f0 85 f8 ff 40 0d 03 00 40 0d 03 00 00 |. ..... at ...@....|
> 000000d0 01 00 49 74 65 6d 44 65 73 63 00 46 69 6c 65 00 |..ItemDesc.File.|
> 000000e0 00 00 a0 86 01 00 10 d4 f8 ff 80 1a 06 00 40 0d |.............. at .|
> 000000f0 03 00 00 01 01 00 53 79 6e 74 61 78 31 30 2e 53 |......Syntax10.S|
> 00000100 63 6e 2e 46 6e 74 00 66 69 6c 65 00 44 69 61 6c |cn.Fnt.file.Dial|
> 00000110 6f 67 54 65 78 74 73 00 49 74 65 6d 44 65 73 63 |ogTexts.ItemDesc|
> 00000120 00 66 69 6c 65 00 00 00 40 ef 07 00 00 ad f8 ff |.file... at .......|
> 00000130 60 ae 0a 00 60 5b 03 00 00 00 |`...`[....|
> 0000013a
>
>
> --
> Tomas Kral <thomas.kral at email.cz>
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon
More information about the Oberon
mailing list