home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-387-Vol-3of3.iso / p / pps110.zip / PPSSRC.ZIP / DISPLAY.ASM < prev    next >
Assembly Source File  |  1992-04-25  |  4KB  |  227 lines

  1. ;   FILENAME: DISPLAY.ASM
  2. ;
  3.  
  4. jumps      ; Have TASM automatically resolve out of range jumps
  5.  
  6. %tabsize 4
  7.  
  8. ifndef  MDL
  9.     display "Error: This module requires that you provide a memory model"
  10.     display "    definition on the command line. I.E. /dMDL=SMALL."
  11.     err ; Force a fatal error
  12. else
  13.  
  14. model    MDL,pascal           ; Define the memory model
  15.  
  16. ideal
  17.  
  18. P286
  19.  
  20. include "globals.inc"
  21.  
  22. dataseg
  23.  
  24. OrigMemory    dw    0
  25. CursorType      dw      0
  26. Screen        dw    0B800h
  27. OldMode     db    0
  28. CurMode     db    0
  29.  
  30. kline        db    "O│ xxxk/xxxk",0
  31. kline2        db    " xxxk",0
  32. repstr        db    " ~  ",0
  33.  
  34. codeseg
  35.  
  36. proc    HowMuchMemory
  37.     mov    ah,48h
  38.     mov    bx,0FFFFh
  39.     int    21h
  40.         shr     bx,6
  41.     mov    [OrigMemory],bx
  42.     ret
  43. endp    HowMuchMemory
  44.  
  45. proc    RestoreMode
  46.     xor    ah,ah
  47.     mov    al,[OldMode]
  48.     int    10h
  49.     ret
  50. endp    RestoreMode
  51.  
  52. proc    SetMode
  53.     xor    ah,ah
  54.     mov    al,[CurMode]
  55.     int    10h
  56.     ret
  57. endp    SetMode
  58.  
  59. proc    DetermineDisplay
  60.     mov    ax,0f00h
  61.     int    10h
  62.     mov    [OldMode],al
  63.     cmp    al,7            ; Are we in monochrome mode?
  64.     jz    @@Monochrome
  65.     mov    [Word Screen],0B800h
  66.     mov    [Word CursorType],0607h
  67.     mov    [Byte CurMode],3
  68.     ret
  69. @@Monochrome:
  70.     mov    [Word Screen],0B000h
  71.     mov    [Word CursorType],0B0Ch
  72.     mov    [Byte CurMode],7
  73.     ret
  74. endp    DetermineDisplay
  75.  
  76. proc    SetCursor   ScanLines:word
  77.     mov    cx,[ScanLines]
  78.     mov    [CursorType],cx
  79.     mov    ax,0100h
  80.     int    10h
  81.     ret
  82. endp    SetCursor
  83.  
  84. proc    WriteCol    X:word,Y:word,String:dword
  85.     uses    ds,es,si,di,cx
  86.     mov    ax,@data
  87.     mov    ds,ax
  88.     mov    es,[Screen]
  89.         mov     ax,NumCols * 2           ; NumCols * 2
  90.     mul    [Y]
  91.     add    ax,[X]
  92.     add    ax,[X]
  93.     mov    di,ax
  94.  
  95.     lds    si,[String]
  96.         mov     ax,bx
  97.     jmp    ActualWritePart
  98. endp    WriteCol
  99.  
  100. proc    Write   X:word,Y:word,String:dword
  101.     uses    ds,es,si,di,cx
  102.     mov    ax,@data
  103.     mov    ds,ax
  104.     mov    es,[Screen]
  105.         mov     ax,NumCols * 2           ; NumCols * 2
  106.     mul    [Y]
  107.     add    ax,[X]
  108.     add    ax,[X]
  109.     mov    di,ax
  110.  
  111.     lds    si,[String]
  112.     lodsb
  113. ActualWritePart:
  114.     mov    ah,al
  115.     xor    cx,cx
  116.     xor    dx,dx
  117. ; Translate
  118. @@MainLoop:
  119.     lodsb
  120.     cmp    al,0
  121.     jz    @@Done
  122.     cmp    al,'`'
  123.     jnz    @@CheckRepeat
  124.     lodsb
  125.     mov    ah,al
  126.     jmp    @@MainLoop
  127. @@CheckRepeat:
  128.     cmp    al,'~'
  129.     jnz    @@JustStore
  130.     lodsb
  131.     mov    cl,al
  132.     lodsb
  133.     rep    stosw
  134.     add    dx,cx
  135.     jmp    @@MainLoop
  136. @@JustStore:
  137.     inc    dx
  138.     stosw
  139.     jmp    @@MainLoop
  140. @@Done:
  141.     ret
  142. endp    Write
  143.  
  144. proc    WriteChars    X:word,Y:word,String:dword,MaxLen:word
  145.     uses    ds,si,es,di
  146.     call    WriteCol,[X],[Y],[String]
  147.     push    bx
  148.     mov    cx,[MaxLen]
  149.     sub    cx,dx
  150.     jz    @@Done
  151.     mov    di,offset repstr
  152.     mov    bx,seg repstr
  153.     mov    es,bx
  154.     add    di,2
  155.     mov    ax,cx
  156.     stosb
  157.     mov    ax,[X]
  158.     add    ax,dx
  159.     pop    bx
  160.     call    WriteCol,ax,[Y],seg repstr,offset repstr
  161. @@Done:
  162.     ret
  163. endp    WriteChars
  164.  
  165. proc    ConvertKtoStr    NumK:word,String:dword,NumDigits:word
  166.     uses    es,di
  167.     les    di,[String]
  168.     mov    ax,[NumK]
  169.     mov    cx,[NumDigits]
  170.     dec    cx
  171.     add    di,cx
  172.     inc    cx
  173. @@NumLoop:
  174.     mov    bl,10
  175.     div    bl
  176.     add    ah,'0'
  177.     mov    [es:di],ah
  178.     dec    di
  179.     xor    ah,ah
  180.     loop    @@NumLoop
  181.  
  182. @@Done: ret
  183. endp    ConvertKToStr
  184.  
  185. proc    WriteMemLeft    Row:word
  186.     uses    ds,es
  187.     mov    ax,@data
  188.     mov    ds,ax
  189.     mov    ah,48h
  190.     mov    bx,0FFFFh
  191.     int    21h
  192.     shr    bx,6
  193.     call    ConvertKToStr,[OrigMemory],seg kline,offset kline+8,3
  194.         call    ConvertKToStr,bx,seg kline,offset kline+3,3
  195.     call    Write,68,[Row],seg kline,offset kline
  196.     ret
  197. endp    WriteMemLeft
  198.  
  199. proc    FillBox X:word,Y:word,SizeX:word,SizeY:word,Color:word
  200.     uses    ds,es,di,cx
  201.     mov    ax,@data
  202.     mov    ds,ax
  203.     mov    es,[Screen]
  204.         mov     ax,NumCols * 2           ; NumCols * 2
  205.     mul    [Y]
  206.     add    ax,[X]
  207.     add    ax,[X]
  208.     mov    di,ax
  209.  
  210.     mov    ax,[Color]
  211.     mov    bx,[SizeY]
  212. @@TopLoop:
  213.     push    di
  214.     mov    cx,[SizeX]
  215.     rep    stosw
  216.     pop    di
  217.     add    di,NumCols*2
  218.     dec    bx
  219.     jnz    @@TopLoop
  220.     ret
  221. endp    FillBox
  222.  
  223. endif   ; ifndef MDL
  224.  
  225. end
  226.  
  227.