The MASM Forum Archive 2004 to 2012

Miscellaneous Forums => Miscellaneous Projects => Topic started by: Rockphorr on March 11, 2008, 11:04:10 AM

Title: presentation of my program
Post by: Rockphorr on March 11, 2008, 11:04:10 AM
I wrote my small commander.

It's attached.

Just unpuck in some folder & use.

Use arrows and tab to control dialog windows.

Don't foget about Tab.

[attachment deleted by admin]
Title: Re: presentation of my program
Post by: Rockphorr on October 31, 2009, 05:44:38 AM
New russian version now avaible here.
Title: Re: presentation of my program
Post by: japheth on October 31, 2009, 07:41:55 AM

Thanks!

But: no possibility to view (F3) or edit (F4) a file?
Title: Re: presentation of my program
Post by: Rockphorr on October 31, 2009, 01:41:10 PM
It is slow to write internal viewer/editor.
Call external user editor are forthcoming.

japheth do you know russian language??
Title: Re: presentation of my program
Post by: 0x401000 on November 01, 2009, 10:51:33 AM
Sources are expected? Very interesting  :U
Title: Re: presentation of my program
Post by: BlackVortex on November 01, 2009, 10:56:43 AM
Damn, it's 16-bit ... I can't run it on my x64 system  :eek

Title: Re: presentation of my program
Post by: Rockphorr on November 01, 2009, 12:15:14 PM
Quote from: BlackVortex on November 01, 2009, 10:56:43 AM
Damn, it's 16-bit ... I can't run it on my x64 system  :eek

virtual enviroment like sun virtualbox are not solution for you, isn't it???
Title: Re: presentation of my program
Post by: Rockphorr on November 01, 2009, 12:17:33 PM
Quote from: 0x401000 on November 01, 2009, 10:51:33 AM
Sources are expected? Very interesting  :U

source code are on site, that link is censored
Title: Re: presentation of my program
Post by: BlackVortex on November 01, 2009, 02:03:54 PM
Quote from: Rockphorr on November 01, 2009, 12:15:14 PM
Quote from: BlackVortex on November 01, 2009, 10:56:43 AM
Damn, it's 16-bit ... I can't run it on my x64 system  :eek

virtual enviroment like sun virtualbox are not solution for you, isn't it???
Lol, I forgot about my virtual XP32. I tested it and it works fine but it's too few lines on the screen !

Reminded me of Norton Commander !   :toothy
Title: Re: presentation of my program
Post by: Rockphorr on November 05, 2009, 08:31:46 AM
If someone want correct or translate messages of my program  i can post incfiles that include all messages.
Please notify your language here.
Your name may by add to copyright page as translator.
Title: Re: presentation of my program
Post by: Rockphorr on November 03, 2010, 08:13:40 AM
Hi !!
Can admins or moderators move this my topic to (The MASM Forum)\( Miscellaneous Forums)\( Miscellaneous Projects)

Thanx.
Title: Re: presentation of my program
Post by: Rockphorr on November 03, 2010, 08:24:55 AM
Source code fragments


;=======[ SUBROUTINE ]============================
; Set current drive
;-------------------------------------------------
; Return:
;-------------------------------------------------
; Parameters:
; AL - drive leter
dos_fn\
= 0Eh
;-------------------------------------------------
@Service_public\
Set_Drive
push DX
push AX
;-----------------------------------------
IF @Alone
@Call_far\
wrap_bem,@AL_Case_Up_ID
ELSE
call AL_Case_Up
ENDIF
;-----------------------------------------
mov DL,'Z'
cmp DL,AL
jb _exit
;-----------------------------------------
mov DL,'A'
cmp AL,DL
jb _exit
;-----------------------------------------
cmp AH,':'
stc
jnz _exit
;-----------------------------------------
xchg AL,DL
sub DL,AL
mov AH,dos_fn
int 21h
clc
;-----------------------------------------
_exit:
pop AX
pop DX
@Service_end

;=======[ SUBROUTINE ]============================
; Get current drive
;-------------------------------------------------
; Return:
; AL = drive letter
; AH = ':'
;-------------------------------------------------
; Parameters:
dos_fn\
= 19h
;-------------------------------------------------
@Service_public\
Get_Drive
;-----------------------------------------
mov AH,dos_fn
int 21h
add AL,'A'
mov AH,':'
;-----------------------------------------
@Service_end

;=======[ SUBROUTINE ]============================
; Create list of drive leters
;-------------------------------------------------
; Return:
; AL = current drive
; AH = total drives
;-------------------------------------------------
; Parameters:
; ES:DI - seg:ofs(area of drive letters)
dos_fn\
= 0Eh
dos_fn_a\
= 19h
;-------------------------------------------------
@Service_public\
Create_Drive_List
push DI
push CX
push DX
;-----------------------------------------
call Create_floppy_list
mov CH,AL
mov CL,1+26-2
;-----------------------------------------
; CH - total floppy drives
; DH - current drive
;-----------------------------------------
_get:
IF @Alone
@Call_far\
storage_wos,@Get_Drive_ID
ELSE
call Get_Drive
ENDIF
;-----------------------------------------
cmp CL,1+26-2
je _first
cmp AL,DL
je _write
;-----------------------------------------
_next:
cmp CL,1
je _last
mov DL,1+26
sub DL,CL
add DL,'A'
;-----------------------------------------
; DL - drive of iteration
;-----------------------------------------
_set:
mov AL,DL
mov AH,':'
;-----------------------------------------
IF @Alone
@Call_far\
storage_wos,@Set_Drive_ID
ELSE
call Set_Drive
ENDIF
;-----------------------------------------
dec CL
jnz _get
jz _exit
;-----------------------------------------
_first:
mov DH,AL
jmp\
short _next
;-----------------------------------------
_last:
mov DL,DH
jmp\
short _set
;-----------------------------------------
_write:
stosb
inc CH
jmp\
short _next
;-----------------------------------------
_exit:
mov AH,CH
mov AL,DH
;-----------------------------------------
pop DX
pop CX
pop DI
@Service_end

кусочек кода отвечающий за вывод строки в прямоуголник на экране

;=======[ SUBROUTINE ]============================
; Write field text
;-------------------------------------------------
; Parameters:
; DS:SI - seg:ofs(Widget)
@Activity\; 0FFh is active, 000h is passive
= -08h
;-------------------------------------------------
@Routine_private\
Fld_Write_Text
push BX
push CX
push DX
push AX
;-----------------------------------------
mov CX,(Widget PTR [SI])\
.Widget_Total
stc
jcxz $exit
call Fld_Get_Capacity
mul AH
mov DX,AX
mov BX,(Widget PTR [SI])\
.Widget_Arrow
sub BX,(Widget PTR [SI])\
.Widget_Base
jc $less
cmp  BX,DX
jae $greater
jmp\
short $tail
;-----------------------------------------
$less:
add (Widget PTR [SI])\
.Widget_Base,BX
mov AX,BX
jmp\
short $tail
;-----------------------------------------
$greater:
mov AX,BX
sub AX,DX
inc AX
add (Widget PTR [SI])\
.Widget_Base,AX
;-----------------------------------------
$tail:
mov CX,DX
$loop:
push [BP+@Activity]
mov AX,DX
sub AX,CX
push AX
push (Widget PTR [SI])\
.Widget_Total
push (Widget PTR [SI])\
.Widget_Arrow
push (Widget PTR [SI])\
.Widget_Base
mov AX,(Widget PTR [SI])\
.Widget_Coords
push AX
call Fld_Write_Tail
loop $loop
clc
;-----------------------------------------
$exit:
pop AX
pop DX
pop CX
pop BX
@Routine_end

;=======[ SUBROUTINE ]============================
; Write tail
;-------------------------------------------------
; Parameters:
; DS:SI - seg:ofs(widget)
@Activity\
= 0Eh
@Ordinal\
= 0Ch
@Total\
= 0Ah
@Arrow\
= 8
@Base\
= 6
@Coords\
= 4
;-------------------------------------------------
@Routine_private\; my macro of std prologue
Fld_Write_Tail
push DS
push ES
push SI
push DI
push CX
push DX
;-----------------------------------------
call Fld_Seek_Style
;-----------------------------------------
mov AX,ES: (Field PTR [DI])\
.Field_Symbol_Quantity
or AL,AL
jz $exit
or AH,AH
jz $exit
;-----------------------------------------
lds SI,(Widget PTR [SI])\
.Widget_Stuff_Address
mov AX,ES: (Field PTR [DI])\
.Field_Coords
add [BP+@Coords],AL
add [BP+@Coords]+1,AH
;-----------------------------------------
mov AX,[BP+@Ordinal]
div ES: BYTE PTR (Field PTR [DI])\
.Field_Symbol_Quantity
xchg AL,AH
add AL,[BP+@Coords]
add AH,[BP+@Coords]+1
;-----------------------------------------
IF @Alone
@P_Locate\
AX
@Call_far\
field_dso,@Set_AX_Coords_ID
ELSE
@Locate\
AX
ENDIF
;-----------------------------------------
mov DX,[BP+@Ordinal]
add DX,[BP+@Base]
mov CX,[BP+@Activity]
jcxz $passive
cmp DX,[BP+@Arrow]
jne $active
call ES: (Field PTR [DI])\
.Field_Method_Cursor; set cur coord
;-----------------------------------------
$active:
mov AX,CS:Field_Palette
xchg AL,AH
jmp\
short $color
$passive:
mov AX,CS:Field_Palette
;-----------------------------------------
IF @Alone
@P_Color\
AX,Color
@Call_far\
field_dso,@Set_Color_ID
@Call_far\
field_affix,@Measure_String_ID
ELSE
@Color
call Measure_String
ENDIF
;-----------------------------------------
inc AX
cmp AX,[BP+@Total]
jbe $inside
mov AX,[BP+@Total]
;-----------------------------------------
$inside:
cmp DX,AX
jae $space
add SI,DX
lodsb
or AL,AL
jnz $write
;-----------------------------------------
$space:
mov AL,ES: (Field PTR [DI])\
.Field_Space_Symbol
;-----------------------------------------
$write:
IF @Alone
@P_Out_One\
AL
@Call_far\
field_dso,@Out_AL_Symbol_ID
ELSE
@Out_One
ENDIF
;-----------------------------------------
$exit:
pop DX
pop CX
pop DI
pop SI
pop ES
pop DS
@Routine_end 0Ch

Title: Re: presentation of my program
Post by: Rockphorr on November 03, 2010, 08:48:25 AM
Thanx Hutch, he moved my topic here.

new russian version
Title: Re: presentation of my program
Post by: dedndave on November 03, 2010, 10:28:00 AM
crashes under XP...
The NTVDM CPU has encountered an illegal instruction.
CS:0000 IP:0077 OP:f0 37 05 1b 02 Choose 'Close' to terminate the application.

that makes no sense   :P
why would the CS = 0 ?
some peculiarity with NTVDM, i guess

edit:
the opcodes they report disassemble to:
        lock    aaa
        add     ax,21Bh

Title: Re: presentation of my program
Post by: Rockphorr on November 03, 2010, 11:11:27 AM
Quote from: dedndave on November 03, 2010, 10:28:00 AM
crashes under XP...
The NTVDM CPU has encountered an illegal instruction.
CS:0000 IP:0077 OP:f0 37 05 1b 02 Choose 'Close' to terminate the application.

that makes no sense   :P
why would the CS = 0 ?
some peculiarity with NTVDM, i guess

edit:
the opcodes they report disassemble to:
        lock    aaa
        add     ax,21Bh



path of this prog must be dos like style (does not use spaces, chars over 128 and length over 63 chars )

CS = 0 in table for all loading images in \swap subfolder at start up
when load is done i write them segs in table
i use old dos fns and error check is very sipmle and present not ever

on win 2003 - ok
Title: Re: presentation of my program
Post by: Rockphorr on November 07, 2010, 08:43:04 AM
Quote from: dedndave on November 03, 2010, 10:28:00 AM
crashes under XP...
The NTVDM CPU has encountered an illegal instruction.
CS:0000 IP:0077 OP:f0 37 05 1b 02 Choose 'Close' to terminate the application.

that makes no sense   :P
why would the CS = 0 ?
some peculiarity with NTVDM, i guess

edit:
the opcodes they report disassemble to:
        lock    aaa
        add     ax,21Bh




Can you launch it ?
Title: Re: presentation of my program
Post by: dedndave on November 07, 2010, 10:27:58 AM
no - i tried it in the root directory
same error
Title: Re: presentation of my program
Post by: japheth on November 07, 2010, 11:06:07 AM

There's a problem in your program:


1371:01B6 9A00003615        CALL    1536:0000
1371:01BB E828FF            CALL    00E6
-u 8f
1371:008F 9A27008B14        CALL    148B:0027
1371:0094 7208              JB      009E
1371:0096 9ABA008B14        CALL    148B:00BA
1371:009B E8CAFF            CALL    0068
1371:009E C3                RET
1371:009F 1E                PUSH    DS
1371:00A0 52                PUSH    DX
1371:00A1 8CC8              MOV     AX,CS
1371:00A3 8ED8              MOV     DS,AX
1371:00A5 9A92003615        CALL    1536:0092
1371:00AA 2EA30402          MOV     CS:[0204],AX
1371:00AE 2EA31902          MOV     CS:[0219],AX
-u 148b:ba
148B:00BA 1E                PUSH    DS
148B:00BB 8CC8              MOV     AX,CS
148B:00BD 8ED8              MOV     DS,AX
148B:00BF E8E7FF            CALL    00A9
148B:00C2 9A05000000        CALL    0000:0005    ;<----- ???
148B:00C7 9A05000000        CALL    0000:0005    ;<----- ???
148B:00CC 1F                POP     DS
148B:00CD CB                RETF
148B:00CE 0000              ADD     [BX+SI],AL


It crashes when 0000:0005 is executed. Might be a link error.
Title: Re: presentation of my program
Post by: ramguru on November 07, 2010, 11:25:46 AM
wow, I have to use an emulator in order to run this program in Windows 7 64bit, not exactly handy..
16bit appz are extinct, face it !
Title: Re: presentation of my program
Post by: dedndave on November 07, 2010, 11:45:14 AM
i got it to work
i had to put the SWAP folder in the same directory as the EXE
so - apparently, if that folder is not present, the code crashes
you may want to add tests to insure that folder and its' contents are present
Title: Re: presentation of my program
Post by: Rockphorr on November 08, 2010, 05:57:33 AM
Quote from: dedndave on November 07, 2010, 11:45:14 AM
i got it to work
i had to put the SWAP folder in the same directory as the EXE
so - apparently, if that folder is not present, the code crashes
you may want to add tests to insure that folder and its' contents are present

you try launch mde.exe alone ??? I think about add ckeck of is swap\*.lis present. But i think that every one who unpack new prog extract all content of .zip in a folder. I do not assume that you try use it alone.
Title: Re: presentation of my program
Post by: Rockphorr on November 08, 2010, 06:00:16 AM
Quote from: Rockphorr on November 03, 2010, 11:11:27 AM
Quote from: dedndave on November 03, 2010, 10:28:00 AM
crashes under XP...
The NTVDM CPU has encountered an illegal instruction.
CS:0000 IP:0077 OP:f0 37 05 1b 02 Choose 'Close' to terminate the application.

that makes no sense   :P
why would the CS = 0 ?
some peculiarity with NTVDM, i guess

edit:
the opcodes they report disassemble to:
        lock    aaa
        add     ax,21Bh




CS = 0 in table for all loading images in \swap subfolder at start up

on win 2003 - ok



i think it means that \swap required.
Title: Re: presentation of my program
Post by: Rockphorr on November 08, 2010, 06:59:20 AM
Quote from: Rockphorr on November 08, 2010, 05:57:33 AM
Quote from: dedndave on November 07, 2010, 11:45:14 AM
i got it to work
i had to put the SWAP folder in the same directory as the EXE
so - apparently, if that folder is not present, the code crashes
you may want to add tests to insure that folder and its' contents are present

you try launch mde.exe alone ??? I will think about add check of is swap\*.lis present. But i think that every one who unpack new prog extract all content of .zip in a folder. I do not assume that you try use it alone.
Title: Re: presentation of my program
Post by: Rockphorr on November 08, 2010, 11:04:47 AM
Quote from: dedndave on November 07, 2010, 11:45:14 AM
i got it to work
i had to put the SWAP folder in the same directory as the EXE
so - apparently, if that folder is not present, the code crashes
you may want to add tests to insure that folder and its' contents are present

dedndave, what do you think about, now when you launch it ???
Title: Re: presentation of my program
Post by: dedndave on November 08, 2010, 11:08:04 AM
i unzipped it into a long-filename folder
it won't work in that folder, so i moved the EXE to a simple-name folder
that's how the error occurs

that is a fatal crash - lol
you should test for any condition that causes fatal error, and display a message

however, i think there is a better solution in this case
i don't know what those files are, but they are small enough to be internal to the EXE
if the EXE is self-contained, no need to test - and it is portable
Hutch just made a tool for converting binaries into data defines using DB   :U
Title: Re: presentation of my program
Post by: dedndave on November 08, 2010, 11:08:59 AM
i can't really say, as i don't read Russian - lol
Title: Re: presentation of my program
Post by: dedndave on November 08, 2010, 11:15:19 AM
another approach is to pack the data internal to the EXE
then, when the program is run, if the files are not present, they are generated

i have a 16-bit program like that
it uses a user-modifiable text file (.CFG)
if the file is not present, it unpacks it and creates it...

http://www.masm32.com/board/index.php?topic=15251.msg124088#msg124088

the EXE without the packed config file data is 19.5 Kb
the EXE with the packed config data is 35.8 Kb (zipped is 27.2 Kb   :bg )
the unpacked config file that it generates is 19.9 Kb
Title: Re: presentation of my program
Post by: Rockphorr on November 08, 2010, 12:06:44 PM
Quote from: dedndave on November 08, 2010, 11:08:59 AM
i can't really say, as i don't read Russian - lol




If someone want correct or translate messages of my program  i can post incfiles that include all messages.
Please notify your language here.
Your name may by add to copyright page as translator.



I can post my russian to english translation inc file. Everyone can correct and make it better. My english is so so as you allready know.
Title: Re: presentation of my program
Post by: Rockphorr on November 08, 2010, 01:47:11 PM
Quote from: japheth on November 07, 2010, 11:06:07 AM

There's a problem in your program:




148B:00BF E8E7FF            CALL    00A9
148B:00C2 9A05000000        CALL    0000:0005    ;<----- ???
148B:00C7 9A05000000        CALL    0000:0005    ;<----- ???



It crashes when 0000:0005 is executed. Might be a link error.


it is not problem - it is incorrect result of my dynamic linking mechanism. - can not load lis or lig file
Title: Re: presentation of my program
Post by: Rockphorr on November 10, 2010, 07:17:33 AM
patched english version (fix bug of halt editor on eol at start of file)

Rename mde_en.zip to mde_en.rar (why rar ext is not allowed ???)

In rar you will find src\src_en.inc - it is file with my translation of messages. If someone can - correct it and post here.
Title: Re: presentation of my program
Post by: dedndave on November 10, 2010, 03:19:18 PM
;-------------------------------------------------
t_alert\
    BYTE    ' Alert ',0
m1_alert\
    BYTE    ' Operation has caused'
    BYTE    ' an error',0
m2_alert\
    BYTE    ' Correct information or'
    BYTE    ' cancel operation. ',0
;-------------------------------------------------
Title: Re: presentation of my program
Post by: Rockphorr on November 11, 2010, 06:09:33 AM
Quote from: dedndave on November 10, 2010, 03:19:18 PM
;-------------------------------------------------
t_alert\
    BYTE    ' Alert ',0
m1_alert\
    BYTE    ' Operation has caused'
    BYTE    ' an error',0
m2_alert\
    BYTE    ' Correct information or'
    BYTE    ' cancel operation. ',0
;-------------------------------------------------


Thank you. :U
Title: Re: presentation of my program
Post by: Rockphorr on November 29, 2010, 07:38:54 PM
News:

I have changed the name of my tool and info in pillars.
Also last I have added thanks to dedndave at help page after copyright.
Title: Re: presentation of my program
Post by: Rockphorr on November 29, 2010, 07:39:27 PM
New version of my renamed tool.

under my xp home it is don't work - i look for bug.

I have found the BUG in my tool.
The cause of error is this wrong algo:


get_memory()
save_in_pointer (reading file modeule)
free_memory
get_memory(); same address
;use it as control table
call reading file module; - overwrite control table by text data


Title: Re: presentation of my program
Post by: Rockphorr on December 04, 2010, 07:28:18 PM
fixed version
Title: Re: presentation of my program
Post by: frktons on December 04, 2010, 08:08:43 PM
Quote from: Rockphorr on December 04, 2010, 07:28:18 PM
fixed version

What do you mean? how do I navigate among folders in the disks? I'm using DosBox in order to see what it does.
I can only see the folder RDT, nothing else, on disk C:\, and virtual disk for DOS commands created by DosBox.

Not really useful in this shape.

After I used it a couple of times, now it doesn't even run on my Win7/64 bit...  ::)

Any reason you are using DOS? It is quite obsolete technology, and hard to run on modern computers.
What kind of Developement tool are you using?


Title: Re: presentation of my program
Post by: japheth on December 04, 2010, 08:20:59 PM

Yes, it works again in XP Home and Pro!

Title: Re: presentation of my program
Post by: Rockphorr on December 05, 2010, 06:34:10 AM
Quote from: frktons on December 04, 2010, 08:08:43 PM
Quote from: Rockphorr on December 04, 2010, 07:28:18 PM
fixed version

What do you mean? how do I navigate among folders in the disks? I'm using DosBox in order to see what it does.
I can only see the folder RDT, nothing else, on disk C:\, and virtual disk for DOS commands created by DosBox.

Not really useful in this shape.

After I used it a couple of times, now it doesn't even run on my Win7/64 bit...  ::)

Any reason you are using DOS? It is quite obsolete technology, and hard to run on modern computers.
What kind of Developement tool are you using?


It is mean that i fix bug and the program runs on xp
If you can not go up level among folders in the disks by using .. - try to place my tool like c:\RDT
Cause i use text vars which has 64 bytes length for path
(enter to folder by pressing enter key on it's name)
i use akelpad and masm as Developement tools
Title: Re: presentation of my program
Post by: Rockphorr on December 05, 2010, 06:36:10 AM
Quote from: japheth on December 04, 2010, 08:20:59 PM

Yes, it works again in XP Home and Pro!




:8)
Title: Re: presentation of my program
Post by: Rockphorr on January 09, 2011, 08:03:34 PM
Rockphorr's Tools Pack

Add new tool, that shows dialogbox like openfile.
Only list explore function works.
Both tools use files in the swap subfolder.
Title: Re: presentation of my program
Post by: Rockphorr on September 23, 2011, 06:34:35 PM
(http://wasm.ru/forum/attachment.php?item=4397&download=1)