Diff for /xmil/win9x/Attic/ddrawbmp.cpp between versions 1.1 and 1.3

version 1.1, 2004/08/01 05:31:31 version 1.3, 2004/08/04 15:18:26
Line 19  typedef struct { Line 19  typedef struct {
   
 #define PALADDED                32  #define PALADDED                32
   
 static  char    bmpext[] = "bmp";  static const OEMCHAR bmpext[] = OEMTEXT("bmp");
 static  char    bmptitle[] = "Bitmapの保存";  static const OEMCHAR bmptitle[] = OEMTEXT("Bitmapの保存");
 static  char    *bmpextstr[] = {  static const OEMCHAR *bmpextstr[] = {
                                                 "2色ビットマップ\0*.bmp\0",                                                  OEMTEXT("2色ビットマップ\0*.bmp\0"),
                                                 "16色ビットマップ\0*.bmp\0",                                                  OEMTEXT("16色ビットマップ\0*.bmp\0"),
                                                 "256色ビットマップ\0*.bmp\0",                                                  OEMTEXT("256色ビットマップ\0*.bmp\0"),
                                                 "フルカラービットマップ\0*.bmp\0"};                                                  OEMTEXT("フルカラービットマップ\0*.bmp\0")};
   
 static  char    pathname[MAX_PATH];  static  OEMCHAR pathname[MAX_PATH];
   
 static LPSTR savefileselect(LPSTR filter, LPSTR defname) {  static OEMCHAR *savefileselect(const OEMCHAR *filter, const OEMCHAR *defname) {
   
         FILESEL         bmpui;          FILESEL         bmpui;
   
Line 97  BYTE bmps_appal(int *pals, RGB32 *pal, D Line 97  BYTE bmps_appal(int *pals, RGB32 *pal, D
         return((BYTE)ret);          return((BYTE)ret);
 }  }
   
 void bmpsavefile(LPSTR filename, BMP_CTRL *bmc) {  void bmpsavefile(const OEMCHAR *filename, BMP_CTRL *bmc) {
   
         FILEH   dst;          FILEH   dst;
         DWORD   linesize;          DWORD   linesize;
Line 105  void bmpsavefile(LPSTR filename, BMP_CTR Line 105  void bmpsavefile(LPSTR filename, BMP_CTR
         long    y;          long    y;
         BYTE    *p;          BYTE    *p;
         BYTE    bit;          BYTE    bit;
         BYTE    work[SCREEN_WIDTH];          BYTE    work[SURFACE_WIDTH];
   
         if (bmc->bmi.biClrImportant <= 2) {          if (bmc->bmi.biClrImportant <= 2) {
                 bmc->bmi.biBitCount = 1;                  bmc->bmi.biBitCount = 1;
Line 189  void bmpsave(void) { Line 189  void bmpsave(void) {
         BYTE            c;          BYTE            c;
         int                     pals = 0;          int                     pals = 0;
         long            x, y;          long            x, y;
         char            *f;  const OEMCHAR   *f;
         LPSTR           r;          OEMCHAR         *r;
   
         if ((hbmc = GlobalAlloc(GPTR, (DWORD)sizeof(BMP_CTRL) + 1 +          if ((hbmc = GlobalAlloc(GPTR, (DWORD)sizeof(BMP_CTRL) + 1 +
                                         ((DWORD)SCREEN_WIDTH * SCREEN_HEIGHT * 3L))) == NULL) {                                          ((DWORD)SURFACE_WIDTH * SURFACE_HEIGHT * 3L))) == NULL) {
                 return;                  return;
         }          }
         if ((bmc = (BMP_CTRL *)GlobalLock(hbmc)) == NULL) {          if ((bmc = (BMP_CTRL *)GlobalLock(hbmc)) == NULL) {
Line 203  void bmpsave(void) { Line 203  void bmpsave(void) {
         ZeroMemory(bmc, sizeof(BMP_CTRL));          ZeroMemory(bmc, sizeof(BMP_CTRL));
         ZeroMemory(remap, 256);          ZeroMemory(remap, 256);
         ZeroMemory(remapflg, 256);          ZeroMemory(remapflg, 256);
         bmc->bmi.biWidth = SCREEN_WIDTH;          bmc->bmi.biWidth = SURFACE_WIDTH;
         bmc->bmi.biHeight = SCREEN_HEIGHT;          bmc->bmi.biHeight = SURFACE_HEIGHT;
         p = screenmap;          p = screenmap;
         q = (BYTE *)bmc + sizeof(BMP_CTRL);          q = (BYTE *)bmc + sizeof(BMP_CTRL);
         for (y=0; y<SCREEN_HEIGHT; y++) {          for (y=0; y<SURFACE_HEIGHT; y++) {
                 switch(scrn.widthmode) {                  switch(scrn.widthmode) {
                         case SCRNWIDTHMODE_WIDTH80:                          case SCRNWIDTHMODE_WIDTH80:
                         default:                          default:
                                 for (x=0; x<SCREEN_WIDTH; x++) {                                  for (x=0; x<SURFACE_WIDTH; x++) {
                                         c = *p++;                                          c = *p++;
                                         if (!remapflg[c]) {                                          if (!remapflg[c]) {
                                                 remapflg[c] = 1;                                                  remapflg[c] = 1;
Line 223  void bmpsave(void) { Line 223  void bmpsave(void) {
                                 break;                                  break;
   
                         case SCRNWIDTHMODE_WIDTH40:                          case SCRNWIDTHMODE_WIDTH40:
                                 for (x=0; x<SCREEN_WIDTH/2; x++) {                                  for (x=0; x<SURFACE_WIDTH/2; x++) {
                                         c = *p++;                                          c = *p++;
                                         if (!remapflg[c]) {                                          if (!remapflg[c]) {
                                                 remapflg[c] = 1;                                                  remapflg[c] = 1;
Line 233  void bmpsave(void) { Line 233  void bmpsave(void) {
                                         *q++ = remap[c];                                          *q++ = remap[c];
                                         *q++ = remap[c];                                          *q++ = remap[c];
                                 }                                  }
                                 p += SCREEN_WIDTH/2;                                  p += SURFACE_WIDTH/2;
                                 break;                                  break;
   
                         case SCRNWIDTHMODE_4096:                          case SCRNWIDTHMODE_4096:
                                 for (x=0; x<SCREEN_WIDTH/2; x++) {                                  for (x=0; x<SURFACE_WIDTH/2; x++) {
                                         c = bmps_appal(&pals, bmc->pal,                                           c = bmps_appal(&pals, bmc->pal, 
                                                                                 x1z_pal32[(p[320] << 8) | p[0]].d);                                                                                  x1z_pal32[(p[320] << 8) | p[0]].d);
                                         p++;                                          p++;
                                         *q++ = c;                                          *q++ = c;
                                         *q++ = c;                                          *q++ = c;
                                 }                                  }
                                 p += SCREEN_WIDTH/2;                                  p += SURFACE_WIDTH/2;
                                 break;                                  break;
                 }                  }
                 if (pals > 256) {                  if (pals > 256) {
Line 257  void bmpsave(void) { Line 257  void bmpsave(void) {
                 f = bmpextstr[3];                  f = bmpextstr[3];
                 p = screenmap;                  p = screenmap;
                 q = (BYTE *)bmc + sizeof(BMP_CTRL);                  q = (BYTE *)bmc + sizeof(BMP_CTRL);
                 for (y=0; y<SCREEN_HEIGHT; y++) {                  for (y=0; y<SURFACE_HEIGHT; y++) {
                         switch(scrn.widthmode) {                          switch(scrn.widthmode) {
                                 case 0:                                  case 0:
                                 default:                                  default:
                                         for (x=0; x<SCREEN_WIDTH; x++) {                                          for (x=0; x<SURFACE_WIDTH; x++) {
                                                 *(DWORD *)q = x1n_pal32[*p++].d;                                                  *(DWORD *)q = x1n_pal32[*p++].d;
                                                 q += 3;                                                  q += 3;
                                         }                                          }
                                         break;                                          break;
   
                                 case 1:                                  case 1:
                                         for (x=0; x<SCREEN_WIDTH/2; x++) {                                          for (x=0; x<SURFACE_WIDTH/2; x++) {
                                                 *(DWORD *)q = x1n_pal32[*p].d;                                                  *(DWORD *)q = x1n_pal32[*p].d;
                                                 *(DWORD *)(q+3) = x1n_pal32[*p].d;                                                  *(DWORD *)(q+3) = x1n_pal32[*p].d;
                                                 p++;                                                  p++;
                                                 q += 6;                                                  q += 6;
                                         }                                          }
                                         p += SCREEN_WIDTH/2;                                          p += SURFACE_WIDTH/2;
                                         break;                                          break;
   
                                 case 2:                                  case 2:
                                         for (x=0; x<SCREEN_WIDTH/2; x++) {                                          for (x=0; x<SURFACE_WIDTH/2; x++) {
                                                 *(DWORD *)q = x1z_pal32[(p[320] << 8) | p[0]].d;                                                  *(DWORD *)q = x1z_pal32[(p[320] << 8) | p[0]].d;
                                                 *(DWORD *)(q+3) = x1z_pal32[(p[320] << 8) | p[0]].d;                                                  *(DWORD *)(q+3) = x1z_pal32[(p[320] << 8) | p[0]].d;
                                                 p++;                                                  p++;
                                                 q += 6;                                                  q += 6;
                                         }                                          }
                                         p += SCREEN_WIDTH/2;                                          p += SURFACE_WIDTH/2;
                                         break;                                          break;
                         }                          }
                 }                  }
Line 295  void bmpsave(void) { Line 295  void bmpsave(void) {
         else if (pals > 2) {          else if (pals > 2) {
                 f = bmpextstr[1];                  f = bmpextstr[1];
         }          }
         if ((r = savefileselect(f, "X1R_%04d.BMP")) != NULL) {          if ((r = savefileselect(f, OEMTEXT("X1R_%04d.BMP"))) != NULL) {
                 bmpsavefile(r, bmc);                  bmpsavefile(r, bmc);
         }          }
         GlobalUnlock(hbmc);          GlobalUnlock(hbmc);
Line 305  void bmpsave(void) { Line 305  void bmpsave(void) {
   
 void bmpsavehalf(void) {  void bmpsavehalf(void) {
   
         HANDLE                  hbmc;          HANDLE          hbmc;
         BMP_CTRL                *bmc;          BMP_CTRL        *bmc;
         BYTE                    *p, *q;          BYTE            *p, *q;
         int                             pals = 0;          int                     pals = 0;
         long                    x, y;          long            x, y;
         char                    *f;  const OEMCHAR   *f;
         LPSTR                   r;          OEMCHAR         *r;
   
         if ((hbmc = GlobalAlloc(GPTR, (DWORD)sizeof(BMP_CTRL) + 1 +          if ((hbmc = GlobalAlloc(GPTR, (DWORD)sizeof(BMP_CTRL) + 1 +
                                         ((DWORD)SCREEN_WIDTH * SCREEN_HEIGHT * 3L))) == NULL) {                                          ((DWORD)SURFACE_WIDTH * SURFACE_HEIGHT * 3L))) == NULL) {
                 return;                  return;
         }          }
         if ((bmc = (BMP_CTRL *)GlobalLock(hbmc)) == NULL) {          if ((bmc = (BMP_CTRL *)GlobalLock(hbmc)) == NULL) {
Line 322  void bmpsavehalf(void) { Line 322  void bmpsavehalf(void) {
                 return;                  return;
         }          }
         ZeroMemory(bmc, sizeof(BMP_CTRL));          ZeroMemory(bmc, sizeof(BMP_CTRL));
         bmc->bmi.biWidth = SCREEN_WIDTH/2;          bmc->bmi.biWidth = SURFACE_WIDTH/2;
         bmc->bmi.biHeight = SCREEN_HEIGHT/2;          bmc->bmi.biHeight = SURFACE_HEIGHT/2;
         p = screenmap;          p = screenmap;
         q = (BYTE *)bmc + sizeof(BMP_CTRL);          q = (BYTE *)bmc + sizeof(BMP_CTRL);
         for (y=0; y<SCREEN_HEIGHT/2; y++) {          for (y=0; y<SURFACE_HEIGHT/2; y++) {
                 switch(scrn.widthmode) {                  switch(scrn.widthmode) {
                         case SCRNWIDTHMODE_WIDTH80:                          case SCRNWIDTHMODE_WIDTH80:
                         default:                          default:
                                 for (x=0; x<SCREEN_WIDTH/2; x++) {                                  for (x=0; x<SURFACE_WIDTH/2; x++) {
                                         *q++ = bmps_appal(&pals, bmc->pal, palettesmix(p).d);                                          *q++ = bmps_appal(&pals, bmc->pal, palettesmix(p).d);
                                         p += 2;                                          p += 2;
                                 }                                  }
                                 p += SCREEN_WIDTH;                                  p += SURFACE_WIDTH;
                                 break;                                  break;
   
                         case SCRNWIDTHMODE_WIDTH40:                          case SCRNWIDTHMODE_WIDTH40:
                                 for (x=0; x<SCREEN_WIDTH/2; x++) {                                  for (x=0; x<SURFACE_WIDTH/2; x++) {
                                         *q++ = bmps_appal(&pals, bmc->pal, x1n_pal32[*p++].d);                                          *q++ = bmps_appal(&pals, bmc->pal, x1n_pal32[*p++].d);
                                 }                                  }
                                 p += SCREEN_WIDTH + (SCREEN_WIDTH/2);                                  p += SURFACE_WIDTH + (SURFACE_WIDTH/2);
                                 break;                                  break;
   
                         case SCRNWIDTHMODE_4096:                          case SCRNWIDTHMODE_4096:
                                 for (x=0; x<SCREEN_WIDTH/2; x++) {                                  for (x=0; x<SURFACE_WIDTH/2; x++) {
                                         *q++ = bmps_appal(&pals, bmc->pal,                                           *q++ = bmps_appal(&pals, bmc->pal, 
                                                                                 x1z_pal32[(p[320] << 8) | p[0]].d);                                                                                  x1z_pal32[(p[320] << 8) | p[0]].d);
                                         p++;                                          p++;
                                 }                                  }
                                 p += SCREEN_WIDTH + (SCREEN_WIDTH/2);                                  p += SURFACE_WIDTH + (SURFACE_WIDTH/2);
                                 break;                                  break;
                 }                  }
                 if (pals > 256) {                  if (pals > 256) {
Line 363  void bmpsavehalf(void) { Line 363  void bmpsavehalf(void) {
                 f = bmpextstr[3];                  f = bmpextstr[3];
                 p = screenmap;                  p = screenmap;
                 q = (BYTE *)bmc + sizeof(BMP_CTRL);                  q = (BYTE *)bmc + sizeof(BMP_CTRL);
                 for (y=0; y<SCREEN_HEIGHT/2; y++) {                  for (y=0; y<SURFACE_HEIGHT/2; y++) {
                         switch(scrn.widthmode) {                          switch(scrn.widthmode) {
                                 case SCRNWIDTHMODE_WIDTH80:                                  case SCRNWIDTHMODE_WIDTH80:
                                 default:                                  default:
                                         for (x=0; x<SCREEN_WIDTH/2; x++) {                                          for (x=0; x<SURFACE_WIDTH/2; x++) {
                                                 *(DWORD *)q = palettesmix(p).d;                                                  *(DWORD *)q = palettesmix(p).d;
                                                 p += 2;                                                  p += 2;
                                                 q += 3;                                                  q += 3;
                                         }                                          }
                                         p += SCREEN_WIDTH;                                          p += SURFACE_WIDTH;
                                         break;                                          break;
   
                                 case SCRNWIDTHMODE_WIDTH40:                                  case SCRNWIDTHMODE_WIDTH40:
                                         for (x=0; x<SCREEN_WIDTH/2; x++) {                                          for (x=0; x<SURFACE_WIDTH/2; x++) {
                                                 *(DWORD *)q = x1n_pal32[*p++].d;                                                  *(DWORD *)q = x1n_pal32[*p++].d;
                                                 q += 3;                                                  q += 3;
                                         }                                          }
                                         p += SCREEN_WIDTH + (SCREEN_WIDTH/2);                                          p += SURFACE_WIDTH + (SURFACE_WIDTH/2);
                                         break;                                          break;
   
                                 case SCRNWIDTHMODE_4096:                                  case SCRNWIDTHMODE_4096:
                                         for (x=0; x<SCREEN_WIDTH/2; x++) {                                          for (x=0; x<SURFACE_WIDTH/2; x++) {
                                                 *(DWORD *)q = x1z_pal32[(p[320] << 8) | p[0]].d;                                                  *(DWORD *)q = x1z_pal32[(p[320] << 8) | p[0]].d;
                                                 p++;                                                  p++;
                                                 q += 3;                                                  q += 3;
                                         }                                          }
                                         p += SCREEN_WIDTH + (SCREEN_WIDTH/2);                                          p += SURFACE_WIDTH + (SURFACE_WIDTH/2);
                                         break;                                          break;
                         }                          }
                 }                  }
Line 400  void bmpsavehalf(void) { Line 400  void bmpsavehalf(void) {
         else if (pals > 2) {          else if (pals > 2) {
                 f = bmpextstr[1];                  f = bmpextstr[1];
         }          }
         if ((r = savefileselect(f, "X1RH%04d.BMP")) != NULL) {          if ((r = savefileselect(f, OEMTEXT("X1RH%04d.BMP"))) != NULL) {
                 bmpsavefile(r, bmc);                  bmpsavefile(r, bmc);
         }          }
         GlobalUnlock(hbmc);          GlobalUnlock(hbmc);

Removed from v.1.1  
changed lines
  Added in v.1.3


RetroPC.NET-CVS <cvs@retropc.net>