Changeset 16355
- Timestamp:
- Feb 7, 2008, 1:45:56 PM (18 years ago)
- Location:
- trunk/psModules/src/camera
- Files:
-
- 3 edited
-
pmFPAfile.c (modified) (1 diff)
-
pmFPAfile.h (modified) (2 diffs)
-
pmFPAfileIO.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/camera/pmFPAfile.c
r16343 r16355 482 482 return ("NONE"); 483 483 } 484 485 486 psArray *pmFPAfileSelect(psMetadata *files, const char *name) 487 { 488 PS_ASSERT_PTR_NON_NULL(files, NULL); 489 490 psList *list = psListAlloc(NULL); // List of files selected 491 492 psString regex = NULL; // Regular expression 493 if (name) { 494 psStringAppend(®ex, "^%s$", name); 495 } 496 psMetadataIterator *iter = psMetadataIteratorAlloc(files, PS_LIST_HEAD, regex); // Iterator 497 psFree(regex); 498 psMetadataItem *item; // Item from iteration 499 while ((item = psMetadataGetAndIncrement(iter))) { 500 pmFPAfile *file = item->data.V; // File of iterest 501 psListAdd(list, PS_LIST_TAIL, file); 502 } 503 psFree(iter); 504 505 psArray *array = psListToArray(list); // Array generated from list 506 psFree(list); 507 508 return array; 509 } 510 511 pmFPAfile *pmFPAfileSelectSingle(psMetadata *files, const char *name, int num) 512 { 513 PS_ASSERT_PTR_NON_NULL(files, NULL); 514 PS_ASSERT_INT_NONNEGATIVE(num, NULL); 515 516 psString regex = NULL; // Regular expression 517 if (name) { 518 psStringAppend(®ex, "^%s$", name); 519 } 520 521 psMetadataIterator *iter = psMetadataIteratorAlloc(files, PS_LIST_HEAD, regex); // Iterator 522 psFree(regex); 523 psMetadataItem *item; // Item from iteration 524 int i = 0; // Counter 525 while ((item = psMetadataGetAndIncrement(iter))) { 526 if (i++ == num) { 527 return item->data.V; 528 } 529 } 530 psFree(iter); 531 532 psError(PS_ERR_BAD_PARAMETER_VALUE, true, "Unable to find instance %d of file %s", num, name); 533 return NULL; 534 } -
trunk/psModules/src/camera/pmFPAfile.h
r16343 r16355 4 4 * @author EAM, IfA 5 5 * 6 * @version $Revision: 1.2 7$ $Name: not supported by cvs2svn $7 * @date $Date: 2008-02-07 00:08:53$6 * @version $Revision: 1.28 $ $Name: not supported by cvs2svn $ 7 * @date $Date: 2008-02-07 23:45:56 $ 8 8 * Copyright 2004-2005 Institute for Astronomy, University of Hawaii 9 9 */ … … 128 128 const char *pmFPAfileStringFromType(pmFPAfileType type); 129 129 130 /// Select files with the same name from the list of files 131 /// 132 /// Returns all files if name is NULL. 133 psArray *pmFPAfileSelect(psMetadata *files, ///< All files 134 const char *name ///< Name of file(s) to return, or NULL for all 135 ); 136 137 /// Select a specific instance of a file from the list of files 138 /// 139 /// Returns the num-th instance of all files if name is NULL. 140 pmFPAfile *pmFPAfileSelectSingle(psMetadata *files, ///< All files 141 const char *name, ///< Name of file 142 int num ///< Instance number of specific instance 143 ); 144 145 146 130 147 /// @} 131 148 # endif -
trunk/psModules/src/camera/pmFPAfileIO.c
r16344 r16355 912 912 } 913 913 914 // set the state of the specified pmFPAfile to active (state == true) or inactive 914 915 // set the state of the specified pmFPAfile(s) to active (state == true) or inactive 915 916 // if name is NULL, set the state for all pmFPAfiles 916 bool pmFPAfileActivate (psMetadata *files, bool state, const char *name)917 bool pmFPAfileActivate(psMetadata *files, bool state, const char *name) 917 918 { 918 919 PS_ASSERT_PTR_NON_NULL(files, false); 919 920 920 // Do this as an iteration rather than a lookup, since we may want to turn on/off multiple files at once 921 // (if there are multiple files defined with the same name). 922 923 if (!name) { 924 psMetadataItem *item = NULL; 925 psMetadataIterator *iter = psMetadataIteratorAlloc (files, PS_LIST_HEAD, NULL); 926 while ((item = psMetadataGetAndIncrement (iter)) != NULL) { 927 pmFPAfile *file = item->data.V; 928 if (state) { 929 file->state &= PS_NOT_U8(PM_FPA_STATE_INACTIVE); 930 } else { 931 file->state |= PM_FPA_STATE_INACTIVE; 932 } 933 } 934 psFree (iter); 935 return true; 936 } 937 938 if (!psMetadataLookup(files, name)) { 939 // We activated every example of that file that we could find. 940 return true; 941 } 942 943 psString regex = NULL; // Regular expression for psMetadataIteratorAlloc 944 if (name) { 945 psStringAppend(®ex, "^%s$", name); 946 } 947 948 int num = 0; // Number of files activated 949 psMetadataItem *item = NULL; // Item from iteration 950 psMetadataIterator *iter = psMetadataIteratorAlloc(files, PS_LIST_HEAD, regex); // Iterator 951 while ((item = psMetadataGetAndIncrement(iter))) { 952 pmFPAfile *file = item->data.V; // File of interest 921 psArray *selected = pmFPAfileSelect(files, name); 922 if (!selected) { 923 psError(PS_ERR_UNKNOWN, false, "Unable to select files with name %s", name); 924 return false; 925 } 926 for (int i = 0; i < selected->n; i++) { 927 pmFPAfile *file = selected->data[i]; // File of interest 928 if (!file) { 929 continue; 930 } 953 931 if (state) { 954 932 file->state &= PS_NOT_U8(PM_FPA_STATE_INACTIVE); … … 956 934 file->state |= PM_FPA_STATE_INACTIVE; 957 935 } 958 num++; 959 } 960 psFree(iter); 961 psFree(regex); 936 } 937 psFree(selected); 962 938 963 939 return true; … … 971 947 PS_ASSERT_INT_NONNEGATIVE(num, NULL); 972 948 973 psString regex = NULL; // Regular expression for psMetadataIteratorAlloc 974 psStringAppend(®ex, "^%s$", name); 975 976 int i = 0; // Counter 977 psMetadataItem *item = NULL; // Item from iteration 978 psMetadataIterator *iter = psMetadataIteratorAlloc(files, PS_LIST_HEAD, regex); // Iterator 979 psFree(regex); 980 while ((item = psMetadataGetAndIncrement(iter))) { 981 if (i++ == num) { 982 pmFPAfile *file = item->data.V; // File of interest 983 if (state) { 984 file->state &= PS_NOT_U8(PM_FPA_STATE_INACTIVE); 985 } else { 986 file->state |= PM_FPA_STATE_INACTIVE; 987 } 988 psFree(iter); 989 return file; 990 } 991 } 992 psFree(iter); 993 return NULL; 994 } 949 pmFPAfile *file = pmFPAfileSelectSingle(files, name, num); 950 if (!file) { 951 psError(PS_ERR_UNKNOWN, false, "Unable to select instance %d of file %s", num, name); 952 return NULL; 953 } 954 if (state) { 955 file->state &= PS_NOT_U8(PM_FPA_STATE_INACTIVE); 956 } else { 957 file->state |= PM_FPA_STATE_INACTIVE; 958 } 959 960 return file; 961 }
Note:
See TracChangeset
for help on using the changeset viewer.
