1
  
2
  
3
  
4
  
5
  
6
  
7
  
8
  
9
  
10
  
11
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
25
  
26
  
27
  
28
  
29
  
30
  
31
  
32
  
33
  
34
  
35
  
36
  
37
  
38
  
39
  
40
  
41
  
42
  
43
  
44
  
45
  
46
  
47
  
48
  
49
  
50
  
51
  
52
  
53
  
54
  
55
  
56
  
57
  
58
  
59
  
60
  
61
  
62
  
63
  
64
  
65
  
66
  
67
  
68
  
69
  
70
  
71
  
72
  
73
  
74
  
75
  
76
  
77
  
78
  
79
  
80
  
81
  
82
  
83
  
84
  
85
  
86
  
87
  
88
  
89
  
90
  
91
  
92
  
93
  
94
  
95
  
96
  
97
  
98
  
99
  
// This is a virtual "file-system". 
// It will be located somewhere in the name-space of the server. 
#include <module.h> 
 
inherit "module"; 
inherit "roxenlib"; 
 
mapping vars = ([ ]); 
 
void create() 
{ 
  defvar( "variables", "", "Variables", TYPE_TEXT_FIELD,  
         "Syntax:\n" 
         + "<br>dir [URL]\n" 
         + "<br>[variable name] [variable value]" ); 
} 
 
mixed *register_module() 
{ 
  return ({ MODULE_URL | MODULE_PARSER,  
            "Variable",  
            ("Variable"), 
            ({ }), 
            1 
          }); 
} 
 
void start() 
{ 
  string *lines, line; 
  string variable, value, *foo; 
  string dir = ""; 
  mapping all = ([ ]); 
 
  vars = ([ ]); 
  if (lines = query( "variables" ) /"\n") 
    foreach (lines, line) 
      if (sscanf( line, "%s=%s", variable, value ) >= 2) 
      { 
        foo = value / " "; 
 
        while (sizeof( foo ) && foo[0] == "") 
          foo = foo[1..sizeof( foo )-1 ]; 
        while (sizeof( foo ) && foo[ sizeof( foo )-1 ] == "") 
          foo = foo[0..sizeof( foo )-2 ]; 
        if (sizeof( foo )) 
          if (dir == "") 
            all[ variable - " " ] = foo * " "; 
          else 
            vars[ dir ][ variable - " " ] = foo * " "; 
      } 
      else 
        if (strlen( line - " " )) 
        { 
          dir = (line - " "); 
          if (dir[0] == "/") 
            dir = dir[ 1..strlen( dir )-1 ]; 
          vars[ dir ] = copy_value( all ); 
        } 
  if (!vars[ "" ]) 
    vars[ "" ] = all; 
} 
 
mixed remap_url( mapping id, string url ) 
{ 
  string *dirs, dir; 
  int c; 
 
  dirs = url / "/"; 
  for (c=sizeof( dirs )-1; c >= 0; c--) 
  { 
    dir = dirs[0..c] * "/" + "/"; 
    if (vars[ dir ]) 
    { 
      id->misc += vars[ dir ]; 
      return 0; 
    } 
  } 
  id->misc += vars [ "" ]; 
  return 0; 
} 
 
string tag_variable( string tag, mapping m, object id )  
{  
  id->misc += m; // Does this work, what are the semantics of +? 
} 
 
mapping query_tag_callers() 
{ 
  return ([ "var" : tag_variable ]); 
} 
 
mapping query_container_callers() 
{ 
  return ([]); 
}