Скачиваний:
38
Добавлен:
01.05.2014
Размер:
2.39 Кб
Скачать
// ќвг Їа®Ја ¬¬г ¬®¦­® § ЇгбЄ вм в®«мЄ® Ё§ Є®¬ ­¤­®©
// бва®ЄЁ. ЏаЁ § ЇгбЄҐ Ё§ Ё­вҐЈаЁа®ў ­­®© б।л QC
// Ё«Ё PWB ў®§¬®¦Ґ­ Є®­д«ЁЄв б ЁбЇ®«м§гҐ¬л¬ ў нвЁе
// б। е ®Ўа Ў®взЁЄ®¬ ЄаЁвЁзҐбЄЁе ®иЁЎ®Є.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <direct.h>
#include <string.h>
#include <dos.h>
#include <bios.h>

void main(void);
void _far hhandler(unsigned deverr, unsigned doserr, unsigned _far *hdr);
void _bios_str(char *p);

void main() {

// “бв ­ ў«Ёў Ґ¬ ®Ўа Ў®взЁЄ ЄаЁвЁзҐбЄЁе ®иЁЎ®Є

	 _harderr(hhandler);

// Њ®¤Ґ«Ёа㥬 ЄаЁвЁзҐбЄго ®иЁЎЄг. ‚лЇ®«­пҐ¬ Ї®ЇлвЄг ᮧ¤ вм
// Є в «®Ј ­  ¤ЁбЄҐ Ђ:. …б«Ё ¬л "§ Ўг¤Ґ¬" ўбв ўЁвм
// ў ¤ЁбЄ®ў®¤ ¤ЁбЄҐвг, Ўг¤Ґв ўл§ў ­ ®Ўа Ў®взЁЄ
// ЄаЁвЁзҐбЄ®© ®иЁЎЄЁ

	 printf("\n‚бв ўм⥠(Ё«Ё ­Ґ ўбв ў«п©вҐ) ¤ЁбЄҐвг ў ¤ЁбЄ®ў®¤ A:"
			  "\nЁ ­ ¦¬ЁвҐ «оЎго Є« ўЁиг..."
			  "\n");

	 getch();

// ‘®§¤ Ґ¬ Є в «®Ј

	 if(mkdir("a:\test_ctl")) {

		  printf("\nЋиЁЎЄ  ЇаЁ ᮧ¤ ­ЁЁ Є в «®Ј " );
		  exit(-1);

	 }
	 else {

		  printf("\n“бЇҐи­®Ґ ᮧ¤ ­ЁҐ Є в «®Ј ");

// “¤ «пҐ¬ в®«мЄ® з⮠ᮧ¤ ­­л© Є в «®Ј

		  rmdir("a:test_ctl");
		  exit(0);

	 }
}


// Ќ®ўл© ®Ўа Ў®взЁЄ ЄаЁвЁзҐбЄЁе ®иЁЎ®Є

void _far hhandler(unsigned deverr, unsigned doserr, unsigned _far *hdr) {

	 int ch;
	 static char buf[200], tmpbuf[10];

// ‚лў®¤Ё¬ б®®ЎйҐ­ЁҐ ® ЄаЁвЁзҐбЄ®© ®иЁЎЄҐ

	 sprintf(buf,"\n\r"
					 "\n\rЉ®¤ ®иЁЎЄЁ гбва®©вбў : %04.4X"
					 "\n\rЉ®¤ ®иЁЎЄЁ DOS:        %d"
					 "\n\r\n\r"
					 "\n\r‚лЇ®«­пҐ¬лҐ ¤Ґ©бвўЁп:"
					 "\n\r  0 - Ї®ўв®аЁвм"
					 "\n\r  1 - ®в¬Ґ­Ёвм"
					 "\n\r  2 - § ўҐаиЁвм"
					 "\n\r----> ?",
					 deverr,
					 doserr);

	 _bios_str(buf);

// ‚ў®¤Ё¬ ®вўҐв б Є« ўЁ вгал

	 ch = _bios_keybrd(_KEYBRD_READ) & 0x00ff;
	 _bios_str("\n\r");

	 switch(ch) {

		  case '0':       // Џлв Ґ¬бп Ї®ўв®аЁвм ®ЇҐа жЁо
		  default:

				_hardresume(_HARDERR_RETRY);

		  case '2':       // ‡ ўҐаи Ґ¬ а Ў®вг Їа®Ја ¬¬л

				_hardresume(_HARDERR_ABORT);

		  case '1':       // ‚®§ўа в ў DOS б Є®¤®¬ ®иЁЎЄЁ

				_hardretn(doserr);

	 }
}

// Џа®Ја ¬¬  ¤«п ўлў®¤  бва®ЄЁ бЁ¬ў®«®ў ­  нЄа ­
// б Ї®¬®ймо дг­ЄжЁЁ BIOS 0Eh

void _bios_str(char *ptr) {

	 union REGS inregs, outregs;
	 char *start = ptr;

	 inregs.h.ah = 0x0e;
	 for(; *ptr; ptr++) {

		  inregs.h.al = *ptr;
		  int86(0x10, &inregs, &outregs);

	 }
}

Соседние файлы в папке CRITERR