home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 229.lha / smear2.c < prev    next >
C/C++ Source or Header  |  1989-04-07  |  6KB  |  221 lines

  1. /* SMEAR2.c    (P) Public Domain
  2.  * 28-Jan-1989
  3.  * Joe Porkka
  4.  * jap@syssun.cl.msu.edu
  5. */
  6.  
  7. /* This is a little WorkBench hack I came up with.
  8.  * enjoy.
  9.  * Compiles with Lattice 3.10
  10.  * For help, type 'smear2 help'
  11. */
  12.  
  13. #include <stdlib.h>
  14. #include <intuition/intuition.h>
  15.  
  16. long GfxBase=0,IntuitionBase=0;
  17.  
  18. struct NewWindow nw={
  19.     0,0,1,1,1,1,0,SIMPLE_REFRESH,0,0,"",0,0,1,1,1,1,WBENCHSCREEN};
  20. struct Window *win,*OpenWindow();
  21.  
  22. struct NewScreen ns={
  23.     0,0,640,-1,2,
  24.     -1,-1,
  25.     HIRES,
  26.     CUSTOMSCREEN|SCREENBEHIND|SCREENQUIET,
  27.     0,
  28.     0,
  29.     0,
  30.     0
  31. };
  32.  
  33. struct Screen *scr,*OpenScreen();
  34. struct RastPort *myrp,*wrp;
  35. struct BitMap *mybits,*wbits;
  36. int minterm,delay,multiminterm,nodiag;
  37.  
  38. #define NTERMS 6
  39. int terms[NTERMS]={0x22,0xcc,0x33,0x88,0x44,0xee};
  40.  
  41. /* This is to remove the program
  42.  * it works even if the program aborts before finishing setup stuff.
  43. */
  44. vanish(){
  45.     if(win) CloseWindow(win);
  46.     if(scr) CloseScreen(scr);
  47.     if(GfxBase)CloseLibrary(GfxBase);
  48.     if(IntuitionBase)CloseLibrary(IntuitionBase);
  49.     exit(1);
  50. }
  51.  
  52. main(ac,av) int ac; char **av; {
  53.  
  54.     int len,a,b,err=0;
  55.  
  56.     win=0;scr=0;GfxBase=IntuitionBase=0;
  57.     a=1;ac--;
  58.     delay=0;
  59.     minterm=0x00;
  60.     multiminterm=0;
  61.     nodiag=0;
  62. /* Im sure this arg parsing could be done better, but I just hacked it
  63.  * out in five minutes
  64. */
  65.     while(ac>0) {
  66.         if(stricmp(av[a],"?")==0) {
  67.             printf("%s HELP,MINTERM,DELAY,NODIAG/S\n",av[0]);
  68.             exit(0);
  69.         }
  70.         if(stricmp(av[a],"HELP")==0) {
  71.             printf("\tHELP          Gets help\n");
  72.             printf("\t   with no args, the program picks randomly which minterm\n\t to use for each block move\n");
  73.             printf("\tMINTERM xx    specify a minterm to use (Hexidecimal)\n");
  74.             printf("\t              Try using `cc' for the minterm\n");
  75.             printf("\tDELAY nn      slow down the operations; large nn is slow\n");
  76.             printf("\tNODIAG        prevents diagonal block movements\n");
  77.             printf("\t CTRL-C to exit\n");
  78.             printf("\n");
  79.             exit(0);
  80.         }
  81.         if(stricmp(av[a],"MINTERM")==0) {
  82.             a++;ac--;
  83.             if(ac && minterm==0) {
  84.                 sscanf(av[a],"%x",&minterm);
  85.                 if(minterm<=0 || minterm>255) {
  86.                     err=1;
  87.                     break;
  88.                 }
  89.             } else {
  90.                 err=1;
  91.                 break;
  92.             }
  93.         } else if(stricmp(av[a],"DELAY")==0) {
  94.             a++;ac--;
  95.             if(ac && delay==0) {
  96.                 sscanf(av[a],"%d",&delay);
  97.                 if(delay<=0)  {
  98.                     err=1;
  99.                     break;
  100.                 }
  101.             } else {
  102.                 err=1;
  103.                 break;
  104.             }
  105.         } else if(stricmp(av[a],"NODIAG")==0) {
  106.             nodiag=1;
  107.         } else if(minterm==0) {
  108.             sscanf(av[a],"%x",&minterm);
  109.             if(minterm<=0 || minterm>255) {
  110.                 err=1;
  111.                 break;
  112.             }
  113.         } else if(delay==0) {
  114.             sscanf(av[a],"%d",&delay);
  115.             if(delay<=0)  {
  116.                 err=1;
  117.                 break;
  118.             }
  119.         } else {err=1;break;}
  120.         a++;ac--;
  121.     }
  122.     if(err) {
  123.         printf("Bad args. Use `%s ?' for help\n",av[0]);
  124.         exit(15);
  125.     }
  126.     if(delay<0) delay=0;
  127.     if(minterm==0) multiminterm=1;
  128.     printf("Minterm=0x%X  delay=%d \n",minterm,delay);
  129.  
  130.     printf("Smear 2.0 January 89 by  Joe Porkka (PUBLIC DOMAIN)\n");
  131.  
  132.     onbreak(vanish);
  133.     IntuitionBase=OpenLibrary("intuition.library",30);
  134.     if(IntuitionBase==0) {
  135.         printf("No intuition!\n");
  136.         exit(15);
  137.     }
  138.     GfxBase=OpenLibrary("graphics.library",30);
  139.     if(GfxBase==0) {
  140.         printf("No graphics system.\n");
  141.         CloseLibrary(IntuitionBase);
  142.         exit(15);
  143.     }
  144.     win=OpenWindow(&nw);
  145.     scr=OpenScreen(&ns);
  146.     if (scr==0||win==0) {
  147.         printf("Out Of MEMORY!.\n");
  148.         vanish();
  149.     }
  150.     myrp=&scr->RastPort;
  151.     wrp=win->RPort;
  152.     mybits=myrp->BitMap;
  153.     wbits=wrp->BitMap;
  154.  
  155.     CloseWindow(win);
  156.     win=0;
  157.     len=640*200/8/4; /* size of a bitplane in longwords */
  158.     BltBitMap(wbits,0,0,mybits,0,0,640,200,0xC0,3,0);
  159. /*
  160.     copyit(wbits->Planes[0],mybits->Planes[0],len);
  161.     copyit(wbits->Planes[1],mybits->Planes[1],len);
  162.  */
  163.     ScreenToFront(scr);
  164.     smear();
  165.     vanish();
  166. }
  167.  
  168. smear() {
  169.     int d,x,y,lx,ly;
  170.     int q,w,dirs;
  171.     char *a;
  172.  
  173.     a=malloc(100);
  174.  
  175.     if(nodiag) dirs=4; else dirs=8;
  176.     do {
  177.         if(delay) Delay(delay);
  178.         d=rand()%dirs;
  179.         x=rand()%639;
  180.         y=rand()%199;
  181.         q=639-x;w=199-y;
  182.         if(q>200) q=200;
  183.         if(w>100) w=100;
  184.         lx=rand()%q;
  185.         ly=rand()%w;
  186.  
  187.         if(lx==0 || ly==0) continue;
  188.         if(multiminterm) {
  189.             minterm=terms[rand()%NTERMS];
  190.         }
  191.         switch(d) {
  192.             case 0: /* left one bit */
  193.                 BltBitMap(mybits,x+1,y,mybits,x,y,lx,ly,minterm,3,a);
  194.                 break;
  195.             case 1: /* right one bit */
  196.                 BltBitMap(mybits,x,y,mybits,x+1,y,lx,ly,minterm,3,a);
  197.                 break;
  198.             case 2: /* up one bit */
  199.                 BltBitMap(mybits,x,y+1,mybits,x,y,lx,ly,minterm,3,a);
  200.                 break;
  201.             case 3: /* down one bit */
  202.                 BltBitMap(mybits,x,y,mybits,x,y+1,lx,ly,minterm,3,a);
  203.                 break;
  204.  
  205.             case 4: /* left,up one bit */
  206.                 BltBitMap(mybits,x+1,y+1,mybits,x,y,lx,ly,minterm,3,a);
  207.                 break;
  208.             case 5: /* right,down one bit */
  209.                 BltBitMap(mybits,x,y,mybits,x+1,y+1,lx,ly,minterm,3,a);
  210.                 break;
  211.             case 6: /* right,up one bit */
  212.                 BltBitMap(mybits,x,y+1,mybits,x+1,y,lx,ly,minterm,3,a);
  213.                 break;
  214.             case 7: /* left,down one bit */
  215.                 BltBitMap(mybits,x+1,y,mybits,x,y+1,lx,ly,minterm,3,a);
  216.                 break;
  217.         }
  218.         chkabort();
  219.     } while(1);
  220. }
  221.