Beispiel #1
0
static void *myrealloc(void *ptr, size_t size)
{
	/* There might be a realloc() out there that doesn't like reallocing
	NULL pointers, so we take care of it here */
	if(ptr)
		return Mem_ReAlloc (ptr, size);
	else
		return Mem_Alloc (size);
}
unsigned int _new_species(void) {
	/* --------------------------------------------------- */
	/* first time called with no species defined so
	 SW_VegEstab.count==0 and SW_VegEstab.parms is
	 not initialized yet, malloc() required.  For each
	 species thereafter realloc() is called.
	 */
	const char *me = "SW_VegEstab_newspecies()";
	SW_VEGESTAB *v = &SW_VegEstab;

	v->parms =
			(!v->count) ?
					(SW_VEGESTAB_INFO **) Mem_Calloc(v->count + 1, sizeof(SW_VEGESTAB_INFO *), me) :
					(SW_VEGESTAB_INFO **) Mem_ReAlloc(v->parms, sizeof(SW_VEGESTAB_INFO *) * (v->count + 1));
	v->parms[v->count] = (SW_VEGESTAB_INFO *) Mem_Calloc(1, sizeof(SW_VEGESTAB_INFO), me);

	return (++v->count) - 1;
}
Beispiel #3
0
void MD2SkinNum (const byte* buf, const char* fileName, int bufSize, void* userData)
{
	byte* copy = Mem_Dup(byte, buf, bufSize);
	dMD2Model_t* md2 = (dMD2Model_t*)copy;

	MD2HeaderCheck(md2, fileName, bufSize);

	const uint32_t numSkins = LittleLong(md2->num_skins);

	const uint32_t ofsST = LittleLong(md2->ofs_st);
	const uint32_t ofsTris = LittleLong(md2->ofs_tris);
	const uint32_t ofsFrames = LittleLong(md2->ofs_frames);
	const uint32_t ofsGLCmds = LittleLong(md2->ofs_glcmds);
	const uint32_t ofsEnd = LittleLong(md2->ofs_end);
	const uint32_t ofsSkins = LittleLong(md2->ofs_skins);

	uint32_t moveOffset = ofsEnd;
#define CHECKMAX(val) 	if ((val) > ofsSkins && (val) < moveOffset) moveOffset = (val);
	CHECKMAX(ofsST);
	CHECKMAX(ofsTris);
	CHECKMAX(ofsFrames);
	CHECKMAX(ofsGLCmds);
	CHECKMAX(ofsSkins);
#undef CHECKMAX

	Com_Printf("  \\ - skins %i\n", numSkins);
	int newSkins = 0;
	printf("  \\ - new skin number: ");
	fflush(stdout);
	scanf("%i", &newSkins);
	if (newSkins <= 0) {
		Com_Printf("A model must have a skin\n");
		Mem_Free(copy);
		return;
	}
	if (newSkins > MD2_MAX_SKINS) {
		Com_Printf("Only %i skins are allowed\n", MD2_MAX_SKINS);
		Mem_Free(copy);
		return;
	}

	if (newSkins == numSkins) {
		Mem_Free(copy);
		return;
	}

	const int32_t deltaSkins = newSkins - numSkins;
	const int32_t offsetDelta = deltaSkins * MD2_MAX_SKINNAME;
	if (ofsST > ofsSkins)
		md2->ofs_st = LittleLong(ofsST + offsetDelta);
	if (ofsTris > ofsSkins)
		md2->ofs_tris = LittleLong(ofsTris + offsetDelta);
	if (ofsFrames > ofsSkins)
		md2->ofs_frames = LittleLong(ofsFrames + offsetDelta);
	if (ofsGLCmds > ofsSkins)
		md2->ofs_glcmds = LittleLong(ofsGLCmds + offsetDelta);
	md2->ofs_end = LittleLong(ofsEnd + offsetDelta);
	md2->num_skins = LittleLong(newSkins);

	Com_Printf("change to %i skins\n", newSkins);
	if (deltaSkins > 0) {
		copy = (byte*)Mem_ReAlloc(copy, md2->ofs_end);
		md2 = (dMD2Model_t*)copy;
	}

	const int n = ofsEnd - moveOffset;
	byte* from = copy + moveOffset;
	byte* to = from + offsetDelta;
	memmove(to, from, n);

	if (deltaSkins > 0) {
		char*  md2Path = (char*) copy + LittleLong(md2->ofs_skins);
		for (int i = numSkins; i < numSkins + deltaSkins; i++) {
			char* name = md2Path + i * MD2_MAX_SKINNAME;
			memset(name, 0, MD2_MAX_SKINNAME);
			strcpy(name, ".none");
			Com_Printf("  \\ - skin %i: %s\n", i + 1, name);
			printf("  \\ - new skin: ");
			fflush(stdout);
			scanf(va("%%%is", MD2_MAX_SKINNAME), name);
		}
	}
	ScopedFile md2ModelFile;
	FS_OpenFile(fileName, &md2ModelFile, FILE_WRITE);
	if (!md2ModelFile) {
		Com_Printf("Error writing md2 file %s\n", fileName);
		Mem_Free(copy);
		return;
	}
	FS_Write(copy, md2->ofs_end, &md2ModelFile);
	Mem_Free(copy);
}
Beispiel #4
0
void ECP_ProcessItem(PECPITEM pItem, BOOL bSwitchFocus)
{
    LPTSTR pszCmd, psz, pszBuf;
    POINT ptOldSelStart, ptOldSelEnd, ptSelStart = { -1, -1 }, ptSelEnd = { -1, -1 };
    int yLines = 0, xChars = 0;

    if (pItem->bTcl == TRUE)
    {
        MyTcl_Eval(NULL, pItem->pszBody, TRUE);

        return;
    }
    else
    {
        pszBuf = pszCmd = (LPTSTR)Mem_AllocStr(_tcslen(pItem->pszBody) + SZ);
        psz = pItem->pszBody;
    }

    while (*psz != _T('\0'))
    {
        if (*psz == _T('\n'))
        {
            yLines++;
            xChars = -1; // Will be increased at end of while
        }
        
        if (*psz == _T('^'))
        {
            switch (*(++psz))
            {
            case _T('^'): // Escape Route
                *(pszBuf++) = *(psz++);
            break;
            case _T('|'): // Put Cursor here
                ptSelStart.y = ptSelEnd.y = yLines;
                ptSelStart.x = ptSelEnd.x = xChars;
                psz++;
            break;
            case _T('s'): // Put current selection here
            case _T('S'):
            {
                LPTSTR pszSelText = NULL;

                EditView_GetSelText(MDI_MyGetActive(TRUE), &pszSelText);

                pszCmd = (LPTSTR)Mem_ReAlloc(pszCmd,
                                            _tcslen(pItem->pszBody) +
                                            _tcslen(pszSelText) +
                                            _tcslen(pszCmd) +
                                            SZ);
                pszBuf = pszCmd + _tcslen(pszCmd);
                memcpy(pszBuf, pszSelText, _tcslen(pszSelText));
                pszBuf += _tcslen(pszSelText);
                psz++;
                        
                Mem_Free(pszSelText);
            }
            break;
            case _T('b'): // Begin selection here
            case _T('B'):
            {
                int i;
                LPTSTR pszEnd = (LPTSTR)Mem_AllocStr(_tcslen(++psz) + SZ);
                LPTSTR pszTempEnd;

                _tcscpy(pszEnd, psz);
                pszTempEnd = _tcsstr(pszEnd, _T("^e"));

                pszEnd[_tcslen(pszEnd) - _tcslen(pszTempEnd)] = _T('\0');
                psz += _tcslen(pszEnd);

                ptSelStart.y = yLines;
                ptSelStart.x = xChars;

                pszTempEnd = pszEnd;
                for (i = 0; i < (int)_tcslen(pszEnd); i++)
                {
                    if (pszEnd[i] == _T('\n'))
                        ptSelEnd.y++;

                    pszTempEnd++;
                }

                for ( ; pszTempEnd > pszEnd && *(--pszTempEnd) != _T('\n') ; )
                    ; // Empty Body

                ptSelEnd.x = _tcslen(pszTempEnd);
                ptSelEnd.x += (ptSelStart.y == ptSelEnd.y) ? ptSelStart.x : 0;

                memcpy(pszBuf, pszEnd, _tcslen(pszEnd));
                pszBuf += _tcslen(pszEnd);

                Mem_Free(pszEnd);
            }
            case _T('e'):
            case _T('E'):
                psz += 2;
            break;
            default:
                *(pszBuf++) = *(psz - 1);
                *pszBuf = *psz;
            break;
            }
        }
        else if (*psz == _T('\\'))
        {
            switch (*(++psz))
            {
//          case _T('\"'):
//          case _T('\\'):
            case _T('#'):
                *(pszBuf++) = *(psz++);
            break;
/*          case _T('n'):
            case _T('N'):
                *(pszBuf++) = _T('\r');
                *(pszBuf++) = _T('\n');
                psz++;
            break;*/
            default:
                *(pszBuf++) = *(psz - 1);
            break;
            }
        }
        else
        {
            *(pszBuf++) = *(psz++);
        }

        xChars++;
    }

    if (_tcslen(pszCmd) > 0)
        EditView_ReplaceSel(MDI_MyGetActive(TRUE), pszCmd);

    if (ptSelStart.y != -1)
    {
        EditView_GetSel(MDI_MyGetActive(TRUE), &ptOldSelStart, &ptOldSelEnd);
        ptSelStart.y += ptOldSelStart.y - yLines;
        ptSelEnd.y  += ptOldSelStart.y - yLines;
        EditView_SetSel(MDI_MyGetActive(TRUE), &ptSelStart, &ptSelEnd);
    }

    Mem_Free(pszCmd);

    if (bSwitchFocus)
        SetFocus(MDI_MyGetActive(TRUE));
}
Beispiel #5
0
LRESULT pascal
HexViewWndProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
   switch (iMsg) {
      case WM_CREATE: {
         PHV p = Mem_Alloc(MEMF_ZEROINIT, sizeof(HexViewInfo));
         HDC hDC = GetDC(0);
         int nHeight = -MulDiv(9, GetDeviceCaps(hDC, LOGPIXELSY), 72);
         ReleaseDC(0,hDC);
         p->hCreateFont = CreateFont(nHeight,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,ANSI_CHARSET,OUT_DEFAULT_PRECIS,
                   CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH,"Courier New");
         p->hFont = p->hCreateFont;
         p->BuffSize = 512;
         p->idCtl = GetWindowLong(hWnd, GWL_ID);
         SetWindowLong(hWnd, GWL_PHEXVIEW, (LONG)p);
         if (!hPenGutter) {
            hPenGutter = CreatePen(PS_SOLID,1,RGB(192,192,192));
            hBrushRow  = CreateSolidBrush(RGB(208,228,246));
         }
         break;
      }
      case WM_SETFONT: {
//       PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
//       p->hFont = (HFONT)wParam;
//       if (lParam) InvalidateRect(hWnd, NULL, FALSE);
         break;
      }
      case WM_GETFONT: {
         PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
         return (LRESULT)(p->hFont);
      }
      case WM_GETDLGCODE:
         return DLGC_WANTARROWS;
      case WM_ERASEBKGND:
         return 1;
      case WM_PRINTCLIENT:
         PaintControl(hWnd, (HDC)wParam);
         break;
      case WM_PAINT: {
         PAINTSTRUCT ps;
         HDC hDC = (wParam ? (HDC)wParam : BeginPaint(hWnd,&ps));
         PaintControl(hWnd, hDC);
         if (wParam) ValidateRect(hWnd,NULL);
         else EndPaint(hWnd, &ps);
         break;
      }
      case WM_LBUTTONDOWN: {
         PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
         UINT oldCaret = p->iCaret;
         HandleMouseClick(hWnd,LOWORD(lParam),HIWORD(lParam));
         if (p->iCaret != oldCaret) SendMessage(GetParent(hWnd),WM_COMMAND,MAKEWPARAM(p->idCtl,HVN_OFFSET_CHANGED),(LPARAM)hWnd);
         if (GetFocus()==hWnd) RepaintControl(hWnd);
         else SetFocus(hWnd);
         break;
      }
      case WM_KEYDOWN: {
         PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
         UINT oldCaret = p->iCaret;
         if (wParam == VK_LEFT) {
            if (oldCaret) p->iCaret--;
         } else if (wParam==VK_RIGHT) {
            if ((oldCaret+1) < p->BuffSize) p->iCaret++;
         } else if (wParam==VK_UP) {
            if (oldCaret>=COLS) p->iCaret -= COLS;
            else SendMessage(GetParent(hWnd),WM_COMMAND, MAKEWPARAM(p->idCtl,HVN_LINEUP),(LPARAM)hWnd);
         } else if (wParam==VK_DOWN) {
            if ((oldCaret+COLS) < p->BuffSize) p->iCaret += COLS;
            else SendMessage(GetParent(hWnd),WM_COMMAND, MAKEWPARAM(p->idCtl,HVN_LINEDOWN),(LPARAM)hWnd);
         } else if (wParam==VK_PRIOR) {
            SendMessage(GetParent(hWnd),WM_COMMAND, MAKEWPARAM(p->idCtl,HVN_PAGEUP),(LPARAM)hWnd);
            return 0;
         } else if (wParam==VK_NEXT) {
            SendMessage(GetParent(hWnd),WM_COMMAND, MAKEWPARAM(p->idCtl,HVN_PAGEDOWN),(LPARAM)hWnd);
            return 0;
         }
         if (p->iCaret != oldCaret) {
            RepaintControl(hWnd);
            SendMessage(GetParent(hWnd),WM_COMMAND,MAKEWPARAM(p->idCtl,HVN_OFFSET_CHANGED),(LPARAM)hWnd);
         }
         break;
      }
      case WM_SETFOCUS:
      case WM_KILLFOCUS:
      case HVM_REPAINT:
         RepaintControl(hWnd);
         break;

      /* ctrl-specific messages */
      case HVM_GETBUFFPTR: {
         PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
         return (LRESULT)(p->buffer);
      }
      case HVM_SETBUFFSIZE: {
         PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
         p = Mem_ReAlloc(p,MEMF_ZEROINIT,sizeof(HexViewInfo)-512+wParam);
         p->BuffSize = (UINT)wParam;
         if (p->iCaret>p->BuffSize) p->iCaret = 0;
         if (lParam) RepaintControl(hWnd);
         // Can be used to set a new buffer size. wParam = new buffer size in bytes.
         // Returns TRUE on success.
         // IMPORTANT NOTE: any previously stored buffer pointer will be invalidated
         // by this function.
         break;
      }
      case HVM_GETOFFSET: {
         PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
         return (LRESULT)(p->iCaret);
      }
      case HVM_SETOFFSET: {
         PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
         if (wParam<p->BuffSize && wParam!=p->iCaret) {
            p->iCaret = (UINT)wParam;
            if (lParam) RepaintControl(hWnd);
         }
         return (LRESULT)(p->iCaret);
      }
      case HVM_GETDIMENSIONS: {
         PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
         HDC hDC = GetDC(0);
         HFONT hFont = SelectObject(hDC,p->hFont);
         int w,h;
         SIZE step;
         GetCharSpacing(hDC,&step);
         SelectObject(hDC,hFont);
         ReleaseDC(0,hDC);
         h = step.cy+Y_PAD;
         w = step.cx*(3 + 3*COLS) + COLS*X_PAD + 16;
         return MAKELRESULT(w,h);
      }

      case WM_NCDESTROY: {
         PHV p = (PHV)GetWindowLong(hWnd,GWL_PHEXVIEW);
         p->hBm = SelectObject(p->hMemDC, p->hBm);
         DeleteObject(p->hBm);
         DeleteDC(p->hMemDC);
         if (p->hCreateFont) DeleteObject(p->hCreateFont);
         Mem_Free(p);
         break;
      }

      default:
         return DefWindowProc(hWnd,iMsg,wParam,lParam);
   }
   return 0;
}