2 * DmxTools.cpp: functions to convert , or ; seperatered numbers into an integer array
4 * See the README.txt file for copyright information and how to reach the author(s).
14 int IsValidDmxStartString(char *startChannels)
16 if(!startChannels) return -1;
23 while(*startChannels) {
24 if(*startChannels == ',' || *startChannels == ';') {
29 if((tmp >= 0) && (tmp<=253))
32 return -2; // invalid channel number!
38 if((*startChannels >= '0') && (*startChannels <= '9')) {
40 channel[i++] = *startChannels;
42 return -3; // invalid index length!
44 if(*startChannels != ' ') {
45 return -4; // invalid character found!
52 // process the rest (or last channel)
53 if(!*startChannels && (i>0)) {
56 if((tmp >= 0) && (tmp<=253)) {
65 int *ConvertDmxStartChannelsToInt(int numChannels, char *startChannels)
67 if(!numChannels || !startChannels) return NULL;
68 int *channels = new int[numChannels + 1];
69 // tmp buffer to store channel number!
76 while(*startChannels) {
77 if(*startChannels == ',' || *startChannels == ';') {
82 if((tmp >= 0) && (tmp<=253)) {
83 next_dmx_ch = tmp + 3;
92 if((*startChannels >= '0') && (*startChannels <= '9')) {
94 channel[i++] = *startChannels;
101 if(!*startChannels && (i>0)) {
104 if((tmp >= 0) && (tmp<=253)) {
105 next_dmx_ch = tmp + 3;
106 channels[ch++] = tmp;
110 // fillup the array with the logical next dmx channels - for simple devices that should work!
112 while(ch < numChannels) {
113 if(next_dmx_ch>253) next_dmx_ch=0; // wrap arround :) better than indexing memory out of range
114 channels[ch++] = next_dmx_ch;
117 channels[ch++] = -1; // last Entry :)
122 char *ConvertDmxStartChannelsToString(int numChannels, int *startChannels)
124 // maxBufSize worst case having numChannels 256 each 3 digits Adress and one colon 256*4 bytes + zero byte
126 // fuck up! (should not happen)
127 if(numChannels > 256) return NULL;
131 for(int i = 0; i < numChannels; i++) {
132 if(startChannels[i] == -1) break;
138 int n = sprintf(psz_tmp, "%d", startChannels[i] );