home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
lan
/
net_time
/
netclock.asm
next >
Wrap
Assembly Source File
|
1988-01-21
|
7KB
|
172 lines
;
; netclock.asm - From PC Magazine . August '87, pp468-470
;
; NETCLOCK runs on the IBM PCLAN and PCNP programs and obtains the time and
; date from a network server running SRVCLOCK.exe or SRVCLOKF.EXE. NETCLOCK
; must be executed in a workstation after the "NET START" command.
;
cr equ 0dh
lf equ 0ah
cseg segment para public 'code'
net proc far
assume cs:cseg,ds:netdata,ss:stack,es:netdata
push ds
xor ax,ax
push ax
mov ax,netdata
mov ds,ax
mov es,ax
mov cx,00h
;
; netbios adapter status - get machine name (wait for completion)
;
adapter_stat: mov command,33h ; Command 33=adapter status
mov buffer@+2,ds ; high word buffer=data segment
mov ax,offset ret@ ; move offset of
mov buffer@,ax ; return area into NCB buffer
mov buf_length,60 ; minimum possible space=60
mov bx,offset mcb ; point BX to MCB
int 5ch ; call to NETBIOS
cmp retcode,06h ; return code should be an
; error of buffer to small (06)
je get_name ; get machine name returned
mov dx,offset stat_err ; else status error message
jmp error ;
get_name: mov si,offset ret@ ; move machine name to position
mov di,offset our_name+10 ; after 10 bytes of 00h
mov cx,6 ; 6 byes = machine name
repnz movsb ;
;
; change call name to srv_clock
; ;
mov si,offset server_name ; Move server name
mov di,offset callname ; into MCB
mov cx,16 ; use all 16 bytes
repnz movsb ;
;
; do netbios call (wait for completion)
;
call: mov command,10h ; Move call command code to MCB
mov bx,offset mcb ; point BX at MCB
int 5ch ; call NETBIOS
cmp al,00h ; check completion code
je get_time ; if ok, receive server time
mov dx,offset cal_err ; else write error message
jmp error ;
;
; receive time from server
;
get_time: mov command,15h ; Move receive command to MCB
mov buffer@,offset clock ; point buffer to clock area
mov buffer@+2,ds ; initialize segment
mov buf_length,08 ; clock needs 8 bytes
int 5ch ; call NETBIOS
cmp al,00h ; check for errors
je hangup ; if none close the session
; time and date now in CLOCK
; area
mov dx,offset rcv_err ; else receive error
jmp error ;
;
; hangup session
;
hangup: mov command,12h ; Move hang-up command to MCB
int 5ch ; NETBIOS call
;
mov ah,09h ; display success
mov dx,offset success ; message to user
int 21h ;
;
; install date and time
;
mov cx,year ; prepare to set
mov dh,month ; the date
mov dl,day ; using DOS function call
mov ah,2bh ; 2bH
int 21h ;
;
mov ch,hours ; and set the date
mov cl,minutes ; using data in
mov dh,seconds ; clock area
mov dl,hundredths ; using DOS function
mov ah,2dh ; call 2dH
int 21h ;
jmp quit ;
;
; error message and closing
;
error: mov ah,09h ; write error message to screen
int 21h ;
mov command,12h ; hang-up session if any
int 5ch ;
quit: ret
net endp
cseg ends
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; message data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
netdata segment para public 'data'
stat_err db cr,lf,'"get name" command failed',cr,lf,'$'
cal_err db cr,lf,'"call" command failed',cr,lf,'$'
rcv_err db cr,lf,'"receive" command failed',cr,lf,'$'
success db cr,lf,'network clock installed',cr,lf,'$'
server_name db 'srv_clock '
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; clock data area
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
clock equ $
year dw 0000h
month db 00h
day db 00h
hours db 00h
minutes db 00h
seconds db 00h
hundredths db 00h
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; message control block data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mcb equ $
command db 00h
retcode db 00h
lsn db 00h
num db 00h
buffer@ dw 0000h
dw 0000h
buf_length dw 0000h
callname db '* '
our_name db 16 dup(0)
rto db 00h
sto db 00h
post@ dw 0000h
dw 0000h
adapter_num db 00h
cmd_stat db 00h
reserve db 14 dup(0)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; buffer for adapter status request
;
; (Minimum allowable adapter status buffer=60,
; this program uses only first 6)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ret@ equ $
id_num db 6 dup(0)
filler db 54 dup(0)
netdata ends
stack segment para stack 'stack'
db 32 dup('stack ')
stack ends
end