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