;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; RDOS operating system
; Copyright (C) 1988-2000, Leif Ekblad
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version. The only exception to this rule
; is for commercial usage in embedded systems. For information on
; usage in commercial embedded systems, contact embedded@rdos.net
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
;
; The author of this program may be contacted at leif@rdos.net
;
; USER32.ASM
; 32-bit user32.dll emulation
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
						
	NAME  user32

;;;;;;;;; INTERNAL ProcEDURES ;;;;;;;;;;;

.386p
.model flat

include ..\os\user.def

UserGate      MACRO gate_nr
	db 66h
	db 9Ah
	dw 0
	dw 280Bh + (gate_nr SHL 4)
			ENDM

.code
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       
;
;       NAME:           DllMain
;
;       DESCRIPTION:    DLL entry point
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DllMain Proc near
	mov	eax, 1
	ret 12
dllMain Endp
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       
;
;       NAME:           Borland32
;
;       DESCRIPTION:    Borland32
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	public Borland32

Borland32:
	int 3
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       
;
;       NAME:           EnumThreadWindows
;
;       DESCRIPTION:    Enum thread Windows
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	public EnumThreadWindows

EnumThreadWindows Proc near
	mov eax, 1
	ret 12
EnumThreadWindows Endp

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       
;
;       NAME:           CharUpperBuff
;
;       DESCRIPTION:   	Convert chars to uppercase
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	public CharUpperBuffA

cubBuf		EQU 8
cubSize		EQU 12

UCaseTab:
ct00 DB	0,		0,		0,		0,		0,		0,		0,		0
ct08 DB	0,		0,		0,		0,		0,		0,		0,		0
ct10 DB	0,		0,		0,		0,		0,		0,		0,		0
ct18 DB	0,		0,		0,		0,		0,		0,		0,		0
ct20 DB ' ',	'!',	0,		'#',	'$',	'%',	'&',	27h
ct28 DB '(',	')',	0,		0,		0,		'-',	0,		'/'
ct30 DB '0',	'1',	'2',	'3',	'4',	'5',	'6',	'7'
ct38 DB '8',	'9',	0,		0,		0,		0,		0,		0
ct40 DB '@',	'A',	'B',	'C',	'D',	'E',	'F',	'G'
ct48 DB 'H',	'I',	'J',	'K',	'L',	'M',	'N',	'O'
ct50 DB 'P',	'Q',	'R',	'S',	'T',	'U',	'V',	'W'
ct58 DB	'X',	'Y',	'Z',	0,		'\',	0,		'^',	'_'
ct60 DB 60h,	'A',	'B',	'C',	'D',	'E',	'F',	'G'
ct68 DB 'H',	'I',	'J',	'K',	'L',	'M',	'N',	'O'
ct70 DB 'P',	'Q',	'R',	'S',	'T',	'U',	'V',	'W'
ct78 DB 'X',	'Y',	'Z',	'{',	0,		'}',	'~',	0
ct80 DB	0,		0,		0,		0,		'Ž',	0,		'',	0
ct88 DB	0,		0,		0,		0,		0,		0,		'Ž',	''
ct90 DB	0,		0,		0,		0,		'™',	0,		0,		0
ct98 DB	0,		'™',	0,		0,		0,		0,		0,		0
ctA0 DB	0,		0,		0,		0,		0,		0,		0,		0
ctA8 DB	0,		0,		0,		0,		0,		0,		0,		0
ctB0 DB	0,		0,		0,		0,		0,		0,		0,		0
ctB8 DB	0,		0,		0,		0,		0,		0,		0,		0
ctC0 DB	0,		0,		0,		0,		0,		0,		0,		0
ctC8 DB	0,		0,		0,		0,		0,		0,		0,		0
ctD0 DB	0,		0,		0,		0,		0,		0,		0,		0
ctD8 DB	0,		0,		0,		0,		0,		0,		0,		0
ctE0 DB	0,		0,		0,		0,		0,		0,		0,		0
ctE8 DB	0,		0,		0,		0,		0,		0,		0,		0
ctF0 DB	0,		0,		0,		0,		0,		0,		0,		0
ctF8 DB	0,		0,		0,		0,		0,		0,		0,		0

CharUpperBuffA Proc near
	push ebp
	mov ebp,esp
;
	xor eax,eax
	mov ecx,[ebp].cubSize
	mov edx,[ebp].cubBuf
cubLoop:
	mov al,[edx]
	mov al,byte ptr [eax].UCaseTab
	or al,al
	jnz cubOk
	mov al,[edx]
cubOk:
	mov [edx],al
	inc edx
	loop cubLoop
	mov eax,[ebp].cubSize	
;
	pop ebp
	ret 8
CharUpperBuffA ENDP
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       
;
;       NAME:           MessageBox
;
;       DESCRIPTION:    Message box
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	public MessageBoxA

MessageBoxA Proc near
	push ebp
	mov ebp,esp
	push edi
;
	UserGate set_text_mode_nr
;
	mov edi,[ebp+16]
	UserGate write_asciiz_nr
	mov al,0Dh
	UserGate write_char_nr
	mov al,0Ah
	UserGate write_char_nr
;
	mov edi,[ebp+12]
	UserGate write_asciiz_nr
	mov al,0Dh
	UserGate write_char_nr
	mov al,0Ah
	UserGate write_char_nr
	mov eax, 1
;
	pop edi
	pop ebp
	ret 16
MessageBoxA Endp
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       
;
;       NAME:           GetKeyboardType
;
;       DESCRIPTION:    Get keyboard type
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	public GetKeyboardType

GetKeyboardType Proc near
	mov eax, 4
	cmp byte ptr [esp+4], 2
	jz short gkbt00
	mov eax, 12

gkbt00:
	ret 4
GetKeyboardType Endp
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       
;
;       NAME:           GetSystemMetrics
;
;       DESCRIPTION:    Get system metrics
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	public GetSystemMetrics

GetSystemMetrics Proc near
	sub eax, eax
	ret 4
GetSystemMetrics Endp
	
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       
;
;       NAME:           LoadString
;
;       DESCRIPTION:    Load string
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	public LoadStringA

LoadStringA Proc near
	int 3
	xor eax,eax
	ret 16
LoadStringA Endp

END DllMain