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

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

This program is a filter that reads a sorted file and removes
all duplicated lines. Sending a sorted list of words will
result in a list of all words, once each.

Examples:

/
;===================================================================
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
unique:
jmp clear
;===================================================================
;
; data area for .com programs
; Uncomment (**) statements and comment (&&) statements
; if you need two different buffers.
;
buffersize equ 255
bufsiz db buffersize
bufcnt db ?
buffer db buffersize dup (?) ; (&&)
;
savcnt db ?
savbuf db buffersize dup (0h) ; init to nulls
;
;===================================================================
clear:
;
; start of actual code is here (clear)
;
;
; Read a line from standard input. Char count is in bufcnt. Does not
; include the .
;
again:
lea dx,buffer ; point at input area
mov bufcnt,0h ; init size to zero
ioloop:
mov bx,0h ; input handle
mov cx,1h ; # of char to read
mov ah,3fh ; dos read function
int 21h ; dos function call
;
jc oops ; io error!
cmp ax,0h ; if zero, eof!
jz linedone
;
inc bufcnt ; adjust buffer size for new character
mov si,dx
cmp byte ptr [si],0Ah ; if linefeed, line is done.
je linedone
inc dx ; point to next character spot
jmp ioloop ; go get another character
linedone:
cmp bufcnt,0h ; if zero, really eof!
jz oops
;
; Now compare the line just input to the previous line in savbuf.
; If they are different, print the new line and store in in savbuf.
; If they match, jump to again and read another line.
; (The first line input will never match savbuf - savbug contains
; nulls.)
;
xor cx,cx ; zero cx first
mov cl,bufcnt ; # of chars in line
cmp cl,savcnt ; to save line - if not equal, skip
jne printit
lea si,buffer ; input line
lea di,savbuf ; previous line
repe cmpsb ; compare each byte.
je again ; they matched - go get another line.
;
; Now print the line and save it in a compare buffer.
;
printit:
xor cx,cx ; zero out cx
mov cl,bufcnt ; # of characters to output
lea dx,buffer ; input line buffer
mov bx,1h ; standard output device
mov ah,40h ; dos write function
int 21h ; invoke dos function
;
; copy buffer to savbuf.
;
lea si,bufcnt ; source buffer pointer
lea di,savcnt ; destination buffer pointer
xor cx,cx
mov cl,bufcnt ; size of source buffer
inc cx ; include size counter, too.
rep movsb ; character move

jmp again ; repeat until end of file or error
oops:
int 20h ; return to dos
code ends
end unique


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