Initial. Don't... just don't ask.
This commit is contained in:
commit
00bae13bba
586 changed files with 129057 additions and 0 deletions
132
demos/lineart.c
Normal file
132
demos/lineart.c
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
/* A program to test any mode for linear. Default mode is G640x480x256 = 10
|
||||
** or parameters may be used giving modes as integers.
|
||||
** linp [mode mode ...]
|
||||
** Don Secrest Oct. 1998
|
||||
*/
|
||||
|
||||
#include <vga.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <ctype.h>
|
||||
|
||||
static void screen(int mode)
|
||||
{
|
||||
int bpp,bott,endp,linlen,i,j,bii,col,p;
|
||||
vga_modeinfo *minf;
|
||||
unsigned char *vbuf;
|
||||
int mem;
|
||||
|
||||
if(mode == 0)
|
||||
{
|
||||
printf("Usage:lineart [mode mode ...]\n\nwhere mode is an integer.\n");
|
||||
return;
|
||||
}
|
||||
if(! vga_hasmode(mode)) {
|
||||
printf("Invalid mode %d\n",mode);
|
||||
return;
|
||||
}
|
||||
vga_setmode(mode);
|
||||
minf = vga_getmodeinfo(mode);
|
||||
if(! (minf->flags & CAPABLE_LINEAR)){
|
||||
vga_setmode(TEXT);
|
||||
printf("The mode %d is not capable of linear\n",mode);
|
||||
return;
|
||||
}
|
||||
vga_setpage(0);
|
||||
if(vga_setlinearaddressing() == -1) {
|
||||
vga_setmode(TEXT);
|
||||
printf("Could not set linear addressing for mode %d\n",mode);
|
||||
return;
|
||||
}
|
||||
bpp = minf->bytesperpixel;
|
||||
linlen = minf->width*bpp;
|
||||
bott = linlen*17; /* pointer 17 pixels wide. */
|
||||
endp = linlen*minf->height;
|
||||
mem = minf->linewidth*minf->height;
|
||||
|
||||
/* Do random pixels */
|
||||
vbuf = vga_getgraphmem();
|
||||
printf("Memory mapped to %08x. Mode = %d.\n",(int) vbuf,mode);
|
||||
memset(vbuf,0,mem); /* Clear out 2 megabytes of memory, */
|
||||
for(i = 0;i < 100000;i++)
|
||||
{
|
||||
p = rand() % mem-2;
|
||||
*(vbuf + p) = rand() & 0xff;
|
||||
if(bpp > 1)
|
||||
*(vbuf + p + 1) = rand() & 0xff;
|
||||
if(bpp == 3)
|
||||
*(vbuf + p + 2) = rand() & 0xff;
|
||||
}
|
||||
|
||||
/* Place marker at top left and bottem right. */
|
||||
for(i = 0;i < 44;i += bpp) {
|
||||
*(vbuf + i) = 0x60;
|
||||
*(vbuf + bott + i) = 0x60;
|
||||
*(vbuf + endp - i) = 0x60;
|
||||
bii = endp -1 -bott;
|
||||
*(vbuf + bii -i) = 0x60;
|
||||
if(bpp > 1) {
|
||||
*(vbuf + i + 1) = 0x60;
|
||||
*(vbuf + i + 1 + bott) = 0x60;
|
||||
*(vbuf - i - 1 + endp) = 0x60;
|
||||
*(vbuf - i - 1 + bii) = 0x60;
|
||||
}
|
||||
if(bpp == 3) {
|
||||
*(vbuf + i + 2) = 0x60;
|
||||
*(vbuf + i + 2 + bott) = 0x60;
|
||||
*(vbuf - i - 2 + endp) = 0x60;
|
||||
*(vbuf - i - 2 + bii) = 0x60;
|
||||
}
|
||||
col = (i == 0 || i >= 42)? 0x60:0;
|
||||
for(j = 1;j < 17;j++) {
|
||||
*(vbuf + i + linlen*j) = col;
|
||||
*(vbuf - i + endp -1 - linlen*j) = col;
|
||||
if(bpp > 1) {
|
||||
*(vbuf + i + 1 + linlen*j) = col;
|
||||
*(vbuf - i - 2 + endp - linlen*j) = col;
|
||||
}
|
||||
if(bpp == 3) {
|
||||
*(vbuf + i + 2 + linlen*j) = col;
|
||||
*(vbuf - i - 3 + endp - linlen*j) = col;
|
||||
}
|
||||
}
|
||||
}
|
||||
for(i = 5;i < 12;i += bpp)
|
||||
for(j = 4;j < 12;j++) {
|
||||
*(vbuf + i + linlen*j) = 0x3f;
|
||||
*(vbuf + endp - i - bpp - linlen*j) = 0x3f;
|
||||
}
|
||||
getchar(); /* Wait for a key punch */
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc,char *argv[])
|
||||
{
|
||||
int mode,c;
|
||||
|
||||
vga_init();
|
||||
c=1;
|
||||
if(argc == 1)
|
||||
screen(10); /* G640x480x256 */
|
||||
else
|
||||
c = 0;
|
||||
while(argc > 1)
|
||||
{
|
||||
argc--;
|
||||
c++;
|
||||
if(isdigit(*argv[c]))
|
||||
mode = atoi(argv[c]);
|
||||
else if(*argv[c] == 'G')
|
||||
mode = vga_getmodenumber(argv[c]);
|
||||
else
|
||||
{
|
||||
printf("Unknown mode %s\n",argv[c]);
|
||||
continue;
|
||||
}
|
||||
screen(mode);
|
||||
}
|
||||
vga_setmode(TEXT);
|
||||
return 0;
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue