Mercurial > pidgin.yaz
view src/protocols/zephyr/ZAsyncLocate.c @ 11620:fbc4eeab2227
[gaim-migrate @ 13894]
this lets you leave a highlighted tab by control-tab (forward) or
control-shift-tab (backwards). its not 100% intuitive though, because it
leaves the tab highlighed, which means that in the case of 1 highlighted
tab, the current one, you will leave the tab on the first control-tab,
then immediately return to it on the second one. For this reason, removing
the highlighting of current tabs would be a better permanent solution.
In talking with Tim however, he suggested we do both, on the off chance we
change our minds about the tab highlighting and go back to the
autoswitching.
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Thu, 06 Oct 2005 15:01:08 +0000 |
parents | 64895571248f |
children |
line wrap: on
line source
/* This file is part of the Project Athena Zephyr Notification System. * It contains source for asynchronous location functions. * * Created by: Marc Horowitz * * Copyright (c) 1990,1991 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file * "mit-copyright.h". */ #include "internal.h" Code_t ZRequestLocations(user, zald, kind, auth) const char *user; ZAsyncLocateData_t *zald; ZNotice_Kind_t kind; /* UNSAFE, UNACKED, or ACKED */ Z_AuthProc auth; { int retval; ZNotice_t notice; if (ZGetFD() < 0) if ((retval = ZOpenPort((unsigned short *)0)) != ZERR_NONE) return (retval); (void) memset((char *)¬ice, 0, sizeof(notice)); notice.z_kind = kind; notice.z_port = __Zephyr_port; notice.z_class = LOCATE_CLASS; notice.z_class_inst = user; notice.z_opcode = LOCATE_LOCATE; notice.z_sender = 0; notice.z_recipient = ""; notice.z_default_format = ""; notice.z_message_len = 0; if ((retval = ZSendNotice(¬ice, auth)) != ZERR_NONE) return(retval); if ((zald->user = (char *) malloc(strlen(user)+1)) == NULL) { return(ENOMEM); } if ((zald->version = (char *) malloc(strlen(notice.z_version)+1)) == NULL) { free(zald->user); return(ENOMEM); } zald->uid = notice.z_multiuid; strcpy(zald->user,user); strcpy(zald->version,notice.z_version); return(ZERR_NONE); } Code_t ZParseLocations(notice,zald,nlocs,user) ZNotice_t *notice; ZAsyncLocateData_t *zald; int *nlocs; char **user; { char *ptr, *end; int i; ZFlushLocations(); /* This never fails (this function is part of the library, so it is allowed to know this). */ /* non-matching protocol version numbers means the server is probably an older version--must punt */ if (zald && strcmp(notice->z_version, zald->version)) return(ZERR_VERS); if (notice->z_kind == SERVNAK) return (ZERR_SERVNAK); /* flag ACKs as special */ if (notice->z_kind == SERVACK && !strcmp(notice->z_opcode, LOCATE_LOCATE)) { *nlocs = -1; return(ZERR_NONE); } if (notice->z_kind != ACKED) return (ZERR_INTERNAL); end = notice->z_message+notice->z_message_len; __locate_num = 0; for (ptr=notice->z_message;ptr<end;ptr++) if (!*ptr) __locate_num++; __locate_num /= 3; if (__locate_num) { __locate_list = (ZLocations_t *)malloc((unsigned)__locate_num* sizeof(ZLocations_t)); if (!__locate_list) return (ENOMEM); } else { __locate_list = 0; } for (ptr=notice->z_message, i=0; i<__locate_num; i++) { unsigned int len; len = strlen (ptr) + 1; __locate_list[i].host = (char *) malloc(len); if (!__locate_list[i].host) return (ENOMEM); (void) strcpy(__locate_list[i].host, ptr); ptr += len; len = strlen (ptr) + 1; __locate_list[i].time = (char *) malloc(len); if (!__locate_list[i].time) return (ENOMEM); (void) strcpy(__locate_list[i].time, ptr); ptr += len; len = strlen (ptr) + 1; __locate_list[i].tty = (char *) malloc(len); if (!__locate_list[i].tty) return (ENOMEM); (void) strcpy(__locate_list[i].tty, ptr); ptr += len; } __locate_next = 0; *nlocs = __locate_num; if (user) { if (zald) { if ((*user = (char *) malloc(strlen(zald->user)+1)) == NULL) return(ENOMEM); strcpy(*user,zald->user); } else { if ((*user = (char *) malloc(strlen(notice->z_class_inst)+1)) == NULL) return(ENOMEM); strcpy(*user,notice->z_class_inst); } } return (ZERR_NONE); } int ZCompareALDPred(notice, zald) ZNotice_t *notice; void *zald; { return(ZCompareUID(&(notice->z_multiuid), &(((ZAsyncLocateData_t *) zald)->uid))); } void ZFreeALD(zald) ZAsyncLocateData_t *zald; { if (!zald) return; if (zald->user) free(zald->user); if (zald->version) free(zald->version); (void) memset(zald, 0, sizeof(*zald)); }