1 string messages, new_hd, new_body;
2 int num_messages;
3 object who;
4 
id(str)5 id(str) {
6     return str == "bulletin board" || str == "board" || str == "bulletinboard";
7 }
8 
9 long() {
10     write("You can set up new notes with the command 'note headline'.\n");
11     write("Read a note with 'read num', and remove an old note with\n");
12     write("'remove num'.\n");
13     if (num_messages == 0) {
14 	write("It is empty.\n");
15 	return;
16     }
17     write("The bulletine board contains " + num_messages);
18     if (num_messages == 1)
19 	write(" note:\n\n");
20     else
21 	write(" notes:\n\n");
22     say(call_other(this_player(), "query_name") +
23 	  " studies the bulletin board.\n");
24     headers();
25 }
26 
27 short() {
28     return ("A bulletin board");
29 }
30 
get()31 get() {
32     write("It is secured to the ground.\n");
33     return 0;
34 }
35 
init()36 init() {
37     add_action("new"); add_verb("note");
38     add_action("read"); add_verb("read");
39     add_action("remove"); add_verb("remove");
40 }
41 
reset(arg)42 reset(arg) {
43     if (arg)
44 	return;
45     restore_object("bulletin");
46 }
47 
headers()48 headers() {
49     string hd, body, rest;
50     int i, tmp;
51 
52     i = 1;
53     rest = messages;
54     while(rest != 0 && rest != "") {
55 	tmp = sscanf(rest, "%s:\n**\n%s\n**\n%s", hd, body, rest);
56 	if (tmp != 2 && tmp != 3) {
57 	    write("Corrupt.\n");
58 	    return;
59 	}
60 	write(i + ":\t" + hd + "\n");
61 	i += 1;
62     }
63 }
64 
new(hd)65 new(hd) {
66     if (!hd)
67 	return 0;
68     if (who && environment(who) == environment(this_object())) {
69 	write(call_other(who, "query_name") + " is busy writing.\n");
70 	return 1;
71     }
72     if (num_messages == 10) {
73 	write("You have to remove an old message first.\n");
74 	return 1;
75     }
76     if (strlen(hd) > 50) {
77 	write("Too long header to fit the paper.\n");
78 	return 1;
79     }
80     new_hd = hd;
81     input_to("get_body");
82     write("Give message, and terminate with '**'.\n");
83     write("]");
84     new_body = "";
85     return 1;
86 }
87 
get_body(str)88 get_body(str) {
89     if (str == "**") {
90 	new_hd = new_hd + "(" + call_other(this_player(), "query_name") +
91 	    ", " + extract(ctime(time()), 4, 9) + ")";
92 	messages = messages + new_hd + ":\n**\n" + new_body + "\n**\n";
93 	num_messages += 1;
94 	new_body = 0;
95 	new_hd = 0;
96 	save_object("bulletin");
97 	write("Ok.\n");
98 	who = 0;
99 	return;
100     }
101     new_body = new_body + str + "\n";
102     write("]");
103     input_to("get_body");
104 }
105 
read(str)106 read(str) {
107     string hd, body, rest;
108     int i, tmp;
109 
110     if (str == 0 || (sscanf(str, "%d", i) != 1 &&
111 		     sscanf(str, "note %d", i) != 1))
112 	return 0;
113     if (i < 1 || i > num_messages) {
114 	write("Not that number of messages.\n");
115 	return 1;
116     }
117     rest = messages;
118     while(rest != 0 && rest != "") {
119 	i -= 1;
120 	tmp = sscanf(rest, "%s:\n**\n%s\n**\n%s", hd, body, rest);
121 	if (tmp != 2 && tmp != 3) {
122 	    write("Corrupt.\n");
123 	    return;
124 	}
125 	if (i == 0) {
126 	    say(call_other(this_player(), "query_name") +
127 		  " reads a note titled '" + hd + "'.\n");
128 	    write("The note is titled '" + hd + "':\n\n");
129 	    write(body);
130 	    return 1;
131 	}
132     }
133     write("Hm. This should not happen.\n");
134 }
135 
remove(str)136 remove(str) {
137     string hd, body, rest;
138     int i, tmp;
139 
140     if (str == 0 || (sscanf(str, "%d", i) != 1 &&
141 		     sscanf(str, "note %d", i) != 1))
142 	return 0;
143     if (i < 1 || i > num_messages) {
144 	write("Not that number of messages.\n");
145 	return 1;
146     }
147     rest = messages;
148     messages = "";
149     while(rest != 0 && rest != "") {
150 	i -= 1;
151 	tmp = sscanf(rest, "%s:\n**\n%s\n**\n%s", hd, body, rest);
152 	if (tmp != 2 && tmp != 3) {
153 	    write("Corrupt.\n");
154 	    return;
155 	}
156 	if (i == 0) {
157 	    say(call_other(this_player(), "query_name") +
158 		  " removed a note titled '" + hd + "'.\n");
159 	    write("Ok.\n");
160 	    messages = messages + rest;
161 	    num_messages -= 1;
162 	    save_object("bulletin");
163 	    return 1;
164 	}
165 	messages = messages + hd + ":\n**\n" + body + "\n**\n";
166     }
167     write("Hm. This should not happen.\n");
168 }
169