Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
29
Добавлен:
16.04.2013
Размер:
3.07 Кб
Скачать
/*-----------------------------------------------------
  Make1Key.c -- ўла Ў®вЄ   ®¤­®Ј®  ЄаЁЇв®Ја дЁзҐбЄ®Ј®
                Є«оз  б Ї®¬®ймо "н«ҐЄва®­­®© аг«ҐвЄЁ"
  -----------------------------------------------------
  ђ §а Ў®в « Ђ.ћ.‚Ё­®Єга®ў, Ј.Њ®бЄў , 䥢ࠫм 1995 Ј.
  (c) 1995, ‘ў®Ў®¤­®Ґ  ЁбЇ®«м§®ў ­ЁҐ  Ё  Є®ЇЁа®ў ­ЁҐ.
  -----------------------------------------------------
  ќв  Їа®Ја ¬¬  бЇҐжЁ «м­® а §а Ў®в ­  ¤«п ЇгЎ«ЁЄ жЁЁ
  ў "Њ®­Ёв®аҐ".
  -----------------------------------------------------
*/
#pragma  inline

#include <conio.h>	// kbhit,getch
#include <dos.h>	// delay
#include <stdio.h>	// printf,fopen,fclose,putc,...
#include <stdlib.h>	// atoi

unsigned char port61h;

// Џа®в®вЁЇл дг­ЄжЁ©
void	timer2(unsigned short count);
unsigned short get2channel(void);

// ѓ« ў­ п Їа®Ја ¬¬ 

int	main(int argc, char *argv[])
{
  printf("Џа®Ја ¬¬  ўла Ў®вЄЁ 1 Є«оз  б Ї®¬®ймо "
	 "н«ҐЄва®­­®Ј®  ­ «®Ј  аг«ҐвЄЁ.\n"
	 "‘®бв ўЁ« Ђ.ћ.‚Ё­®Єга®ў, п­ў ам 1995 Ј®¤ ,"
	 " бў®Ў®¤­®Ґ ЁбЇ®«м§®ў ­ЁҐ Ё Є®ЇЁа®ў ­ЁҐ\n");

  if ( argc < 2  ||  argc > 3 )
    return printf(
"Љ®¬ ­¤  § ЇгбЄ : \"make1key д ©« [¤«Ё­ ]\"  ,Ј¤Ґ:\n"
"  д ©«  - Ё¬п д ©«  ¤«п § ЇЁбЁ Є«оз \n"
"  ¤«Ё­  - ¤«Ё­  Є«оз  ў Ў ©в е, Ї® 㬮«з ­Ёо - 32\n"
    ),-1;
  else
  {
    unsigned short length=32;
    FILE *key=fopen(argv[1],"wb");

    if(!key)
    {
      printf(
      "ЌҐ ¬®Јг ®вЄалвм д ©« Є«оз  \"%s\" ¤«п § ЇЁбЁ\n",
      argv[1]);
      return 1;
    }
    if (argc==3) length=atoi(argv[2]);
    timer2(256);
    printf("Ќ ¦Ё¬ © ­  «оЎлҐ Є« ўЁил :");
    while(length--)
    {
      while (delay(300),kbhit())
        getch(),putchar('\007'),timer2(256);
      getch();
      if (putc(get2channel(),key)==EOF)
	return printf("ЋиЁЎЄ  ­  д ©«Ґ Є«оз \n"),1;
      putchar('.');
    }
    asm {
      mov   AL,port61h
      out   0x61,AL
    }
    putchar('\n');
    return fclose(key) ?
	(printf("ЋиЁЎЄ  ­  д ©«Ґ Є«оз \n"),1) :
	(printf("Љ«оз бЈҐ­ҐаЁа®ў ­\n"),0) ;
  }
}
// Їа®жҐ¤га  Їа®Ја ¬¬Ёа®ў ­Ёп 2 Є ­ «  в ©¬Ґа 
void	timer2(unsigned short count)
{
  asm {
    mov     AL,0xb4 // ‡ Јаг¦ Ґ¬ ў в ©¬Ґа
    out     0x43,AL //   гЇа ў«по饥 б«®ў®
    mov	    AX,count// AX <- ¬« ¤иЁ© Ў ©в Є®­бв ­вл
    out     0x42,AL // § Јаг¦ Ґ¬ ¬« ¤иЁ© Ў ©в ў в ©¬Ґа
    mov     AL,AH   // AL <- бв аиЁ© Ў ©в Є®­бв ­вл
    out	    0x42,AL // § Јаг¦ Ґ¬ бв аиЁ© Ў ©в ў в ©¬Ґа
    in      AL,0x61 // AL <- б®бв®п­ЁҐ Ї®ав  61h
    mov     port61h,AL  // б®е࠭塞 б®бв®п­ЁҐ  
    or      AL,1    // а §аҐи Ґ¬ а Ў®вг 2 Є ­ « 
    out     0x61,AL // ...
  }
  return;
}
// Їа®жҐ¤га  бзЁвлў ­Ёп Ї®Є § ­Ёп 2 Є ­ «  в ©¬Ґа 
unsigned short get2channel(void)
{
  asm {
    mov     AL,0x86 // дЁЄбЁа㥬 ¤ ­­лҐ
    out     0x43,AL // 2-Ј® Є ­ «  в ©¬Ґа 
    jmp     inpt    // ­  ўбпЄЁ© б«гз ©
  }
  inpt: asm {
    in      AL,0x42 // бзЁвлў Ґ¬ ¬« ¤иЁ© Ў ©в
    mov     AH,AL   // ®бў®Ў®¦¤ Ґ¬ AL
    in      AL,0x42 // бзЁвлў Ґ¬ бв аиЁ© Ў ©в
    xchg    AH,AL   // Ў ©вл ў ®Ўа в­®¬ Ї®ап¤ЄҐ
  }
  return _AX;
}
Соседние файлы в папке GOST_UTI