home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / xc212os2.zip / SAMPLES / NODES / commands.ob2 next >
Text File  |  1994-07-20  |  2KB  |  90 lines

  1. MODULE Commands; (* 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. PROCEDURE (n: Node) GetName(VAR s: ARRAY OF CHAR);
  11. BEGIN
  12.   COPY("Commands manager",s);
  13. END GetName;
  14.  
  15. PROCEDURE (n: Node) Help;
  16. BEGIN
  17.   tio.WriteString('Type:'); tio.WriteLn;
  18.   tio.WriteString('   "ModuleName.Procedure" to call the command'); tio.WriteLn;
  19.   tio.WriteString('   "ModuleName"           to list all commands'); tio.WriteLn;
  20.   tio.WriteString('   "*"                    to list all modules'); tio.WriteLn;
  21. END Help;
  22.  
  23. PROCEDURE OneName(x: SYSTEM.PTR; name: ARRAY OF CHAR): BOOLEAN;
  24. BEGIN
  25.   tio.WriteString("  ");
  26.   tio.WriteString(name);
  27.   tio.WriteLn;
  28.   RETURN TRUE
  29. END OneName;
  30.  
  31. PROCEDURE ListModules;
  32. BEGIN
  33.   tio.WriteString("List of modules:"); tio.WriteLn;
  34.   oberonRTS.IterModules(NIL,OneName);
  35. END ListModules;
  36.  
  37. PROCEDURE ListCommands(m: oberonRTS.Module);
  38. BEGIN
  39.   tio.WriteString("List of commands:"); tio.WriteLn;
  40.   oberonRTS.IterCommands(m,NIL,OneName);
  41. END ListCommands;
  42.  
  43. PROCEDURE CallCommand(m: oberonRTS.Module; s: ARRAY OF CHAR);
  44.   VAR c: oberonRTS.Command;
  45. BEGIN
  46.   c:=oberonRTS.ThisCommand(m,s);
  47.   IF c = NIL THEN tio.WriteString("command not found"); tio.WriteLn;
  48.   ELSE c;
  49.   END;
  50. END CallCommand;
  51.  
  52. PROCEDURE (n: Node) Handle(s: ARRAY OF CHAR);
  53.   VAR cmd: ARRAY 64 OF CHAR; i,j: INTEGER;
  54.     m: oberonRTS.Module;
  55. BEGIN
  56.   i:=0;
  57.   WHILE (i < LEN(s)) & (s[i] # '.') & (s[i] # 0X) DO INC(i) END;
  58.   IF i < LEN(s) THEN
  59.     j:=0;
  60.     IF s[i] = '.' THEN
  61.       s[i]:=0X; INC(i); j:=0;
  62.       WHILE (i < LEN(s)) & (s[i] # 0X) & (j < LEN(cmd)-1) DO
  63.         cmd[j]:=s[i]; INC(j); INC(i);
  64.       END;
  65.     END;
  66.     cmd[j]:=0X;
  67.   END;
  68.   IF s = '*' THEN ListModules
  69.   ELSE
  70.     m:=oberonRTS.Search(s);
  71.     IF m = oberonRTS.nullModule THEN
  72.       tio.WriteString("Module not found"); tio.WriteLn
  73.     ELSE
  74.       IF cmd[0] = 0X THEN ListCommands(m)
  75.       ELSE CallCommand(m,cmd)
  76.       END;
  77.     END;
  78.   END
  79. END Handle;
  80.  
  81. PROCEDURE Insert*;
  82.   VAR n: Node;
  83. BEGIN
  84.   NEW(n);
  85.   Nodes.Insert(n);
  86. END Insert;
  87.  
  88. END Commands.
  89.  
  90.