#include <string.h>
#include <errno.h>
#include "citadel.h"
+#include "serv_info.h"
+#include "ipc.h"
+#include "citadelapi.h"
struct CtdlInternalList {
struct CtdlServerHandle CtdlAppHandle;
struct CtdlServInfo CtdlAppServInfo;
+struct CtdlRoomInfo CtdlCurrentRoom;
int CtdlErrno = 0;
-void CtdlMain();
-
-void logoff(exitcode) {
+void logoff(int exitcode) {
exit(exitcode);
}
}
/*
- * CtdlInternalExtractInt() - CtdlInternalExtract an int parm w/o supplying a buffer
+ * CtdlInternalExtractInt() - Extract an int parm w/o supplying a buffer
*/
int CtdlInternalExtractInt(char *source, int parmnum)
{
}
/*
- * CtdlInternalExtractLong() - CtdlInternalExtract an long parm w/o supplying a buffer
+ * CtdlInternalExtractLong() - Extract an long parm w/o supplying a buffer
*/
long CtdlInternalExtractLong(char *source, long int parmnum)
{
*
*/
-main(argc, argv)
-int argc;
-char *argv[]; {
+int
+main(int argc, char *argv[])
+{
int a;
char buf[256];
if (argc < 3) exit(1);
/* Zeroing out the server handle neatly sets the values of
- * CtdlAppHandle to sane default values
+ * CtdlAppHandle to sane default values. This also holds true
+ * for the CtdlCurrentRoom.
*/
bzero(&CtdlAppHandle, sizeof(struct CtdlServerHandle));
+ bzero(&CtdlCurrentRoom, sizeof(struct CtdlRoomInfo));
/* Now parse the command-line arguments fed to us by the server */
for (a=0; a<argc; ++a) switch(a) {
/* Set up the server environment to our liking */
- CtdlInternalGetServInfo(&CtdlAppServInfo, 0);
+ CtdlInternalGetServInfo(&CtdlAppServInfo);
sprintf(buf, "IDEN 0|5|006|CitadelAPI Client");
serv_puts(buf);
serv_gets(buf);
}
- sprintf(buf, "GOTO %s", CtdlAppHandle.InitialRoom);
- serv_puts(buf);
- serv_gets(buf);
- if (buf[0] != '2') {
- serv_puts("GOTO _BASEROOM_");
- serv_gets(buf);
+ if (CtdlGotoRoom(CtdlAppHandle.InitialRoom) != 0) {
+ CtdlGotoRoom("_BASEROOM_");
}
/* Now do the loop. */
}
-int CtdlGetLastError() {
+int CtdlGetLastError(void) {
return CtdlErrno;
}
int CtdlSetUserAccessLevel(int NewValue, char *WhichUser) {
char buf[256];
- if ( (NewValue < 1) || (NewValue > 6) ) {
+ if ( (NewValue < 0) || (NewValue > 6) ) {
return(ERROR + ILLEGAL_VALUE);
}
return(0);
}
+
+
+
+/*
+ * Goto a different room
+ */
+int CtdlGotoRoom(char *RoomName) {
+ char buf[256];
+
+ sprintf(buf, "GOTO %s", RoomName);
+ serv_puts(buf);
+ serv_gets(buf);
+ if (buf[0] != '2') {
+ CtdlErrno = atoi(buf);
+ return(CtdlErrno);
+ }
+ extract(&CtdlCurrentRoom.RoomName, &buf[4], 0);
+ }