home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 23 / IOPROG_23.ISO / SOFT / ASM / ASMLIB40.ZIP / ASM4DEMO.ZIP / ASMDEMO.ASM < prev    next >
Encoding:
Assembly Source File  |  1994-10-28  |  5.0 KB  |  258 lines

  1. include    asm.inc
  2.  
  3. public    mymain
  4. extrn    syshard:proc, syssoft:proc, runprog:proc
  5. extrn    textdemo:proc, mwdemo:proc
  6. extrn    curvefit:proc, bargraph:proc, beziercurve:proc
  7. extrn    bbtest:proc, randomdots:proc, circles:proc
  8. extrn    gptest:proc, linetest:proc
  9.  
  10. extrn    pickstr:proc
  11. extrn    pulldown:proc
  12. extrn    tfill:proc, wframe:proc, wclear:proc
  13. extrn    ansicolor:proc, getkey:proc
  14. extrn    screenmem:proc, getscreen:proc, putscreen:proc
  15. extrn    allocdos:proc
  16. extrn    ansicolor:proc, tclear:proc
  17. extrn    tprint:proc, tprintce:proc, crtinfo:proc
  18. extrn    cursoroff:proc, ucursoron:proc
  19.  
  20. .data
  21. public    moden2, moden1, mode0, mode1, mode2, mode3, mode4
  22.  
  23. moden1    db ' Drawmode -1; foreground and background, reversed colors ',0
  24. moden2    db ' Drawmode -2; foreground only, reversed colors ',0
  25. mode0    db 'drawmode 0 - foreground XORed with existing screen',0
  26. mode1    db 'drawmode 1 - foreground and background replace existing screen',0
  27. mode2    db 'drawmode 2 - foreground only',0
  28. mode3    db 'drawmode 3 - foreground ORed with existing screen',0
  29. mode4    db 'drawmode 4 - foreground ANDed with existing screen',0
  30. menudata    db 'System',0
  31.         db 'Hardware',0
  32.         db 'Software',0
  33.         db 'Run another program',0
  34.         db 0
  35.         db 'Text mode',0
  36.         db 'Scrolling',0
  37.         db 'Pop-up windows',0
  38.         db 0
  39.         db 'Graphics',0
  40.         db 'Bar Graph',0
  41.         db 'Curve fitting',0
  42.         db 'Bezier curves',0
  43.         db 'BitBlock test',0
  44.         db 'Random dots',0
  45.         db 'Circles',0
  46.         db 'test GPrint',0
  47.         db 'test Line Drawing',0
  48.         db 0
  49.         db 'Quit',0
  50.         dw 0
  51.  
  52. text_table    dw textdemo
  53.         dw mwdemo
  54. proc_table    dw demo0
  55.         dw demo1
  56.         dw graphdemo
  57.         dw demo3
  58. sys_table    dw sys_hard
  59.         dw sys_soft
  60.         dw run_program
  61.  
  62. gdemo_table    dw offset bargraph
  63. IF @codesize EQ 1
  64.         dw seg bargraph
  65. ENDIF
  66.         dw offset curvefit
  67. IF @codesize EQ 1
  68.         dw seg curvefit
  69. ENDIF
  70.         dw offset beziercurve
  71. IF @codesize EQ 1
  72.         dw seg beziercurve
  73. ENDIF
  74.         dw offset bbtest
  75. IF @codesize EQ 1
  76.         dw seg bbtest
  77. ENDIF
  78.         dw offset randomdots
  79. IF @codesize EQ 1
  80.         dw seg randomdots
  81. ENDIF
  82.         dw offset circles
  83. IF @codesize EQ 1
  84.         dw seg circles
  85. ENDIF
  86.         dw offset gptest
  87. IF @codesize EQ 1
  88.         dw seg gptest
  89. ENDIF
  90.         dw offset linetest
  91. IF @codesize EQ 1
  92.         dw seg linetest
  93. ENDIF
  94.  
  95. saved_bx    dw 0
  96. screen_seg    dw 0
  97.  
  98. box_corners    dw 5,5,20,70
  99.  
  100. intro_msg    db ' Welcome to the ASMLIB interactive demonstration program  ',0
  101. intro2_msg    db ' ASMDEMO will give you a few examples of ASMLIB programming ',0
  102. intro3_msg    db ' Note that ASMDEMO has not been optimized, but it will ',0
  103. intro4_msg    db " give you a flavor for some of the library's functions. ",0
  104. intro5_msg    db ' ASMDEMO was written with MASM 5.1 and ASMLIB.  No other ',0
  105. intro6_msg    db ' software tools were used. ',0
  106. press_key    db ' Press any key to continue',0
  107. escape_msg    db ' Press ESC for main menu',0
  108.  
  109. .code
  110. mymain    proc
  111.     call    cursoroff
  112.     call    ansicolor
  113.     mov    al,'░'
  114.     call    tfill
  115.     lea    bx,box_corners
  116.     mov    ah,7
  117.     call    wclear
  118.     mov    al,'■'
  119.     call    wframe
  120.     lea    si,intro_msg
  121.     mov    dh,byte ptr box_corners
  122.     inc    dh
  123.     mov    dl,byte ptr box_corners+2
  124.     inc    dl
  125.     mov    ah,15
  126.     call    tprint
  127.     lea    si,intro2_msg
  128.     inc    dh
  129.     call    tprint
  130.     lea    si,intro3_msg
  131.     inc    dh
  132.     call    tprint
  133.     lea    si,intro4_msg
  134.     inc    dh
  135.     call    tprint
  136.     lea    si,intro5_msg
  137.     inc    dh
  138.     call    tprint
  139.     lea    si,intro6_msg
  140.     inc    dh
  141.     call    tprint
  142.     lea    si,press_key
  143.     add    dh,2
  144.     mov    ah,14
  145.     call    tprint
  146.     call    getkey
  147.  
  148.     xor    bx,bx
  149.     mov    saved_bx,bx
  150. again:    lea    si,menudata
  151.     mov    bx,saved_bx
  152.     call    pulldown
  153.     mov    saved_bx,bx
  154.     cmp    ax,13
  155.     je    demo
  156.     cmp    al,0
  157.     jne    again
  158.  
  159. demo:    mov    bl,bh
  160.     xor    bh,bh
  161.     shl    bx,1
  162.     jmp    proc_table[bx]
  163.  
  164. ;;
  165. ;; SYSTEM demos
  166. ;;
  167. demo0:    mov    bx,saved_bx
  168.     xor    bh,bh        ; BX = submenu index
  169.     shl    bx,1        ; convert to an offset
  170.     jmp    sys_table[bx]
  171. sys_soft:
  172.     call    syssoft
  173.     jmp    again
  174. sys_hard:
  175.     call    syshard
  176.     jmp    again
  177. run_program:
  178.     call    save_screen
  179.     call    runprog
  180.     call    restore_screen
  181.     jmp    again
  182.  
  183. demo1:    mov    bx,saved_bx
  184.     xor    bh,bh
  185.     or    bx,bx
  186.     jz    demo1a
  187.     call    mwdemo
  188.     jmp    again
  189. demo1a:    call    textdemo
  190.     jmp    again
  191.  
  192. ;;
  193. ;; graph mode demos
  194. ;; includes: bargraph, curvefit
  195. ;;
  196. graphdemo:
  197.     call    save_screen
  198. gdemo0:    mov    bx,saved_bx
  199.     xor    bh,bh
  200.     shl    bx,1        ; convert ot WORD offset
  201. IF @codesize EQ 1
  202.     shl    bx,1        ; convert to DWORD offset
  203.     call    dword ptr gdemo_table[bx]
  204. ELSE
  205.     call    gdemo_table[bx]
  206. ENDIF
  207.     jmp    short gdemo9
  208.  
  209. ; restore text-mode screen
  210. gdemo9:    call    restore_screen
  211.     jmp    again
  212.  
  213. demo3:
  214. exit:    call    ansicolor
  215.     call    tclear
  216.     xor    dx,dx
  217.     call    ucursoron
  218.     ret
  219. mymain    endp
  220.  
  221. save_screen:
  222.     call    screenmem    ; returns screen size in bytes
  223.     xor    dx,dx        ; DX:AX = screen size
  224.     mov    screen_seg,dx    ; default: memory not available
  225.     push    bx
  226.     call    allocdos    ; allocate memory block
  227.     mov    ax,bx
  228.     pop    bx
  229.     jc    ss9        ; don't save screen if no memory available
  230.     mov    screen_seg,ax    ; save base address of memory block
  231.  
  232. ; copy screen to memory block
  233.     push    ds
  234.     mov    ds,ax
  235.     xor    si,si
  236.     call    getscreen
  237.     pop    ds
  238.  
  239. ss9:    ret
  240.  
  241. restore_screen:
  242.     mov    ax,screen_seg
  243.     or    ax,ax        ; was screen saved?
  244.     jz    rs9        ;  nope, exit
  245.     push    ds
  246.     mov    ds,ax
  247.     xor    si,si
  248.     call    putscreen
  249.     pop    ds
  250.  
  251. ; release memory block
  252.     mov    es,ax        ; memory block base address
  253.     mov    ah,49h
  254.     int    21h
  255. rs9:    ret
  256.  
  257.     end
  258.