home *** CD-ROM | disk | FTP | other *** search
- program Dir1;
-
- {This program displays the default directory. It works with MS-DOS
- (or PC-DOS) versions 1 and 2. It assumes a screen 80 columns wide.}
-
- Type
- regpack = record
- case integer of
- 1: (ax,bx,cx,dx,bp,si,di,ds,es,flags: integer);
- 2: (al,ah,bl,bh,c,ch,dl,dh : byte)
- end;
-
- fcbarray = array[0..36] of char;
-
- const
- getdta = $1a;
- get1stdir = $11;
- getnextdir = $12;
- getdefdrv = $19;
- setdefdrv = $e;
- getfreespace = $36;
-
- var
- filestr,
- filename: string[14];
- dfcb,
- dta: fcbarray;
- disk: char;
- drivecnt,i,curdrv,origdrv: integer;
-
- procedure screenstop;
- begin
- gotoxy(1,25);
- write('Press any key to continue ');
- while keypressed = false do
- begin end;
- end;
-
- function Freespace(curdrive:char):real;
- var
- regs: regpack;
- fr : real;
-
- begin
- with regs do
- begin
- dx := ord(curdrive)-64;
- ah := getfreespace;
- MsDos(regs);
- fr := bx;
- if ax > 0 then Freespace := fr * ax * cx
- else Freespace := 0
- end;
- end;
-
- procedure CountDisks;
- var
- regs: regpack;
-
- begin
- with regs do
- begin
- ah:=getdefdrv;
- MsDos(regs);
- curdrv := al+1;
- dl:=al;
- ah:=setdefdrv;
- MsDos(regs);
- drivecnt:=al-1;
- end;
- end;
-
- procedure ResetDisks(diskquery:byte);
-
- var
- regs: regpack;
-
- begin
- with regs do
- begin
- dl:=diskquery-1;
- ah:=setdefdrv;
- disk := char(64+diskquery);
- MsDos(regs);
- end;
- end;
-
- procedure DTAcall;
-
- var
- regs: regpack;
-
- begin
- with regs do begin
- dta[1] :='N';
- dta[2] :='o';
- dta[3] :=' ';
- dta[4] :='F';
- dta[5] :='i';
- dta[6] :='l';
- dta[7] :='e';
- dta[8] :='s';
- dta[9] :='.';
- dta[10] :='.';
- dta[11] :='.';
- ah := getdta;
- ds := seg(dta);
- dx := ofs(dta);
- MsDos(regs)
- end
- end; {DTAcall}
-
- procedure Dircall(call: byte; var errflag: byte);
-
- var
- regs: regpack;
-
- begin
- with regs do begin
- ah := call;
- cx := 0;
- ds := seg(dfcb);
- dx := ofs(dfcb);
- MsDos(regs);
- errflag:= al
- end
- end; {dircall}
-
- Procedure loaddir;
-
- var
- i,j,
- err: byte;
-
- begin
- j := 0;
- writeln;
- textbackground(15);
- textcolor(0);
- write(' DIRECTORY OF ',disk,' ');
- write(freespace(disk):6:0,' bytes free ');
- textbackground(0);
- textcolor(15);
- dfcb[0]:= ^@;
- for i:= 1 to 11 do dfcb[i]:= '?';
- DTACall;
- Dircall(get1stdir, err);
- repeat
- if j = 0 then begin
- TextBackground(15);
- Write(' ');
- TextBackGround(0);
- end;
- filename:= '';
- for i:= 1 to 8 do filename:= filename + dta[i];
- filename:= filename + '.';
- for i:= 9 to 11 do filename:= filename + dta[i];
- if wherey>24 then
- begin
- screenstop;
- clrscr;
- end;
- write(filename);
- textbackground(15);
- write(' ');
- textbackground(0);
- j := j+1;
- if j = 6 then
- begin
- TextBackground(15);
- Write(' ');
- TextBackGround(0);
- j := 0
- end;
- Dircall(getnextdir, err)
- until err <> 0;
- end; {loaddir}
-
- begin
- clrscr;
- CountDisks;
- origdrv := curdrv;
- for i:= 1 to drivecnt do
- begin
- ResetDisks(i);
- loaddir;
- end;
- screenstop;
- ResetDisks(origdrv);
- end.