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

 
Output of file : TRUNC.ASM contained in archive : FILTERS.ZIP
Name trunc
Title
page ,132
comment /

This program is a filter that reads a file and truncates each
line at the character on the parmline or the eol char .
If there is not parameter lines will be truncated at the first
space (which includes leading spaces as well.)

/
;===================================================================
code segment public
;===================================================================
;
; command line is at 80h of psp - first byte is length
;
org 80h
parmsize db ?
parm db 7fh dup (?)
;
; .com starts at 100h - but must jump around any data area
;
org 100h ; com file starts here
assume cs:code,ds:code,es:code
trunc:
jmp clear
;===================================================================
;
; data area for .com programs
; Uncomment (**) statements and comment (&&) statements
; if you need two different buffers.
;
inchar db ?
;
;===================================================================
clear:
;
; start of actual code is here (clear)
;
;
; Read a character. If it compares to the current character of the
; parmline, loop through the end of the line (CR/LF).
;
; Check parameter line for a character. If none, insert a space.
;
cmp parmsize,2h ; if no characters, insert a space.
jge parmok
mov parm+1,' ' ; tack on the space

; These two i/o parameters are constants.
;
parmok:
lea dx,inchar ; offset of inchar
mov cx,1h ; get 1 character
again:
;
; read a character
;
xor bx,bx ; zero is handle of standard input
lea dx,inchar ; offset of inchar
mov ah,3fh ; read a file/device function
int 21h ; invoke the function
;
; if carry set of ax=0 exit
;
jc oops ; i/o error
and ax,ax ; set flags
jz oops ; eof
;
; compare character against parmline.
;
mov al,parm+1 ; load character
cmp al,inchar
jne output ; if characters don't match, output
;
; Character matched - now read characters until is seen.
;
skip:
xor bx,bx ; zero is handle of standard input

mov cx,1h ; get 1 character
mov ah,3fh ; read a file/device function
int 21h ; invoke the function
;
; if carry set of ax=0 exit
;
jc oops ; i/o error
and ax,ax ; set flags
jz oops ; eof
;
; look for
;
cmp inchar,0dh ; if inchar is , start i/o again.
jne skip ; otherwise skip it.
output:
mov bx,1h ; standard output handle
mov ah,40h ; dx still points at inchar
int 21h ; call dos output function
jmp again ; repeat cycle
oops:
int 20h ; return to dos
code ends
end trunc


  3 Responses to “Category : C Source Code
Archive   : FILTERS.ZIP
Filename : TRUNC.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/