[Back to TEXTWNDW SWAG index]  [Back to Main SWAG index]  [Original]

{
SEAN PALMER

>I was looking threw a Turbo C++ manual and noted some
>Procedures that deal With the Text screen, such as
>Get/PutTextImage. I was wondering if anyone has created one
>for Pascal to move/save Text images around the screen like
>in C++.

Copies a rectangular section from one video buffer (any size) to another
}

Procedure moveScr(Var srcBuf; srcX, srcY, width, height, srcBufW,
                      srcBufH : Word; Var dstBuf; dstX, dstY, dstBufW,
                      dstBufH : Word); Assembler;
Asm
  cld
  push ds
  lds  si, srcBuf    {calc src adr}
  mov  ax, srcBufW
  mul  srcY
  add  ax, srcX
  shl  ax, 1
  add  si, ax
  les  di, dstBuf    {calc dst adr}
  mov  ax, dstBufW
  mul  dstY
  add  ax, dstX
  shl  ax, 1
  add  di, ax
  mov  dx, height    {num lines}
  mov  ax, SrcBufW   {calc ofs between src lines}
  sub  ax, width
  shl  ax, 1
  mov  bx, dstBufW   {calc ofs between dst lines}
  sub  bx, width
  shl  bx, 1
 @L:
  mov  cx, width
  rep  movsw
  add  si, ax
  add  di, bx
  dec  dx
  jnz  @L
  pop  ds
end;

Var
  s : Array [0..24,0..79,0..1] of Char Absolute $B800 : 0;
  d : Array [0..11,0..39,0..1] of Char;
  i : Integer;

begin
  For i := 1 to 25 * 10 do
    Write('(--)(--)');
  moveScr(s,0,0,40,12,80,25,d,0,0,40,12); {copy 40x12 block to buf}
  readln;
  moveScr(d,0,0,38,10,40,12,s,5,5,80,25); {copy part back to screen}
  readln;
end.


[Back to TEXTWNDW SWAG index]  [Back to Main SWAG index]  [Original]