; ******************************************************

;       Name: Module Functions
;       Author: Peter Kleissner
;       Version: 0.1
;       Date: 16.02.2008 20:40:07
;       last Update: 16.02.2008 20:40:10

;       Forensic Lockdown Software
;       (C) 2008 Vienna Computer Products

;       This include file contains information about
;       the location of the modules functions.

; ******************************************************


; Textmode Module Functions
%define API_Clear_Textmode_Screen                               Textmode_TUI + 3*0
%define API_Scroll_Text_down                                    Textmode_TUI + 3*1
%define API_Scroll_Text_up                                      Textmode_TUI + 3*2
%define API_Set_Textmode_Mode                                   Textmode_TUI + 3*3
%define API_Screen_Text_Attribute_Position                      Textmode_TUI + 3*4
%define API_Screen_Textmode_Window                              Textmode_TUI + 3*5
%define API_Screen_Character_Attribute_Position                 Textmode_TUI + 3*6
%define API_Screen_Character_Multiple_Attribute_Position        Textmode_TUI + 3*7
%define API_Screen_Animation_1                                  Textmode_TUI + 3*8
%define API_Screen_Animation_2                                  Textmode_TUI + 3*9
%define API_Debug_Message                                       Textmode_TUI + 3*10
%define API_Debug_Message_Append                                Textmode_TUI + 3*11
%define API_Hide_Cursor                                         Textmode_TUI + 3*12
%define API_Enable_Extended_Colors                              Textmode_TUI + 3*13


; Disk System Functions
%define API_Mount_Boot_Partitions                               Disk_System + 3*0
%define API_Load_System_File                                    Disk_System + 3*1
%define API_Open_File_Callback                                  Disk_System + 3*2
%define API_Read_File                                           Disk_System + 3*3
%define API_Seek_File                                           Disk_System + 3*4
%define API_Write_File                                          Disk_System + 3*5


; Load API [RM] Functions
%define API_Reboot_keypress                                     API_RM + 3*0
%define API_Print_Text                                          API_RM + 3*1
%define API_Activate_A20_Gate                                   API_RM + 3*2
%define API_Protected_Mode_jump                                 API_RM + 3*3
%define API_System_Wait                                         API_RM + 3*4


; Crypto Module Functions
%define API_Xpress_Compress                                     Crypto_Module + 3*0
%define API_Xpress_Decompress                                   Crypto_Module + 3*1


; Boot Module Functions
%define API_Execute_Original_Bootloader                         Boot_Module + 3*0
%define API_Restore_Original_Bootloader                         Boot_Module + 3*1
%define API_Execute_Master_Boot_Record_Backup                   Boot_Module + 3*2
%define API_Restore_Master_Boot_Record_Backup                   Boot_Module + 3*3
%define API_Invoke_Original_Bootloader                          Boot_Module + 3*4


; API Segment (the segment where the API modules lay at)
;define API_Segment                         0000h




; macros for System Functions


; mpush pushes multiple values onto stack

%macro mpush 1-*.nolist

 %rep %0

  push %1

 %rotate 1
 %endrep

%endmacro


; mpop pops multiple values from stack

%macro mpop 1-*.nolist

 %rep %0
 %rotate -1

  pop %1

 %endrep

%endmacro


; define the Parameters pushed on the stack
%define Param1          ebp+4           ; 4 = caller's IP, functions BP (instruction "enter stackframe, 0")
%define Param2          Param1 + 4
%define Param3          Param2 + 4
%define Param4          Param3 + 4
%define Param5          Param4 + 4
%define Param6          Param5 + 4
%define Param7          Param6 + 4
%define Param8          Param7 + 4


; Note:
; Only near calls are allowed to Real Mode API module
; Use a special calling module or Entry Routine for calling the API from different segments.
