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]
New russian version now avaible here.
Thanks!
But: no possibility to view (F3) or edit (F4) a file?
It is slow to write internal viewer/editor.
Call external user editor are forthcoming.
japheth do you know russian language??
Sources are expected? Very interesting :U
Damn, it's 16-bit ... I can't run it on my x64 system :eek
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???
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
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
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.
Hi !!
Can admins or moderators move this my topic to (The MASM Forum)\( Miscellaneous Forums)\( Miscellaneous Projects)
Thanx.
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
Thanx Hutch, he moved my topic here.
new russian version
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
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
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 ?
no - i tried it in the root directory
same error
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.
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 !
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
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.
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.
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.
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 ???
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
i can't really say, as i don't read Russian - lol
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
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.
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
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.
;-------------------------------------------------
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
;-------------------------------------------------
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
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.
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
fixed version
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?
Yes, it works again in XP Home and Pro!
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
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.
(http://wasm.ru/forum/attachment.php?item=4397&download=1)