SOURCE: fatbit from THE STORE!
Lenny Tropiano
lenny at icus.UUCP
Fri Jul 15 22:21:09 AEST 1988
This has been talked about on the net for a few weeks. It was small
enough to just post...
--- cut here --- --- cut here --- --- cut here --- --- cut here ---
#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of shell archive."
# Contents: Makefile README array.c dobits.c grid.c main.c makecprog.c
# startup.c testit.c
# Wrapped by lenny at icus on Fri Jul 15 08:05:51 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Makefile' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Makefile'\"
else
echo shar: Extracting \"'Makefile'\" \(246 characters\)
sed "s/^X//" >'Makefile' <<'END_OF_FILE'
Xinclude $(MAKEINC)/Makepre.h
X
XOBJ=main.o grid.o startup.o dobits.o makecprog.o
X
Xall: $(OBJ)
X $(LD) $(LDFLAGS) $(SHAREDLIB) $(OBJ) -o fatbit
X
Xtestit: testit.o
X $(LD) $(LDFLAGS) $(SHAREDLIB) testit.o -o testit
X
Xinclude $(MAKEINC)/Makepost.h
X
X
X
END_OF_FILE
if test 246 -ne `wc -c <'Makefile'`; then
echo shar: \"'Makefile'\" unpacked with wrong size!
fi
# end of 'Makefile'
fi
if test -f 'README' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(1377 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
X
XWelcome to the fatbit editor .... a combination programming
X tool and programming example hacked together by Fred
X Hicinbothem in June of 1985.
X
XThe fatbit editor is used to create a static array which can
X be used in your C programs to incorporate pictures into
X your application. With some enhancement it could be
X used for font or icon creation as well.
X
XThe tool is used as follows:
X
X 1. execute fatbit
X 2. pick a grid size and use the mouse to light or
X erase pixels until you have a picture you like.
X 3. use the MAKE C-PROG labelled key to create a file
X in the current directory called array.c
X 4. exit fatbit
X 5. edit the array.c file to name the ARRAY whatever you
X please (for use in your program)
X 6. stick the array.c file into your application and use
X the data array as you please with wrastops or
X the like (note the file testit.c which is
X provided as an example)
X
XAs of this date I have not experimented with the use of fatbit
Xfor icon or font creation but the concepts are identical - maybe
Xsome energetic programmer will define some SLKs for MAKE ICON
Xor MAKE FONT.
X
XAlso, another enhancement would be to load existing "pictures"
Xinto the fatbit editor for modification.
X
XIn the meantime, if you have a development set, enjoy playing
Xwith it. If you don't, this is probably a fairly useless tool.
X
XQuestions, bugs, enhancements to mtuxn!4341fah
END_OF_FILE
if test 1377 -ne `wc -c <'README'`; then
echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'array.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'array.c'\"
else
echo shar: Extracting \"'array.c'\" \(657 characters\)
sed "s/^X//" >'array.c' <<'END_OF_FILE'
X/* array ARRAY contains a picture 48 pixels wide and 19 pixels high.
X for wrastop calls use srcwidth = 6, width = 48, and height = 19. */
Xstatic unsigned short ARRAY[57] = {
X 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x1000,
X 0x0000, 0xfffc, 0x3fff, 0x0000, 0xfffc, 0x3fff, 0x0000, 0x1800,
X 0x1000, 0x0000, 0x1800, 0x0800, 0x0000, 0x1800, 0x0000, 0x0004,
X 0x1800, 0x0000, 0x0008, 0x9800, 0xfde7, 0x001f, 0x9800, 0x2024,
X 0x0008, 0x9800, 0x2024, 0x0004, 0x9800, 0x21e7, 0x0000, 0x9800,
X 0x2100, 0x0000, 0x9800, 0x2100, 0x0000, 0x9800, 0x210f, 0x0000,
X 0x0000, 0x0100, 0x0000, 0xfff8, 0x01ff, 0x0000, 0x0000, 0x0000,
X 0x0000 };
END_OF_FILE
if test 657 -ne `wc -c <'array.c'`; then
echo shar: \"'array.c'\" unpacked with wrong size!
fi
# end of 'array.c'
fi
if test -f 'dobits.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'dobits.c'\"
else
echo shar: Extracting \"'dobits.c'\" \(922 characters\)
sed "s/^X//" >'dobits.c' <<'END_OF_FILE'
X#include <tam.h>
X#include <sys/mouse.h>
Xextern unsigned short patblack[];
Xextern unsigned short patwhite[];
Xextern int wp;
Xstruct umdata um;
Xextern int OFFSET,HORBITS,VERBITS,ROWS,COLMS;
Xdobits(wn,button,x,y)
Xint wn,button,x,y;
X
X{
Xunsigned short *pattern;
Xint flags;
Xint xnew,ynew;
Xint xras,yras;
X
Xif(button==MBUTM) pattern=patblack;
Xelse pattern=patwhite;
X
Xxras=x/HORBITS;
Xxnew=xras*HORBITS+1;
Xyras=y/VERBITS;
Xynew=yras*VERBITS+1;
X
Xif(button)
X{
Xwrastop(wn,0,0,0,0,0,0,xnew,ynew,HORBITS-1,VERBITS-1,SRCPAT,DSTSRC,pattern);
X/* change the pixel in the real image in upper left */
Xwrastop(wp,0,0,0,0,0,0,xras,yras,1,1,SRCPAT,DSTSRC,pattern);
X
X}
X
X
X
Xif(button) flags=MSDOWN|MSUP|MSOUT;
X else flags=MSDOWN;
X resetmouse(wn,xnew,ynew,flags);
X
X}
Xresetmouse(wn,xnew,ynew,flags)
Xint wn,xnew,ynew,flags;
X{
X um.um_flags = flags;
X um.um_x = xnew;
X um.um_y = ynew;
X um.um_w = HORBITS;
X um.um_h = VERBITS;
X wsetmouse (wn, &um);
X}
END_OF_FILE
if test 922 -ne `wc -c <'dobits.c'`; then
echo shar: \"'dobits.c'\" unpacked with wrong size!
fi
# end of 'dobits.c'
fi
if test -f 'grid.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'grid.c'\"
else
echo shar: Extracting \"'grid.c'\" \(559 characters\)
sed "s/^X//" >'grid.c' <<'END_OF_FILE'
X#include <tam.h>
Xint OFFSET,HORBITS,VERBITS,ROWS,COLMS;
Xextern unsigned short patblack[];
Xextern unsigned short patwhite[];
Xextern int box;
Xgrid(wn)
Xint wn;
X{
X register int i;
X unsigned short *pattern;
X pattern = patwhite;
X for ( i=0;i<=COLMS;i++)
X wrastop(wn,0,0,0,0,(HORBITS*i)+OFFSET,1,(HORBITS*i)+OFFSET,1,1,(VERBITS*ROWS)-1,SRCPAT,DSTSRC,pattern);
X for ( i=0;i<=ROWS;i++)
X wrastop(wn,0,0,0,0,OFFSET+1,(VERBITS*i),OFFSET+1,(VERBITS*i),(HORBITS*COLMS)-1,1,SRCPAT,DSTSRC,pattern);
X
X wprompt(wn,"Left or Right button fills in, middle button erases");
X
X}
END_OF_FILE
if test 559 -ne `wc -c <'grid.c'`; then
echo shar: \"'grid.c'\" unpacked with wrong size!
fi
# end of 'grid.c'
fi
if test -f 'main.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'main.c'\"
else
echo shar: Extracting \"'main.c'\" \(905 characters\)
sed "s/^X//" >'main.c' <<'END_OF_FILE'
X#include <tam.h>
X
Xextern int wp;
Xint OFFSET,HORBITS,VERBITS,ROWS,COLMS;
Xchar gridon=0;
Xextern unsigned short patblack[];
X
X
Xmain(argc,argv)
Xint argc;
Xchar *argv[];
X{
X int wn;
X
X int key;
X int mousex, mousey, mouseb, mouser;
X int mouse;
X
Xwn=startup();
X
X
Xwhile (1) {
Xkey = wgetc(wn);
X
Xswitch(key) {
Xcase Mouse:
X wreadmouse(wn,&mousex,&mousey,&mouseb,&mouser);
X if(gridon)
X { mouse=1; dobits(wn,mouseb,mousex,mousey); }
X break;
Xcase F1:
X HORBITS=9; COLMS=54;
X VERBITS=6; ROWS=40;
X clearit(wn,wp);
X grid(wn);
X gridon=1;
X break;
Xcase F2:
X makecprog(wn);
X break;
Xcase F7:
X clearit(wn,wp);
X gridon=0;
X break;
Xcase F8:
X HORBITS=3; COLMS=162;
X VERBITS=3; ROWS=80;
X clearit(wn,wp);
X grid(wn);
X gridon=1;
X break;
Xcase Exit:
X exit(0);
X }
X}
X}
X
Xclearit(wn,wp)
Xint wn,wp;
X{
X wrastop(wp,0,0,0,0,0,0,0,0,162,84,SRCPAT,DSTSRC,patblack);
X wrastop(wn,0,0,0,0,0,0,0,0,486,240,SRCPAT,DSTSRC,patblack);
X}
END_OF_FILE
if test 905 -ne `wc -c <'main.c'`; then
echo shar: \"'main.c'\" unpacked with wrong size!
fi
# end of 'main.c'
fi
if test -f 'makecprog.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'makecprog.c'\"
else
echo shar: Extracting \"'makecprog.c'\" \(2407 characters\)
sed "s/^X//" >'makecprog.c' <<'END_OF_FILE'
X#include <kcodes.h>
X#include <tam.h>
Xextern int OFFSET,HORBITS,VERBITS,ROWS,COLMS;
Xextern unsigned short patwhite[];
Xextern int wp;
Xmakecprog(wn)
Xint wn;
X{
X char *filename;
X unsigned short ARRAY[960];
X int mousex, mousey, mouseb, mouser;
X int xfirst, yfirst, xnew, ynew;
X int xsecond, ysecond;
X int lim;
X int ii,jj;
X char *fd, *fopen();
X int shorts,width,height;
X int key;
X
Xwprompt(wn,"Use left mouse key to highlight upper left pixel of array.");
X
X while (1) {
X key = wgetc(wn);
X
X switch(key) {
X case Mouse:
X wreadmouse(wn,&mousex,&mousey,&mouseb,&mouser);
X goto program1;
X case Cancl:
X case Exit:
X return(0);
X default:
X break;
X }
X }
X
X
Xprogram1:
X
Xxfirst=mousex/HORBITS;
Xyfirst=mousey/VERBITS;
X
Xxnew=xfirst*HORBITS+1;
Xynew=yfirst*VERBITS+1;
X
Xwrastop(wn,0,0,0,0,0,0,xnew,ynew,HORBITS-1,VERBITS-1,SRCPAT,DSTSRC,patwhite);
X
X
Xwprompt(wn,"Use left mouse key to highlight lower right pixel of array.");
X
X while (1) {
X key = wgetc(wn);
X
X switch(key) {
X case Mouse:
X wreadmouse(wn,&mousex,&mousey,&mouseb,&mouser);
X goto program2;
X case Cancl:
X case Exit:
X return(0);
X default:
X break;
X }
X }
X
Xprogram2:
X
Xxsecond=mousex/HORBITS;
Xysecond=mousey/VERBITS;
Xxnew=xsecond*HORBITS+1;
Xynew=ysecond*VERBITS+1;
X
Xwrastop(wn,0,0,0,0,0,0,xnew,ynew,HORBITS-1,VERBITS-1,SRCPAT,DSTSRC,patwhite);
X
X/* we now have the upper left and lower right corners - since the array
X must be 16*N pixels (bits) wide - we compute that */
X
Xshorts=(xsecond-xfirst)/16 + 1; /* number of shorts wide */
Xwidth=shorts*16;
Xheight=ysecond-yfirst+1;
X
X
X/* put the chosen segment into the ARRAY array */
X
Xwrastop(wp,0,0,ARRAY,shorts*2,xfirst,yfirst,0,0,width,height,SRCSRC,DSTSRC,0);
X
X
Xwprompt(wn,"");
X
X/* open the file and stick the program in there */
X
Xfilename="array.c";
Xfd=fopen(filename,"a");
Xfprintf(fd,"/* array ARRAY contains a picture %d pixels wide and %d pixels high.\n for wrastop calls use srcwidth = %d, width = %d, and height = %d. */\n",width,height,shorts*2,width,height);
Xfprintf(fd,"static unsigned short ARRAY[%d] = { \n",height*shorts);
Xfor (ii=0;ii<height;ii++)
X{
X for(jj=0;jj<shorts;jj++)
X {
X lim=ii*shorts+jj;
X
X if(lim<height*shorts-1)
X fprintf(fd," 0x%04x,",ARRAY[lim]);
X else fprintf(fd," 0x%04x ",ARRAY[lim]);
X if((ii*shorts+jj+1)%8 == 0)
X fprintf(fd," \n");
X }
X}
Xfprintf(fd," };\n");
Xfclose(fd);
Xwprompt(wn,"Left or Right button fills in, middle button erases");
X}
END_OF_FILE
if test 2407 -ne `wc -c <'makecprog.c'`; then
echo shar: \"'makecprog.c'\" unpacked with wrong size!
fi
# end of 'makecprog.c'
fi
if test -f 'startup.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'startup.c'\"
else
echo shar: Extracting \"'startup.c'\" \(1156 characters\)
sed "s/^X//" >'startup.c' <<'END_OF_FILE'
X#include <tam.h>
Xstruct umdata um;
Xint wp;
Xstartup()
X{
X int wn;
X int i;
X struct uwdata uw;
X
X /* Make sure we're on a bitmap display! */
X if ( ioctl(1,WIOCGETD, &uw) != 0 ) {
X fprintf(2,"You must run the fatbit artist on a bitmap display\n");
X exit(1);
X }
X /* Dump stdin, stdout, stderr, open a new window, dup to all three. */
X close(0);
X close(1);
X close(2);
X wn = open("/dev/window",2);
X dup(wn); /* dup to 1 */
X dup(wn); /* dup to 2 */
X winit();
X keypad(0,1);
X wn = wcreate(1,0,20,54,BORDCANCEL);
X wp = wcreate(14,58,7,18,BORDCANCEL);
X wselect(wn);
X wputs(wp,"\033[2J\033[=1C");
X wputs(wn,"\033[2J\033[=1C");
X wlabel(wn,"Experimental Fatbit Artist");
X wuser(wn,"Fatbit Artist");
X wprompt(wn,"Choose an action from among the function keys .....");
X wuser(wp,"Fatbit Image");
X wlabel(wp,"Real Image");
X wprompt(wp,"THIS IS THE ACTUAL IMAGE ");
X um.um_flags = MSDOWN;
X um.um_x = 0;
X um.um_y = 0;
X um.um_w = 1;
X um.um_h = 1;
X wsetmouse (wn, &um);
X
X
X wslk(wn,0," 48x40 MAKE CLEAR 160x80 " ," GRID C-CODE GRID GRID ",0);
X return(wn);
X}
X
END_OF_FILE
if test 1156 -ne `wc -c <'startup.c'`; then
echo shar: \"'startup.c'\" unpacked with wrong size!
fi
# end of 'startup.c'
fi
if test -f 'testit.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'testit.c'\"
else
echo shar: Extracting \"'testit.c'\" \(1107 characters\)
sed "s/^X//" >'testit.c' <<'END_OF_FILE'
X/* array ARRAY contains a picture 48 pixels wide and 19 pixels high.
X for wrastop calls use srcwidth = 6, width = 48, and height = 19. */
Xstatic unsigned short ARRAY[57] = {
X 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x0000, 0x0000, 0x1000,
X 0x0000, 0xfffc, 0x3fff, 0x0000, 0xfffc, 0x3fff, 0x0000, 0x1800,
X 0x1000, 0x0000, 0x1800, 0x0800, 0x0000, 0x1800, 0x0000, 0x0004,
X 0x1800, 0x0000, 0x0008, 0x9800, 0xfde7, 0x001f, 0x9800, 0x2024,
X 0x0008, 0x9800, 0x2024, 0x0004, 0x9800, 0x21e7, 0x0000, 0x9800,
X 0x2100, 0x0000, 0x9800, 0x2100, 0x0000, 0x9800, 0x210f, 0x0000,
X 0x0000, 0x0100, 0x0000, 0xfff8, 0x01ff, 0x0000, 0x0000, 0x0000,
X 0x0000 };
X
X
X#include <tam.h>
X
Xmain()
X{
X
Xint srcwidth,width,height,wn;
Xint i;
X
X/* The following parameters depend on the size of ARRAY */
Xsrcwidth=6; width=48; height=19;
X
X
X/*
Xclose(0);close(1);close(2);
Xwn=open("/dev/window",2);
Xdup(wn);dup(wn);
X*/
Xwinit();
Xwn=wcreate(10,10,12,50,0);
Xfor (i=0;i<height*width/16;i++)
X wprintf(wn," ARRAY[%d]=%d\n",i,ARRAY[i]);
X
X
X
Xwrastop(wn,ARRAY,srcwidth,0,0,0,0,0,0,width,height,SRCSRC,DSTSRC,0);
X
Xsleep(10);
Xwexit();
X
X}
END_OF_FILE
if test 1107 -ne `wc -c <'testit.c'`; then
echo shar: \"'testit.c'\" unpacked with wrong size!
fi
# end of 'testit.c'
fi
echo shar: End of shell archive.
exit 0
--
Paper-net: Lenny Tropiano | @-net: lenny at icus.UUCP
ICUS Software Systems | !-net: ...att \
PO Box 1 | boulder \
Islip Terrace, NY 11752 | talcott !icus!lenny
Vocal-net: (516) 582-5525 [work] | pacbell /
(516) 968-8576 [home] | sbcs /
Telex-net: 154232428 ICUS | Another-net: attmail!icus!lenny
More information about the Unix-pc.sources
mailing list