I found exactly the same behavior (Windows 95 and v1.2 educational).
After thinking about several things I found following workaround.
This should print out list of modules
PROCEDURE MyTest*;
VAR external,internal: Meta.Scanner; item: Meta.Item; tmod, ttype:
Meta.Name;
BEGIN
external.ConnectToMods;
external.Scan;
WHILE ~external.eos DO
IF external.this.Valid() THEN
IF external.this.obj = Meta.modObj THEN
item := external.this;
internal.ConnectTo(item);
internal.Scan;
(*
This is a loop i must use, because GetTypeName has
fallowing
Pre
i.typ >= recTyp 21
And here is possibility to miss some module
if it doesn't contain any type greater than Meta.recTyp
*)
WHILE (internal.this.typ < Meta.recTyp) & (~internal.eos) DO
internal.Scan
END;
IF (~internal.eos) & (internal.this.Valid()) THEN
internal.this.GetTypeName(tmod,ttype);
Out.String("MODULE "); Out.String(tmod);Out.Ln;
END
END;
ELSE
Out.String("EXTERNAL: Invalid item"); Out.Ln
END;
external.Scan
END
Regards
Tiki