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