    procedure clearbox; { Clear the file list box }
    var i:byte;
    begin
    for i:=flist[18].y to flist[19].y do begin
                                         goxy(1,i);
                                         swrite('[0m[K');
                                         end;
    end;

 procedure fileinfo(f:filelistrec);
    var finfo:mcis;
    X:0..10;
    begin
     fillchar(finfo,sizeof(finfo),#0);
     finfo[1].mci:='%FN';     finfo[2].mci:='%SZ';
     finfo[3].mci:='%DT';     finfo[4].mci:='%FP';
     finfo[5].mci:='%UL';     finfo[6].mci:='%UD';
     finfo[7].mci:='%DL';     finfo[8].mci:='%DM';
     finfo[9].mci:='%D1';     finfo[10].mci:='%D2';
     finfo[11].mci:='%D3';    finfo[12].mci:='%D4';
     finfo[13].mci:='%D5';    finfo[14].mci:='%D6';
     finfo[15].mci:='%D7';    finfo[16].mci:='%D8';
     finfo[17].mci:='%D9';    finfo[18].mci:='%DA';
     finfo[1].str:=f.filename;     finfo[2].str:=strr(f.size);
     finfo[5].str:=f.uploader;     finfo[9].str:=f.description [1];
     finfo[10].str:=f.description[2];     finfo[11].str:=f.description[3];
     finfo[12].str:=f.description[4];     finfo[13].str:=f.description[5];
     finfo[14].str:=f.description[6];     finfo[15].str:=f.description[7];
     finfo[16].str:=f.description[8];     finfo[17].str:=f.description[9];
     finfo[18].str:=f.description[10];
     printfile(Config.Textfile_Dir+'fileinfo.ANS',finfo,false);
     for x:=1 to 10 do
      begin
      goxy(finfo[9].x,finfo[9].y);
      print(f.description[x]);
      end;
   end;

function filepullmenu:byte;
var vx,hx  : byte;
    c      : char;
begin
fillchar(h,sizeof(h),0);
{for vx:=1 to v.max do printxy(v.x[vx],v.y[vx],v.off[vx]);}
printxy(v.x[1],v.y[1],v.on[1]);
fillchar(h,sizeof(h),#0);

h.on [1]:=foba(flist[11].fore,flist[11].back)+' NEXT ';
h.on [2]:=foba(flist[12].fore,flist[12].back)+' PREV ';
h.on [3]:=foba(flist[13].fore,flist[13].back)+' FLAG ';
h.on [4]:=foba(flist[14].fore,flist[14].back)+' INFO ';
h.on [5]:=foba(flist[15].fore,flist[15].back)+' QUIT ';
h.off[1]:=foba(flist[4] .fore,flist[4] .back)+' NEXT ';
h.off[2]:=foba(flist[5] .fore,flist[5] .back)+' PREV ';
h.off[3]:=foba(flist[6] .fore,flist[6] .back)+' FLAG ';
h.off[4]:=foba(flist[7] .fore,flist[7] .back)+' INFO ';
h.off[5]:=foba(flist[8] .fore,flist[8] .back)+' QUIT ';

h.x[1]:=flist[4].x;
h.x[2]:=flist[5].x;
h.x[3]:=flist[6].x;
h.x[4]:=flist[7].x;
h.x[5]:=flist[8].x;

h.y[1]:=flist[4].y;
h.y[2]:=flist[5].y;
h.y[3]:=flist[6].y;
h.y[4]:=flist[7].y;
h.y[5]:=flist[8].y;

h.max:=5;
h.old:=1;
h.cur:=1;

v.cur:=1;
v.old:=1;

for hx:=1 to h.max do printxy(h.x[hx],h.y[hx],h.off[hx]);
repeat
printxy(h.x[H.old]  ,h.y[H.old]  ,h.off[H.old]);
printxy(h.x[h.cur],h.y[h.cur],h.on [h.cur]);
printxy(v.x[V.old] ,v.y[v.old] ,v.off[v.old]);
printxy(v.x[v.cur],v.y[v.cur],v.on [v.cur]);
c:=sreadkey;
case c of
'C',#75:begin; h.old:=h.cur; dec(h.cur); if h.cur=0 then h.cur:=h.max; end;
'D',#77:begin; h.old:=h.cur; inc(h.cur); if h.cur=h.max+1 then h.cur:=1; end;
'A',#80:begin; v.old:=v.cur; inc(v.cur); if v.cur=v.max+1 then v.cur:=1; end;
'B',#72:begin; v.old:=v.cur; dec(v.cur); if v.cur=0 then v.cur:=v.max; end;
end;
until (c=#13) or ((not carrier) and (not localon)) or (loggedoff) or (hungup);;
filepullmenu:=h.cur;
end;


procedure initfilelist(a:boolean);
var x:longint;
    fr:filearearec;
begin
if a then begin
          fillit(flist,sizeof(flist));
          fillit(h,sizeof(h));
          fillit(v,sizeof(v));
          fillit(fl,sizeof(fl));
          flist[1].mci:='%FN';          flist[2].mci:='%FZ';
          flist[3].mci:='%FD';          flist[4].mci:='%01';
          flist[5].mci:='%02';          flist[6].mci:='%03';
          flist[7].mci:='%04';          flist[8].mci:='%05';
          flist[9].mci:='%06';          flist[10].mci:='%07';
          flist[11].mci:='%0A';         flist[12].mci:='%0B';
          flist[13].mci:='%0C';         flist[14].mci:='%0D';
          flist[15].mci:='%0E';         flist[16].mci:='%0F';
          flist[17].mci:='%0G';         flist[18].mci:='%FT';
          flist[19].mci:='%FB';         flist[20].mci:='%FC';
          {page:=1;}
          mark(saveptr);
          new(fcount,init);
          listdone:=false;
          nassign(arealist,config.data_dir+'filearea.dat');
          for x:=1 to fnum do nread(arealist,fa,sizeof(fa));
          nclose(arealist);
          nassign(filelist,config.data_dir+fa.filename);
          end else
              begin
              fcount^.done;
              release(saveptr);
              nclose(filelist)
              end;
end;
