Category : Network Files
Archive   : PKTD11B.ZIP
Filename : PKTALL.ASM

 
Output of file : PKTALL.ASM contained in archive : PKTD11B.ZIP
version equ 0

; Copyright, 1988-1992, Russell Nelson, Crynwr Software

; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation, version 1.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

include defs.asm

code segment para public
assume cs:code, ds:code

org 80h
phd_dioa label byte

org 100h
start:
jmp start_1

copyleft_msg label byte
db "Packet receiver version ",'0'+(majver / 10),'0'+(majver mod 10),".",'0'+version," copyright 1990, Russell Nelson.",CR,LF
db "This program is free software; see the file COPYING for details.",CR,LF
db "NO WARRANTY; see the file COPYING for details.",CR,LF
crlf_msg db CR,LF,'$'

their_isr dd ?
their_mode dw ?
entry_point db ?,?,?,?
handle dw ?

no_signature_msg db "No packet driver at that address",'$'
usage_msg db "usage: pktall [-v] [-p] [-a ]",'$'
waiting_msg label byte
db "Now waiting for packets to be received. Press any key to exit.",CR,LF,'$'

verbose_switch db 0
pro_switch db 0
address_switch db 0
ether_addr db EADDR_LEN dup(-1)

queue_overflow dw 0

usage_error:
mov dx,offset usage_msg
error:
mov ah,9
int 21h
int 20h

start_1:
mov dx,offset copyleft_msg
mov ah,9
int 21h

mov si,offset phd_dioa+1
cmp byte ptr [si],CR ;end of line?
je usage_error

mov di,offset entry_point
call get_number

another_switch:
call skip_blanks
cmp al,'-' ;did they specify a switch?
je have_switch
jmp not_switch
have_switch:
cmp byte ptr [si+1],'v' ;did they specify '-v'?
je got_verbose_switch
cmp byte ptr [si+1],'p' ;did they specify '-p'?
je got_pro_switch
cmp byte ptr [si+1],'a' ;did they specify '-a'?
je got_addr_switch
jmp usage_error ;no, must be an error.
got_pro_switch:
add si,2
mov pro_switch,1
jmp another_switch
got_verbose_switch:
add si,2
mov verbose_switch,1
jmp another_switch
got_addr_switch:

add si,2

mov di,offset ether_addr
movseg es,ds
call get_eaddr

mov address_switch,1
mov pro_switch,1 ;-a implies -p.
jmp another_switch
not_switch:
call skip_blanks
cmp al,CR
jne usage_error

call queue_init

call verify_packet_int
jc error
mov dx,offset no_signature_msg
jne error

mov their_isr.offs,bx
mov their_isr.segm,es

mov ax,1ffh ;driver_info
call int_pkt
call fatal_error

mov ah,2 ;access all packets.
mov al,ch ;their class from driver_info().
mov bx,dx ;their type from driver_info().
mov dl,cl ;their number from driver_info().
mov cx,0 ;type length of zero.
movseg es,cs
mov di,offset our_recv
call int_pkt
call fatal_error
mov handle,ax

mov ah,21 ;get the receive mode.
mov bx,handle
call int_pkt
call fatal_error
mov their_mode,ax

cmp pro_switch,0
je not_pro

mov ah,20 ;set it to promiscuous mode.
mov bx,handle
mov cx,6
call int_pkt
call fatal_error
not_pro:

mov dx,offset waiting_msg
mov ah,9
int 21h

wait_for_key:
cmp queue_overflow,0 ;did we drop a packet?
je not_overflow
mov queue_overflow,0
mov al,'O'
call chrout
not_overflow:

call queue_pull
jc no_packet

cmp verbose_switch,0
je not_verbose
call dump_hex
call crlf
jmp short no_packet
not_verbose:
mov al,'R'
call chrout

no_packet:
mov ah,1 ;check for any key.
int 16h
je wait_for_key ;no key -- keep waiting.

mov ah,0 ;fetch the key.
int 16h

mov ah,20 ;reset the receive mode.
mov bx,handle
mov cx,their_mode
call int_pkt

mov ah,3
mov bx,handle
call int_pkt
call fatal_error

int 20h

assume ds:nothing

our_recv:
push ds
push cs
pop ds
or ax,ax ;first or second call?
jne our_recv_1 ;second -- bump the packet flag.
movseg es,cs
call queue_push
jnc our_recv_exit
inc queue_overflow
xor di,di
mov es,di
jmp short our_recv_exit
our_recv_1:
cmp address_switch,0 ;are we looking for an address?
je our_recv_exit ;no.
push es
push di
push si
mov ax,cs
mov es,ax
mov di,offset ether_addr ;is the destination our address?
mov cx,EADDR_LEN/2
repe cmpsw
je our_recv_2
add si,cx ;move to source address.
mov di,offset ether_addr ;is the source our address?
mov cx,EADDR_LEN/2
rep cmpsw
our_recv_2:
pop si
pop di
pop es
je our_recv_exit ;yes.

cmp word ptr [si][0],-1 ;always receive broadcasts.
jne our_recv_drop
cmp word ptr [si][2],-1
jne our_recv_drop
cmp word ptr [si][4],-1
je our_recv_exit
our_recv_drop:
call queue_unpush
our_recv_exit:
pop ds
retf

int_pkt:
push ds
push es
pushf
cli

call their_isr
pop es
pop ds
ret

include queue.asm
include pkterr.asm
include getnum.asm
include getdig.asm
include skipblk.asm
include digout.asm
include chrout.asm
include verifypi.asm
include getea.asm
include dumphex.asm
include crlf.asm

align 4
queue_begin label byte

code ends

end start


  3 Responses to “Category : Network Files
Archive   : PKTD11B.ZIP
Filename : PKTALL.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/