; ==================================================; lx Tools, Designed by LXLEVES; http://lxleaves.126.com; http://lxleaves.yeah.net ;; command:; masm lxa.asm; link lxa; exe2bin lxa lxa.com; ========== ==========================================================================================================================================================
Version Equ '
Form8 EQU 201FORM9 EQU 205; = Form10 EQU 187Form11 EQU 186; || Form12 EQU 200; Left Bottomform13 EQU 188
Key_esc EQU 1key_R EQU 19key_Enter EQU 28key_a EQU 30key_s EQU 31key_h EQU 35key_C EQU 46key_Space EQU 57
Key_up EQU 72key_down EQU 80; ================================================== Cseg Segment Org 100h Assume CS: CSEG, DS: CSEG, SS: CSEG; ------------------------------------------------------------------------------------------------------------------------------------ -floodword macro Y, X, Word, Color, Times
Goto Y, X Mov Al, Word Mov BL, Color Mov CX, Times Call Floodword_Macro Endm; ---------------------------------------------------------------------------------------------------------------------------------- --------- Goto Macro Y, X Mov DH, Y Mov DL, X Call Goto_Macro Endm; ------------------------ ---------------- Biosstr Macro Str, Color Mov BL, Color Mov BP, Offset Strlen Str, CX Call Biosstr_Macro endm; ------------ ----------------------------- Strlen Macro Str, Len Mov Si, 0FFFHADD SI, 1 CMP STR [Si], 0H JNE $ -8; goto the 'Add' Fun Above Mov Len, Si endm; ---------------------------------- ------ Getch Macro Char Mov Ah, 0 INT 16H MOV Char, Al Endm
Bioskey Macro Num Mov Ah, Num Int 16h Mov BKey, Ax Endm; ----------------------------------- ---------------------- Putline Macro Y, Color; Name Goto Y, 6 Biosstr FindFiledta_Name, Color; Attr Mov Putline_Color, Color Mov Putline_Y, Y CALL PUTLINE_ATTR_MACRO ENDM ; ------------------------------------------------- ------------
; ================================================== ================= Main Proc Near Mov AX, 3 INT 10h; set textmode call drawwin call getdir; ---------------- -------------------------------------------- Call SetFindFiledta Call Listbox Call Getfun; ------------------------------------------------ ------------- main endp; ================================== =================================; ---------------- ---- DATA ---------------------------- Winhead DB 'LX-Tools', Version,' Designed by LXLEVES, ALL For Free! ',' ', News, 0
INFO0 DB 'USAGE:', 36 DUP (''), 'Support Me: http: //lxleaves.yeah.net' ,0info1 db' keyboard-> r: read Only, H: hide, s: system, A: Archive, C: Clear All. 6088cncard ', 0Info2 DB' Space: Change Drive, ESC: Quit (D Means Directory) ', 0Info3 DB' Usage: ', 0Info4 DB' Keyboard Operation -> R: Read Read, H: Hidden, S: System, A: Archive, C: Clear All Properties', 0Info5 DB 'Spacebar: Change the Drive ESC: Leave In addition, D represents the directory http: //lxleaves.126.com',0info6 db' Path = ', 0
Info7 DB 'Attr Name', 0
INFO8 DB 'File functions', 0
STR_01 DB '-----', 0; STR_DIR DB '
PUTLINE_COLOR DB? PUTLINE_Y DB?; --------------------------------------- FileAttr DB 11011BDefaultattr DB 110111 battr_dir db 010000b; ---------------------------------------- PATH DB 64 DUP ( 0) Allfile db '*. *', 0Listip dw 0listbar DB 1Listflag DB 0FileNum DW 0
; ------------------------------------------------- ------------------------------------------ Drawin:; Draw The Default Win Call CleaLL; ------------------------ Floodword 0, 0, '', 1FH, 80 Floodword 1, 0, Form0, 15FH, 80 Floodword 3, 0, '', 2FH, 80; from now on 'cx' is set to 78, That Is Count Is 78 FloodWord 11h, 0, '', 1FH, 640 Floodword 11H, 1, Form0, 1FH, 78 Floodword 18h, 1 , Form0, 11FH, 78; From now on, the 'cx' is set to 1, That Is Count Is 1
MOV DH, 12H MOV Al, Form3 Mov BL, 1FH MOV CX, 7 @ LO: PUSH CX; AS Macro Need More Space MOV AH, 2 MOV DL, 0 INT 10H MOV CX, 1 MOV AH, 09 INT 10H
MOV AH, 2 MOV DL, 79 INT 10H MOV AH, 09 INT 10H POP CX Inc DH loop @LO
Floodword 11h, 00h, Form1,1fh, 1 FloodWord 11H, 79, Form2,1fh, 1 FloodWord 18h, 0, Form6, 1FH, 1 Floodword 18h, 79, Form7,1fh, 1; Winhead Goto 0,0 Biosstr Winhead, 1FH Goto 18,2 Biosstr Info0,1fh Goto 19,3 Biosstr Info1,1fh goto 21,2, Goto 1,21h Biosstr Info8,1fh; Info6 Goto 2,0 Biosstr Info6, 0EH; Info7 Goto 3,0 Biosstr Info7,2fh Ret; ---------------------------------------------------------------------------------------- -------------------------------------------------- -----------------------------------; --- Macro Call --------- ------------------------------ FLOODWORD_MACRO: MOV AH, 09 MOV BH, 0 INT 10H RETGOTO_MACRO: MOV AH, 2 INT 10H RetbiosStr_Macro: MOV Al, 0 MOV AH, 13H INT 10h Ret; -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------- Putline_attr_macro: Goto Putline_Y, 0 Biosstr Str_01, Putline_Color; Put '-----' MOV DL, FINDFILEDTA_ATTR; IS HIDE? TEST DL, 1B JZ @ PT1 PUSH DX FLOODWORD PUTLINE_Y, 0, 'R', PUTLINE_COLOR, 1 POP DX @ pt1:; is readonly? Test DL, 10B jz @ PT2 PUSH DX FloodWord Putline_y, 1, 'h', PUTLINE_COLOR, 1 POP DX @ Pt2:; is System? Test DL, 100B JZ @ PT3 Push DX FloodWord Putline_y, 2, 'S', PUTLINE_COLOR, 1 POP DX
@ pt3:; is a? test dl, 100000b jz @ PT4 Push DX FloodWord Putline_y, 3, 'A', PUTLINE_COLOR, 1 POP DX @ PT4:; IS DIR? TEST DL, 10000B JZ @ PT5 Push DX Floodword Putline_Y, 4 , 'D', 0ah, 1 pop dx @ pt5: return; ----------------------------------- -------------; Normal Callcleralll: MOV AX, 600H MOV CX, 0 MOV DX, 2479H MOV BH, 7 INT 10h Ret; ============= ============================================================================================================================================================================================================= === setFindFiledta: MOV AH, 1AH LEA DX, FINDFILEDTA; 42 DUP (') INT 21H RET; -------------------------- ---------------------- Findfirst: Lea DX, Allfile; *. * MOV CX, 0; FileAttrib Mov CL, FileAttr Mov AH, 4EH INT 21h Call Checkfind Retcheckfind: Push Ax Mov Ah, FindFiledta_name Mov Al, FindFiledta_name [1] CMP AH, '.' JE @ Check2 Pop Ax Ret @ Check2: Cmp Al, 0 Je @Not Pop Ax Ret @ NOT: POP AX CALL FINDNEXT RET; --------------------------------------------- Findnext: MOV AH, 4FH INT 21H Call Checkfind Ret; --------------------------------------- ------- Listbox:; Clear The List Space; if Listbar = 0 || Listbar = 14 MOV AH, Defaultattr MOV Fil Eattr, Ahmov DL, Listflag CMP DL, 1 JE ClearListBox Mov DL, Listbar CMP DL, 1 JE ClearListBox CMP DL, 13 JE CLARLISTBOX JMP NotclearListbox
ClearListbox: FloodWord 4, 0, '', 00h, 1040NotclearListbox:; ---------------- Call Findfirst MOV BX, Listipcheckip: CMP BX, 0 JE IPOK SUB BX, 1 CALL FindNext CMP AX, 18 JE Stoplist; if Not Find CMP AX, 2 Je Stoplist; if Error Occur JMP Checkip
IPOK: MOV DH, 4
nextcheck: mov dl, listbar add dl, 3 cmp dh, dl; check whether is a select bar je selectcheck; if not select bar cmp dh, 11h jnl stoplist putline dh, 07h; to make more than jump jmp nextfindnextfind: call findnext cmp AX, 18 Je Stoplist; if not find add dh, 1; line = 1 JMP nextcheckstoplist: Retselectcheck: FloodWord DH, 0, '', 4FH, 19 PUTLINE DH, 4FH MOV DL, DH SUB DL, 3 MOV Listbar, DL LEA Di, SELECTFILE_NAME LEA SI, FINDFILEDTA_NAME CLD MOV CX, 13 Rep Movsb Mov Cl, FindFiledta_attr Mov SelectFile_attr, CL JMP nextfind
; ================================================== ============================== getFun: Call getFilenum Goto 2,79 Bioskey 0; ========= ==== mainfun ============== Mov AX, BKEY; ------------------- CMP AH, Key_Space JE Getfun_chdrive; -------------------- CMP AH, Key_up JE UP_FUN; -------------------- - CMP AH, Key_Down Je Down_Fun; -------------------- CMP AH, Key_A JE getfun_chmod; -------------- ------- CMP AH, Key_S JE getFun_chmod; -------------------- CMP AH, Key_H je getFun_chmod; ------------ ------------- CMP AH, Key_R JE getFun_chmod; -------------------- CMP AH, Key_C JE getFun_chmod; ------------------- CMP AH, Key_esc JE getfun_quit; -------------------- CMP AH, Key_Enter JE getFun_Enter; -------------------- JMP getfun; ====================== ============ getfun_chmod: call getfun_chmod_more jmp showchangeup_fun: call clear_listbar call up_fun_more jmp showchangegetfun_quit: call quit_fun jmp showchangegetfun_chdrive: call chdrive jmp getfun
GetFun_Enter: MOV AH, SELECTFILE_ATTR CALL GETFUN_ENTER_MORE JMP showchangedown_fun: Call Clear_listbar call down_fun_more jmp showchange
ShowChange: Call GetDir Call Listbox JMP getFun
; ================================================== ===================================================; the more fun for callgetfun_chmod_more: mov al, selectfile_attr cmp ah, key_c je @ chmod6 cmp ah, key_r je @ chmod1 cmp ah, key_s je @ chmod2 cmp ah, key_h je @ chmod3 jmp @ chmod4 @ chmod1:; r xor al, 1b jmp @ chmod5 @ chmod2: ; s xor al, 100b jmp @ chmod5 @ chmod3:; h xor al, 10b jmp @ chmod5 @ chmod4:; a xor al, 100000b jmp @ chmod5 @ chmod6: MOV Al, 0 @ chmod5: MOV CX, 0 MOV CL, Al Lea DX, SELECTFILE_NAME MOV AX, 4301H INT 21h RetClear_Listbar: Mov DL, Listbar Add DL, 3 Floodword DL, 0, '', 00H, 80 RET; -------------------------------------------------------------- -------------- UP_FUN_MORE: MOV AH, Listbar CMP AH, 1 JE UP_SUB SUB AH, 1 MOV Listbar, AH @ Upfun1: Retup_Sub: MOV AX, LISTIP CMP AX, 0 JNG @ Upfun1 Sub AX, 1 MOV LISTIP, AX RET; ----------------------------- Down_Fun_More:; if Listip Listbar> Filenum, Stop Listbar and Downfun Mov Al, Listbar Mov AH, 0 MOV DX, Listip Add DX, AX INC DX MOV AX, FILENUM CMP AX, DX; IF AX <= DX, Stop JL @ Down2; if Not, IF ListBar> 13 MOV Ah, Listbar CMP AH, 13 J NB @ Down_IpAdd1; Else Listbar Inc Ah MoV Listbar, AH @ Down2: Ret @ Down_Ipadd1: Mov AX, Listip Add Ax, 1 MOV LISTIP, AX RET; ----------------- -------------------------- GetFun_Enter_More: Test AH, 10000B; WHETER IS A DIR JNZ @ ENTER1 RET @ Enter1: Call Changedir;
RESET All Mov Listbar, 1 MOV LISTIP, 0 Floodword 4,0, '', 00H, 1040 RET; --------------------------- ------------------ Quit_Fun: Call Messagebox Goto 9,24 Biosstr Quit_ask, 5fh goto 2,79 @ quitfun0: Bioskey 0 MOV AX, BKEY CMP AH, Key_esc je @ quitfun1 CMP AH, Key_Enter Je @ quitfun2 jmp @ quitfun0 @ quitfun1: Call Drawin Call Getdir Mov Listflag, 1 Call ListBox Mov Listflag, 0 Ret @ quitfun2:; End The Soft Call CleaRl Mov AX, 4C00H INT 21h
; ================================================== =================================================== Getdir: floodword 2, 5, '', 00h, 75 MOV AH, 19H INT 21h Add Al, 65 MOV TextInsertbox, Al Floodword 2,5, Al, 0EH, 1 FLOODWORD 2, 6, ':', 0EH, 1 FLOODWORD 2, 7, '/' , 0EH, 1 MOV DL, 0 MOV AH, 47H MOV SI, Offset Path Int 21h Goto 2,8 Biosstr Path, 0EH RET; --------------------- ------------------------- GetFilenum: Mov Ah, Defaultattr Mov BX, 0 MOV FileAttr, AH Call Findfirst CMP AX, 2 JE GFN_QUITGFN_CHECK: CMP AX , 18 JE GFN_SHOW ADD BX, 1 Call Findnext JMP GFN_CHECKGFN_SHOW: MOV FILENUM, BX SUB BX, 1GFN_QUIT: RET; ------------------------------------------------------------------------------------------------------------------ ------------------- Changedir: Lea DX, SELECTFILE_NAME MOV AH, 3BH INT 21h Ret; ----------------- ---------------------------- CHDRIVE: Call MessageBox Goto 9,24 Biosstr ChDrive_s4,5fh @ showch: goto 9,52 Biosstr TextIrtbox , 0B0H BIOSKEY 0 MOV AX, BKEY CMP AH, Key_Enter Je Douserchd_enter CMP AH, Key_esc JE DouserChd_esc