home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / ASM / ASMLIB40.ZIP / ASM4DEMO.ZIP / MWDEMO.ASM < prev    next >
Encoding:
Assembly Source File  |  1993-08-29  |  2.3 KB  |  136 lines

  1. ; MWDEMO.ASM for ASMDEMO - Copyright (C) 1993 Douglas Herr
  2. ;  all rights reserved
  3.  
  4. include    asm.inc
  5.  
  6. public    mwdemo
  7. extrn    mwinit:proc, mwdisplay:proc, mwunhide:proc
  8. extrn    mwopen:proc, mwclose:proc, mwcloseall:proc
  9. extrn    mwfill:proc, mwclear:proc, mwborder:proc
  10. extrn    mwprint:proc, mwselect:proc, mwtop:proc
  11. extrn    keyifwaiting:proc, ucursoron:proc, cursoroff:proc
  12. extrn    tprintce:proc, ismouse:proc, tmousestatus:proc, tmousepos:proc
  13.  
  14. .data
  15. initseg    dw 0
  16. mwh    dw 10 dup(0)        ; storage for 10 handles
  17. r0    dw 1,1,15,20
  18. color    db 4
  19. wtext    db 'Window #'
  20. wnumber    db '0',0
  21. position    label word
  22. column    db 1
  23. row    db 1
  24. prompt    db 'Move cursor with keyboard & press ENTER to select window',0
  25. mprompt    db 'Move cursor with key or mouse, press ENTER or click mouse to select window',0
  26. mouse    db 0
  27.  
  28. .code
  29. mwdemo    proc
  30.     mov    mouse,0FFh
  31.     call    ismouse
  32.     adc    mouse,0
  33.     mov    color,4
  34.     mov    wnumber,'0'
  35.     mov    position,0101h
  36.  
  37.     call    mwinit
  38.     mov    al,101b        ; enable shadow & unhide for all
  39.     mov    initseg,ax    ; save segment address of screen buffers
  40.     xor    di,di
  41.     mov    cx,10
  42. m0:    lea    bx,r0
  43.     call    mwopen
  44.     mov    mwh[di],ax
  45.     mov    bx,ax
  46.     mov    ah,color
  47.     mov    al,0
  48.     call    mwborder
  49.     call    mwfill
  50.     lea    si,wtext
  51.     xor    dx,dx
  52.     call    mwprint
  53.     call    mwunhide
  54.     inc    r0
  55.     add    r0+2,2
  56.     inc    r0+4
  57.     add    r0+6,2
  58.     inc    color
  59.     inc    wnumber
  60.     loop    m0
  61.  
  62. m1:    call    mwdisplay
  63.     lea    si,prompt
  64.     cmp    mouse,0
  65.     je    m1b
  66.     lea    si,mprompt
  67. m1b:    xor    dx,dx
  68.     mov    ah,15
  69.     call    tprintce
  70. m1a:    mov    dx,position
  71.     ror    mouse,1
  72.     jnc    m1c
  73.     call    tmousepos
  74. m1c:    call    ucursoron
  75. m2:    call    keyifwaiting
  76.     cmp    ax,27        ; Esc?
  77.     je    exit        ;  exit if so
  78.     cmp    ax,13        ; Enter?
  79.     je    select
  80.     shr    ah,1        ; extended keycode?
  81.     jnc    m2a        ;  no, get next key
  82.     cmp    al,72
  83.     je    up
  84.     cmp    al,75
  85.     je    left
  86.     cmp    al,77
  87.     je    right
  88.     cmp    al,80
  89.     je    down
  90.  
  91. m2a:    ror    mouse,1
  92.     jnc    m2
  93.     call    tmousestatus
  94.     mov    position,dx
  95.     jnz    select
  96.     jmp    m1c        ; update cursor position
  97.  
  98. select:    mov    dx,position
  99.     call    mwselect
  100.     jc    m2
  101.     call    mwtop
  102.     jmp    m1
  103.  
  104. up:    sub    row,1
  105.     adc    row,0
  106.     jmp    m1a
  107. left:    sub    column,1
  108.     adc    column,0
  109.     jmp    m1a
  110. right:    inc    column
  111.     jmp    m1a
  112. down:    inc    row
  113.     jmp    m1a
  114.  
  115. exit:    call    mwcloseall
  116.     call    mwdisplay
  117.  
  118. ; restore initial window coordinates
  119.     mov    ax,1
  120.     mov    r0,ax
  121.     mov    r0+2,ax
  122.     mov    r0+4,15
  123.     mov    r0+6,20
  124.  
  125. ; release the screen buffers
  126.     mov    es,initseg
  127.     mov    ah,49h
  128.     int    21h
  129.  
  130. ; hide the cursor
  131.     call    cursoroff
  132.  
  133.     ret
  134. mwdemo    endp
  135.     end
  136.