Logo Search packages:      
Sourcecode: e3 version File versions  Download package

e3.h

;--------------------------------------------------------------------------
;  e3.asm v2.7.0 Copyright (C) 2000-06 Albrecht Kleine <kleine@ak.sax.de>
;
;  see GNU copyright details in e3.asm
;--------------------------------------------------------------------------

%define WS 1
%define EM 2
%define PI 4
%define VI 8
%define NE 16
%define DEFAULT_MODE WS             ;<---- select one of WS, EM, NE, PI, VI
%define MAKE_BACKUP
%define LESSWRITEOPS
;-------
%define UTF8                        ;for UTF8 console or xterm e.g. @ Suse 9.1
;%define UTF8RTS                    ;runtime detection of UTF8 console display
;-------
%define BEEP_IN_VI                  ;undef if you hate beeping computers
%define USE_MATH              ;undef if you don't use the numerics
%define USE_PIPE              ;undef if you don't use piping through sed/ex
%define USE_BUILTINHELP             ;undef if you really don't need help (saves some space)
%define USE_UNDO              ;undef if there is low memory
;;;%define USE_EXT_MOVE             ;smart move mode for Home,End,BOF,EOF keys
;
;-------
;
;     D O   N O T   C H A N G E   B E L O W   L I N E
;----------------------------------------------------------------------
%ifndef LINUX
 %undef UTF8
%endif

%ifndef UTF8
  %undef UTF8RTS
%endif

%ifdef NETBSD
%define FREEBSD
%endif
%ifdef OPENBSD
%define FREEBSD
%endif
;
;beware of SYS_... constants > 255! (see NetBSD)
;
%ifdef BEOS
      ;posix/termios.h                    ;termios eq termio
      %define TERMIOS_SET 8001h                 ;TCSETA
      %define TERMIOS_GET 8000h                 ;TCGETA
      %define TERMIOS_WSIZE 800Ch               ;TIOCGWINSZ
      %define NCCS 11
      %define VMIN 4
      %define speed_t1        resb
      %undef USE_PIPE
%define SYS_exit  63
%define SYS_read  2
%define SYS_write 3
%define SYS_open  0
%define SYS_close 1
%define SYS_unlink      39
%define SYS_lseek 5
%define SYS_rename      38
%define SYS_ioctl 4

MAXERRNO    equ 30
ERRNOMEM    equ 12
ERRNOIO           equ 5

      %macro errortext 0
db "Op not permitted",10            ;1
db "No such file|directory",10            ;2
db 10                         ;3
db 10                         ;4
db "Input/output",10                ;5
db "No such device",10              ;6
db 10                         ;7
db 10                         ;8
db "Bad file descriptor",10         ;9
db "No child processes",10          ;10
db 10                         ;11         
db "Memory exhausted",10            ;12
db "Permission denied",10           ;13
db 10                         ;14
db 10                         ;15
db "Device|resource busy",10        ;16
db "File exists",10                 ;17
db 10                         ;18
db "No such device",10              ;19
db 10                         ;20
db "Is a directory",10              ;21
db "Invalid argument",10            ;22
db "Too many open files",10         ;23
db "Too many open files",10         ;24
db "Inappropriate ioctl",10         ;25
db "Text file busy",10              ;26
db "File too large",10              ;27
db "No space on device",10          ;28
db "Illegal seek",10                ;29
db "R/O file system",10             ;30
      %endmacro

%else
%ifdef QNX
      ;termios.h
      ;sys/ioctl.h
      %define TERMIOS_SET   804c7414h     ;TIOCSETA
      %define TERMIOS_GET   404c7413h     ;TIOCGETA
      %define TERMIOS_WSIZE 40087468h     ;TIOCGWINSZ
      ;                 rw    
      ;                   size
      ;                   't'
      ;                     nr.
      %define NCCS 40
      %define VMIN 6
      %define speed_t2  resd
;-------
;the QNX version is linked against libc
%define LIBC
extern open,read,write,close,lseek,rename,_exit,ioctl,fstat,fchown,select,unlink
extern errno
%undef USE_PIPE
      %define SYS_fstat       ;dummy
      struc stat_struc
.st_ino:    resd 2 
.st_size:   resd 2
.st_dev:    resd 1
.st_rdev:   resd 1
.st_uid:    resd 1;24
.st_gid:    resd 1;28
.st_ctime:  resd 1;
.st_atime:  resd 1;
.st_mtime:  resd 1;40
.st_mode:   resd 1;44
.st_dummy:  resd 20           ;who cares?
      endstruc
MAXERRNO    equ 30
ERRNOMEM    equ 12
ERRNOIO           equ 5

      %macro errortext 0
db "Op not permitted",10            ;1
db "No such file|directory",10            ;2
db 10                         ;3
db 10                         ;4
db "Input/output",10                ;5
db "No such device",10              ;6
db 10                         ;7
db 10                         ;8
db "Bad file descriptor",10         ;9
db "No child processes",10          ;10
db 10                         ;11         
db "Memory exhausted",10            ;12
db "Permission denied",10           ;13
db 10                         ;14
db 10                         ;15
db "Device|resource busy",10        ;16
db "File exists",10                 ;17
db 10                         ;18
db "No such device",10              ;19
db 10                         ;20
db "Is a directory",10              ;21
db "Invalid argument",10            ;22
db "Too many open files",10         ;23
db "Too many open files",10         ;24
db "Inappropriate ioctl",10         ;25
db "Text file busy",10              ;26
db "File too large",10              ;27
db "No space on device",10          ;28
db "Illegal seek",10                ;29
db "R/O file system",10             ;30
      %endmacro

%else
%ifdef ATHEOS     ;--------------------- A T H E O S -----------------------
      ;posix/termbits.h
      %define TERMIOS_SET 5406h
      %define TERMIOS_GET 5405h
      %define TERMIOS_WSIZE 5413h
      %define NCCS 19
      %define VMIN 6
      ;posix/stat.h
      struc stat_struc
.st_dev:    resd 1
.st_ino:    resd  2
.st_mode:   resd 1
.st_nlink:  resd 1
.st_uid:    resd 1
.st_gid:    resd 1
.st_rdev:   resd 1
.st_size:   resd  2
.st_blksize:      resd 1
.st_blocks: resd  2
.st_atime:  resd 1
.__unused1: resd 1
.st_mtime:  resd 1
.__unused2: resd 1
.st_ctime:  resd 1
.__unused3: resd 1
.__unused4: resd 1
.__unused5: resd 1
      endstruc
      %undef USE_PIPE

%define SYS_exit  6
%define SYS_read  3
%define SYS_write 4
%define SYS_open  1
%define SYS_close 2
%define SYS_unlink      20
%define SYS_lseek 13
%define SYS_kill  92
%define SYS_rename      7
%define SYS_ioctl 116
%define SYS_sigaction   93
%define SYS_fchown      86
%define SYS_fstat 11
%define SYS_select      42

SIGCONT           equ 18
SIGSTOP           equ 19


MAXERRNO    equ 30
ERRNOMEM    equ 12
ERRNOIO           equ 5

      %macro errortext 0
db "Op not permitted",10            ;1
db "No such file|directory",10            ;2
db 10                         ;3
db 10                         ;4
db "Input/output",10                ;5
db "No such device",10              ;6
db 10                         ;7
db 10                         ;8
db "Bad file descriptor",10         ;9
db "No child processes",10          ;10
db 10                         ;11         
db "Memory exhausted",10            ;12
db "Permission denied",10           ;13
db 10                         ;14
db 10                         ;15
db "Device|resource busy",10        ;16
db "File exists",10                 ;17
db 10                         ;18
db "No such device",10              ;19
db 10                         ;20
db "Is a directory",10              ;21
db "Invalid argument",10            ;22
db "Too many open files",10         ;23
db "Too many open files",10         ;24
db "Inappropriate ioctl",10         ;25
db "Text file busy",10              ;26
db "File too large",10              ;27
db "No space on device",10          ;28
db "Illegal seek",10                ;29
db "R/O file system",10             ;30
      %endmacro
%else
%ifdef LINUX      ;----------------------- L I N U X -----------------------
      ;asm/termbits.h
      ;asm/ioctls.h
      %define TERMIOS_SET 5402h                 ;TCSETS
      %define TERMIOS_GET 5401h                 ;TCGETS
      %define TERMIOS_WSIZE 5413h               ;TIOCGWINSZ
      %define NCCS 19
      %define VMIN 6
;-------
%ifndef AMD64
      ;asm/stat.h
      %define UIDGID_WORD
      struc stat_struc
.st_dev:    resd 1
.st_ino:    resd 1            ;unsigned long  st_ino;
.st_mode:   resw 1            ;unsigned short st_mode;
.st_nlink:  resw 1
.st_uid:    resw 1
.st_gid:    resw 1
.st_rdev:   resd 1
.st_size:   resd 1
.st_blksize:      resd 1
.st_blocks: resd 1
.st_atime:  resd 1
.__unused1: resd 1
.st_mtime:  resd 1
.__unused2: resd 1
.st_ctime:  resd 1
.__unused3: resd 1
.__unused4: resd 1
.__unused5: resd 1
      endstruc

%define SYS_exit  1
%define SYS_fork  2
%define SYS_read  3
%define SYS_write 4
%define SYS_open  5
%define SYS_close 6
%define SYS_unlink      10
%define SYS_execve      11
%define SYS_lseek 19
%define SYS_utime 30
%define SYS_kill  37
%define SYS_rename      38
%define SYS_pipe  42
%define SYS_brk         45
%define SYS_ioctl 54
%define SYS_dup2  63
%define SYS_sigaction   67
%define SYS_rt_sigaction 174
%define SYS_readlink    85
%define SYS_fchmod      94
%define SYS_fchown      95
%define SYS_fstat 108
%define SYS_wait4 114
%define SYS_select      142
%ifndef ARMCPU
%define time_t    resd
%endif
%else                   ;;--------- AMD64
      struc stat_struc
.st_dev:    resq 1
.st_ino:    resq 1
.st_nlink:  resq 1
.st_mode:   resd 1
.st_uid:    resd 1
.st_gid:    resd 1
.__unused0: resd 1
.st_rdev:   resq 1
.st_size:   resq 1
.st_blksize:      resq 1
.st_blocks: resq 1
.st_atime:  resq 1
.__unused1: resq 1
.st_mtime:  resq 1
.__unused2: resq 1
.st_ctime:  resq 1
.__unused3: resq 1
.__unused4: resq 1
.__unused5: resq 1
      endstruc
%define SYS_exit  60
%define SYS_fork  57
%define SYS_read  0
%define SYS_write 1
%define SYS_open  2
%define SYS_close 3
%define SYS_unlink      87
%define SYS_execve      59
%define SYS_lseek 8
%define SYS_utime 132   ;30
%define SYS_kill  62
%define SYS_rename      82
%define SYS_pipe  22
%define SYS_brk         12
%define SYS_ioctl 16
%define SYS_dup2  33
%define SYS_rt_sigaction 13
%define SYS_rt_sigreturn 15
%define SYS_readlink    89
%define SYS_fchmod      91
%define SYS_fchown      93
%define SYS_fstat 5
%define SYS_wait4 61
%define SYS_select      23    ;142

%define time_t    resq
%endif

%ifndef ARMCPU
      struc utimbuf_struc
.actime: time_t  1
.modtime:time_t 1
      endstruc
%else
      struc utimbuf_struc
.actime: resd  1
.modtime:resd 1
      endstruc
%endif
%ifdef CRIPLED_ELF
%define USE_SPECIAL_HEADER          ;special ELF header etc
%endif

;-------
%ifdef UTF8
 %define NEW_CURSOR_MGNT            ;switch cursor depending of 'INSERT'-mode
 %undef CURSORMGNT                  ;switch cursor depending of 'INSERT'-mode
 ;no more support of CURSORMGNT for UTF-8 thus replaced by:
 ;8.Juni 2004: see /usr/src/linux/Documentation/VGA-softcursor.txt
%else
 %define CURSORMGNT
 ;trad style
 %ifdef AMD64
  %undef CURSORMGNT                 ;work around January 2006
 %endif
%endif
;--------

SIGCONT           equ 18
SIGSTOP           equ 19

%define CAPTURE_STDERR
%ifdef EX
 %define USE_EX_NO_SED
 %define EX_PATH '/usr/bin/ex'            ;(ex is usually a symlink to vi)   [ old was /bin/ex ]
%else
 %undef USE_EX_NO_SED
 %ifndef PERLPIPE
 %define SEDPATH '/bin/sed'         ;DEFAULT
 %else
 %define SEDPATH '/usr/bin/perl'
 %endif
%endif

MAXERRNO    equ 32
ERRNOMEM    equ 12
ERRNOIO           equ 5
ERRNOEXEC   equ 31
      %macro errortext 0
db "Op not permitted",10            ;1
db "No such file|directory",10            ;2
db 10                         ;3
db 10                         ;4
db "Input/output",10                ;5
db "No such device",10              ;6
db 10                         ;7
db 10                         ;8
db "Bad file descriptor",10         ;9
db "No child processes",10          ;10
db 10                         ;11         
db "Memory exhausted",10            ;12
db "Permission denied",10           ;13
db 10                         ;14
db 10                         ;15
db "Device|resource busy",10        ;16
db "File exists",10                 ;17
db 10                         ;18
db "No such device",10              ;19
db 10                         ;20
db "Is a directory",10              ;21
db "Invalid argument",10            ;22
db "Too many open files",10         ;23
db "Too many open files",10         ;24
db "Inappropriate ioctl",10         ;25
db "Text file busy",10              ;26
db "File too large",10              ;27
db "No space on device",10          ;28
db "Illegal seek",10                ;29
db "R/O file system",10             ;30
db "Can't exec "              ;31
%ifdef USE_EX_NO_SED
db EX_PATH,10
%else
db SEDPATH,10
%endif
db "Broken pipe",10                 ;32
      %endmacro
%ifdef LIBC
 extern open,read,write,close,lseek,rename,_exit,ioctl,fstat,fchown,select,unlink,fchmod
 extern _errno
 %undef SYS_readlink
 %undef SYS_brk
 %undef SYS_kill
 %undef SYS_sigaction
 %undef SYS_rt_sigaction
 %undef USE_PIPE
%endif
%ifdef ARMCPU
 %undef USE_MATH
 %undef USE_UNDO
 %undef USE_PIPE
%endif
%else
%ifdef FREEBSD    ;----------------------- FREE B S D -----------------------
      ;sys/termios.h
      %define TERMIOS_SET   802c7414h           ;TIOCSETA
      %define TERMIOS_GET   402c7413h           ;TIOCGETA
      %define TERMIOS_WSIZE 40087468h
      ;                 rw    
      ;                   size
      ;                   't'
      ;                     nr.
      %define NCCS 20
      %define VMIN 16
      %define speed_t3  resd
      %define ICRNL     0x100 
      %define IXON      0x200
      %define ICANON    0x100
      %define ISIG      0x80
      %define ECHO      0x8
      %define TSize   word                ;due oversized ICANON
;------

      struc stat_struc
.st_dev:    resd 1
.st_ino:    resd 1
%ifdef OPENBSD
.st_mode:   resw 1                        ;for syscall 279
.st_nlink:  resw 1                        ;ditto
%else
.st_mode:   resd 1
.st_nlink:  resd 1
%endif
.st_uid:    resd 1
.st_gid:    resd 1
.st_rdev:   resd 1
.st_atime:  resd 1
.st_atimes: resd 1
.st_mtime:  resd 1
.st_mtimes: resd 1
.st_ctime:  resd 1
.st_ctimes: resd 1
.st_size:   resd 2
.st_blocks: resd 2
.st_blksize:      resd 1
.st_flags:  resd 1
.st_gen:    resd 1
.st_spare:  resd 5
      endstruc

%define SYS_exit  1
%define SYS_fork  2
%define SYS_read  3
%define SYS_write 4
%define SYS_open  5
%define SYS_close 6
%define SYS_unlink      10
%define SYS_execve      59
%define SYS_lseek 199   ;old was 19
%define SYS_utime 138
%define SYS_kill  37
%define SYS_rename      128
%define SYS_pipe  42
%define SYS_ioctl 54
%define SYS_dup2  90
%define SYS_sigaction   46    ;also 342 *** take care if >255 cause only register al used
%define SYS_readlink    58
%define SYS_fchown      123
%define SYS_fchmod      124
%define SYS_fstat 279   ;old was 189
%define SYS_wait4 7
%define SYS_select      93

%ifdef OPENBSD
%undef SYS_kill
%undef SYS_sigaction
%undef  SYS_fstat 
%define SYS_fstat 189   ;could not test 292
%endif

%ifdef NETBSD
%undef SYS_kill         ;both
%undef SYS_sigaction    ;currently only for old COMPAT layer working
%endif


%define time_t    resd

      struc utimbuf_struc
.actime: time_t  2
.modtime:time_t 2
      endstruc
      
%undef CAPTURE_STDERR
%ifdef EX
 %define USE_EX_NO_SED
 %define EX_PATH '/usr/bin/ex'            ;(ex is usually a symlink to vi)   [ old was /bin/ex ]
%else
 %undef USE_EX_NO_SED
 %ifndef PERLPIPE
 %define SEDPATH '/usr/bin/sed'           ;DEFAULT
 %else
 %define SEDPATH '/usr/bin/perl'
 %endif
%endif

MAXERRNO    equ 32
ERRNOMEM    equ 12
ERRNOIO           equ 5
ERRNOEXEC   equ 31
ERRNOREGFILE      equ 21
      %macro errortext 0
db "Op not permitted",10            ;1
db "No such file|directory",10            ;2
db 10                         ;3
db 10                         ;4
db "Input/output",10                ;5
db "No such device",10              ;6
db 10                         ;7
db 10                         ;8
db "Bad file descriptor",10         ;9
db "No child processes",10          ;10
db 10                         ;11         
db "Memory exhausted",10            ;12
db "Permission denied",10           ;13
db 10                         ;14
db 10                         ;15
db "Device busy",10                 ;16
db "File exists",10                 ;17
db 10                         ;18
db "No such device",10              ;19
db 10                         ;20
db "Is a directory",10              ;21
db "Invalid argument",10            ;22
db "Too many open files",10         ;23
db "Too many open files",10         ;24
db "Inappropriate ioctl",10         ;25
db "Text file busy",10              ;26
db "File too large",10              ;27
db "No space on device",10          ;28
db "Illegal seek",10                ;29
db "R/O file system",10             ;30
db "Can't exec "              ;31
%ifdef USE_EX_NO_SED
db EX_PATH,10
%else
db SEDPATH,10
%endif
db "Broken pipe",10                 ;32
      %endmacro
%ifdef LIBC
 extern open,read,write,close,lseek,rename,_exit,ioctl,fstat,fchown,select,unlink,fchmod
 extern errno
 %undef SYS_readlink
 %undef SYS_brk
 %undef SYS_kill
 %undef SYS_sigaction
 %undef USE_PIPE
%endif

%else
%ifdef W32  ;----------------------- W I N  32 -----------------------
%define W32LF                       ;<-- controls linefeed style

STD_INPUT_HANDLE  equ -10
STD_OUTPUT_HANDLE equ -11
ENABLE_WINDOW_INPUT     equ 8
FILE_ATTRIBUTE_NORMAL   equ 128
OPEN_EXISTING           equ 3
CREATE_ALWAYS           equ 2
GENERIC_READ            equ $80000000
GENERIC_WRITE           equ $40000000
INVALID_HANDLE_VALUE    equ -1
FOREGROUND_BLUE         equ 1
FOREGROUND_GREEN  equ 2
FOREGROUND_RED          equ 4
FOREGROUND_INTENSITY    equ 8
DARKWHITE         equ (FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_RED)
WHITE             equ (DARKWHITE|FOREGROUND_INTENSITY)
BACKGROUND_BLUE         equ 16
YELLOW_BLUE       equ FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY|BACKGROUND_BLUE
YELLOW_BLUE_TWICE equ YELLOW_BLUE| (YELLOW_BLUE<<16)
LEFT_ALT_PRESSED  equ 2
CTRL_PRESSED            equ 12
VK_SPACE          equ 0x0020
VK_PRIOR          equ 0x0021
VK_DELETE         equ 0x002E
CF_OEMTEXT        equ 7

extern MessageBoxA,MessageBeep,ExitProcess
extern GetStdHandle,GetCommandLineA,GetLastError,SetConsoleTextAttribute
extern SetConsoleMode,GetConsoleScreenBufferInfo,SetConsoleCursorPosition
extern WriteFile,ReadFile,CreateFileA,CloseHandle,SetFilePointer,MoveFileA,DeleteFileA
extern FillConsoleOutputAttribute,WaitForSingleObject,ReadConsoleA,ReadConsoleInputA
extern FlushConsoleInputBuffer,WriteConsoleOutputCharacterA,WriteConsoleOutputAttribute
extern HeapCreate,HeapAlloc,HeapFree,HeapDestroy,OpenClipboard,EmptyClipboard
extern SetClipboardData,GetClipboardData,IsClipboardFormatAvailable,CloseClipboard
      %define W32_EXTENDED_IO
      %undef USE_PIPE

MAXERRNO    equ 32
ERRNOMEM    equ 8
ERRNOIO           equ 7

      %macro errortext 0
db "invalid function",10            ;1
db "file not found",10              ;2
db "path not found",10              ;3
db "too many open files",10         ;4
db "access denied",10               ;5
db "invalid handle",10              ;6
db "I/O error",10             ;7
db "not enough memory",10           ;8
db 10                         ;9
db 10                         ;10
db 10                         ;11
db 10                         ;12
db 10                         ;13
db 10                         ;14
db 10                         ;15
db 10                         ;16
db 10                         ;17
db 10                         ;18
db 10                         ;19
db 10                         ;20
db 10                         ;21
db 10                         ;22
db 10                         ;23
db 10                         ;24
db 10                         ;25
db 10                         ;26
db 10                         ;27
db 10                         ;28
db 10                         ;29
db 10                         ;30
db 10                         ;31
db "sharing violation",10           ;32
      %endmacro

%else       ;----------------------- END OS -----------------------
%error no OS defined
%endif
%endif
%endif
%endif
%endif
%endif


%ifdef TERMIOS_SET
%ifdef ARMCPU
      struc termios_struc
.c_iflag:   resd 1
.c_oflag:   resd 1
.c_cflag:   resd 1
.c_lflag:   resd 1
.c_line:    resb 1
.c_cc:            resb NCCS
      endstruc
%else
%define tcflag_t  resd
%define cc_t            resb
      struc termios_struc
.c_iflag:   tcflag_t 1
.c_oflag:   tcflag_t 1
.c_cflag:   tcflag_t 1
.c_lflag:   tcflag_t 1
.c_line:    cc_t 1
%ifdef speed_t1
c_ixxxxx:   speed_t1 1
c_oxxxxx:   speed_t1 1
%endif
.c_cc:            cc_t NCCS
%ifdef speed_t2
res:        resd 3
c_ixxxxx:   speed_t2 1
c_oxxxxx:   speed_t2 1
%endif
%ifdef speed_t3
c_ispeed speed_t3 1
c_ospeed speed_t3 1
%endif
      endstruc
%endif
      struc winsize_struc
.ws_row:resw 1
.ws_col:resw 1
.ws_xpixel:resw 1
.ws_ypixel:resw 1
      endstruc

%ifndef IXON                        ;all except *BSD
%define ICRNL     0000400q
%define IXON      0002000q
%define ICANON    0000002q
%define ISIG      0000001q
%define ECHO      0000010q
%define TSize   byte
%endif
%endif

;-------
%ifndef LINUX
 %undef CRIPLED_ELF
 %undef UTF8
%endif
;--------
;
stdtxtlen   equ 10                  ;do not move this to EOF: code size would increase

%ifdef FREEBSD
SIGCONT           equ 19
SIGSTOP           equ 17
O_WRONLY_CREAT_TRUNC equ 601h       ;see fcntl.h
%else
%ifdef QNX
O_WRONLY_CREAT_TRUNC equ 1401q
%else
O_WRONLY_CREAT_TRUNC equ 1101q
%endif
%endif

O_RDONLY    equ 0
PERMS       equ 644q
stdin       equ 0
stdout            equ 1
optslen           equ 124
TAB         equ 8
TABCHAR           equ 09h
SPACECHAR   equ ' '
CHANGED           equ '*'
UNCHANGED   equ SPACECHAR
LINEFEED    equ 0ah
NEWLINE           equ LINEFEED
RETURN            equ 0dh
SEDBLOCK    equ 4096




;--------------------------------------------------------------------------
%ifdef CRIPLED_ELF
;
; building e3 via "nasm -f bin ...."  using an idea from
;"A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux"
;
       %macro ELFheader 0
ehdr: db 0x7F, "ELF", 1, 1, 1, 0    ;Elf32_Ehdr starts here
      dd 0,0
      dw 2                    ;e_type
      dw 3                    ;e_machine
      dd 1                    ;e_version
      dd _start               ;e_entry
      dd phdr1- $$                  ;e_phoff
      dd 0                    ;e_shoff
      dd 0                    ;e_flags
      dw ehdrsize             ;e_ehsize
      dw phdrsize             ;e_phentsize
      dw 2                    ;e_phnum
phdr1:                              ;Elf32_Phdr starts here
      dd 1                    ;both p_type and e_shentsize,e_shnum
      dw 0                    ;both p_offset and e_shstrndx
ehdrsize equ $ - ehdr
      dw 0
      dd $$                   ;p_vaddr
      dd $$                   ;p_paddr
      dd filesize             ;p_filesz
      dd filesize             ;p_memsz
      dd 5                    ;p_flags i.e. READ/EXECUTE
      dd 0;  0x1000                 ;p_align
phdrsize equ $ - phdr1
phdr2:                              ;another Elf32_Phdr starts here
      dd 1                    ;p_type
      dd filesize
      dd $$+filesize
      dd $$+filesize
      dd 0                    ;p_filesz
      dd bsssize              ;p_memsz
      dd 6                    ;p_flags i.e. READ/WRITE
      dd 0;  0x1000                 ;p_align
      %endmacro
%endif
;-------
%ifndef ARMCPU
      %macro ORGheader 0
%ifdef USE_SPECIAL_HEADER
%ifdef TINLINK
      org 0x800004A                 ;see file contrib/README.tinlink624
%else
      org 0x8048000
      ELFheader
%endif
%else
      ;nothing
%endif
      %endmacro
%endif
;-------
%ifdef DYN                    ;DYN == "libc dynamic linked"
 %define _start main                ;call it "main", libc startup code expects this name
%endif

;-------
%ifdef AMD64
  %macro PUSH_ALL 0
      push rax
      push rbx
      push rcx
      push rdx
      push rsi
      push rdi
      push rbp
  %endmacro
  %macro POP_ALL 0
      pop  rbp
      pop  rdi
      pop  rsi
      pop  rdx
      pop  rcx
      pop  rbx
      pop  rax
  %endmacro
%else
  %macro PUSH_ALL 0
      pusha
  %endmacro
  %macro POP_ALL 0
      popa
  %endmacro
%endif
;--------------------------------------------------------------------------

Generated by  Doxygen 1.6.0   Back to index