home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / disks / misc / savebb / savebb.p < prev    next >
Text File  |  1992-09-02  |  3KB  |  100 lines

  1.  
  2. Program
  3.   SaveBB;
  4.  
  5. Uses
  6.   ExecIO;
  7.  
  8. {$incl 'devices/trackdisk.h'}
  9.  
  10. Const
  11.   version = "$VER: SaveBB 1.0 (22.06.94) © by G.M.A.";
  12.  
  13. Var
  14.   msg_port : p_MsgPort;                   { Zeiger auf unseren Message-Port }
  15.   ioreq    : p_IOExtTD;         { Zeiger auf erweiterte IO-Request-Struktur }
  16.   buffer   : ^Array[1..512*2] Of Byte;           { Buffer für Daten des BBs }
  17.   lw       : Byte;                                           { Drive-Nummer }
  18.   error    : Integer;     { Ist Fehler aufgetreten ? - Wird nicht getestet. }
  19.   i        : Integer;                                        { Für Schleife }
  20.   datei    : Text;                                            { Dateihandle }
  21.   name     : String[80];                                        { Dateiname }
  22.  
  23.  
  24. Procedure alles_zu;
  25. Begin
  26.   Close_Device (ioreq);                    { und trackdisk.device schließen }
  27.   DeleteExtIO (ioreq);
  28.   DeletePort (msg_port);                     { Messageport wieder entfernen }
  29. End;
  30.  
  31.  
  32. Begin
  33.   lw := 0;                                            { Laufwerk 0 benutzen }
  34.  
  35.   msg_port := CreatePort ('SaveBB-Port', 0);          { Messageport anlegen }
  36.   ioreq := CreateExtIO (msg_port, SizeOf(IOExtTD));
  37.   Open_Device ('trackdisk.device', lw, ioreq, 0); { trackdisk.device öffnen }
  38.  
  39.   ioreq^.iotd_req.io_Command := TD_CHANGESTATE;    { Ist Disk im Laufwerk ? }
  40.   error := DoIO (ioreq);
  41.   If Not (ioreq^.iotd_req.io_Actual = 0) Then Begin
  42.     WriteLn ('Keine Diskette in df0: !');
  43.     alles_zu;
  44.     Halt (0);
  45.   End;
  46.  
  47.   ioreq^.iotd_req.io_Command := TD_PROTSTATUS;       { Schreibschutz testen }
  48.   error := DoIO (ioreq);
  49.   If (ioreq^.iotd_req.io_Actual <> 0) Then Begin
  50.     WriteLn ('Diskette ist schreibgeschützt !');
  51.     alles_zu;
  52.     Halt (0);
  53.   End;
  54.  
  55.   Buffer := Ptr(Alloc_Mem(512 * 2, 2));            { Chip-Memory allokieren }
  56.   With ioreq^.iotd_req Do Begin
  57.     io_Command := CMD_READ;
  58.     io_Data    := Buffer;                              { Hier Daten ablegen }
  59.     io_Length  := 512 * 2;                                 { 2 Blöcke lesen }
  60.     io_Offset  := 0              { Hier mit Lesen beginnen, Offset in Bytes }
  61.   End;
  62.   error := DoIO (ioreq);
  63.  
  64.   With ioreq^.iotd_req Do Begin                    { noch Motor ausschalten }
  65.     io_Command := TD_MOTOR;
  66.     io_Length := 0;
  67.   End;
  68.   error := DoIO (ioreq);
  69.  
  70.   Write ("Dateiname = "); ReadLn (name);
  71.  
  72.   ReSet(datei, name);
  73.   If IOResult = 0 Then Begin
  74.     WriteLn ("Datei ", name, " existiert schon !");
  75.     Close (datei);
  76.     alles_zu;
  77.     Halt (0);
  78.   End;
  79.  
  80.   ReWrite(datei, name);
  81.   If IOResult <> 0 Then Begin
  82.     WriteLn ("Konnte Datei ", name, " nicht öffnen !");
  83.     alles_zu;
  84.     Halt (0);
  85.   End;
  86.  
  87.   If error <> 0 Then                         { Wenn kein Fehler auftrat ... }
  88.     Writeln ('Ein Fehler ist aufgetreten: ', error)
  89.   Else Begin                                         { ... Daten bearbeiten }
  90.     For i := 1 To 1024 Do                           { Jedes Byte bearbeiten }
  91.       Write (datei, Chr(Buffer^[i]))                           { = ausgeben }
  92.   End;
  93.   Free_Mem (Long(Buffer), 512 * 2);
  94.  
  95.   alles_zu;
  96.   Close (datei);                                   { Datei wieder schließen }
  97. End.
  98.  
  99.  
  100.