1*41071Swilliam /*- 2*41071Swilliam * Copyright (c) 1990 The Regents of the University of California. 3*41071Swilliam * All rights reserved. 4*41071Swilliam * 5*41071Swilliam * This code is derived from software contributed to Berkeley by 6*41071Swilliam * William Jolitz. 7*41071Swilliam * 8*41071Swilliam * %sccs.include.noredist.c% 9*41071Swilliam * 10*41071Swilliam * @(#)cga.c 7.1 (Berkeley) 04/24/90 11*41071Swilliam */ 12*41071Swilliam 13*41071Swilliam typedef unsigned short u_short; 14*41071Swilliam typedef unsigned char u_char; 15*41071Swilliam 16*41071Swilliam #define CRT_TXTADDR ((u_short *)0xb8000) 17*41071Swilliam #define COL 80 18*41071Swilliam #define ROW 25 19*41071Swilliam #define CHR 2 20*41071Swilliam 21*41071Swilliam u_short *crtat; 22*41071Swilliam u_char color = 0xe ; 23*41071Swilliam int row; 24*41071Swilliam 25*41071Swilliam sput(c) u_char c; { 26*41071Swilliam 27*41071Swilliam if (crtat == 0) { 28*41071Swilliam crtat = CRT_TXTADDR; bzero (crtat,COL*ROW*CHR); 29*41071Swilliam } 30*41071Swilliam if (crtat >= (CRT_TXTADDR+COL*ROW*CHR)) { 31*41071Swilliam crtat = CRT_TXTADDR+COL*(ROW-1); row = 0; 32*41071Swilliam } 33*41071Swilliam switch(c) { 34*41071Swilliam 35*41071Swilliam case '\t': 36*41071Swilliam do { 37*41071Swilliam *crtat++ = (color<<8)| ' '; row++ ; 38*41071Swilliam } while (row %8); 39*41071Swilliam break; 40*41071Swilliam 41*41071Swilliam case '\010': 42*41071Swilliam crtat--; row--; 43*41071Swilliam break; 44*41071Swilliam 45*41071Swilliam case '\r': 46*41071Swilliam bzero (crtat,(COL-row)*CHR) ; crtat -= row ; row = 0; 47*41071Swilliam break; 48*41071Swilliam 49*41071Swilliam case '\n': 50*41071Swilliam if (crtat >= CRT_TXTADDR+COL*(ROW-1)) { /* scroll */ 51*41071Swilliam bcopy(CRT_TXTADDR+COL, CRT_TXTADDR,COL*(ROW-1)*CHR); 52*41071Swilliam bzero (CRT_TXTADDR+COL*(ROW-1),COL*CHR) ; 53*41071Swilliam crtat -= COL ; 54*41071Swilliam } 55*41071Swilliam crtat += COL ; 56*41071Swilliam break; 57*41071Swilliam 58*41071Swilliam default: 59*41071Swilliam *crtat++ = (color<<8)| c; row++ ; 60*41071Swilliam break ; 61*41071Swilliam } 62*41071Swilliam } 63