home *** CD-ROM | disk | FTP | other *** search
/ CD Shareware Masterblend / cdsharewaremasterblend.iso / utils / infoplus / infoplus.pas < prev    next >
Pascal/Delphi Source File  |  1990-12-08  |  14KB  |  702 lines

  1. (*
  2. **  INFOPLUS.PAS
  3. **
  4. **  Version 1.41 by Andrew Rossmann 12/8/90
  5. *)
  6.  
  7. (*$A-,B-,D-,L-,F-,I-,N-,O-,R-,S-,V-*)
  8. (*$M 24576, 0, 0*)
  9. program INFOPLUS;
  10.  
  11. uses
  12.   crt, dos, graph, externs, scrprt;
  13.  
  14. const
  15.   qversion = 'Version 1.41';
  16.   qdate = 'December 8, 1990';
  17.   vernum = '1.41';
  18.   BIOSdseg = $0040;
  19.   pgmax = 18;
  20.   pchar = [' '..'~'];
  21.   secsiz = 1024;
  22.   tick1 = 1193180;
  23.   pgnames: array [0..18] of string[32] = (
  24.              'Table of Contents',
  25.              'Machine & ROM Identification',
  26.              'CPU Identification',
  27.              'RAM Identification',
  28.              'Memory Block Listing',
  29.              'Video Identification',
  30.              'Video Information',
  31.              'Keyboard & Mouse Information',
  32.              'Parallel/Serial Port Information',
  33.              'DOS Information',
  34.          {10}'Multiplex Programs',
  35.              'Environment Variables',
  36.              'Device Drivers',
  37.              'DOS Drive Information',
  38.              'BIOS Drive Information',
  39.              'Partition Table Listing',
  40.              'Boot info & DOS drive parameters',
  41.              'CMOS information',
  42.              'Thanks');
  43. type
  44.   char2 = string[2];
  45.  
  46. var
  47.   attrsave : byte;
  48.   country : array[0..33] of byte;
  49.   currdrv : byte;
  50.   devofs : word;
  51.   devseg : word;
  52.   dirsep : set of char;
  53.   DOScofs : word;
  54.   DOScseg : word;
  55.   DOSmem : longint;
  56.   equip : word;
  57.   graphdriver : integer;
  58.   i : word;
  59.   intvec : array[$00..$FF] of pointer;
  60.   lastdrv : byte;
  61.   osmajor : byte;
  62.   osminor : byte;
  63.   pg : 0..pgmax;
  64.   regs : registers;
  65.   switchar : char;
  66.   tlength : byte;
  67.   twidth : byte;
  68.   vidpg : byte;
  69.   x1 : byte;
  70.   x2 : byte;
  71.   xbool1 : boolean;
  72.   xbool2 : boolean;
  73.   xchar1 : char;
  74.   xchar2 : char;
  75.   xword : word;
  76.   gotcountry: boolean;
  77.   c2: char2;
  78.   quiet, endit: boolean;
  79.   ccode: word;
  80.   vidmode: word;
  81.   decimal: char;
  82.  
  83. function getkey2: char2;
  84.   var
  85.     c: char;
  86.     c2: char2;
  87.  
  88.   begin
  89.   c:=ReadKey;
  90.   if c = #0 then
  91.     getkey2:=c + ReadKey
  92.   else
  93.     getkey2:=c;
  94.   end; {getkey2}
  95.  
  96. {^Make sure number entered, not any letters}
  97. function getnum: word;
  98.   var
  99.     inpchar: char;
  100.     number_string: string[2];
  101.     temp, position, code: word;
  102.     row, col: byte;
  103.     finish: boolean;
  104.  
  105.   begin
  106.   row:=WhereY;
  107.   col:=WhereX;
  108.   Write(' ':3);
  109.   GotoXY(col, row);
  110.   temp:=99;
  111.   finish:=false;
  112.   position:=0;
  113.   number_string:='';
  114.   TextColor(LightGray);
  115.   repeat
  116.     inpchar:=ReadKey;
  117.     case inpchar of
  118.       '0'..'9':if position < 2 then
  119.         begin
  120.         Inc(position);
  121.         Inc(number_string[0]);
  122.         number_string[position]:=inpchar;
  123.         Write(inpchar)
  124.         end;
  125.       #8: if position > 0 then
  126.         begin
  127.         Dec(position);
  128.         Dec(number_string[0]);
  129.         Write(^H' '^H)
  130.         end;
  131.       #27: if number_string = '' then
  132.           finish:=true
  133.         else
  134.           begin
  135.           number_string:='';
  136.           GotoXY(col, row);
  137.           ClrEol;
  138.           position:=0
  139.           end;
  140.       #13: finish:=true
  141.     end {case}
  142.   until finish;
  143.   if number_string <> '' then
  144.     Val(number_string, temp, code);
  145.   getnum:=temp
  146.   end; {getnum}
  147.  
  148. procedure caption1(a: string);
  149.   begin
  150.   textcolor(LightGray);
  151.   write(a);
  152.   textcolor(LightCyan)
  153.   end; {caption1}
  154.  
  155. procedure caption2(a: string);
  156.   const
  157.     capterm = ': ';
  158.  
  159.   var
  160.     i: byte;
  161.     xbool: boolean;
  162.  
  163.   begin
  164.   i:=length(a);
  165.   while (i > 0) and (a[i] = ' ') do
  166.     dec(i);
  167.   insert(capterm, a, i + 1);
  168.   caption1(a)
  169.   end; {caption2}
  170.  
  171. function nocarry : boolean;
  172.   begin
  173.   nocarry:=regs.flags and fcarry = $0000
  174.   end; {nocarry}
  175.  
  176. function hex(a : word; b : byte) : string;
  177.   const
  178.     digit : array[$0..$F] of char = '0123456789ABCDEF';
  179.  
  180.   var
  181.     i : byte;
  182.     xstring : string;
  183.  
  184.   begin
  185.   xstring:='';
  186.   for i:=1 to b do
  187.     begin
  188.     insert(digit[a and $000F], xstring, 1);
  189.     a:=a shr 4
  190.     end;
  191.   hex:=xstring
  192.   end; {hex}
  193.  
  194. procedure unknown(a: string; b: word; c: byte);
  195.   begin
  196.   writeln('(unknown', ' ', a, ' ', hex(b, c), ')')
  197.   end; {unknown}
  198.  
  199. procedure caption3(a : string);
  200.   begin
  201.   caption2('  ' + a)
  202.   end; {caption3}
  203.  
  204. procedure yesorno(a : boolean);
  205.   begin
  206.   if a then
  207.     writeln('yes')
  208.   else
  209.     writeln('no')
  210.   end; {yesorno}
  211.  
  212. procedure yesorno2(a: boolean);
  213.   begin
  214.   if a then
  215.     Write('yes')
  216.   else
  217.     Write('no')
  218.   end; {yesorno2}
  219.  
  220. procedure dontknow;
  221.   begin
  222.   writeln('(unknown)')
  223.   end; {dontknow}
  224.  
  225. procedure dontknow2;
  226.   begin
  227.   Write('(unknown)')
  228.   end; {dontknow2}
  229.  
  230. procedure segofs(a, b : word);
  231.   begin
  232.   write(hex(a, 4), ':', hex(b, 4))
  233.   end; {segofs}
  234.  
  235. function showchar(a : char) : char;
  236.   begin
  237.   if a in pchar then
  238.     showchar:=a
  239.   else
  240.     showchar:='.'
  241.   end; {showchar}
  242.  
  243. function power2(y: word): longint;
  244.   begin
  245.   power2:=Trunc(exp((y * 1.0) * ln(2.0)))
  246.   end;
  247.  
  248. procedure pause1;
  249.   var
  250.     xbyte : byte;
  251.     xchar : char2;
  252.     savex, savey: byte;
  253.  
  254.   begin
  255.   xbyte:=textattr;
  256.   endit:=false;
  257.   textcolor(Cyan);
  258.   savex:=WhereX;
  259.   savey:=WhereY;
  260.   Write('( for more)');
  261.   xchar:=getkey2;
  262.   if xchar <> #0#80 then
  263.     begin
  264.     endit:=true;
  265.     c2:=xchar
  266.     end;
  267.   textattr:=xbyte;
  268.   GotoXY(savex, savey);
  269.   Write('            ')
  270.   end; {pause1}
  271.  
  272. procedure pause2;
  273.   var
  274.     xbyte : byte;
  275.  
  276.   begin
  277.   if wherey + hi(windmin) > hi(windmax) then
  278.     begin
  279.     xbyte:=TextAttr;
  280.     TextColor(Cyan);
  281.     pause1;
  282.     if not endit then
  283.       begin
  284.       Clrscr;
  285.       Writeln('(continued)');
  286.       end;
  287.     textattr:=xbyte
  288.     end
  289.   end; {pause2}
  290.  
  291. procedure pause3(extra: byte);
  292.   var
  293.     xbyte: byte;
  294.   begin
  295.   if WhereY + Hi(WindMin) + extra > Hi(WindMax) then
  296.     begin
  297.     xbyte:=TextAttr;
  298.     TextColor(Cyan);
  299.     pause1;
  300.     if not endit then
  301.       begin
  302.       ClrScr;
  303.       Writeln('(continued)');
  304.       end;
  305.     TextAttr:=xbyte
  306.     end
  307.   end; {pause3}
  308.  
  309. function bin4(a : byte) : string;
  310.   const
  311.     digit : array[0..1] of char = '01';
  312.  
  313.   var
  314.     xstring : string;
  315.     i : byte;
  316.  
  317.   begin
  318.   xstring:='';
  319.   for i:=3 downto 0 do
  320.     begin
  321.     insert(digit[a mod 2], xstring, 1);
  322.     a:=a shr 1
  323.     end;
  324.   bin4:=xstring
  325.   end; {bin4}
  326.  
  327. procedure offoron(a : string; b : boolean);
  328.   begin
  329.   caption3(a);
  330.   if b then
  331.     writeln('on')
  332.   else
  333.     writeln('off')
  334.   end; {offoron}
  335.  
  336. procedure zeropad(a : word);
  337.   begin
  338.   if a < 10 then
  339.     write('0');
  340.   write(a)
  341.   end; {zeropad}
  342.  
  343. procedure showvers;
  344.   begin
  345.   if osmajor > 0 then
  346.     begin
  347.     Write(osmajor, decimal);
  348.     zeropad(osminor);
  349.     writeln
  350.     end
  351.   else
  352.     writeln('1', decimal, 'x')
  353.   end; {showvers}
  354.  
  355. function cbw(a, b : byte) : word;
  356.   begin
  357.   cbw:=word(b) shl 8 + a
  358.   end; {cbw}
  359.  
  360. function bin16(a : word) : string;
  361.   function bin8(a : byte) : string;
  362.     begin
  363.     bin8:=bin4(a shr 4) + '_' + bin4(a and $0F)
  364.     end; {bin8}
  365.  
  366.   begin {bin16}
  367.   bin16:=bin8(hi(a)) + '_' + bin8(lo(a))
  368.   end; {bin16}
  369.  
  370. procedure drvname(a : byte);
  371.   begin
  372.   write(chr(ord('A') + a), ': ')
  373.   end; {drvname}
  374.  
  375. procedure media(a, b : byte);
  376.   procedure diskette(a, b, c : byte);
  377.     begin
  378.     writeln('floppy ', a, ' side, ', b, ' sctr, ', c, ' trk')
  379.     end; {diskette}
  380.  
  381.   begin {media}
  382.   caption3('Media');
  383.   case a of
  384.     $FF : diskette(2, 8, 40);
  385.     $FE : diskette(1, 8, 40);
  386.     $FD : diskette(2, 9, 40);
  387.     $FC : diskette(1, 9, 40);
  388.     $F9 : if b = 1 then
  389.       diskette(2, 15, 80)
  390.     else
  391.       diskette(2, 9, 80);
  392.     $F8 : writeln('fixed disk');
  393.     $F0 : diskette(2, 18, 80)
  394.     else
  395.       unknown('media', a, 2)
  396.   end
  397.   end; {media}
  398.  
  399. procedure pagenameclr;
  400.   var
  401.     xbyte: byte;
  402.  
  403.   begin
  404.   xbyte:=TextAttr;
  405.   Window(x1, tlength, x2 - 1, tlength);
  406.   TextColor((TextAttr and $70) shr 4);
  407.   ClrScr;
  408.   TextAttr:=xbyte;
  409.   Window(1, 1, twidth, tlength)
  410.   end; {pagenameclr}
  411.  
  412. procedure Intr(intno: byte; var regs: registers);
  413.   begin
  414.   AltIntr(intno, regs)
  415.   end;
  416.  
  417. procedure MsDos(var regs: registers);
  418.   begin
  419.   AltMsDos(regs)
  420.   end;
  421.  
  422. procedure init;
  423.   var
  424.     xint : integer;
  425.  
  426.   procedure rjustif