/* Junior Prommer Header File
 * (c) Merlin Computer       KICKSTART
 * Gerald Carda
 * erstellt am 18.4.88
 */

#include "exec/types.h"
#include "exec/nodes.h"
#include "exec/types.h"
#include "exec/ports.h"
#include "exec/memory.h"
#include "exec/io.h"
#include "exec/libraries.h"
#include "exec/tasks.h"
#include "exec/execbase.h"
#include "exec/devices.h"
#include "devices/parallel.h"
#include "devices/timer.h"

struct MsgPort *parport,*timeport;
struct IOExtPar *parreq;
struct timerequest *timereq;

struct EpromTyp
{
   char  et_Zkette[30];
   ULONG et_Kapazi;
   ULONG et_Seite;
   UWORD et_Alg;
   UWORD et_I_Zeit;
   UWORD et_M_Zeit;
   UWORD et_Trails;
   UWORD et_Standby;
   UWORD et_Read;
   UWORD et_Odis;
   UWORD et_Program;
   UWORD et_Pr_ver;
   UWORD et_Pr_inh;
   UWORD et_Page_wr;
   UBYTE et_Manufac;
   UBYTE et_Devcode;
   UBYTE et_Tsmask;
   UBYTE et_Frei3;
   UWORD et_Frei1;
   UWORD et_Frei2;
   UWORD et_M_a10;
   UWORD et_M_a11;
   UWORD et_M_a12;
   UWORD et_M_a13;
   UWORD et_M_a14;
   UWORD et_M_a15;
   UWORD et_M_a16;
};

extern struct MsgPort *CreatePort();
extern struct IORequest *CreateExtIO();
extern struct IOStdReq *CreateStdIO();

extern ULONG Junior();

GetParPort()
{
   int error;

   parport = CreatePort(0L,0L);
   if(parport == 0) return(-100);
   parreq =(struct IOExtPar *)
           CreateExtIO(parport,(long)sizeof(struct IOExtPar));
   if(parreq == 0)
     {
       DeletePort(parport);
       return(-200);
     }
   error = OpenDevice((UBYTE *)"parallel.device",0L,parreq,0L);
   if(error!=0)
     {
       DeleteExtIO(parreq,(long)sizeof(struct IOExtPar));
       DeletePort(parport);
       return(-300);
     }
   return(error);
}

FreeParPort()
{
   CloseDevice(parreq);
   DeleteExtIO(parreq,(long)sizeof(struct IOExtPar));
   DeletePort(parport);
}

 
GetTimer()
{
   int error;

   timeport = CreatePort(0L,0L);
   if(timeport == 0) return(-100);
   timereq =(struct timerequest *)
       AllocMem((long)sizeof(struct timerequest),MEMF_PUBLIC);
   if(timereq == 0)
     {
       DeletePort(timeport);
       return(-200);
     }
   timereq->tr_node.io_Message.mn_Node.ln_Type=NT_MESSAGE;
   timereq->tr_node.io_Message.mn_Node.ln_Pri=0;
   timereq->tr_node.io_Message.mn_ReplyPort=timeport;
   error = OpenDevice(TIMERNAME,UNIT_MICROHZ,timereq,0L);
   if(error!=0)
     {
       FreeMem(timereq,(long)sizeof(struct timerequest));
       DeletePort(timeport);
       return(-300);
     }
   return(error);
}
 
FreeTimer()
{
   CloseDevice(timereq);
   FreeMem(timereq,(long)sizeof(struct timerequest));
   DeletePort(timeport);
}

WaitForTimer(micro)
ULONG micro;
{
   timereq->tr_node.io_Command=TR_ADDREQUEST;
   timereq->tr_time.tv_secs=0L;
   timereq->tr_time.tv_micro=micro;
   DoIO(timereq);
}
 
