Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Calling vga.h functions in a XWindows environment

2 views
Skip to first unread message

ericmatteson...@hotmail.com

unread,
Oct 20, 2006, 4:31:51 PM10/20/06
to
Calling vga.h functions in a XWindows environment
can be difficult. Far too many of the newer versions
of Linux use only XWindows and do not currently
have vga.h as of October 2006.
I have decided to develop a wgslater.c helper file
to explain to XWindows how to perform the
standard common vga.h functions.
This wgslater.c is called by the zackvga.h version
of replacement for vga.h
zackvga.h Header file helper is called wgslater.c */
// zackvga.h and wgslater.c are used instead of vga.h
// when compiling c programs that use vga.h functions
// on XWindows Linux that does not have the
// traditional vga.h
// zackvga.h is used instead of vga.h to avoid conflict
// zackmain(int,char**) is used instead of main in programs
// that call this zackvga.h
// this header file requires wgslater.c to help
// vga.h functions run on Linux XWindows
// This remmed out zackvga.h for XWindows is written by
// Hollywood scriptwriter Eric Matteson.
// this is zackvga.hxw on floppy and is
// zackvga.h on XWindows hard drive partition
// permission is granted to copy this c source code
// and to publish it on the Internet
// and to use it at least for non profit use.
// remmed out version of zackvga.h is next
// ---------------------------------------------------------
// #include<stdio.h>
// #include<dirent.h>
// #define G640x480x16 4
// #define G640x480x2 9
// int slaterargct;
// char** xwsixplanes;
// #include "wgslater.c"
// int zackmain(int,char**);
// int main(int hxwactr,char** hxwacc)
// {
// int hxwhret;
// slaterargct = hxwactr;
// xwsixplanes = hxwacc;
// hxwhret = zackmain(hxwactr,hxwacc);
// return hxwhret;
// }
// -------------------------------
// end of remmed out version of zackvga.h for Linux XWindows
// --
// --
// This is beginning of wgslater.c helper file
// Copyright by Eric Matteson
// permission is granted to copy this wgslater.c
// source code and to publish it on the Internet
// and to use it at least for non profit use.
// this wgslater.c is called by XWindows
// version of zackvga.h and
// was written by Hollywood scriptwriter Eric Matteson
// This programming is valid only as source
// code because it is to be compiled with
// other c source code that would use vga.h but has to
// run on Linux XWindows
#include<X11/Xutil.h>
const int wgsla50 = 50;
const int wgsla62 = 62;
const char* noslater = NULL;
Display* lpp_dis;
Window jennifer;
XEvent screechevent;
GC wgsmonogc,wgsbriigc,wgsredigc,wgsgrnigc,wgsbluigc;
XSizeHints* slaterxsh;
XWMHints* slaterxwmh;
XClassHint* slaterxch;
Pixmap wgsmonomap,tennifer,wgsbriimap,wgsredimap;
Pixmap wgsgrnimap,wgsbluimap;
int scc_num;
// int didthistime;
int rigmaxdiff,rigmaydiff,rigmatarg;
int xwscrdepth,vgascrdepth,currentcolor;
int keyonetosix,apaintscreen,luffonewid;
int buffonewid,buffonehgt,vgaprezmode;
int screechkey,slatershift,acwgnonshift;
char* xwfiveplanes[10];
char zackpl0[38400];
char zackpl1[38400];
char zackpl2[38400];
char zackpl3[38400];
char zackpl4[38400];
char zackpl5[60000];
char zackpl6[60000];
char zackpl7[60000];
char zackpl8[60000];
char zackpl9[60000];
char sixkeyz[8];
int xwkeytranz[512];
char acflipbay[256];
// declarations of subroutines are next
int bluetype1(int bas1pos,char* bluec1);
int rredcst1(int red1s,int red1w,int red1b,char* red1acl);
void aclinemake(int* i1ixt,char* x1xdd);
void x1ktmany(int* i1mxt);
int acdoskey(int k1kll,int k1shiftb,int i1xkeyhold[],
const char* k1linuxcm);
void acuncram(char* acuccb,int acucshift,int acunone);
void zackptrget(char** zzacktarg,char* zackray,int yzackwhich);
void ackbfill(char* kba6,int akk2,int acs2,int* akf2);
int drawonekey(int* dosixctrr,char* kea6);
void bitwrt2(char* bde2,int ski2,int wwi2,int wx2,
int wy2,int zltr2,int wwvb2);
void vga_init();
int vga_getcurrentmode();
int vga_hasmode(int);
void vga_setmode(int);
int vga_getxdim();
int vga_getydim();
int vga_getkey();
void vga_setcolor(int);
void vga_drawpixel(int,int);
void was_drawline(int,int,int,int);
void vga_drawline(int,int,int,int);
void vga_drawscansegment(char* vgdsl2,int vgdsx2,int vgdsy2,
int vgdswid2);
char acrevbits(char* acrbtab,char* acrbse,int acrbsi,int acrbzn);
int zeldline(int srbx,int srby,int rbwidlg,
int rbwidxx,char* zeldlsrc);
// subroutines are next
int bluetype1(int bas1pos,char* bluec1)
{
int blueres1,blueoff1,bluecmp1;
blueres1=29;
blueoff1 = bas1pos - 1;
bluecmp1 = (int)(*(bluec1 + blueoff1));
if((bluecmp1 >= 48)&&(bluecmp1 <= 57))blueres1 = bluecmp1 - 48;
if((bluecmp1 >= 65)&&(bluecmp1 <= 70))blueres1 = bluecmp1 - 55;
if((bluecmp1 >= 97)&&(bluecmp1 <=102))blueres1 = bluecmp1 - 87;
return blueres1;
}
int rredcst1(int red1s,int red1w,int red1b,char* red1acl)
{
int red1ctr,red10pos,red1allow,redcrez1,red15cmp;
redcrez1 = 0;
red1ctr=0;
red1allow=1;
while(red1allow > 0)
{
red10pos = red1ctr + red1s;
red15cmp = bluetype1(red10pos,red1acl);
if(red15cmp <= 15)red1allow = 0;
if(red1allow > 0)
{
red1ctr = red1ctr + 1;
if(red1ctr >= red1w)red1allow = 0;
}
}
red1allow = 0;
if(red1ctr < red1w)red1allow = 1;
while(red1allow > 0)
{
red10pos = red1ctr + red1s;
red15cmp = bluetype1(red10pos,red1acl);
if(red15cmp > 15)red1allow = 0;
if(red1allow > 0)
{
redcrez1 = redcrez1 * red1b;
redcrez1 = redcrez1 + red15cmp;
red1ctr = red1ctr + 1;
if(red1ctr >= red1w)red1allow = 0;
}
}
return redcrez1;
}
void aclinemake(int* i1ixt,char* x1xdd)
{
int x1sspos,x1ssmany,x1ssbase,x1ssctr,x1sssub,x1sstw;
int x1ssterm,x1tssub;
// xsspos 999 xssbase-1 F xssmany 99 xsstw 9
// 9 f 5
x1sspos=rredcst1(1,3,10,x1xdd);
x1ssbase=rredcst1(4,1,16,x1xdd);
x1ssmany=rredcst1(5,2,10,x1xdd);
x1ssctr=0;
if((x1ssbase == 9)||(x1ssbase == 15))
{
x1sstw = rredcst1(7,1,16,x1xdd);
while(x1ssctr < x1ssmany)
{
x1sssub = (x1ssctr * x1sstw) + 8;
x1tssub = x1ssctr + x1sspos;
x1ssterm = rredcst1(x1sssub,x1sstw,(x1ssbase + 1),x1xdd);
*(i1ixt + x1tssub) = x1ssterm;
x1ssctr=x1ssctr+1;
}
}
if(x1ssbase == 5)
{
while(x1ssctr < x1ssmany)
{
x1sssub = x1ssctr + 6;
x1tssub = x1ssctr + x1sspos;
x1ssterm = (int)(*(x1xdd + x1sssub));
*(i1ixt + x1tssub)=x1ssterm;
x1ssctr = x1ssctr+1;
}
}
}
void x1ktmany(int* i1mxt)
{
int i1ktmanyctr;
i1ktmanyctr=0;
while(i1ktmanyctr < 512)
{
*(i1mxt + i1ktmanyctr)=131065;
i1ktmanyctr=i1ktmanyctr+1;
}
// -------------------------------------------
aclinemake(i1mxt,"079F0423738392D");
aclinemake(i1mxt,"083F0423435362B");
aclinemake(i1mxt,"087F052313233302E");
aclinemake(i1mxt,"097F04324724824924B");
aclinemake(i1mxt,"102F06324D24F250251252253");
aclinemake(i1mxt,"063F0122A");
aclinemake(i1mxt,"112F0122F");
aclinemake(i1mxt,"050F01210");
aclinemake(i1mxt,"062901216");
aclinemake(i1mxt,"022F01208");
aclinemake(i1mxt,"009F0121B");
aclinemake(i1mxt,"023F01209");
aclinemake(i1mxt,"0105101234567890");
aclinemake(i1mxt,"024510qwertyuiop");
aclinemake(i1mxt,"038509asdfghjkl");
aclinemake(i1mxt,"052507zxcvbnm");
aclinemake(i1mxt,"0369013013");
aclinemake(i1mxt,"108F0120D");
aclinemake(i1mxt,"0659013032");
aclinemake(i1mxt,"020F0222D3D");
aclinemake(i1mxt,"051F0125C");
aclinemake(i1mxt,"034F0225B5D");
aclinemake(i1mxt,"047F0223B27");
aclinemake(i1mxt,"059F0322C2E2F");
aclinemake(i1mxt,"049F01260");
aclinemake(i1mxt,"305F0127E");
aclinemake(i1mxt,"2669103033064035036037094038042040041");
aclinemake(i1mxt,"280510QWERTYUIOP");
aclinemake(i1mxt,"294509ASDFGHJKL");
aclinemake(i1mxt,"308507ZXCVBNM");
aclinemake(i1mxt,"276F0225F2B");
aclinemake(i1mxt,"307F0127C");
aclinemake(i1mxt,"290F0227B7D");
aclinemake(i1mxt,"303F0223A22");
aclinemake(i1mxt,"315F0323C3E3F");
// ---------------------------------------------------------
}
// LINUX KEYBOARD TRANSLATOR TOP
// lreadc rredcst1
// need xxkeyhold next
int acdoskey(int k1kll,int k1shiftb,int i1xkeyhold[],
const char* k1linuxcm)
{
int k1linuxmm,z1andtogi;
int l1idoskrs,l1idoslr;
int l11doscrs;
int w1asdkeyused;
// x=120 v=118
char c1linuxcm;
c1linuxcm = *k1linuxcm;
k1linuxmm = (int)c1linuxcm;
l1idoskrs=131072;
w1asdkeyused=0;
if(k1linuxmm == 120)
// x==120
{
l1idoslr = k1kll;
if((l1idoslr >= 0)&&(l1idoslr < 256))
{
if(k1shiftb == 1)l1idoslr=k1kll+256;
l1idoskrs = i1xkeyhold[l1idoslr];
w1asdkeyused=1;
l11doscrs=l1idoskrs;
if(l11doscrs == 8)l1idoskrs = 127;
if(l11doscrs == 13)l1idoskrs = 10;
}
if((l1idoskrs >= 512)&&(l1idoskrs <= 767))
{
l11doscrs=l1idoskrs;
// -----------------------------------------------------
if(l11doscrs==(512+71))l1idoskrs=rredcst1(1,8,16,"1B5B317E");
if(l11doscrs==(512+72))l1idoskrs=rredcst1(1,8,16,"001B5B41");
if(l11doscrs==(512+73))l1idoskrs=rredcst1(1,8,16,"1B5B357E");
if(l11doscrs==(512+75))l1idoskrs=rredcst1(1,8,16,"001B5B44");
if(l11doscrs==(512+77))l1idoskrs=rredcst1(1,8,16,"001B5B43");
if(l11doscrs==(512+79))l1idoskrs=rredcst1(1,8,16,"1B5B347E");
if(l11doscrs==(512+80))l1idoskrs=rredcst1(1,8,16,"001B5B42");
if(l11doscrs==(512+81))l1idoskrs=rredcst1(1,8,16,"1B5B367E");
if(l11doscrs==(512+82))l1idoskrs=rredcst1(1,8,16,"1B5B327E");
if(l11doscrs==(512+83))l1idoskrs=rredcst1(1,8,16,"1B5B337E");
// -----------------------------------------------------
w1asdkeyused=1;
}
}
if(k1linuxmm == 118)
// v==118
{
// k1linuxcm == "v" for vga_getkey() within <vga.h>
z1andtogi=1;
if(k1kll < rredcst1(1,2,16,"00"))z1andtogi=0;
if(k1kll > rredcst1(1,2,16,"7E"))z1andtogi=0;
if(z1andtogi == 1)
{
l1idoskrs=k1kll;
}
if(k1kll == rredcst1(1,2,16,"7F"))l1idoskrs=8;
// -----------------------------------------------------
if(k1kll == rredcst1(1,8,16,"1B5B317E"))l1idoskrs=512+71;
if(k1kll == rredcst1(1,8,16,"001B5B41"))l1idoskrs=512+72;
if(k1kll == rredcst1(1,8,16,"1B5B357E"))l1idoskrs=512+73;
if(k1kll == rredcst1(1,8,16,"001B5B44"))l1idoskrs=512+75;
if(k1kll == rredcst1(1,8,16,"001B5B43"))l1idoskrs=512+77;
if(k1kll == rredcst1(1,8,16,"1B5B347E"))l1idoskrs=512+79;
if(k1kll == rredcst1(1,8,16,"001B5B42"))l1idoskrs=512+80;
if(k1kll == rredcst1(1,8,16,"1B5B367E"))l1idoskrs=512+81;
if(k1kll == rredcst1(1,8,16,"1B5B327E"))l1idoskrs=512+82;
if(k1kll == rredcst1(1,8,16,"1B5B337E"))l1idoskrs=512+83;
// -----------------------------------------------------
w1asdkeyused=1;
}
if(w1asdkeyused == 0)l1idoskrs=k1linuxmm;
return l1idoskrs;
}
// end of int acdoskey(int,int,int[],const char*)
void acuncram(char* acuccb,int acucshift,int acunone)
{
int acunctr,acunsub,acuntwo,acunpar;
acuntwo=acunone;
acunctr=3;
while(acunctr >= 0)
{
acunsub = acunctr + acucshift;
acunpar = acuntwo & 255;
if(acunpar > 127)acunpar=acunpar-256;
*(acuccb + acunsub)=(char)acunpar;
acuntwo = acuntwo >> 8;
acunctr = acunctr - 1;
}
}
void ackbfill(char* kba6,int akk2,int acs2,int* akf2)
{
int bkk2;
bkk2 = acdoskey(akk2,acs2,akf2,"x");
acuncram(kba6,2,0);
acuncram(kba6,0,0);
if(akk2 > 0)
{
acuncram(kba6,1,bkk2);
}
}
int drawonekey(int* dosixctrr,char* kea6)
{
int drawonekes,drawonekkr;
drawonekes = 0 - 1;
if((*dosixctrr) >= 1)
{
drawonekes = (int)(*(kea6));
if(drawonekes < 0)drawonekes = drawonekes + 256;
drawonekkr=0;
while(drawonekkr < 5)
{
*(kea6 + drawonekkr) = *(kea6 + (drawonekkr + 1));
drawonekkr = drawonekkr + 1;
}
*(kea6 + 5) = '\0';
*dosixctrr = *dosixctrr - 1;
}
return drawonekes;
}
// bottom of drawonekey
// begin XWindows specific section
int gcbw2(int gcdepth2,int gca2)
{
int gcbr2;
// gca2 is 0 12 14 15
// colors black darkgrey grey white
// gca2 is 4 2 1 R B G
// large plane masks 16 allplanes
gcbr2=0;
if(gcdepth2 == 2)
{
if(gca2 == 0)gcbr2=0;
if(gca2 == 1)gcbr2=1;
if(gca2 == 2)gcbr2=1;
if(gca2 == 4)gcbr2=1;
if(gca2 == 12)gcbr2=0;
if(gca2 == 14)gcbr2=1;
if(gca2 == 15)gcbr2=1;
if(gca2 == 16)gcbr2=1;
}
if(gcdepth2 == 4)
{
if(gca2 == 0)gcbr2=0;
if(gca2 == 1)gcbr2=1;
if(gca2 == 2)gcbr2=2;
if(gca2 == 4)gcbr2=4;
if(gca2 == 12)gcbr2=0;
if(gca2 == 14)gcbr2=7;
if(gca2 == 15)gcbr2=15;
if(gca2 == 16)gcbr2=16;
}
if(gcdepth2 == 8)
{
if(gca2 == 0)gcbr2=0;
if(gca2 == 1)gcbr2=2;
if(gca2 == 2)gcbr2=20;
if(gca2 == 4)gcbr2=160;
if(gca2 == 12)gcbr2=0;
if(gca2 == 14)gcbr2=73;
if(gca2 == 15)gcbr2=255;
if(gca2 == 16)gcbr2=255;
}
if(gcdepth2 == 24)
{
if((gca2 >= 1)&&(gca2 <= 4))
{
gcbr2=65793*rredcst1(1,8,2,"00111100");
}
if(gca2 == 1)gcbr2=gcbr2+rredcst1(1,8,2,"01000010");
if(gca2 == 2)gcbr2=gcbr2+(256 * rredcst1(1,8,2,"01000010"));
if(gca2 == 4)gcbr2=gcbr2+(65536*rredcst1(1,8,2,"01000010"));
if(gca2 == 0)gcbr2=0;
if(gca2 == 12)gcbr2=0;
// if(gca2 == 14)gcbr2=8355711;
// 14 to 65793 * (127 or 126)
if(gca2 == 14)gcbr2=65793 * rredcst1(1,8,2,"10000001");
if(gca2 == 15)gcbr2=16777215;
if(gca2 == 16)gcbr2=16777215;
}
if(gcdepth2 == 32)
{
gcbr2=0;
if((gca2 >= 1)&&(gca2 <= 4))
{
gcbr2=2097152+1024;
gcbr2=gcbr2*rredcst1(1,11,2,"00111111100");
gcbr2=gcbr2+rredcst1(1,10,2,"0011111100");
}
if(gca2 == 1)gcbr2=gcbr2+rredcst1(1,10,2,"0100000010");
if(gca2 == 2)gcbr2=gcbr2+(1024 * rredcst1(1,11,2,
"01000000010"));
if(gca2 == 4)gcbr2=gcbr2+(2097152 * rredcst1(1,11,2,
"01000000010"));
if(gca2 == 0)gcbr2=0;
if(gca2 == 12)gcbr2=0;
if(gca2 == 14)
{
gcbr2=2097152+1024;
gcbr2=gcbr2*rredcst1(1,11,2,"10000000001");
gcbr2=gcbr2+rredcst1(1,10,2,"1000000001");
}
if(gca2 == 15)gcbr2=0-1;
if(gca2 == 16)gcbr2=0-1;
}
return gcbr2;
}
// end of gcbw2 XWindows
void getgc2(Window wigc2,GC* wrgc2,int gsdepth2,int azbnzw2)
{
unsigned long vgcmask2=0;
XGCValues vgcvalues2;
int zbnzw2;
unsigned int gclw2=1;
int linestyle2=LineSolid;
int capstyle2=CapRound;
int joinstyle2=JoinRound;
int fillstyle2=FillSolid;
zbnzw2=65;
if(azbnzw2 == 1)zbnzw2=1;
if(azbnzw2 == 0)zbnzw2=0;
if(azbnzw2 == 17)zbnzw2=17;
if(azbnzw2 == 18)zbnzw2=18;
if(azbnzw2 == 19)zbnzw2=19;
if(azbnzw2 == 20)zbnzw2=20;
*wrgc2=XCreateGC(lpp_dis,wigc2,vgcmask2,&vgcvalues2);
XSetLineAttributes(lpp_dis,*wrgc2,gclw2,linestyle2,capstyle2,
joinstyle2);
XSetFillStyle(lpp_dis,*wrgc2,fillstyle2);
if(zbnzw2 == 0)XSetForeground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,0));
if(zbnzw2 == 0)XSetBackground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,15));
if(zbnzw2 == 1)XSetForeground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,15));
if(zbnzw2 == 1)XSetBackground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,0));
if(zbnzw2 == 17)XSetBackground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,0));
if(zbnzw2 == 17)XSetForeground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,4+12));
if(zbnzw2 == 18)XSetBackground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,0));
if(zbnzw2 == 18)XSetForeground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,2+14));
if(zbnzw2 == 19)XSetBackground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,0));
if(zbnzw2 == 19)XSetForeground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,1+15));
if(zbnzw2 == 20)XSetBackground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,0));
if(zbnzw2 == 20)XSetForeground(lpp_dis,*wrgc2,
gcbw2(gsdepth2,14+2));
if(zbnzw2 == 0)XSetPlaneMask(lpp_dis,*wrgc2,gcbw2(gsdepth2,16));
if(zbnzw2 == 1)XSetPlaneMask(lpp_dis,*wrgc2,gcbw2(gsdepth2,16));
if(zbnzw2 == 17)XSetPlaneMask(lpp_dis,*wrgc2,gcbw2(gsdepth2,4));
if(zbnzw2 == 18)XSetPlaneMask(lpp_dis,*wrgc2,gcbw2(gsdepth2,2));
if(zbnzw2 == 19)XSetPlaneMask(lpp_dis,*wrgc2,gcbw2(gsdepth2,1));
if(zbnzw2 == 20)XSetPlaneMask(lpp_dis,*wrgc2,gcbw2(gsdepth2,14));
}
// end of getgc(Window,GC*,int);
Window makexw2(XSizeHints* sizehints2,XWMHints* wmhints2,
XClassHint* classhints2)
{
int sbmask2;
Window trix2;
trix2=XCreateSimpleWindow(lpp_dis,RootWindow(lpp_dis,scc_num),
0,0,buffonewid,buffonehgt,4,
BlackPixel(lpp_dis,scc_num),WhitePixel(lpp_dis,scc_num));
sizehints2 = XAllocSizeHints();
wmhints2 = XAllocWMHints();
classhints2 = XAllocClassHint();
(*(wmhints2)).initial_state=NormalState;
(*(wmhints2)).input = True;
(*(wmhints2)).icon_pixmap = 0;
(*(wmhints2)).flags = StateHint | InputHint ;
(*(classhints2)).res_name = 0;
(*(classhints2)).res_class = "nonwin";
(*(sizehints2)).flags = PPosition | PSize | PMinSize ;
(*(sizehints2)).min_width = 592;
(*(sizehints2)).min_height = 334;
sbmask2 = 0;
sbmask2 = sbmask2 | KeyPressMask;
sbmask2 = sbmask2 | KeyReleaseMask;
sbmask2 = sbmask2 | ExposureMask;
sbmask2 = sbmask2 | StructureNotifyMask;
// sbmask2 = sbmask2 | ButtonPressMask;
XSelectInput(lpp_dis,trix2,sbmask2);
return trix2;
}
// ------------- bottom of windowmake
// end of XWindows specific section
void bitwrt2(char* bde2,int ski2,int wwi2,int wx2,
int wy2,int zltr2,int wwvb2)
{
// *bde2 is target character array
// ski2 is byte offset to use to skip headers or zero
// wwi2 is width of first buffer is 640
// wx2 is x position accross
// wy2 is y displacement down
// zltr2 is zero for bitmaps one for XWindows buffers and planes
// wwvb2 is zero for anding out bit nonzero for orring bit
// wwvb2 is also called the DATA BIT
// usage bitwrt2(*buffer,0,640,x,y,1,data);
int wyprod2,wyfrac2,wyrem2,wvalue2;
// needs const int wporand2[] = {128,64 ...
const int wporand2[] = { 128,64,32,16,8,4,2,1,
1,2,4,8,16,32,64,128,
127,191,223,239,247,251,253,254,
254,253,251,247,239,223,191,127 };
// bitwrt2 is supposed to be faster than bitpoke.
wyprod2=(wwi2 * wy2)+(ski2 << 3)+wx2;
wyrem2 = wyprod2 & 7;
wyfrac2 = wyprod2 >> 3;
if((wyfrac2 >= 0)&&(wyfrac2 <= 38399))
{
wvalue2 = *(bde2 + wyfrac2);
if(wvalue2 < 0)wvalue2 = wvalue2 + 256;
if(wwvb2 == 0)
{
if(zltr2 == 0)wvalue2=wvalue2 & wporand2[wyrem2 + 16];
if(zltr2 != 0)wvalue2=wvalue2 & wporand2[wyrem2 + 24];
}
if(wwvb2 != 0)
{
if(zltr2 == 0)wvalue2=wvalue2 | wporand2[wyrem2];
if(zltr2 != 0)wvalue2=wvalue2 | wporand2[wyrem2 + 8];
}
if(wvalue2 > 127)wvalue2 = wvalue2 - 256;
*(bde2 + wyfrac2)=(char)wvalue2;
}
}
// bottom of bitwrt2
void zackptrget(char** zzacktarg,char* zackray,int yzackwhich)
{
*(zzacktarg + yzackwhich) = zackray;
}
void vga_init()
{
zackptrget(xwfiveplanes,zackpl0,0);
zackptrget(xwfiveplanes,zackpl1,1);
zackptrget(xwfiveplanes,zackpl2,2);
zackptrget(xwfiveplanes,zackpl3,3);
zackptrget(xwfiveplanes,zackpl4,4);
zackptrget(xwfiveplanes,zackpl5,5);
zackptrget(xwfiveplanes,zackpl6,6);
zackptrget(xwfiveplanes,zackpl7,7);
zackptrget(xwfiveplanes,zackpl8,8);
zackptrget(xwfiveplanes,zackpl9,9);
x1ktmany(xwkeytranz);
vgascrdepth=0;
acflipbay[0]='\0';
currentcolor=1;
while(currentcolor < 256)
{
acflipbay[currentcolor]=acrevbits("fast ","Zack",0,currentcolor);
currentcolor=currentcolor+1;
}
currentcolor=0;
buffonewid=624;
buffonehgt=420;
luffonewid=640;
vgaprezmode=0;
keyonetosix=0;
apaintscreen=0;
slatershift=0;
acuncram(sixkeyz,2,0);
acuncram(sixkeyz,0,0);
// didthistime=0;
}
int vga_getcurrentmode()
{
return vgaprezmode;
}
int vga_hasmode(int isvgahas)
{
int vgahasnz;
vgahasnz=0;
if(isvgahas == G640x480x2)vgahasnz=1;
if(isvgahas == G640x480x16)vgahasnz=1;
return vgahasnz;
}
void vga_setmode(int vgnextmode)
{
int vsmxxctr,vsmyyctr;
vgaprezmode=vgnextmode;
vgascrdepth=0;
if(vgaprezmode == G640x480x2)vgascrdepth=1;
if(vgaprezmode == G640x480x16)vgascrdepth=4;
vga_setcolor(0);
vsmyyctr=0;
while(vsmyyctr < 480)
{
vsmxxctr=0;
while(vsmxxctr < 640)
{
vga_drawpixel(vsmxxctr,vsmyyctr);
vsmxxctr=vsmxxctr+1;
}
vsmyyctr=vsmyyctr+1;
}
if(vgascrdepth == 0)
{
// need to shut down if vgascrdepth == 0
}
if(vgascrdepth > 0)
{
// need to open XWindow if vgascrdepth > 0
lpp_dis = XOpenDisplay(noslater);
scc_num = DefaultScreen(lpp_dis);
xwscrdepth = DefaultDepth(lpp_dis,scc_num);
jennifer = makexw2(slaterxsh,slaterxwmh,slaterxch);
XSetWMProperties(lpp_dis,jennifer,0,0,xwsixplanes,slaterargct,
slaterxsh,slaterxwmh,slaterxch);
getgc2(jennifer,&wgsmonogc,xwscrdepth,1+0);
getgc2(jennifer,&wgsbriigc,xwscrdepth,20);
getgc2(jennifer,&wgsredigc,xwscrdepth,19-2);
getgc2(jennifer,&wgsgrnigc,xwscrdepth,18);
getgc2(jennifer,&wgsbluigc,xwscrdepth,17+2);
XMapWindow(lpp_dis,jennifer);
}
apaintscreen=0;
}
int vga_getxdim()
{
int vgffonewid;
vgffonewid=buffonewid-8;
if(vgffonewid > 640)vgffonewid=640;
return vgffonewid;
}
int vga_getydim()
{
int vgffonehgt;
vgffonehgt=buffonehgt-40;
if(vgffonehgt > 480)vgffonehgt=480;
return vgffonehgt;
}
int vga_getkey()
{
int itiskey2,vgktinyh,vgkbigh,vgkv,vgkooc,vgkiic;
int vgktinyhs;
int vgkoisub,vgkosbud;
// if((apaintscreen != 0)&&(didthistime == 0))
if(apaintscreen != 0)
{
// need to paint screen here 559
// DISPLAY* lpp_dis;
// int scc_num;
// int xwscrdepth,vgascrdepth,currentcolor;
// int keyonetosix,apaintscreen,luffonewid;
// int buffonewid,buffonehgt,vgaprezmode;
// char** xwfiveplanes;
// 0 mono 5
// 1 2 3 4 colored 6 7 8 9
// ------------------------
// char sixkeyz[8];
vgkbigh=buffonewid;
// if(vgkbigh > 640)vgkbigh=640;
vgktinyh=(vgkbigh+7) >> 3;
vgkv=buffonehgt;
// if(vgkv > 480)vgkv=480;
vgkooc=0;
while(vgkooc < vgkv)
{
vgkiic=0;
while(vgkiic < vgktinyh)
{
vgkoisub=(vgktinyh * vgkooc)+vgkiic;
if((vgkoisub >= 0)&&(vgkoisub <= 59999))
{
if(vgascrdepth == 1)
{
*(*(xwfiveplanes + 5)+vgkoisub) = '\0';
}
if(vgascrdepth == 4)
{
*(*(xwfiveplanes + 6)+vgkoisub) = '\0';
*(*(xwfiveplanes + 7)+vgkoisub) = '\0';
*(*(xwfiveplanes + 8)+vgkoisub) = '\0';
*(*(xwfiveplanes + 9)+vgkoisub) = '\0';
}
}
vgkiic=vgkiic+1;
}
vgkooc=vgkooc+1;
}
vgkbigh=buffonewid;
vgktinyhs=(vgkbigh+7) >> 3;
if(vgkbigh > 640)vgkbigh=640;
vgktinyh=(vgkbigh+7) >> 3;
vgkv=buffonehgt;
if(vgkv > 480)vgkv=480;
rigmatarg=0;
if((vgktinyhs > 82)&&(buffonehgt > 496))
{
rigmaxdiff = (vgktinyhs - 80) >> 1;
rigmaydiff = ((buffonehgt - 480) >> 1) * vgktinyhs;
rigmatarg = rigmaxdiff + rigmaydiff;
}
vgkooc=0;
while(vgkooc < vgkv)
{
vgkiic=0;
while(vgkiic < vgktinyh)
{
vgkoisub=(vgktinyhs * vgkooc)+vgkiic+rigmatarg;
if((vgkoisub >= 0)&&(vgkoisub <= 59999))
{
vgkosbud=(80 * vgkooc)+vgkiic;
if((vgkosbud >= 0)&&(vgkosbud <= 38399))
{
if(vgascrdepth == 1)
{
*(*(xwfiveplanes+5)+vgkoisub)= *(*(xwfiveplanes+0)+vgkosbud);
}
if(vgascrdepth == 4)
{
*(*(xwfiveplanes+6)+vgkoisub)= *(*(xwfiveplanes+1)+vgkosbud);
*(*(xwfiveplanes+7)+vgkoisub)= *(*(xwfiveplanes+2)+vgkosbud);
*(*(xwfiveplanes+8)+vgkoisub)= *(*(xwfiveplanes+3)+vgkosbud);
*(*(xwfiveplanes+9)+vgkoisub)= *(*(xwfiveplanes+4)+vgkosbud);
}
}
}
vgkiic=vgkiic+1;
}
vgkooc=vgkooc+1;
}
// need to paint prepared pointers 626
if(vgascrdepth == 1)
{
wgsmonomap=XCreatePixmapFromBitmapData(lpp_dis,jennifer,
(*(xwfiveplanes+5)),buffonewid,buffonehgt,
gcbw2(xwscrdepth,15),gcbw2(xwscrdepth,0),xwscrdepth);
XCopyArea(lpp_dis,wgsmonomap,jennifer,wgsmonogc,0,0,
buffonewid,buffonehgt,0,0);
XFreePixmap(lpp_dis,wgsmonomap);
}
if(vgascrdepth == 4)
{
tennifer=XCreatePixmap(lpp_dis,jennifer,buffonewid,
buffonehgt,xwscrdepth);
wgsbriimap=XCreatePixmapFromBitmapData(lpp_dis,jennifer,
(*(xwfiveplanes+6)),buffonewid,buffonehgt,
gcbw2(xwscrdepth,15),gcbw2(xwscrdepth,0),xwscrdepth);
XCopyArea(lpp_dis,wgsbriimap,tennifer,wgsbriigc,0,0,
buffonewid,buffonehgt,0,0);
wgsredimap=XCreatePixmapFromBitmapData(lpp_dis,jennifer,
(*(xwfiveplanes+7)),buffonewid,buffonehgt,
gcbw2(xwscrdepth,15),gcbw2(xwscrdepth,12),xwscrdepth);
XCopyArea(lpp_dis,wgsredimap,tennifer,wgsredigc,0,0,
buffonewid,buffonehgt,0,0);
// need to finish last half 650
wgsgrnimap=XCreatePixmapFromBitmapData(lpp_dis,jennifer,
(*(xwfiveplanes+8)),buffonewid,buffonehgt,
gcbw2(xwscrdepth,15),gcbw2(xwscrdepth,12),xwscrdepth);
XCopyArea(lpp_dis,wgsgrnimap,tennifer,wgsgrnigc,0,0,
buffonewid,buffonehgt,0,0);
wgsbluimap=XCreatePixmapFromBitmapData(lpp_dis,jennifer,
(*(xwfiveplanes+9)),buffonewid,buffonehgt,
gcbw2(xwscrdepth,15),gcbw2(xwscrdepth,12),xwscrdepth);
XCopyArea(lpp_dis,wgsbluimap,tennifer,wgsbluigc,0,0,
buffonewid,buffonehgt,0,0);
XCopyArea(lpp_dis,tennifer,jennifer,wgsmonogc,0,0,
buffonewid,buffonehgt,0,0);
XFreePixmap(lpp_dis,wgsbluimap);
XFreePixmap(lpp_dis,wgsgrnimap);
XFreePixmap(lpp_dis,wgsredimap);
XFreePixmap(lpp_dis,wgsbriimap);
XFreePixmap(lpp_dis,tennifer);
}
apaintscreen=0;
// didthistime=16;
// end of repaint screen is next
}
// if((didthistime >= 1)&&(apaintscreen > 0))
// {
// didthistime=didthistime-1;
// }
itiskey2 = drawonekey(&keyonetosix,sixkeyz);
if(itiskey2 < 0)
{
// need to get new key from XWindows here
XNextEvent(lpp_dis,&screechevent);
if(screechevent.type == KeyRelease)
{
acwgnonshift=0;
if(screechevent.xkey.keycode != wgsla50)
{
acwgnonshift=acwgnonshift+1;
}
if(screechevent.xkey.keycode != wgsla62)
{
acwgnonshift=acwgnonshift+1;
}
if(acwgnonshift < 2)slatershift=0;
}
if(screechevent.type == KeyPress)
{
acwgnonshift=1;
if(screechevent.xkey.keycode == wgsla50)acwgnonshift=0;
if(screechevent.xkey.keycode == wgsla62)acwgnonshift=0;
if(acwgnonshift == 0)slatershift=1;
if(acwgnonshift == 1)
{
screechkey = screechevent.xkey.keycode;
ackbfill(sixkeyz,screechkey,slatershift,xwkeytranz);
keyonetosix=6;
}
}
if(screechevent.type == Expose)
{
if(screechevent.xexpose.count == 0)
{
apaintscreen=1;
}
}
if(screechevent.type == ConfigureNotify)
{
buffonewid = screechevent.xconfigure.width;
buffonehgt = screechevent.xconfigure.height;
apaintscreen = 1;
}
// ---------
itiskey2 = drawonekey(&keyonetosix,sixkeyz);
}
if(itiskey2 < 0)itiskey2 = 0;
return itiskey2;
}
void vga_setcolor(int vgtcolor)
{
currentcolor = vgtcolor;
}
void vga_drawpixel(int barnesgx,int barnesgy)
{
int barnescolor,barnesctr;
barnescolor = currentcolor;
if((barnesgx >= 0)&&(barnesgx <= 639))
{
if((barnesgy >= 0)&&(barnesgy <= 479))
{
if(vgascrdepth == 1)
{
bitwrt2(*(xwfiveplanes+0),0,luffonewid,
barnesgx,barnesgy,1,barnescolor);
}
if(vgascrdepth == 4)
{
barnesctr=1;
while(barnesctr <= 4)
{
bitwrt2(*(xwfiveplanes + barnesctr),0,luffonewid,
barnesgx,barnesgy,1,(barnescolor & 8));
barnescolor = barnescolor + barnescolor;
barnesctr = barnesctr + 1;
}
}
apaintscreen=1;
// didthistime=0;
}
}
}
void was_drawline(int dl260xs,int dl260ys,
int dl260xd,int dl260yd)
// Eric Matteson Math 260 draw line using
// minimization of pythagorean distance from
// moving point to destination
// 252 start at 5 clockwise
// 212 which 2 is closest to destination 3 ?
// 222
{
int dl260xv,dl260yv,dl268c;
int dl260xcmp[8];
int dl260ycmp[8];
int score260[8];
int minscore260;
int allow260;
int dl260tog;
dl260xv=dl260xs;
dl260yv=dl260ys;
dl260tog=1;
minscore260 = 68;
while(minscore260 >= 4)
{
minscore260 = 4333222;
// .....................
dl260xcmp[0]=dl260xv;
dl260ycmp[0]=dl260yv+1;
dl268c=(dl260xd - dl260xcmp[0])*(dl260xd - dl260xcmp[0]);
score260[0]=dl268c;
dl268c=(dl260yd - dl260ycmp[0])*(dl260yd - dl260ycmp[0]);
score260[0]=score260[0]+dl268c;
// ----- ------
// .....................
dl260xcmp[1]=dl260xv+1;
dl260ycmp[1]=dl260yv+1;
dl268c=(dl260xd - dl260xcmp[1])*(dl260xd - dl260xcmp[1]);
score260[1]=dl268c;
dl268c=(dl260yd - dl260ycmp[1])*(dl260yd - dl260ycmp[1]);
score260[1]=score260[1]+dl268c;
// ----- ------
// .....................
dl260xcmp[2]=dl260xv+1;
dl260ycmp[2]=dl260yv;
dl268c=(dl260xd - dl260xcmp[2])*(dl260xd - dl260xcmp[2]);
score260[2]=dl268c;
dl268c=(dl260yd - dl260ycmp[2])*(dl260yd - dl260ycmp[2]);
score260[2]=score260[2]+dl268c;
// ----- ------
// .....................
dl260xcmp[3]=dl260xv+1;
dl260ycmp[3]=dl260yv-1;
dl268c=(dl260xd - dl260xcmp[3])*(dl260xd - dl260xcmp[3]);
score260[3]=dl268c;
dl268c=(dl260yd - dl260ycmp[3])*(dl260yd - dl260ycmp[3]);
score260[3]=score260[3]+dl268c;
// ----- ------
// .....................
dl260xcmp[4]=dl260xv;
dl260ycmp[4]=dl260yv-1;
dl268c=(dl260xd - dl260xcmp[4])*(dl260xd - dl260xcmp[4]);
score260[4]=dl268c;
dl268c=(dl260yd - dl260ycmp[4])*(dl260yd - dl260ycmp[4]);
score260[4]=score260[4]+dl268c;
// ----- ------
// .....................
dl260xcmp[5]=dl260xv-1;
dl260ycmp[5]=dl260yv-1;
dl268c=(dl260xd - dl260xcmp[5])*(dl260xd - dl260xcmp[5]);
score260[5]=dl268c;
dl268c=(dl260yd - dl260ycmp[5])*(dl260yd - dl260ycmp[5]);
score260[5]=score260[5]+dl268c;
// ----- ------
// .....................
dl260xcmp[6]=dl260xv-1;
dl260ycmp[6]=dl260yv;
dl268c=(dl260xd - dl260xcmp[6])*(dl260xd - dl260xcmp[6]);
score260[6]=dl268c;
dl268c=(dl260yd - dl260ycmp[6])*(dl260yd - dl260ycmp[6]);
score260[6]=score260[6]+dl268c;
// ----- ------
// .....................
dl260xcmp[7]=dl260xv-1;
dl260ycmp[7]=dl260yv+1;
dl268c=(dl260xd - dl260xcmp[7])*(dl260xd - dl260xcmp[7]);
score260[7]=dl268c;
dl268c=(dl260yd - dl260ycmp[7])*(dl260yd - dl260ycmp[7]);
score260[7]=score260[7]+dl268c;
// ----- ------
dl268c=0;
while(dl268c < 8)
{
if(score260[dl268c] < minscore260)
{
minscore260=score260[dl268c];
}
dl268c=dl268c+1;
}
allow260=1;
if(dl260tog > 0)
{
dl268c=0;
while(allow260 > 0)
{
if(minscore260 == score260[dl268c])allow260 = 0;
if(allow260 > 0)
{
dl268c=dl268c+1;
if(dl268c > 6)allow260=0;
}
}
}
if(dl260tog == 0)
{
dl268c=7;
while(allow260 > 0)
{
if(minscore260 == score260[dl268c])allow260 = 0;
if(allow260 > 0)
{
dl268c=dl268c-1;
if(dl268c < 1)allow260=0;
}
}
}
dl260tog = 1 - dl260tog;
dl260xv=dl260xcmp[dl268c];
dl260yv=dl260ycmp[dl268c];
allow260=1;
if(dl260xv < 0)allow260=0;
if(dl260yv < 0)allow260=0;
if(dl260xv > 639)allow260=0;
if(dl260yv > 479)allow260=0;
if(allow260 > 0)
{
vga_drawpixel(dl260xv,dl260yv);
}
}
}
void vga_drawline(int dl261xs,int dl261ys,int dl261xd,
int dl261yd)
{
int dx972,dy972,minpluctr,ratio972;
int rx972,ry972,nondx972,nonpos972,xneg972;
int dractr972,ddy972,ddx972;
dx972=dl261xd-dl261xs;
dy972=dl261yd-dl261ys;
minpluctr=0;
rx972=dx972;
ry972=dy972;
if(dx972 < 0)
{
rx972=0-dx972;
minpluctr=minpluctr+1;
}
if(dy972 < 0)
{
ry972=0-dy972;
minpluctr=minpluctr+1;
}
ratio972=3734;
if(rx972 > 0)
{
ratio972=ry972/rx972;
}
nondx972=0;
nonpos972=0;
xneg972=0;
if(ratio972 > 1)nondx972=1;
if((minpluctr & 1) != 0)nonpos972=1;
if((dy972 < 0)&&(nondx972 == 1))xneg972=1;
dractr972=0;
if((dx972 < 0)&&(nondx972 == 0))xneg972=1;
// ----------------------------------------------- 1022
if((nondx972 == 0)&&(nonpos972 == 0)&&(xneg972 == 0))
{
while(dractr972 < rx972)
{
ddx972=dl261xs+dractr972;
ddy972=dl261ys+((dractr972 * ry972)/rx972);
vga_drawpixel(ddx972,ddy972);
dractr972 = dractr972 + 1;
}
}
// ----------------------------------------------------
if((nondx972 == 0)&&(nonpos972 == 0)&&(xneg972 == 1))
{
while(dractr972 < rx972)
{
ddx972=dl261xs-dractr972;
ddy972=dl261ys-((dractr972 * ry972)/rx972);
vga_drawpixel(ddx972,ddy972);
dractr972 = dractr972 + 1;
}
}
// ----------------------------------------------------
if((nondx972 == 0)&&(nonpos972 == 1)&&(xneg972 == 0))
{
while(dractr972 < rx972)
{
ddx972=dl261xs+dractr972;
ddy972=dl261ys-((dractr972 * ry972)/rx972);
vga_drawpixel(ddx972,ddy972);
dractr972 = dractr972 + 1;
}
}
// ----------------------------------------------------
if((nondx972 == 0)&&(nonpos972 == 1)&&(xneg972 == 1))
{
while(dractr972 < rx972)
{
ddx972=dl261xs-dractr972;
ddy972=dl261ys+((dractr972 * ry972)/rx972);
vga_drawpixel(ddx972,ddy972);
dractr972 = dractr972 + 1;
}
}
// ----------------------------------------------------
if((nondx972 == 1)&&(nonpos972 == 0)&&(xneg972 == 0))
{
while(dractr972 < ry972)
{
ddy972=dl261ys+dractr972;
ddx972=dl261xs+((dractr972 * rx972)/ry972);
vga_drawpixel(ddx972,ddy972);
dractr972 = dractr972 + 1;
}
}
// ----------------------------------------------------
if((nondx972 == 1)&&(nonpos972 == 0)&&(xneg972 == 1))
{
while(dractr972 < ry972)
{
ddy972=dl261ys-dractr972;
ddx972=dl261xs-((dractr972 * rx972)/ry972);
vga_drawpixel(ddx972,ddy972);
dractr972 = dractr972 + 1;
}
}
// ----------------------------------------------------
if((nondx972 == 1)&&(nonpos972 == 1)&&(xneg972 == 0))
{
while(dractr972 < ry972)
{
ddy972=dl261ys+dractr972;
ddx972=dl261xs-((dractr972 * rx972)/ry972);
vga_drawpixel(ddx972,ddy972);
dractr972 = dractr972 + 1;
}
}
// ----------------------------------------------------
if((nondx972 == 1)&&(nonpos972 == 1)&&(xneg972 == 1))
{
while(dractr972 < ry972)
{
ddy972=dl261ys-dractr972;
ddx972=dl261xs+((dractr972 * rx972)/ry972);
vga_drawpixel(ddx972,ddy972);
dractr972=dractr972+1;
}
}
// }
}
// end of vga_drawline 1114
void vga_drawscansegment(char* vgdsl2,int vgdsx2,int vgdsy2,
int vgdswid2)
{
// vgdswid2 is number of bytes.
// if vgascrdepth == 1 then eight pixels per byte
// if vgascrdepth == 4 then only one pixel per byte not two
int vgdso1,vgdsi1,vgdsc1,vgdsub1,vgdscsave;
vgdscsave = currentcolor;
vgdso1=0;
if(vgascrdepth == 1)
{
if(zeldline(vgdsx2,vgdsy2,luffonewid,vgdswid2,vgdsl2) != 0)
{
while(vgdso1 < vgdswid2)
{
vgdsc1 = (int)(*(vgdsl2 + vgdso1));
if(vgdsc1 < 0)vgdsc1 = vgdsc1 + 256;
vgdsi1 = 7;
while(vgdsi1 >= 0)
{
vgdsub1 = vgdsx2+(8 * vgdso1)+vgdsi1;
currentcolor = vgdsc1 & 1;
vga_drawpixel(vgdsub1,vgdsy2);
vgdsc1 = vgdsc1 >> 1;
vgdsi1 = vgdsi1 - 1;
}
vgdso1 = vgdso1 + 1;
}
}
}
if(vgascrdepth == 4)
{
while(vgdso1 < vgdswid2)
{
vgdsc1 = ((int)(*(vgdsl2 + vgdso1)) & 15);
vgdsub1 = vgdsx2 + vgdso1;
currentcolor = vgdsc1;
vga_drawpixel(vgdsub1,vgdsy2);
vgdso1 = vgdso1 + 1;
}
}
currentcolor = vgdscsave;
}
// end of vga_drawscanline
char acrevbits(char* acrbtab,char* acrbse,int acrbsi,int acrbzn)
{
char acrevres;
int acrevsub,acrevctr,acrevsr,acrevterm;
if(acrbzn == 0)
{
acrevsub=(int)(*(acrbse+acrbsi));
if(acrevsub < 0)acrevsub=acrevsub+256;
acrevres = *(acrbtab + acrevsub);
}
if(acrbzn > 0)
{
acrevctr=0;
acrevsub=0;
acrevsr=acrbzn;
while(acrevctr < 8)
{
acrevsub=acrevsub+acrevsub;
acrevterm = acrevsr & 1;
acrevsr = acrevsr >> 1;
acrevsub=acrevsub+acrevterm;
acrevctr=acrevctr+1;
}
if(acrevsub > 127)acrevsub=acrevsub-256;
acrevres=(char)acrevsub;
}
return acrevres;
}
// end of acrevbits;
int zeldline(int srbx,int srby,int rbwidlg,
int rbwidxx,char* zeldlsrc)
{
int zeldles,zeldlctr,rbwidtny,rbwidsub;
char* zeldltarg;
char zlrichard;
zeldles = rbwidlg & 7;
if(zeldles == 0)
{
zeldltarg = *(xwfiveplanes + 0);
rbwidtny=rbwidlg >> 3;
rbwidsub=(rbwidtny * srby)+(srbx >> 3);
zeldlctr=0;
while(zeldlctr < rbwidxx)
{
zlrichard=acrevbits(acflipbay,zeldlsrc,zeldlctr,0);
*(zeldltarg +(rbwidsub + zeldlctr))=zlrichard;
zeldlctr=zeldlctr+1;
}
apaintscreen=1;
}
return zeldles;
}
// bottom of zeldline
// zackvga.h replaces vga.h
// zackmain replaces main
// end of wgslater.c
/* after end of wgslater.c

0 new messages