NEURON
nrnbbs.cpp
Go to the documentation of this file.
1 #include <OS/string.h>
2 #include <OS/list.h>
3 //#include <OS/table.h>
4 #include <stdio.h>
5 #include <string.h>
6 #include "nrnbbs.h"
7 //#include "/nrn/src/winio/debug.h"
8 
9 extern "C" {
10 void nrnbbs_server_post(const char* name, const char* value);
11 void nrnbbs_server_take(const char* name, char* value);
12 void nrnbbs_server_admin_post(const char* name, const char* value);
13 void nrnbbs_server_admin_request(const char* name, char* value);
15 void HandleOutput ( const char *);
16 }
17 
18 class NrnMessage {
19 public:
20  NrnMessage(const char* name, const char* value);
21  virtual ~NrnMessage();
22  const String& message();
23  const char* name();
24  bool equal(const char*);
25  const char* value();
26 private:
29 };
30 
31 declarePtrList(NrnMessageList, NrnMessage)
32 implementPtrList(NrnMessageList, NrnMessage)
33 
34 class NrnBBSImpl {
35 public:
36  NrnBBSImpl();
37  virtual ~NrnBBSImpl();
38  long lookup(const char*);
39 public:
40  NrnMessageList ml_;
41 };
42 
43 static NrnBBSImpl* bi_;
44 
46  if (!bi_) {
47  bi_ = new NrnBBSImpl();
48  }
49  return true;
50 }
52  if (bi_) {
53  delete bi_;
54  bi_ = nil;
55  }
56 }
57 
58 void nrnbbs_server_post(const char* name, const char* value) {
59  NrnMessage* m;
60  m = new NrnMessage(name, value);
61  bi_->ml_.append(m);
62 char buf[256];
63 sprintf(buf, "%d post |%s| |%s|", bi_->ml_.count(), name, value);
64 HandleOutput(buf);
65 }
66 
68  long i;
69  if (bi_->ml_.count() == 0) {
70  HandleOutput("NrnBBS is empty");
71  }
72  for (i = 0; i < bi_->ml_.count(); ++i) {
73  char buf[256];
74  NrnMessage* m = bi_->ml_.item(i);
75  sprintf(buf, "%d |%s| |%s|", i+1, m->name(), m->value());
76  HandleOutput(buf);
77  }
78 }
79 
80 void nrnbbs_server_take(const char* name, char* value) {
81  long i;
82  i = bi_->lookup(name+1);
83  if (i >= 0) {
84  sprintf(value, "1%s", bi_->ml_.item(i)->value());
85  if (name[0] == '0') { // only look if 1, don't take
86  bi_->ml_.remove(i);
87 char buf[256];
88 sprintf(buf, "%d take |%s| |%s|", bi_->ml_.count(), name, value);
89 HandleOutput(buf);
90  }
91 #if 1
92  else{
93 char buf[256];
94 sprintf(buf, "%d look |%s| |%s|", bi_->ml_.count(), name, value);
95 HandleOutput(buf);
96  }
97 #endif
98  }else{
99  sprintf(value, "0");
100  }
101 }
102 
103 void nrnbbs_server_admin_post(const char* name, const char* value) {
104  NrnMessage* m;
105  m = new NrnMessage(name, value);
106  bi_->ml_.append(m);
107 //DebugMessage("%d post |%s| |%s|\n", bi_->ml_.count(), name, value);
108 }
109 
110 void nrnbbs_server_admin_request(const char* name, char* value) {
111  long i;
112  i = bi_->lookup(name+1);
113  if (i >= 0) {
114  sprintf(value, "1%s", bi_->ml_.item(i)->value());
115  if (name[0] == '0') { // only look if 1, don't take
116  bi_->ml_.remove(i);
117 //DebugMessage("%d take |%s| |%s|\n", bi_->ml_.count(), name, value);
118  }
119  }else{
120  sprintf(value, "0");
121  }
122 }
123 
126  long i, cnt = ml_.count();
127  for (i = 0; i < cnt; ++i) {
128  delete ml_.item(i);
129  }
130 }
131 
132 long NrnBBSImpl::lookup(const char* name) {
133  long i, cnt;
134  cnt = ml_.count();
135  for (i = 0; i < cnt; ++i) {
136  if (ml_.item(i)->equal(name)) {
137  return i;
138  }
139  }
140  return -1;
141 }
142 
143 NrnMessage::NrnMessage(const char* name, const char* value){
144  s_ = name;
145  value_ = value;
146 }
147 
149 }
150 
151 bool NrnMessage::equal(const char* name) {
152  if (strcmp(name, s_.string()) == 0){
153  return true;
154  }else{
155  return false;
156  }
157 }
158 
159 const char* NrnMessage::value() {
160  return value_.string();
161 }
162 
163 const char* NrnMessage::name() {
164  return s_.string();
165 }
const char * value()
Definition: nrnbbs.cpp:159
bool nrnbbs_connect()
Definition: nrnbbs.cpp:45
NrnBBSImpl()
Definition: nrnbbs.cpp:124
void nrnbbs_server_admin_request(const char *name, char *value)
Definition: nrnbbs.cpp:110
NrnMessage(const char *name, const char *value)
Definition: nrnbbs.cpp:143
sprintf(buf," if (secondorder) {\ " int _i;\" " for(_i=0;_i< %d;++_i) {\" " _p[_slist%d[_i]]+=dt *_p[_dlist%d[_i]];\" " }}\", numeqn, listnum, listnum)
void nrnbbs_server_post(const char *name, const char *value)
Definition: nrnbbs.cpp:58
const char * string() const
Definition: string.h:139
#define implementPtrList(PtrList, T)
CopyString s_
Definition: nrnbbs.cpp:27
void HandleOutput(const char *)
Definition: hel2mos.cpp:18
NrnMessageList ml_
Definition: nrnbbs.cpp:40
#define cnt
Definition: spt2queue.cpp:19
bool equal(const char *)
Definition: nrnbbs.cpp:151
char * name
Definition: init.cpp:16
#define nil
Definition: enter-scope.h:36
virtual ~NrnBBSImpl()
Definition: nrnbbs.cpp:125
static uint32_t value
Definition: scoprand.cpp:26
void nrnbbs_server_take(const char *name, char *value)
Definition: nrnbbs.cpp:80
CopyString value_
Definition: nrnbbs.cpp:28
#define lookup
Definition: redef.h:90
void nrnbbs_disconnect()
Definition: nrnbbs.cpp:51
#define i
Definition: md1redef.h:12
long lookup(const char *)
Definition: nrnbbs.cpp:132
const String & message()
static NrnBBSImpl * bi_
Definition: nrnbbs.cpp:43
Definition: string.h:34
char buf[512]
Definition: init.cpp:13
void nrnbbs_show_postings()
Definition: nrnbbs.cpp:67
void nrnbbs_server_admin_post(const char *name, const char *value)
Definition: nrnbbs.cpp:103
const char * name()
Definition: nrnbbs.cpp:163
virtual ~NrnMessage()
Definition: nrnbbs.cpp:148
declarePtrList(NrnMessageList, NrnMessage) implementPtrList(NrnMessageList