2 * DmxTools.cpp: functions to convert , or ; separated numbers into an integer array
4 * See the README.txt file for copyright information and how to reach the author(s).
18 int IsValidDmxStartString(char *startChannels)
20 if(!startChannels) return -1;
27 while(*startChannels) {
28 if(*startChannels == ',' || *startChannels == ';') {
33 if((tmp >= 0) && (tmp<=253))
36 return -2; // invalid channel number!
42 if((*startChannels >= '0') && (*startChannels <= '9')) {
44 channel[i++] = *startChannels;
46 return -3; // invalid index length!
48 if(*startChannels != ' ') {
49 return -4; // invalid character found!
56 // process the rest (or last channel)
57 if(!*startChannels && (i>0)) {
60 if((tmp >= 0) && (tmp<=253)) {
69 int *ConvertDmxStartChannelsToInt(int numChannels, char *startChannels)
71 if(!numChannels || !startChannels) return NULL;
72 int *channels = new int[numChannels + 1];
73 // tmp buffer to store channel number!
80 while(*startChannels) {
81 if(*startChannels == ',' || *startChannels == ';') {
86 if((tmp >= 0) && (tmp<=253)) {
87 next_dmx_ch = tmp + 3;
96 if((*startChannels >= '0') && (*startChannels <= '9')) {
98 channel[i++] = *startChannels;
105 if(!*startChannels && (i>0)) {
108 if((tmp >= 0) && (tmp<=253)) {
109 next_dmx_ch = tmp + 3;
110 channels[ch++] = tmp;
114 // fillup the array with the logical next dmx channels - for simple devices that should work!
116 while(ch < numChannels) {
117 if(next_dmx_ch>253) next_dmx_ch=0; // wrap arround :) better than indexing memory out of range
118 channels[ch++] = next_dmx_ch;
121 channels[ch++] = -1; // last Entry :)
126 char *ConvertDmxStartChannelsToString(int numChannels, int *startChannels)
128 // maxBufSize worst case having numChannels 256 each 3 digits Adress and one colon 256*4 bytes + zero byte
130 // fuck up! (should not happen)
131 if(numChannels > 256) return NULL;
135 for(int i = 0; i < numChannels; i++) {
136 if(startChannels[i] == -1) break;
142 int n = sprintf(psz_tmp, "%d", startChannels[i] );