Source file: /~heha/messtech/ad_da.zip/PAS/LW_TEST.PAS

Unit LW_Test;{
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
º T E C H N I S C H E   U N I V E R S I T Ž T   C H E M N I T Z          º
º                                                                        º
º Programm zur Ansteuerung des AD/DA-Wandlermoduls mit Einchip-          º
º rechner 68HC11                                                         º
º                                                                        º
º UNIT zur Ermittlung der logischen Laufwerke                            º
º                                                                        º
º Programmierer:    Torsten Levin                                        º
º                   03 AET 89                                            º
º                   TU Chemnitz-Zwickau                                  º
º                                                                        º
º Chemnitz, Januar-April 1993                                            º
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
h#s 12/01}

INTERFACE

Function LW_exist(LW:Char) : Boolean;

IMPLEMENTATION
Uses Dos;
Function LW_exist(LW:Char) : Boolean;
{$IFDEF LEVIN}

Type
  DPB4Zeiger = ^DPB4Feld;

  DPB4Feld = Record
    LL   : Byte;      { Logisches Laufwerk }
    LP   : Byte;      { Physisches Laufwerk }
    BS   : Word;      { Bytes pro Sektor }
    IL   : Byte;      { Interleave-Faktor }
    SC   : Byte;      { Sektoren pro Cluster }
    RS   : Word;      { Reservierte Sektoren }
    AF   : Byte;      { Anzahl der FAT's }
    AH   : Word;      { Eintr„ge im Hauptverzeichnis }
    ES   : Word;      { Erster belegter Sektor }
    LC   : Word;      { Letzter belegter Cluster }
    SF   : Word;      { Sektoren pro FAT }
    ED   : Word;      { Erster Datensektor }
    ZGT  : Pointer;   { Zeiger auf den Anfang des entspr. Ger„tetreibers }
    MD   : Byte;      { Media Descriptor }
    UF   : Byte;      { Anzeige-Byte, ob auf das Ger„t bereits ein Zugriff erfolgte }
    NDPB : Pointer;   { Zeiger auf n„chsten DPB }
    NFC  : Word;      { Suchstart }
    FC   : Word;      { Freie Cluster }
  End;

Var A,B         : Byte;
    Regs        : Registers;
    DIBZeiger   : ^Pointer;
    Feld4Zeiger : DPB4Zeiger;
    Weiter      : Boolean;


Begin
  LW_exist:=False;
  LW:=Upcase(LW);
  If LW in ['A','B'] then
  Begin
    ASM
      Mov  AL,10H;
      Out  70H,AL;
      In   AL,71H;
      Mov  (A),Al;
    End;
    B:=A mod 16;
    A:=(A-B) div 16;
    IF (LW ='A') and (A<>0) Then LW_exist:=True;
    IF (LW ='B') and (B<>0) Then LW_exist:=True;
  End
  Else Begin
    Regs.AH:=$52;
    MSDOS(Regs);
    DIBZeiger:=Ptr(Regs.ES,Regs.BX);
    Feld4Zeiger:=DIBZeiger^;
    Weiter:=True;
    Repeat
      If (Feld4Zeiger^.LL+65 = Ord(LW)) Then LW_exist:=True;
      If Ofs(Feld4Zeiger^.NDPB^)=$FFFF Then Weiter:=False;
      Feld4Zeiger:=Feld4Zeiger^.NDPB;
    Until (Weiter=False);
  End;
End;
{$ELSE}
 begin
  LW:=Upcase(LW);
  LW_Exist:=false;
  asm	mov	ah,19h
	int	21h
	push	ax
	 mov	ah,0Eh
	 mov	dl,[lw]
	 sub	dl,'A'
	 int	21h
	 mov	ah,19h
	 int	21h
	 cmp	al,dl
	 jne	@@1
	 cmp	al,1		{B:}
	 jne	@@2
	 mov	es,[Seg0040]
	 mov	al,es:[10h]
	 test	al,0C0h		{Installierte Hardware: Floppys-1}
	 jz	@@1
@@2:	 inc	[@result]
@@1:	pop	dx
	mov	ah,0Eh
	int	21h
  end;
 end;
{$ENDIF}


End.
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded