#include    <stdio.h>
#include    <exec/types.h>
#include    <exec/libraries.h>
#include    <proto/exec.h>
#include    <proto/dos.h>
#include    <FrameMachine/fm.h>
#include    <FrameMachine/fmpragma.h>


struct  Library *FrameMachineBase;
extern  struct  Library *SysBase;

main(argc,argv)
int    argc;
char   *argv[];
{
  WORD          status;
  WORD          xloop, yloop;
  UBYTE         r[720],g[720],b[720];

  UBYTE		 C1r=255,C2r=255,C3r=17,C4r=136,col_lr=0,col_rr=0,colr=0;
  float		 D13r=0.0,D24r=0.0,Dr=0.0;

  UBYTE		 C1g=0,C2g=153,C3g=85,C4g=0,col_lg=0,col_rg=0,colg=0;
  float		 D13g=0.0,D24g=0.0,Dg=0.0;

  UBYTE	     C1b=34,C2b=0,C3b=255,C4b=255,col_lb=0,col_rb=0,colb=0;
  float		 D13b=0.0,D24b=0.0,Db=0.0;
    
  char          *version[] =
                {"$VER: PRISMA-GRADE V1.0 (9.9.93)\n"};
	
    FrameMachineBase = OpenLibrary("framemachine.library",0);
    if (FrameMachineBase)
    {
        /* Jetzt Gehts los ales ist gerüft */
        /* NEVER! Forget to lock FrameMachine! */
        LockFM();
			
			col_lr=col_rr=colr=0;
			D13r = (C3r-C1r)/285.0;
			D24r = (C4r-C2r)/285.0;
			
			col_lg=col_rg=colg=0;
			D13g = (C3g-C1g)/285.0;
			D24g = (C4g-C2g)/285.0;
			
			col_lb=col_rb=colb=0;
			D13b = (C3b-C1b)/285.0;
			D24b = (C4b-C2b)/285.0;
			
        if (PrismAttached())
        {
            status = PrepWrite(720,570, WRITE_COLOR , NULL, NULL, NULL);
            if (!status)
            {   
             for (yloop=0; yloop<256 && !status; yloop++)
				 {
					col_lr=C1r+yloop*D13r;
					col_rr=C2r+yloop*D24r;
					Dr=(col_rr-col_lr)/360.0;
					
					col_lg=C1g+yloop*D13g;
					col_rg=C2g+yloop*D24g;
					Dg=(col_rg-col_lg)/360.0;
					
					col_lb=C1b+yloop*D13b;
					col_rb=C2b+yloop*D24b;
					Db=(col_rb-col_lb)/360.0;

					
			     	/* Make new line of RGB-Data:   */
                	for (xloop=0; xloop<360; xloop++)
                	{
					 	colr=col_lr+xloop*Dr;
						colg=col_lg+xloop*Dg;
						colb=col_lb+xloop*Db;

						 r[xloop*2] =colr;
						 g[xloop*2] =colg;
						 b[xloop*2] =colb;
               	 	 r[xloop*2+1] =colr;
						 g[xloop*2+1] =colg;
						 b[xloop*2+1] =colb;
				    }
				 status = WriteRGB24Line(r,g,b); status = WriteRGB24Line(r,g,b);

                }
            EndWrite();
            }
        }
        UnLockFM();

        if (FrameMachineBase)
        {
            CloseLibrary(FrameMachineBase);
        }

    }
}

