]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/16_mm.c
16_ca needs huge amounts of work and I should remember what needs to be done soon...
[16.git] / src / lib / 16_mm.c
index 544d280aca3ba052c22747653a5ce1d922712228..a5903b0cfd16f833414408bbeae43e9ada938411 100755 (executable)
@@ -1357,13 +1357,20 @@ 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,q,width;\r
+       unsigned color,temp,x,y         ,w,width;\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
+       ScanCode                scancode;\r
+#endif\r
 \r
        if(!gvar->video.page[0].width) gvar->video.page[0].sw = gvar->video.page[0].width = 320;        //to prevent division by 0\r
 //--   VL_SetLineWidth(40, gvar);\r
@@ -1371,16 +1378,23 @@ void MM_ShowMemory (global_game_variables_t *gvar)
        //gvar->video.ofs.bufferofs = gvar->video.ofs.displayofs;\r
        temp = BDOFSCONV gvar->video.BOFS;\r
        gvar->video.BOFS = gvar->video.DOFS;\r
+#ifdef MMSMSCANINFO\r
+       oldq = 0; restarted = false;\r
+reset:\r
+       q = 0;\r
+#endif\r
        scan = gvar->mm.mmhead;\r
 \r
        end = -1; w = 0;\r
 \r
-       width = gvar->video.page[0].width; q = 0;\r
+       width = gvar->video.page[0].width;\r
 \r
        CA_OpenDebug (gvar);\r
        while (scan)\r
        {\r
+#ifdef MMSMSCANINFO\r
                scaninfo[q].scan = scan;\r
+#endif\r
                strcpy(scratch, AARESET);\r
                if(scan->attributes & PURGEBITS)\r
                {\r
@@ -1411,8 +1425,18 @@ void MM_ShowMemory (global_game_variables_t *gvar)
                end = scan->length-1;\r
                y = scan->start/width;\r
                x = scan->start%width;\r
-               scaninfo[q].x = x;\r
-               scaninfo[q].y = y;\r
+#ifdef MMSMSCANINFO\r
+               if(restarted){\r
+                       y += gvar->video.page[0].dy;\r
+                       x += gvar->video.page[0].dx;\r
+               }\r
+#if 0\r
+               else{\r
+                       scaninfo[q].y = y;\r
+                       scaninfo[q].x = x;\r
+               }\r
+#endif\r
+#endif\r
                VW_Hlin(x,x+end,y,color,gvar);\r
                VL_Plot(x,y,5,gvar);\r
 //++==++==optional                     strcat(scratch0, AARESET); strcat(scratch0, AAGREY); strcat(scratch0,"_");\r
@@ -1477,19 +1501,22 @@ void MM_ShowMemory (global_game_variables_t *gvar)
 //0000fprintf(stdout, "[%u]\n", q);\r
 \r
                scan = scan->next;\r
+#ifdef MMSMSCANINFO\r
                q++;\r
-//if(color!=6) IN_Ack(gvar);\r
+#endif\r
+//0000if(q==1 && gvar->video.VL_Started && color!=6) IN_Ack(gvar);\r
        }\r
 \r
        CA_CloseDebug (gvar);\r
 \r
-#ifdef MMSMPANVID\r
+#if 0\r
+//def 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
-               while(!gvar->in.inst->Keyboard[sc_Escape])\r
+               while(!gvar->in.inst->Keyboard[sc_Escape] && !gvar->in.inst->Keyboard[sc_Space])\r
                {\r
                        if(gvar->in.inst->Keyboard[sc_UpArrow])\r
                        {\r
@@ -1521,16 +1548,156 @@ void MM_ShowMemory (global_game_variables_t *gvar)
        }\r
 #endif\r
 #ifdef MMSMSCANINFO\r
-       MM_ShowMemoryDetail (x, y, w, q, end, &scaninfo, gvar);\r
+//#define MMSMSCANINFOXYPOSNEW\r
+//{\r
+       maxq = q;\r
+       if(restarted) q = oldq;\r
+       else q = 0;\r
+       restarted = false;\r
+\r
+       IN_Ack(gvar);\r
+//     VL_ClearVideo (8);\r
+       for (done = false;!done;)\r
+       {\r
+               if(scaninfo[q].scan->attributes & PURGEBITS)\r
+               {\r
+                       color = 6;              // dark purple = purgable\r
+                       strcpy(scratch1, AAMAGENTA);            // dark purple = purgable\r
+                       //printf("%s", AAMAGENTA);\r
+               }else{\r
+                       color = 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
+                       color = 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, color, 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
+               }else   ypos+=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
+                       VW_Hlin(x,x+end,y,color,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
+\r
+\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_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
+                               goto reset;\r
+                       break;\r
+                       case sc_Escape:\r
+                               done = true;\r
+                       break;\r
+               }\r
+       }\r
+//}\r
+//     MM_ShowMemoryDetail (x, y, w, q, end, &scaninfo, gvar);\r
 #endif\r
 \r
 \r
-       if(gvar->video.VL_Started) IN_Ack(gvar);\r
+//??   if(gvar->video.VL_Started) IN_Ack(gvar);\r
 \r
        gvar->video.BOFS = (byte __far *)temp;\r
 }\r
 \r
-#ifdef MMSMSCANINFO\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
@@ -1560,13 +1727,7 @@ void MM_ShowMemoryDetail (unsigned x, unsigned y, unsigned w, unsigned q, sdword
                                //printf("%s", AARED);\r
                        }\r
                        end = scaninfo[q].scan->length-1;\r
-/*typedef struct mmblockstruct{\r
-       word    start,length;\r
-       unsigned        attributes;\r
-       memptr          *useptr;        // pointer to the segment start\r
-       struct mmblockstruct far *next;\r
-} mmblocktype;*/\r
-                       //modexprint(page, x, y, t, tlsw, color, bgcolor, vidsw, const byte *str);\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
@@ -1632,7 +1793,7 @@ void MM_ShowMemoryDetail (unsigned x, unsigned y, unsigned w, unsigned q, sdword
                                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
+//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