Code:
struct MSG
{
void far *SenderPid; // process which sent this MSG
int Msg;
int Param[6];
};
// kbd msg:
#define key_down 0xE9
#define key_up 0xEA
#define long_press 0xEB
// EC - sent 1 second after last key release, but not always?
// ED - ? unknown kbd msg
// EE - ? unknown kbd msg
// For kbd msg:
// P0 - scan Code:
#define LEFT_SOFT 0x01
#define RIGHT_SOFT 0x04
#define RECORD_BUTTON 0x06
#define GREEN_BUTTON 0x0B
#define RED_BUTTON 0x0C
#define VOL_UP_BUTTON 0x0D
#define VOL_DOWN_BUTTON 0x0E
#define UP_BUTTON 0x3B
#define DOWN_BUTTON 0x3C
#define LEFT_BUTTON 0x3D
#define RIGHT_BUTTON 0x3E
#define PLAY_BUTTON 0x3F
// '*', '#', '0'-'9'
// P1 - 0 or garbage
// P2 - scan code (if >80h, the key is releeased, if 7B - long press)
// P3 -
// P4 - scan code with high byte == ??? or FF
// P5 - unknown
typedef void huge p_DlgOnKey(void far* Unk, struct MSG far* msg);
struct DlgHndl
{
p_DlgOnKey* pOnKey;
void huge* pInit;
void huge* pExit1;
void huge* pExit2;
void huge* pRun;
int Flag1; //0x10
int Flag2; //0xC4
};
typedef void huge p_ShowDialog( struct DlgHndl far* Struct, struct DlgBuff far* Buff);
p_ShowDialog *const far ShowDialog = (p_ShowDialog *)0xD60340;
//----------------------------------------------------
SUB R0,#010h
MOV R12,#POF _Main_Hndl
MOV R13,#PAG _Main_Hndl
MOV R14,R0
MOV R15,DPP1
AND R14,#03FFFh
CALLS _ShowDialog
ADD R0,#010h