Category : Files from Magazines
Archive   : N7V11.ZIP
Filename : TRYSTD.ASM

Output of file : TRYSTD.ASM contained in archive : N7V11.ZIP
name trystd
title TRYSTD --- time & date conversion demo
page 55,132
; TRYSTD.ASM -- demonstrate use of time and date
; conversion routines in SCANTD.ASM
; and TD.ASM.
; Prompts user for date and time, converts input
; to binary and checks it for validity, then
; converts binary date and time back to ASCII
; for display.
; To exit from this demo program just press
; alone at the prompt.
; Ray Duncan * PC Magazine * February 1988

cr equ 0dh ; ASCII carriage return
lf equ 0ah ; ASCII line feed

stdin equ 0 ; standard input handle
stdout equ 1 ; standard output handle
stderr equ 2 ; standard error handle


_TEXT segment word public 'CODE'

assume cs:_TEXT,ds:_DATA

extrn scantime:near ; convert time to binary
extrn scandate:near ; convert date to binary
extrn tcvt:near ; convert time to ASCII
extrn dcvt:near ; convert date to ASCII

main proc near

mov ax,_DATA ; make our data segment
mov ds,ax ; addressable...
mov es,ax

main1: ; display "Enter date"
mov dx,offset DGROUP:msg1
mov cx,msg1_len
call pmsg

call gline ; get date from user
cmp ax,2 ; empty line?
je main9 ; yes, exit

; convert the date
mov si,offset DGROUP:ibuff
call scandate

jc main2 ; jump if bad date

; convert date for output
mov si,offset DGROUP:msg2a
mov bx,8
call dcvt

; now display date
mov dx,offset DGROUP:msg2
mov cx,msg2_len
call pmsg
jmp main3 ; now do time

main2: ; display "Bad date!"
mov dx,offset DGROUP:msg5
mov cx,msg5_len
call pmsg

main3: ; display "Enter time"
mov dx,offset DGROUP:msg3
mov cx,msg3_len
call pmsg

call gline ; get time from user
cmp ax,2 ; empty line?
je main9 ; yes, exit

; convert the time
mov si,offset DGROUP:ibuff
call scantime

jc main4 ; jump if bad time

; convert time for output
mov si,offset DGROUP:msg4a
mov bx,8
call tcvt

; now display time
mov dx,offset DGROUP:msg4
mov cx,msg4_len
call pmsg
jmp main1 ; go do date again

main4: ; display "Bad time!"
mov dx,offset DGROUP:msg6
mov cx,msg6_len
call pmsg
jmp main1 ; go do date again

main9: mov ax,4c00h ; final exit to MS-DOS
int 21h ; with return code=0

main endp

pmsg proc near ; display a message
; call with
; DS:DX = message
; CX = length

mov bx,stdout ; standard output handle
mov ah,40h ; function 40H = write
int 21h ; transfer to MS-DOS
ret ; back to caller

pmsg endp

gline proc near ; get line from user

; set DS:DX = buffer
mov dx,offset DGROUP:ibuff
mov cx,80 ; CX = maximum length
mov bx,stdin ; standard input handle
mov ah,3fh ; function 3FH = read
int 21h ; transfer to MS-DOS
ret ; back to caller

gline endp

_TEXT ends

_DATA segment word public 'DATA'

msg1 db cr,lf,lf
db "Enter a date: "
msg1_len equ $-msg1

msg2 db cr,lf
db "You entered: "
msg2a db "XX/XX/XX"
msg2_len equ $-msg2

msg3 db cr,lf,lf
db "Enter a time: "
msg3_len equ $-msg3

msg4 db cr,lf
db "You entered: "
msg4a db "XX:XX:XX"
msg4_len equ $-msg4

msg5 db cr,lf
db "Bad date!"
msg5_len equ $-msg5

msg6 db cr,lf
db "Bad time!"
msg6_len equ $-msg6

ibuff db 80 dup (?) ; input buffer

_DATA ends

STACK segment para stack 'STACK'

db 128 dup (?)

STACK ends

end main

  3 Responses to “Category : Files from Magazines
Archive   : N7V11.ZIP
Filename : TRYSTD.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: