home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol256 / trans-05.inc < prev    next >
Encoding:
Text File  |  1986-03-22  |  4.3 KB  |  196 lines

  1.  
  2.  
  3. Function SizeDOS_File(Var A: SizeArray): Real;
  4. Begin
  5. SizeDOS_File:= (A[1] + (256.0 * A[2]) + (256.0 * 256.0 * A[3]) +
  6.     (256.0 * 256.0 * 256.0 * A[4]));
  7. End;
  8.  
  9. procedure ReadMS_DOS;
  10. var
  11.   FileName:          Str20;
  12.   CPMName:           Str20;
  13.   I,Err:             integer;
  14.   CPMFile:           File;
  15.   Cl:                integer;
  16.   RecordsPerCluster: integer;
  17.   Stop:              boolean;
  18.   Size:              Real;
  19. begin
  20. IdentifyMS_DOS;
  21. if not (Identity = Unidentified) then
  22.   begin
  23.   ClrScr;
  24.   writeln;
  25.   writeln('File Transfer From MS-DOS to CP/M');
  26.   writeln;
  27.   write('File Name to Get From MS-DOS: ');
  28.   readln(FileName);
  29.   writeln;
  30.   Stop:= false;
  31.  
  32.   SearchFirst(FileName,Err);
  33.   While VolumeName or SubDirName do
  34.     SearchNext(FileName,Err);
  35.  
  36.   if (Err = EODirectory) then
  37.     begin
  38.     write('File Not Found, ');
  39.     end
  40.   else
  41.     begin
  42.     write('Transfering -');
  43.     RecordsPerCluster:= RecordsPerSector * SecsPerCluster;
  44.  
  45.     repeat
  46.       CPMName:= '';
  47.       for I:= 1 to NameSize do
  48.         if not (DOS_FCB^.Name[I]=' ') then
  49.           CPMName:= CPMName + DOS_FCB^.Name[I];
  50.       CPMName:= CPMName + '.';
  51.       for I:= 1 to TypeSize do
  52.         CPMName:= CPMName + DOS_FCB^.Extention[I];
  53.       CPMName:= concat(CPM_DriveCh,':',CPMName);
  54.       writeln; write(CPMName);
  55.       assign(CPMFile,CPMName);
  56.       rewrite(CPMFile);
  57.       Cl:= DOS_FCB^.ClusterNo;
  58.  
  59.       Size:= SizeDOS_File(DOS_FCB^.FileSize);
  60.       while (Cl < $FF8) do
  61.         begin
  62.         ReadCluster(Cl);
  63.         For I:= 1 to RecordsPerCluster do
  64.           Begin
  65.           If Size < 128.0 Then (* Put in CP/M EOF Char *)
  66.             ClusterBuffer[((I - 1) * 128) + Trunc(Size) + 1]:= ^Z;
  67.           If Size > 0.01 Then (* Don't Compare Reals With Zero *)
  68.             blockwrite(CPMFile,ClusterBuffer[((I - 1) * 128) + 1],1);
  69.           Size:= Size - 128.0;
  70.           End;
  71.         Cl:= FATPointer(Cl); (* Point to Next Cluster *)
  72.         end;
  73.  
  74.       close(CPMFile);
  75.       Repeat
  76.         SearchNext(FileName,Err);
  77.         Until Not (VolumeName or SubDirName);
  78.       Stop:= Break;
  79.       until (Err = EODirectory) or Stop;
  80.  
  81.     writeln;
  82.     writeln;
  83.     end;
  84.   if Stop then write('Aborted, ');
  85.   Continue;
  86.   end;
  87. end;
  88.  
  89.  
  90.  
  91. procedure DirMS_DOS;
  92. var
  93.   ErrorCode,
  94.   Count,
  95.   I,N:         integer;
  96.   X:           real;
  97.   FileName:    Str20;
  98.   MonthString: array[0..38] of char;
  99. begin
  100. MonthString:= '...JanFebMarAprMayJunJulAugSepOctNovDec';
  101. Count:= 0;
  102. IdentifyMS_DOS;
  103. if not (Identity = Unidentified) then
  104.   begin
  105.   ClrScr;
  106.   writeln;
  107.   write('Dir Mask: ');
  108.   readln(FileName);
  109.   writeln;
  110.   writeln('Name',
  111.   'Attrubutes':18,
  112.     'Clstr':7,
  113.     'Date':13,
  114.     'Time':10,
  115.     'Size':8);
  116.   for I:= 1 to 59 do write('-');
  117.   SearchFirst(FileName,ErrorCode);
  118.   repeat
  119.     if (ErrorCode = 0) then
  120.       begin
  121.       writeln;
  122.       Count:= Count + 1;
  123.  
  124.       with DOS_FCB^ do
  125.         begin
  126.         for I:= 1 to NameSize do write(Name[I]);
  127.         write('.');
  128.         for I:= 1 to TypeSize do write(Extention[I]);
  129.         write('  ');
  130.         N:= Attribute;
  131.  
  132.         If VolumeName Then
  133.           Write('<VolNam>')
  134.         Else if SubDirName Then
  135.           Write('<SubDir>')
  136.         Else
  137.           for I:= 1 to 8 do
  138.             begin
  139.             write(chr(((N shr 7) and 1) + $30));
  140.             N:= N shl 1;
  141.             end;
  142.  
  143.         write(ClusterNo:7);
  144.         write('  ');
  145.         N:= ((Date shr 5) and $F);
  146.         if (N > 12) then N:= 0;
  147.         N:= N * 3;
  148.         for I:= N to N+2 do write(MonthString[I]);
  149.         write(' ');
  150.         N:= Date and $1F;
  151.         if N < 10 then write('0');
  152.         write(N);
  153.         write(',',(Date shr 9) + 1980);
  154.  
  155.         write('  ');
  156.         N:= (Time shr 11);
  157.         if N < 10 then write('0');
  158.         write(N,':');
  159.         N:= ((Time shr 5) and 63);
  160.         if N < 10 then write('0');
  161.         write(N,':');
  162.         N:= ((Time and $1F) * 2);
  163.         if N < 10 then write('0');
  164.         write(N);
  165.         write('  ',SizeDOS_File(FileSize):6:0);
  166.         end;
  167.       end;
  168.     SearchNext(FileName,ErrorCode);
  169.     until (ErrorCode = $FF) or Break;
  170.   writeln;
  171.   writeln;
  172.   writeln('File Count: ',Count);
  173.   Continue;
  174.   end;
  175. end;
  176.  
  177.  
  178.  
  179. procedure MapMS_DOS;
  180. begin
  181. IdentifyMS_DOS;
  182. if not (Identity = Unidentified) then
  183.   begin
  184.   ClrScr;
  185.   for I:= 0 to NClusters -1 do
  186.     begin
  187.     if (I mod 18) = 0 then writeln;
  188.     write(FATPointer(I + 2),',')
  189.     end;
  190.   writeln;
  191.   writeln;
  192.   continue;
  193.   end;
  194. end;
  195.  
  196.