Index: ORadio/libindi/libindi/BAOControl.log
===================================================================
--- /BAORadio/libindi/libindi/BAOControl.log	(revision 619)
+++ 	(revision )
@@ -1,4 +1,0 @@
-Lecture du fichier de configuration 'params' :
-
-Nom du serveur invalide !
-Le fichier de configuration 'params' contient des erreurs ou n'existe pas. Merci de vÃ©rifier.
Index: /BAORadio/libindi/libindi/BAOControl/BAOcontrol.log
===================================================================
--- /BAORadio/libindi/libindi/BAOControl/BAOcontrol.log	(revision 620)
+++ /BAORadio/libindi/libindi/BAOControl/BAOcontrol.log	(revision 620)
@@ -0,0 +1,408 @@
+
+
+
+
+
+  ******************************************
+  *             BAORadio Control           *
+  * Laboratoire de l'AccÃ©lÃ©rateur LinÃ©aire *
+  *                                        *
+  *             v0.4  02/12/2011           *
+  *        franckrichard033@gmail.com      *
+  ******************************************
+
+
+Lecture du fichier de configuration 'params' :
+
+latitude = 48:51:00
+longitude = 2:19:59
+
+serveur = localhost
+port = 7624
+
+pression = 1013
+tempÃ©rature = 10
+
+mode suivi = tracking
+delai transit = 100 sec
+delai tracking = 5 sec
+
+La connexion a Ã©tÃ© Ã©tablie avec le pilote indi_BAO.
+
+Les coordonnÃ©es gÃ©ographiques ont bien Ã©tÃ© envoyÃ©es au pilote indi_BAO
+
+0 : Connexion de l antenne 192.168.0.1. (Antennes connectees : 1)
+Envoi de la requÃªte au serveur NED...
+
+RÃ©ponse du serveur :
+MESSIER 031
+AD (J2000) = 00:42:44.3
+Dec (J2000) = 41:16:8.6
+
+CoordonnÃ©es apparentes de l'objet :
+AD=00:43:25.6   Dec=41:20:22.9
+Les nouvelles coordonnÃ©es AD=00:43:25.6 Dec=41:20:22.9 ont Ã©tÃ© envoyÃ©es au pilote indi_BAO.
+
+1 : Antenne 192.168.0.1 : POSITION OK  (x=0, y=0)
+2 : Antenne 192.168.0.1 : GOTO OK.
+3 : GOTO OK !
+4 : Antenne 192.168.0.1 : POSITION OK  (x=-1093, y=2407)
+5 : Antenne 192.168.0.1 : GOTO OK.
+6 : GOTO OK !
+7 : Antenne 192.168.0.1 : POSITION OK  (x=-1093, y=2407)
+8 : Antenne 192.168.0.1 : GOTO OK.
+9 : GOTO OK !
+10 : Antenne 192.168.0.1 : POSITION OK  (x=-1093, y=2406)
+11 : Antenne 192.168.0.1 : GOTO OK.
+12 : GOTO OK !
+13 : Antenne 192.168.0.1 : POSITION OK  (x=-1093, y=2405)
+14 : Antenne 192.168.0.1 : GOTO OK.
+15 : GOTO OK !
+16 : Antenne 192.168.0.1 : POSITION OK  (x=-1093, y=2405)
+17 : Antenne 192.168.0.1 : GOTO OK.
+18 : GOTO OK !
+19 : Antenne 192.168.0.1 : POSITION OK  (x=-1093, y=2404)
+20 : Antenne 192.168.0.1 : GOTO OK.
+21 : GOTO OK !
+22 : Antenne 192.168.0.1 : POSITION OK  (x=-1092, y=2403)
+23 : Antenne 192.168.0.1 : GOTO OK.
+24 : GOTO OK !
+25 : Antenne 192.168.0.1 : POSITION OK  (x=-1092, y=2403)
+26 : Antenne 192.168.0.1 : GOTO OK.
+27 : GOTO OK !
+28 : Antenne 192.168.0.1 : POSITION OK  (x=-1092, y=2402)
+29 : Antenne 192.168.0.1 : GOTO OK.
+30 : GOTO OK !
+31 : Antenne 192.168.0.1 : POSITION OK  (x=-1092, y=2401)
+32 : Antenne 192.168.0.1 : GOTO OK.
+33 : GOTO OK !
+34 : Antenne 192.168.0.1 : POSITION OK  (x=-1092, y=2401)
+35 : Antenne 192.168.0.1 : GOTO OK.
+36 : GOTO OK !
+37 : Antenne 192.168.0.1 : POSITION OK  (x=-1092, y=2400)
+38 : Antenne 192.168.0.1 : GOTO OK.
+39 : GOTO OK !
+40 : Antenne 192.168.0.1 : POSITION OK  (x=-1092, y=2400)
+41 : Antenne 192.168.0.1 : GOTO OK.
+42 : GOTO OK !
+43 : Antenne 192.168.0.1 : POSITION OK  (x=-1091, y=2399)
+44 : Antenne 192.168.0.1 : GOTO OK.
+45 : GOTO OK !
+46 : Antenne 192.168.0.1 : POSITION OK  (x=-1091, y=2398)
+47 : Antenne 192.168.0.1 : GOTO OK.
+48 : GOTO OK !
+49 : Antenne 192.168.0.1 : POSITION OK  (x=-1091, y=2398)
+50 : Antenne 192.168.0.1 : GOTO OK.
+51 : GOTO OK !
+52 : Antenne 192.168.0.1 : POSITION OK  (x=-1091, y=2397)
+53 : Antenne 192.168.0.1 : GOTO OK.
+54 : GOTO OK !
+55 : Antenne 192.168.0.1 : POSITION OK  (x=-1091, y=2396)
+56 : Antenne 192.168.0.1 : GOTO OK.
+57 : GOTO OK !
+58 : Antenne 192.168.0.1 : POSITION OK  (x=-1091, y=2396)
+59 : Antenne 192.168.0.1 : GOTO OK.
+60 : GOTO OK !
+61 : Antenne 192.168.0.1 : POSITION OK  (x=-1091, y=2395)
+62 : Antenne 192.168.0.1 : GOTO OK.
+63 : GOTO OK !
+64 : Antenne 192.168.0.1 : POSITION OK  (x=-1091, y=2394)
+65 : Antenne 192.168.0.1 : GOTO OK.
+66 : GOTO OK !
+67 : Antenne 192.168.0.1 : POSITION OK  (x=-1090, y=2394)
+68 : Antenne 192.168.0.1 : GOTO OK.
+69 : GOTO OK !
+70 : Antenne 192.168.0.1 : POSITION OK  (x=-1090, y=2393)
+71 : Antenne 192.168.0.1 : GOTO OK.
+72 : GOTO OK !
+73 : Antenne 192.168.0.1 : POSITION OK  (x=-1090, y=2392)
+74 : Antenne 192.168.0.1 : GOTO OK.
+75 : GOTO OK !
+76 : Antenne 192.168.0.1 : POSITION OK  (x=-1090, y=2392)
+77 : Antenne 192.168.0.1 : GOTO OK.
+78 : GOTO OK !
+79 : Antenne 192.168.0.1 : POSITION OK  (x=-1090, y=2391)
+80 : Antenne 192.168.0.1 : GOTO OK.
+81 : GOTO OK !
+82 : Antenne 192.168.0.1 : POSITION OK  (x=-1090, y=2391)
+83 : Antenne 192.168.0.1 : GOTO OK.
+84 : GOTO OK !
+85 : Antenne 192.168.0.1 : POSITION OK  (x=-1090, y=2390)
+86 : Antenne 192.168.0.1 : GOTO OK.
+87 : GOTO OK !
+88 : Antenne 192.168.0.1 : POSITION OK  (x=-1089, y=2389)
+89 : Antenne 192.168.0.1 : GOTO OK.
+90 : GOTO OK !
+91 : Antenne 192.168.0.1 : POSITION OK  (x=-1089, y=2389)
+92 : Antenne 192.168.0.1 : GOTO OK.
+93 : GOTO OK !
+94 : Antenne 192.168.0.1 : POSITION OK  (x=-1089, y=2388)
+95 : Antenne 192.168.0.1 : GOTO OK.
+96 : GOTO OK !
+97 : Antenne 192.168.0.1 : POSITION OK  (x=-1089, y=2387)
+98 : Antenne 192.168.0.1 : GOTO OK.
+99 : GOTO OK !
+100 : Antenne 192.168.0.1 : POSITION OK  (x=-1089, y=2387)
+101 : Antenne 192.168.0.1 : GOTO OK.
+102 : GOTO OK !
+103 : Antenne 192.168.0.1 : POSITION OK  (x=-1089, y=2386)
+104 : Antenne 192.168.0.1 : GOTO OK.
+105 : GOTO OK !
+106 : Antenne 192.168.0.1 : POSITION OK  (x=-1089, y=2385)
+107 : Antenne 192.168.0.1 : GOTO OK.
+108 : GOTO OK !
+109 : Antenne 192.168.0.1 : POSITION OK  (x=-1088, y=2385)
+110 : Antenne 192.168.0.1 : GOTO OK.
+111 : GOTO OK !
+112 : Antenne 192.168.0.1 : POSITION OK  (x=-1088, y=2384)
+113 : Antenne 192.168.0.1 : GOTO OK.
+114 : GOTO OK !
+115 : Antenne 192.168.0.1 : POSITION OK  (x=-1088, y=2383)
+116 : Antenne 192.168.0.1 : GOTO OK.
+117 : GOTO OK !
+118 : Antenne 192.168.0.1 : POSITION OK  (x=-1088, y=2383)
+119 : Antenne 192.168.0.1 : GOTO OK.
+120 : GOTO OK !
+121 : Antenne 192.168.0.1 : POSITION OK  (x=-1088, y=2382)
+122 : Antenne 192.168.0.1 : GOTO OK.
+123 : GOTO OK !
+124 : Antenne 192.168.0.1 : POSITION OK  (x=-1088, y=2381)
+125 : Antenne 192.168.0.1 : GOTO OK.
+126 : GOTO OK !
+127 : Antenne 192.168.0.1 : POSITION OK  (x=-1088, y=2381)
+128 : Antenne 192.168.0.1 : GOTO OK.
+129 : GOTO OK !
+130 : Antenne 192.168.0.1 : POSITION OK  (x=-1088, y=2380)
+131 : Antenne 192.168.0.1 : GOTO OK.
+132 : GOTO OK !
+133 : Antenne 192.168.0.1 : POSITION OK  (x=-1087, y=2380)
+134 : Antenne 192.168.0.1 : GOTO OK.
+135 : GOTO OK !
+136 : Antenne 192.168.0.1 : POSITION OK  (x=-1087, y=2379)
+137 : Antenne 192.168.0.1 : GOTO OK.
+138 : GOTO OK !
+139 : Antenne 192.168.0.1 : POSITION OK  (x=-1087, y=2378)
+140 : Antenne 192.168.0.1 : GOTO OK.
+141 : GOTO OK !
+142 : Antenne 192.168.0.1 : POSITION OK  (x=-1087, y=2378)
+143 : Antenne 192.168.0.1 : GOTO OK.
+144 : GOTO OK !
+145 : Antenne 192.168.0.1 : POSITION OK  (x=-1087, y=2377)
+146 : Antenne 192.168.0.1 : GOTO OK.
+147 : GOTO OK !
+148 : Antenne 192.168.0.1 : POSITION OK  (x=-1087, y=2376)
+149 : Antenne 192.168.0.1 : GOTO OK.
+150 : GOTO OK !
+151 : Antenne 192.168.0.1 : POSITION OK  (x=-1087, y=2376)
+152 : Antenne 192.168.0.1 : GOTO OK.
+153 : GOTO OK !
+154 : Antenne 192.168.0.1 : POSITION OK  (x=-1086, y=2375)
+155 : Antenne 192.168.0.1 : GOTO OK.
+156 : GOTO OK !
+157 : Antenne 192.168.0.1 : POSITION OK  (x=-1086, y=2374)
+158 : Antenne 192.168.0.1 : GOTO OK.
+159 : GOTO OK !
+160 : Antenne 192.168.0.1 : POSITION OK  (x=-1086, y=2374)
+161 : Antenne 192.168.0.1 : GOTO OK.
+162 : GOTO OK !
+163 : Antenne 192.168.0.1 : POSITION OK  (x=-1086, y=2373)
+164 : Antenne 192.168.0.1 : GOTO OK.
+165 : GOTO OK !
+166 : Antenne 192.168.0.1 : POSITION OK  (x=-1086, y=2372)
+167 : Antenne 192.168.0.1 : GOTO OK.
+168 : GOTO OK !
+169 : Antenne 192.168.0.1 : POSITION OK  (x=-1086, y=2372)
+170 : Antenne 192.168.0.1 : GOTO OK.
+171 : GOTO OK !
+172 : Antenne 192.168.0.1 : POSITION OK  (x=-1086, y=2371)
+173 : Antenne 192.168.0.1 : GOTO OK.
+174 : GOTO OK !
+175 : Antenne 192.168.0.1 : POSITION OK  (x=-1086, y=2370)
+176 : Antenne 192.168.0.1 : GOTO OK.
+177 : GOTO OK !
+178 : Antenne 192.168.0.1 : POSITION OK  (x=-1085, y=2370)
+179 : Antenne 192.168.0.1 : GOTO OK.
+180 : GOTO OK !
+181 : Antenne 192.168.0.1 : POSITION OK  (x=-1085, y=2369)
+182 : Antenne 192.168.0.1 : GOTO OK.
+183 : GOTO OK !
+184 : Antenne 192.168.0.1 : POSITION OK  (x=-1085, y=2369)
+185 : Antenne 192.168.0.1 : GOTO OK.
+186 : GOTO OK !
+187 : Antenne 192.168.0.1 : POSITION OK  (x=-1085, y=2368)
+188 : Antenne 192.168.0.1 : GOTO OK.
+189 : GOTO OK !
+190 : Antenne 192.168.0.1 : POSITION OK  (x=-1085, y=2367)
+191 : Antenne 192.168.0.1 : GOTO OK.
+192 : GOTO OK !
+193 : Antenne 192.168.0.1 : POSITION OK  (x=-1085, y=2367)
+194 : Antenne 192.168.0.1 : GOTO OK.
+195 : GOTO OK !
+196 : Antenne 192.168.0.1 : POSITION OK  (x=-1085, y=2366)
+197 : Antenne 192.168.0.1 : GOTO OK.
+198 : GOTO OK !
+199 : Antenne 192.168.0.1 : POSITION OK  (x=-1084, y=2365)
+200 : Antenne 192.168.0.1 : GOTO OK.
+201 : GOTO OK !
+202 : Antenne 192.168.0.1 : POSITION OK  (x=-1084, y=2365)
+203 : Antenne 192.168.0.1 : GOTO OK.
+204 : GOTO OK !
+205 : Antenne 192.168.0.1 : POSITION OK  (x=-1084, y=2364)
+206 : Antenne 192.168.0.1 : GOTO OK.
+207 : GOTO OK !
+208 : Antenne 192.168.0.1 : POSITION OK  (x=-1084, y=2363)
+209 : Antenne 192.168.0.1 : GOTO OK.
+210 : GOTO OK !
+211 : Antenne 192.168.0.1 : POSITION OK  (x=-1084, y=2363)
+212 : Antenne 192.168.0.1 : GOTO OK.
+213 : GOTO OK !
+214 : Antenne 192.168.0.1 : POSITION OK  (x=-1084, y=2362)
+215 : Antenne 192.168.0.1 : GOTO OK.
+216 : GOTO OK !
+217 : Antenne 192.168.0.1 : POSITION OK  (x=-1084, y=2361)
+218 : Antenne 192.168.0.1 : GOTO OK.
+219 : GOTO OK !
+220 : Antenne 192.168.0.1 : POSITION OK  (x=-1083, y=2361)
+221 : Antenne 192.168.0.1 : GOTO OK.
+222 : GOTO OK !
+223 : Antenne 192.168.0.1 : POSITION OK  (x=-1083, y=2360)
+224 : Antenne 192.168.0.1 : GOTO OK.
+225 : GOTO OK !
+226 : Antenne 192.168.0.1 : POSITION OK  (x=-1083, y=2359)
+227 : Antenne 192.168.0.1 : GOTO OK.
+228 : GOTO OK !
+229 : Antenne 192.168.0.1 : POSITION OK  (x=-1083, y=2359)
+230 : Antenne 192.168.0.1 : GOTO OK.
+231 : GOTO OK !
+232 : Antenne 192.168.0.1 : POSITION OK  (x=-1083, y=2358)
+233 : Antenne 192.168.0.1 : GOTO OK.
+234 : GOTO OK !
+235 : Antenne 192.168.0.1 : POSITION OK  (x=-1083, y=2357)
+236 : Antenne 192.168.0.1 : GOTO OK.
+237 : GOTO OK !
+238 : Antenne 192.168.0.1 : POSITION OK  (x=-1083, y=2357)
+239 : Antenne 192.168.0.1 : GOTO OK.
+240 : GOTO OK !
+241 : Antenne 192.168.0.1 : POSITION OK  (x=-1083, y=2356)
+242 : Antenne 192.168.0.1 : GOTO OK.
+243 : GOTO OK !
+244 : Antenne 192.168.0.1 : POSITION OK  (x=-1082, y=2356)
+245 : Antenne 192.168.0.1 : GOTO OK.
+246 : GOTO OK !
+247 : Antenne 192.168.0.1 : POSITION OK  (x=-1082, y=2355)
+248 : Antenne 192.168.0.1 : GOTO OK.
+249 : GOTO OK !
+250 : Antenne 192.168.0.1 : POSITION OK  (x=-1082, y=2354)
+251 : Antenne 192.168.0.1 : GOTO OK.
+252 : GOTO OK !
+253 : Antenne 192.168.0.1 : POSITION OK  (x=-1082, y=2354)
+254 : Antenne 192.168.0.1 : GOTO OK.
+255 : GOTO OK !
+256 : Antenne 192.168.0.1 : POSITION OK  (x=-1082, y=2353)
+257 : Antenne 192.168.0.1 : GOTO OK.
+258 : GOTO OK !
+259 : Antenne 192.168.0.1 : POSITION OK  (x=-1082, y=2352)
+260 : Antenne 192.168.0.1 : GOTO OK.
+261 : GOTO OK !
+262 : Antenne 192.168.0.1 : POSITION OK  (x=-1082, y=2352)
+263 : Antenne 192.168.0.1 : GOTO OK.
+264 : GOTO OK !
+265 : Antenne 192.168.0.1 : POSITION OK  (x=-1081, y=2351)
+266 : Antenne 192.168.0.1 : GOTO OK.
+267 : GOTO OK !
+268 : Antenne 192.168.0.1 : POSITION OK  (x=-1081, y=2350)
+269 : Antenne 192.168.0.1 : GOTO OK.
+270 : GOTO OK !
+271 : Antenne 192.168.0.1 : POSITION OK  (x=-1081, y=2350)
+272 : Antenne 192.168.0.1 : GOTO OK.
+273 : GOTO OK !
+274 : Antenne 192.168.0.1 : POSITION OK  (x=-1081, y=2349)
+275 : Antenne 192.168.0.1 : GOTO OK.
+276 : GOTO OK !
+277 : Antenne 192.168.0.1 : POSITION OK  (x=-1081, y=2348)
+278 : Antenne 192.168.0.1 : GOTO OK.
+279 : GOTO OK !
+280 : Antenne 192.168.0.1 : POSITION OK  (x=-1081, y=2348)
+281 : Antenne 192.168.0.1 : GOTO OK.
+282 : GOTO OK !
+283 : Antenne 192.168.0.1 : POSITION OK  (x=-1081, y=2347)
+284 : Antenne 192.168.0.1 : GOTO OK.
+285 : GOTO OK !
+286 : Antenne 192.168.0.1 : POSITION OK  (x=-1080, y=2346)
+287 : Antenne 192.168.0.1 : GOTO OK.
+288 : GOTO OK !
+289 : Antenne 192.168.0.1 : POSITION OK  (x=-1080, y=2346)
+290 : Antenne 192.168.0.1 : GOTO OK.
+291 : GOTO OK !
+292 : Antenne 192.168.0.1 : POSITION OK  (x=-1080, y=2345)
+293 : Antenne 192.168.0.1 : GOTO OK.
+294 : GOTO OK !
+295 : Antenne 192.168.0.1 : POSITION OK  (x=-1080, y=2344)
+296 : Antenne 192.168.0.1 : GOTO OK.
+297 : GOTO OK !
+298 : Antenne 192.168.0.1 : POSITION OK  (x=-1080, y=2344)
+299 : Antenne 192.168.0.1 : GOTO OK.
+300 : GOTO OK !
+301 : Antenne 192.168.0.1 : POSITION OK  (x=-1080, y=2343)
+302 : Antenne 192.168.0.1 : GOTO OK.
+303 : GOTO OK !
+304 : Antenne 192.168.0.1 : POSITION OK  (x=-1080, y=2343)
+305 : Antenne 192.168.0.1 : GOTO OK.
+306 : GOTO OK !
+307 : Antenne 192.168.0.1 : POSITION OK  (x=-1080, y=2342)
+308 : Antenne 192.168.0.1 : GOTO OK.
+309 : GOTO OK !
+310 : Antenne 192.168.0.1 : POSITION OK  (x=-1079, y=2341)
+311 : Antenne 192.168.0.1 : GOTO OK.
+312 : GOTO OK !
+313 : Antenne 192.168.0.1 : POSITION OK  (x=-1079, y=2341)
+314 : Antenne 192.168.0.1 : GOTO OK.
+315 : GOTO OK !
+316 : Antenne 192.168.0.1 : POSITION OK  (x=-1079, y=2340)
+317 : Antenne 192.168.0.1 : GOTO OK.
+318 : GOTO OK !
+319 : Antenne 192.168.0.1 : POSITION OK  (x=-1079, y=2339)
+320 : Antenne 192.168.0.1 : GOTO OK.
+321 : GOTO OK !
+322 : Antenne 192.168.0.1 : POSITION OK  (x=-1079, y=2339)
+323 : Antenne 192.168.0.1 : GOTO OK.
+324 : GOTO OK !
+325 : Antenne 192.168.0.1 : POSITION OK  (x=-1079, y=2338)
+326 : Antenne 192.168.0.1 : GOTO OK.
+327 : GOTO OK !
+328 : Antenne 192.168.0.1 : POSITION OK  (x=-1079, y=2337)
+329 : Antenne 192.168.0.1 : GOTO OK.
+330 : GOTO OK !
+331 : Antenne 192.168.0.1 : POSITION OK  (x=-1078, y=2337)
+332 : Antenne 192.168.0.1 : GOTO OK.
+333 : GOTO OK !
+334 : Antenne 192.168.0.1 : POSITION OK  (x=-1078, y=2336)
+335 : Antenne 192.168.0.1 : GOTO OK.
+336 : GOTO OK !
+337 : Antenne 192.168.0.1 : POSITION OK  (x=-1078, y=2335)
+338 : Antenne 192.168.0.1 : GOTO OK.
+339 : GOTO OK !
+340 : Antenne 192.168.0.1 : POSITION OK  (x=-1078, y=2335)
+341 : Antenne 192.168.0.1 : GOTO OK.
+342 : GOTO OK !
+343 : Antenne 192.168.0.1 : POSITION OK  (x=-1078, y=2334)
+344 : Antenne 192.168.0.1 : GOTO OK.
+345 : GOTO OK !
+346 : Antenne 192.168.0.1 : POSITION OK  (x=-1078, y=2333)
+347 : Antenne 192.168.0.1 : GOTO OK.
+348 : GOTO OK !
+349 : Antenne 192.168.0.1 : POSITION OK  (x=-1078, y=2333)
+350 : Antenne 192.168.0.1 : GOTO OK.
+351 : GOTO OK !
+352 : Antenne 192.168.0.1 : POSITION OK  (x=-1078, y=2332)
+353 : Antenne 192.168.0.1 : GOTO OK.
+354 : GOTO OK !
+355 : Antenne 192.168.0.1 : POSITION OK  (x=-1077, y=2331)
+356 : Antenne 192.168.0.1 : GOTO OK.
+357 : GOTO OK !
+358 : Antenne 192.168.0.1 : POSITION OK  (x=-1077, y=2331)
+359 : Antenne 192.168.0.1 : GOTO OK.
+360 : GOTO OK !
+361 : Antenne 192.168.0.1 : POSITION OK  (x=-1077, y=2330)
+362 : Antenne 192.168.0.1 : GOTO OK.
+363 : GOTO OK !
Index: /BAORadio/libindi/libindi/drivers/telescope/exception.c
===================================================================
--- /BAORadio/libindi/libindi/drivers/telescope/exception.c	(revision 620)
+++ /BAORadio/libindi/libindi/drivers/telescope/exception.c	(revision 620)
@@ -0,0 +1,36 @@
+/* exception.c */
+/* fonctions de manipulation de la pile */
+
+#include "exception.h"
+
+except *_exceptions = NULL;
+
+/* empile */
+
+void push_exc(){
+  except* layer;
+  layer = (except*) malloc(sizeof(except));
+  if(layer == NULL){
+    fprintf(stderr,"[push_exc()]Erreur d'allocation memoire pour la pile");
+  }
+  layer->super = _exceptions;
+  _exceptions = layer;
+}
+
+/* depile */
+
+void pop_exc(int ex){
+  except* super;
+  super = _exceptions->super;
+  free(_exceptions);
+  _exceptions = super;
+  if(ex){
+    if(_exceptions){
+      longjmp(_exceptions->ctx, ex);
+    }
+    else{
+      fprintf(stderr, "Exception non geree : %d\n", ex);
+      exit(-1);
+    }
+  }
+}
Index: /BAORadio/libindi/libindi/drivers/telescope/exception.h
===================================================================
--- /BAORadio/libindi/libindi/drivers/telescope/exception.h	(revision 620)
+++ /BAORadio/libindi/libindi/drivers/telescope/exception.h	(revision 620)
@@ -0,0 +1,54 @@
+/* exception.h */
+#include <stdio.h>
+#include <stdlib.h>
+#include <setjmp.h>
+
+#ifndef __EXCEPTION__
+#define __EXCEPTION__  1
+
+/* exceptions de base */
+
+#define ERR_MALLOC     10
+#define NULL_POINTEUR  11
+#define ERR_FOPEN      12
+
+/*prototypes*/
+
+/* definition des structures de donnees de gestion de la pile des contextes 
+   et des macros TRY, CATCH, et ENDTRY */
+
+
+/* liste chainee des contextes */
+typedef struct except_ctx 
+{
+  jmp_buf ctx;
+  struct except_ctx* super;
+} except;
+extern except* _exceptions;
+
+/* les macros */
+#define TRY { \
+  int exc; \
+  push_exc(); \
+  exc = setjmp(_exceptions->ctx); \
+  switch(exc){ \
+  case 0:
+
+#define CATCH(X) \
+  break; \
+  case(X): \
+  exc = 0;
+
+#define ENDTRY \
+  break; \
+  default: \
+  pop_exc(exc); }\
+  }
+
+#define THROW(X) longjmp(_exceptions->ctx, X)
+
+
+void push_exc();
+void pop_exc(int);
+
+#endif
Index: /BAORadio/libindi/libindi/drivers/telescope/filetools.cpp
===================================================================
--- /BAORadio/libindi/libindi/drivers/telescope/filetools.cpp	(revision 620)
+++ /BAORadio/libindi/libindi/drivers/telescope/filetools.cpp	(revision 620)
@@ -0,0 +1,1109 @@
+/*filetools.c*/
+
+#include "filetools.h"
+
+#define MAX_LENGHT 255
+
+
+
+/******************************************************
+ * NOM:              readINI                          *
+ * SPECIFICATION:                                     *
+ *   retourne la valeur de la cle du                  *
+ *               fichier dont la structure est celle  *
+ *               d'un fichier .ini windows            *
+ * ARGUMENTS:                                         *
+ * >section: le nom de la section sans les crochets   *
+ * >key: nom de la cle de la section                  *
+ * >pStr: pointeur pour mettre le resultat            *
+ *       allocation memoire effectuee                 *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:0 si echec 1 si oui               *
+ ******************************************************/
+int
+readINI (char *sectionName, char *pKeyName, char **ppStr, char *fileName)
+{
+    INI *pIni = NULL;
+    SECTION *pSection = NULL;
+    KEY *pKey = NULL;
+    int trouve = 0;
+    char *pSectionName = NULL;
+    int offset = 0;
+ 
+
+    trouve = 0;
+    pIni = _loadINI (fileName);
+    if (!pIni) return 0;
+
+    /*recherche de la section */
+    offset = strlen (sectionName) + 3;
+    pSectionName = new char [offset];
+    pSectionName[0] = '[';
+    strcpy (pSectionName + 1, sectionName);
+    pSectionName[strlen (sectionName) + 1] = ']';
+    pSectionName[offset - 1]='\0';
+
+    pSection = _findSECTION (pIni, pSectionName);
+
+    delete [] pSectionName;
+
+    if (pSection != NULL)
+    {
+        /*recherche de la cle */
+        pKey = _findKEY (pSection, pKeyName);
+        if (pKey != NULL)
+        {
+            *ppStr = new char [strlen (pKey->value) + 2];
+            strcpy (*ppStr, pKey->value);
+            (*ppStr)[strlen (pKey->value)] = '\0';
+            trouve = 1;
+
+        }
+    }
+
+    //On efface toutes les clÃ©s et toutes les sections
+
+    KEY *keyprev=NULL;
+    SECTION * secprev=NULL;
+    pSection=pIni->fils;
+
+    do
+    {
+        pKey=pSection->fils;
+
+        do
+        {
+            if (pKey->name) delete [] pKey->name;
+            if (pKey->value) delete [] pKey->value;
+
+            keyprev=pKey;
+
+            KEY *prev=pKey;
+            pKey=pKey->next;
+
+            delete prev;
+
+        } while (pKey!=keyprev);
+ 
+        if (pSection->name) delete [] pSection->name;
+
+        secprev=pSection;
+
+        SECTION *sprev=pSection;
+        pSection=pSection->next;
+
+        delete sprev;
+
+    }  while (pSection!=secprev);
+
+
+
+    delete [] pIni->fileName;
+    delete pIni;
+    pIni=NULL;
+
+    return trouve;
+}
+
+int
+readINI (const char *sectionName, const char *pKeyName, char **ppStr, const char *fileName)
+{
+     return readINI((char*)sectionName, (char*)pKeyName, ppStr, (char*)fileName);
+}
+
+/******************************************************
+ * NOM:                delINI                         *
+ * SPECIFICATION:                                     *
+ *  seule la cle de la section est supprimee          *
+ *  si la section est vide, elle est supprimee        *
+ * ARGUMENTS:                                         *
+ * >section: le nom de la section sans les crochets   *
+ * >key: nom de la cle de la section                  *
+ * >pStr: pointeur pour mettre la valeur de la cle    *
+ *       avant sa suppression                         *
+ *       allocation memoire effectuee                 *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * 1 si reussite de la suppression, 0 sinon           *
+ ******************************************************/
+/*
+int
+delINI (char *sectionName, char *pKeyName, char **ppStr, char *fileName)
+{
+  INI *pIni = NULL;
+  SECTION *pSection = NULL;
+  KEY *pKey = NULL;
+  int del = 0;
+  char *pSectionName = NULL;
+  int offset = 0;
+  //pStr = resultValue;
+  TRY
+  {
+
+    pIni = _loadINI (fileName);
+    //recherche de la section
+    offset = strlen (sectionName) + 3;
+    pSectionName = (char *) m_malloc (sizeof (char) * offset);
+    pSectionName[0] = '[';
+    strcpy (pSectionName + 1, sectionName);
+    pSectionName[strlen (sectionName) + 1] = ']';
+    pSectionName[offset - 1];
+
+    pSection = _findSECTION (pIni, pSectionName);
+
+    if (pSection != NULL)
+      {
+	if (pKeyName == NULL)
+	  {
+	    //on supprime toute la section
+
+	    pKey = _lastKEY (pSection);
+	    while (pKey != NULL)
+	      {
+		_delKEY (pKey);
+		pKey = _lastKEY (pSection);
+	      }
+	    _delSECTION (pSection);
+	    del = 1;
+	  }
+	else
+	  {
+	    //recherche de la cle si indiquee
+	    pKey = _findKEY (pSection, pKeyName);
+	    if (pKey != NULL)
+	      {
+		(*ppStr) =
+		  (char *) m_malloc (sizeof (char) * strlen (pKey->value) +
+				     2);
+		strcpy (*ppStr, pKey->value);
+		(*ppStr)[strlen (pKey->value)] = '\0';
+		if (_delKEY (pKey))
+		  {
+		    //si la cle supprimee etait la derniere de la section
+		    _delSECTION (pSection);
+		  }
+		del = 1;
+	      }
+	  }
+      }
+    if (del)
+      {
+	_saveINI (pIni);
+      }
+  }
+  CATCH (ERR_FOPEN)
+  {
+    printf ("impossible d'ouvrir le fichier %s\n", fileName);
+    (*ppStr) = NULL;
+  }
+  CATCH (ERR_MALLOC)
+  {
+    perror ("Probleme d'allocation memoire");
+    exit (EXIT_FAILURE);
+  }
+  ENDTRY;
+
+  return del;
+}
+*/
+/******************************************************
+ * NOM:                writeINI                       *
+ * SPECIFICATION:                                     *
+ *  si la section n'existe pas elle est cree          *
+ *  si la cle n'existe pas elle est cree              *
+ *  et la valeur de la cle est initialisee            *
+ *  sinon la cle existante de la section existante est*
+ *  mise a jour                                       *
+ * ARGUMENTS:                                         *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ *  NULL si echec ou keyValue si reussite             *
+ ******************************************************/
+
+
+/*
+char * writeINI (char *sectionName, char *keyName, char *keyValue, char *fileName)
+{
+  char *pSectionName = NULL;
+  char *pKeyName = NULL;
+  char *pKeyValue = NULL;
+  INI  *pIni = NULL;
+  SECTION *pSection = NULL;
+  KEY *pKey = NULL;
+  TRY
+  {
+    pKeyName = new char [sizeof (char) * strlen (keyName) + 1];
+    pSectionName = new char [sizeof (char) * strlen (sectionName) + 3];
+    if (keyValue != NULL)
+      {
+	pKeyValue = new char [sizeof (char) * strlen (keyValue) + 1];
+	strcpy (pKeyValue, keyValue);
+	pKeyValue[strlen (keyValue)] = '\0';
+      }
+    else
+      {
+	pKeyValue = new char [sizeof (char)];
+	pKeyValue[0] = '\0';
+      }
+    strcpy (pKeyName, keyName);
+    pSectionName[0] = '[';
+    strcpy (pSectionName + 1, sectionName);
+    pSectionName[strlen (sectionName) + 1] = ']';
+    pSectionName[strlen (sectionName) + 2] = '\0';
+    //chargement
+    pIni = _loadINI (fileName);
+  }
+  CATCH (ERR_FOPEN)
+  {
+    printf ("Erreur en ouvrant le fichier .ini:%s\n", fileName);
+    exit (EXIT_FAILURE);
+  }
+  CATCH (ERR_MALLOC)
+  {
+    perror ("Probleme d'allocation memoire");
+    exit (EXIT_FAILURE);
+  }
+  ENDTRY;
+
+  //recherche de la section
+  pSection = _findSECTION (pIni, pSectionName);
+  //recherche de la cle
+  if (pSection != NULL)
+    {
+      pKey = _findKEY (pSection, pKeyName);
+      if (pKey != NULL)
+	{
+	  if (pKey->value != NULL) { delete [] pKey->value; pKey->value = NULL; pKey->value = new char [sizeof (char) * strlen (pKeyValue) + 1]; }
+	  
+	  if (pKey->value == NULL)
+	    {
+	      perror ("probleme de reallocation memoire");
+	      exit (EXIT_FAILURE);
+	    }
+	  strcpy (pKey->value, pKeyValue);
+	}
+      else
+	{
+	  //cle pas trouve dans la section, on ajoute la cle a la section
+	  pKey = _newKEY (pKeyName, pKeyValue);
+	  _addKEY (pSection, pKey);
+	}
+    }
+  else
+    {
+       //section pas trouve, on la cree avec sa cle
+      pSection = _newSECTION (pSectionName);
+      _addSECTION (pIni, pSection);
+      pKey = _newKEY (pKeyName, pKeyValue);
+      _addKEY (pSection, pKey);
+
+    }
+  TRY
+  {
+    //sauvegarde
+    _saveINI (pIni);
+
+  }
+  CATCH (ERR_FOPEN)
+  {
+    printf ("erreur sur le fichier %s", pIni->fileName);
+  }
+  ENDTRY;
+
+  //nettoyage
+  if (pKey->value != NULL) delete [] pKey->value; 
+  if (pKey != NULL) delete [] pKey;
+  if (pKeyName != NULL) delete [] pKeyName;
+  if (pSectionName != NULL) delete [] pSectionName;
+  if (pIni != NULL) delete [] pIni;
+  if (pSection != NULL) delete [] pSection;
+  pIni = NULL;
+  pKeyName = NULL;
+  pSectionName = NULL;
+  return pKeyValue;
+}
+*/
+
+/******************************************************
+ * NOM:                                               *
+ *                 _delKEY                            *
+ * SPECIFICATION:                                     *
+ * ARGUMENTS:                                         *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ *  1 si derniere cellule, 0 sinon, -1 si probleme    *
+ ******************************************************/
+int
+_delKEY (KEY * pKey)
+{
+    int result = 0;
+    if (pKey != NULL)
+    {
+        /*la cle n'est pas la premiere */
+        if (pKey->prev != pKey)
+        {
+            if (pKey->next != pKey)
+            {
+                /*la cle n'est pas la derniere */
+                pKey->prev->next = pKey->next;
+            }
+            else
+            {
+                result = 1;
+                pKey->prev->next = pKey->prev;
+            }
+        }
+        else
+        {
+            if (pKey->next != pKey)
+            {
+                /*la cle n'est pas non plus la derniere */
+                pKey->parent->fils = pKey->next;
+            }
+            else
+            {
+                result = 1;
+                pKey->parent->fils = NULL;
+            }
+        }
+        _freeKEY (pKey);
+        return result;
+    }
+    else
+    {
+        result = -1;
+        return result;
+    }
+}
+
+
+/******************************************************
+ * NOM:                                               *
+ *                 _delSECTION                        *
+ * SPECIFICATION:                                     *
+ * ARGUMENTS:                                         *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ *  pointeur sur la section                           *
+ ******************************************************/
+int
+_delSECTION (SECTION * pSection)
+{
+    if (pSection != NULL)
+    {
+        /*la cle n'est pas la premiere */
+        if (pSection->prev != pSection)
+        {
+            /*la cle n'est pas la derniere */
+            if (pSection->next != pSection)
+            {
+                pSection->prev->next = pSection->next;
+            }
+            else
+            {
+                pSection->prev->next = pSection->prev;
+            }
+        }
+        else
+        {
+            /*la cle n'estpas nonplus la derniere */
+            if (pSection->next != pSection)
+            {
+                pSection->parent->fils = pSection->next;
+                pSection->next->prev = pSection->next;
+            }
+            else
+            {
+                pSection->parent->fils = NULL;
+            }
+        }
+        _freeSECTION (pSection);
+        return 1;
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+/************************
+ * liberation memoire   *
+ ************************/
+void
+_freeKEY (KEY * pKey)
+{
+    if (pKey != NULL)
+    {
+        pKey->parent = NULL;
+        pKey->next = NULL;
+        pKey->prev = NULL;
+        if (pKey->value != NULL)
+        {
+            delete [] pKey->value;
+        }
+        if (pKey->name != NULL)
+        {
+            delete [] pKey->name;
+        }
+        delete pKey;
+
+        pKey=NULL;
+    }
+}
+void
+_freeSECTION (SECTION * pSection)
+{
+    if (pSection != NULL)
+    {
+        pSection->parent = NULL;
+        pSection->next = NULL;
+        pSection->prev = NULL;
+        if (pSection->name != NULL)
+        {
+            delete [] pSection->name;
+        }
+        delete pSection;
+
+        pSection=NULL;
+    }
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 _newKEY                            *
+ * SPECIFICATION:                                     *
+ *  allocation d'une nouvelle cle                     *
+ * ARGUMENTS:                                         *
+ * le nom et la valeur de la cle                      *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * pointeur sur la cle, NULL sinon                    *
+ ******************************************************/
+KEY *
+_newKEY (char *pKeyName, char *pKeyValue)
+{
+    KEY *pKey;
+
+    {
+        pKey = new KEY;
+
+        pKey->name = new char [strlen (pKeyName) + 1];
+        pKey->value = new char [strlen (pKeyValue) + 1];
+    }
+
+
+    strcpy (pKey->name, pKeyName);
+    strcpy (pKey->value, pKeyValue);
+    pKey->parent = NULL;
+    pKey->prev = pKey;
+    pKey->next = pKey;
+
+    return pKey;
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 _newSECTION                        *
+ * SPECIFICATION:                                     *
+ *  allocation d'une nouvelle section                 *
+ * ARGUMENTS:                                         *
+ * le nom de la section                               *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * pointeur sur la section, NULL sinon                *
+ ******************************************************/
+SECTION *
+_newSECTION (char *pSectionName)
+{
+    SECTION *pSection;
+
+    {
+        pSection = new SECTION;
+
+        pSection->name = new char [strlen (pSectionName) + 1];
+    }
+
+
+    strcpy (pSection->name, pSectionName);
+    pSection->parent = NULL;
+    pSection->fils = NULL;
+    pSection->prev = pSection;
+    pSection->next = pSection;
+
+    return pSection;
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 _findSECTION                       *
+ * SPECIFICATION:                                     *
+ *  trouver la section dans une struture INI          *
+ * ARGUMENTS:                                         *
+ * la structure INI, le nom de la section avec ses [ ]*
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * pointeur sur la section, NULL sinon                *
+ ******************************************************/
+SECTION *
+_findSECTION (INI * pIni, char *pSectionName)
+{
+    SECTION *pSection = NULL;
+    pSection = pIni->fils;
+    while ((pSection != NULL) && (strcmp (pSection->name, pSectionName) != 0))
+    {
+        if (pSection == pSection->next)
+        {
+            pSection = NULL;
+        }
+        else
+        {
+            pSection = pSection->next;
+        }
+    }
+    return pSection;
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 _findKEY                           *
+ * SPECIFICATION:                                     *
+ *  trouver la cle dans une struture SECTION          *
+ * ARGUMENTS:                                         *
+ * la structure SECTION, le nom de la cle             *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * pointeur sur la cle, NULL sinon                    *
+ ******************************************************/
+KEY *
+_findKEY (SECTION * pSection, char *pKeyName)
+{
+    KEY *pKey = NULL;
+    pKey = pSection->fils;
+    while ((pKey != NULL) && (strcmp (pKey->name, pKeyName) != 0))
+    {
+        if (pKey == pKey->next)
+        {
+            pKey = NULL;
+        }
+        else
+        {
+            pKey = pKey->next;
+        }
+    }
+    return pKey;
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 _lastKEY                           *
+ * SPECIFICATION:                                     *
+ *  trouver la derniere cle dans une struture SECTION *
+ * ARGUMENTS:                                         *
+ * la structure SECTION                               *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * pointeur sur la cle, NULL sinon                    *
+ ******************************************************/
+KEY *
+_lastKEY (SECTION * pSection)
+{
+    KEY *pKey_pred = NULL;
+    KEY *pKey = NULL;
+    pKey = pSection->fils;
+    pKey_pred = pKey;
+    while (pKey != NULL)
+    {
+        pKey_pred = pKey;
+        if (pKey == pKey->next)
+        {
+            pKey = NULL;
+        }
+        else
+        {
+            pKey = pKey->next;
+        }
+    }
+    return pKey_pred;
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 _lastSECTION                       *
+ * SPECIFICATION:                                     *
+ *  trouver la derniere section dans une INI          *
+ * ARGUMENTS:                                         *
+ * la structure INI                                   *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * pointeur sur la section, NULL sinon                *
+ ******************************************************/
+SECTION *
+_lastSECTION (INI * pIni)
+{
+    SECTION *pSection_pred = NULL;
+    SECTION *pSection = NULL;
+    pSection = pIni->fils;
+    pSection_pred = pSection;
+    while (pSection != NULL)
+    {
+        pSection_pred = pSection;
+        if (pSection == pSection->next)
+        {
+            pSection = NULL;
+        }
+        else
+        {
+            pSection = pSection->next;
+        }
+    }
+    return pSection_pred;
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 _addSECTION                        *
+ * SPECIFICATION:                                     *
+ *  ajoute une section en derniere place dans une INI *
+ *  la section ne doit pas appartenir a une INI       *
+ * ARGUMENTS:                                         *
+ * la structure INI, la structure SECTION             *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * pointeur sur la section, NULL sinon                *
+ ******************************************************/
+SECTION *
+_addSECTION (INI * pIni, SECTION * pSection)
+{
+    SECTION *pSection_last = NULL;
+
+    if (pSection->parent != NULL)
+    {
+        return NULL;
+    }
+    else
+    {
+        pSection_last = _lastSECTION (pIni);
+        pSection->parent = pIni;
+        if (pSection_last != NULL)
+        {
+            pSection_last->next = pSection;
+            pSection->prev = pSection_last;
+        }
+        else
+        {
+            pIni->fils = pSection;
+        }
+        return pSection;
+    }
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 _addKEY                            *
+ * SPECIFICATION:                                     *
+ *  ajoute une cle en derniere place dans une SECTION *
+ *  la section ne doit pas appartenir a une SECTION   *
+ * ARGUMENTS:                                         *
+ * la structure KEY, la structure SECTION             *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * pointeur sur la cle, NULL sinon                *
+ ******************************************************/
+KEY *
+_addKEY (SECTION * pSection, KEY * pKey)
+{
+    KEY *pKey_last = NULL;
+
+    if (pKey->parent != NULL)
+    {
+        return NULL;
+    }
+    else
+    {
+
+        pKey_last = _lastKEY (pSection);
+        pKey->parent = pSection;
+        if (pKey_last != NULL)
+        {
+            pKey_last->next = pKey;
+            pKey->prev = pKey_last;
+        }
+        else
+        {
+            pSection->fils = pKey;
+        }
+        pKey->next = pKey;
+        return pKey;
+    }
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 saveINI                            *
+ * SPECIFICATION:                                     *
+ *  sauvegarde de la structure INI dans son fichier   *
+ *  Attention, ecrase l'ancien fichier                *
+* ARGUMENTS:                                         *
+*  pointeur sur la structure INI a sauvegarder       *
+* ENVIRONNEMENT:                                     *
+* VALEUR RETOURNEE:                                  *
+*  -1 si un probleme a eu lieu, 0 sinon              *
+******************************************************/
+
+/*
+ int
+_saveINI (INI * pIni)
+{
+  FILE *pFile = NULL;
+  char *str = NULL;
+  SECTION *pSection_pred = NULL, *pSection = NULL;
+  KEY *pKey_pred = NULL, *pKey = NULL;
+  int offset = 0;
+
+  pFile = fopen (pIni->fileName, "w");
+  if (pFile == NULL)
+    THROW (ERR_FOPEN);
+  //printf("#SAUVEGARDE Fichier INI#\n");
+  //printf("# %s #\n\n",pIni->fileName);
+  if (pIni->fils != NULL)
+    {
+      pSection = pIni->fils;
+      do
+	{
+
+	  fprintf (pFile, pSection->name);
+	  fprintf (pFile, "\n");
+	  pKey = pSection->fils;
+	  do
+	    {
+
+	      offset = strlen (pKey->name) + strlen (pKey->value) + 2;
+
+	      TRY
+	      {
+		str = new char [sizeof (char) * offset];
+	      }
+	      CATCH (ERR_MALLOC)
+	      {
+		perror ("probleme d'allocation memoire");
+		exit (EXIT_FAILURE);
+	      }
+	      ENDTRY;
+	      memset (str, 0, offset);
+	      strcpy (str, pKey->name);
+	      offset = strlen (pKey->name);
+	      strcpy (str + offset, "=");
+	      offset = strlen (pKey->name) + 1;
+	      strcpy (str + offset, pKey->value);
+	      fprintf (pFile, str);
+	      fprintf (pFile, "\n");
+	      pKey_pred = pKey;
+	      pKey = pKey->next;
+	      delete [] str;
+	    }
+	  while (pKey != pKey_pred);
+
+	  pSection_pred = pSection;
+	  pSection = pSection->next;
+	}
+      while (pSection != pSection_pred);
+    }
+  //nettoyage
+  fclose (pFile);
+}*/
+
+/******************************************************
+ * NOM:                                               *
+ *                  loadINI                           *
+ * SPECIFICATION:                                     *
+ *  Charge le contenu d'un fichier .ini en memoire    *
+ * ARGUMENTS:                                         *
+ *  nom du fichier                                    *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ *  pointeur sur la structure INI contenant le fichier*
+ *  .ini avec les structures decrites dans le .h      *
+ * EXCEPTION:                                         *
+ * ERR_FOPEN, ERR_MALLOC
+ ******************************************************/
+INI *
+_loadINI (char *fileName)
+{
+    FILE *pFile = NULL;
+    char *pBuf;
+    int nbRead = 0;
+    SECTION *pSection = NULL;
+    KEY *pKey = NULL;
+
+    INI *pIni = NULL;
+    pBuf = new char [MAX_LENGHT];
+
+    pFile = fopen (fileName, "r");
+    if (pFile == NULL)
+    {
+        pFile = fopen (fileName, "a");
+        if (pFile == NULL)
+            
+        return NULL;
+    }
+
+    pIni = new INI;
+    pIni->fileName = new char [strlen (fileName) + 1];
+    strcpy (pIni->fileName, fileName);
+    pIni->fils = NULL;
+    /* on lit ligne par ligne */
+    nbRead = readline (pFile, pBuf);
+  //  if (nbRead==-1) { fclose(pFile); delete  [] pIni->fileName; delete pIni; delete [] pBuf; return 0;}
+    while (nbRead != -1)
+    {
+
+        if ((pBuf[0] == '[') && (pBuf[strlen (pBuf) - 1] == ']'))
+        {
+            /* une section */
+            pSection = NULL;
+
+            pSection = _newSECTION (pBuf);
+            _addSECTION (pIni, pSection);
+        }
+
+        /* les cles de la section */
+        while (((nbRead = readline (pFile, pBuf)) !=-1) && (pBuf[0] != '['))
+        {
+            int ind = 0;
+            pKey = NULL;
+            if ((ind = _isKey (pBuf)) >= 0)
+            {
+
+                char *strName = NULL;
+                strName = new char [ind + 1];
+                strncpy (strName, pBuf, ind);
+                strName[ind] = '\0';
+                pKey = _newKEY (strName, pBuf + ind + 1);
+                _addKEY (pSection, pKey);
+                delete [] strName;
+            }
+        }
+    }
+
+    /*nettoyage */
+    delete [] pBuf;
+    fclose (pFile);
+    return pIni;
+}
+
+/******************************************************
+ * NOM:                                               *
+ *                 _isKey                             *
+ * SPECIFICATION:                                     *
+ *  determine si une chaine est une cle valide        *
+ * ARGUMENTS:                                         *
+ *  pointeur sur la chaine                            *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ *  indice du signe '=' si oui, -1 sinon              *
+ ******************************************************/
+int
+_isKey (char *str)
+{
+    int ind = 0;
+    for (ind; (ind < strlen (str)) && (str[ind] != '='); ind++);
+    if (str[ind] == '=')
+        return ind;
+    else
+        return -1;
+}
+
+
+/******************************************************
+ * NOM:                                               *
+ *                  _printINI                         *
+ * SPECIFICATION:                                     *
+ * affiche a l'ecran le contenu de structure INI      *
+ * ARGUMENTS:                                         *
+ *  pointeur sur la structure INI                     *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ ******************************************************/
+/*void
+_printINI (INI * pIni)
+{
+  SECTION *pSection_pred = NULL;
+  SECTION *pSection = NULL;
+  printf ("#Fichier INI#\n");
+  printf ("# %s #\n\n", pIni->fileName);
+  pSection = pIni->fils;
+  if (pSection != NULL)
+    {
+      do
+	{
+	  _printSECTION (pSection);
+	  pSection_pred = pSection;
+	  pSection = pSection->next;
+	}
+      while (pSection != pSection_pred);
+    }
+  printf ("\n#Fin du fichier INI#\n");
+}*/
+
+/******************************************************
+ * NOM:                                               *
+ *                  _printSECTION                     *
+ * SPECIFICATION:                                     *
+ * affiche a l'ecran le contenu de structure SECTION  *
+ * ARGUMENTS:                                         *
+ *  pointeur sur la structure SECTION                 *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ ******************************************************/
+/*void
+_printSECTION (SECTION * pSection)
+{
+  KEY *pKey = NULL;
+  KEY *pKey_pred = NULL;
+  printf ("%s\n", pSection->name);
+  pKey = pSection->fils;
+  if (pKey != NULL)
+    {
+      do
+	{
+	  _printKEY (pKey);
+	  pKey_pred = pKey;
+	  pKey = pKey->next;
+	}
+      while (pKey != pKey_pred);
+    }
+}*/
+
+/******************************************************
+ * NOM:                                               *
+ *                  _printKEY                         *
+ * SPECIFICATION:                                     *
+ * affiche a l'ecran le contenu de structure SECTION  *
+ * ARGUMENTS:                                         *
+ *  pointeur sur la structure SECTION                 *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ ******************************************************/
+/*
+ * void
+_printKEY (KEY * pKey)
+{
+  printf ("%s=%s\n", pKey->name, pKey->value);
+}*/
+
+/******************************************************
+ * NOM:                                               *
+ *                  printINI                          *
+ * SPECIFICATION:                                     *
+ * affiche a l'ecran le contenu du fichier .ini       *
+ * ARGUMENTS:                                         *
+ *  nom du fichier                                    *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ ******************************************************/
+
+/*void
+printINI (char *file)
+{
+  INI *pIni = NULL;
+  TRY
+  {
+    pIni = _loadINI (file);
+  }
+  CATCH (ERR_MALLOC)
+  {
+    printf ("Erreur d'allocation memoire en chargeant le fichier .ini:%s\n",
+	    file);
+    exit (EXIT_FAILURE);
+  }
+  CATCH (ERR_FOPEN)
+  {
+    printf ("Erreur en ouvrant le fichier .ini:%s\n", file);
+    exit (EXIT_FAILURE);
+  }
+  ENDTRY;
+  _printINI (pIni);
+  free (pIni);
+}*/
+
+/******************************************************
+ * NOM:                 jumpline                      *
+ * SPECIFICATION:                                     *
+ * fonction permettant de sauter des lignes dans le   *
+ * fichier a partir de la position courante dans le   *
+ * fichier                                            *
+ * ARGUMENTS:                                         *
+ * nombre de lignes a saute, pointeur sur le fichier  *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE: nombre de lignes sautees         *
+ ******************************************************/
+
+int
+jumpline (int nbline, FILE * pfile)
+{
+    int compteur = 0, c;
+
+    while ((compteur < nbline) && ((c = getc (pfile)) != EOF))
+    {
+        if (c == '\n')
+            compteur++;
+    }
+    return (compteur);
+}
+
+/******************************************************
+ * NOM:                readline                       *
+ * SPECIFICATION:                                     *
+ * recupere la ligne courante du fichier et renvoie le*
+ * nombre de caracteres lus                           *
+ * ARGUMENTS:                                         *
+ * pointeur sur le fichier a lire                     *
+ * pointeur sur le tableau recevant la ligne          *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ * nombre de caracteres lus                           *
+ ******************************************************/
+int
+readline (FILE * pfile, char *tab)
+{
+    int nbchar = 0;
+    char c;
+    while ((c = getc (pfile)) != '\n')
+    {
+        if (c == EOF)
+        {
+            break;
+        }
+        tab[nbchar++] = c;
+    }
+    tab[nbchar] = '\0';
+
+    while (nbchar>0 && tab[nbchar-1]==' ') {
+        tab[--nbchar] = '\0';
+    }
+
+    while (tab[0]==' ') for (int i=1; i<=nbchar; i++) tab[i-1]=tab[i];
+
+    if (c == EOF) nbchar=-1;
+
+    return (nbchar);
+}
+
+/******************************************************
+ * NOM:                m_malloc                       *
+ * SPECIFICATION:                                     *
+ *  clone de malloc renvoyant une exception           *
+ * ARGUMENTS:                                         *
+ * ENVIRONNEMENT:                                     *
+ * VALEUR RETOURNEE:                                  *
+ ******************************************************/
+
+/*
+void * m_malloc (size_t size)
+{
+  void *ptr = malloc (size);
+  if (ptr == NULL)
+    THROW (ERR_MALLOC);
+  else
+    return ptr;
+}*/
Index: /BAORadio/libindi/libindi/drivers/telescope/filetools.h
===================================================================
--- /BAORadio/libindi/libindi/drivers/telescope/filetools.h	(revision 620)
+++ /BAORadio/libindi/libindi/drivers/telescope/filetools.h	(revision 620)
@@ -0,0 +1,109 @@
+/*******************************************************
+                          filetools.h
+                          -----------
+    begin                : Wed Dec 13 2000
+    copyright            : (C) 2000 by Sylvain Le Petit 
+    email                : sylvainlepetit@wanadoo.fr
+ *******************************************************/
+#include <stdio.h>
+#include <string.h>
+#include "exception.h"
+/* Structures de donnees */
+
+
+typedef struct section
+{
+  char *name;
+  struct key *fils;
+  struct ini *parent;
+  struct section *prev;
+  struct section *next;
+
+}
+SECTION;
+
+typedef struct key
+{
+  char *name;
+  char *value;
+  SECTION *parent;
+  struct key *prev;
+  struct key *next;
+}
+KEY;
+
+typedef struct ini
+{
+  char *fileName;
+  SECTION *fils;
+}
+INI;
+
+/* declaration des prototypes*/
+ /*PUBLIC*/ int jumpline (int nbline, FILE * pfile);
+int readline (FILE * pfile, char *tab);
+/*************************************************************************
+gestion des fichier .ini
+**************************************************************************/
+
+int readINI (char *section, char *key, char **ppStr, char *fileName);
+/*******************************************************************************
+ lire une valeur
+
+section: nom de la section
+key : nom de la cle
+ppStr: adresse du pointeur sur la valeur de la cle retour, NULL si pas trouve, memoire allouee dans la fonction
+fileName : nom du fichier contenant les cles, pas forcement xxx.ini c'est pas obligatoire
+
+**********************************************************************************/
+int readINI (const char *sectionName, const char *pKeyName, char **ppStr, const char *fileName);
+
+char *writeINI (char *section, char *key, char *pKeyValue, char *fileName);
+/*******************************************************************************
+  ecrire une cle avec sa valeur, que se soit une nouvelle cle ou un mise a jour
+c'est pareil
+
+section: nom de la section
+key : nom de la cle
+pKeyValue: valeur de la cle, evitez de mettre NULL pas encore tester ce cas limite
+fileName : nom du fichier contenant les cles, pas forcement xxx.ini c'est pas obligatoire
+
+ *******************************************************************************/
+
+int delINI (char *sectionName, char *pKeyName, char **ppStr, char *fileName);
+/*************************************************************************/
+/* permet de supprimer une cle ou une section complete                   */
+/* >suppression d'une cle, donner le nomde la section et le nom de la cle*/
+/*  si la section est vide elle est supprimee                            */
+/* >suppression d'une section complete, mettre NULL comme nom de cle     */
+/*************************************************************************/
+
+void printINI (char *fileName);
+/*****************************************************************/
+/*  permet d'afficher le contenu du fichier .ini, seulement les: */
+/*  [section]                                                    */
+/*  cle=valeur                                                   */
+/*****************************************************************/
+
+
+
+/*PRIVATE: ne pas utiliser directement*/
+int _saveINI (INI * ini);
+INI *_loadINI (char *fileName);
+void _printINI (INI * pIni);
+void _printSECTION (SECTION * pSection);
+void _printKEY (KEY * pKey);
+KEY *_newKEY (char *pKeyName, char *pKeyValue);
+SECTION *_newSECTION (char *pSectionName);
+SECTION *_findSECTION (INI * pIni, char *pSectionName);
+KEY *_findKEY (SECTION * pSection, char *pKeyName);
+KEY *_lastKEY (SECTION * pSection);
+SECTION *_lastSECTION (INI * pIni);
+SECTION *_addSECTION (INI * pIni, SECTION * pSection);
+KEY *_addKEY (SECTION * pSection, KEY * pKey);
+int _isKey (char *str);
+void *m_malloc (size_t size);	/*renvoi l'exception ERR_MALLOC */
+void _freeKEY (KEY * pKey);
+void _freeSECTION (SECTION * pSection);
+int _delKEY (KEY * pKey);
+int _delSECTION (SECTION * pSection);
