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).
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
] );