Subversion Repositories Kolibri OS

Rev

Rev 9718 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9718 Coldy 1
; 2022, Edited by Coldy
2
; Added changes for auto load & linking
3
 
4
format binary as "kex"
5
 
6
use32
7
        org     0x0
8
        db      'MENUET01'
9
        dd      0x02          ; 2 - for enable autoload feature
10
        dd      START
11
        dd      IM_END
12
        dd      MEM
13
        dd      MEM
14
        dd      0
15
        dd      0
16
 
17
        ; { Begin of KX header (this need for recognition by dll.obj)
18
 
19
        db  'KX',0            ; Signature/Magic
20
        db  0                 ; Revision
21
        db  1000000b          ; Flags0  (user app w/import)
22
        db  0                 ; Flags1
23
        dw  0                 ; Reserved
24
 
25
        dd  @IMPORT           ; Pointer to import table
26
 
27
        ; } End of KX header
28
 
29
include '../../../../../../macros.inc'
30
include '../../../../../../proc32.inc'
31
include '../../../../../../KOSfuncs.inc'
32
 
9812 Coldy 33
; no needed for autoload
9718 Coldy 34
;include '../../../../../dll.inc'
35
;include '../../../../../debug-fdo.inc'
36
 
37
;__DEBUG__               = 1
38
;__DEBUG_LEVEL__         = 2
39
 
40
START:
41
        ; Disabled, dll.obj doing this
42
        ;stdcall dll.Load, @IMPORT
43
        ;test    eax, eax
44
        ;jnz     exit
45
 
46
        cinvoke libc_strlen, test_str1
47
        ;DEBUGF 2, "%d", eax
48
        mcall   SF_SYS_MISC, SSF_MEM_ALLOC, eax
49
        mov     [test_str2], eax
50
 
51
        cinvoke libc_sprintf, [test_str2], format_str, str_var, [dec_var], dword [float_var], dword[float_var+4], [hex_var]
52
        cinvoke libc_puts, test_str1
53
        cinvoke libc_puts, [test_str2]
54
 
55
        cinvoke libc_strcmp, test_str1, [test_str2]
56
 
57
        test    eax, eax
58
        jz      print_succ
59
        jmp     print_fail
60
 
61
print_succ:
62
        cinvoke libc_puts, success_msg
63
        jmp exit
64
 
65
print_fail:
66
        cinvoke libc_puts, failed_msg
67
 
68
exit:
69
        mcall   SF_SYS_MISC, SSF_MEM_FREE, [test_str2]
70
        //mcall   SF_TERMINATE_PROCESS - disabled, dll.obj also doing this
71
        ret
72
 
73
; data
74
 
75
format_str  db "%s %d %f 0x%x", 0
76
test_str1   db "Test 463 -26.432100 0x9d81", 0
77
test_str2   dd 0
78
 
79
str_var     db "Test",0
80
dec_var     dd 463
81
float_var   dq -26.4321
82
hex_var     dd 40321
83
 
84
success_msg db "Test successful!", 0
85
failed_msg  db "Test failed!", 0
86
 
87
align 4
88
 
89
@IMPORT:
90
library libc,   'libc.obj'
91
import  libc,   \
92
        libc_sprintf, 'sprintf', \
93
        libc_strcmp, 'strcmp', \
94
        libc_strlen, 'strlen', \
95
        libc_puts, 'puts'
96
 
97
IM_END:
98
align   4
99
rb      1024    ; stack
100
MEM: