Операционные системы. Марапулец Ю.В. - 19 стр.

UptoLike

Составители: 

}
// инициализация служебных массивов
for ( i = 0; i < MAX_ITEMS; i++ )
{
bInUse[i] = FALSE; // ни один из элементов
// не используется
iListLookup[i] = 0;
}
bListEmpty = TRUE; // обновить глобальные флаги
bListFull = FALSE;
return ( TRUE ) ;
}
3. Добавить элемент списка.
При выборе пункта Add Item в меню
программы List функция AddItem выполняет следующие действия.
1. Находит первый свободный элемент в массиве (iIndex).
2. Предлагает пользователю ввести новую строку в диалоговом окне.
3. Копирует новую строку в блок памяти, выделенный при выполнении
команды CreateList.
4. Обновляет список и несколько глобальных переменных.
Первый свободный элемент массива может занимать незакрепленную
страницу памяти. В этом случае команда lstrcpy, которая пытается записать
новую строку, генерирует исключение. Обработчик исключений ожидает, когда
поступит сигнал EXCEPTION_ACCESS_VIOLATIUN,
и реагирует на него
вызовом функции VirtualAlloc, которая закрепляет страницу из предварительно
зарезервированного интервала.
void AddItem ( void )
{
char szText[ITEM_SIZE]; // текст для одного элемента
int iLen; // длина строки
int iIndex; // положение в массиве
int iPos; // положение в списке
int iCount; //счетчик элементов списка
BOOL bDone; // TRUE, если найден свободный
// элемент массива
// определение положения первого свободного элемента
bDone = FALSE;
iIndex = 0;
while( ( ! bDone ) && ( iIndex < MAX_ITEMS ) )
{
if( ! bInUse[iIndex] ) // используется ли данный элемент?
bDone = TRUE; // обнаружен свободный элемент
19
     }
     // инициализация служебных массивов
     for ( i = 0; i < MAX_ITEMS; i++ )
     {
             bInUse[i] = FALSE;              // ни один из элементов
                                       // не используется
             iListLookup[i] = 0;
     }
     bListEmpty = TRUE;                   // обновить глобальные флаги
     bListFull = FALSE;
                     return ( TRUE ) ;
}

      3. Добавить элемент списка. При выборе пункта Add Item в меню
программы List функция AddItem выполняет следующие действия.
1.    Находит первый свободный элемент в массиве (iIndex).
2.    Предлагает пользователю ввести новую строку в диалоговом окне.
3.    Копирует новую строку в блок памяти, выделенный при выполнении
   команды CreateList.
4.    Обновляет список и несколько глобальных переменных.
      Первый свободный элемент массива может занимать незакрепленную
страницу памяти. В этом случае команда lstrcpy, которая пытается записать
новую строку, генерирует исключение. Обработчик исключений ожидает, когда
поступит сигнал EXCEPTION_ACCESS_VIOLATIUN, и реагирует на него
вызовом функции VirtualAlloc, которая закрепляет страницу из предварительно
зарезервированного интервала.

void AddItem ( void )
{
      char szText[ITEM_SIZE];                // текст для одного элемента
      int iLen;                              // длина строки
      int iIndex;                            // положение в массиве
      int iPos;                             // положение в списке
      int iCount;                           //счетчик элементов списка
      BOOL bDone;                           // TRUE, если найден свободный
                                      // элемент массива
// определение положения первого свободного элемента
       bDone = FALSE;
       iIndex = 0;
       while( ( ! bDone ) && ( iIndex < MAX_ITEMS ) )

      {
            if( ! bInUse[iIndex] )    // используется ли данный элемент?
                    bDone = TRUE;    // обнаружен свободный элемент

                                       19