diff --git a/sys/dev/syscons/scvtb.c b/sys/dev/syscons/scvtb.c index a7d1a71efed..3c62ec9e4d1 100644 --- a/sys/dev/syscons/scvtb.c +++ b/sys/dev/syscons/scvtb.c @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id:$ + * $Id: scvtb.c,v 1.1 1999/06/22 14:13:30 yokota Exp $ */ #include "sc.h" @@ -231,6 +231,24 @@ sc_vtb_erase(sc_vtb_t *vtb, int at, int count, int c, int attr) fillw(attr | c, (void *)sc_vtb_pointer(vtb, at), count); } +void +sc_vtb_move(sc_vtb_t *vtb, int from, int to, int count) +{ + if (from + count > vtb->vtb_size) + count = vtb->vtb_size - from; + if (to + count > vtb->vtb_size) + count = vtb->vtb_size - to; + if (count <= 0) + return; + if (vtb->vtb_type == VTB_FRAMEBUFFER) { + bcopy_io(sc_vtb_pointer(vtb, from), + sc_vtb_pointer(vtb, to), count*sizeof(u_int16_t)); + } else { + bcopy((void *)sc_vtb_pointer(vtb, from), + (void *)sc_vtb_pointer(vtb, to), count*sizeof(u_int16_t)); + } +} + void sc_vtb_delete(sc_vtb_t *vtb, int at, int count, int c, int attr) { diff --git a/sys/dev/syscons/syscons.h b/sys/dev/syscons/syscons.h index da48c7ced63..d7f3d1938b7 100644 --- a/sys/dev/syscons/syscons.h +++ b/sys/dev/syscons/syscons.h @@ -25,7 +25,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: syscons.h,v 1.47 1999/04/12 13:34:56 des Exp $ + * $Id: syscons.h,v 1.48 1999/06/22 14:13:32 yokota Exp $ */ #ifndef _DEV_SYSCONS_SYSCONS_H_ @@ -496,6 +496,7 @@ void sc_vtb_append(sc_vtb_t *vtb1, int from, sc_vtb_t *vtb2, int count); void sc_vtb_seek(sc_vtb_t *vtb, int pos); void sc_vtb_erase(sc_vtb_t *vtb, int at, int count, int c, int attr); +void sc_vtb_move(sc_vtb_t *vtb, int from, int to, int count); void sc_vtb_delete(sc_vtb_t *vtb, int at, int count, int c, int attr); void sc_vtb_ins(sc_vtb_t *vtb, int at, int count, int c, int attr);