home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / xc212os2.zip / SAMPLES / NODES / types.ob2 < prev   
Text File  |  1995-05-05  |  2KB  |  88 lines

  1. MODULE Types; (* Ned *)
  2.  
  3. IMPORT  Nodes, tio:=STextIO, oberonRTS, SYSTEM;
  4.  
  5. TYPE
  6.   Node = POINTER TO NodeDesc;
  7.   NodeDesc = RECORD (Nodes.NodeDesc)
  8.   END;
  9.  
  10. VAR node: Nodes.Node; (* for type check in InsertNode *)
  11.  
  12. PROCEDURE (n: Node) GetName(VAR s: ARRAY OF CHAR);
  13. BEGIN
  14.   COPY("Types manager",s);
  15. END GetName;
  16.  
  17. PROCEDURE (n: Node) Help;
  18. BEGIN
  19.   tio.WriteString('  Type:'); tio.WriteLn;
  20.   tio.WriteString('   "ModuleName.Type" to create and insert the node'); tio.WriteLn;
  21.   tio.WriteString('   "ModuleName"      to list all types of the module'); tio.WriteLn;
  22. END Help;
  23.  
  24. PROCEDURE OneName(x: SYSTEM.PTR; name: ARRAY OF CHAR): BOOLEAN;
  25. BEGIN
  26.   tio.WriteString("  ");
  27.   tio.WriteString(name);
  28.   tio.WriteLn;
  29.   RETURN TRUE
  30. END OneName;
  31.  
  32. PROCEDURE ListTypes(m: oberonRTS.Module);
  33. BEGIN
  34.   tio.WriteString("List of types:"); tio.WriteLn;
  35.   oberonRTS.IterTypes(m,NIL,OneName);
  36. END ListTypes;
  37.  
  38. PROCEDURE InsertNode(m: oberonRTS.Module; s: ARRAY OF CHAR);
  39.   VAR type: oberonRTS.Type; n: Nodes.Node;
  40. BEGIN
  41.   type:=oberonRTS.ThisType(m,s);
  42.   IF type = oberonRTS.nullType THEN
  43.     tio.WriteString("no such type"); tio.WriteLn;
  44.   ELSIF oberonRTS.BaseOf(type,0) # oberonRTS.TypeOf(node) THEN
  45.     tio.WriteString("not an extension of Nodes.Node"); tio.WriteLn;
  46.   ELSE
  47.     n:=SYSTEM.VAL(Nodes.Node,oberonRTS.NewObj(type)); ASSERT(n#NIL);
  48.     Nodes.Insert(n);
  49.     tio.WriteString("new node is inserted"); tio.WriteLn;
  50.   END;
  51. END InsertNode;
  52.  
  53. PROCEDURE (n: Node) Handle(s: ARRAY OF CHAR);
  54.   VAR cmd: ARRAY 64 OF CHAR; i,j: INTEGER;
  55.     m: oberonRTS.Module;
  56. BEGIN
  57.   i:=0;
  58.   WHILE (i < LEN(s)) & (s[i] # '.') & (s[i] # 0X) DO INC(i) END;
  59.   IF i < LEN(s) THEN
  60.     j:=0;
  61.     IF s[i] = '.' THEN
  62.       s[i]:=0X; INC(i); j:=0;
  63.       WHILE (i < LEN(s)) & (s[i] # 0X) & (j < LEN(cmd)-1) DO
  64.         cmd[j]:=s[i]; INC(j); INC(i);
  65.       END;
  66.     END;
  67.     cmd[j]:=0X;
  68.   END;
  69.   m:=oberonRTS.Search(s);
  70.   IF m = oberonRTS.nullModule THEN
  71.     tio.WriteString("no such module"); tio.WriteLn
  72.   ELSIF cmd[0] = 0X THEN ListTypes(m);
  73.   ELSE InsertNode(m,cmd)
  74.   END
  75. END Handle;
  76.  
  77. PROCEDURE Insert*;
  78.   VAR n: Node;
  79. BEGIN
  80.   NEW(n);
  81.   Nodes.Insert(n);
  82. END Insert;
  83.  
  84. BEGIN
  85.   NEW(node);
  86. END Types.
  87.  
  88.