Assembly sample source codes
Command line program allows piping of output from other programs
Command line program allows piping of output from other programs into Windows clipboard ; toclip.asm ; ; This code may be assembled and linked using Borland's TASM: ; tasm /la /m2 toclip ; tlink /Tdc toclip ; ; It also works with Microsoft's MASM: ; ml /Fl toclip.asm ; STDIN equ 00h ; handle of standard input device STDOUT equ 01h ; handle of standard output device STDERR equ 02h ; handle of standard error device DOS_READ_HANDLE equ 03fh ; read from handle DOS_WRITE_HANDLE equ 040h ; write to handle DOS_ALLOC_MEM equ 048h ; allocate memory block DOS_RESIZE_MEM equ 04ah ; resize memory block DOS_TERMINATE equ 04ch ; terminate with error code WIN_VERSION equ 01700h ; identify WinOldAp version WIN_OPEN_CLIP equ 01701h ; open clipboard WIN_EMPTY_CLIP equ 01702h ; empty clipboard WIN_SET_CLIP equ 01703h ; set clipboard data WIN_CLOSE_CLIP equ 01708h ; close clipboard ; clipboard formats: CLIP_FMT_TXT equ 01h ; text format CLIP_FMT_BMP equ 02h ; bitmap format CLIP_FMT_TIFF equ 06h ; TIFF CLIP_FMT_OEMTXT equ 07h ; OEM text WININT macro function mov ax,(function) int 2fh endm DOSINT macro function, subfunction IFB <subfunction> mov ah,(function AND 0ffh) ELSE mov ax,(function SHL 8) OR (subfunction AND 0ffh) ENDIF int 21h ; invoke DOS function endm ERRMSG macro tag, message LOCAL nextmsg tag db nextmsg-$ db message nextmsg = $ endm .model small .386 .stack 100h .data ERRMSG cantresize, <"ERROR: can't resize memory",0dh,0ah> ERRMSG noclipboard,<"ERROR: no clipboard",0dh,0ah> ERRMSG emptyclip, <"ERROR: cannot empty clipboard",0dh,0ah> ERRMSG openclip, <"ERROR: cannot open clipboard",0dh,0ah> ERRMSG allocerror, <"ERROR: can't allocate 64K buffer",0dh,0ah> ERRMSG readerr, <"ERROR: can't read data from stdin",0dh, 0ah> ERRMSG pasteerr, <"ERROR: can't paste data to clipboard",0dh,0ah> .code start proc mov bx,ss ; stack segment mov ax,ds ; - data segment sub bx,ax ; = size of all but stack add bx,10h ; add in stack size (in paragraphs) DOSINT DOS_RESIZE_MEM ; mov di,offset cantresize jc error WININT WIN_VERSION cmp ax,WIN_VERSION mov di,offset noclipboard jz error ; WININT WIN_OPEN_CLIP ; open clipboard or ax,ax ; nonzero status means error mov di,offset openclip jz error ; WININT WIN_EMPTY_CLIP ; empty clipboard or ax,ax ; nonzero status means error mov di,offset emptyclip jz error ; ; allocate a big buffer mov bx,1000h ; 1000h paragraphs = 64K DOSINT DOS_ALLOC_MEM ; mov di,offset allocerror jc error ; mov ds,ax ; mov es,ax ; ; read from the input file mov bx,STDIN ; stdin mov cx,0ffffh ; read a whole bunch of data ; ds:dx ==> data buffer xor dx,dx ; DOSINT DOS_READ_HANDLE ; mov di,offset readerr jc error ; xor si,si ; mov cx,ax ; size ; paste the file buffer into the clipboard ; mov es:bx ==> data xor bx,bx ; mov si:cx, size of data mov dx,CLIP_FMT_TXT ; text data WININT WIN_SET_CLIP ; or ax,ax mov di,offset pasteerr ; jz error ; WININT WIN_CLOSE_CLIP ; close clipboard DOSINT DOS_TERMINATE,0 ; exit with error code = 0 error: mov bx,@data ; mov ds,bx ; xor cx,cx ; mov cl,byte ptr[di] ; fetch length mov dx,di ; point to data inc dx ; advance beyond length mov bx,STDERR ; write to stderr DOSINT DOS_WRITE_HANDLE ; write to handle DOSINT DOS_TERMINATE,1 ; error exit start endp END start
Privacy Policy
|
Link to Us
|
Links