Changeset 16355 for trunk/psModules/src/camera/pmFPAfileIO.c
- Timestamp:
- Feb 7, 2008, 1:45:56 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/camera/pmFPAfileIO.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
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.
