home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / tp_util / detectrd.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-06-07  |  2.6 KB  |  98 lines

  1.  
  2. UNIT DETECTRD;
  3. {
  4.   FESTSTELLEN DER INSTALLIERTEN RAMDISK(S)
  5.   FESTSTELLEN LAUFWERKSBEZEICHNER UND KAPAZITÄT DER GRÖßTEN VON GGF.
  6.   MEHREREN RAMDISKS
  7.  
  8.   DETECTRD IST ZU BENUTZEN IN VERBINDUNG MIT SELECTD.
  9.   EINE TEMPORÄRE DATEI ERHÄLT DANN DEN NAMEN RAMDRIVE+'DATEINAME' -
  10.   DIE WIRD AUTOMATISCH AUF EINE RAMDISK GELEGT, FALLS EINE VORHANDEN IST,
  11.   ANSONSTEN HAT AUF DEM DIRECTORY DES HAUPTPROGRAMMS.
  12.  
  13.   RAMDISKS WERDEN AM VOLUMEID ERKANNT, FOLGENDE VOLUMEIDS SIND BEKANNT :
  14.   'VDISK' IN DEN 1. 5 BUCHSTABEN = MDOS < 4.0 UND DRDOS
  15.   'MS-RAMDR.IVE'                 = MSDOS 4.0
  16. }
  17. {$F+}
  18.  
  19. INTERFACE
  20.  
  21.  
  22. USES  DOS,TPDOS;
  23.  
  24.  
  25. {
  26.  RAMDRIVES ENTHÄLT GGF. MEHRERE LAUFWERKSBEZEICHNER FÜR RAMDISKS OHNE ':'
  27. }
  28. CONST RAMDRIVES  : STRING[8] = '';
  29.  
  30. {
  31.   RAMDRIVE ENTHÄLT DEN LAUFWERKSBEZEICHNER DER GRÖßTEN RAMDISK INCLUSIV ':'
  32.   RAMDKAP ENTHÄLT DIE KAPAZITÄT IN k BYTES DER GRÖßTEN RAMDISK
  33. }
  34. VAR   RAMDRIVE   : STRING[2];
  35.       RAMDKAP    : WORD;
  36.  
  37.  
  38. IMPLEMENTATION
  39.  
  40.  
  41. TYPE  SOF       = RECORD O,S : WORD; END;
  42.       BYTEARR   = ARRAY[1..20] OF BYTE;
  43.  
  44. VAR   R                     : REGISTERS;
  45.       F                     : SEARCHREC;
  46.       DRVCNT,I,NBD          : BYTE;
  47.       HP                    : ^BYTEARR;
  48.       CLAV,CLTO,BPS,SPC     : WORD;
  49.       L1                    : LONGINT;
  50.  
  51.  
  52. BEGIN
  53.   DRVCNT   := 0;
  54.   RAMDRIVE := '';
  55.   RAMDKAP  := 0;
  56.   NBD      := 0;
  57.  
  58.   R.AH := $52;
  59.   MSDOS(R);
  60. {
  61.   ZUERST DIE ANZAHL BLOCKDEVICES FESTSTELLEN - NUMBEROFDRIVES IST
  62.   HIERFÜR UNGEEIGNET
  63. }
  64.   HP := POINTER(MEML[R.ES:R.BX+12]);
  65.   WHILE (SOF(HP).O <> $FFFF) DO BEGIN
  66.     IF ((HP^[6] AND $80) = 0) THEN INC(NBD,HP^[11]);
  67.     HP := POINTER(MEML[SOF(HP).S:SOF(HP).O]);
  68.   END; { WHILE }
  69. {
  70.   DIE BLOCKDEVICES MIT TREIBERKOPF AUßERHALB SEGMENT $70 AUF VOLUMEIDS
  71.   ABKLOPFEN, DIE RAMDISKS MARKIEREN
  72. }
  73.   HP := POINTER(MEML[R.ES:R.BX+12]);
  74.   WHILE (SOF(HP).O <> $FFFF) AND (SOF(HP).S <> $70) DO BEGIN
  75.     IF HP^[11] < 27 THEN BEGIN
  76.       I := SUCC(NBD - DRVCNT - HP^[11]);
  77.  
  78.       INC(DRVCNT,HP^[11]);
  79.       FINDFIRST(CHR(I+$40)+':\*.*',VOLUMEID,F);
  80.       IF (DOSERROR = 0) AND
  81.          ((COPY(F.NAME,1,5) = 'VDISK') OR
  82.           (F.NAME = 'MS-RAMDR.IVE') ) THEN BEGIN
  83.         INSERT(CHR(I+$40),RAMDRIVES,1);
  84.         IF GETDISKINFO(I,CLAV,CLTO,BPS,SPC) THEN BEGIN
  85.           L1 := CLAV; L1 := L1*BPS*SPC DIV 1024;
  86.           IF L1 > RAMDKAP THEN BEGIN
  87.             RAMDRIVE := CHR(I+$40)+':';
  88.             RAMDKAP  := L1;
  89.           END; { IF L1 > RAMDKAP }
  90.         END; { IF GETDISKINFO }
  91.       END;
  92.     END;
  93.     HP := POINTER(MEML[SOF(HP).S:SOF(HP).O]);
  94.   END; { WHILE }
  95. END.
  96.  
  97.  
  98.