aboutsummaryrefslogtreecommitdiff
path: root/engines/avalanche/enhanced.cpp
blob: 543d7689ae610d1596359781867d0a73ad81dd1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 * This code is based on the original source code of Lord Avalot d'Argent version 1.3.
 * Copyright (c) 1994-1995 Mike, Mark and Thomas Thurman.
 */


#define __enhanced_implementation__


/* This is the unit set up by Thomas with help from all the people on
  CIS:BPROGA to read the *enhanced* keyboard codes (as opposed to the
  readkey-type ones.) */

#include "enhanced.h"


/*#include "Dos.h"*/
/*#include "Crt.h"*/


boolean isenh()
{
 byte statefrom16;
 registers r;

  boolean isenh_result;
  isenh_result = false;
  {;
   ah=0x12;
   intr(0x16,r);
   statefrom16=al;
  }
  if (statefrom16 != shiftstate)  return isenh_result;
  shiftstate = shiftstate ^ 0x20;
  {;
   ah=0x12;
   intr(0x16,r);
   statefrom16=al;
  }
  isenh_result = statefrom16 == shiftstate;
  shiftstate = shiftstate ^ 0x20;
  return isenh_result;
}

void readkeye()
/*  function fancystuff:word;
   inline( $B4/ $10/  { MOV AH,10 }
           $CD/ $16); { INT 16 }
  function notfancystuff:word;
   inline( $B4/ $00/  { MOV AH,0 }
           $CD/ $16); { INT 16 }
*/
{
 registers r; word fs;
;
 if (atbios) 
            fs=fancystuff; /* We're using an AT */
  else fs=notfancystuff;  /* ditto, an XT */
 inchar=chr(lo(fs));
 extd=chr(hi(fs));
}

boolean keypressede()
/*
 function fancystuff:boolean;
  inline( $B4/ $11/  { MOV AH,11 }
          $CD/ $16/  { INT 16 }
          $B8/ $00/ $00/ { MOV AX, 0000 }
          $74/ $01/  { JZ 0112 (or wherever- the next byte after $40, anyway) }
          $40);      { INC AX }
*/
{
    registers r;
boolean keypressede_result;
;
 if (atbios) 
   keypressede_result=fancystuff; /* ATs get the fancy stuff */
  else keypressede_result=keypressed(); /* XTs get the usual primitive... */
return keypressede_result;
}

class unit_enhanced_initialize {
  public: unit_enhanced_initialize();
};
static unit_enhanced_initialize enhanced_constructor;

unit_enhanced_initialize::unit_enhanced_initialize() {;
 /* determine bios type */
 atbios=isenh();
}