WorkFiles.odc
GetLogicalDrives()
GetVolumeInformation(...)
GetDriveType(..)
GetCurrentDirectory(..)

## Код:
```
(*
****************************************************
* @author       В. Васильев
*               Mailto :vladprg@land.ru
*               Site: www.robot-ivan.narod.ru
*****************************************************
*)

MODULE  LasmWorkFiles;

IMPORT SYSTEM, WinApi, Math, StdLog;

VAR
      i: INTEGER;
      st: SET;
      LogDrives: SET;
      b: BOOLEAN;
      d : INTEGER;
      n : INTEGER;
      r : INTEGER;
      re : REAL;
VAR
       s0: ARRAY 255 OF SHORTCHAR;
       s1: ARRAY 255 OF CHAR;
       s2: POINTER TO  ARRAY OF CHAR;
       LogicalDriveString : ARRAY 32 OF CHAR;

VAR
      DrivesLogical : INTEGER;
      DrivesLogicalString : ARRAY 255 OF SHORTCHAR;
      CurrentDirectory : ARRAY 255 OF SHORTCHAR;

      DrivesType : ARRAY 255 OF SHORTCHAR;
      RootPathName: ARRAY 255 OF SHORTCHAR;
      VolumeNameBuffer : ARRAY 255 OF SHORTCHAR;
      FileSystemNameBuffer : ARRAY 255 OF SHORTCHAR;



PROCEDURE PrintArrayShort*(pArrCharShort : ARRAY OF SHORTCHAR);

     VAR
           j: INTEGER;
           SizeArr : INTEGER;
           ArrChar: POINTER TO ARRAY OF CHAR;

   BEGIN
      SizeArr := LEN(pArrCharShort);
      NEW(ArrChar,SizeArr);

     FOR j := 0 TO SizeArr-1 DO
        ArrChar[j] :=  pArrCharShort[j];
       (* StdLog.Char(FileSystemNameBuffer[j]) *)
     END;
     StdLog.String(ArrChar);

END  PrintArrayShort;

PROCEDURE Do*;


BEGIN  (* Do *)
    NEW(s2, 100);

    StdLog.String("ТЕСТ"); StdLog.Ln;

    DrivesLogical := WinApi.GetLogicalDrives();
    StdLog.String("Какие диски на компьютере?"); StdLog.Ln;
    LogDrives := BITS(DrivesLogical);

   FOR i:=0 TO 31 DO
     IF  i  IN LogDrives THEN
           LogicalDriveString[i] := CHR(ORD('A')+i); (* имя диска *)
           StdLog.String("=> "); StdLog.Char(LogicalDriveString[i]); StdLog.String(":\"); StdLog.Ln;

                        s1[0]   :=  LogicalDriveString[i];
                        s1[1] := ":";
                        s1[2] := "\";
                RootPathName := SHORT(s1);

                    r :=  WinApi.GetVolumeInformation(RootPathName, VolumeNameBuffer, 255, d, NIL, NIL, FileSystemNameBuffer,255);

   StdLog.String("       Какое имя метки диска?"); StdLog.String(" => ");       PrintArrayShort(VolumeNameBuffer); StdLog.Ln;

   StdLog.String("       Какая файловая система?"); StdLog.String(" => ");      PrintArrayShort(FileSystemNameBuffer); StdLog.Ln;

   StdLog.String("       Какой серийный номер диска?"); StdLog.String(" => ");  StdLog.Int(d);  StdLog.Ln;

              r :=  WinApi.GetDriveType(RootPathName);

   StdLog.String("       Какой тип диска?"); StdLog.String(" => ");
           CASE  r OF
             0 : StdLog.String("DRIVE_UNKNOWN");
           | 1 : StdLog.String("DRIVE_NO_ROOT_DIR");
           | 2 : StdLog.String("DRIVE_REMOVABLE");
           | 3 : StdLog.String("DRIVE_FIXED");
           | 4 : StdLog.String("DRIVE_REMOTE");
           | 5 : StdLog.String("DRIVE_CDROM");
           | 6 : StdLog.String("DRIVE_RAMDISK");
           END;
           StdLog.Ln;
     ELSE
           LogicalDriveString[i] := 20X; (*пробел*)
     END;
   END;


    StdLog.Ln; StdLog.String("Какой текущий диск?"); StdLog.Ln;

    r := WinApi.GetVolumeInformation(NIL, VolumeNameBuffer, 100, d, NIL, NIL, FileSystemNameBuffer,100);

   StdLog.String("       Какое имя метки диска?"); StdLog.String(" => ");       PrintArrayShort(VolumeNameBuffer); StdLog.Ln;

   StdLog.String("       Какая файловая система?"); StdLog.String(" => ");      PrintArrayShort(FileSystemNameBuffer); StdLog.Ln;

   StdLog.String("       Какой серийный номер диска?"); StdLog.String(" => ");  StdLog.Int(d);  StdLog.Ln;

StdLog.Ln;
  r := WinApi.GetCurrentDirectory(255, CurrentDirectory);
   StdLog.String("Какой текущий  каталог?"); StdLog.String(" => ");     PrintArrayShort(CurrentDirectory); StdLog.Ln;

  END Do;

END  LasmWorkFiles.
```
