The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Переключатели управления функциональностью

Переключатели управления функциональностью

Предыдущая  Содержание  Следующая V*D*V

В некоторых приложениях программист разрабатывает один основной вариант исполняемого кода для всех клиентов, но может захотеть получать оплату за некоторые дополнительные программные опции. Нежелательно создавать и тестировать копию программного обеспечения для каждой возможной комбинации (отключение или включение опций с использованием переключателей компиляции). Идеальным вариантом было бы создать и протестировать одну копию программного обеспечения для всех клиентов, а также включать или отключать доступ к элементам, которые не приобретены.

 

Если оборудование имеет энергонезависимую память, такую как небольшая EEPROM, может быть сохранено битовое поле с указанием, какие опции клиентом приобретены.

 

Когда клиент хочет добавить функцию, может быть отправлена новая EEPROM. Битовое поле в EEPROM сравнивается с битовым полем функции, добавленным в каждую структуру SELECTION, и если соответствующие биты установлены, вариант отображается:

 

typedef struct _selection

{

    .... // original structure

    int features_bitfield;

}SELECTION;

 

enum _feature_bits

{

    FEATURE_ATM_VIDEOPHONE=0,

    FEATURE_ATM_RENEW_LICENSE,

    FEATURE_ATM_ORDER_MOVIE

};

 

#define FEATURE_ALL 0

#define FEATURE_ATM_VIDEOPHONE_BIT (0x01 << FEATURE_ATM_VIDEOPHONE)

#define FEATURE_ATM_RENEW_LICENSE  (0x01 << FEATURE_ATM_RENEW_LICENSE)

#define FEATURE_ATM_ORDER_MOVIE    (0x01 << FEATURE_ATM_ORDER_MOVIE)

 

MENU menu[] =

{

    { MAIN_MENU, 6,

    {"Perform A Deposit",          goto_menu(), DEPOSIT,   FEATURE_ALL},

    {"Perform a Withdrawl",        goto_menu(), WITHDRAWL, FEATURE_ALL},

    {"Obtain a Balance Statement", goto_menu(), BALANCE,   FEATURE_ALL},

    {"Make A Video Phone Call",    goto_menu(), BALANCE,   FEATURE_ATM_VIDEOPHONE_BIT},

    {"Watch A Movie Right Here",   goto_menu(), BALANCE,   FEATURE_ATM_VIDEOPHONE_BIT},

    {"Quit", logout(), 0}

    },

 

    /* тут могут быть другие меню */

 

};

 

Наконец, как требование для отрисовки каждого выбора, в draw_menu() вставляется следующее условие:

 

if(!curr_menu->selection[selection_loop_ctr].feature_bitfield ||

    curr_menu->selection[selection_loop_ctr].feature_bitfield &

    eeprom.feature_bitfield)

{

    /* отрисовать выбранное */

}

 

Если программист использует подход с использованием функции hilite() для перемещения подсвеченного варианта, необходимо будет также посмотреть на переключатели вариантов, чтобы указать отображаемые подсказки для перехода в следующее и предыдущее меню.

Предыдущая  Содержание  Следующая