LYMAN@IASSNS.BITNET (05/12/87)
If anyone is interested, here is the source (in C) for programs which
convert an Apple ][+ hi-res screen image (obtained via
BSAVE SCREEN,A$4000,L$2000) to SUN Microsystems raster format and
back. I do not assume that most of you out there have SUN's, but the
code should be easy to generalize, and contains an algorithm for going
from Apple layout to a more usual memory map.
The programs work strictly in Black & White (that's the only kind of
monitor I own) but are not hard to generalize. The application? I
wanted to be able to make pictures for my Apple on a much more
powerful machine.
/* apl2sun.c - filter for going from Apple II images to SUN raster format */
/* usage apl2sun < {apple file} > {SUN raster file (B&W)} */
/* cc -O apl2sun.c -o apl2sun -lpixrect */
#include<pixrect/pixrect_hs.h>
#include<stdio.h>
#define WIDTH 280
#define HEIGHT 192
#define DEPTH 1
#define BLACK 1
#define NBITS 8192
#define TRUE 1
main()
{
struct pixrect *cur_pixr;
short int array[NBITS];
register x=0,y=0,bit,i=0;
int row, col, index, pass;
while (EOF != (array[i++]=getchar()));
/* setup and clear pixrect */
cur_pixr = mem_create(WIDTH,HEIGHT,DEPTH);
/* graph points */
for (pass=0;pass<8;pass++) /* 8 banks of 1024 bytes */
{
for (row=0;row<24;row++) /* 24 rows (0,24...,1,25...) */
{
for (col=0;col<40;col++) /* 40 * 7 pixels accross page */
{
index = 1024*pass + 128*(row%8) + 40 * (row/8) + col;
y = row * 8 + pass;
for (bit=0;bit<7;bit++) /* 7 bits for each word */
{
x = col * 7 + bit;
if ((1 << bit) & array[index])
pr_put(cur_pixr,x,y,BLACK);
}
}
}
}
pr_dump(cur_pixr,stdout,NULL,RT_STANDARD,TRUE); /* dump image */
}
/* sun2apl.c - filter for going from Apple II images to SUN raster format */
/* usage sun2apl < {apple file} > {SUN raster file (B&W)} */
/* cc -O sun2apl.c -o sun2apl -lpixrect */
#include<pixrect/pixrect_hs.h>
#include<stdio.h>
#define WIDTH 280
#define HEIGHT 192
#define DEPTH 1
#define BLACK 1
#define NBITS 8192
#define TRUE 1
#define MASK 128
main()
{
struct pixrect *cur_pixr,*pr_load();
short int array[NBITS];
register x=0,y=0,bit,i=0;
int row, col, index, pass;
/* open raster file */
cur_pixr = pr_load(stdin,NULL);
if (cur_pixr == NULL)
{
printf("Unable to open raster file.\n");
exit(1);
}
/* graph points */
for (pass=0;pass<8;pass++) /* 8 banks of 1024 bytes */
{
for (row=0;row<24;row++) /* 24 rows (0,24...,1,25...) */
{
for (col=0;col<40;col++) /* 40 * 7 pixels accross page */
{
index = 1024*pass + 128*(row%8) + 40 * (row/8) + col;
y = row * 8 + pass;
for (bit=0;bit<7;bit++) /* 7 bits for each word */
{
x = col * 7 + bit;
if (pr_get(cur_pixr,x,y))
array[index] |= MASK + (1 << bit);
}
}
}
}
for (i=0;i<NBITS;i++) putchar(array[i]);
}