X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Finit.c;h=09804ee18381b0a84750a64338267125b2aa6a5d;hp=dd7f94d45dc9de35f19e02ef3542b201b5936a19;hb=2fe139696892ee39f804b5c7315b8f0977ab01ec;hpb=67758fda340e825f188fc6a4caad03381bf031dc diff --git a/src/init.c b/src/init.c index dd7f94d4..09804ee1 100644 --- a/src/init.c +++ b/src/init.c @@ -18,6 +18,8 @@ #include "sound.h" #include "screens.h" #include "editor.h" +#include "game.h" +#include "tape.h" #include "tools.h" #include "files.h" #include "joystick.h" @@ -48,6 +50,7 @@ static void InitSoundServer(void); static void InitWindow(int, char **); static void InitGfx(void); static void LoadGfx(int, struct PictureFileInfo *); +static void InitGadgets(void); static void InitElementProperties(void); void OpenAll(int argc, char *argv[]) @@ -67,7 +70,6 @@ void OpenAll(int argc, char *argv[]) InitSoundServer(); InitJoysticks(); InitRND(NEW_RANDOMIZE); - InitLevelEditorGadgets(); signal(SIGINT, CloseAllAndExit); signal(SIGTERM, CloseAllAndExit); @@ -80,6 +82,7 @@ void OpenAll(int argc, char *argv[]) InitGfx(); InitElementProperties(); + InitGadgets(); DrawMainMenu(); @@ -348,8 +351,8 @@ void InitWindow(int argc, char *argv[]) XSizeHints size_hints; XWMHints wm_hints; XClassHint class_hints; - char *window_name = WINDOWTITLE_STRING; - char *icon_name = WINDOWTITLE_STRING; + char *window_name = WINDOW_TITLE_STRING; + char *icon_name = WINDOW_TITLE_STRING; long window_event_mask; Atom proto_atom = None, delete_atom = None; #endif @@ -385,7 +388,7 @@ void InitWindow(int argc, char *argv[]) PropModePrepend, (unsigned char *) &delete_atom, 1); sprintf(icon_filename, "%s/%s/%s", - options.base_directory, GRAPHICS_DIRECTORY, + options.ro_base_directory, GRAPHICS_DIRECTORY, icon_pic.picture_filename); XReadBitmapFile(display,window,icon_filename, &icon_width,&icon_height, @@ -394,7 +397,7 @@ void InitWindow(int argc, char *argv[]) Error(ERR_EXIT, "cannot read icon bitmap file '%s'", icon_filename); sprintf(icon_filename, "%s/%s/%s", - options.base_directory, GRAPHICS_DIRECTORY, + options.ro_base_directory, GRAPHICS_DIRECTORY, icon_pic.picturemask_filename); XReadBitmapFile(display,window,icon_filename, &icon_width,&icon_height, @@ -436,9 +439,11 @@ void InitWindow(int argc, char *argv[]) XFree(iconName.value); /* Select event types wanted */ - window_event_mask = ExposureMask | StructureNotifyMask | FocusChangeMask | - ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | - KeyPressMask | KeyReleaseMask; + window_event_mask = + ExposureMask | StructureNotifyMask | FocusChangeMask | + ButtonPressMask | ButtonReleaseMask | PointerMotionMask | + PointerMotionHintMask | KeyPressMask | KeyReleaseMask; + XSelectInput(display, window, window_event_mask); #endif @@ -475,7 +480,8 @@ void InitGfx() { "Door", TRUE }, { "Heroes", TRUE }, { "Toons", TRUE }, - { "More", TRUE }, + { "SP", TRUE }, + { "DC", TRUE }, { "Font", FALSE }, { "Font2", FALSE } }; @@ -486,12 +492,28 @@ void InitGfx() { "RocksDoor", TRUE }, { "RocksHeroes", TRUE }, { "RocksToons", TRUE }, - { "RocksMore", TRUE }, + { "RocksSP", TRUE }, + { "RocksDC", TRUE }, { "RocksFont", FALSE }, { "RocksFont2", FALSE } }; #endif +#ifdef DEBUG +#if 0 + static struct PictureFileInfo test_pic1 = + { + "RocksFont2", + FALSE + }; + static struct PictureFileInfo test_pic2 = + { + "mouse", + FALSE + }; +#endif +#endif + static struct { int start; @@ -523,6 +545,15 @@ void InitGfx() { GFX_SPIELER4_RIGHT, 4 }, { GFX_SPIELER4_PUSH_LEFT, 4 }, { GFX_SPIELER4_PUSH_RIGHT, 4 }, + { GFX_SP_MURPHY, 1 }, + { GFX_MURPHY_GO_LEFT, 3 }, + { GFX_MURPHY_GO_RIGHT, 3 }, + { GFX_MURPHY_SNAP_UP, 1 }, + { GFX_MURPHY_SNAP_DOWN, 1 }, + { GFX_MURPHY_SNAP_RIGHT, 1 }, + { GFX_MURPHY_SNAP_LEFT, 1 }, + { GFX_MURPHY_PUSH_RIGHT, 1 }, + { GFX_MURPHY_PUSH_LEFT, 1 }, { GFX_GEBLUBBER, 4 }, { GFX_DYNAMIT, 7 }, { GFX_DYNABOMB, 4 }, @@ -537,8 +568,21 @@ void InitGfx() debug_print_timestamp(0, NULL); /* initialize timestamp function */ #endif +#ifdef DEBUG +#if 0 + printf("Test: Loading RocksFont2.pcx ...\n"); + LoadGfx(PIX_SMALLFONT,&test_pic1); + printf("Test: Done.\n"); + printf("Test: Loading mouse.pcx ...\n"); + LoadGfx(PIX_SMALLFONT,&test_pic2); + printf("Test: Done.\n"); +#endif +#endif + + + LoadGfx(PIX_SMALLFONT,&pic[PIX_SMALLFONT]); - DrawInitText(WINDOWTITLE_STRING,20,FC_YELLOW); + DrawInitText(WINDOW_TITLE_STRING,20,FC_YELLOW); DrawInitText(COPYRIGHT_STRING,50,FC_RED); #ifdef MSDOS DrawInitText("MSDOS version done by Guido Schulz",210,FC_BLUE); @@ -586,35 +630,11 @@ void InitGfx() int tile = tile_needs_clipping[i].start + j; int graphic = tile; int src_x, src_y; + int pixmap_nr; Pixmap src_pixmap; - if (graphic >= GFX_START_ROCKSSCREEN && - graphic <= GFX_END_ROCKSSCREEN) - { - src_pixmap = clipmask[PIX_BACK]; - graphic -= GFX_START_ROCKSSCREEN; - src_x = SX + (graphic % GFX_PER_LINE) * TILEX; - src_y = SY + (graphic / GFX_PER_LINE) * TILEY; - } - else if (graphic >= GFX_START_ROCKSHEROES && - graphic <= GFX_END_ROCKSHEROES) - { - src_pixmap = clipmask[PIX_HEROES]; - graphic -= GFX_START_ROCKSHEROES; - src_x = (graphic % HEROES_PER_LINE) * TILEX; - src_y = (graphic / HEROES_PER_LINE) * TILEY; - } - else if (graphic >= GFX_START_ROCKSFONT && - graphic <= GFX_END_ROCKSFONT) - { - src_pixmap = clipmask[PIX_BIGFONT]; - graphic -= GFX_START_ROCKSFONT; - src_x = (graphic % FONT_CHARS_PER_LINE) * TILEX; - src_y = (graphic / FONT_CHARS_PER_LINE) * TILEY + - FC_SPECIAL1 * FONT_LINES_PER_FONT * TILEY; - } - else - break; + getGraphicSource(graphic, &pixmap_nr, &src_x, &src_y); + src_pixmap = clipmask[pixmap_nr]; tile_clipmask[tile] = XCreatePixmap(display, window, TILEX,TILEY, 1); @@ -678,7 +698,7 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) sprintf(basefilename, "%s%s", pic->picture_filename, picture_ext); DrawInitText(basefilename, 150, FC_YELLOW); sprintf(filename, "%s/%s/%s", - options.base_directory, GRAPHICS_DIRECTORY, basefilename); + options.ro_base_directory, GRAPHICS_DIRECTORY, basefilename); #ifdef MSDOS rest(100); @@ -754,7 +774,7 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) sprintf(basefilename, "%s%s", pic->picture_filename, picturemask_ext); DrawInitText(basefilename, 150, FC_YELLOW); sprintf(filename, "%s/%s/%s", - options.base_directory, GRAPHICS_DIRECTORY, basefilename); + options.ro_base_directory, GRAPHICS_DIRECTORY, basefilename); #if DEBUG_TIMING debug_print_timestamp(1, NULL); /* initialize timestamp function */ @@ -789,6 +809,14 @@ void LoadGfx(int pos, struct PictureFileInfo *pic) } } +void InitGadgets() +{ + CreateLevelEditorGadgets(); + CreateGameButtons(); + CreateTapeButtons(); + CreateToolButtons(); +} + void InitElementProperties() { int i,j; @@ -817,7 +845,11 @@ void InitElementProperties() EL_SCHLUESSEL1, EL_SCHLUESSEL2, EL_SCHLUESSEL3, - EL_SCHLUESSEL4 + EL_SCHLUESSEL4, + EL_EM_KEY_1, + EL_EM_KEY_2, + EL_EM_KEY_3, + EL_EM_KEY_4 }; static int ep_schluessel_num = sizeof(ep_schluessel)/sizeof(int); @@ -830,7 +862,17 @@ void InitElementProperties() EL_PFORTE1X, EL_PFORTE2X, EL_PFORTE3X, - EL_PFORTE4X + EL_PFORTE4X, + EL_EM_GATE_1, + EL_EM_GATE_2, + EL_EM_GATE_3, + EL_EM_GATE_4, + EL_EM_GATE_1X, + EL_EM_GATE_2X, + EL_EM_GATE_3X, + EL_EM_GATE_4X, + EL_SWITCHGATE_OPEN, + EL_SWITCHGATE_CLOSED }; static int ep_pforte_num = sizeof(ep_pforte)/sizeof(int); @@ -885,11 +927,39 @@ void InitElementProperties() EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, EL_SP_TERMINAL, - EL_SP_EXIT + EL_SP_EXIT, + EL_INVISIBLE_STEEL, + EL_BELT1_SWITCH_L, + EL_BELT1_SWITCH_M, + EL_BELT1_SWITCH_R, + EL_BELT2_SWITCH_L, + EL_BELT2_SWITCH_M, + EL_BELT2_SWITCH_R, + EL_BELT3_SWITCH_L, + EL_BELT3_SWITCH_M, + EL_BELT3_SWITCH_R, + EL_BELT4_SWITCH_L, + EL_BELT4_SWITCH_M, + EL_BELT4_SWITCH_R, + EL_LIGHT_SWITCH_OFF, + EL_LIGHT_SWITCH_ON, + EL_SIGN_EXCLAMATION, + EL_SIGN_RADIOACTIVITY, + EL_SIGN_STOP, + EL_SIGN_WHEELCHAIR, + EL_SIGN_PARKING, + EL_SIGN_ONEWAY, + EL_SIGN_HEART, + EL_SIGN_TRIANGLE, + EL_SIGN_ROUND, + EL_SIGN_EXIT, + EL_SIGN_YINYANG, + EL_SIGN_OTHER, + EL_STEEL_SLANTED }; static int ep_solid_num = sizeof(ep_solid)/sizeof(int); - static int ep_massiv[] = + static int ep_massive[] = { EL_BETON, EL_SALZSAEURE, @@ -906,6 +976,16 @@ void InitElementProperties() EL_PFORTE2X, EL_PFORTE3X, EL_PFORTE4X, + EL_EM_GATE_1, + EL_EM_GATE_2, + EL_EM_GATE_3, + EL_EM_GATE_4, + EL_EM_GATE_1X, + EL_EM_GATE_2X, + EL_EM_GATE_3X, + EL_EM_GATE_4X, + EL_SWITCHGATE_OPEN, + EL_SWITCHGATE_CLOSED, EL_SP_HARD_GRAY, EL_SP_HARD_GREEN, EL_SP_HARD_BLUE, @@ -917,8 +997,36 @@ void InitElementProperties() EL_SP_HARD_BASE4, EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, + EL_INVISIBLE_STEEL, + EL_BELT1_SWITCH_L, + EL_BELT1_SWITCH_M, + EL_BELT1_SWITCH_R, + EL_BELT2_SWITCH_L, + EL_BELT2_SWITCH_M, + EL_BELT2_SWITCH_R, + EL_BELT3_SWITCH_L, + EL_BELT3_SWITCH_M, + EL_BELT3_SWITCH_R, + EL_BELT4_SWITCH_L, + EL_BELT4_SWITCH_M, + EL_BELT4_SWITCH_R, + EL_LIGHT_SWITCH_OFF, + EL_LIGHT_SWITCH_ON, + EL_SIGN_EXCLAMATION, + EL_SIGN_RADIOACTIVITY, + EL_SIGN_STOP, + EL_SIGN_WHEELCHAIR, + EL_SIGN_PARKING, + EL_SIGN_ONEWAY, + EL_SIGN_HEART, + EL_SIGN_TRIANGLE, + EL_SIGN_ROUND, + EL_SIGN_EXIT, + EL_SIGN_YINYANG, + EL_SIGN_OTHER, + EL_STEEL_SLANTED }; - static int ep_massiv_num = sizeof(ep_massiv)/sizeof(int); + static int ep_massive_num = sizeof(ep_massive)/sizeof(int); static int ep_slippery[] = { @@ -948,7 +1056,8 @@ void InitElementProperties() EL_SP_CHIP_RIGHT, EL_SP_CHIP_UPPER, EL_SP_CHIP_LOWER, - EL_SPEED_PILL + EL_SPEED_PILL, + EL_STEEL_SLANTED }; static int ep_slippery_num = sizeof(ep_slippery)/sizeof(int); @@ -978,6 +1087,14 @@ void InitElementProperties() EL_PFORTE2X, EL_PFORTE3X, EL_PFORTE4X, + EL_EM_GATE_1, + EL_EM_GATE_2, + EL_EM_GATE_3, + EL_EM_GATE_4, + EL_EM_GATE_1X, + EL_EM_GATE_2X, + EL_EM_GATE_3X, + EL_EM_GATE_4X, EL_AUSGANG_ZU, EL_AUSGANG_ACT, EL_AUSGANG_AUF, @@ -1005,7 +1122,9 @@ void InitElementProperties() EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, EL_SP_TERMINAL, - EL_SP_EXIT + EL_SP_EXIT, + EL_INVISIBLE_STEEL, + EL_STEEL_SLANTED }; static int ep_mauer_num = sizeof(ep_mauer)/sizeof(int); @@ -1045,6 +1164,10 @@ void InitElementProperties() EL_SCHLUESSEL2, EL_SCHLUESSEL3, EL_SCHLUESSEL4, + EL_EM_KEY_1, + EL_EM_KEY_2, + EL_EM_KEY_3, + EL_EM_KEY_4, EL_BOMBE, EL_KOKOSNUSS, EL_TROPFEN, @@ -1136,7 +1259,8 @@ void InitElementProperties() EL_SALZSAEURE, EL_SP_SNIKSNAK, EL_SP_ELECTRON, - EL_SP_BUG + EL_SP_BUG_ACTIVE, + EL_LANDMINE }; static int ep_dont_go_to_num = sizeof(ep_dont_go_to)/sizeof(int); @@ -1199,7 +1323,8 @@ void InitElementProperties() EL_SOKOBAN_OBJEKT, EL_SOKOBAN_FELD_LEER, EL_SOKOBAN_FELD_VOLL, - EL_SPIELFIGUR + EL_SPIELFIGUR, + EL_INVISIBLE_STEEL }; static int ep_sb_element_num = sizeof(ep_sb_element)/sizeof(int); @@ -1231,6 +1356,10 @@ void InitElementProperties() EL_SCHLUESSEL2, EL_SCHLUESSEL3, EL_SCHLUESSEL4, + EL_EM_KEY_1, + EL_EM_KEY_2, + EL_EM_KEY_3, + EL_EM_KEY_4, EL_PFORTE1, EL_PFORTE2, EL_PFORTE3, @@ -1239,7 +1368,15 @@ void InitElementProperties() EL_PFORTE2X, EL_PFORTE3X, EL_PFORTE4X, - EL_DYNAMIT_AUS, + EL_EM_GATE_1, + EL_EM_GATE_2, + EL_EM_GATE_3, + EL_EM_GATE_4, + EL_EM_GATE_1X, + EL_EM_GATE_2X, + EL_EM_GATE_3X, + EL_EM_GATE_4X, + EL_DYNAMITE_INACTIVE, EL_UNSICHTBAR, EL_BIRNE_AUS, EL_BIRNE_EIN, @@ -1297,16 +1434,45 @@ void InitElementProperties() EL_SP_HARD_BASE4, EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, - EL_SP_EXIT + EL_SP_EXIT, + EL_INVISIBLE_STEEL, + EL_BELT1_SWITCH_L, + EL_BELT1_SWITCH_M, + EL_BELT1_SWITCH_R, + EL_BELT2_SWITCH_L, + EL_BELT2_SWITCH_M, + EL_BELT2_SWITCH_R, + EL_BELT3_SWITCH_L, + EL_BELT3_SWITCH_M, + EL_BELT3_SWITCH_R, + EL_BELT4_SWITCH_L, + EL_BELT4_SWITCH_M, + EL_BELT4_SWITCH_R, + EL_SIGN_EXCLAMATION, + EL_SIGN_RADIOACTIVITY, + EL_SIGN_STOP, + EL_SIGN_WHEELCHAIR, + EL_SIGN_PARKING, + EL_SIGN_ONEWAY, + EL_SIGN_HEART, + EL_SIGN_TRIANGLE, + EL_SIGN_ROUND, + EL_SIGN_EXIT, + EL_SIGN_YINYANG, + EL_SIGN_OTHER, + EL_STEEL_SLANTED }; static int ep_inactive_num = sizeof(ep_inactive)/sizeof(int); static int ep_explosive[] = { EL_BOMBE, - EL_DYNAMIT, - EL_DYNAMIT_AUS, - EL_DYNABOMB, + EL_DYNAMITE_ACTIVE, + EL_DYNAMITE_INACTIVE, + EL_DYNABOMB_ACTIVE_1, + EL_DYNABOMB_ACTIVE_2, + EL_DYNABOMB_ACTIVE_3, + EL_DYNABOMB_ACTIVE_4, EL_DYNABOMB_NR, EL_DYNABOMB_SZ, EL_DYNABOMB_XL, @@ -1374,7 +1540,8 @@ void InitElementProperties() { EL_ERDREICH, EL_SP_BASE, - EL_SP_BUG + EL_SP_BUG, + EL_SAND_INVISIBLE }; static int ep_eatable_num = sizeof(ep_eatable)/sizeof(int); @@ -1419,18 +1586,105 @@ void InitElementProperties() EL_SP_HARD_BASE5, EL_SP_HARD_BASE6, EL_SP_CHIP_UPPER, - EL_SP_CHIP_LOWER + EL_SP_CHIP_LOWER, + /* additional elements that appeared in newer Supaplex levels */ + EL_UNSICHTBAR }; static int ep_sp_element_num = sizeof(ep_sp_element)/sizeof(int); - static long ep_bit[] = + static int ep_quick_gate[] = + { + EL_EM_GATE_1, + EL_EM_GATE_2, + EL_EM_GATE_3, + EL_EM_GATE_4, + EL_EM_GATE_1X, + EL_EM_GATE_2X, + EL_EM_GATE_3X, + EL_EM_GATE_4X, + EL_SP_PORT1_LEFT, + EL_SP_PORT2_LEFT, + EL_SP_PORT1_RIGHT, + EL_SP_PORT2_RIGHT, + EL_SP_PORT1_UP, + EL_SP_PORT2_UP, + EL_SP_PORT1_DOWN, + EL_SP_PORT2_DOWN, + EL_SP_PORT_X, + EL_SP_PORT_Y, + EL_SP_PORT_XY, + EL_SWITCHGATE_OPEN + }; + static int ep_quick_gate_num = sizeof(ep_quick_gate)/sizeof(int); + + static int ep_over_player[] = + { + EL_SP_PORT1_LEFT, + EL_SP_PORT2_LEFT, + EL_SP_PORT1_RIGHT, + EL_SP_PORT2_RIGHT, + EL_SP_PORT1_UP, + EL_SP_PORT2_UP, + EL_SP_PORT1_DOWN, + EL_SP_PORT2_DOWN, + EL_SP_PORT_X, + EL_SP_PORT_Y, + EL_SP_PORT_XY + }; + static int ep_over_player_num = sizeof(ep_over_player)/sizeof(int); + + static int ep_active_bomb[] = + { + EL_DYNAMITE_ACTIVE, + EL_DYNABOMB_ACTIVE_1, + EL_DYNABOMB_ACTIVE_2, + EL_DYNABOMB_ACTIVE_3, + EL_DYNABOMB_ACTIVE_4 + }; + static int ep_active_bomb_num = sizeof(ep_active_bomb)/sizeof(int); + + static int ep_belt[] = + { + EL_BELT1_LEFT, + EL_BELT1_MIDDLE, + EL_BELT1_RIGHT, + EL_BELT2_LEFT, + EL_BELT2_MIDDLE, + EL_BELT2_RIGHT, + EL_BELT3_LEFT, + EL_BELT3_MIDDLE, + EL_BELT3_RIGHT, + EL_BELT4_LEFT, + EL_BELT4_MIDDLE, + EL_BELT4_RIGHT, + }; + static int ep_belt_num = sizeof(ep_belt)/sizeof(int); + + static int ep_belt_switch[] = + { + EL_BELT1_SWITCH_L, + EL_BELT1_SWITCH_M, + EL_BELT1_SWITCH_R, + EL_BELT2_SWITCH_L, + EL_BELT2_SWITCH_M, + EL_BELT2_SWITCH_R, + EL_BELT3_SWITCH_L, + EL_BELT3_SWITCH_M, + EL_BELT3_SWITCH_R, + EL_BELT4_SWITCH_L, + EL_BELT4_SWITCH_M, + EL_BELT4_SWITCH_R, + }; + static int ep_belt_switch_num = sizeof(ep_belt_switch)/sizeof(int); + + static long ep1_bit[] = { EP_BIT_AMOEBALIVE, EP_BIT_AMOEBOID, EP_BIT_SCHLUESSEL, EP_BIT_PFORTE, EP_BIT_SOLID, - EP_BIT_MASSIV, + EP_BIT_MASSIVE, EP_BIT_SLIPPERY, EP_BIT_ENEMY, EP_BIT_MAUER, @@ -1452,16 +1706,24 @@ void InitElementProperties() EP_BIT_PLAYER, EP_BIT_HAS_CONTENT, EP_BIT_EATABLE, - EP_BIT_SP_ELEMENT + EP_BIT_SP_ELEMENT, + EP_BIT_QUICK_GATE, + EP_BIT_OVER_PLAYER, + EP_BIT_ACTIVE_BOMB }; - static int *ep_array[] = + static long ep2_bit[] = + { + EP_BIT_BELT, + EP_BIT_BELT_SWITCH + }; + static int *ep1_array[] = { ep_amoebalive, ep_amoeboid, ep_schluessel, ep_pforte, ep_solid, - ep_massiv, + ep_massive, ep_slippery, ep_enemy, ep_mauer, @@ -1483,16 +1745,24 @@ void InitElementProperties() ep_player, ep_has_content, ep_eatable, - ep_sp_element + ep_sp_element, + ep_quick_gate, + ep_over_player, + ep_active_bomb }; - static int *ep_num[] = + static int *ep2_array[] = + { + ep_belt, + ep_belt_switch + }; + static int *ep1_num[] = { &ep_amoebalive_num, &ep_amoeboid_num, &ep_schluessel_num, &ep_pforte_num, &ep_solid_num, - &ep_massiv_num, + &ep_massive_num, &ep_slippery_num, &ep_enemy_num, &ep_mauer_num, @@ -1514,18 +1784,34 @@ void InitElementProperties() &ep_player_num, &ep_has_content_num, &ep_eatable_num, - &ep_sp_element_num + &ep_sp_element_num, + &ep_quick_gate_num, + &ep_over_player_num, + &ep_active_bomb_num }; - static int num_properties = sizeof(ep_num)/sizeof(int *); + static int *ep2_num[] = + { + &ep_belt_num, + &ep_belt_switch_num + }; + static int num_properties1 = sizeof(ep1_num)/sizeof(int *); + static int num_properties2 = sizeof(ep2_num)/sizeof(int *); for(i=0; i