[Tcladdressbook-commits] Source TclAddressBook.c,1.31,1.32
Status: Alpha
Brought to you by:
bdesgraupes
|
From: Bernard D. <bde...@us...> - 2004-08-01 06:35:00
|
Update of /cvsroot/tcladdressbook/Source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29607/Source Modified Files: TclAddressBook.c Log Message: [add] and [remove] take multiple args Index: TclAddressBook.c =================================================================== RCS file: /cvsroot/tcladdressbook/Source/TclAddressBook.c,v retrieving revision 1.31 retrieving revision 1.32 diff -u -d -r1.31 -r1.32 --- TclAddressBook.c 30 Jul 2004 21:29:05 -0000 1.31 +++ TclAddressBook.c 1 Aug 2004 06:34:50 -0000 1.32 @@ -272,7 +272,7 @@ * See the user documentation for details on what it does. * * Syntax: - * addressbook add recordID groupID + * addressbook add groupID recordID ?recordID ...? * * Results: * A standard Tcl result. @@ -291,62 +291,72 @@ Tcl_Obj *CONST objv[], /* Argument values. */ Tcl_Obj *resultPtr) /* Pointer to store the result. */ { - int kind, length, result = TCL_OK, success; - CONST84 char * groupID; + int i, kind, length, result = TCL_OK, success; + CONST84 char * objID, * groupID; CFStringRef strRef; ABAddressBookRef ab; ABRecordRef objRecord, groupRecord; - if (objc != 4) { - Tcl_WrongNumArgs(interp, 2, objv, "recordID groupID"); + if (objc < 4) { + Tcl_WrongNumArgs(interp, 2, objv, "groupID recordID ?recordID ...?"); return TCL_ERROR; } // Get the address book ab = ABGetSharedAddressBook(); - // Second argument is a person or a group ID - strRef = CFStringCreateWithCString(NULL, Tcl_GetStringFromObj(objv[2], &length), NULL); - // Find the record corresponding to the UID - success = TclAB_RecordFromUID(ab, strRef, resultPtr, &objRecord); - CFRelease(strRef); - if (!success) {return TCL_ERROR;} - - // Third argument is a group ID - groupID = Tcl_GetStringFromObj(objv[3], &length); + // Second argument is a group ID + groupID = Tcl_GetStringFromObj(objv[2], &length); // Check if it is a group and get the corresponding record - if ( !TclAB_CheckItem(interp, ab, groupID, "third", &groupRecord, rec_group) ) { - result = TCL_ERROR; - goto DONE; + if ( !TclAB_CheckItem(interp, ab, groupID, "second", &groupRecord, rec_group) ) { + return TCL_ERROR; } - // Is objRecord a person or a group? - kind = TclAB_TypeFromRecord(ab, objRecord); - switch (kind) { - case rec_person: - if (!ABGroupAddMember(groupRecord, objRecord)) { - Tcl_AppendStringsToObj(resultPtr, "Couldn't add member to group", (char *) NULL); + for ( i = 3; i < objc; i++) { + + Tcl_IncrRefCount(objv[i]); + // Next argument should be a person or a group ID + objID = Tcl_GetStringFromObj(objv[i], &length); + strRef = CFStringCreateWithCString(NULL, objID, NULL); + // Find the record corresponding to the UID + success = TclAB_RecordFromUID(ab, strRef, resultPtr, &objRecord); + CFRelease(strRef); + if (!success) { + Tcl_DecrRefCount(objv[i]); result = TCL_ERROR; + break; } - break; - case rec_group: - if (!ABGroupAddGroup(groupRecord, objRecord)) { - Tcl_AppendStringsToObj(resultPtr, "Couldn't add subgroup to group", (char *) NULL); + // Is objRecord a person or a group? + kind = TclAB_TypeFromRecord(ab, objRecord); + switch (kind) { + case rec_person: + if (!ABGroupAddMember(groupRecord, objRecord)) { + Tcl_AppendStringsToObj(resultPtr, "Couldn't add member ", objID, " to group", (char *) NULL); + result = TCL_ERROR; + } + break; + + case rec_group: + if (!ABGroupAddGroup(groupRecord, objRecord)) { + Tcl_AppendStringsToObj(resultPtr, "Couldn't add subgroup ", objID, " to group", (char *) NULL); + result = TCL_ERROR; + } + break; + + default: + Tcl_AppendStringsToObj(resultPtr, "Unknown type for recordID ", objID, (char *) NULL); result = TCL_ERROR; + break; + } + Tcl_DecrRefCount(objv[i]); + CFRelease(objRecord); + if (result == TCL_ERROR) { + break; } - break; - - default: - Tcl_AppendStringsToObj(resultPtr, "Unknown type for recordID argument", (char *) NULL); - result = TCL_ERROR; - break; } CFRelease(groupRecord); - -DONE: - CFRelease(objRecord); return result; } @@ -1350,7 +1360,7 @@ * See the user documentation for details on what it does. * * Syntax: - * addressbook remove personID groupID + * addressbook remove groupID recordID ?recordID ...? * * Results: * A standard Tcl result. @@ -1369,62 +1379,72 @@ Tcl_Obj *CONST objv[], /* Argument values. */ Tcl_Obj *resultPtr) /* Pointer to store the result. */ { - int kind, length, result = TCL_OK, success; - CONST84 char * groupID; + int i, kind, length, result = TCL_OK, success; + CONST84 char * objID, * groupID; CFStringRef strRef; ABAddressBookRef ab; ABRecordRef objRecord, groupRecord; - if (objc != 4) { - Tcl_WrongNumArgs(interp, 2, objv, "recordID groupID"); + if (objc < 4) { + Tcl_WrongNumArgs(interp, 2, objv, "groupID recordID ?recordID ...?"); return TCL_ERROR; } // Get the address book ab = ABGetSharedAddressBook(); - // Second argument is a person or a group ID - strRef = CFStringCreateWithCString(NULL, Tcl_GetStringFromObj(objv[2], &length), NULL); - // Find the record corresponding to the UID - success = TclAB_RecordFromUID(ab, strRef, resultPtr, &objRecord); - CFRelease(strRef); - if (!success) {return TCL_ERROR;} - - // Third argument is a group ID - groupID = Tcl_GetStringFromObj(objv[3], &length); + // Second argument is a group ID + groupID = Tcl_GetStringFromObj(objv[2], &length); // Check if it is a group and get the corresponding record - if ( !TclAB_CheckItem(interp, ab, groupID, "third", &groupRecord, rec_group) ) { - result = TCL_ERROR; - goto DONE; + if ( !TclAB_CheckItem(interp, ab, groupID, "second", &groupRecord, rec_group) ) { + return TCL_ERROR; } - // Is objRecord a person or a group? - kind = TclAB_TypeFromRecord(ab, objRecord); - switch (kind) { - case rec_person: - if (!ABGroupRemoveMember(groupRecord, objRecord)) { - Tcl_AppendStringsToObj(resultPtr, "Couldn't remove member from group", (char *) NULL); + for ( i = 3; i < objc; i++) { + + Tcl_IncrRefCount(objv[i]); + // Next argument should be a person or a group ID + objID = Tcl_GetStringFromObj(objv[i], &length); + strRef = CFStringCreateWithCString(NULL, objID, NULL); + // Find the record corresponding to the UID + success = TclAB_RecordFromUID(ab, strRef, resultPtr, &objRecord); + CFRelease(strRef); + if (!success) { + Tcl_DecrRefCount(objv[i]); result = TCL_ERROR; + break; } - break; - case rec_group: - if (!ABGroupRemoveGroup(groupRecord, objRecord)) { - Tcl_AppendStringsToObj(resultPtr, "Couldn't remove subgroup from group", (char *) NULL); + // Is objRecord a person or a group? + kind = TclAB_TypeFromRecord(ab, objRecord); + switch (kind) { + case rec_person: + if (!ABGroupRemoveMember(groupRecord, objRecord)) { + Tcl_AppendStringsToObj(resultPtr, "Couldn't remove member ", objID, " from group", (char *) NULL); + result = TCL_ERROR; + } + break; + + case rec_group: + if (!ABGroupRemoveGroup(groupRecord, objRecord)) { + Tcl_AppendStringsToObj(resultPtr, "Couldn't remove subgroup ", objID, " from group", (char *) NULL); + result = TCL_ERROR; + } + break; + + default: + Tcl_AppendStringsToObj(resultPtr, "Unknown type for recordID ", objID, (char *) NULL); result = TCL_ERROR; + break; + } + Tcl_DecrRefCount(objv[i]); + CFRelease(objRecord); + if (result == TCL_ERROR) { + break; } - break; - - default: - Tcl_AppendStringsToObj(resultPtr, "Unknown type for recordID argument", (char *) NULL); - result = TCL_ERROR; - break; } CFRelease(groupRecord); - -DONE: - CFRelease(objRecord); return result; } |