/*
* Free a session's march list
*/
-void free_march_list(wcsession *wcf)
-{
+void free_march_list(wcsession * wcf) {
struct march *mptr;
while (wcf->march != NULL) {
free(wcf->march);
wcf->march = mptr;
}
-
}
/*
* remove a room from the march list
*/
-void remove_march(const StrBuf *aaa)
-{
+void remove_march(const StrBuf * aaa) {
struct march *mptr, *mptr2;
if (WC->march == NULL)
mptr2->next = mptr->next;
free(mptr);
mptr = mptr2;
- } else {
+ }
+ else {
mptr2 = mptr;
}
}
* \param desired_floor the room number on the citadel server
* \return the roomname
*/
-char *pop_march(int desired_floor)
-{
+char *pop_march(int desired_floor) {
static char TheRoom[128];
- int TheFloor = 0;
- int TheOrder = 32767;
int TheWeight = 0;
int weight;
struct march *mptr = NULL;
if (weight > TheWeight) {
TheWeight = weight;
strcpy(TheRoom, mptr->march_name);
+
+/* TODOO: and now????
TheFloor = mptr->march_floor;
TheOrder = mptr->march_order;
+*/
}
}
return (TheRoom);
* We start the search in the current room rather than the beginning to prevent
* two or more concurrent users from dragging each other back to the same room.
*/
-void gotonext(void)
-{
+void gotonext(void) {
char buf[256];
struct march *mptr = NULL;
struct march *mptr2 = NULL;
* If it is, pop the first room off the list and go there.
*/
if (havebstr("startmsg")) {
- readloop(readnew);
- return;
+ readloop(readnew, eUseDefault);
+ return;
}
if (WC->march == NULL) {
return;
if (ELoop % 100 == 0)
sleeeeeeeeeep(1);
- ELoop ++;
- continue;
+ ELoop++;
+ continue;
}
extract_token(room_name, buf, 0, '|', sizeof room_name);
- if (strcasecmp(room_name, ChrPtr(WC->wc_roomname))) {
+ if (strcasecmp(room_name, ChrPtr(WC->CurRoom.name))) {
mptr = (struct march *) malloc(sizeof(struct march));
mptr->next = NULL;
safestrncpy(mptr->march_name, room_name, sizeof mptr->march_name);
mptr->march_floor = extract_int(buf, 2);
mptr->march_order = extract_int(buf, 3);
- if (WC->march == NULL)
+ if (WC->march == NULL)
WC->march = mptr;
- else
+ else
mptr2->next = mptr;
mptr2 = mptr;
}
mptr = (struct march *) malloc(sizeof(struct march));
mptr->next = NULL;
mptr->march_order = 0;
- mptr->march_floor = 0;
+ mptr->march_floor = 0;
strcpy(mptr->march_name, "_BASEROOM_");
if (WC->march == NULL) {
WC->march = mptr;
- } else {
+ }
+ else {
mptr2 = WC->march;
while (mptr2->next != NULL)
mptr2 = mptr2->next;
* ...and remove the room we're currently in, so a <G>oto doesn't make us
* walk around in circles
*/
- remove_march(WC->wc_roomname);
+ remove_march(WC->CurRoom.name);
}
if (WC->march != NULL) {
- next_room = NewStrBufPlain(pop_march(-1), -1);/*TODO: migrate march to strbuf */
- } else {
+ next_room = NewStrBufPlain(pop_march(-1), -1); /*TODO: migrate march to strbuf */
+ putlbstr("gotonext", 1);
+ }
+ else {
next_room = NewStrBufPlain(HKEY("_BASEROOM_"));
}
/*
* un-goto the previous room
*/
-void ungoto(void)
-{
+void ungoto(void) {
StrBuf *Buf;
if (havebstr("startmsg")) {
- readloop(readnew);
+ readloop(readnew, eUseDefault);
return;
}
if (!strcmp(WC->ugname, "")) {
- smart_goto(WC->wc_roomname);
+ smart_goto(WC->CurRoom.name);
return;
}
serv_printf("GOTO %s", WC->ugname);
Buf = NewStrBuf();
StrBuf_ServGetln(Buf);
if (GetServerStatus(Buf, NULL) != 2) {
- smart_goto(WC->wc_roomname);
+ smart_goto(WC->CurRoom.name);
FreeStrBuf(&Buf);
return;
}
+void tmplput_ungoto(StrBuf * Target, WCTemplputParams * TP) {
+ wcsession *WCC = WC;
+
+ if ((WCC != NULL) && (!IsEmptyStr(WCC->ugname)))
+ StrBufAppendBufPlain(Target, WCC->ugname, -1, 0);
+}
+
void _gotonext(void) {
slrp_highest();
gotonext();
}
-void dotskip(void) {
- smart_goto(sbstr("room"));
-}
+int ConditionalHaveUngoto(StrBuf * Target, WCTemplputParams * TP) {
+ wcsession *WCC = WC;
+
+ return ((WCC != NULL) && (!IsEmptyStr(WCC->ugname)) && (strcasecmp(WCC->ugname, ChrPtr(WCC->CurRoom.name)) == 0));
+}
-void
-InitModule_MARCHLIST
-(void)
-{
+void InitModule_MARCHLIST(void) {
+ RegisterConditional("COND:UNGOTO", 0, ConditionalHaveUngoto, CTX_NONE);
+ RegisterNamespace("ROOM:UNGOTO", 0, 0, tmplput_ungoto, NULL, CTX_NONE);
WebcitAddUrlHandler(HKEY("gotonext"), "", 0, _gotonext, NEED_URL);
WebcitAddUrlHandler(HKEY("skip"), "", 0, gotonext, NEED_URL);