[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]

    {$g+,n-,e-,d-,q-,r-,s-,t-,v-,x-}
    uses crt,dos;

    function diskettedrives:integer; assembler;
    asm
      xor ax,ax
      xor bx,bx
      xor cx,cx
      xor dx,dx
      int 011h
      cmp ax,00001h
      je @@exit2
      @@exit2:
        xor ax,ax
      @@exit:
      shl ax,8
      shl ax,14
      inc ax
    end;

    var
      buf:array [1..512]of byte;
      ch:char;

    function ready(drivespec:char):boolean; {A,B,etc}
    var
      result:word;
      drive,number,logical:word;
    begin
      ready:=true;
      drive:=ord(upcase(drivespec))-65;
      if(drive>diskettedrives)then exit;
      number:=1;
      logical:=1;
      asm
        push bp
        push ds
        xor ax,ax
        mov result,ax
        mov al,byte ptr drive
        mov cx,number
        mov dx,logical
        mov bx,seg buf
        mov ds,bx
        mov bx,offset buf
        int 25h
        pop bx
        pop ds
        pop bp
        jnb @@done
        mov result,ax
       @@done:
      end;
      ready:=(result=0);
    end;

    function dodummy(const d:char):boolean;
    var f:file;
    begin
      dodummy:=false;
      assign(f,d+':\dummy');
      {$i-} rewrite(f,1); {$i+}
      if(ioresult<>0)then
      begin
        exit;
      end;
      {$i-} close(f); {$i+}
      if(ioresult<>0)then exit;
      {$i-} erase(f); {$i+}
      if(ioresult<>0)then exit;
      dodummy:=true;
    end;

    begin
      repeat
        writeln('insert a unprotected disk in drive A: and press any key!');
        ch:=readkey;
      until(ready('a'))and(dodummy('a'));
    end.

[Back to DRIVES SWAG index] [Back to Main SWAG index] [Original]