📄 abook-opts.c
字号:
free (bseek->data); } g_list_free (entry->email); entry->email=NULL; abook_entry_free (entry); free (entry);}/* * Remember, we may be needing to find a substring of name. * In other words, the email address we are looking for may be * part of name, so strstr() must be used. */Abook_entry *abook_entry_seek_by_name (Abook *abook, char *name) { /* Make sure we have a name to start with!!! */ g_return_val_if_fail (name != NULL, NULL); if( !strlen(name) ) return NULL ; if (abook) { GList *seek; Abook_entry *entry; char *tmp=(char *)calloc (1024, sizeof (char)); for (seek=abook->entrys;seek;seek=seek->next) { entry=(Abook_entry *)seek->data;#if 0 format_name (tmp, entry->first, entry->last);#else format_name (1024, tmp, entry->first, entry->last, entry->def_email);#endif /* Commented out by Greg for testing..I think strstr is really what we want! if (strcasecmp (tmp, name)==0) { */ if( strcasecmp( tmp, name ) == 0 ) { free (tmp); return entry; } } free (tmp); } else { GList *seek; Abook_entry *entry; for (seek=abooks;seek;seek=seek->next) { abook=(Abook *)seek->data; if (abook) { entry=abook_entry_seek_by_name (abook, name); if (entry) return entry; } } } return NULL;}Abook_entry *abook_entry_seek_by_email (Abook *abook, char *email) { g_return_val_if_fail (email != NULL, NULL); if (abook) { GList *seek; GList *eseek; Abook_entry *entry; for (seek=abook->entrys;seek;seek=seek->next) { entry=(Abook_entry *)seek->data; for (eseek=entry->email;eseek;eseek=eseek->next) {#if 0 if (strcasecmp ((char *)eseek->data, email)==0) return entry ;#else if( strstr( email, (char *)eseek->data ) ) return entry ;#endif } } } else { GList *seek; Abook_entry *entry; for (seek=abooks;seek;seek=seek->next) { abook=seek->data; entry=abook_entry_seek_by_email (abook, email); if (entry) return entry; } } return NULL;}Abook_entry *abook_entry_seek_by_dname (Abook *abook, char *dname) { g_return_val_if_fail (dname != NULL, NULL); if (abook) { GList *seek; Abook_entry *entry; for (seek=abook->entrys;seek;seek=seek->next) { entry=(Abook_entry *)seek->data; if( entry -> dn ) { if (strcasecmp (entry->dn, dname)==0) return entry; } } } else { GList *seek; Abook_entry *entry; for (seek=abooks;seek;seek=seek->next) { abook=seek->data; entry=abook_entry_seek_by_dname (abook, dname); if (entry) return entry; } } return NULL;}Abook_entry *abook_entry_seek_by_nickname (Abook *abook, char *nickname) { g_return_val_if_fail (nickname != NULL, NULL); if (abook) { GList *seek; Abook_entry *entry; for (seek=abook->entrys;seek;seek=seek->next) { entry=(Abook_entry *)seek->data; if (strcasecmp (entry->nickname, nickname)==0) { return entry; } } } else { GList *seek; Abook_entry *entry; for (seek=abooks;seek;seek=seek->next) { abook=(Abook *)seek->data; if (abook) { entry=abook_entry_seek_by_nickname (abook, nickname); if (entry) return entry; } } } return NULL;}Abook *abook_entry_find_book (Abook_entry *entry) { GList *seek; for (seek=abooks;seek;seek=seek->next) { Abook *abook=seek->data; if (g_list_find (abook->entrys, entry)) return abook; } return NULL;}char *abook_entry_add_email (Abook_entry *entry, char *email) { char *tmp; g_return_val_if_fail (entry != NULL, NULL); g_return_val_if_fail (email != NULL, NULL); tmp=strdup (email); entry->email=g_list_append (entry->email, tmp); return tmp;}void abook_entry_remove_email (Abook_entry *entry, char *email) { GList *seek; char *data=NULL; g_return_if_fail (entry != NULL); g_return_if_fail (email != NULL); for (seek=entry->email;seek;seek=seek->next) { if (strcasecmp ((char *)seek->data, email)==0) { if (strcasecmp (entry->def_email, email)==0) { if (seek->next) { entry->def_email=seek->next->data; } else { if (seek->prev) { entry->def_email=seek->prev->data; } else { entry->def_email=NULL; } } } data=seek->data; } } if (data) entry->email=g_list_remove (entry->email, data);}char *abook_entry_edit_email (Abook_entry *entry, char *oldmail, char *newmail) { GList *seek; g_return_val_if_fail (entry != NULL, NULL); for (seek=entry->email;seek;seek=seek->next) { if (strcasecmp (oldmail, (char *)seek->data)==0) { free (seek->data); seek->data=strdup (newmail); if (strcasecmp (oldmail, entry->def_email)==0) { entry->def_email=seek->data; } return (char *)seek->data; } } return NULL;}char *abook_entry_has_email (Abook_entry *entry, char *email) { GList *seek; g_return_val_if_fail (entry != NULL, FALSE); g_return_val_if_fail (email != NULL, FALSE); for (seek=entry->email;seek;seek=seek->next) { if (strcasecmp ((char *)seek->data, email)==0) return seek->data; } return NULL;}void abook_entry_set_default (Abook_entry *entry, char *email) { char *tmp; g_return_if_fail (entry != NULL); g_return_if_fail (email != NULL); if (!abook_entry_has_email (entry, email)) { tmp=abook_entry_add_email (entry, email); } else { tmp=abook_entry_has_email (entry, email); } entry->def_email=tmp;}Abook_group *abook_group_new (Abook *abook) { Abook_group *group; g_return_val_if_fail (abook != NULL, NULL); group=(Abook_group *)calloc (1, sizeof (Abook_group)); abook->groups=g_list_append (abook->groups, group); return group;}void abook_group_destroy (Abook *abook, Abook_group *group) { g_return_if_fail (abook != NULL); g_return_if_fail (group != NULL); abook->groups=g_list_remove (abook->groups, group); if (group->name) free (group->name); free (group);}Abook_group *abook_group_seek (Abook *abook, char *name) { g_return_val_if_fail (abook != NULL, NULL); g_return_val_if_fail (name != NULL, NULL); if (abook) { GList *seek; Abook_group *group; for (seek=abook->groups;seek;seek=seek->next) { group=(Abook_group *)seek->data; if (strcasecmp (group->name, name)==0) return group; } } return NULL;}void abook_group_add_member (Abook_group *group, Abook_entry *entry) { g_return_if_fail (group != NULL); g_return_if_fail (entry != NULL); entry->groups=g_list_append (entry->groups, group);}void abook_group_remove_member (Abook_group *group, Abook_entry *entry) { g_return_if_fail (group != NULL); g_return_if_fail (entry != NULL); entry->groups=g_list_remove (entry->groups, group);}GList *abook_group_get_members (Abook_group *group) { GList *seek; GList *ret=NULL; GList *eseek; for (seek=abooks;seek;seek=seek->next) { Abook *abook=seek->data; GList *tmp=g_list_find (abook->groups, group); if (tmp) { for (eseek=abook->entrys;eseek;eseek=eseek->next) { Abook_entry *entry=eseek->data; if (g_list_find (entry->groups, group)) ret=g_list_append (ret, entry); } } } return ret;}void abook_resolve_dnames (Abook *abook) { GList *dseek, *gseek; Abook_group *group; Abook_entry *entry; g_return_if_fail (abook != NULL); for (gseek=abook->groups;gseek;gseek=gseek->next) { group=gseek->data; for (dseek=group->members;dseek;dseek=dseek->next) { entry=abook_entry_seek_by_dname (abook, (char *)dseek->data); if (entry) abook_group_add_member (group, entry); } } return ;}Abook_entry *abook_create_dummy (char *email) { Abook_entry *entry; g_return_val_if_fail (abooks != NULL, NULL); entry=abook_entry_new (abooks->data); entry->def_email=strdup (email); entry->dummy=TRUE; return entry;} void abook_destroy_dummys () { GList *seek; GList *destroy=NULL; for (seek=abooks;seek;seek=seek->next) { Abook *abook=seek->data; GList *eseek; for (eseek=abook->entrys;eseek;eseek=eseek->next) { Abook_entry *entry=eseek->data;#if DEBUG > 6 printf ("eseek->data: %p\n", eseek);#endif if (entry) { if (entry->dummy) {#if DEBUG > 6 printf ("Adding %p to llist\n", entry); printf ("destroy list length: %d\n", g_list_length (destroy));#endif destroy=g_list_append (destroy, entry); } } else {#ifdef DEBUG printf ("Entry came out as NULL, not adding to llist\n");#endif } }#ifdef DEBUG printf ("destroy list length: %d\n", g_list_length (destroy));#endif for (eseek=destroy;eseek;eseek=eseek->next) {#if DEBUG > 1 printf ("eseek->data: %p\n", eseek->data);#endif abook_entry_destroy (abook, eseek->data); } g_list_free (destroy); destroy=NULL; }}void abook_entry_dump (Abook_entry *entry) {#if DEBUG > 6 GList *seek; g_return_if_fail (entry != NULL); printf ("******** ENTRY dump\n"); printf (" entry : <%p>\n", entry); printf (" entry->first : '%20.20s'<%p>\n", entry->first, entry->first); printf (" entry->middle : '%20.20s'<%p>\n", entry->middle, entry->middle); printf (" entry->last : '%20.20s'<%p>\n", entry->last, entry->last); printf (" entry->title : '%20.20s'<%p>\n", entry->title, entry->title); printf (" entry->nickname : '%20.20s'<%p>\n", entry->nickname, entry->nickname); printf (" entry->sex : '%20.20s'<%p>\n", entry->sex, entry->sex); printf (" entry->hphone : '%20.20s'<%p>\n", entry->hphone, entry->hphone); printf (" entry->wphone : '%20.20s'<%p>\n", entry->wphone, entry->wphone); printf (" entry->mphone : '%20.20s'<%p>\n", entry->mphone, entry->mphone); printf (" entry->pager : '%20.20s'<%p>\n", entry->pager, entry->pager); printf (" entry->fax : '%20.20s'<%p>\n", entry->fax, entry->fax); printf (" entry->street : '%20.20s'<%p>\n", entry->street, entry->street); printf (" entry->webpage : '%20.20s'<%p>\n", entry->webpage, entry->webpage); printf (" entry->company : '%20.20s'<%p>\n", entry->company, entry->company); printf (" entry->position : '%20.20s'<%p>\n", entry->position, entry->position); printf (" entry->cstreet : '%20.20s'<%p>\n", entry->cstreet, entry->cstreet); printf (" entry->ccity : '%20.20s'<%p>\n", entry->ccity, entry->ccity); printf (" entry->cstate : '%20.20s'<%p>\n", entry->cstate, entry->cstate); printf (" entry->czip : '%20.20s'<%p>\n", entry->czip, entry->czip); printf (" entry->ccountry : '%20.20s'<%p>\n", entry->ccountry, entry->ccountry); printf (" entry->coffice : '%20.20s'<%p>\n", entry->coffice, entry->coffice); printf (" entry->cphone1 : '%20.20s'<%p>\n", entry->cphone1, entry->cphone1); printf (" entry->cphone2 : '%20.20s'<%p>\n", entry->cphone2, entry->cphone2); printf (" entry->cfax : '%20.20s'<%p>\n", entry->cfax, entry->cfax); printf (" entry->cpager : '%20.20s'<%p>\n", entry->cpager, entry->cpager); printf (" entry->cwebpage : '%20.20s'<%p>\n", entry->cwebpage, entry->cwebpage); printf (" entry->cmanager : '%20.20s'<%p>\n", entry->cmanager, entry->cmanager); printf (" entry->cassistant: '%20.20s'<%p>\n", entry->cassistant, entry->cassistant); printf (" entry->def_email : '%20.20s'<%p>\n", entry->def_email, entry->def_email); printf (" entry->notes : '%20.20s'<%p>\n", entry->notes, entry->notes); for (seek=entry->email;seek;seek=seek->next) { printf ("%s; ", (char *)seek->data); } printf ("\n");#endif}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -