Addon from Dr.Golova[uinC]: ============================ void dg_memset(void* output, int value, int len) { if (len) { do { *(unsigned char*)output = (unsigned char)value; output = (void*)((unsigned int)output + 1); }while(--len != 0); } } void dg_memcpy(void* output, void* input, int len) { if (len) { do { *(unsigned char*)output = *(unsigned char*)input; input = (void*)((unsigned int)input + 1); output = (void*)((unsigned int)output + 1); } while (--len != 0); } } Функции для работы с heap. Вначале нужно объявить глобальную переменную HANDLE hHeap. Затем делаем dg_heap_init() и приступаем к работе. void dg_init_heap(void) { hHeap = HeapCreate(0, 0xFFFF, 0); } void* dg_malloc(int size) { return (hHeap) ? HeapAlloc(hHeap, 0, size) : NULL; } void* dg_calloc(int num, int size) { return (hHeap) ? HeapAlloc(hHeap, HEAP_ZERO_MEMORY, num*size) : NULL; } void dg_free(void* ptr) { HeapFree(hHeap, 0, ptr); } Addon from KMiNT21[uinC]: ============================ LPSTR NORTL_GetCommandLineParameters(void) { LPSTR lpstrCmdLine=GetCommandLine(); if (lpstrCmdLine==NULL) return NULL; if (lpstrCmdLine[0]==0) return NULL; //MessageBox(0,lpstrCmdLine,"cmdline parameters:",0); if (lpstrCmdLine[0]=='\"') // for /"x:\xxxxxxx xxxxx\xxxxxxxx\xxxxxxxx.exe"/ do lpstrCmdLine++; while (lpstrCmdLine[0]!='\"'); else // for /xxxxxxxx.exe/ do lpstrCmdLine++; while (lpstrCmdLine[0]!=' '); lpstrCmdLine+=2; if (lpstrCmdLine[0]==0) return NULL; return lpstrCmdLine; } // И еще одна функция, которую писал на скорую руку, не задумываясь особо // о том, как сделать ее универсальной. // Если у вас есть лучшая реализация, присылайте - выложим. int NORTL_8char_atoi(const char *s) { int i; for (i=0;i='0')&&(s[i]<='9'))) return FALSE; i=0; i+=1*(-'0'+(unsigned char)s[lstrlen(s)-1]); if (lstrlen(s)-2 <0 ) return i; i+=10*(-'0'+(unsigned char)s[lstrlen(s)-2]); if (lstrlen(s)-3 <0 ) return i; i+=100*(-'0'+(unsigned char)s[lstrlen(s)-3]); if (lstrlen(s)-4 <0 ) return i; i+=1000*(-'0'+(unsigned char)s[lstrlen(s)-4]); if (lstrlen(s)-5 <0 ) return i; i+=10000*(-'0'+(unsigned char)s[lstrlen(s)-5]); if (lstrlen(s)-6 <0 ) return i; i+=100000*(-'0'+(unsigned char)s[lstrlen(s)-6]); if (lstrlen(s)-7 <0 ) return i; i+=1000000*(-'0'+(unsigned char)s[lstrlen(s)-7]); if (lstrlen(s)-8 <0 ) return i; i+=10000000*(-'0'+(unsigned char)s[lstrlen(s)-8]); return i; }