home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_144 / 9.ddi / TVSRC.ZIP / TVWRITE.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-06-10  |  12.6 KB  |  499 lines

  1. ;/*------------------------------------------------------------*/
  2. ;/* filename -       tvwrite.asm                               */
  3. ;/*                                                            */
  4. ;/* function(s)                                                */
  5. ;/*                  TView write member functions              */
  6. ;/*------------------------------------------------------------*/
  7.  
  8. ;/*------------------------------------------------------------*/
  9. ;/*                                                            */
  10. ;/*    Turbo Vision -  Version 1.0                             */
  11. ;/*                                                            */
  12. ;/*                                                            */
  13. ;/*    Copyright (c) 1991 by Borland International             */
  14. ;/*    All Rights Reserved.                                    */
  15. ;/*                                                            */
  16. ;/*------------------------------------------------------------*/
  17.  
  18.         IDEAL
  19.         MODEL  LARGE, PROLOG
  20.  
  21.         INCLUDE "TVWRITE.INC"
  22.  
  23.         PUBLIC  @TView@writeBuf$qssssnxv
  24.         PUBLIC  @TView@writeView$qv
  25.         PUBLIC  @TView@writeChar$qsszcucs
  26.         PUBLIC  @TView@writeLine$qssssnxv
  27.         PUBLIC  @TView@writeStr$qssnxzcuc
  28.  
  29.         EXTRN   @THWMouse@show$qv : PROC
  30.         EXTRN   @THWMouse@hide$qv : PROC
  31.         EXTRN   @TEventQueue@mouseIntFlag : BYTE
  32.         EXTRN   @TEventQueue@curMouse : WORD
  33.         EXTRN   _shadowSize : WORD
  34.         EXTRN   _shadowAttr : BYTE
  35.         EXTRN   @TView@mapColor$quc : PROC
  36.         EXTRN   @TScreen@screenBuffer : DWORD
  37.         EXTRN   @TScreen@checkSnow : BYTE
  38.  
  39. STRUC   Fptr
  40.         offs    DW      ?
  41.         segm    DW      ?
  42. ENDS
  43.  
  44. STRUC   WriteArgs
  45.         Self    DD      ?
  46.         Target  Fptr    ?
  47.         Buffer  Fptr    ?
  48.         Offset  DW      ?
  49. ENDS
  50.  
  51. DATASEG
  52.  
  53. wArgs   WriteArgs       ?
  54.  
  55. IFDEF 0; PROTECT
  56.         EXTRN _MONOSEG:WORD
  57.         EXTRN _COLRSEG:WORD
  58. ENDIF
  59.  
  60. CODESEG
  61.  
  62. ; Write to view
  63. ; In    AX    = Y coordinate
  64. ;       BX    = X coordinate
  65. ;       CX    = Count
  66. ;       ES:DI = Buffer Pointer
  67.  
  68. PROC    @TView@writeView$qv near
  69.  
  70.         MOV     [wArgs.Offset],BX
  71.         MOV     [wArgs.Buffer.offs],DI
  72.         MOV     [wArgs.Buffer.segm],ES
  73.         ADD     CX,BX
  74.         XOR     DX,DX
  75.         LES     DI,[wArgs.Self]
  76.         OR      AX,AX
  77.         JL      @@3
  78.         CMP     AX,[ES:DI+TViewSizeY]
  79.         JGE     @@3
  80.         OR      BX,BX
  81.         JGE     @@1
  82.         XOR     BX,BX
  83. @@1:
  84.         CMP     CX,[ES:DI+TViewSizeX]
  85.         JLE     @@2
  86.         MOV     CX,[ES:DI+TViewSizeX]
  87. @@2:
  88.         CMP     BX,CX
  89.         JL      @@10
  90. @@3:
  91.         RETN
  92. @@10:
  93.         TEST    [WORD PTR ES:DI+TViewState],sfVisible
  94.         JE      @@3
  95.         CMP     [WORD PTR ES:DI+TViewOwner+2],0
  96.         JE      @@3
  97.         MOV     [wArgs.Target.offs],DI
  98.         MOV     [wArgs.Target.segm],ES
  99.         ADD     AX,[ES:DI+TViewOriginY]
  100.         MOV     SI,[ES:DI+TViewOriginX]
  101.         ADD     BX,SI
  102.         ADD     CX,SI
  103.         ADD     [wArgs.Offset],SI
  104.         LES     DI,[ES:DI+TViewOwner]
  105.         CMP     AX,[ES:DI+TGroupClipAY]
  106.         JL      @@3
  107.         CMP     AX,[ES:DI+TGroupClipBY]
  108.         JGE     @@3
  109.         CMP     BX,[ES:DI+TGroupClipAX]
  110.         JGE     @@11
  111.         MOV     BX,[ES:DI+TGroupClipAX]
  112. @@11:   
  113.         CMP     CX,[ES:DI+TGroupClipBX]
  114.         JLE     @@12
  115.         MOV     CX,[ES:DI+TGroupClipBX]
  116. @@12:   
  117.         CMP     BX,CX
  118.         JGE     @@3
  119.         LES     DI,[ES:DI+TGroupLast]
  120. @@20:   
  121.         LES     DI,[ES:DI+TViewNext]
  122.         CMP     DI,[wArgs.Target.offs]
  123.         JNE     @@21
  124.         MOV     SI,ES
  125.         CMP     SI,[wArgs.Target.segm]
  126.         JNE     @@21
  127.         JMP     @@40
  128. @@21:   
  129.         TEST    [WORD PTR ES:DI+TViewState],sfVisible
  130.         JE      @@20
  131.         MOV     SI,[ES:DI+TViewOriginY]
  132.         CMP     AX,SI
  133.         JL      @@20
  134.         ADD     SI,[ES:DI+TViewSizeY]
  135.         CMP     AX,SI
  136.         JL      @@23
  137.         TEST    [WORD PTR ES:DI+TViewState],sfShadow
  138.         JE      @@20
  139.         ADD     SI,[_shadowSize+TPointY]
  140.         CMP     AX,SI
  141.         JGE     @@20
  142.         MOV     SI,[ES:DI+TViewOriginX]
  143.         ADD     SI,[_shadowSize+TPointX]
  144.         CMP     BX,SI
  145.         JGE     @@22
  146.         CMP     CX,SI
  147.         JLE     @@20
  148.         CALL    @@30
  149. @@22:   
  150.         ADD     SI,[ES:DI+TViewSizeX]
  151.         JMP     @@26
  152. @@23:   
  153.         MOV     SI,[ES:DI+TViewOriginX]
  154.         CMP     BX,SI
  155.         JGE     @@24
  156.         CMP     CX,SI
  157.         JLE     @@20
  158.         CALL    @@30
  159. @@24:   
  160.         ADD     SI,[ES:DI+TViewSizeX]
  161.         CMP     BX,SI
  162.         JGE     @@25
  163.         CMP     CX,SI
  164.         JLE     @@31
  165.         MOV     BX,SI
  166. @@25:   
  167.         TEST    [WORD PTR ES:DI+TViewState],sfShadow
  168.         JE      @@20
  169.         PUSH    SI
  170.         MOV     SI,[ES:DI+TViewOriginY]
  171.         ADD     SI,[_shadowSize+TPointY]
  172.         CMP     AX,SI
  173.         POP     SI
  174.         JL      @@27
  175.         ADD     SI,[_shadowSize+TPointX]
  176. @@26:   
  177.         CMP     BX,SI
  178.         JGE     @@27
  179.         INC     DX
  180.         CMP     CX,SI
  181.         JLE     @@27
  182.         CALL    @@30
  183.         DEC     DX
  184. @@27:   
  185.         JMP     @@20
  186. @@30:
  187.         PUSH    [wArgs.Target.segm]
  188.         PUSH    [wArgs.Target.offs]
  189.         PUSH    [wArgs.Offset]
  190.         PUSH    ES
  191.         PUSH    DI
  192.         PUSH    SI
  193.         PUSH    DX
  194.         PUSH    CX
  195.         PUSH    AX
  196.         MOV     CX,SI
  197.         CALL    @@20
  198.         POP     AX
  199.         POP     CX
  200.         POP     DX
  201.         POP     SI
  202.         POP     DI
  203.         POP     ES
  204.         POP     [wArgs.Offset]
  205.         POP     [wArgs.Target.offs]
  206.         POP     [wArgs.Target.segm]
  207.         MOV     BX,SI
  208. @@31:   
  209.         RETN
  210. @@40:   
  211.         LES     DI,[ES:DI+TViewOwner]
  212.         MOV     SI,[ES:DI+TGroupBuffer+2]
  213.         OR      SI,SI
  214.         JE      @@44
  215. IFDEF 0; PROTECT
  216.         PUSH    DS              ; cannot predict addresses of video screen
  217.         PUSH    AX
  218.         MOV     AX,DGROUP
  219.         MOV     DS,AX
  220.         POP     AX
  221.         CMP     SI,[_MONOSEG]
  222.         JNE     @@P01
  223. @@P00:  POP     DS
  224.         JMP     SHORT @@41
  225. @@P01:  CMP     SI,[_COLRSEG]
  226.         JE      @@P00
  227.         POP     DS
  228. ELSE
  229.         CMP     SI,[WORD PTR @TScreen@screenBuffer+2]
  230.         JE      @@41
  231. ENDIF
  232.         CALL    @@50
  233.         JMP     @@44
  234. @@41:   
  235.         CLI
  236.         CMP     AX,[WORD PTR @TEventQueue@curMouse+MsEventWhereY]
  237.         JNE     @@42
  238.         CMP     BX,[WORD PTR @TEventQueue@curMouse+MsEventWhereX]
  239.         JA      @@42
  240.         CMP     CX,[WORD PTR @TEventQueue@curMouse+MsEventWhereX]
  241.         JA      @@43
  242. @@42:   
  243.         MOV     [@TEventQueue@mouseIntFlag],0
  244.         STI
  245.         CALL    @@50
  246.         CMP     [@TEventQueue@mouseIntFlag],0
  247.         JE      @@44
  248. @@43:   
  249.         STI
  250.         CALL    @THWMouse@hide$qv
  251.         CALL    @@50
  252.         CALL    @THWMouse@show$qv
  253. @@44:   
  254.         CMP     [BYTE PTR ES:DI+TGroupLockFlag],0
  255.         JNE     @@31
  256.         JMP     @@10
  257. @@50:
  258.         PUSH    ES
  259.         PUSH    DS
  260.         PUSH    DI
  261.         PUSH    CX
  262.         PUSH    AX
  263.         MUL     [BYTE PTR ES:DI+TViewSizeX]
  264.         ADD     AX,BX
  265.         SHL     AX,1
  266.         ADD     AX,[ES:DI+TGroupBuffer]
  267.         MOV     DI,AX
  268.         MOV     ES,SI
  269.         XOR     AL,AL
  270.         CMP     SI,[WORD PTR @TScreen@screenBuffer+2]
  271.         JNE     @@51
  272.         MOV     AL,[@TScreen@checkSnow]
  273. @@51:
  274.         MOV     AH,[_shadowAttr]
  275.         SUB     CX,BX
  276.         MOV     SI,BX
  277.         SUB     SI,[wArgs.Offset]
  278.         SHL     SI,1
  279.         ADD     SI,[wArgs.Buffer.offs]
  280.         MOV     DS,[wArgs.Buffer.segm]
  281.         CLD
  282.         OR      AL,AL
  283.         JNE     @@60
  284.         OR      DX,DX
  285.         JNE     @@52
  286.         REP     MOVSW
  287.         JMP     @@70
  288. @@52:
  289.         LODSB
  290.         INC     SI
  291.         STOSW
  292.         LOOP    @@52
  293.         JMP     @@70
  294. @@60:   PUSH    DX
  295.         PUSH    BX
  296.         OR  DX,DX
  297.         MOV DX,03DAH
  298.         JNE @@65
  299. @@61:   LODSW
  300.         MOV BX,AX
  301. @@62:   IN  AL,DX
  302.         TEST    AL,1
  303.         JNE @@62
  304.         CLI
  305. @@63:   IN  AL,DX
  306.         TEST    AL,1
  307.         JE  @@63
  308.         MOV AX,BX
  309.         STOSW
  310.         STI
  311.         LOOP    @@61
  312.         JMP @@68
  313. @@65:   LODSB
  314.         MOV BL,AL
  315.         INC SI
  316. @@66:   IN  AL,DX
  317.         TEST    AL,1
  318.         JNE @@66
  319.         CLI
  320. @@67:   IN  AL,DX
  321.         TEST    AL,1
  322.         JE  @@67
  323.         MOV AL,BL
  324.         STOSW
  325.         STI
  326.         LOOP    @@65
  327. @@68:   POP BX
  328.         POP DX
  329. @@70:   
  330.         MOV     SI,ES
  331.         POP     AX
  332.         POP     CX
  333.         POP     DI
  334.         POP     DS
  335.         POP     ES
  336.         RETN
  337. ENDP
  338.  
  339. PROC    @TView@writeBuf$qssssnxv
  340.         ARG     thisPtr : DWORD, X : WORD, Y : WORD, W : WORD, H : WORD, Buf : DWORD
  341.         USES    SI,DI
  342.  
  343.         MOV     AX,[WORD PTR thisPtr]
  344.         MOV     [WORD PTR wArgs.Self],AX
  345.         MOV     AX,[WORD PTR thisPtr+2]
  346.         MOV     [(WORD PTR wArgs.Self)+2],AX
  347.  
  348.         CMP     [H],0
  349.         JLE     @@2
  350. @@1:    
  351.         MOV     AX,[Y]
  352.         MOV     BX,[X]
  353.         MOV     CX,[W]
  354.         LES     DI,[Buf]
  355.         CALL    @TView@writeView$qv
  356.         MOV     AX,[W]
  357.         SHL     AX,1
  358.         ADD     [WORD PTR Buf],AX
  359.         INC     [Y]
  360.         DEC     [H]
  361.         JNE     @@1
  362. @@2:
  363.         RET
  364. ENDP
  365.  
  366. PROC    @TView@writeChar$qsszcucs
  367.         ARG     thisPtr : DWORD, X : WORD, Y : WORD, C : WORD, Color : WORD, Count : WORD
  368.         USES    SI,DI
  369.  
  370.         MOV     AX,[WORD PTR thisPtr]
  371.         MOV     [WORD PTR wArgs.Self],AX
  372.         MOV     AX,[WORD PTR thisPtr+2]
  373.         MOV     [(WORD PTR wArgs.Self)+2],AX
  374.  
  375.         PUSH    [WORD PTR Color]
  376.         PUSH    [WORD PTR thisPtr+2]
  377.         PUSH    [WORD PTR thisPtr]
  378.         CALL    @TView@mapColor$quc
  379.         ADD             SP,6
  380.         MOV     AH,AL
  381.         MOV     AL,[BYTE PTR C]
  382.         MOV     CX,[Count]
  383.         OR      CX,CX
  384.         JLE     @@2
  385.         CMP     CX,256
  386.         JLE     @@1
  387.         MOV     CX,256
  388. @@1:
  389.         MOV     DI,CX
  390.         SHL     DI,1
  391.         SUB     SP,DI
  392.         PUSH    DI
  393.         MOV     DI,SP
  394.         ADD     DI,2
  395.         PUSH    SS
  396.         POP     ES
  397.         MOV     DX,CX
  398.         CLD
  399.         REP     STOSW
  400.         MOV     CX,DX
  401.         MOV     DI,SP
  402.         ADD     DI,2
  403.         MOV     AX,[Y]
  404.         MOV     BX,[X]
  405.         CALL    @TView@writeView$qv
  406.         POP     DI
  407.         ADD     SP,DI
  408. @@2:
  409.         RET
  410. ENDP
  411.  
  412. PROC    @TView@writeLine$qssssnxv
  413.         ARG     thisPtr : DWORD, X : WORD, Y : WORD, W : WORD, H : WORD, Buf : DWORD
  414.         USES    SI,DI
  415.  
  416.         MOV     AX,[WORD PTR thisPtr]
  417.         MOV     [WORD PTR wArgs.Self],AX
  418.         MOV     AX,[WORD PTR thisPtr+2]
  419.         MOV     [(WORD PTR wArgs.Self)+2],AX
  420.  
  421.         CMP     [H],0
  422.         JLE     @@2
  423. @@1:
  424.         MOV     AX,[Y]
  425.         MOV     BX,[X]
  426.         MOV     CX,[W]
  427.         LES     DI,[Buf]
  428.         CALL    @TView@writeView$qv
  429.         INC     [Y]
  430.         DEC     [H]
  431.         JNE     @@1
  432. @@2:
  433.         RET
  434. ENDP
  435.  
  436. PROC    @TView@writeStr$qssnxzcuc
  437.         ARG     thisPtr : DWORD, X : WORD, Y : WORD, Strng : DWORD, Color : WORD
  438.         LOCAL   ssize : WORD
  439.         USES    SI,DI
  440.  
  441.         MOV     AX,[WORD PTR thisPtr]
  442.         MOV     [WORD PTR wArgs.Self],AX
  443.         MOV     AX,[WORD PTR thisPtr+2]
  444.         MOV     [(WORD PTR wArgs.Self)+2],AX
  445.  
  446.         MOV     DI,[WORD PTR Strng]
  447.         OR      DI,[WORD PTR Strng+2]
  448.         JZ      @@2
  449.         LES     DI,[Strng]
  450.         XOR     AX,AX
  451.  
  452.         CLD
  453.         MOV     CX,0FFFFh
  454.         REPNE   SCASB
  455.         XCHG    AX,CX
  456.         NOT     AX
  457.         DEC     AX
  458.         CMP     AX,0
  459.         JE      @@2             ; don't write zero length string
  460.         MOV     SI,AX           ; save char count
  461.         SHL     AX,1
  462.         SUB     SP,AX           ; make room for attributed string
  463.         MOV     [ssize],AX
  464.  
  465.         PUSH    [WORD PTR Color]
  466.         PUSH    [WORD PTR thisPtr+2]
  467.         PUSH    [WORD PTR thisPtr]
  468.         CALL    @TView@mapColor$quc
  469.         ADD     SP,6
  470.         MOV     AH,AL           ; attribute into AH
  471.         MOV     CX,SI           ; char count into CX
  472.  
  473.         MOV     BX,DS
  474.         LDS     SI,[Strng]
  475.         MOV     DI,SP
  476.         PUSH    SS
  477.         POP     ES
  478.         MOV     DX,CX
  479. @@1:
  480.         LODSB
  481.         STOSW
  482.         LOOP    @@1
  483.         MOV     DS,BX
  484.         MOV     CX,DX
  485.         MOV     DI,SP
  486.         MOV     AX,[Y]
  487.         MOV     BX,[X]
  488.         CALL    @TView@writeView$qv
  489.         ADD     SP,[ssize]
  490.         JMP     @@2
  491. @@3:
  492.         MOV     DS,BX
  493. @@2:
  494.         RET
  495. ENDP
  496.  
  497. END
  498.  
  499.