From 1deef2d452952e5273b6a1e6fab03ce41d169095 Mon Sep 17 00:00:00 2001 From: "Marat Zakiyanov (Mario79)" Date: Thu, 1 Jul 2010 07:35:54 +0000 Subject: [PATCH] Proc_Lib.obj - library for common procedures While only OpenDialog calls git-svn-id: svn://kolibrios.org@1509 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../develop/libraries/proc_lib/trunk/build.sh | 10 + .../libraries/proc_lib/trunk/opendial.mac | 259 ++++++++++++++++++ .../libraries/proc_lib/trunk/proc_lib.asm | 50 ++++ .../develop/libraries/proc_lib/trunk/run.bat | 4 + 4 files changed, 323 insertions(+) create mode 100644 programs/develop/libraries/proc_lib/trunk/build.sh create mode 100644 programs/develop/libraries/proc_lib/trunk/opendial.mac create mode 100644 programs/develop/libraries/proc_lib/trunk/proc_lib.asm create mode 100644 programs/develop/libraries/proc_lib/trunk/run.bat diff --git a/programs/develop/libraries/proc_lib/trunk/build.sh b/programs/develop/libraries/proc_lib/trunk/build.sh new file mode 100644 index 0000000000..2efde5e508 --- /dev/null +++ b/programs/develop/libraries/proc_lib/trunk/build.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# This script does for Linux the same as build.bat for DOS, +# it compiles the current KolibriOS applications + + mkdir bin + fasm -m 16384 proc_lib.asm ./bin/proc_lib.obj + exit 0 + + + diff --git a/programs/develop/libraries/proc_lib/trunk/opendial.mac b/programs/develop/libraries/proc_lib/trunk/opendial.mac new file mode 100644 index 0000000000..eb4507db88 --- /dev/null +++ b/programs/develop/libraries/proc_lib/trunk/opendial.mac @@ -0,0 +1,259 @@ +;***************************************************************************** +; Macro for use Open Dialog - for Kolibri OS +; Copyright (c) 2009 2010, Marat Zakiyanov aka Mario79, aka Mario +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: +; * Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; * Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the distribution. +; * Neither the name of the nor the +; names of its contributors may be used to endorse or promote products +; derived from this software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY +; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +; DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;***************************************************************************** +;***************************************************************************** +macro OpenDialog_exit +{ +popa +ret 4 +} +;***************************************************************************** +macro use_OpenDialog +{ +OpenDialog: +od_type equ dword [ebp] ; 0-Open, 1-Save, 2-Dir +od_procinfo equ dword [ebp+4] ; Process info area for function 9 +od_com_area_name equ dword [ebp+8] ; Name for shared area +od_com_area equ dword [ebp+12] ; Adress of shared area +od_opendir_pach equ dword [ebp+16] ; Temp area the directory for show +od_dir_default_pach equ dword [ebp+20] ; Default path of directory, +od_start_path equ dword [ebp+24] ; Location path to OpenDialog +od_draw_window equ dword [ebp+28] ; Adress of procedure - draw_window +od_status equ dword [ebp+32] ; 0-Cancel, 1-Get path OK, 2-Use alternatives +od_openfile_pach equ dword [ebp+36] ; Getting path to file +od_filename_area equ dword [ebp+40] ; Adress of file name area +od_filter_area equ dword [ebp+44] ; Adress of filter area +;***************************************************************************** +.init: + pusha + mov ebp,dword [esp+36] + mcall 9,od_procinfo,-1 + mov ebx,[ebx+30] + mov edi,od_com_area_name + add edi,7 + std + mov ecx,4 +@@: + mov al,bl + and al,1111b + add al,0x30 + stosb + mov al,bl + shr al,4 + and al,1111b + add al,0x30 + stosb + shr ebx,8 + dec ecx + jnz @r + cld + + mcall 68,22,od_com_area_name,8192,0x09 + mov od_com_area,eax + + mov esi,od_openfile_pach + mov edi,od_opendir_pach + call .copy_dir_path + +OpenDialog_exit +;***************************************************************************** +;***************************************************************************** +.start: + pusha + mov ebp,dword [esp+36] + mov eax,od_com_area + test eax,eax + jz .1 + mov ebx,od_type + mov [eax+2],bx + + mov [eax],word 2 ; folder for open + mov edi,eax + add edi,4 + + mov esi,od_opendir_pach + xor eax,eax + mov al,[esi] + test eax,eax + jnz @f + mov esi,od_dir_default_pach ;communication_area_default_pach +@@: + call .copy +;---------------------------------------------- +; copy file name to shared area + cmp od_type,dword 2 + je .4 + mov edi,od_com_area + add edi,4096-256 + + mov esi,od_filename_area + test esi,esi + jnz @f + xor eax,eax + mov [edi],eax + jmp .4 +@@: + call .copy +.4: +;---------------------------------------------- + cmp od_type,dword 2 + je @f + call .get_filter_data +@@: +;---------------------------------------------- + mov eax,od_com_area_name + mov [start_open_dialog.parameter],eax + + mov eax,od_start_path + mov [start_open_dialog.name],eax + + mcall 70,dword start_open_dialog + shr eax,31 + test eax,eax + jnz .1 +.still: + mcall 23,50 + cmp eax,1 + jne @f + pusha + call od_draw_window + popa +@@: + mov eax,od_com_area + movzx ebx,word [eax] + test ebx,ebx + jz .still + cmp ebx,3 + je .2 + cmp ebx,1 + jne .still + + mov esi,od_com_area + add esi,4 + mov edi,od_openfile_pach + call .copy + mov od_status,1 + mov esi,od_openfile_pach + mov edi,od_opendir_pach + call .copy_dir_path +;---------------------------------------------- +; copy file name from shared area + cmp od_type,dword 2 + je @f + mov esi,od_com_area + add esi,4096-256 + mov edi,od_filename_area + test edi,edi + jz @f + call .copy +@@: +;---------------------------------------------- + jmp .3 +.2: + mov od_status,0 + jmp .3 +.1: + mov od_status,2 +.3: +OpenDialog_exit +;---------------------------------------------- +.get_filter_data: + mov edi,od_com_area + test edi,edi + jnz @f +; add esp,4 +; jmp still + ret +@@: + add edi,4096+4 + mov esi,od_filter_area + mov ecx,[esi] + test ecx,ecx + jnz @f + mov edi,od_com_area + mov [edi+4096],dword 0 + ret +@@: + inc ecx + cld + rep movsb + mov edi,od_com_area + mov [edi+4096],dword 1 + ret +;---------------------------------------------- +.copy: + xor eax,eax + cld +@@: + lodsb + stosb + test eax,eax + jnz @b + ret +;---------------------------------------------- +.copy_dir_path: + xor eax,eax + cmp [esi],al + jne @f + mov [edi],al + mov [ebx],al + xor ebx,ebx + inc ebx + ret +@@: + cld + lodsb + stosb + test eax,eax + jnz @b + cmp od_type,dword 2 + jne @f + ret +@@: + mov esi,edi + dec esi +@@: + std + lodsb + cmp al,'/' + jnz @b + + mov [esi+1],byte 0 + cld + ret +;---------------------------------------------- +align 4 +start_open_dialog: +.subfunction dd 7 +.flags dd 0 +.parameter dd 0 ;od_com_area_name +.reserved1 dd 0 +.reserved2 dd 0 + db 0 +.name: dd 0 ;od_start_path +} +;***************************************************************************** \ No newline at end of file diff --git a/programs/develop/libraries/proc_lib/trunk/proc_lib.asm b/programs/develop/libraries/proc_lib/trunk/proc_lib.asm new file mode 100644 index 0000000000..d090de426c --- /dev/null +++ b/programs/develop/libraries/proc_lib/trunk/proc_lib.asm @@ -0,0 +1,50 @@ +;***************************************************************************** +; Proc_Lib - library for common procedures +; +; Authors: +; Marat Zakiyanov aka Mario79, aka Mario +;***************************************************************************** + +format MS COFF + +public EXPORTS + +section '.flat' code readable align 16 +include '../../../../macros.inc' +;include '../../../../proc32.inc' +include 'opendial.mac' + +;----------------------------------------------------------------------------- + +;-------------------------------------------------- +; Open Dialog +;-------------------------------------------------- +align 16 +use_OpenDialog + +;-------------------------------------------------- +align 16 +lib_init: +ret + +;-------------------------------------------------- +align 16 +EXPORTS: + + +dd sz_init, lib_init +dd sz_version, 0x00000001 + +dd sz_OpenDialog_init, OpenDialog.init +dd sz_OpenDialog_start, OpenDialog.start +dd szVersion_OpenDialog, 0x00010001 + +dd 0,0 + + +sz_init db 'lib_init',0 +sz_version db 'version',0 + +sz_OpenDialog_init db 'OpenDialog_init',0 +sz_OpenDialog_start db 'OpenDialog_start',0 +szVersion_OpenDialog db 'Version_OpenDialog',0 diff --git a/programs/develop/libraries/proc_lib/trunk/run.bat b/programs/develop/libraries/proc_lib/trunk/run.bat new file mode 100644 index 0000000000..1cf6e45eac --- /dev/null +++ b/programs/develop/libraries/proc_lib/trunk/run.bat @@ -0,0 +1,4 @@ +if not exist bin mkdir bin +@fasm.exe -m 16384 proc_lib.asm bin\proc_lib.obj +@kpack bin\proc_lib.obj +pause \ No newline at end of file