home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / mswos2.zip / wdisplay.c < prev    next >
C/C++ Source or Header  |  1994-05-17  |  5KB  |  180 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define INCL_DOS
  5. #define INCL_DOSFILEMGR
  6. #include <os2.h>
  7.  
  8. #define BUFSIZE 0x4000
  9. unsigned char buffer[BUFSIZE];
  10. unsigned char filename[128], destination[128];
  11.  
  12. int doCopy(char *name, char *dd1, char *dd2);
  13. void main(int argc, char **argv)
  14. {
  15.     unsigned char dosos2;
  16.     HFILE file;
  17.     USHORT readlen, actionTaken;
  18.     USHORT rc;
  19.     FILESTATUS FileInfoBuf;
  20.     char *dd1, *dd2;
  21.  
  22.     DosGetMachineMode(&dosos2);
  23.     if (argc == 1) {
  24.     strcpy(filename,argv[0]);
  25.     strupr(filename);
  26.     dd1 = strstr(filename,"WDISPLAY");
  27.     strcpy(dd1,"SYSTEM.INI");
  28.     } else if (argc == 2) {
  29.     strcpy(filename,argv[1]);
  30.     strupr(filename);
  31.     if (strstr(filename,"SYSTEM.INI") == NULL)
  32.         goto usage;
  33.     }
  34.     if (argc > 2) {
  35.     usage:
  36.     printf("Usage: wdisplay [path\\system.ini]\n");
  37.     printf("       Changes SYSTEM.INI to use the appropriate display driver\n");
  38.     printf("       and copies appropriate files for DOS or OS/2.\n");
  39.     printf("       NOTE: The path is only needed if running in DOS from\n");
  40.     printf("             a different directory.\n");
  41.     exit(1);
  42.     }
  43.  
  44.     if ( (rc = DosOpen( filename, &file, &actionTaken, 0L,FILE_NORMAL,
  45.             FILE_OPEN, OPEN_ACCESS_READONLY|OPEN_SHARE_DENYNONE, 0L)
  46.     ) != 0) {
  47.     printf("%s: file not found\n",filename);
  48.     exit(1);
  49.     }
  50.     DosQFileInfo(file,1,&FileInfoBuf, sizeof(FILESTATUS));
  51.  
  52.     DosRead(file,buffer,BUFSIZE,&readlen);
  53.  
  54.     DosClose(file);
  55.     dd1 = strstr(buffer,"display.");
  56.     dd2 = strstr(dd1+1,"display.");
  57.     if (!dd1) {
  58.     printf("No display driver found\n");
  59.     exit(1);
  60.     }
  61.     if (!dd2) {
  62.     printf("Only one display driver found\n");
  63.     exit(1);
  64.     }
  65.     if (*(dd1+8) == 'o' || *(dd2+8) == 'o') {    /* os2 */
  66.     if (dosos2 == 1) {
  67.         printf("Setting %s for OS/2\n",filename);
  68.         if (*(dd1+8) == 'o') {
  69.            *(dd1+ 8) = 'd';
  70.            *(dd1+ 9) = 'r';
  71.            *(dd1+10) = 'v';
  72.  
  73.            *(dd2+ 9) = 'o';
  74.            *(dd2+10) = 's';
  75.         } else {
  76.            *(dd2+ 8) = 'd';
  77.            *(dd2+ 9) = 'r';
  78.            *(dd2+10) = 'v';
  79.  
  80.            *(dd1+ 9) = 'o';
  81.            *(dd1+10) = 's';
  82.         }
  83.         if ( (rc = DosOpen( filename, &file, &actionTaken, 0L,FILE_NORMAL,
  84.             OPEN_ACTION_REPLACE_IF_EXISTS|OPEN_ACTION_CREATE_IF_NEW,
  85.             OPEN_ACCESS_WRITEONLY|OPEN_SHARE_DENYNONE, 0L)
  86.           ) != 0) {
  87.         printf("Can't open %s - %d\n", filename,rc);
  88.         exit(1);
  89.         }
  90.         DosSetFileInfo(file,1,(PBYTE)&FileInfoBuf,sizeof(FILESTATUS));
  91.         DosWrite(file,buffer,readlen,&readlen);
  92.         DosClose(file);
  93.     } else {
  94.         printf("WIN-OS2 already in DOS mode\n");
  95.     }
  96.     } else if (*(dd1+9) == 'o' || *(dd2+9) == 'o') {  /* dos */
  97.     if (dosos2 == 0) {
  98.         printf("Setting %s for DOS\n",filename);
  99.         if (*(dd1+9) == 'o') {
  100.            *(dd1+ 9) = 'r';
  101.            *(dd1+10) = 'v';
  102.  
  103.            *(dd2+ 8) = 'o';
  104.            *(dd2+ 9) = 's';
  105.            *(dd2+10) = '2';
  106.         } else {
  107.            *(dd2+ 9) = 'r';
  108.            *(dd2+10) = 'v';
  109.  
  110.            *(dd1+ 8) = 'o';
  111.            *(dd1+ 9) = 's';
  112.            *(dd1+10) = '2';
  113.         }
  114.         if ( (rc = DosOpen( filename, &file, &actionTaken, 0L,FILE_NORMAL,
  115.             OPEN_ACTION_REPLACE_IF_EXISTS|OPEN_ACTION_CREATE_IF_NEW,
  116.             OPEN_ACCESS_WRITEONLY|OPEN_SHARE_DENYNONE, 0L)
  117.           ) != 0) {
  118.         printf("Can't open %s - %d\n", filename,rc);
  119.         exit(1);
  120.         }
  121.         DosSetFileInfo(file,1,(PBYTE)&FileInfoBuf,sizeof(FILESTATUS));
  122.         DosWrite(file,buffer,readlen,&readlen);
  123.         DosClose(file);
  124.     } else {
  125.         printf("WIN-OS2 already in OS/2 mode\n");
  126.     }
  127.     }
  128.     dd1 = strstr(filename,".INI");
  129.     *dd1 = 0;
  130.     strcpy(destination,filename);
  131.     if (dosos2)
  132.     strcpy(dd1,"\\OS2\\");
  133.     else
  134.     strcpy(dd1,"\\DOS\\");
  135.     dd1 = dd1+strlen(dd1);
  136.     dd2 = destination+strlen(destination);
  137.     *dd2++ = '\\';
  138.     *dd2 = 0;
  139.     doCopy("gdi.exe",dd1,dd2);
  140.     doCopy("user.exe",dd1,dd2);
  141.     doCopy("mouse.drv",dd1,dd2);
  142.  
  143. }
  144.  
  145. int doCopy(char *name, char *dd1, char *dd2)
  146. {
  147.     HFILE source, dest;
  148.     USHORT readlen, actionTaken;
  149.     USHORT rc;
  150.     FILESTATUS FileInfoBuf;
  151.  
  152.     strcpy(dd1,name);
  153.     strcpy(dd2,name);
  154.     if ( (rc = DosOpen( filename, &source, &actionTaken, 0L,FILE_NORMAL,
  155.             FILE_OPEN, OPEN_ACCESS_READONLY|OPEN_SHARE_DENYNONE, 0L)
  156.     ) != 0) {
  157.     printf("Can't open %s - %d\n", filename,rc);
  158.     return 0;
  159.     }
  160.     DosQFileInfo(source,1,&FileInfoBuf, sizeof(FILESTATUS));
  161.  
  162.     if ( (rc = DosOpen( destination, &dest, &actionTaken, 0L,FILE_NORMAL,
  163.             OPEN_ACTION_REPLACE_IF_EXISTS|OPEN_ACTION_CREATE_IF_NEW,
  164.             OPEN_ACCESS_WRITEONLY|OPEN_SHARE_DENYNONE, 0L)
  165.     ) != 0) {
  166.     printf("Can't open %s - %d\n", destination,rc);
  167.     return 0;
  168.     }
  169.     DosSetFileInfo(dest,1,(PBYTE)&FileInfoBuf,sizeof(FILESTATUS));
  170.     readlen = BUFSIZE;
  171.     while (readlen == BUFSIZE) {
  172.     DosRead(source,buffer,BUFSIZE,&readlen);
  173.     DosWrite(dest,buffer,readlen,&readlen);
  174.     }
  175.     DosClose(source);
  176.     DosClose(dest);
  177.  
  178.     return 0;
  179. }
  180.