home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / i / ifp1s156.zip / PAGE_09.PAS < prev    next >
Pascal/Delphi Source File  |  1992-12-30  |  18KB  |  701 lines

  1. unit page_09;
  2.  
  3. interface
  4.  
  5. uses crt, dos, ifpglobl, ifpcomon;
  6.  
  7. procedure page09;
  8.  
  9. implementation
  10.  
  11. procedure page09;
  12.   const
  13.     weekday: array[0..6] of string[9] = ('Sunday', 'Monday', 'Tuesday',
  14.         'Wednesday', 'Thursday', 'Friday', 'Saturday');
  15.  
  16.   var
  17.     foundit, xbool, wasone: boolean;
  18.     xbyte: byte;
  19.     xchar: char;
  20.     xstring1: string;
  21.     xstring2: string;
  22.     xword1: word;
  23.     xword2: word;
  24.     xword3: word;
  25.     xword4: word;
  26.     xword5: word;
  27.     xword6: word;
  28.     xword7: word;
  29.     xword8: word;
  30.     listseg, listofs: word;
  31.     filecount, usedfiles, tablesize: word;
  32.     dt: DateTime;
  33.     s: string;
  34.  
  35.   procedure showecho(a: word);
  36.     var
  37.       xbyte : byte;
  38.  
  39.     begin
  40.     xbyte:=Mem[DOScseg : a];
  41.     case xbyte of
  42.       $00 : Writeln('off');
  43.       $FF : Writeln('on')
  44.     else
  45.       unknown('status', xbyte, 2)
  46.     end
  47.     end; {showecho}
  48.  
  49.   procedure showbufs(a : word);
  50.     const
  51.       bufsmax = 99;
  52.  
  53.     var
  54.       i : 0..bufsmax + 1;
  55.       xbool : boolean;
  56.       xword1 : word;
  57.       xword2 : word;
  58.       xword3 : word;
  59.  
  60.     begin
  61.     if (osmajor < 4) or (osmajor >= 10) then
  62.       begin
  63.       i:=0;
  64.       xword1:=MemW[DOScseg : a];
  65.       xword2:=MemW[DOScseg : a + 2];
  66.       xbool:=false;
  67.       repeat
  68.         if i <= bufsmax then
  69.           begin
  70.           if xword1 < $FFFF then
  71.             begin
  72.             inc(i);
  73.             xword3:=xword1;
  74.             xword1:=memw[xword2 : xword3];
  75.             xword2:=memw[xword2 : xword3 + 2]
  76.             end
  77.           else
  78.             begin
  79.             xbool:=true;
  80.             Writeln(i)
  81.             end
  82.           end
  83.         else
  84.           begin
  85.           xbool:=true;
  86.           dontknow
  87.           end
  88.       until xbool
  89.       end
  90.     else
  91.       with regs do
  92.         begin
  93.         AX:=$5200;
  94.         MsDos(regs);
  95.         Write(MemW[ES:BX + $3F]:5);
  96.         Caption3('Read-ahead');
  97.         Writeln(MemW[ES:BX + $41]);
  98.         if osmajor = 4 then
  99.           begin
  100.           Caption3('in EMS');
  101.           xword2:=MemW[ES:BX + $12];
  102.           xword1:=MemW[ES:BX + $14];
  103.           case Mem[xword1: xword2 + $C] of
  104.             $00: Writeln('no');
  105.             $FF: begin
  106.                  Write('yes');
  107.                  Caption3('handle');
  108.                  Writeln(MemW[xword1: xword2 + $D])
  109.                  end;
  110.             $01: if Mem[xword1: xword2 + $18] = 0 then
  111.                    Writeln('no')
  112.                  else
  113.                    begin
  114.                    Write('yes');
  115.                    Caption3('handle');
  116.                    Writeln(MemW[xword1: xword2 + $18])
  117.                    end;
  118.           else
  119.             dontknow
  120.           end; {case}
  121.           end
  122.         end
  123.     end; {showbufs}
  124.     (*  BIX ms.dos/secrets #2  *)
  125.  
  126.   procedure showattrib(s: string; value, mask: byte);
  127.     begin
  128.     if value and mask = mask then
  129.       begin
  130.       if wasone then
  131.         Write('/');
  132.       Write(s);
  133.       wasone:=true
  134.       end;
  135.     end; {showattrib}
  136.  
  137.   begin (* procedure page_09 *)
  138.   listseg:=devseg;
  139.   listofs:=devofs;
  140.   window(1, 3, twidth div 2, tlength - 2);
  141.   Caption2('DOS version');
  142.   with regs do
  143.     begin
  144.     AX:=$4452;
  145.     Flags:=Flags and FCarry;
  146.     MsDos(regs);
  147.     if nocarry(regs) then
  148.       begin
  149.       Write('DR-DOS ');
  150.       case AX of
  151.         $1063: Writeln('3', decimal, '41');
  152.         $1065: Writeln('5', decimal, '00');
  153.         $1067: Writeln('6', decimal, '00')
  154.       else
  155.         Writeln('? code ', hex(AX, 4));
  156.       end;
  157.       end
  158.     else
  159.       if osmajor >= 10 then
  160.         begin
  161.         Write('OS/2 ', osmajor div 10, decimal, addzero(osminor));
  162.         Writeln(' DOS session');
  163.         end
  164.       else
  165.         begin
  166.         Write(osmajor, decimal, addzero(osminor));
  167.         if osmajor < 5 then
  168.           Writeln
  169.         else
  170.           begin
  171.           Caption3('revision');
  172.           AX:=$3306;
  173.           MsDos(regs);
  174.           Writeln(Chr((DL and 7) + Ord('A')));
  175.           Caption3('in HMA');
  176.           yesorno2(DH and $10 = $10);
  177.           Caption3('in ROM');
  178.           yesorno(DH and 8 = 8);
  179.           end;
  180.         end
  181.     end;
  182.   with regs do
  183.     begin
  184.     AX:=$3000;
  185.     MsDos(regs);
  186.     if (AL <> osmajor) or (AH <> osminor) then
  187.       begin
  188.       Caption3('SETVER''d to');
  189.       Write(AL, decimal);
  190.       zeropad(AH);
  191.       Writeln
  192.       end
  193.     end;
  194.   Caption2('OEM serial number');
  195.   with regs do
  196.     begin
  197.     AX:=$3000;
  198.     BX:=0;
  199.     MsDos(regs);
  200.     Writeln(hex(BH, 2))
  201.     end;
  202.   Caption2('System date');
  203.   getdate(xword1, xword2, xword3, xword4);
  204.   if xword4 < 7 then
  205.     Write(weekday[xword4])
  206.   else
  207.     Write('(', hex(xword4, 4), ')');
  208.   Write(', ');
  209.   xword5:=cbw(country[0], country[1]);
  210.   xchar:=Chr(country[11]);
  211.   case xword5 of
  212.     $0001: Writeln(xword3, xchar, xword2, xchar, xword1);
  213.     $0002: Writeln(xword1, xchar, xword2, xchar, xword3)
  214.   else
  215.     Writeln(xword2, xchar, xword3, xchar, xword1)
  216.   end;
  217.   Caption2('System time');
  218.   gettime(xword1, xword2, xword3, xword4);
  219.   if country[17] and 1 = 0 then
  220.     case xword1 of
  221.       0: Write('12');
  222.       1..12: zeropad(xword1);
  223.       13..23: Write(xword1 - 12)
  224.     end
  225.   else
  226.     zeropad(xword1);
  227.   Write(Chr(country[13]));
  228.   zeropad(xword2);
  229.   Write(Chr(country[13]));
  230.   zeropad(xword3);
  231.   Write(decimal);
  232.   zeropad(xword4);
  233.   if country[17] and 1 = 0 then
  234.     if xword1 > 11 then
  235.       Write(' pm')
  236.     else
  237.       Write(' am');
  238.   Writeln;
  239.   Caption2('Command load paragraph');
  240.   Writeln(hex(prefixseg, 4));
  241.   getcbreak(xbool);
  242.   offoron('Ctrl-C check', xbool);
  243.   Writeln;
  244.   getverify(xbool);
  245.   offoron('Disk verify', xbool);
  246.   Writeln;
  247.   Caption2('Switch prefix character');
  248.   Writeln(switchar);
  249.   Caption2('\DEV\ prefix for devices');
  250.   with regs do begin
  251.     AX:=$3702;
  252.     MSDOS(regs);
  253.     if DL = $00 then
  254.       Writeln('required')
  255.     else
  256.       Writeln('optional')
  257.   end;
  258.   Caption2('Reset boot');
  259.   xword1:=memw[BIOSdseg : $72];
  260.   case xword1 of
  261.     $0000: Writeln('cold');
  262.     $1234, $1200, $EDCB: Writeln('bypass memory test');
  263.     $4321: Writeln('preserve memory');
  264.     $5678: Writeln('system suspended');
  265.     $9ABC{-25924}: Writeln('manufacturing test mode'); (*!$9ABC*)
  266.     $ABCD{-21555}: Writeln('system POST loop mode') (*!$ABCD*)
  267.   else
  268.     unknown('flag', xword1, 4)
  269.   end;
  270.   Caption2('Boot disk was');
  271.   if osmajor >= 4 then
  272.     with regs do
  273.       begin
  274.       AX:=$3305;
  275.       MsDos(regs);
  276.       Writeln(Chr(DL+$40), ':')
  277.       end
  278.   else
  279.     dontknow;
  280. (*  Byte 12:12 p.178  *)
  281.   with regs do begin
  282.     Caption2('DOS critical flag');
  283.     AX:=$5D06;
  284.     MSDOS(regs);
  285.     segofs(DS, SI);
  286.     Writeln
  287.   end;
  288.   Caption2('DOS busy flag    ');
  289.   segofs(DOScseg, DOScofs);
  290.   Writeln;
  291.   Caption2('Printer echo');
  292.   case osmajor of
  293.     3 : case osminor div 10 of
  294.       0 : dontknow;
  295.       1..3 : showecho($02AC)
  296.       else
  297.         dontknow
  298.     end;
  299.       4,5 : showecho($02FE);
  300.   else
  301.       dontknow
  302.   end;
  303. (*  BIX ms.dos/secrets #501  *)
  304.   Caption2('PrtSc status');
  305.   xbyte:=Mem[BIOSdseg : $0100];
  306.   case xbyte of
  307.     $00 : Writeln('ready');
  308.     $01 : Writeln('busy');
  309.     $FF : Writeln('error on last PrtSc')
  310.     else
  311.       unknown('status', xbyte, 2)
  312.   end;
  313.   Caption2('Memory allocation');
  314.   with regs do begin
  315.     AX:=$5800;
  316.     MSDOS(regs);
  317.     case AL of
  318.       0: Writeln('first fit');
  319.       1: Writeln('best fit');
  320.       2..$3F,$43..$7F,$83..$FF: Writeln('last fit');
  321.       $40: Writeln('hi mem first fit');
  322.       $41: Writeln('hi mem best fit');
  323.       $42: Writeln('hi mem last fit');
  324.       $80: Writeln('frst fit,hi then low');
  325.       $81: Writeln('best fit,hi then low');
  326.       $82: Writeln('last fit,hi then low');
  327.     else
  328.       dontknow
  329.     end
  330.   end;
  331.   Caption2('DOS buffers');
  332.   case osmajor of
  333.     3 : case osminor div 10 of
  334.           0 : showbufs($013F);
  335.           1..3 : showbufs($0038)
  336.         else
  337.           dontknow
  338.         end;
  339.     4,5 : showbufs(0)
  340.   else
  341.     dontknow
  342.   end;
  343.   Caption2('File handle table ');
  344.   xword1:=MemW[prefixseg : $0036];
  345.   xword2:=MemW[prefixseg : $0034];
  346.   SegOfs(xword1, xword2);
  347.   Writeln;
  348.   Caption3('length');
  349.   xword2:=MemW[listseg:listofs + 4];
  350.   xword1:=MemW[listseg:listofs + 6];
  351.   xbool:=false;
  352.   filecount:=0;
  353.   if (xword1 = $FFFF) and (xword2 = $FFFF) then
  354.     filecount:=MemW[PrefixSeg: $32]
  355.   else
  356.     repeat
  357.       xword4:=MemW[xword1:xword2];
  358.       xword3:=MemW[xword1:xword2 + 2];
  359.       filecount:=filecount + MemW[xword1:xword2 + 4];
  360.       if xword4 = $FFFF then
  361.         xbool:=true
  362.       else
  363.         begin
  364.         xword1:=xword3;
  365.         xword2:=xword4
  366.         end
  367.     until xbool;
  368.   Write(filecount:3);
  369.   Caption3('used');
  370.   usedfiles:=0;
  371.   xword1:=MemW[PrefixSeg: $36];
  372.   xword2:=MemW[PrefixSeg: $34];
  373.   while Mem[xword1 : xword2] < $FF do begin
  374.     inc(usedfiles);
  375.     inc(xword2)
  376.   end;
  377.   Write(usedfiles:3);
  378.   Window(1 + twidth div 2, 3, twidth, tlength - 2);
  379.   Caption2('File Control Blocks');
  380.   if osmajor >= 10 then
  381.     dontknow
  382.   else
  383.     begin
  384.     Writeln;
  385.     Caption3('amount');
  386.     if (osmajor >= 4) or ((osmajor = 3) and (osminor > 0)) then
  387.       begin
  388.       xword3:=MemW[listseg:listofs + $1E];
  389.       xword2:=MemW[listseg:listofs + $1A];
  390.       xword1:=MemW[listseg:listofs + $1C]
  391.       end
  392.     else
  393.       begin
  394.       xword3:=MemW[listseg:listofs + $26];
  395.       xword2:=MemW[listseg:listofs + $22];
  396.       xword1:=MemW[listseg:listofs + $24]
  397.       end;
  398.     Write(MemW[xword1:xword2 + 4]:3);
  399.     if (osmajor >= 5) and (osmajor < 10) then
  400.       Writeln
  401.     else
  402.       begin
  403.       Caption3('protected');
  404.       Writeln(xword3:3);
  405.       end;
  406.     end;
  407.   Caption2('Stacks');
  408.   if (osmajor = 3) or (osmajor >= 10) then
  409.     dontknow
  410.   else
  411.     begin
  412.     xword1:=MemW[listseg:listofs - 2];
  413.     xword4:=0; {# of stacks}
  414.     xword5:=0; {size of stacks}
  415.     if (Mem[xword1:0] <> $4D) or (MemW[xword1:1] <> 8) then
  416.       dontknow
  417.     else
  418.       begin
  419.       xword3:=xword1 + MemW[xword1:3] + 1;
  420.       xword2:=xword1 + 1;
  421.       xbool:=false;
  422.       repeat
  423.         xchar:=Chr(Mem[xword2:0]);
  424.         if xchar = 'S' then
  425.           begin
  426.           xword4:=MemW[xword2 + 1:2];
  427.           xword5:=MemW[xword2 + 1:6];
  428.           xbool:=true;
  429.           end;
  430.         if (xchar = 'M') or (xchar = 'Z') then
  431.           xbool:=true;
  432.         xword2:=xword2 + MemW[xword2:3] + 1;
  433.         if xword2 >= xword3 then
  434.          xbool:=true;
  435.       until xbool;
  436.       Writeln;
  437.       Caption3('amount');
  438.       Write(xword4:3);
  439.       Caption3('size each (bytes)');
  440.       Writeln(xword5:3);
  441.       end
  442.     end;
  443.   if (osmajor = 5) or (osmajor >= 20) then
  444.     with regs do
  445.       begin
  446.       Caption2('UMBs');
  447.       AH:=$58;
  448.       AL:=2;
  449.       MsDos(regs);
  450.       if AL = 0 then
  451.         Write('NOT ');
  452.       Writeln('in DOS memory chain');
  453.       end;
  454.   Writeln;
  455.   TextColor(LightCyan);
  456.   Write('------ International Information -----');
  457.   Writeln;
  458.   Caption2('Global code page');
  459.   with regs do
  460.     begin
  461.     AX:=$6601;
  462.     MsDos(Regs);
  463.     if AL = $01 then
  464.       begin
  465.       Writeln;
  466.       Caption3('Active');
  467.       Write(BX);
  468.       Caption3('Default');
  469.       Writeln(DX)
  470.       end
  471.     else
  472.       Writeln('N/A')
  473.     end;
  474.   Caption2('Country code');
  475.   Writeln(ccode);
  476.   case ccode of
  477.     785: s:='Saudi Arabia';
  478.      32: s:='Belgium';
  479.      55: s:='Brazil';
  480.       2: s:='French Canada';
  481.      42: s:='Czechoslovakia';
  482.      45: s:='Denmark';
  483.     358: s:='Finland';
  484.      33: s:='France';
  485.      49: s:='Germany';
  486.      36: s:='Hungary';
  487.      61: s:='International English';
  488.     972: s:='Israel';
  489.      39: s:='Italy';
  490.      81: s:='Japan';
  491.       3: s:='Latin America';
  492.      31: s:='Netherlands';
  493.      47: s:='Norway';
  494.      48: s:='Poland';
  495.     351: s:='Portugal';
  496.      34: s:='Spain';
  497.      46: s:='Sweden';
  498.      41: s:='Switzerland';
  499.      44: s:='United Kingdom';
  500.       1: s:='United States';
  501.      38: s:='Yugoslavia';
  502.   else
  503.     s:='Unknown';
  504.   end;
  505.   Caption3('Country');
  506.   Writeln(s);
  507.   Caption2('Thousands separator character');
  508.   Writeln(Chr(country[7]));
  509.   Caption2('Decimal separator character');
  510.   Writeln(decimal);
  511.   Caption2('Data-list separator character');
  512.   Writeln(Chr(country[22]));
  513.   Caption2('Date format');
  514.   xword1:=cbw(country[0], country[1]);
  515.   xchar:=Chr(country[11]);
  516.   case xword1 of
  517.     0: Writeln('USA (mm', xchar, 'dd', xchar, 'yy)');
  518.     1: Writeln('Europe (dd', xchar, 'mm', xchar, 'yy)');
  519.     2: Writeln('Japan (yy', xchar, 'mm', xchar, 'dd)')
  520.   else
  521.     unknown('format', xword1, 4)
  522.   end;
  523.   Caption3('Separator character');
  524.   Writeln(xchar);
  525.   Caption2('Time format');
  526.   if (country[17] and $01) = $00 then
  527.     Write('12')
  528.   else
  529.     Write('24');
  530.   Writeln('-hour');
  531.   Caption3('Separator character');
  532.   Writeln(Chr(country[13]));
  533.   Caption2('Currency format');
  534.   xstring1:='xxxx';
  535.   insert(Chr(country[7]), xstring1, 2);
  536.   xstring1:=xstring1 + decimal;
  537.   for i:=1 to country[16] do
  538.     xstring1:=xstring1 + 'y';
  539.   xstring2:='';
  540.   i:=2;
  541.   xchar:=Chr(country[i]);
  542.   while (i <= 6) and (xchar > #0) do
  543.     begin
  544.     xstring2:=xstring2 + xchar;
  545.     Inc(i);
  546.     xchar:=Chr(country[i])
  547.     end;
  548.   case country[15] and $03 of
  549.     $00 : xstring1:=xstring2 + xstring1;
  550.     $01 : xstring1:=xstring1 + xstring2;
  551.     $02 : xstring1:=xstring2 + ' ' + xstring1;
  552.     $03 : xstring1:=xstring1 + ' ' + xstring2;
  553.     $04 : begin
  554.           Delete(xstring1, 6, 1);
  555.           Insert(xstring2, xstring1, 6)
  556.           end
  557.   end {case};
  558.   Writeln(xstring1);
  559.   Caption2('Case map call address');
  560.   segofs(cbw(country[20], country[21]), cbw(country[18], country[19]));
  561.   Writeln;
  562.   pause1;
  563.   if endit then
  564.     Exit;
  565.   Window(1, 3, twidth, tlength - 2);
  566.   ClrScr;
  567.   Caption2('Open file handles');
  568.   Writeln;
  569.   xword2:=MemW[listseg:listofs + 4];
  570.   xword1:=MemW[listseg:listofs + 6];
  571.   xbool:=false;
  572.   if (xword1 = $FFFF) or (xword2 = $FFFF) then
  573.     Writeln('  Unable to determine under OS/2!')
  574.   else
  575.     begin
  576.     if osmajor = 3 then
  577.       tablesize:=$35
  578.     else
  579.       tablesize:=$3B;
  580.     repeat
  581.       pause3(-2);
  582.       if endit then
  583.         Exit;
  584.       xword4:=MemW[xword1:xword2];
  585.       xword3:=MemW[xword1:xword2 + 2];
  586.       if xword4 = $FFFF then
  587.         xbool:=true;
  588.       filecount:=MemW[xword1:xword2 + 4];
  589.       usedfiles:=0;
  590.       Caption3('Table at');
  591.       segofs(xword1, xword2);
  592.       Caption3('table size (handles)');
  593.       Writeln(filecount);
  594.       foundit:=false;
  595.       xword2:=xword2 + 6;
  596.       repeat
  597.         if MemW[xword1:xword2] <> 0 then
  598.           begin
  599.           pause3(-3);
  600.           if endit then
  601.             Exit;
  602.           foundit:=true;
  603.           xstring1:='';
  604.           for xword8:=xword2 + $20 to xword2 + $2A do
  605.             xstring1:=xstring1 + Chr(Mem[xword1:xword8]);
  606.           if Copy(xstring1, 9, 3) <> '   ' then
  607.             Insert('.', xstring1, 9)
  608.           else
  609.             Insert(' ', xstring1, 9);
  610.           Write('  ', xstring1);
  611.           Caption3('open mode');
  612.           case MemW[xword1:xword2 + 2] and 7 of
  613.             0: Write('read');
  614.             1: Write('write');
  615.             2: Write('read/write');
  616.             3..7: Write('????');
  617.           end;
  618.           Caption3('sharing mode');
  619.           case (MemW[xword1:xword2 + 2] and $70) shr 4 of
  620.             0: Write('compatible');
  621.             1: Write('deny all');
  622.             2: Write('deny write');
  623.             3: Write('deny read');
  624.             4: Write('deny none');
  625.             5..7: Write('????');
  626.           end;
  627.           Caption3('inherit');
  628.           yesorno((MemW[xword1:xword2 + 2] and $80) = $80);
  629.           Caption3('              attributes');
  630.           xbyte:=Mem[xword1:xword2 + 4];
  631.           wasone:=false;
  632.           showattrib('read-only', xbyte, 1);
  633.           showattrib('hidden', xbyte, 2);
  634.           showattrib('system', xbyte, 4);
  635.           showattrib('volume label', xbyte, 8);
  636.           showattrib('directory', xbyte, $10);
  637.           showattrib('archive', xbyte, $20);
  638.           if not wasone then
  639.             Write('(none)');
  640.           Writeln;
  641.           Caption3('              remote');
  642.           yesorno2((MemW[xword1:xword2 + 5] and $8000) = $8000);
  643.           Caption3('date');
  644.           UnPackTime(MemL[xword1:xword2 + $D], dt);
  645.           xword5:=cbw(country[0], country[1]);
  646.           xchar:=Chr(country[11]);
  647.           case xword5 of
  648.             $0001: Write(dt.day, xchar, dt.month, xchar, dt.year);
  649.             $0002: Write(dt.year, xchar, dt.month, xchar, dt.day)
  650.           else
  651.             Write(dt.month, xchar, dt.day, xchar, dt.year)
  652.           end;
  653.           Caption3('time');
  654.           if country[17] and 1 = 0 then
  655.             case dt.hour of
  656.               0: Write('12');
  657.               1..12: zeropad(dt.hour);
  658.               13..23: Write(dt.hour - 12)
  659.             end
  660.           else
  661.             zeropad(dt.hour);
  662.           Write(Chr(country[13]));
  663.           zeropad(dt.min);
  664.           Write(Chr(country[13]));
  665.           zeropad(dt.sec);
  666.           if country[17] and 1 = 0 then
  667.             if dt.hour > 11 then
  668.               Write(' pm')
  669.             else
  670.               Write(' am');
  671.           Writeln;
  672.           Caption3('              size (bytes)');
  673.           Write(MemL[xword1:xword2 + $11], ' (', (MemL[xword1:xword2 + $11] / 1024.0):0:1, 'K)');
  674.           if (xstring1 <> 'AUX         ') and (xstring1 <> 'CON         ') and
  675.             (xstring1 <> 'PRN         ') then
  676.               begin
  677.               Caption3('owner PSP (hex)');
  678.               Write(hex(MemW[xword1:xword2 + $31], 4));
  679.               end
  680.           else
  681.             Write(' DOS device');
  682.           Inc(usedfiles);
  683.           xword2:=xword2 + tablesize;
  684.           Writeln;
  685.           end
  686.         else
  687.           Inc(usedfiles);
  688.       until usedfiles = filecount;
  689.       if not foundit then
  690.         Writeln('  (none used)');
  691.       if not xbool then
  692.         begin
  693.         xword1:=xword3;
  694.         xword2:=xword4
  695.         end;
  696.     until xbool;
  697.     end;
  698.   end;
  699.  
  700. end.
  701.