#include <exec/types.h>
#include <exec/memory.h>
#include <devices/trackdisk.h>

main()
{
  struct MsgPort *mport;
  struct IOStdReq *iorequest;
  LONG *puffer1,*puffer2,*trackmem,hilf;

  puffer1 = (LONG*)AllocMem(512L,MEMF_CHIP);
  puffer2 = (LONG*)AllocMem(512L,MEMF_CHIP);
  trackmem = (LONG*)AllocMem(22*512L,MEMF_CHIP);

  mport = CreatePort(0L,0L);
  iorequest = CreateStdIO(mport);
  OpenDevice(TD_NAME,0L,iorequest,0L);
   /* Motor wird beim Lesen automatisch eingeschaltet */
    iorequest->io_Command = CMD_READ;
    iorequest->io_Length = TD_SECTOR;
    iorequest->io_Data = puffer1;
    iorequest->io_Offset = TD_SECTOR * 880;
    DoIO(iorequest);
    iorequest->io_Data = puffer2;
    iorequest->io_Offset = TD_SECTOR * 881;
    DoIO(iorequest);
   /* 2.Puffer an falsche Adresse zurÜckschreiben (nur im RAM) */
    iorequest->io_Command = CMD_WRITE;
    iorequest->io_Length = TD_SECTOR;
    iorequest->io_Data = puffer2;
    iorequest->io_Offset = TD_SECTOR * 880;
    DoIO(iorequest);
   /* Trackpuffer ungÜltig machen und neu lesen */
    iorequest->io_Command = CMD_CLEAR;
    DoIO(iorequest);
    iorequest->io_Command = CMD_READ;
    iorequest->io_Length = TD_SECTOR;
    iorequest->io_Data = puffer2;
    iorequest->io_Offset = TD_SECTOR * 881;
    DoIO(iorequest);
   /* Trackpuffer zurÜckschreiben */
    iorequest->io_Command = CMD_UPDATE;
    DoIO(iorequest);
   /* Cylinder 3 einlesen */
    iorequest->io_Command = CMD_READ;
    iorequest->io_Length = TD_SECTOR * 22;
    iorequest->io_Data = trackmem;
    iorequest->io_Offset = TD_SECTOR * 3 * 22;
    DoIO(iorequest);
   /* Cylinder 3 formatieren und zurÜckschreiben */
    iorequest->io_Command = TD_FORMAT;
    iorequest->io_Length = TD_SECTOR * 22;
    iorequest->io_Data = trackmem;
    iorequest->io_Offset = TD_SECTOR * 3 * 22;
    DoIO(iorequest);
   /* Zum Schluß Motor ausschalten */
    iorequest->io_Command = TD_MOTOR;
    iorequest->io_Length = 0L;
    DoIO(iorequest);
   /* Device schließen und Speicher freigeben */
  CloseDevice(iorequest);
  DeleteStdIO(iorequest);
  DeletePort(mport);
  FreeMem(trackmem,22*512L);
  FreeMem(puffer1,512L);
  FreeMem(puffer2,512L);
}
