OSDN Git Service

updated copyleft and need to test and fix newer version of open watcom
[proj16/16.git] / src / lib / 16_mm.c
index e83003b..47fde07 100755 (executable)
@@ -1,5 +1,5 @@
 /* Project 16 Source Code~\r
- * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
+ * Copyright (C) 2012-2022 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
  *\r
  * This file is part of Project 16.\r
  *\r
@@ -1263,10 +1263,9 @@ void MM_SortMem (global_game_variables_t *gvar)
 \r
 \r
        SD_StopSound();*/\r
-#ifdef __WATCOMC__\r
+\r
        oldborder = gvar->video.bordercolor;\r
        gvar->video.bordercolor = VL_modexPalOverscan(gvar->video.palette, 4);\r
-#endif\r
 \r
        if (beforesort)\r
                beforesort();\r
@@ -1357,18 +1356,17 @@ extern char global_temp_status_text2[512];
 =====================\r
 */\r
 \r
-\r
 void MM_ShowMemory (global_game_variables_t *gvar)\r
 {\r
        mmblocktype far *scan;\r
-       unsigned color,temp,x,y         ,w,width;\r
+       unsigned color,temp,x,y         ,q,w/*,width*/,sw;\r
        sdword  end,owner;\r
        byte            scratch[160],scratch0[4096],str[16];\r
 #ifdef MMSMSCANINFO\r
        mmshowmemoryinfo_t scaninfo[MAXBLOCKS];\r
        byte scratch1[4];\r
-       unsigned                xpos,ypos, oldq,q,maxq;\r
-       boolean         done,restarted;\r
+       unsigned                /*xpos,ypos, */oldq,maxq;\r
+       boolean         done,restarted,mmsmscaninfoxyposinew;\r
        ScanCode                scancode;\r
 #endif\r
 \r
@@ -1379,15 +1377,15 @@ void MM_ShowMemory (global_game_variables_t *gvar)
        temp = BDOFSCONV gvar->video.BOFS;\r
        gvar->video.BOFS = gvar->video.DOFS;\r
 #ifdef MMSMSCANINFO\r
-       oldq = 0; restarted = false;\r
+       oldq = 0; restarted = false; mmsmscaninfoxyposinew = false;\r
 reset:\r
-       q = 0;\r
 #endif\r
        scan = gvar->mm.mmhead;\r
 \r
-       end = -1; w = 0;\r
+       end = -1; w = 0; q = 0;\r
 \r
-       width = gvar->video.page[0].width;\r
+       //width = gvar->video.page[0].width;\r
+       sw = gvar->video.page[0].sw;\r
 \r
        CA_OpenDebug (gvar);\r
        while (scan)\r
@@ -1419,20 +1417,20 @@ reset:
                        Quit (gvar, "MM_ShowMemory: Memory block order currupted!");\r
                }\r
                end = scan->length-1;\r
-               y = scan->start/width;\r
-               x = scan->start%width;\r
+               y = gvar->video.page[0].dx+(scan->start/sw);\r
+               x = gvar->video.page[0].dy+(scan->start%sw);\r
 #if 0\r
 //def MMSMSCANINFO\r
                if(restarted){\r
                        y += gvar->video.page[0].dy;\r
                        x += gvar->video.page[0].dx;\r
                }\r
-//#if 0\r
+#if 0\r
                else{\r
                        scaninfo[q].y = y;\r
                        scaninfo[q].x = x;\r
                }\r
-//#endif\r
+#endif\r
 #endif\r
                VW_Hlin(x,x+end,y,color,gvar);\r
                VL_Plot(x,y,5,gvar);\r
@@ -1478,7 +1476,10 @@ reset:
 #endif\r
                strcat(scratch0, AARESET);\r
                //strcat(scratch0,"\n");\r
-               strcat(scratch,"Seg:");\r
+               strcat(scratch,"Block:");\r
+               ultoa (q,str,10);\r
+               strcat (scratch,str);\r
+               strcat(scratch,"\tSeg:");\r
                ultoa (scan->start,str,16);\r
                strcat (scratch,str);\r
 //             strcat(scratch, AABLACK); strcat(scratch,"\t"); strcat(scratch, AARESET);\r
@@ -1498,21 +1499,21 @@ reset:
 //0000fprintf(stdout, "[%u]\n", q);\r
 \r
                scan = scan->next;\r
-#ifdef MMSMSCANINFO\r
                q++;\r
-#endif\r
-//0000if(q==1 && gvar->video.VL_Started && color!=6) IN_Ack(gvar);\r
+\r
+//0000if(gvar->video.VL_Started && color!=6) IN_Ack(gvar);\r
        }\r
 \r
        CA_CloseDebug (gvar);\r
 \r
-#if 0\r
-//def MMSMPANVID\r
+#ifdef MMSMPANVID\r
        {\r
                int dx,dy,odx,ody;\r
                odx = gvar->video.page[0].dx;\r
                ody = gvar->video.page[0].dy;\r
                dx = dy = 0;\r
+\r
+               while (!(scancode = gvar->in.inst->LastScan)){}\r
                while(!gvar->in.inst->Keyboard[sc_Escape] && !gvar->in.inst->Keyboard[sc_Space])\r
                {\r
                        if(gvar->in.inst->Keyboard[sc_UpArrow])\r
@@ -1545,15 +1546,16 @@ reset:
        }\r
 #endif\r
 #ifdef MMSMSCANINFO\r
-//#define MMSMSCANINFOXYPOSNEW\r
-//{\r
-       maxq = q;\r
+       if (gvar->video.VL_Started) IN_Ack(gvar);\r
+       maxq = q-1;\r
        if(restarted) q = oldq;\r
        else q = 0;\r
        restarted = false;\r
 \r
-       IN_Ack(gvar);\r
-//     VL_ClearVideo (8);\r
+       while (!(scancode = gvar->in.inst->LastScan)){}\r
+//     IN_ClearKey(scancode);\r
+//     IN_Ack(gvar);\r
+\r
        for (done = false;!done;)\r
        {\r
                if(scaninfo[q].scan->attributes & PURGEBITS)\r
@@ -1573,16 +1575,23 @@ reset:
                        //printf("%s", AARED);\r
                }\r
                end = scaninfo[q].scan->length-1;\r
-//modexprint(page, x, y, t, tlsw, color, bgcolor, vidsw, const byte *str);\r
-#define MMSMPRINTMEMINFO modexprint(&(gvar->video.page[0]), xpos, ypos, 1, 1, color, 8, gvar->video.VL_Started, global_temp_status_text); ypos+=8;\r
+\r
+               gvar->video.print.t=1;\r
+               gvar->video.print.tlsw=1;\r
+               gvar->video.print.color=color;\r
+               gvar->video.print.bgcolor=8;\r
+#define MMSMPRINTMEMINFO       VL_print(global_temp_status_text, 0, gvar); gvar->video.print.y+=8;\r
+//modexprint(&(gvar->video.page[0]), xpos, ypos, 1, 1, color, 8, gvar->video.VL_Started, global_temp_status_text);\r
 #ifdef __WATCOMC__\r
                if(gvar->video.VL_Started)\r
                {\r
                        VL_ShowPage(&gvar->video.page[0], 1, 0);\r
-                       modexClearRegion(&gvar->video.page[0], 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 8);\r
+                       modexClearRegion(&gvar->video.page[0], gvar->video.page[0].dx, gvar->video.page[0].dy, gvar->video.page[0].sw, gvar->video.page[0].sh, 8);\r
                }else\r
 #endif\r
+               {\r
                        clrscr();\r
+               }\r
                sprintf(global_temp_status_text, "block #%04u", q); MMSMPRINTMEMINFO\r
 //             sprintf(global_temp_status_text, "%Fp", scaninfo[q].scan->useptr); MMSMPRINTMEMINFO\r
                sprintf(global_temp_status_text, "start:  %04x", (unsigned)scaninfo[q].scan->start); MMSMPRINTMEMINFO\r
@@ -1591,20 +1600,21 @@ reset:
                if (scaninfo[q].scan->next && scaninfo[q].scan->next->start > end+1)\r
                {\r
                        sprintf(global_temp_status_text, "free: %05u", (unsigned)(scaninfo[q].scan->next->start-scaninfo[q].scan->start)); MMSMPRINTMEMINFO\r
-               }else   ypos+=8;\r
+               }else   /*ypos*/gvar->video.print.y+=8;\r
                if(gvar->video.VL_Started)\r
                {\r
-                       y = scaninfo[q].scan->start/width;\r
-                       x = scaninfo[q].scan->start%width;\r
-#ifndef MMSMSCANINFOXYPOSNEW\r
-                       y = ypos;\r
-                       x = xpos;\r
-#else\r
-                       //y = scaninfo[q].y;\r
-                       //x = scaninfo[q].x;\r
-                       y += gvar->video.page[0].dy;\r
-                       x += gvar->video.page[0].dx;\r
-#endif\r
+                       y = scaninfo[q].scan->start/sw;\r
+                       x = scaninfo[q].scan->start%sw;\r
+                       if(!mmsmscaninfoxyposinew)\r
+                       {\r
+                               y = gvar->video.print.y;//ypos;\r
+                               x = gvar->video.print.x;//xpos;\r
+                       }else{\r
+                               //y = scaninfo[q].y;\r
+                               //x = scaninfo[q].x;\r
+                               y += gvar->video.page[0].dy;\r
+                               x += gvar->video.page[0].dx;\r
+                       }\r
                        VW_Hlin(x,x+end,y,color,gvar);\r
                        VL_Plot(x,y,5,gvar);\r
                }\r
@@ -1612,7 +1622,6 @@ reset:
                {\r
                        printf("%s", scratch1);\r
                        printf("%s", AAGREY); printf("_");\r
-//                     if(scaninfo[q].scan->length<64000)\r
                        for(w=(scaninfo[q].scan->start)/80;w<=end/80;w++)\r
                        {\r
                                //strcat(scratch1, "+");\r
@@ -1638,8 +1647,8 @@ reset:
                if(gvar->video.VL_Started)\r
                {\r
                        //if (scan->next && scan->next->start > end+1) free\r
-                       xpos = gvar->video.page[0].dx;\r
-                       ypos = gvar->video.page[0].dy;//(gvar->video.page[0].sh-(32));//8*4\r
+                       /*xpos*/gvar->video.print.x = gvar->video.page[0].dx;\r
+                       /*ypos*/gvar->video.print.y = gvar->video.page[0].dy;\r
                }\r
                else\r
                {\r
@@ -1654,6 +1663,11 @@ reset:
                IN_ClearKey(scancode);\r
                switch (scancode)\r
                {\r
+                       case sc_Enter:\r
+                               if(!mmsmscaninfoxyposinew) mmsmscaninfoxyposinew = true;\r
+                               else mmsmscaninfoxyposinew = false;\r
+                               //mmsmscaninfoxyposinew!=mmsmscaninfoxyposinew;\r
+                       break;\r
                        case sc_LeftArrow:\r
                                if(q>0) q--;\r
                                else    q = maxq;\r
@@ -1663,29 +1677,26 @@ reset:
                                else q = 0;\r
                        break;\r
                        case sc_UpArrow:\r
-                               if(q>10) q-=10;\r
+                               if(q>9) q-=10;\r
                                else    q = maxq;\r
                        break;\r
                        case sc_DownArrow:\r
-                               if(q<maxq+10) q+=10;\r
+                               if(q<maxq-9) q+=10;\r
                                else q = 0;\r
                        break;\r
                        case sc_Space:\r
-//                             scan = gvar->mm.mmhead;\r
-//                             x = gvar->video.page[0].dx;\r
-//                             y = gvar->video.page[0].dy;//(gvar->video.page[0].sh-(32));//8*4\r
                                oldq = q;\r
                                restarted = true;\r
-                               modexClearRegion(&gvar->video.page[0], 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 8);\r
+#ifdef __WATCOMC__\r
+                               if(gvar->video.VL_Started) modexClearRegion(&gvar->video.page[0], gvar->video.page[0].dx, gvar->video.page[0].dy, gvar->video.page[0].sw, gvar->video.page[0].sh, 8);\r
+#endif\r
                                goto reset;\r
-                       break;\r
+\r
                        case sc_Escape:\r
                                done = true;\r
                        break;\r
                }\r
        }\r
-//}\r
-//     MM_ShowMemoryDetail (x, y, w, q, end, &scaninfo, gvar);\r
 #else\r
        if(gvar->video.VL_Started) IN_Ack(gvar);\r
 #endif\r
@@ -1693,135 +1704,9 @@ reset:
        gvar->video.BOFS = (byte __far *)temp;\r
 }\r
 \r
-#if 0\r
-//def MMSMSCANINFO\r
-void MM_ShowMemoryDetail (unsigned x, unsigned y, unsigned w, unsigned q, sdword end, mmshowmemoryinfo_t *scaninfo, global_game_variables_t *gvar)\r
-       {\r
-               byte scratch1[4];\r
-               unsigned                maxq = q;\r
-               boolean                 done;\r
-               ScanCode                scancode;\r
-               int xpos,ypos;\r
-               word ccolor = 3;\r
-               IN_Ack(gvar);\r
-//             VL_ClearVideo (8);\r
-               for (q = 0,done = false;!done;)\r
-               {\r
-                       if(scaninfo[q].scan->attributes & PURGEBITS)\r
-                       {\r
-                               ccolor = 6;             // dark purple = purgable\r
-                               strcpy(scratch1, AAMAGENTA);            // dark purple = purgable\r
-                               //printf("%s", AAMAGENTA);\r
-                       }else{\r
-                               ccolor = 2;             // medium blue = non purgable\r
-                               strcpy(scratch1, AABLUE);               // medium blue = non purgable\r
-                               //printf("%s", AABLUE);\r
-                       }\r
-                       if(scaninfo[q].scan->attributes & LOCKBIT)\r
-                       {\r
-                               ccolor = 1;             // red = locked\r
-                               strcpy(scratch1, AARED);                // red = locked\r
-                               //printf("%s", AARED);\r
-                       }\r
-                       end = scaninfo[q].scan->length-1;\r
-//modexprint(page, x, y, t, tlsw, color, bgcolor, vidsw, const byte *str);\r
-#define MMSMPRINTMEMINFO modexprint(&(gvar->video.page[0]), xpos, ypos, 1, 1, ccolor, 8, gvar->video.VL_Started, global_temp_status_text); ypos+=8;\r
-#ifdef __WATCOMC__\r
-                       if(gvar->video.VL_Started)\r
-                       {\r
-                               VL_ShowPage(&gvar->video.page[0], 1, 0);\r
-                               modexClearRegion(&gvar->video.page[0], 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 8);\r
-                       }else\r
-#endif\r
-                               clrscr();\r
-                       sprintf(global_temp_status_text, "block #%04u", q); MMSMPRINTMEMINFO\r
-//                     sprintf(global_temp_status_text, "%Fp", scaninfo[q].scan->useptr); MMSMPRINTMEMINFO\r
-                       sprintf(global_temp_status_text, "start:  %04x", (unsigned)scaninfo[q].scan->start); MMSMPRINTMEMINFO\r
-                       sprintf(global_temp_status_text, "useptr: %04x", (unsigned)scaninfo[q].scan->useptr); MMSMPRINTMEMINFO\r
-                       sprintf(global_temp_status_text, "size: %05u", (unsigned)scaninfo[q].scan->length); MMSMPRINTMEMINFO\r
-                       if (scaninfo[q].scan->next && scaninfo[q].scan->next->start > end+1)\r
-                       {\r
-                               sprintf(global_temp_status_text, "free: %05u", (unsigned)(scaninfo[q].scan->next->start-scaninfo[q].scan->start)); MMSMPRINTMEMINFO\r
-                       }\r
-                       if(gvar->video.VL_Started)\r
-                       {\r
-                               y = ypos;//scaninfo[q].scan->start/width;\r
-                               x = xpos;//scaninfo[q].scan->start%width;\r
-                               VW_Hlin(x,x+end,y,ccolor,gvar);\r
-                               VL_Plot(x,y,5,gvar);\r
-                       }\r
-                       else\r
-                       {\r
-                               printf("%s", scratch1);\r
-                               printf("%s", AAGREY); printf("_");\r
-                               if(scaninfo[q].scan->length<64000)\r
-                               for(w=(scaninfo[q].scan->start)/80;w<=end/80;w++)\r
-                               {\r
-                                       //strcat(scratch1, "+");\r
-                                       printf("+");\r
-                               }\r
-                       }\r
-\r
-\r
-                               if (scaninfo[q].scan->next && scaninfo[q].scan->next->start > end+1) if(!gvar->video.VL_Started)\r
-                               {\r
-                                       //strcat(scratch1, AARESET);\r
-                                       printf("%s", AARESET);\r
-                                       //strcat(scratch1,AAGREEN);\r
-                                       printf("%s", AAGREEN);\r
-                                       for(w=(end+1)/80;w<=((scaninfo[q].scan->next->start-scaninfo[q].scan->start)/80);w++)\r
-                                       {\r
-                                               //strcat(scratch1,"0");\r
-                                               printf("0");\r
-                                       }\r
-                               }else VW_Hlin(x+end+1,x+(scaninfo[q].scan->next->start-scaninfo[q].scan->start),y,3,gvar);      // black = free//now green\r
-\r
-\r
-                       if(gvar->video.VL_Started)\r
-                       {\r
-                               //if (scan->next && scan->next->start > end+1) free\r
-                               xpos = gvar->video.page[0].dx;\r
-                               ypos = gvar->video.page[0].dy;//(gvar->video.page[0].sh-(32));//8*4\r
-                       }\r
-                       else\r
-                       {\r
-                               //printf("%s\n", scratch1);\r
-                               printf("%s", AARESET);\r
-                               printf("\n");\r
-                       }\r
-//0000printf("%s", AABLACK); fprintf(stdout, "q=%u     maxq=%u\n", q, maxq); printf("%s", AARESET);\r
-//fprintf(stdout, ""); //this is a HAX to make it decrement and increment properly when it is at 0 and qmax\r
-                       while (!(scancode = gvar->in.inst->LastScan)){}\r
-\r
-                       IN_ClearKey(scancode);\r
-                       switch (scancode)\r
-                       {\r
-                               case sc_LeftArrow:\r
-                                       if(q>0) q--;\r
-                                       else    q = maxq;\r
-                               break;\r
-                               case sc_RightArrow:\r
-                                       if(q<maxq) q++;\r
-                                       else q = 0;\r
-                               break;\r
-                               case sc_UpArrow:\r
-                                       if(q>10) q-=10;\r
-                                       else    q = maxq;\r
-                               break;\r
-                               case sc_DownArrow:\r
-                                       if(q<maxq+10) q+=10;\r
-                                       else q = 0;\r
-                               break;\r
-                               case sc_Escape:\r
-                                       done = true;\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-#endif\r
-\r
 //==========================================================================\r
 \r
+\r
 /*\r
 =====================\r
 =\r