[Previous]
[Contents]
[Next]

movedata()

copy bytes from one far pointer to another

Synopsis:

#include <string.h>
void movedata( unsigned int src_segment,
               unsigned int src_offset,
               unsigned int tgt_segment,
               unsigned int tgt_offset,
               size_t length );

Description:

The movedata() function copies length bytes from the far pointer calculated as (src_segment:src_offset) to a target location determined as a far pointer (tgt_segment:tgt_offset).


Note: Overlapping data may not be correctly copied. When the source and target areas may overlap, copy the areas one character at a time.

The function is useful to move data when the near address(es) of the source and/or target areas aren't known.

Examples:

#include <sys/mman.h>

main()
{
  char buffer[14] = { 
      H, 0x17, e, 0x17, l, 0x17, l, 0x17, 
      o, 0x17 };
  int     fd,len;
  int     addr = 0xb8000;
  char    *p;

  if ((fd=shm_open( "Physical", O_RDWR, 0)) == -1) 
  {
    fprintf( stderr, "cannot access physical (%s)\n",
             strerror(errno));
  }

  len = sizeof( buffer );
  if ((p=mmap( 0, len, PROT_READ|PROT_WRITE, 
               MAP_SHARED, fd, addr)) == -1) 
  {
    fprintf( stderr,
             "cannot map video screen (%s)\n",
             strerror(errno));
  }

  movedata( FP_SEG( buffer ), FP_OFF( buffer ), 
            FP_SEG( p ), FP_OFF( p ), 14 );
}

Classification:

WATCOM

Safety:
Interrupt handler Yes
Signal handler Yes
Thread Yes

See also:

FP_SEG(), FP_OFF(), memcpy(), segread()


[Previous]
[Contents]
[Next]