@@ -392,18 +392,6 @@ static int parse_int_list(const char *ptr, void *vals, int max_count, int type)
392392 return max_count - count ;
393393}
394394
395- static void create_element (struct elem * elem , int type , s16 * data )
396- {
397- //int x, int y, int src, int e0, int e1, int e2)
398- ELEM_SET_X (* elem , data [0 ]);
399- ELEM_SET_Y (* elem , data [1 ]);
400- ELEM_SET_TYPE (* elem , type );
401- elem -> src = data [5 ];
402- elem -> extra [0 ] = data [2 ];
403- elem -> extra [1 ] = data [3 ];
404- elem -> extra [2 ] = data [4 ];
405- }
406-
407395static int layout_ini_handler (void * user , const char * section , const char * name , const char * value )
408396{
409397 struct Model * m = (struct Model * )user ;
@@ -453,20 +441,22 @@ static int layout_ini_handler(void* user, const char* section, const char* name,
453441 return 1 ;
454442#endif
455443 for (idx = 0 ; idx < NUM_ELEMS ; idx ++ ) {
456- if (! ELEM_USED ( Model .pagecfg2 .elem [idx ]) )
444+ if (Model .pagecfg2 .elem [idx ]. type == ELEM_NONE )
457445 break ;
458446 }
459-
460447 if (idx == NUM_ELEMS ) {
461448 printf ("No free element available (max = %d)\n" , NUM_ELEMS );
462449 return 1 ;
463450 }
451+
464452 int type ;
465- for (type = 0 ; type < ELEM_LAST ; type ++ )
453+ for (type = ELEM_NONE + 1 ; type < ELEM_LAST ; type ++ ) {
466454 if (mapstrcasecmp (name , GetElemName (type )) == 0 )
467455 break ;
456+ }
468457 if (type == ELEM_LAST )
469458 return 1 ;
459+
470460 int count = 5 ;
471461 s16 data [6 ] = {0 };
472462 const char * ptr = parse_partial_int_list (value , data , & count , S16 );
@@ -476,12 +466,20 @@ static int layout_ini_handler(void* user, const char* section, const char* name,
476466 printf ("Could not parse coordinates from %s=%s\n" , name ,value );
477467 return 1 ;
478468 }
469+
470+ struct elem * cur_elem ;
471+ cur_elem = & Model .pagecfg2 .elem [idx ];
472+
473+ memset (cur_elem , 0 , sizeof (struct elem ));
474+ cur_elem -> x = data [0 ];
475+ cur_elem -> y = data [1 ];
476+ cur_elem -> type = type ;
477+
479478 switch (type ) {
480479 //case ELEM_MODEL: //x, y
481480 case ELEM_VTRIM : //x, y, src
482481 case ELEM_HTRIM : //x, y, src
483- data [5 ] = data [2 ];
484- data [2 ] = 0 ;
482+ cur_elem -> src = data [2 ];
485483 break ;
486484 case ELEM_SMALLBOX : //x, y, src
487485 case ELEM_BIGBOX : //x. y. src
@@ -522,7 +520,7 @@ static int layout_ini_handler(void* user, const char* section, const char* name,
522520 }
523521 if (src == -1 )
524522 src = 0 ;
525- data [ 5 ] = src ;
523+ cur_elem -> src = src ;
526524 break ;
527525 }
528526 case ELEM_BAR : //x, y, src
@@ -532,24 +530,28 @@ static int layout_ini_handler(void* user, const char* section, const char* name,
532530 u8 src = get_source (section , ptr );
533531 if (src < NUM_INPUTS )
534532 src = 0 ;
535- data [ 5 ] = src - NUM_INPUTS ;
533+ cur_elem -> src = src - NUM_INPUTS ;
536534 break ;
537535 }
538536 case ELEM_TOGGLE : //x, y, tgl0, tgl1, tgl2, src
539537 {
540538 if (count )
541539 return 1 ;
540+ cur_elem -> extra .ico [0 ] = data [2 ];
541+ cur_elem -> extra .ico [1 ] = data [3 ];
542+ cur_elem -> extra .ico [2 ] = data [4 ];
543+
542544 for (int j = 0 ; j <= NUM_SOURCES ; j ++ ) {
543545 char cmp [10 ];
544546 if (mapstrcasecmp (INPUT_SourceNameAbbrevSwitchReal (cmp , j ), ptr + 1 ) == 0 ) {
545- data [ 5 ] = j ;
547+ cur_elem -> src = j ;
546548 break ;
547549 }
548550 }
549551 break ;
550552 }
551553 }
552- create_element ( & m -> pagecfg2 . elem [ idx ], type , data );
554+
553555 return 1 ;
554556}
555557
@@ -1382,12 +1384,13 @@ u8 CONFIG_WriteModel(u8 model_num) {
13821384 }
13831385 fprintf (fh , "[%s]\n" , SECTION_GUI );
13841386 for (idx = 0 ; idx < NUM_ELEMS ; idx ++ ) {
1385- if (! ELEM_USED (Model .pagecfg2 .elem [idx ]))
1387+ struct elem * cur_elem = & Model .pagecfg2 .elem [idx ];
1388+ if (cur_elem -> type == ELEM_NONE )
13861389 break ;
1387- int src = Model . pagecfg2 . elem [ idx ]. src ;
1388- int x = ELEM_X ( Model . pagecfg2 . elem [ idx ]) ;
1389- int y = ELEM_Y ( Model . pagecfg2 . elem [ idx ]) ;
1390- int type = ELEM_TYPE ( Model . pagecfg2 . elem [ idx ]) ;
1390+ int src = cur_elem -> src ;
1391+ int x = cur_elem -> x ;
1392+ int y = cur_elem -> y ;
1393+ int type = cur_elem -> type ;
13911394 const char * elename = GetElemName (type );
13921395 switch (type ) {
13931396 case ELEM_SMALLBOX :
@@ -1400,9 +1403,9 @@ u8 CONFIG_WriteModel(u8 model_num) {
14001403 break ;
14011404 case ELEM_TOGGLE :
14021405 fprintf (fh , "%s=%d,%d,%d,%d,%d,%s\n" , elename , x , y ,
1403- Model . pagecfg2 . elem [ idx ]. extra [0 ],
1404- Model . pagecfg2 . elem [ idx ]. extra [1 ],
1405- INPUT_NumSwitchPos (src ) == 2 ? 0 : Model . pagecfg2 . elem [ idx ]. extra [2 ],
1406+ cur_elem -> extra . ico [0 ],
1407+ cur_elem -> extra . ico [1 ],
1408+ INPUT_NumSwitchPos (src ) == 2 ? 0 : cur_elem -> extra . ico [2 ],
14061409 INPUT_SourceNameAbbrevSwitchReal (file , src ));
14071410 break ;
14081411 case ELEM_HTRIM :
@@ -1498,7 +1501,7 @@ u8 CONFIG_ReadModel(u8 model_num) {
14981501 if (CONFIG_IniParse (file , ini_handler , & Model )) {
14991502 printf ("Failed to parse Model file: %s\n" , file );
15001503 }
1501- if (! ELEM_USED ( Model .pagecfg2 .elem [0 ]) )
1504+ if (Model .pagecfg2 .elem [0 ]. type == ELEM_NONE )
15021505 CONFIG_ReadLayout ("layout/default.ini" );
15031506 if (! PROTOCOL_HasPowerAmp (Model .protocol ))
15041507 Model .tx_power = TXPOWER_150mW ;
0 commit comments