www.pudn.com > Z0MBIE.rar > CRT.H
void clrscr(byte mode);
void pascal printf_char(char c);
void pascal printf_dword(dword d);
void printf_word(word w);
void printf_byte(byte b);
void pascal printf_long(long l);
void printf_int(int i);
void printf_short(short s);
void pascal printf_hexchar(byte b);
void pascal printf_hexbyte(byte b);
void pascal printf_hexword(word w);
void pascal printf_hexdword(dword d);
void pascal printf_crlf(void);
void printf(pchar format, ...);
void clrscr(byte mode)
{
asm
xor ax, ax
mov al, mode
int 10h
end;
}
void pascal printf_char(char c)
{
asm
mov ah, 2
mov dl, c
int 21h
end;
}
void pascal printf_crlf(void)
{
printf_char(13);
printf_char(10);
}
void pascal printf_dword(dword d)
{
asm
mov eax, d
call __1
jmp __3
__1: xor edx, edx
mov ebx, 10
div ebx
push dx
or eax, eax
jz __2
call __1
__2: pop ax
add al, '0'
push ax
call printf_char
ret
__3:
end;
}
void printf_word(word w)
{
printf_dword(w);
}
void printf_byte(byte b)
{
printf_dword(b);
}
void pascal printf_long(long l)
{
if (l < 0)
{
printf_char('-');
l = -l;
}
printf_dword(l);
}
void printf_int(int i)
{
printf_long(i);
}
void printf_short(short s)
{
printf_long(s);
}
void pascal printf_hexchar(byte b)
{
if (b <= 9)
printf_char('0'+b);
else
printf_char('A'+b-10);
}
void pascal printf_hexbyte(byte b)
{
printf_hexchar(b >> 4);
printf_hexchar(b & 15);
}
void pascal printf_hexword(word w)
{
printf_hexbyte(w >> 8);
printf_hexbyte(w & 255);
}
void pascal printf_hexdword(dword d)
{
printf_hexword(d >> 16);
printf_hexword(d & 65535);
}
void printf(pchar format, ...)
{
int stack_ptr = 0;
asm
push ds
lds si, format
cld
__nextchar:
lodsb
or al, al
jz __exit
cmp al, '%'
je __percent
cmp al, 10
je __crlf
__putchar:
push ax
call printf_char
jmp __nextchar
__crlf: call printf_crlf
jmp __nextchar
__percent:
lodsb
or al, al
jz __exit
cmp al, 'c'
je __c
cmp al, 'i'
je __i
cmp al, 'l'
je __l
cmp al, 'b'
je __b
cmp al, 'w'
je __w
cmp al, 'd'
je __d
cmp al, 'B'
je __B_
cmp al, 'W'
je __W_
cmp al, 'D'
je __D_
jmp __putchar
__pop_ax:
mov di, stack_ptr
add word ptr stack_ptr, 2
mov ax, [bp+8+di]
ret
__pop_eax:
mov di, stack_ptr
add word ptr stack_ptr, 4
mov eax, [bp+8+di]
ret
__c: call __pop_ax
push ax
call printf_char
jmp __nextchar
__s: call __pop_ax
push ax
call printf_short
jmp __nextchar
__i: call __pop_ax
push ax
call printf_int
jmp __nextchar
__l: call __pop_eax
push eax
call printf_long
jmp __nextchar
__b: call __pop_ax
push ax
call printf_byte
jmp __nextchar
__w: call __pop_ax
push ax
call printf_word
jmp __nextchar
__d: call __pop_eax
push eax
call printf_dword
jmp __nextchar
__B_: call __pop_ax
push ax
call printf_hexbyte
jmp __nextchar
__W_: call __pop_ax
push ax
call printf_hexword
jmp __nextchar
__D_: call __pop_eax
push eax
call printf_hexdword
jmp __nextchar
__exit:
pop ds
end;
}