Category : C Source Code
Archive   : FILTERS.ZIP
Filename : FEED.ASM

 
Output of file : FEED.ASM contained in archive : FILTERS.ZIP
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


  3 Responses to “Category : C Source Code
Archive   : FILTERS.ZIP
Filename : FEED.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/