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; }
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); }
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)); }
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; }