00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087 #include <stdlib.h>
00088 #include <time.h>
00089 #include "udanax.h"
00090 #include "players.h"
00091
00092 #define MAX_PLAYERS 5
00093 int user = 0;
00094 PLAYER player[MAX_PLAYERS];
00095 extern int errno;
00096
00097 FILE *logfile;
00098 FILE *nulllog;
00099 FILE *reallog;
00100 char outputbuffer[BUFSIZ];
00101 char inputbuffer[BUFSIZ];
00102 bool logstuff;
00103 FILE *interfaceinput;
00104 extern FILE *febelog;
00105 extern bool firstputforrequest;
00106 Session *sessx;
00107 int backenddaemon;
00108 Tumbler defaultaccount = { 0, 0, 0, 0, { 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 } };
00109
00110 extern bool getrequest(Session *sess, typerequest *requestptr);
00111 extern void sendresultoutput(Session * session);
00112 extern char pullc(Session *sess);
00113 extern void xuputstring(char *string, FILE * fd);
00114 extern void processrcfile();
00115
00123 void
00124 xanadu(
00125 Session *sess)
00126 {
00127 typerequest request;
00128
00129 if (febelog && febelog != nulllog)
00130 fprintf(febelog, "\nfe:\n");
00131 firstputforrequest = true;
00132 logstuff = false;
00133 if (getrequest(sess, &request)) {
00134 (*requestfns[request]) (sess);
00135 sendresultoutput(sess);
00136 } else {
00137 sess->inp = stdin;
00138 }
00139 sess->free();
00140
00141 if (interfaceinput && interfaceinput != nulllog)
00142 fflush(interfaceinput);
00143 logstuff = false;
00144 }
00145
00153 bool
00154 establishprotocol(
00155 FILE *inp,
00156 FILE *outp)
00157 {
00158 char ch;
00159 Session tempsess;
00160
00161 if (febelog && febelog != nulllog)
00162 fprintf(febelog, "fe:\n");
00163 firstputforrequest = true;
00164
00165
00166
00167 tempsess.inp = inp;
00168 tempsess.outp = outp;
00169 tempsess.errp = stderr;
00170
00171 while ((ch = pullc(&tempsess)) != '\n') ;
00172 while ((ch = pullc(&tempsess)) == '\n') ;
00173 if (ch == 'P' && pullc(&tempsess) == '0' && pullc(&tempsess) == '~') {
00174 xuputstring("\nP0~", tempsess.outp);
00175 sendresultoutput(&tempsess);
00176 return true;
00177 } else {
00178 xuputstring("\nP?~", tempsess.outp);
00179 sendresultoutput(&tempsess);
00180 return false;
00181 }
00182 }
00183
00191 int
00192 main(
00193 int argc,
00194 char *argv[])
00195 {
00196 Session sess;
00197 char buf[100];
00198
00199 struct tm *local;
00200 long clock;
00201
00202 sessx = &sess;
00203 febelog = interfaceinput = reallog = logfile = nulllog = fopen("/dev/null", "a");
00204
00205 clock = time(0);
00206 local = localtime(&clock);
00207 sprintf(buf, "ln%d.%d.%d:%d", local->tm_mon + 1, local->tm_mday, local->tm_hour, local->tm_min);
00208
00209
00210
00211
00212
00213 freopen("backenderror", "w", stderr);
00214 setbuf(stderr, NULL);
00215 processrcfile();
00216
00217 setbuf(stdin, inputbuffer);
00218 setbuf(stdout, outputbuffer);
00219
00220 if (!establishprotocol(stdin, stdout))
00221 exit(1);
00222
00223 debug = false;
00224
00225 init(1);
00226
00227
00228 initsession("enf.enf");
00229
00230 movetumbler(&defaultaccount, &sess.account);
00231
00232 for (;;) {
00233 nsessorcommand++;
00234 xanadu(&sess);
00235
00236 logfile = nulllog;
00237 }
00238
00239 return 0;
00240 }
00241
00249 void
00250 frontenddied()
00251 {
00252 L("The frontend apparently has died.\n");
00253 diskexit();
00254 assert(0);
00255 }
00256
00264
00265 void
00266 setmaximumsetupsize(
00267 Session *sess)
00268 {
00269 }
00270
00278 void
00279 sourceunixcommand(
00280 Session *sess)
00281 {
00282 }
00283
00291 bool
00292 decrementusers()
00293 {
00294 return false;
00295 }
00296
00304 bool
00305 isthisusersdocument(
00306 Session *sess,
00307 Tumbler *tp)
00308 {
00309 return tumbleraccounteq(tp, &sess->account);
00310 }