Function SizeDOS_File(Var A: SizeArray): Real; Begin SizeDOS_File:= (A[1] + (256.0 * A[2]) + (256.0 * 256.0 * A[3]) + (256.0 * 256.0 * 256.0 * A[4])); End; procedure ReadMS_DOS; var FileName: Str20; CPMName: Str20; I,Err: integer; CPMFile: File; Cl: integer; RecordsPerCluster: integer; Stop: boolean; Size: Real; begin IdentifyMS_DOS; if not (Identity = Unidentified) then begin ClrScr; writeln; writeln('File Transfer From MS-DOS to CP/M'); writeln; write('File Name to Get From MS-DOS: '); readln(FileName); writeln; Stop:= false; SearchFirst(FileName,Err); While VolumeName or SubDirName do SearchNext(FileName,Err); if (Err = EODirectory) then begin write('File Not Found, '); end else begin write('Transfering -'); RecordsPerCluster:= RecordsPerSector * SecsPerCluster; repeat CPMName:= ''; for I:= 1 to NameSize do if not (DOS_FCB^.Name[I]=' ') then CPMName:= CPMName + DOS_FCB^.Name[I]; CPMName:= CPMName + '.'; for I:= 1 to TypeSize do CPMName:= CPMName + DOS_FCB^.Extention[I]; CPMName:= concat(CPM_DriveCh,':',CPMName); writeln; write(CPMName); assign(CPMFile,CPMName); rewrite(CPMFile); Cl:= DOS_FCB^.ClusterNo; Size:= SizeDOS_File(DOS_FCB^.FileSize); while (Cl < $FF8) do begin ReadCluster(Cl); For I:= 1 to RecordsPerCluster do Begin If Size < 128.0 Then (* Put in CP/M EOF Char *) ClusterBuffer[((I - 1) * 128) + Trunc(Size) + 1]:= ^Z; If Size > 0.01 Then (* Don't Compare Reals With Zero *) blockwrite(CPMFile,ClusterBuffer[((I - 1) * 128) + 1],1); Size:= Size - 128.0; End; Cl:= FATPointer(Cl); (* Point to Next Cluster *) end; close(CPMFile); Repeat SearchNext(FileName,Err); Until Not (VolumeName or SubDirName); Stop:= Break; until (Err = EODirectory) or Stop; writeln; writeln; end; if Stop then write('Aborted, '); Continue; end; end; procedure DirMS_DOS; var ErrorCode, Count, I,N: integer; X: real; FileName: Str20; MonthString: array[0..38] of char; begin MonthString:= '...JanFebMarAprMayJunJulAugSepOctNovDec'; Count:= 0; IdentifyMS_DOS; if not (Identity = Unidentified) then begin ClrScr; writeln; write('Dir Mask: '); readln(FileName); writeln; writeln('Name', 'Attrubutes':18, 'Clstr':7, 'Date':13, 'Time':10, 'Size':8); for I:= 1 to 59 do write('-'); SearchFirst(FileName,ErrorCode); repeat if (ErrorCode = 0) then begin writeln; Count:= Count + 1; with DOS_FCB^ do begin for I:= 1 to NameSize do write(Name[I]); write('.'); for I:= 1 to TypeSize do write(Extention[I]); write(' '); N:= Attribute; If VolumeName Then Write('') Else if SubDirName Then Write('') Else for I:= 1 to 8 do begin write(chr(((N shr 7) and 1) + $30)); N:= N shl 1; end; write(ClusterNo:7); write(' '); N:= ((Date shr 5) and $F); if (N > 12) then N:= 0; N:= N * 3; for I:= N to N+2 do write(MonthString[I]); write(' '); N:= Date and $1F; if N < 10 then write('0'); write(N); write(',',(Date shr 9) + 1980); write(' '); N:= (Time shr 11); if N < 10 then write('0'); write(N,':'); N:= ((Time shr 5) and 63); if N < 10 then write('0'); write(N,':'); N:= ((Time and $1F) * 2); if N < 10 then write('0'); write(N); write(' ',SizeDOS_File(FileSize):6:0); end; end; SearchNext(FileName,ErrorCode); until (ErrorCode = $FF) or Break; writeln; writeln; writeln('File Count: ',Count); Continue; end; end; procedure MapMS_DOS; begin IdentifyMS_DOS; if not (Identity = Unidentified) then begin ClrScr; for I:= 0 to NClusters -1 do begin if (I mod 18) = 0 then writeln; write(FATPointer(I + 2),',') end; writeln; writeln; continue; end; end;