Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 111 112 113 114 115 116 117  118 119 120 121 122 123 124 ... 198
        ------------------------------------------------------------------
        extern void ShowEMMErr(unsigned int errcode,unsigned int lineno,
                   char *filename);
        extern int EMSGetStatus(void);
        extern int EMSGetFrameAddr(char far * *pfa);
        extern int EMSGetPageCnt(unsigned int *una,unsigned int *tot);
        extern int EMSAllocatePages(unsigned int *handle,unsigned int pages);
        extern int EMSMapHandlePage(unsigned int handle,unsigned int page,
                   unsigned int frame);
        extern int EMSDeallocatePages(unsigned int handle);
        extern int EMSGetVersion(char *emsver);
        extern int EMSSavePageMap(unsigned int handle);
        extern int EMSRestorePageMap(unsigned int handle);
        extern int EMSGetHandleCnt(unsigned int *hcnt);
        extern int EMSGetHandlePages(unsigned int handle,unsigned int
                   *pages);

        extern int EMSGetAllHandlePages(struct handle_page *hp,unsigned int
                   *hpcnt);
        extern int EMSGetPageMap(unsigned int *map);
        extern int EMSSetPageMap(unsigned int *map);
        extern int EMSGetSetPageMap(unsigned int *srcmap,unsigned int
                   *destmap);
        extern int EMSGetPPageMapSize(unsigned int *size);
        extern int EMSGetPPageMap(struct ppmap *pmap,unsigned char
                   *savearea);
        extern int EMSSetPPageMap(unsigned char *savearea);
        extern int EMSGetPPageMapSize(unsigned int count,unsigned int
                   *size);
        extern int EMSMapMultPages(unsigned int handle,struct log_to_phys
                   *map,unsigned int method,unsigned int count);
        extern int EMSReallocaPages(unsigned int handle,unsigned int
                   *pages);
        extern int EMSGetHandleAttr(unsigned int handle,unsigned int
                   *attr);

                                      - 7-72 -
        extern int EMSSetHandleAttr(unsigned int handle,unsigned int
                    attr);
        extern int EMSGetAttrCap(unsigned int *cap);
        extern int EMSGetHandleName(unsigned int handle,char *name);
        extern int EMSSetHandleName(unsigned int handle,char *name);
        extern int EMSGetHandleDir(struct handle_names *hnt,unsigned int
                   *hn_cnt);
        extern int EMSSearchHandleName(char *name,unsigned int *handle);
        extern int EMSGetTotalHandles(unsigned int *handle_count);
        extern int EMSMoveRegion(struct move_xchg *rp);
        extern int EMSExchangeRegion(struct move_xchg *rp);
        extern int EMSGetMapAddrArray(struct map_phys_page *mpaa,unsigned
                   int *mpa_cnt);
        extern int EMSGetMapAddrCount(unsigned int *mpa_cnt);
        extern int EMSGetHardwareInfo(struct hardware_info *hwp);
        extern int EMSGetRawPageCount(unsigned int *rpg_cnt,unsigned int
                   *urpg_cnt);
        extern int EMSAllocateStdPages(unsigned int *handle,unsigned int
                   pages);
        extern int EMSAllocateRawPages(unsigned int *handle,unsigned int
                   pages);
        extern int EMSGetAltMapRegSet(unsigned int *set,unsigned char far
                   * *pmap);
        extern int EMSSetAltMapRegSet(unsigned int set,unsigned char
                   *pmap);
        extern int EMSGetAltMapArraySize(unsigned int *size);
        extern int EMSAllocAltMapRegSet(unsigned int *set);
        extern int EMSDeallocAltMapRegSet(unsigned int set);
        extern int EMSAllocDMARegSet(unsigned int *set);
        extern int EMSEnableDMARegSet(unsigned int set,unsigned int
                   channel);
        extern int EMSDisableDMARegSet(unsigned int set);
        extern int EMSDeallocDMARegSet(unsigned int set);
        extern int EMSPrepareForWarmboot(void);
        extern int EMSEnableOSFunc(long *key);
        extern int EMSDisableOSFunc(long *key);
        extern int EMSReturnAccessKey(long key);
        -------------------------------------------------------------------


                    Листинг 7-7. EMMEXIST.C
        ------------------------------------------------------------------
        #include 
        #include 
        #include 
        #include 
        #include "emmconst"

        #define DOS_INT           0x21     /*диспетчер функций DOS*/
        #define DOS_IOCTL         0x44     /*функция IOCTL DOS*/
        #define IOCTL_GETINFO     0x00     /*подфункция "Получить информа-
                                                 цию об устройстве" IOCTL*/
        #define IOCTL_OUTSTAT     0x07     /*подфункция "Получить состояние
                                                        вывода" IOCTL*/
        #define READY_OUTPUT      0xFF     /*устройство готово к выводу*/
        #define IS_DEVICE         0x0080   /*обработчик принадлежит устрой-
                                                                    ству*/

                                      - 7-73 -
        static char device_name[9] = EMM_DEVICE;

             /*
             Контролируется наличие расширенной памяти с помощью метода
             "открытого обработчика". Устанавливает emm_present в '1',
             если расширенная память присутствует, в '0' - если нет.
             Функция возвращает '0', если тест наличия завершился успеш-
             но. В противном случае возвращается код ошибки DOS вызова
             функции DOS, которая не выполнилась во время теста наличия
             расширенной памяти.
             */

        emm_exists(emm_present)
        int *emm_present;               /*указатель на индикатор наличия
                                             менеджера расширенной памяти*/
        {
             int return_code;            /*код возврата операции с файлом*/
             int handle;                 /*обработчик файлов*/
             unsigned int dev_attr;       /*атрибуты драйвера устройства*/
             unsigned int dev_status;     /*выходное состояние устройства*/

             if (_dos_open(device_name, O_RDONLY, &handle))  {
                                                /*не удалось открыть файл*/
                if (errno == ENOENT)  {              /*файл не существует*/
                   return_code = 0;             /*мы ожидали, что это могло
                                                               случиться*/
                   *emm_present = 0;          /*менеджер расширенной памяти
                                                  определенно отсутствует*/
                } else
                   return_code = errno;       /*тест наличия завершился
                                                               безуспешно*/
             } else
                if (!(return_code = ioctl_getattr(handle, &dev_attr))) {
                                                       /*получен атрибут*/
                   if (!(return_code = ioctl_outstat(handle, &dev_status)))
                                            /*получено выходное состояние*/
                                  /*менеджер расширенной памяти присутству-
                                    ет, если обработчик принадлежит устрой-
                                             ству и готов к выводу*/
                *emm_present = ((dev_status == READY_OUTPUT) && (dev_attr
                                           & IS_DEVICE)) ? 1 : 0;
                close(handle);             /*закрывается обработчик файла*/
             }
             return(return_code);
        }

             /*
             Получается слово атрибутов DOS для открытого обpаботчика,
             связанного с открытым файлом или устройством. Возвращает 0,
             если функция завершилась успешно, в противном случае воз-
             вращает код ошибки DOS
             */

        ioctl_getattr(handle, attrib)
        int handle;                /*открытый обpаботчик файла/устройства*/
        unsigned int *attrib; /* -> возвращенная информация об устройстве*/
        {

                                      - 7-74 -
             int rc;
             union REGS regs;
             regs.h.ah = DOS_IOCTL;  /*управление вводом/выводом  DOS  для
                                                                устройств*/
             regs.h.al = IOCTL_GETINFO;  /*получить информацию об устройс-
                                                                     тве*/
             regs.x.bx = handle;
             int86(DOS_INT, ®s, ®s);            /*вызов функции DOS*/
             if (!regs.x.cflag)  {             /*если не произошло ошибки*/
                *attrib = regs.x.dx;               /*возвращаются атрибуты
                                                         файла/устройства*/
                rc = 0;                     /*функция выполнилась успешно*/
             } else
                rc = regs.x.ax;             /*возвращается код ошибки*/
             return(rc);
        }

             /*
             Получает выходное состояние файла или устройства. Возвра-
             щенное состояние 0 означает, что устройство неготово для
             вывода; состояние 0xFF00 означает, что устройство готово
             для вывода. Возвращается 0, если функция завершилась ус-
             пешно. В противном случае возвращается код ошибки DOS.
             */

        ioctl_outstat(handle, status)
        int handle;                /*открытый обpаботчик файла/устройства*/
        unsigned int *status;                /* -> слово состояния вывода*/
        {
             int rc;
             union REGS regs;
             regs.h.ah = DOS_IOCTL;  /*управление вводом/выводом  DOS  для
                                                                устройств*/
             regs.h.al = IOCTL_OUTSTAT;       /*получить состояние вывода*/
             regs.x.bx = handle;
             int86(DOS_INT, ®s, ®s);            /*вызов функции DOS*/
             if (!regs.x.cflag)  {             /*если не произошло ошибки*/
                *status = regs.h.al;               /*возвращается состояние
                                                                   вывода*/
                rc = 0;                     /*функция выполнилась успешно*/
             } else
                rc = regs.x.ax;             /*возвращается код ошибки*/
             return(rc);
        }

             /*
             Проверяет наличие pасшиpенной памяти с помощью метода
             "получить вектор". Устанавливает emm_present в '1', если
             расширенная память присутствует, '0' - если нет. Данная
             функция всегда возвращает '0'.
             */

        emm_exists2(emm_present)
        int *emm_present;
        {
             int len;
             char far *device_name;        /*указатель на имя символьного

                                      - 7-75 -
                                                               устройства*/
             char *np;
             unsigned int get_int_seg();

             FP_SEG(dev_name) = get_int_seg(EMM_INT);   /*сегмент драйвера
                                  устройства менеджеpа pасшиpенной памяти*/

             FP_OFF(dev_name) = 10;      /*смещение имени драйвера символь-
                                                          ного устройства*/

             /*увидеть, находится ли имя менеджеpа pасшиpенной памяти
                       по смещению 10 в сегменте EMM_INT*/

             for (len  = 8, np = device_name; len && *dev_name++ == *np++;
                                                               len--);

             *emm_present = (len) ? 0 : 1;       /*если все символы совпа-
                              ли менеджеp pасшиpенной памяти присутствует*/
Предыдущая страница Следующая страница
1 ... 111 112 113 114 115 116 117  118 119 120 121 122 123 124 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама