#define __USE_SYSBASE 1 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct Library *BlitzBlankBase; static const char version[]="$VER: BB.Lines 2.60 (22.04.95)"; char *text[]={"\33c\33uLines\33n\n\nModule for BlitzBlank\n\nCopyright 1995\nby\nThomas Börkel", "_Lines:", "_Delay:"}; struct BB_Object object[]={ {&object[1],BB_VGroup,0,0,0,NULL,NULL}, {&object[2],BB_Slider,5,200,50,NULL,NULL}, {&object[3],BB_Slider,0,500,0,NULL,NULL}, {NULL ,BB_VGroup_End,0,0,0,NULL,NULL} }; struct line { int x1; int y1; int x2; int y2; int c; }; struct BB_Message message; struct BB_Screeninfo *screeninfo; struct RastPort *rp; struct line *li; int dx1,dy1,dx2,dy2; struct timerequest* inittimer (struct MsgPort *timerport) { struct timerequest *timerio; if ((timerio=CreateIORequest (timerport,sizeof (struct timerequest)))) if (!(OpenDevice ("timer.device",UNIT_MICROHZ,(struct IORequest *) timerio,0))) timerio->tr_node.io_Command=TR_ADDREQUEST; return (timerio); } void waittimer (struct timerequest *timerio,int sec,int mic) { if (timerio) { timerio->tr_time.tv_secs=sec; timerio->tr_time.tv_micro=mic; DoIO ((struct IORequest *) timerio); } return; } /* may only be called, if starttimer() was called before */ void stoptimer (struct timerequest *timerio) { if (timerio) { AbortIO ((struct IORequest *) timerio); WaitIO ((struct IORequest * ) timerio); } return; } /* may only be called, if no timerequest is pending */ void deletetimer (struct timerequest *timerio) { if (timerio) { CloseDevice ((struct IORequest *) timerio); DeleteIORequest ((struct IORequest *) timerio); } return; } int sgn (long a) { if (a<0) return (-1); if (a>0) return (1); return (0); } void check (int i) { if (li[i].x1>screeninfo->width-1 || li[i].x1<0) { dx1=-dx1; li[i].x1+=2*dx1; } if (li[i].y1>screeninfo->height-1 || li[i].y1<0) { dy1=-dy1; li[i].y1+=2*dy1; } if (li[i].x2>screeninfo->width-1 || li[i].x2<0) { dx2=-dx2; li[i].x2+=2*dx2; } if (li[i].y2>screeninfo->height-1 || li[i].y2<0) { dy2=-dy2; li[i].y2+=2*dy2; } return; } void blank (void) { int i,colors,al,w=3,s=1,co=1,ch,stop=FALSE,v; // struct ViewPort *vp; struct DateStamp ds; struct MsgPort *timerport; struct timerequest *timerio; al=object[1].set; if (!(li=calloc (al+1,sizeof (struct line)))) return; if ((timerport=CreateMsgPort ())) { if ((timerio=inittimer (timerport))) { colors=1<depth; rp=&screeninfo->bbscreen->RastPort; // vp=&screeninfo->bbscreen->ViewPort; DateStamp (&ds); srand48 (ds.ds_Minute*60+ds.ds_Tick); /* SetRGB4 (vp,0,0,0,0); SetRGB4 (vp,1,15,0,0); if (colors>2) { SetRGB4 (vp,2,0,0,15); SetRGB4 (vp,3,0,15,0); if (colors>4) { SetRGB4 (vp,4,0,5,0); SetRGB4 (vp,5,15,3,8); SetRGB4 (vp,6,15,5,15); SetRGB4 (vp,7,5,15,8); if (colors>8) { SetRGB4 (vp,8,10,5,0); SetRGB4 (vp,9,0,15,5); SetRGB4 (vp,10,15,7,15); SetRGB4 (vp,11,0,7,15); SetRGB4 (vp,12,8,15,3); SetRGB4 (vp,13,15,10,5); SetRGB4 (vp,14,7,0,15); SetRGB4 (vp,15,3,8,15); if (colors>16) for (i=16;ibbscreen,1,colors-1); ch=al/colors; if (ch==0) ch=1; dx1=drand48 ()*w+s; dy1=drand48 ()*w+s; dx2=drand48 ()*w+s; dy2=drand48 ()*w+s; li[0].x1=drand48 ()*screeninfo->width; li[0].y1=drand48 ()*screeninfo->height; li[0].x2=drand48 ()*screeninfo->width; li[0].y2=drand48 ()*screeninfo->height; ScreenToFront (screeninfo->bbscreen); /* for (i=0;icolors-1) co=1; } SetAPen (rp,co); Move (rp,li[i].x1,li[i].y1); Draw (rp,li[i].x2,li[i].y2); if (CheckSignal (SIGBREAKF_CTRL_C)) { i=al-1; stop=TRUE; } } if (!stop && !CheckSignal (SIGBREAKF_CTRL_C)) { i=0; v=al-1; do { // if (object[2].set) // TimeDelay (UNIT_MICROHZ,0,object[2].set*100); if (object[2].set) waittimer (timerio,0,object[2].set*100); SetAPen (rp,0); Move (rp,li[i].x1,li[i].y1); Draw (rp,li[i].x2,li[i].y2); li[i].x1=li[v].x1+dx1; li[i].y1=li[v].y1+dy1; li[i].x2=li[v].x2+dx2; li[i].y2=li[v].y2+dy2; check (i); if (i%ch==0) { co++; if (co>colors-1) co=1; } SetAPen (rp,co); Move (rp,li[i].x1,li[i].y1); Draw (rp,li[i].x2,li[i].y2); i++; if (i>al-1) { i=0; dx1=sgn(dx1)*(drand48 ()*w+s); dy1=sgn(dy1)*(drand48 ()*w+s); dx2=sgn(dx2)*(drand48 ()*w+s); dy2=sgn(dy2)*(drand48 ()*w+s); } v++; if (v>al-1) v=0; } while (!CheckSignal (SIGBREAKF_CTRL_C)); } } deletetimer (timerio); } DeleteMsgPort (timerport); } return; } void main(int argc,char **argv) { if (!(BlitzBlankBase=OpenLibrary ("blitzblank.library",BLITZBLANKLIB_VER))) exit (0); message.flags=BBF_Screenmode|BBF_Colors; message.first=&object[0]; StrToLong (argv[3],(long *) &screeninfo); screeninfo->maxdepth=8; if (strcmp (argv[1],"BLANK")==0) { BBL_SendMessage (&message,argv[2]); if (screeninfo->bbscreen) blank (); BBL_BlankDone (); } else { message.infotext=BBL_GetString (270,text[0]); object[1].label=BBL_GetString (271,text[1]); object[2].label=BBL_GetString (272,text[2]); if (strcmp (argv[1],"CONFIG")==0) { BBL_SendMessage (&message,argv[2]); } else { message.first=NULL; BBL_SendMessage (&message,argv[2]); } } CloseLibrary (BlitzBlankBase); exit (0); }