ECode.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820
  1. /***********************************/
  2. /** Easy Coding **/
  3. /**Category : Snippets Collection **/
  4. /**@author Eiyeron **/
  5. /**@contact eiyeron@gmail.com **/
  6. /**@file ECode.c **/
  7. /**Version : 1.11 **/
  8. /**Date of creation : 06/28/2011 **/
  9. /***********************************/
  10. #include "ECode.h"
  11. /******************************/
  12. /** Dependencies management **/
  13. /******************************/
  14. #ifdef EASY_ALL
  15. #define EASY_MODEL
  16. #define EASY_STRING
  17. #define EASY_2STR
  18. #define EASY_2NUM
  19. #define EASY_2HEX
  20. #define EASY_BITS
  21. #define EASY_KEYS
  22. #define EASY_OTHERS
  23. #endif
  24. #ifdef EASY_MODEL
  25. #define EASY_ISEMULATOR
  26. #define EASY_ISG35P
  27. #define EASY_ISG75
  28. #define EASY_ISG85
  29. #define EASY_ISG85SD
  30. #define EASY_ISG95
  31. #define EASY_MODELDETECTOR
  32. #define EASY_HASSD
  33. #endif
  34. #ifdef EASY_STRING
  35. #define EASY_TOLOWER
  36. #define EASY_TOUPPER
  37. #define EASY_STRMIRROR
  38. #define EASY_STRROTATE
  39. #define EASY_PRINTF
  40. #define EASY_PRINTN
  41. #endif
  42. #ifdef EASY_2STR
  43. #define EASY_CHAR2STR
  44. #define EASY_UCHAR2STR
  45. #define EASY_INT2STR
  46. #define EASY_UINT2STR
  47. #define EASY_FLOAT2STR
  48. #endif
  49. #ifdef EASY_2NUM
  50. #define EASY_STR2CHAR
  51. #define EASY_STR2UCHAR
  52. #define EASY_STR2INT
  53. #define EASY_STR2UINT
  54. #endif
  55. #ifdef EASY_2HEX
  56. #define EASY_CHAR2HEX
  57. #define EASY_INT2HEX
  58. #endif
  59. #ifdef EASY_BITS
  60. #define EASY_READ_BIT_CHAR
  61. #define EASY_UP_BIT_CHAR
  62. #define EASY_DOWN_BIT_CHAR
  63. #define EASY_INVERSE_BIT_CHAR
  64. #define EASY_READ_BIT_INT
  65. #define EASY_UP_BIT_INT
  66. #define EASY_DOWN_BIT_INT
  67. #define EASY_INVERSE_BIT_INT
  68. #endif
  69. #ifdef EASY_KEYS
  70. #define EASY_KEY_DOWN
  71. #define EASY_KEY_UP
  72. #define EASY_ANY_KEY
  73. #endif
  74. #ifdef EASY_OTHERS
  75. #define EASY_INPUT
  76. #define EASY_NUMARRAY_CHAR
  77. #define EASY_NUMARRAY_INT
  78. #endif
  79. #ifdef EASY_KEY_UP
  80. #define EASY_KEY_DOWN
  81. #endif
  82. #ifdef EASY_FLOAT2STR
  83. #define EASY_INT2STR
  84. #endif
  85. #ifdef EASY_INPUT
  86. #include "fxlib.h"
  87. #endif
  88. #ifdef EASY_PRINTF
  89. #include "fxlib.h"
  90. #endif
  91. #ifdef EASY_PRINTN
  92. #include "fxlib.h"
  93. #endif
  94. #include "fxlib.h"
  95. /***************/
  96. /** Functions **/
  97. /***************/
  98. static int SysCallCode[] = {0xD201422B,0x60F20000,0x80010070};
  99. static int (*SysCall)( int R4, int R5, int R6, int R7, int FNo ) = (void*)&SysCallCode; // Elles sont en static, car je ne vais pas encore publier la liste des syscalls "utiles"
  100. #ifdef EASY_ISEMULATOR
  101. char isEmulator()
  102. {
  103. return !( *(int*)0x80000300 );
  104. }
  105. #endif
  106. #ifdef EASY_ISG35P
  107. char isG35p75()
  108. {
  109. return ( *(int*)0x80000300 == 0x33363246 ) && ( *(char*)0x8024FEE0 == 0xB4393341);
  110. }
  111. #endif
  112. #ifdef EASY_ISG75
  113. char isG75()
  114. {
  115. return ( *(int*)0x80000300 == 0xFAE0FB2C && *(char*)0x8024FEE0 == 0x4BC8053F);
  116. }
  117. #endif
  118. #ifdef EASY_ISG85
  119. char isG85()
  120. {
  121. return ( *(int*)0x80000300 == 0x80005D7C );
  122. }
  123. #endif
  124. #ifdef EASY_ISG85SD
  125. char isG85SD()
  126. {
  127. return *(int*)((*SysCall)(0, 0, 0, 0, 1128));
  128. }
  129. #endif
  130. #ifdef EASY_ISG95
  131. char isG95()
  132. {
  133. return ( *(int*)0x80000300 == 0x34393342 );
  134. }
  135. #endif
  136. #ifdef EASY_MODELDETECTOR
  137. Model modelDetector()
  138. {
  139. int model = *(int*)0x80000300;
  140. switch(model)
  141. {
  142. case 0 :
  143. return EMULATOR;
  144. break;
  145. case 0x33363246:
  146. if ( *(int*)0x8024FEE0 == 0xB4393341)
  147. return G35;
  148. else return UNDEFINED;
  149. break;
  150. case 0x34393542:
  151. if((int*)((*SysCall)(0, 0, 0, 0, 1128))) return G75;
  152. else return G75;
  153. break;
  154. case 0x80005D7C :
  155. if((int*)((*SysCall)(0, 0, 0, 0, 1128))) return G85SD;
  156. else return G85;
  157. break;
  158. case 0x34393342 :
  159. return G95;
  160. break;
  161. default :
  162. return UNDEFINED;
  163. break;
  164. }
  165. }
  166. #endif
  167. #ifdef EASY_HASSD
  168. char hasSD()
  169. {
  170. return ( *(char*)((*SysCall)(0, 0, 0, 0, 1128)) );
  171. }
  172. #endif
  173. #ifdef EASY_TOLOWER/** OK */
  174. unsigned char* toLower(unsigned char* str)
  175. {
  176. int i;
  177. for(i=0; str[i] != '\0'; i++)
  178. {
  179. if(str[i] >= 'A' && str[i] <= 'Z')
  180. str[i] += 32;
  181. }
  182. return str;
  183. }
  184. #endif
  185. #ifdef EASY_TOUPPER/** OK */
  186. unsigned char* toUpper(unsigned char* str)
  187. {
  188. int i;
  189. for(i=0; str[i] != '\0' ; i++)
  190. {
  191. if(str[i] >= 'a' && str[i] <= 'z')
  192. str[i] -= 32;
  193. }
  194. return str;
  195. }
  196. #endif
  197. #ifdef EASY_STRMIRROR/** OK */
  198. unsigned char* strMirror(unsigned char* str)
  199. {
  200. int i, len;
  201. unsigned char tmp;
  202. for(len=0; str[len]!= '\0' ; len++);
  203. for(i=0; i< (int) len/2; i++)
  204. {
  205. tmp = str[len-i-1];
  206. str[len-i-1] = str[i];
  207. str[i] = tmp;
  208. }
  209. return str;
  210. }
  211. #endif
  212. #ifdef EASY_STRROTATE /** OK */
  213. unsigned char* strRotate(unsigned char* str, char mov)
  214. {
  215. int i, len;
  216. unsigned char tmp;
  217. for(len=0; str[len]!= '\0' ; len++);
  218. mov= mov%len;
  219. if(mov < 0)
  220. mov += len;
  221. if(mov == 0)
  222. return str;
  223. while(mov)
  224. {
  225. tmp = str[len-1];
  226. for(i=len-1;i>0;i--)
  227. str[i] = str[i-1];
  228. str[0] = tmp;
  229. mov--;
  230. }
  231. return str;
  232. }
  233. #endif
  234. #ifdef EASY_PRINTF/** OK */
  235. /*void printf(unsigned char x, unsigned char y, unsigned char* str, int mode)
  236. {
  237. locate(x,y);
  238. switch(mode)
  239. {
  240. case 0:
  241. Print(str);
  242. return;
  243. case 1:
  244. PrintRev(str);
  245. return;
  246. }
  247. }*/
  248. void printf(unsigned char x, unsigned char y, unsigned char* str, char mode)
  249. {
  250. locate(x,y);
  251. if(mode)
  252. PrintRev(str);
  253. else
  254. Print(str);
  255. }
  256. #endif
  257. #ifdef EASY_PRINTN/** OK */
  258. void printn(unsigned char x, unsigned char y, int n, char mode)
  259. {
  260. unsigned char c[12];
  261. intToStr(c, n);
  262. locate(x,y);
  263. if(mode)
  264. PrintRev(c);
  265. else
  266. Print(c);
  267. }
  268. #endif
  269. #ifdef EASY_INT2STR/** OK */
  270. unsigned char* intToStr(unsigned char* c, int n)
  271. {
  272. if(n==0)
  273. {
  274. c[0] = '0';
  275. c[1] = 0;
  276. }
  277. else
  278. {
  279. int i, l=0;
  280. if(n<0)
  281. {
  282. c[0] = '-';
  283. n = abs(n);
  284. l++;
  285. }
  286. for(i=n ; i ; i/=10)
  287. l++;
  288. c[l] = 0;
  289. for(i=n ; i ; i/=10)
  290. c[--l] = i%10+'0';
  291. }
  292. return c;
  293. }
  294. #endif
  295. #ifdef EASY_UINT2STR/** OK */
  296. unsigned char* uintToStr(unsigned char* c, unsigned int n)
  297. {
  298. if(n==0)
  299. {
  300. c[0] = '0';
  301. c[1] = 0;
  302. }
  303. else
  304. {
  305. unsigned int i, l=0;
  306. for(i=n ; i ; i/=10)
  307. l++;
  308. c[l] = 0;
  309. for(i=n ; i ; i/=10)
  310. c[--l] = i%10+'0';
  311. }
  312. return c;
  313. }
  314. #endif
  315. #ifdef EASY_CHAR2STR/** OK */
  316. unsigned char* charToStr(unsigned char* c, char n)
  317. {
  318. if(n==0)
  319. {
  320. c[0] = '0';
  321. c[1] = 0;
  322. }
  323. else
  324. {
  325. int i, l=0;
  326. if(n<0)
  327. {
  328. c[0] = '-';
  329. n = abs(n);
  330. l++;
  331. }
  332. for(i=n ; i ; i/=10)
  333. l++;
  334. c[l] = 0;
  335. for(i=n ; i ; i/=10)
  336. c[--l] = i%10+'0';
  337. }
  338. return c;
  339. }
  340. #endif
  341. #ifdef EASY_UCHAR2STR/** OK */
  342. unsigned char* ucharToStr(unsigned char* c, unsigned char n)
  343. {
  344. if(n==0)
  345. {
  346. c[0] = '0';
  347. c[1] = 0;
  348. }
  349. else
  350. {
  351. int i, l=0;
  352. /*if(n<0)
  353. {
  354. c[0] = '-';
  355. n = abs(n);
  356. l++;
  357. }*/
  358. for(i=n ; i ; i/=10)
  359. l++;
  360. c[l] = 0;
  361. for(i=n ; i ; i/=10)
  362. c[--l] = i%10+'0';
  363. }
  364. return c;
  365. }
  366. #endif
  367. #ifdef EASY_FLOAT2STR
  368. unsigned char* floatToStr(unsigned char* c, float f, int precision)
  369. {
  370. int i, n=0, index = 0;
  371. if(f<0)
  372. {
  373. f *=-1;
  374. c[0] = '-';
  375. index++;
  376. }
  377. i = f;
  378. intToStr((unsigned char*)((int)c+index), i);
  379. while(c[index])
  380. index++;
  381. if(f-i) {
  382. c[index] = '.';
  383. index++;
  384. i = f = (f-i)*10;
  385. while(f && n<precision) {
  386. c[index] = i;
  387. index++;
  388. n++;
  389. i = f = (f-i)*10;
  390. }
  391. c[index+1] = 0;
  392. }
  393. return c;
  394. }
  395. #endif
  396. #ifdef EASY_STR2CHAR
  397. char strToChar(unsigned char* c)
  398. {
  399. int i, start = 0;
  400. char n = 0;
  401. if(c[0] == '-')
  402. start++;
  403. for(i=start; c[i]; i++)
  404. {
  405. if(c[i]<='9' && c[i] >= '0')
  406. n = n*10+c[i] - '0';
  407. }
  408. if(start)
  409. n *= -1;
  410. return n;
  411. }
  412. #endif
  413. #ifdef EASY_STR2UCHAR
  414. unsigned char strToUchar(unsigned char* c)
  415. {
  416. int i = 0;
  417. char n = 0;
  418. for(i=0; c[i]; i++)
  419. {
  420. if(c[i]<='9' && c[i] >= '0')
  421. n = n*10+c[i] - '0';
  422. }
  423. return n;
  424. }
  425. #endif
  426. #ifdef EASY_STR2INT
  427. int strToInt(unsigned char* c)
  428. {
  429. int i,n = 0, start = 0;
  430. if(c[0] == '-')
  431. start++;
  432. for(i=start; c[i]; i++)
  433. {
  434. if(c[i]<='9' && c[i] >= '0')
  435. n = n*10+c[i] - '0';
  436. }
  437. if(start)
  438. n *= -1;
  439. return n;
  440. }
  441. #endif
  442. #ifdef EASY_STR2UINT
  443. unsigned int strToUint(unsigned char* c)
  444. {
  445. int i,n = 0;
  446. for(i=0; c[i]; i++)
  447. {
  448. if(c[i]<='9' && c[i] >= '0')
  449. n = n*10+c[i] - '0';
  450. }
  451. return n;
  452. }
  453. #endif
  454. #ifdef EASY_CHAR2HEX
  455. char* charToHex(char* result, unsigned char hex) // Needs an 3-char array ("xx\0")
  456. {
  457. char HEX1=hex/16;
  458. char HEX2=hex%16;
  459. if (HEX1<=9)
  460. HEX1+='0';
  461. else
  462. HEX1=HEX1-10+'a';
  463. if (HEX2<=9)
  464. HEX2+='0';
  465. else
  466. HEX2=HEX2-10+'a';
  467. result[0] = HEX1;
  468. result[1] = HEX2;
  469. result[2] = '\0';
  470. return result;
  471. }
  472. #endif
  473. #ifdef EASY_INT2HEX
  474. char* intToHex(char* result, unsigned int hex) // Needs an 9-char array ("xxxxxxxx\0")
  475. {
  476. int i;
  477. for(i=0 ; i<8 ; i++)
  478. {
  479. result[7-i] = (hex&15) + ((hex&15)>9 ? 'A'-10 : '0');
  480. hex >>= 4;
  481. }
  482. result[8] = '\0';
  483. return result;
  484. }
  485. #endif
  486. #ifdef EASY_READ_BIT_CHAR
  487. char readBit_char(char num, char index)
  488. {
  489. return !(num & 1<< (7 - index)) ==0;
  490. }
  491. #endif
  492. #ifdef EASY_INVERSE_BIT_CHAR
  493. char inverseBit_char(char num, char index)
  494. {
  495. return num ^ 1<<7-index;
  496. }
  497. #endif
  498. #ifdef EASY_UP_BIT_CHAR
  499. char upBit_char(char num, char index)
  500. {
  501. return num | 1<<7-index;
  502. }
  503. #endif
  504. #ifdef EASY_DOWN_BIT_CHAR
  505. char downBit_char(char num, char index)
  506. {
  507. return num & (~(1<<(7-index)));
  508. }
  509. #endif
  510. #ifdef EASY_READ_BIT_INT
  511. char readBit_int(int num, char index)
  512. {
  513. return (num & 1 << 31 - index)& 1;
  514. }
  515. #endif
  516. #ifdef EASY_INVERSE_BIT_INT
  517. int inverseBit_int(int num, char index)
  518. {
  519. return num ^ 1<<31-index;
  520. }
  521. #endif
  522. #ifdef EASY_UP_BIT_INT
  523. int upBit_int(int num, char index)
  524. {
  525. return num | 1<<31-index;
  526. }
  527. #endif
  528. #ifdef EASY_DOWN_BIT_INT
  529. int downBit_int(int num, char index)
  530. {
  531. return num & (~1<<31-index);
  532. }
  533. #endif
  534. // TODO : Foudn the new function to detect architecture instead of using versions.
  535. static void delay( void ) // Cette fonction n'est utilisée que pour KeyDown/Up, et elle n'est absolument pas utile ailleurs. D'où le static.
  536. {
  537. unsigned char i;
  538. for (i=0;i<5;i++);
  539. }
  540. #ifdef EASY_KEY_DOWN
  541. #ifndef OS2Change
  542. #define OS2Change
  543. #ifndef OS2Change_GetOS2
  544. #define OS2Change_GetOS2
  545. typedef int(*sc_i2cp2sip)(char*, char*, short int*, short int*);
  546. const unsigned int sc0015[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0015 };
  547. #define GlibGetOSVersionInfo (*(sc_i2cp2sip)sc0015)
  548. int OSVersionAsInt(void)
  549. {
  550. unsigned char mainversion;
  551. unsigned char minorversion;
  552. unsigned short release;
  553. unsigned short build;
  554. GlibGetOSVersionInfo( &mainversion, &minorversion, &release, &build );
  555. return ( ( mainversion << 24 ) & 0xFF000000 ) | ( ( minorversion << 16 ) & 0x00FF0000 ) | ( release & 0x0000FFFF );
  556. }
  557. #define isOS2 (OSVersionAsInt() >= 0x02020000)
  558. #define OS2(x,y) ((isOS2)?y:x)
  559. #endif
  560. #ifndef OS2Change_Keyboard
  561. #define OS2Change_Keyboard
  562. unsigned char CheckKeyRow(unsigned char code)
  563. {
  564. unsigned char result=0;
  565. short*PORTB_CTRL=(void*)0xA4000102;
  566. short*PORTM_CTRL=(void*)0xA4000118;
  567. char*PORTB=(void*)0xA4000122;
  568. char*PORTM=(void*)0xA4000138;
  569. char*PORTA=(void*)0xA4000120;
  570. short smask;
  571. char cmask;
  572. unsigned char column, row;
  573. column = code>>4;
  574. row = code &0x0F;
  575. smask = 0x0003 << (( row %8)*2);
  576. cmask = ~( 1 << ( row %8) );
  577. if(row <8)
  578. {
  579. *PORTB_CTRL = 0xAAAA ^ smask;
  580. *PORTM_CTRL = (*PORTM_CTRL & 0xFF00 ) | 0x00AA;
  581. delay();
  582. *PORTB = cmask;
  583. *PORTM = (*PORTM & 0xF0 ) | 0x0F;
  584. }
  585. else
  586. {
  587. *PORTB_CTRL = 0xAAAA;
  588. *PORTM_CTRL = ((*PORTM_CTRL & 0xFF00 ) | 0x00AA) ^ smask;
  589. delay();
  590. *PORTB = 0xFF;
  591. *PORTM = (*PORTM & 0xF0 ) | cmask;
  592. }
  593. delay();
  594. result = (~(*PORTA))>>column & 1;
  595. delay();
  596. *PORTB_CTRL = 0xAAAA;
  597. *PORTM_CTRL = (*PORTM_CTRL & 0xFF00 ) | 0x00AA;
  598. delay();
  599. *PORTB_CTRL = 0x5555;
  600. *PORTM_CTRL = (*PORTM_CTRL & 0xFF00 ) | 0x0055;
  601. delay();
  602. return result;
  603. }
  604. unsigned char KeyDown(unsigned char keycode)
  605. {
  606. unsigned short key[8];
  607. const unsigned short* keyboardregister = (unsigned short*)0xA44B0000;
  608. if(isOS2)
  609. {
  610. unsigned char row = keycode%10;
  611. memcpy(key, keyboardregister, sizeof(unsigned short) << 3);
  612. return (0 != (key[row >> 1] & 1 << keycode / 10 - 1 + ((row & 1) << 3)));
  613. }
  614. else
  615. {
  616. return CheckKeyRow((keycode % 10) + ((keycode / 10 - 1) << 4));
  617. }
  618. }
  619. unsigned char GetKeyMod(unsigned int *key)
  620. {
  621. unsigned char x, ret;
  622. ret = GetKey(key);
  623. for(x = 0; x < 80; x++)
  624. {
  625. if(KeyDown(x))
  626. {
  627. *key = x;
  628. break;
  629. }
  630. }
  631. return ret;
  632. }
  633. #endif
  634. #endif
  635. #endif
  636. #ifdef EASY_KEY_UP
  637. unsigned char KeyUp(unsigned char code)
  638. {
  639. return !(KeyDown(code));
  640. }
  641. #endif
  642. #ifdef EASY_ANY_KEY
  643. unsigned char AnyKey()
  644. {
  645. return *((unsigned char*)0xA4000120)!=0xFF;
  646. }
  647. #endif
  648. #ifdef EASY_INPUT
  649. char* input(char* c, int x, int y, int longueur, char nb)
  650. {
  651. int i, key, curseur=0;
  652. char lettre;
  653. locate(x, y);
  654. Print("[");
  655. locate(x+longueur+1, y);Print("]");
  656. while(1)
  657. {
  658. locate(x+1, y);
  659. Print(c);
  660. if(strlen(c)<longueur) Print(" ");
  661. Bdisp_DrawLineVRAM((x+curseur)*6, (y-1)*8, (x+curseur)*6, (y-1)*8+6);
  662. Bdisp_DrawLineVRAM((x+curseur)*6+1, (y-1)*8, (x+curseur)*6+1, (y-1)*8+6);
  663. GetKey(&key);
  664. lettre=0;
  665. switch(key)
  666. {
  667. case KEY_CTRL_LEFT: if(curseur) curseur--; break;
  668. case KEY_CTRL_RIGHT: if(c[curseur]) curseur++; break;
  669. case KEY_CTRL_DEL:
  670. if(curseur)
  671. {
  672. for(i=curseur ; i<longueur ; i++)
  673. c[i-1] = c[i];
  674. locate(x+curseur+1, y);Print(" ");
  675. curseur--;
  676. }
  677. else
  678. {
  679. for(i=0 ; c[i] ; i++)
  680. c[i] = c[i+1];
  681. }
  682. break;
  683. case KEY_CTRL_EXIT: c[0] = 0; return c;
  684. case KEY_CTRL_QUIT: c[0] = 0; return c;
  685. case KEY_CTRL_EXE: return c;
  686. case KEY_CHAR_PLUS: lettre='+'; break;
  687. case KEY_CHAR_MINUS: lettre='-'; break;
  688. case KEY_CHAR_POW: lettre='^'; break;
  689. case KEY_CTRL_XTT: lettre='X'; break;
  690. default:
  691. if(nb)
  692. {
  693. if(key>='0' && key<='9')
  694. lettre=key;
  695. }
  696. else if(key>0 && key<256)
  697. lettre=key;
  698. }
  699. if(lettre && curseur<longueur)
  700. {
  701. for(i=longueur-1 ; i>=curseur ; i--)
  702. c[i] = c[i-1];
  703. c[curseur] = lettre;
  704. curseur++;
  705. }
  706. }
  707. }
  708. #endif
  709. #ifdef EASY_NUMARRAY_CHAR
  710. int numArray_char(char* arr)
  711. {
  712. return sizeof(arr);
  713. }
  714. #endif
  715. #ifdef EASY_NUMARRAY_INT
  716. int numArray_int(char* arr)
  717. {
  718. return sizeof(arr)/4;
  719. }
  720. #endif