Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.naic.edu/~phil/hardware/vertex/sharemegsvertex/lcu/user/v2_2/Sun/outram.cnew
Дата изменения: Mon Mar 5 20:01:40 2001
Дата индексирования: Thu Jan 15 14:21:22 2009
Кодировка:

Поисковые слова: m 80
#include "prog.h"

static void monsub (int v[], int i1, int tt); /* prototypes*/
static void monclr (int v[], int i1, int tt);
static int monpos (int iz,int is);
static void monopt (int v[], int i1, int tt);
static void monops (int v[], int i1, int tt);
static void monopc (int v[], int i1,int tt);
/* ************************************************************* */
void outram (unsigned int iza,unsigned int ize,unsigned int isa,
unsigned int ise,
unsigned int k3,unsigned int iov,
unsigned int ntext,const char* ttext) /* monilib */
/* ouptput to screen memory
* iza - line start
* ize - line end
* isa - col start
* ise - col end
* k3 - these two are screen attributes and how you overwrite screen.
* iov - .. need to check my german..
* ntext- number of characters for line
* ttext- ascii text to output
changed the calls to match the param lists .. outram
*/

/* Ausgabe zum Monitor in Zeile iz, Spalte is mit Option io */
/* Ausgegeben wird der Text ttext mit ntext Zeichen. */
/* Besser ist, wenn Optionendefinition = Speicherinhalt k3 */
/* Option iov: */
/* 0 0 0 x 0 x x x */
/* | | | | */
/* +-- hell nicht clr | | +-- nur Option Bit setzen */
/* | +---- nur Option Bit clr. */
/* +------ nur Option wechseln */
/* */
/* x 0 x x x x 0 x */
/* | | | | | | */
/* | | +-- clr Bild | | +-- hell (nur Bit set) */
/* | +---- clr Zeile | | */
/* | | +------ blinken */
/* +-------- (Sonderz.) +-------- reverse */
/* ************************************************************* */
{


int tt[200];

int m, m1, m2, i, i1, k, k1, k2;

int monza,monze,monsa,monse,monanz;
unsigned int monio; /* pjp001 unsigned*/
const char *montxt;

monza = iza;
monze = ize;
monsa = isa;
monse = ise;
monio = iov;
monanz = ntext;
montxt = ttext;


k1 = 0x0000; /* Adresse k2:k1 */
/*** k2 = 0xB000;***/
k2 = 0xB800;
/*** k3 = 0x0700;***/ /* Schwarz / weiъ normal */
/*** k3 = 0x0600;braun ***/
/*** k3 = 0x0400;***/ /* rot */

m1 = monio & 0x0008; /* reverse */
if (m1 != 0) k3 = 0x7000;
m1 = monio & 0x0001; /* hell */
if (m1 != 0) k3 = k3 | 0x0800;
m1 = monio & 0x0004; /* blinken */
if (m1 != 0) k3 = k3 | 0x8000;

m1 = monio & 0x0700; /* nur Option Дndern */
if (m1 == 0) goto W1;

m2 = k3 & 0xF8FF;
for (m = monza; m <= monze; m++)
for (i = monsa; i <= monse; i++)
{ i1 = monpos (m, i);
if (m1 == 0x100) monops (k1, k2, i1); /* Bit set */
if (m1 == 0x200) monopc (k1, k2, i1); /* Bit clr */
if (m1 == 0x400) monopt (k1, k2, i1); /* change */
}
goto E;

W1: m1 = monio & 0x0010; /* Bild lЖschen */
if (m1 != 0)
for (m = 0; m < 25; m++)
for (i = 0; i < 80; i++)
monsub (k1, k2, m*80+i);

m1 = monio & 0x0020; /* Zeile lЖschen */
if (m1 != 0)
for (m = monza; m <= monze; m++)
for (i = 0; i < 80; i++)
monsub (k1, k2, (m-1)*80+i);

k = 0; /* Text anzeigen */
for (m = monsa; m <= monse; m = m + monanz)
for (i = 0; i < monanz; i++)
tt[k++] = (montxt[i] & 0x00FF) | k3;

m1 = monio & 0x1000; /* hell nicht lЖschen */
for (m = monza; m <= monze; m++) /* Zeichenanzeige */
{ i1 = monpos (m, monsa);
for (i = 0; i < k; i++)
{ if (m1 == 0) monsub (k1, k2, i1+i);
if (m1 != 0) monclr (k1, k2, i1+i);
} }

E: return; }
/* ************************************************************* */
static void monsub (int v[], int i1, int tt)
/* 1 Zeichen in den Video-Buffer speichern */
/* ************************************************************* */

{
v[i1] = tt;
return; }
/* ************************************************************* */
static void monclr (int v[], int i1, int tt)
/* 1 Zeichen in den Video-Buffer speichern */
/* Option hell wird nicht gelЖscht */
/* ************************************************************* */

{
v[i1] = tt | (v[i1] & 0x0800);
return; }
/* ************************************************************* */
static int monpos (int iz,int is)
/* Cursor - Position Zeile iz und Spalte is. */
/* Berechnung des Bufferoffsets i1; */
/* ************************************************************* */

{
int i1;

i1 = (iz - 1) * 80 + is - 1;
return (i1); }
/* ************************************************************* */
static void monopt (int v[], int i1, int tt)
/* FЭr 1 Zeichen im Video-Buffer wird die Option geДndert */
/* ************************************************************* */

{
v[i1] = (v[i1] & 0x00FF) | (tt & 0xFF00);
return; }
/* ************************************************************* */
static void monops (int v[], int i1, int tt)
/* FЭr 1 Zeichen im wird die Option durch Bit set geДndert */
/* ************************************************************* */

{
v[i1] = v[i1] | tt; /* Bit set */
return; }
/* ************************************************************* */
static void monopc (int v[], int i1,int tt)
/* FЭr 1 Zeichen im wird die Option durch Bit clear geДndert */
/* ************************************************************* */

{
v[i1] = v[i1] & ~tt; /* Bit clr */
return; }