home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / dos / sysinfo / ver1 / demo.c next >
Encoding:
C/C++ Source or Header  |  1994-03-08  |  55.5 KB  |  1,373 lines

  1.  
  2.    /**********************************************************************\
  3.    *                                                                      *
  4.    * Author:   Paul Lapsansky                                             *
  5.    * Date:     03/03/94                                                   *
  6.    *                                                                      *
  7.    * File:     demo.c                                                     *
  8.    *                                                                      *
  9.    * Descrpt:  Demonstrates functions found in the SYSTEM INFO LIBRARY.   *
  10.    *                                                                      *
  11.    * Language: Borland C++ 2.0+                                           *
  12.    *                                                                      *
  13.    * Available on: All machines.                                          *
  14.    *                                                                      *
  15.    * Restrictions: None.                                                  *
  16.    *                                                                      *
  17.    \**********************************************************************/
  18.  
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <conio.h>
  22. #include <string.h>
  23. #include <alloc.h>
  24. #include "sysinfo.h"
  25.  
  26. void hardware(void);
  27. void memory(void);
  28. void video(void);
  29. void dos(void);
  30. void mouse(void);
  31. void shells(void);
  32. void drives(void);
  33. void network(void);
  34.  
  35. void main(void)
  36. {
  37.    int error;                            // error code
  38.    int x,y;                              // x and y coordinates
  39.    int num;                              // logical drive number
  40.    int code;                             // ascii code
  41.    int model,submodel,rev;               // model information
  42.    int cpu,npu;                          // processor information
  43.    int DMA3,s8259,realtime,keyint,       // feature byte information
  44.        event,extbios,MCA;
  45.    long ext,exta;                        // extended memory
  46.    int ems,emsa;                         // EMS memory
  47.    long xmsa,xmsb;                       // XMS memory
  48.    int vram;                             // video card memory
  49.    int major,minor,drvMaj,drvMin;        // version information              
  50.    int A20,HMA;                          // XMS information
  51.    int handles,segment;                  // EMS information
  52.    int emm;                              // '386 EMM type
  53.    int card;                             // video card type
  54.    int buttons,type,irq;                 // mouse information
  55.    int oem;                              // DOS OEM number
  56.    int drdos;                            // DR-DOS version
  57.    int mode;                             // Windows mode
  58.    int dblspace,stacker,mscdex;          // installed flags
  59.    int a,b;                              // floppy drive type
  60.    int lastdrive;                        // available drives
  61.    int removable,remote;                 // drive type
  62.    int heads,cyl,sectors;                // hard-drive information
  63.    int version,sub,conn,use,vol,peak;    // NetWare File Server Information
  64.    int year,month,day,hour,min,sec,week; // login date and time
  65.  
  66.    long SecPerClus,FreeClus,BytesPerSec, // misc. drive space information
  67.         TotalClus,ClusSize,FreeSpace,
  68.         TotalSpace;
  69.  
  70.    char *drive;                          // drive letter
  71.    char *pcdate;                         // system BIOS date
  72.    char *server;                         // server name
  73.    char *user;                           // user name
  74.  
  75.    _setcursortype(_NOCURSOR);            // turn off cursor
  76.  
  77.    /**********************************************************************\
  78.    *                 Display Hardware Information Screen                  *
  79.    \**********************************************************************/ 
  80.  
  81.    clrscr();                             // clear screen
  82.    hardware();                           // draw hardware screen
  83.    highvideo();                          // turn on high-intensity
  84.    textattr(31);                         // white on blue
  85.  
  86.    getID(&model,&submodel,&rev);         // get model information
  87.    pcdate=biosDate();                    // get BIOS date
  88.  
  89.    gotoxy(24,9);
  90.    switch (model) {                      // display model type
  91.      case 0xFF:
  92.        switch (submodel) {
  93.          case 0x46:
  94.            cputs("Olivetti");
  95.            break;
  96.          default:
  97.            cputs("IBM PC or compatible");
  98.        }
  99.        break;
  100.      case 0xFE:
  101.        switch (submodel) {
  102.          case 0x43:
  103.            cputs("Olivetti");
  104.            break;
  105.          default:
  106.            cputs("IBM PC/XT or compatible");
  107.        }
  108.        break;
  109.      case 0xFD:
  110.        cputs("IBM PCjr");
  111.        break;
  112.      case 0xFC:
  113.        switch (submodel) {
  114.          case 0x02:
  115.            cputs("IBM XT-286");
  116.            break;
  117.          case 0x04:
  118.            cputs("PS/2");
  119.            break;
  120.          case 0x05:
  121.            cputs("PS/2");
  122.            break;
  123.          case 0x06:
  124.            cputs("IBM 7552");
  125.            break;
  126.          case 0x08:
  127.            cputs("Epson");
  128.            break;
  129.          case 0x09:
  130.            cputs("PS/2");
  131.            break;
  132.          case 0x0B:
  133.            cputs("PS/1");
  134.            break;
  135.          case 0x20:
  136.            cputs("Compaq");
  137.            break;
  138.          case 0x30:
  139.            cputs("Epson");
  140.            break;
  141.          case 0x31:
  142.            cputs("Epson");
  143.            break;
  144.          case 0x33:
  145.            cputs("Epson");
  146.            break;
  147.          case 0x42:
  148.            cputs("Olivetti");
  149.            break;
  150.          case 0x45:
  151.            cputs("Olivetti");
  152.            break;
  153.          case 0x48:
  154.            cputs("Olivetti");
  155.            break;
  156.          case 0x4F:
  157.            cputs("Olivetti");
  158.            break;
  159.          case 0x50:
  160.            cputs("Olivetti");
  161.            break;
  162.          case 0x51:
  163.            cputs("Olivetti");
  164.            break;
  165.          case 0x52:
  166.            cputs("Olivetti");
  167.            break;
  168.          case 0x94:
  169.            cputs("Zenith 386");
  170.            break;
  171.          default:
  172.            cputs("IBM AT or compatible");
  173.        }
  174.        break;
  175.      case 0xFB:
  176.        switch (submodel) {
  177.          case 0x4C:
  178.            cputs("Olivetti");
  179.            break;
  180.          default:
  181.            cputs("IBM PC/XT or compatible");
  182.        }
  183.        break;
  184.      case 0xFA:
  185.        switch (submodel) {
  186.          case 0x4E:
  187.            cputs("Olivetti");
  188.            break;
  189.          default:
  190.            cputs("PS/2");
  191.        }
  192.        break;
  193.      case 0xF9:
  194.        cputs("PC Convertible");
  195.        break;
  196.      case 0xF8:
  197.        switch (submodel) {
  198.          case 0x0E:
  199.            cputs("PS/1");
  200.            break;
  201.          case 0x0F:
  202.            cputs("PS/1");
  203.            break;
  204.          case 0x1F:
  205.            cputs("PS/ValuePoint");
  206.            break;
  207.          case 0x30:
  208.            cputs("PS/1");
  209.            break;
  210.          case 0x49:
  211.            cputs("PS/ValuePoint");
  212.            break;
  213.          case 0x4A:
  214.            cputs("PS/ValuePoint");
  215.            break;
  216.          case 0x4B:
  217.            cputs("PS/ValuePoint");
  218.            break;
  219.          case 0x5E:
  220.            cputs("IBM ThinkPad");
  221.            break;
  222.          case 0x61:
  223.            cputs("Olivetti");
  224.            break;
  225.          case 0x62:
  226.            cputs("Olivetti");
  227.            break;
  228.          default:
  229.            cputs("PS/2");
  230.        }
  231.        break;
  232.      case 0xE1:
  233.        cputs("PS/2");
  234.        break;
  235.      case 0x9A:
  236.        cputs("Compaq XT");
  237.        break;
  238.      case 0x30:
  239.        cputs("Sperry PC");
  240.        break;
  241.      case 0x2D:
  242.        cputs("Compaq Deskpro");
  243.        break;
  244.      default:
  245.        cputs("Unknown model!");
  246.    }
  247.  
  248.    gotoxy(24,10);                       
  249.    cprintf("%02X %02X %02X",model,submodel,rev); // display model I.D.
  250.  
  251.    gotoxy(24,11);                        
  252.    cputs(pcdate);                        // display BIOS date
  253.  
  254.    cpu=getCPU();                         // get processor type
  255.  
  256.    gotoxy(24,12);                        
  257.    switch (cpu) {                        // display processor type
  258.      case 1:
  259.        cputs("NEC V20");
  260.        break;
  261.      case 2:
  262.        cputs("8088");
  263.        break;
  264.      case 3:
  265.        cputs("80186");
  266.        break;
  267.      case 4:
  268.        cputs("80286");
  269.        break;
  270.      case 5:
  271.        cputs("80386");
  272.        break;
  273.      case 6:
  274.        cputs("80486");
  275.    }
  276.  
  277.    npu=getNPU();                         // get math-coprocessor type
  278.  
  279.    gotoxy(24,13);                        
  280.    switch (npu) {                        // display math co-processor type
  281.      case 1:
  282.        cputs("8087");
  283.        break;
  284.      case 2:
  285.        cputs("80287");
  286.        break;
  287.      case 3:
  288.        if(cpu==6)                        // '486DX co-processor returns 80387
  289.          cputs("Internal");
  290.        else
  291.          cputs("80387");
  292.        break;
  293.      default:
  294.        cputs("Not installed");
  295.    }
  296.    
  297.    gotoxy(24,14);
  298.    cprintf("%d",getCOM());               // display number of serial ports
  299.  
  300.    gotoxy(24,15);                        
  301.    cprintf("%d",getLPT());               // display number of parallel ports
  302.  
  303.    gotoxy(24,16);                    
  304.    if(chkEnhKeyb())                      // get keyboard type
  305.      cputs("Enhanced Keyboard");
  306.    else
  307.      cputs("Standard Keyboard");
  308.  
  309.                                          // get feature byte information
  310.    if(!getFeatures(&DMA3,&s8259,&realtime,&keyint,&event,&extbios,&MCA)) {
  311.      textattr(28);                       // bright red on blue
  312.      gotoxy(75,10);                       
  313.      if(DMA3)                            // display if DMA3 used
  314.        cputs("yes");
  315.      else
  316.        cputs("no");
  317.      gotoxy(75,11);
  318.      if(s8259)                           // display if a slave 8259 available
  319.        cputs("yes");
  320.      else
  321.        cputs("no");
  322.      gotoxy(75,12);                      
  323.      if(realtime)                        // display if a realtime clock is avail
  324.        cputs("yes");
  325.      else
  326.        cputs("no");
  327.      gotoxy(75,13);
  328.      if(keyint)                          // display if keyboard intercept avail
  329.        cputs("yes");
  330.      else
  331.        cputs("no");
  332.      gotoxy(75,14);                     
  333.      if(event)                          // display if external event available
  334.        cputs("yes");
  335.      else
  336.        cputs("no");
  337.      gotoxy(75,15);                     
  338.      if(extbios)                        // display if extended BIOS available
  339.        cputs("yes");
  340.      else
  341.        cputs("no");
  342.      gotoxy(75,16);                     
  343.      if(MCA)                            // display if MCA bus
  344.        cputs("yes");
  345.      else
  346.        cputs("no");
  347.    }
  348.  
  349.    getch();                             // wait for keystroke
  350.    textattr(15);                        // white on black
  351.    clrscr();                            // clear screen
  352.    
  353.    /**********************************************************************\
  354.    *                       Display Memory Screen                          *
  355.    \**********************************************************************/ 
  356.  
  357.    memory();                            // draw memory screen      
  358.    highvideo();                         // turn on high-intensity
  359.    textattr(31);                        // white on blue
  360.  
  361.    gotoxy(32,8);                        
  362.    cprintf("%dK",getRAM());             // display total conventional memory
  363.  
  364.    gotoxy(32,9);                        
  365.    cprintf("%luK",farcoreleft()/1024);  // display free conventional memory
  366.  
  367.    if(cpu > 3) {                        // check for '286 or higher
  368.      gotoxy(32,11);              
  369.      ext=getExt();                      // get total extended memory
  370.      cprintf("%ldK",ext);               // display total extended memory
  371.      gotoxy(32,12);                  
  372.      exta=getAvailExt();                // get available extended memory
  373.      cprintf("%ldK",exta);              // display available extended memory
  374.      if(chkXMS()) {                     // check for XMS driver 
  375.        if(!getXMSa(&xmsa,&xmsb)) {      // get XMS memory
  376.          gotoxy(32,14);                     
  377.          cprintf("%ldK",xmsa);          // display available XMS memory
  378.          gotoxy(32,15);
  379.          cprintf("%ldK",xmsb);          // display largest XMS block
  380.        }
  381.    
  382.        if(!getXMSv(&major,&minor,&drvMaj,&drvMin)) {  // get XMS version
  383.          gotoxy(32,16);
  384.          cprintf("%d.%02d",major,minor);   // display XMS version
  385.          gotoxy(32,17);
  386.          cprintf("%d.%02d",drvMaj,drvMin); // display XMS driver version
  387.        }
  388.  
  389.        if(!getXMSi(&HMA,&A20)) {        // get XMS information
  390.          textattr(28);                  // bright red on blue
  391.          gotoxy(32,18);
  392.          if(A20)                        // display if A20 enabled
  393.            cputs("Enabled");
  394.          else
  395.            cputs("Not Enabled");
  396.          gotoxy(32,19);
  397.          if(HMA)                        // display if HMA available
  398.            cputs("Available");
  399.          else
  400.            cputs("Not Available");
  401.          textattr(31);                  // white on blue
  402.        }
  403.      }
  404.    }
  405.  
  406.    if(chkEMS()) {                       // check for EMS memory
  407.      if(!getEMS(&ems,&emsa)) {          // get EMS memory
  408.        gotoxy(68,8);
  409.        cprintf("%dK",ems*16);           // display total EMS memory
  410.        gotoxy(68,9);
  411.        cprintf("%dK",emsa*16);          // display available EMS memory
  412.      }
  413.  
  414.      if(!getEMSv(&major,&minor)) {      // get EMS driver version
  415.        gotoxy(68,10);
  416.        cprintf("%d.%02d",major,minor);  // display EMS driver version
  417.      }
  418.  
  419.      if(!getEMSi(&handles,&segment)) {  // get EMS information
  420.        gotoxy(68,11);
  421.        cprintf("%X",segment);           // display EMS page frame address
  422.        gotoxy(68,12);
  423.        cprintf("%d",handles);           // display handles used
  424.      }
  425.    }
  426.    else {
  427.      gotoxy(68,8);
  428.      cputs("0K");                     // display total EMS memory
  429.      gotoxy(68,9);
  430.      cputs("0K");                     // display available EMS memory
  431.    }
  432.  
  433.    if(cpu > 3) {                        // check for '286 or higher
  434.      if(chkDPMI()) {                    // check for DPMI driver
  435.        textattr(28);                    // bright red on blue
  436.        gotoxy(68,14);
  437.        cputs("yes");
  438.        textattr(31);                    // white on blue
  439.        if(!getDPMIv(&major,&minor)) {   // get DPMI version
  440.          gotoxy(68,15);
  441.          cprintf("%d.%02d",major,minor);// display DPMI version
  442.        }
  443.      }
  444.      else {
  445.        textattr(28);                    // bright red on blue
  446.        gotoxy(68,14);
  447.        cputs("no");
  448.        textattr(31);                    // white on blue
  449.      }
  450.    }
  451.    else {
  452.      textattr(28);                    // bright red on blue
  453.      gotoxy(68,14);
  454.      cputs("no");
  455.      textattr(31);                    // white on blue
  456.    }
  457.  
  458.    emm = 0;                           // default to EMM not installed
  459.    if(cpu > 4 && chkXMS()) {          // check for '386 or higher and XMS
  460.      emm=getEMM();                    // get '386 Extended Memory Manager type
  461.      gotoxy(35,21);
  462.      switch (emm) {
  463.        case 1:
  464.          cputs("Quadtel QMAPS or Hewlett-Packard HPMM.SYS");
  465.          break;
  466.        case 2:
  467.          cputs("Microsoft EMM386.EXE");
  468.          break;
  469.        case 3:
  470.          cputs("Microsoft Windows 3.x WIN386.EXE");
  471.          break;
  472.        case 4:
  473.          cputs("DR-DOS 6.0 EMM386.SYS");
  474.          break;
  475.        case 5:
  476.          cputs("Qualitas 386MAX");
  477.          break;
  478.        case 6:
  479.          cputs("V Communication's Memory Commander");
  480.          break;
  481.        case 7:
  482.          cputs("Quarterdeck QEMM-386");
  483.          break;
  484.        case 8:
  485.          cputs("Helix Netroom RM386");
  486.          break;
  487.        default:
  488.          cputs("Unknown or 386 Memory Manager not installed!");
  489.      }
  490.    }
  491.  
  492.    if(emm > 0) {                        // check for extended memory manager
  493.      if(chkVCPI()) {                    // check for VCPI driver
  494.        textattr(28);                    // bright red on blue
  495.        gotoxy(68,17);
  496.        cputs("yes");
  497.        textattr(31);                    // white on blue
  498.        getVCPIv(&major,&minor);         // get VCPI version
  499.        gotoxy(68,18);
  500.        cprintf("%d.%02d",major,minor);  // display VCPI version
  501.      }
  502.      else {
  503.        textattr(28);                    // bright red on blue
  504.        gotoxy(68,17);
  505.        cputs("no");
  506.        textattr(31);                    // white on blue
  507.      }
  508.    }
  509.    else {
  510.      textattr(28);                      // bright red on blue
  511.      gotoxy(68,17);
  512.      cputs("no");
  513.      textattr(31);                      // white on blue
  514.    }
  515.  
  516.    getch();                             // wait for keystroke
  517.    textattr(15);                        // white on black
  518.    clrscr();                            // clear screen
  519.  
  520.    /**********************************************************************\
  521.    *                   Display Video Information Screen                   *
  522.    \**********************************************************************/ 
  523.  
  524.    video();                             // draw video screen
  525.    highvideo();                         // turn on high-intensity
  526.    textattr(31);                        // white on blue
  527.  
  528.    gotoxy(42,10);
  529.  
  530.    card=getVideo();                     // get video card type
  531.  
  532.    switch (card) {
  533.      case 1:
  534.        cputs("MDA - Monochrome Display Adapter");
  535.        break;
  536.      case 2:
  537.        cputs("HGA - Hercules Graphics Adapter");
  538.        break;
  539.      case 3:
  540.        cputs("CGA - Color Graphics Adapter");
  541.        break;
  542.      case 4:
  543.        cputs("EGA - Enhanced Graphics Adapter");
  544.        break;
  545.      case 5:
  546.        cputs("MCGA - Multi-Color Graphics Array");
  547.        break;
  548.      case 6:
  549.        cputs("VGA - Video Graphics Array");
  550.        break;
  551.    }
  552.  
  553.    if(card > 4) {                       // check for EGA or higher
  554.      gotoxy(42,11);
  555.      if(getCRT())
  556.        cputs("Monochrome");
  557.      else
  558.        cputs("Color");
  559.    }
  560.  
  561.    if(card == 6) {                      // check for VGA
  562.      if(getVESA(&major,&minor,&vram)) { // check for VESA support
  563.        textattr(28);                    // bright red on blue
  564.        gotoxy(42,14);
  565.        cputs("yes");
  566.        textattr(31);                    // white on blue
  567.        gotoxy(42,15);
  568.        cprintf("%d.%d",major,minor);    // display VESA version
  569.        gotoxy(42,16);
  570.        cprintf("%dK",vram);             // display Video RAM
  571.      }
  572.      else {
  573.        textattr(28);                    // bright red on blue
  574.        gotoxy(42,14);
  575.        cputs("no");
  576.        textattr(31);                    // white on blue
  577.      }
  578.    }
  579.    else {
  580.      textattr(28);                      // bright red on blue
  581.      gotoxy(42,14);
  582.      cputs("no");
  583.      textattr(31);                      // white on blue
  584.    }
  585.  
  586.    getch();                             // wait for keystroke
  587.    textattr(15);                        // white on black
  588.    clrscr();                            // clear screen
  589.  
  590.    /**********************************************************************\
  591.    *                    Display DOS Information Screen                    *
  592.    \**********************************************************************/ 
  593.  
  594.    dos();                               // draw DOS screen
  595.    highvideo();                         // turn on high-intensity
  596.    textattr(31);                        // white on blue
  597.  
  598.    getDosV(&major,&minor);              // get DOS version
  599.    oem=getDosOem();                     // get DOS OEM number
  600.    drdos=getDrDosV();                   // get DR-DOS type
  601.  
  602.    gotoxy(21,8);
  603.    cprintf("%d.%02d",major,minor);      // display DOS version
  604.  
  605.    gotoxy(26,8);
  606.    if(major==6 && !oem)                 // check for IBM DOS 6.1
  607.      cputs("(IBM DOS 6.1)");
  608.  
  609.    if(drdos) {                          // check for DR-DOS
  610.      switch (drdos) {
  611.        case 0x01:
  612.          cputs("(Multi-User DR-DOS)");
  613.          break;
  614.        case 0x60:
  615.          cputs("(DOS Plus)");
  616.          break;
  617.        case 0x63:
  618.          cputs("(DR-DOS 3.41)");
  619.          break;
  620.        case 0x64:
  621.          cputs("(DR-DOS 3.42)");
  622.          break;
  623.        case 0x65:
  624.          cputs("(DR-DOS 5.0)");
  625.          break;
  626.        case 0x67:
  627.          cputs("(DR-DOS 6.0)");
  628.          break;
  629.        case 0x70:
  630.          cputs("(PalmDOS)");
  631.          break;
  632.        case 0x71:
  633.          cputs("(DR-DOS 6.0)");
  634.          break;
  635.        case 0x72:
  636.          cputs("(Novell DOS 7.0)");
  637.      }
  638.    }
  639.  
  640.    if(get4DosV(&major,&minor))          // check for 4DOS
  641.      cprintf("(4DOS %d.%02d)",major,minor);
  642.  
  643.    gotoxy(21,9);
  644.    cprintf("%02Xh",oem);                // display OEM number
  645.    if(!drdos) {
  646.      gotoxy(26,9);
  647.      switch (oem) {
  648.        case 0x00:
  649.          cputs("(PC-DOS)");
  650.          break;
  651.        case 0x01:
  652.          cputs("(Compaq DOS)");
  653.          break;
  654.        case 0x04:
  655.          cputs("(AT&T DOS)");
  656.          break;
  657.        case 0x05:
  658.          cputs("(Zenith DOS)");
  659.          break;
  660.        case 0x06:
  661.          cputs("(Hewlett-Packard DOS)");
  662.          break;
  663.        case 0x0D:
  664.          cputs("(Packard-Bell DOS)");
  665.          break;
  666.        case 0x16:
  667.          cputs("(DEC DOS)");
  668.          break;
  669.        case 0x23:
  670.          cputs("(Olivetti DOS)");
  671.          break;
  672.        case 0x29:
  673.          cputs("(Toshiba DOS)");
  674.          break;
  675.        case 0x4D:
  676.          cputs("(Hewlett-Packard DOS)");
  677.          break;
  678.        case 0xFF:
  679.          cputs("(MS-DOS)");
  680.      }
  681.    }
  682.  
  683.    textattr(28);                        // bright red on blue
  684.    gotoxy(21,10);
  685.    if(major > 4 || drdos > 0x65) {      // check for DOS 5.0+ or DR-DOS 6.0+
  686.      if(chkDosHigh())                   // see if DOS is loaded in high memory
  687.        cputs("High");
  688.      else
  689.        cputs("Low");
  690.    }
  691.    else
  692.      cputs("Low");
  693.  
  694.    gotoxy(75,7);
  695.    if(chkAnsi())                        // check for ANSI.SYS
  696.      cputs("yes");
  697.    else
  698.      cputs("no");
  699.    gotoxy(75,8);
  700.    if(chkAppend())                      // check for APPEND.EXE
  701.      cputs("yes");
  702.    else
  703.      cputs("no");
  704.    gotoxy(75,9);
  705.    if(chkAssign())                      // check for ASSIGN.COM
  706.      cputs("yes");
  707.    else
  708.      cputs("no");
  709.    gotoxy(75,10);
  710.    if(chkDisplay())                     // check for DISPLAY.SYS
  711.      cputs("yes");
  712.    else
  713.      cputs("no");
  714.    gotoxy(75,11);
  715.    if(chkDoskey())                      // check for DOSKEY.COM
  716.      cputs("yes");
  717.    else
  718.      cputs("no");
  719.    gotoxy(75,12);
  720.    if(chkDriver())                      // check for DRIVER.SYS
  721.      cputs("yes");
  722.    else
  723.      cputs("no");
  724.    gotoxy(75,13);
  725.    if(chkEGA())                         // check for EGA.SYS
  726.      cputs("yes");
  727.    else
  728.      cputs("no");
  729.    gotoxy(75,14);
  730.    if(chkGraftabl())                    // check for GRAFTBL.COM
  731.      cputs("yes");
  732.    else
  733.      cputs("no");
  734.    gotoxy(75,15);
  735.    if(chkGraphics())                    // check for GRAPHICS.COM
  736.      cputs("yes");
  737.    else 
  738.      cputs("no");
  739.    gotoxy(75,16);
  740.    if(chkKeyb())                        // check for KEYB.COM
  741.      cputs("yes");
  742.    else
  743.      cputs("no");
  744.    gotoxy(75,17);
  745.    if(chkNlsfunc())                     // check for NLSFUNC.EXE
  746.      cputs("yes");
  747.    else
  748.      cputs("no");
  749.    gotoxy(75,18);
  750.    if(chkPrint())                       // check for PRINT.COM
  751.      cputs("yes");
  752.    else
  753.      cputs("no");
  754.    gotoxy(75,19);
  755.    if(chkShare())                       // check for SHARE.EXE
  756.      cputs("yes");
  757.    else
  758.      cputs("no");
  759.    gotoxy(75,20);
  760.    if(chkShellb())                      // check for SHELLB.COM
  761.      cputs("yes");
  762.    else
  763.      cputs("no");
  764.    gotoxy(75,21);
  765.    if(chkXMA2EMS())                     // check for XMA2EMS.SYS
  766.      cputs("yes");
  767.    else
  768.      cputs("no");
  769.  
  770.    textattr(31);                        // white on blue
  771.  
  772.    getch();                             // wait for keystroke
  773.    textattr(15);                        // white on black
  774.    clrscr();                            // clear screen
  775.  
  776.    /**********************************************************************\
  777.    *                   Display Mouse Information Screen                   *
  778.    \**********************************************************************/ 
  779.  
  780.    mouse();                             // draw mouse screen       
  781.    highvideo();                         // turn on high-intensity
  782.    textattr(31);                        // white on blue
  783.  
  784.    buttons=chkMouse();                  // check for mouse and get buttons
  785.  
  786.    if(buttons) {
  787.      textattr(28);                      // bright red on blue
  788.      gotoxy(45,10);
  789.      cputs("yes");
  790.      textattr(31);                      // white on blue
  791.      gotoxy(45,11);
  792.      getMouseI(&type,&irq);             // get mouse information
  793.      switch (type) {                    // display mouse type
  794.        case 1:
  795.          cputs("Bus Mouse");
  796.          break;
  797.        case 2:
  798.          cputs("Serial Mouse");
  799.          break;
  800.        case 3:
  801.          cputs("Inport Mouse");
  802.          break;
  803.        case 4:
  804.          cputs("PS/2 Mouse");
  805.          break;
  806.        case 5:
  807.          cputs("Hewlett-Packard Mouse");
  808.          break;
  809.      }
  810.      getMouseV(&major,&minor);          // get mouse driver version
  811.      gotoxy(45,12);
  812.      cprintf("%d.%02d",major,minor);    // display mouse driver version
  813.      gotoxy(45,13);
  814.      cprintf("%d",buttons);             // display number of buttons
  815.      gotoxy(45,14);
  816.      if(type==4)                        // display mouse IRQ
  817.        cputs("PS/2 Port");
  818.      else
  819.        cprintf("%d",irq);
  820.    }
  821.    else {
  822.      textattr(28);                      // bright red on blue
  823.      gotoxy(45,10);
  824.      cputs("no");
  825.      textattr(31);                      // white on blue
  826.    }
  827.  
  828.    getch();                             // wait for keystroke
  829.    textattr(15);                        // white on black
  830.    clrscr();                            // clear screen
  831.  
  832.    /**********************************************************************\
  833.    *                  Display Shell Information Screen                    *
  834.    \**********************************************************************/ 
  835.  
  836.    shells();                            // draw shell screen
  837.    highvideo();                         // turn on high-intensity
  838.    textattr(28);                        // bright red on blue
  839.  
  840.    gotoxy(25,8);
  841.    if(getWinV(&major,&minor,&mode)) {   // check for Windows
  842.      cputs("yes");
  843.      textattr(31);                      // white on blue
  844.      gotoxy(25,9); 
  845.      cprintf("%d.%02d",major,minor);    // display Windows version
  846.      gotoxy(25,10);
  847.      if(mode)                           // display Windows mode
  848.        cputs("Enhanced");
  849.      else
  850.        cputs("Standard");
  851.      textattr(28);                      // bright red on blue
  852.    }
  853.    else 
  854.      cputs("no"); 
  855.  
  856.    gotoxy(25,12);
  857.    if(getDESQv(&major,&minor)) {        // check for DESQview
  858.      cputs("yes");
  859.      textattr(31);                      // white on blue
  860.      gotoxy(25,13);
  861.      cprintf("%d.%02d",major,minor);    // display DESQview version
  862.      textattr(28);                      // bright red on blue
  863.    }
  864.    else 
  865.      cputs("no"); 
  866.  
  867.    gotoxy(25,15);
  868.    if(DosShell())                       // check for Microsoft DOS Shell
  869.      cputs("yes");
  870.    else
  871.      cputs("no");
  872.  
  873.    gotoxy(25,16);
  874.    if(CPTask())                         // check for PCTools CPTask
  875.      cputs("yes");
  876.    else
  877.      cputs("no");
  878.  
  879.    gotoxy(25,17);
  880.    if(TaskMax())                        // check for DR-DOS TaskMax
  881.      cputs("yes");
  882.    else
  883.      cputs("no");
  884.  
  885.    gotoxy(73,8);
  886.    if(SmartDrv())                       // check for Microsoft SmartDrv
  887.      cputs("yes");
  888.    else
  889.      cputs("no");
  890.  
  891.    gotoxy(73,9);
  892.    if(PcCache())                        // check for PCTools PC-Cache
  893.      cputs("yes");
  894.    else
  895.      cputs("no");
  896.  
  897.    gotoxy(73,10);
  898.    if(PcKwik())                         // check for PC-Kwik
  899.      cputs("yes");
  900.    else
  901.      cputs("no");
  902.  
  903.    gotoxy(73,11);
  904.    if(Ncache())                         // check for Norton Ncache
  905.      cputs("yes");
  906.    else
  907.      cputs("no");
  908.  
  909.    gotoxy(73,12);
  910.    if(HyperDisk())                      // check for HyperDisk 
  911.      cputs("yes");
  912.    else
  913.      cputs("no");
  914.  
  915.    dblspace=DblSpace();                 // check for DoubleSpace
  916.    gotoxy(73,14);                       
  917.    if(dblspace)                         
  918.      cputs("yes");
  919.    else
  920.      cputs("no");
  921.  
  922.    gotoxy(73,15);
  923.    if(Spaceman())                       // check for Spacemanager
  924.      cputs("yes");
  925.    else
  926.      cputs("no");
  927.  
  928.    stacker=Stacker();                   // check for Stacker
  929.    gotoxy(73,16);
  930.    if(stacker)
  931.      cputs("yes");                      
  932.    else
  933.      cputs("no");
  934.  
  935.    mscdex=MSCDEX(&major,&minor);        // check for CD-ROM extension
  936.    gotoxy(73,18);
  937.    if(mscdex) {                         
  938.      cputs("yes");
  939.      textattr(31);                      // white on blue
  940.      gotoxy(73,19);
  941.      cprintf("%d.%02d",major,minor);    // display MSCDEX version
  942.    }
  943.    else
  944.      cputs("no");
  945.  
  946.    getch();                             // wait for keystroke
  947.    textattr(15);                        // white on black
  948.    clrscr();                            // clear screen
  949.  
  950.    /**********************************************************************\
  951.    *                  Display Drives Information Screen                   *
  952.    \**********************************************************************/ 
  953.  
  954.    drives();                            // draw drives screen
  955.    highvideo();                         // turn on high-intensity
  956.    textattr(31);                        // white on blue
  957.  
  958.    x=5;
  959.    y=9;
  960.  
  961.    if(!getFlopType(&a,&b)) {            // get floppy drive type
  962.      gotoxy(x,y);
  963.      switch (a) {
  964.        case 0:
  965.          break;                 
  966.        case 1:
  967.          cputs("A:");
  968.          gotoxy(x+8,y);
  969.          cputs("Floppy Drive, 5¼ 360K DD");
  970.          y++;
  971.          break;
  972.        case 2:
  973.          cputs("A:");
  974.          gotoxy(x+8,y);
  975.          cputs("Floppy Drive, 5¼ 1.2M HD");
  976.          y++;
  977.          break;
  978.        case 3:
  979.          cputs("A:");
  980.          gotoxy(x+8,y);
  981.          cputs("Floppy Drive, 3½ 720K DD");
  982.          y++;
  983.          break;
  984.        case 4:
  985.          cputs("A:");
  986.          gotoxy(x+8,y);
  987.          cputs("Floppy Drive, 3½ 1.44M HD");
  988.          y++;
  989.          break;
  990.        case 5:
  991.          cputs("A:");
  992.          gotoxy(x+8,y);
  993.          cputs("Floppy Drive, 3½ 2.88M ED");
  994.          y++;
  995.      }
  996.      gotoxy(x,y);
  997.      switch (b) {
  998.        case 0:
  999.          break;
  1000.        case 1:
  1001.          cputs("B:");
  1002.          gotoxy(x+8,y);
  1003.          cputs("Floppy Drive, 5¼ 360K DD");
  1004.          y++;
  1005.          break;
  1006.        case 2:
  1007.          cputs("B:");
  1008.          gotoxy(x+8,y);
  1009.          cputs("Floppy Drive, 5¼ 1.2M HD");
  1010.          y++;
  1011.          break;
  1012.        case 3:
  1013.          cputs("B:");
  1014.          gotoxy(x+8,y);
  1015.          cputs("Floppy Drive, 3½ 720K DD");
  1016.          y++;
  1017.          break;
  1018.        case 4:
  1019.          cputs("B:");
  1020.          gotoxy(x+8,y);
  1021.          cputs("Floppy Drive, 3½ 1.44M HD");
  1022.          y++;
  1023.          break;
  1024.        case 5:
  1025.          cputs("B:");
  1026.          gotoxy(x+8,y);
  1027.          cputs("Floppy Drive, 3½ 2.88M ED");
  1028.          y++;
  1029.      }
  1030.    }
  1031.  
  1032.    num = 3;                                      // starting drive
  1033.    lastdrive = getAvailDrvs();                   // get lastdrive
  1034.  
  1035. drvinfo:
  1036.    
  1037.    while (num<=lastdrive && num<=26 && y<=21) {     
  1038.      code = num + 64;
  1039.      sprintf(drive,"%c",code);
  1040.      if(isCDROM(drive)) {                        // check for CD-ROM drive
  1041.        gotoxy(x,y);
  1042.        cprintf("%c:",code);
  1043.        gotoxy(x+8,y);
  1044.        cputs("CD-ROM Drive");
  1045.        y++;
  1046.        num++;
  1047.        continue;
  1048.        }
  1049.      if(dblspace) {                              // check for DblSpace drive
  1050.        if(isDblSpace(drive)) {
  1051.          gotoxy(x,y);
  1052.          cprintf("%c:",code);
  1053.          gotoxy(x+8,y);
  1054.          cputs("DblSpace Drive");
  1055.          if(!getDrvSpace(drive,&SecPerClus,&FreeClus,&BytesPerSec,&TotalClus)) {
  1056.            ClusSize=BytesPerSec * SecPerClus;          // calc. cluster size
  1057.            FreeSpace=(FreeClus * ClusSize) / 1024000;  // calc. available space
  1058.            TotalSpace=TotalClus * ClusSize / 1024000;  // calc. total space
  1059.            gotoxy(x+51,y);
  1060.            cprintf("%5ldM",FreeSpace);             // display available space
  1061.            gotoxy(x+66,y);
  1062.            cprintf("%5ldM",TotalSpace);            // display total space
  1063.          }
  1064.          y++;
  1065.          num++;
  1066.          continue;
  1067.        }
  1068.      }
  1069.      if(stacker) {                               // check for Stacker drive
  1070.        if(isStacker(drive)) {
  1071.          gotoxy(x,y);
  1072.          cprintf("%c:",code);
  1073.          gotoxy(x+8,y);
  1074.          cputs("Stacker Drive");
  1075.          if(!getDrvSpace(drive,&SecPerClus,&FreeClus,&BytesPerSec,&TotalClus)) {
  1076.            ClusSize=BytesPerSec * SecPerClus;          // calc. cluster size
  1077.            FreeSpace=(FreeClus * ClusSize) / 1024000;  // calc. available space
  1078.            TotalSpace=TotalClus * ClusSize / 1024000;  // calc. total space
  1079.            gotoxy(x+51,y);
  1080.            cprintf("%5ldM",FreeSpace);             // display available space
  1081.            gotoxy(x+66,y);
  1082.            cprintf("%5ldM",TotalSpace);            // display total space
  1083.          }  
  1084.          y++;
  1085.          num++;
  1086.          continue;
  1087.        }
  1088.      }
  1089.      if(!chkRemovable(drive,&removable)) {       // check for fixed disk
  1090.        if(removable) {
  1091.          gotoxy(x,y);
  1092.          cprintf("%c:",code);
  1093.          gotoxy(x+8,y);
  1094.          cputs("Fixed Disk");
  1095.          if(!getDrvSpace(drive,&SecPerClus,&FreeClus,&BytesPerSec,&TotalClus)) {
  1096.            ClusSize=BytesPerSec * SecPerClus;          // calc. cluster size
  1097.            FreeSpace=(FreeClus * ClusSize) / 1024000;  // calc. available space
  1098.            TotalSpace=TotalClus * ClusSize / 1024000;  // calc. total space
  1099.            gotoxy(x+51,y);
  1100.            cprintf("%5ldM",FreeSpace);             // display available space
  1101.            gotoxy(x+66,y);
  1102.            cprintf("%5ldM",TotalSpace);            // display total space
  1103.          }
  1104.          if(!getDrvInfo(drive,&cyl,&heads,§ors)) { // get fixed disk info
  1105.            y++;
  1106.            gotoxy(x+10,y);
  1107.            cprintf("%d Heads, %d Cylinders, %d Sec/Track",heads,cyl,sectors);
  1108.          }
  1109.          y++;
  1110.          num++;
  1111.          continue;
  1112.        }
  1113.      else
  1114.        gotoxy(x,y);
  1115.        cprintf("%c:",code);
  1116.        gotoxy(x+8,y);
  1117.        cputs("Removable");
  1118.        y++;
  1119.        num++;
  1120.        continue;
  1121.      }
  1122.      if(!chkRemote(drive,&remote)) {             // check for network drive
  1123.        if(remote) {
  1124.          gotoxy(x,y);
  1125.          cprintf("%c:",code);
  1126.          gotoxy(x+8,y);
  1127.          cputs("Remote Drive");
  1128.          if(!getDrvSpace(drive,&SecPerClus,&FreeClus,&BytesPerSec,&TotalClus)) {
  1129.            ClusSize=BytesPerSec * SecPerClus;          // calc. cluster size
  1130.            FreeSpace=(FreeClus * ClusSize) / 1024000;  // calc. available space
  1131.            TotalSpace=TotalClus * ClusSize / 1024000;  // calc. total space
  1132.            gotoxy(x+51,y);
  1133.            cprintf("%5ldM",FreeSpace);             // display available space
  1134.            gotoxy(x+66,y);
  1135.            cprintf("%5ldM",TotalSpace);            // display total space
  1136.          }
  1137.          y++;
  1138.        }
  1139.      }
  1140.      num++;
  1141.    }
  1142.    
  1143.    getch();                                 // wait for keystroke
  1144.  
  1145.    if(num<=lastdrive && num<=26) {          // see if a second page is needed
  1146.      y = 9;                                 // reset y-axis
  1147.      textattr(15);                          // white on black
  1148.      clrscr();                              // clear screen
  1149.      drives();                              // draw new drives screen
  1150.      highvideo();                           // turn on high-intensity
  1151.      textattr(31);                          // white on blue
  1152.      goto drvinfo;                          // display remaining drive info
  1153.    }
  1154.  
  1155.    textattr(15);                        // white on black
  1156.    clrscr();                            // clear screen
  1157.  
  1158.    /**********************************************************************\
  1159.    *                  Display Network Information Screen                  *
  1160.    \**********************************************************************/ 
  1161.  
  1162.    network();                           // draw drives screen
  1163.    highvideo();                         // turn on high-intensity
  1164.    textattr(28);                        // bright red on blue
  1165.  
  1166.    gotoxy(25,8);
  1167.    if(chkIPX())                         // check for IPX
  1168.      cputs("yes");
  1169.    else
  1170.      cputs("no");
  1171.   
  1172.    gotoxy(25,10);
  1173.    if(Netbios())                        // check for Netbios
  1174.      cputs("yes");
  1175.    else
  1176.      cputs("no");
  1177.  
  1178.    gotoxy(25,12);
  1179.    if(NetShell(&major,&minor,&rev,&type)) {   // check for NetShell
  1180.      cputs("yes");
  1181.      textattr(31);                            // white on blue
  1182.      gotoxy(25,13);
  1183.      cprintf("%d.%02d.%02d",major,minor,rev); // display NetShell Version
  1184.      gotoxy(25,14);
  1185.      switch (type) {                          // display memory type
  1186.        case 0:
  1187.          cputs("Conventional Memory");
  1188.          break;
  1189.        case 1:
  1190.          cputs("Expanded Memory");
  1191.          break;
  1192.        case 2:
  1193.          cputs("Extended Memory");
  1194.      }
  1195.      server=getNetName(&version,&sub,&conn,&use,&vol,&peak); // get server info
  1196.      gotoxy(25,16);
  1197.      cputs(server);                     // display server name
  1198.      gotoxy(25,17);
  1199.      cprintf("%d.%02d",version,sub);    // display NetWare version
  1200.      gotoxy(75,8);
  1201.      cprintf("%d",conn);                // display number of connections
  1202.      gotoxy(75,9);
  1203.      cprintf("%d",use);                 // display connections in use
  1204.      gotoxy(75,10);
  1205.      cprintf("%d",peak);                // display peak connections used
  1206.      gotoxy(75,11);
  1207.      cprintf("%d",vol);                 // display number of volumes supported
  1208.      user=getUserName();                // get user name
  1209.      gotoxy(25,19);
  1210.      cputs(user);                       // display user name
  1211.      if(!getLoginTime(&year,&month,&day,&hour,&min,&sec,&week)) {
  1212.        gotoxy(25,20);
  1213.        cprintf("%02d-%02d-%d at %02d:%02d:%02d",month,day,year,hour,min,sec);
  1214.      }
  1215.    }
  1216.    else 
  1217.      cputs("no");
  1218.    
  1219.    getch();                             // wait for keystroke
  1220.  
  1221.    normvideo();                         // turn off high-intensity
  1222.    textattr(15);                        // white on black
  1223.    clrscr();                            // clear screen
  1224.    _setcursortype(_NORMALCURSOR);       // restore cursor
  1225.    exit(0);
  1226.  
  1227. }
  1228.  
  1229. void hardware(void)
  1230. {
  1231.    textattr(30); cputs("╔══════════════════════════════════════════════════════════════════════════════╗║                            SYSINFO LIBRARY DEMO");
  1232.    cputs("                              ║║                                 Version 1.0                                  ║╠═══════════════════════════════");
  1233.    cputs("╤═════════════╤════════════════════════════════╣║                               │  Hardware   │                                ║║              ");
  1234.    cputs("                 └─────────────┘                                ║║                                                                             ");
  1235.    cputs(" ║║                                                                              ║║  BIOS Category     :                                       ");
  1236.    cputs("                  ║║  BIOS I.D.         :                    DMA Channel 3 used            :      ║║  BIOS Date         :                    2n");
  1237.    cputs("d 8259 installed            :      ║║  Processor         :                    Real Time Clock installed     :      ║║  Math Co-processor :     ");
  1238.    cputs("               Keyboard Int. (INT 15/AH=4F)  :      ║║  Serial Ports      :                    Wait for External Event       :      ║║  Paralle");
  1239.    cputs("l Ports    :                    Extended BIOS allocated       :      ║║  Keyboard Type     :                    Micro Channel Bus             :");
  1240.    cputs("      ║║                                                                              ║║                                                       ");
  1241.    cputs("                       ║║                                                                              ║║                                      ");
  1242.    cputs("                                        ║║                                                                              ║╠═════════════════════");
  1243.    cputs("═════════════════════════════════════════════════════════╣║                        Press any key for next screen...                      ║╚════");
  1244.    cputs("══════════════════════════════════════════════════════════════════════════╝");
  1245. }
  1246.  
  1247. void memory(void)
  1248. {
  1249.    textattr(30); cputs("╔══════════════════════════════════════════════════════════════════════════════╗║                            SYSINFO LIBRARY DEMO");
  1250.    cputs("                              ║║                                 Version 1.0                                  ║╠═══════════════════════════════");
  1251.    cputs("╤═════════════╤════════════════════════════════╣║                               │   Memory    │                                ║║              ");
  1252.    cputs("                 └─────────────┘                                ║║                                                                             ");
  1253.    cputs(" ║║  Total Conventional Memory :               Total EMS Memory    :             ║║  Free Conventional Memory  :               Free EMS Memory ");
  1254.    cputs("    :             ║║                                            EMS Version         :             ║║  Total Extended Memory     :              ");
  1255.    cputs(" EMS Address Page    :             ║║  Free Extended Memory      :               Handles in Use      :             ║║                          ");
  1256.    cputs("                                                    ║║  Available XMS Memory      :               DPMI Installed      :             ║║  Largest");
  1257.    cputs(" XMS Memory Block  :               DPMI Version        :             ║║  XMS Version               :                                           ");
  1258.    cputs("      ║║  XMS Driver                :               VCPI Installed      :             ║║  A20 Address Line          :               VCPI Versio");
  1259.    cputs("n        :             ║║  High Memory Area          :                                                 ║║                                      ");
  1260.    cputs("                                        ║║  '386 Extended Memory Manager :                                              ║╠═════════════════════");
  1261.    cputs("═════════════════════════════════════════════════════════╣║                        Press any key for next screen...                      ║╚════");
  1262.    cputs("══════════════════════════════════════════════════════════════════════════╝");
  1263. }
  1264.  
  1265. void video(void)
  1266. {
  1267.    textattr(30); cputs("╔══════════════════════════════════════════════════════════════════════════════╗║                            SYSINFO LIBRARY DEMO");
  1268.    cputs("                              ║║                                 Version 1.0                                  ║╠═══════════════════════════════");
  1269.    cputs("╤═════════════╤════════════════════════════════╣║                               │    Video    │                                ║║              ");
  1270.    cputs("                 └─────────────┘                                ║║                                                                             ");
  1271.    cputs(" ║║                                                                              ║║                                                            ");
  1272.    cputs("                  ║║               Video Adapter Type     :                                       ║║               Display Type           :    ");
  1273.    cputs("                                   ║║                                                                              ║║                          ");
  1274.    cputs("                                                    ║║               VESA Support Installed :                                       ║║         ");
  1275.    cputs("      VESA Version           :                                       ║║               Video Memory           :                                 ");
  1276.    cputs("      ║║                                                                              ║║                                                       ");
  1277.    cputs("                       ║║                                                                              ║║                                      ");
  1278.    cputs("                                        ║║                                                                              ║╠═════════════════════");
  1279.    cputs("═════════════════════════════════════════════════════════╣║                        Press any key for next screen...                      ║╚════");
  1280.    cputs("══════════════════════════════════════════════════════════════════════════╝");
  1281. }
  1282.  
  1283. void dos(void)
  1284. {
  1285.    textattr(30); cputs("╔══════════════════════════════════════════════════════════════════════════════╗║                            SYSINFO LIBRARY DEMO");
  1286.    cputs("                              ║║                                 Version 1.0                                  ║╠═══════════════════════════════");
  1287.    cputs("╤═════════════╤════════════════════════════════╣║                               │     DOS     │                                ║║              ");
  1288.    cputs("                 └─────────────┘                                ║║                                                ANSI.SYS installed     :     ");
  1289.    cputs(" ║║  DOS Version    :                              APPEND.EXE installed   :      ║║  DOS OEM Number :                              ASSIGN.COM i");
  1290.    cputs("nstalled   :      ║║  DOS Loaded     :                              DISPLAY.SYS installed  :      ║║                                           ");
  1291.    cputs("     DOSKEY.COM installed   :      ║║                                                DRIVER.SYS installed   :      ║║                          ");
  1292.    cputs("                      EGA.SYS installed      :      ║║                                                GRAFTABL.COM installed :      ║║         ");
  1293.    cputs("                                       GRAPHICS.COM installed :      ║║                                                KEYB.COM installed     :");
  1294.    cputs("      ║║                                                NLSFUNC.EXE installed  :      ║║                                                PRINT.C");
  1295.    cputs("OM installed    :      ║║                                                SHARE.EXE installed    :      ║║                                      ");
  1296.    cputs("          SHELLB.COM installed   :      ║║                                                XMS2EMS.SYS installed  :      ║╠═════════════════════");
  1297.    cputs("═════════════════════════════════════════════════════════╣║                        Press any key for next screen...                      ║╚════");
  1298.    cputs("══════════════════════════════════════════════════════════════════════════╝");
  1299. }
  1300.  
  1301. void mouse(void)
  1302. {
  1303.    textattr(30); cputs("╔══════════════════════════════════════════════════════════════════════════════╗║                            SYSINFO LIBRARY DEMO");
  1304.    cputs("                              ║║                                 Version 1.0                                  ║╠═══════════════════════════════");
  1305.    cputs("╤═════════════╤════════════════════════════════╣║                               │    Mouse    │                                ║║              ");
  1306.    cputs("                 └─────────────┘                                ║║                                                                             ");
  1307.    cputs(" ║║                                                                              ║║                                                            ");
  1308.    cputs("                  ║║                       Mouse Installed   :                                    ║║                       Mouse Type        : ");
  1309.    cputs("                                   ║║                       Driver Version    :                                    ║║                       Num");
  1310.    cputs("ber of Buttons :                                    ║║                       Mouse IRQ         :                                    ║║         ");
  1311.    cputs("                                                                     ║║                                                                        ");
  1312.    cputs("      ║║                                                                              ║║                                                       ");
  1313.    cputs("                       ║║                                                                              ║║                                      ");
  1314.    cputs("                                        ║║                                                                              ║╠═════════════════════");
  1315.    cputs("═════════════════════════════════════════════════════════╣║                        Press any key for next screen...                      ║╚════");
  1316.    cputs("══════════════════════════════════════════════════════════════════════════╝");
  1317. }
  1318.  
  1319. void shells(void)
  1320. {
  1321.    textattr(30); cputs("╔══════════════════════════════════════════════════════════════════════════════╗║                            SYSINFO LIBRARY DEMO");
  1322.    cputs("                              ║║                                 Version 1.0                                  ║╠════════════════════════╤══════");
  1323.    cputs("═════════════════════╤═════════════════════════╣║                        │ TSR's, Drivers and Shells │                         ║║              ");
  1324.    cputs("          └───────────────────────────┘                         ║║                                                                             ");
  1325.    cputs(" ║║  Windows Resident   :                        Smartdrv Installed     :        ║║  Windows Version    :                        PC-Cache Insta");
  1326.    cputs("lled     :        ║║  Windows Mode       :                        PC-Kwik Installed      :        ║║                                           ");
  1327.    cputs("   Ncache Installed       :        ║║  DESQview Resident  :                        HyperDisk Installed    :        ║║  DESQview Version   :    ");
  1328.    cputs("                                                    ║║                                              DoubleSpace Installed  :        ║║  DOS She");
  1329.    cputs("ll Resident :                        Spacemanager Installed :        ║║  CPTask Resident    :                        Stacker Installed      :  ");
  1330.    cputs("      ║║  Taskmax Resident   :                                                        ║║                                              MSCDEX In");
  1331.    cputs("stalled       :        ║║                                              MSCDEX Version         :        ║║                                      ");
  1332.    cputs("                                        ║║                                                                              ║╠═════════════════════");
  1333.    cputs("═════════════════════════════════════════════════════════╣║                        Press any key for next screen...                      ║╚════");
  1334.    cputs("══════════════════════════════════════════════════════════════════════════╝");
  1335. }
  1336.  
  1337. void drives(void)
  1338. {
  1339.    textattr(30); cputs("╔══════════════════════════════════════════════════════════════════════════════╗║                            SYSINFO LIBRARY DEMO");
  1340.    cputs("                              ║║                                 Version 1.0                                  ║╠═══════════════════════════════");
  1341.    cputs("╤═════════════╤════════════════════════════════╣║                               │   Drives    │                                ║║              ");
  1342.    cputs("                 └─────────────┘                                ║║ Drive     Type                                     Free Space    Total Space");
  1343.    cputs(" ║║ ─────     ───────────────────────────────────────  ──────────    ─────────── ║║                                                            ");
  1344.    cputs("                  ║║                                                                              ║║                                           ");
  1345.    cputs("                                   ║║                                                                              ║║                          ");
  1346.    cputs("                                                    ║║                                                                              ║║         ");
  1347.    cputs("                                                                     ║║                                                                        ");
  1348.    cputs("      ║║                                                                              ║║                                                       ");
  1349.    cputs("                       ║║                                                                              ║║                                      ");
  1350.    cputs("                                        ║║                                                                              ║╠═════════════════════");
  1351.    cputs("═════════════════════════════════════════════════════════╣║                        Press any key for next screen...                      ║╚════");
  1352.    cputs("══════════════════════════════════════════════════════════════════════════╝");
  1353. }
  1354.  
  1355. void network(void)
  1356. {
  1357.    textattr(30); cputs("╔══════════════════════════════════════════════════════════════════════════════╗║                            SYSINFO LIBRARY DEMO");
  1358.    cputs("                              ║║                                 Version 1.0                                  ║╠═══════════════════════════════");
  1359.    cputs("╤═════════════╤════════════════════════════════╣║                               │   Network   │                                ║║              ");
  1360.    cputs("                 └─────────────┘                                ║║                                                                             ");
  1361.    cputs(" ║║  IPX Installed      :                 Number of Connections Supported :      ║║                                       Number of Connections");
  1362.    cputs(" in Use    :      ║║  Netbios Installed  :                 Peak Connections Used           :      ║║                                       Maxi");
  1363.    cputs("mum Connected Volumes       :      ║║  Shell Installed    :                                                        ║║  Shell Version      :    ");
  1364.    cputs("                                                    ║║  Shell Located in   :                                                        ║║         ");
  1365.    cputs("                                                                     ║║  Server Name        :                                                  ");
  1366.    cputs("      ║║  Netware Version    :                                                        ║║                                                       ");
  1367.    cputs("                       ║║  User Name          :                                                        ║║  Login Date & Time  :                ");
  1368.    cputs("                                        ║║                                                                              ║╠═════════════════════");
  1369.    cputs("═════════════════════════════════════════════════════════╣║                        Press any key for next screen...                      ║╚════");
  1370.    cputs("══════════════════════════════════════════════════════════════════════════╝");
  1371. }
  1372.  
  1373.