home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / MADTRB15.ZIP / VOL.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1985-08-09  |  5.0 KB  |  143 lines

  1. PROGRAM Vol;
  2.  
  3. TYPE
  4.   Reg = Record case Integer of
  5.           1: (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags : Integer);
  6.           2: (AL,AH,BL,BH,CL,CH,DL,DH          : Byte);
  7.         End;
  8.   XFCB = Record                      { Extended File Control Block }
  9.         Flag : Byte;                 { Set to $FF to Identify as Extended FCB }
  10.         FRes : Array[1..5] of Byte;  { 5 Reserved Bytes }
  11.         Att  : Byte;                 { Attribute of File }
  12.         Drive : Byte;                { 0 = Default, 1 = A, 2 = B }
  13.         FName : Array[1..8] of Char; { File Name }
  14.         Ext   : Array[1..3] of Char; { Extension }
  15.         CBlock : Integer;            { Current Block Number }
  16.         RSize  : Integer;            { Logical Record Size }
  17.         FSize  : Integer;            { File Size }
  18.         Date   : Integer;            { Date Created/Updated }
  19.         SRes   : Array[1..10] of Byte;  { 10 Reserved Bytes }
  20.         RNum   : Byte;                  { Cur. Rel. Record Number in Block }
  21.         RRNum  : Array[1..4] of Byte;   { Rel. Rec. Rel. to Begining of File }
  22.       End;
  23.  
  24.   DTARec = Record
  25.         XStuff    : Array[1..7] of Byte;  { 1st 7 bytes of Ext. FCB }
  26.         DDrive    : Byte;                 { Drive Number }
  27.         FileName  : Array[1..8] of Char;  { File Name }
  28.         Extension : Array[1..3] of Char;  { Extension }
  29.         Attribute : Byte;                 { Attribute }
  30.         Reserved  : Array[1..10] of Byte; { 10 Reserved Bytes }
  31.         FileTime  : Integer;              { Time Created/Updated }
  32.         FileDate  : Integer;              { Date Created/Updated }
  33.         Cluster   : Integer;              { Starting Cluster Number }
  34.         FileSize  : Array[1..4] of Byte;  { File Size in Bytes }
  35.       End;
  36.  
  37.   MFCB = Array[0..43] of char;  { Modified XFCB Used to Rename Files }
  38.  
  39.  
  40. VAR
  41.   FCB          : XFCB;
  42.   DTA          : DTARec;
  43.   ModFCB       : MFCB;
  44.   Regs         : Reg;
  45.   VolumeName   : String[11];
  46.   Day,Month,Year,
  47.   Hour,Minute  : Integer;
  48.   Size         : Real;
  49.  
  50. PROCEDURE FindVolume;
  51.   VAR I : Integer;
  52.  
  53.   PROCEDURE ShowEntry;
  54.     begin
  55.       DTA.Attribute := DTA.Attribute and 31;
  56.       Write(DTA.FileName,DTA.Extension,' : ',DTA.Attribute);
  57.       Year := (DTA.FileDate shr 9) + 80;
  58.       Month := (DTA.FileDate shl 7) shr 12;
  59.       Day := (DTA.FileDate shl 11) shr 11;
  60.       Write(' ',Month,'-',Day,'-',Year);
  61.       Hour := DTA.FileTime shr 11;
  62.       Minute := (DTA.FileTime shl 5) shr 10;
  63.       Write(' ',Hour,Minute);
  64.       Size := (DTA.FileSize[1] * 1.0) +
  65.               (DTA.FileSize[2] * 256.0) +
  66.               (DTA.FileSize[3] * 65536.0);
  67.       Write(' S=',Size:6:0);
  68.       Begin
  69.         If (DTA.Attribute and $08) = 8 then Write('  <-- Volume Name!');
  70.         If (DTA.Attribute and $01) = 1 then Write('  ReadOnly ');
  71.         If (DTA.Attribute and $02) = 2 then Write('  Hidden ');
  72.         If (DTA.Attribute and $04) = 4 then Write('  System ');
  73.       End;
  74.       WriteLn;
  75.     end; { procedure ShowEntry }
  76.  
  77.   Begin
  78.   With FCB do begin
  79.     Regs.AX := $1A00;       { Func.Call $1A (Set DTA) }
  80.     Regs.DS := Seg(DTA);
  81.     Regs.DX := Ofs(DTA);
  82.     MsDos(Regs);
  83.     FillChar(FCB,SizeOf(FCB),0);
  84.     Flag := $FF;
  85.     Att := 15;
  86.     For I := 1 to 8 do FName[I] := '?';
  87.     For I := 1 to 3 do Ext[I] := '?';
  88.     Regs.DS := Seg(FCB);
  89.     Regs.DX := Ofs(FCB);
  90.     Regs.AX := $1100;       { Func.Call $11 (Search for First Entry) }
  91.     MsDos(Regs);
  92.     Write(Regs.AL,' : ');
  93.     If Regs.AL <> $FF then ShowEntry;
  94.     If Regs.AL <> $FF then begin
  95.       Repeat
  96.         Regs.DS := Seg(FCB);
  97.         Regs.DX := Ofs(FCB);
  98.         Regs.AX := $1200;    { Func.Call $12 (Search for Next Entry) }
  99.         MsDos(Regs);
  100.         Write(Regs.AL,' : ');
  101.         If Regs.AL <> $FF then ShowEntry;
  102.       Until Regs.AL = $FF;
  103.       FillChar(ModFCB,SizeOf(ModFCB),#32);
  104.       ModFCB[0] := #255;
  105.       ModFCB[6] := #8;
  106.       ModFCB[7] := #0;
  107.       VolumeName := 'DOWNLOAD 7 ';
  108.       For I := 1 to 8 do ModFCB[I+7] := VolumeName[I];
  109.       For I := 9 to Length(VolumeName) do ModFCB[I+7] := VolumeName[I];
  110.       VolumeName := 'DUMBCHANGE ';
  111.       For I := 17 to (17 + Length(VolumeName)) do ModFCB[I+7] := VolumeName[I-16];
  112.       WriteLn(ModFCB);
  113.       Regs.DS := Seg(ModFCB);
  114.       Regs.DX := Ofs(ModFCB);
  115.       Regs.AX := $1700;
  116.       MsDos(Regs);
  117.       Write(Regs.AL,' : ');
  118.     End Else Begin
  119.       FillChar(FCB,SizeOf(FCB),0);
  120.       Flag := $FF;
  121.       Att := $08;
  122.       Drive := $00;
  123.       VolumeName := 'DUMBCHANGE ';
  124.       For I := 1 to 8 do FName[I] := VolumeName[I];
  125.       For I := 9 to Length(VolumeName) do Ext[I-8] := VolumeName[I];
  126.       Regs.DS := Seg(FCB);
  127.       Regs.DX := Ofs(FCB);
  128.       Regs.AX := $1600;       { Func.Call $16 (Create File) }
  129.       MsDos(Regs);
  130.       WriteLn(Regs.AL,' Opening File');
  131.       Regs.DS := Seg(FCB);
  132.       Regs.DX := Ofs(FCB);
  133.       Regs.AX := $1000;       { Func.Call $0F (Close File) }
  134.       MsDos(Regs);
  135.       WriteLn(Regs.AL,' Closing File');
  136.     End;
  137.     WriteLn;
  138.   End; { with FCB }
  139.   End; { procedure FindVolume }
  140.  
  141. Begin
  142.   FindVolume;
  143. End.