home *** CD-ROM | disk | FTP | other *** search
- Name feed
- Title feed
- page ,132
- comment /
-
- This program is a filter that reads the parameter line
- for a file spec. If it finds one it opens all matching
- files and sends them to standard output. This is good
- for processing more than one file, find, translat, etc.
- /
- ;===================================================================
- code segment public
- ;===================================================================
- ;
- ; command line is at 80h of psp - first byte is length
- ;
- org 80h
- ;parmsize db ?
- ;parm db 7fh dup (?)
- dta db 21 dup (?)
- attrib db ?
- ftime dw ?
- fdate dw ?
- fsize dd ?
- fname db 13 dup (?) ; dta asciiz filename from dos.
- ;
- ; .com starts at 100h - but must jump around any data area
- ;
- org 100h ; com file starts here
- assume cs:code,ds:code,es:code
- feed:
- jmp clear
- ;===================================================================
- ;
- ; data area for .com programs
- ;
- handle dw 0h ; assume standard input
- bufsiz equ 255
- buffer db bufsiz dup (?)
- ;
- ;===================================================================
- clear:
- ;
- ; start of actual code is here (clear)
- ;
- ;
- ; now figure out which file to read from - parm line or standard input
- ;
- cmp dta,0h ; if zero, no parm
- jz nomore ; must have parm to read
- ;
- ; parm length is not zero - assume the parm is a file name. If not
- ; found, quit.
- ;
- mov al,dta ; get size of parm
- xor ah,ah ; zero out top part of accum.
- mov si,ax ; use length as a pointer into the dta
- mov [si]+dta+1,0h ; to tack on a zero byte (asciiz).
- ;
- ; Use the default dta at 80h. Find first matching filename.
- ;
- lea dx,dta+2 ; address of 'filename'
- xor cx,cx ; attributes of file - (normal)
- mov ah,4Eh ; dos
- int 21h ; invoke function
- jc nomore ; error or no match - quit
- ;
- ; fname should now contain the first byte of an asciiz filename that
- ; matches the filespec from the parmline. open the file and send it
- ; to standard output.
- ;
- again:
- ;
- ; open the file
- ;
- lea dx,fname ; point at asciiz filename
- mov al,0h ; open for reading
- mov ah,3dh ; read function call
- int 21h ; invoke dos
- jc oops
- mov handle,ax ; save file handle.
- ;
- ; now use the handle to read the file. AX will contain the # of
- ; characters returned from the file after the read.
- ; if ax=0 eof.
- ;
- readloop:
- mov bx,handle ; read from standard input or file
- mov cx,bufsiz ; # of characters to read
- lea dx,buffer ; seg:off address of buffer area
- mov ah,3fh ; dos read function
- int 21h ; invoke function
- jc oops ; error!
- cmp ax,0h ; if zero, end of file
- jz oops
- ;
- mov cx,ax ; cx (and ax) contain # characters read
- lea si,buffer ; offset of buffer
- ;
- mov bx,1h ; standard output device
- mov ah,40h ; dos write function
- int 21h ; invoke dos function
-
- jmp readloop ; repeat until end of file or error
- oops:
- ;
- ; end of file or access error
- ; jump to next filename
- ;
- mov ah,4fh ; this call takes no input.
- int 21h ; if carry set, no more files.
- jnc again ; if no carry, go transfer this one
- nomore:
- int 20h ; return to dos
- code ends
- end feed