home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 December / simtel1292_SIMTEL_1292_Walnut_Creek.iso / msdos / pcmag / vol7n20.arc / PP720.ARC / TRYSTR2.ASM < prev    next >
Assembly Source File  |  1988-09-06  |  6KB  |  156 lines

  1. ;----------------------------------------------------------------------
  2. ; TRYSTR2.ASM --- demo of MASM string package #2
  3. ; Copyright (c), 1988 Ziff Communications Co.
  4. ; PC Magazine * Ray Duncan * November 29, 1988
  5. ;----------------------------------------------------------------------
  6. cr      equ     0dh             ; ASCII carriage return
  7. lf      equ     0ah             ; ASCII line feed
  8.  
  9. stdin   equ     0               ; standard input handle
  10. stdout  equ     1               ; standard output handle
  11. stderr  equ     2               ; standard error handle
  12.  
  13. DGROUP  group   _DATA
  14.  
  15. _DATA   segment word public 'DATA'
  16.  
  17. str1    db      80 dup (0)      ; string 1 buffer
  18. str2    db      80 dup (0)      ; string 2 buffer
  19.  
  20. s1len   dw      ?               ; string 1 length
  21. s2len   dw      ?               ; string 2 length
  22.  
  23. msg1    db      cr,lf,lf,"Enter string 1:  "
  24. msg1_len equ $-msg1
  25.  
  26. msg2    db      "Enter string 2:  "
  27. msg2_len equ $-msg2
  28.  
  29. msg3    db      cr,lf,"STRCAT:  "
  30. msg3_len equ $-msg3
  31.  
  32. msg4    db      cr,lf,"STRLWR:  "
  33. msg4_len equ $-msg4
  34.  
  35. msg5    db      cr,lf,"STRUPR:  "
  36. msg5_len equ $-msg5
  37.  
  38. _DATA   ends
  39. ;----------------------------------------------------------------------
  40. _TEXT   segment word public 'CODE'
  41.         extrn   strcat:near
  42.         extrn   strupr:near
  43.         extrn   strlwr:near
  44.         assume  cs:_TEXT,ds:DGROUP
  45.  
  46. main    proc    near
  47.                                 
  48.         mov     ax,_DATA        ; make our data segment
  49.         mov     ds,ax           ; addressable...
  50.         mov     es,ax
  51.  
  52. main1:                          ; display prompt for string 1...
  53.         mov     dx,offset msg1  ; address of message
  54.         mov     cx,msg1_len     ; length of message
  55.         mov     bx,stdout       ; standard output handle
  56.         mov     ah,40h          ; function 40h = write
  57.         int     21h             ; transfer to MS-DOS
  58.                                 ; get first string...
  59.         mov     dx,offset str1  ; address of buffer
  60.         mov     cx,64           ; maximum entry length
  61.         mov     bx,stdin        ; standard input handle
  62.         mov     ah,3fh          ; function 3fh = read
  63.         int     21h             ; transfer to MS-DOS
  64.  
  65.         sub     ax,2            ; anything entered?
  66.         mov     s1len,ax        ; save string length
  67.         
  68.         jnz     main2           ; jump if something entered
  69.  
  70.         mov     ax,4c00h        ; exit if empty line
  71.         int     21h             ; transfer to MS-DOS
  72. main2:                          ; display prompt for string 2...
  73.         mov     dx,offset msg2  ; address of message
  74.         mov     cx,msg2_len     ; length of message
  75.         mov     bx,stdout       ; standard output handle
  76.         mov     ah,40h          ; function 40h = write
  77.         int     21h             ; transfer to MS-DOS
  78.                                 ; get second string...
  79.         mov     dx,offset str2  ; address of buffer
  80.         mov     cx,64           ; maximum entry length
  81.         mov     bx,stdin        ; standard input handle
  82.         mov     ah,3fh          ; function 3fh = read
  83.         int     21h             ; transfer to MS-DOS
  84.  
  85.         sub     ax,2            ; save string length
  86.         mov     s2len,ax
  87.                                 ; display STRCAT title
  88.         mov     dx,offset msg3  ; address of message
  89.         mov     cx,msg3_len     ; length of message
  90.         call    pmsg
  91.                                 ; concatenate strings
  92.         mov     si,offset str1  ; string1 address
  93.         mov     bx,s1len        ; string1 length
  94.         mov     di,offset str2  ; string2 address
  95.         mov     dx,s2len        ; string2 length
  96.         call    strcat
  97.                                 ; display result string
  98.         mov     dx,si           ; result string address
  99.         mov     cx,bx           ; result string length
  100.         call    pmsg
  101.                                 ; display STRLWR title
  102.         mov     dx,offset msg4  ; address of message
  103.         mov     cx,msg4_len     ; length of message
  104.         call    pmsg
  105.  
  106.         call    strlwr          ; translate concatenated string to lower case
  107.                                 ; display translated string
  108.         mov     dx,si           ; result string address
  109.         mov     cx,bx           ; result string length
  110.         call    pmsg
  111.                                 ; display STRUPR title
  112.         mov     dx,offset msg5  ; address of message
  113.         mov     cx,msg5_len     ; length of message
  114.         call    pmsg
  115.  
  116.         call    strupr          ; translate concatenated string to upper case
  117.                                 ; display translated string
  118.         mov     dx,si           ; result string address
  119.         mov     cx,bx           ; result string length
  120.         call    pmsg
  121.  
  122.         jmp     main1           ; get more strings
  123.  
  124. main    endp
  125. ;----------------------------------------------------------------------
  126. ; PMSG:         display message on standard output
  127. ;
  128. ; Call with:    DS:DX = message address
  129. ;               CX    = message length
  130. ;
  131. ; Returns:      nothing
  132. ;
  133. ; Uses:         nothing
  134. ;----------------------------------------------------------------------
  135. pmsg    proc
  136.  
  137.         push    ax              ; save registers
  138.         push    bx
  139.  
  140.         mov     bx,stdout       ; standard output handle
  141.         mov     ah,40h          ; function 40h = write
  142.         int     21h             ; transfer to MS-DOS
  143.  
  144.         pop     bx              ; restore registers
  145.         pop     ax
  146.         ret                     ; back to caller
  147.  
  148. pmsg    endp
  149.  
  150. _TEXT   ends
  151. ;----------------------------------------------------------------------
  152. STACK   segment para stack 'STACK'
  153.         db      128 dup (?)
  154. STACK   ends
  155.         end     main
  156.