Przepisac kod z C do Pascala

0

Mam krótki kodzik i zalezy mi na tym zeby go przepisac na pascala. Próbuje juz dlugo ale nie znam dobrze C i nic mi nie wychodzi :).

		dwp = (DWORD *)(cMsg + DEF_INDEX4_MSGID);
		*dwp = dwMsgID;
		wp  = (WORD *)(cMsg + DEF_INDEX2_MSGTYPE);
		*wp = NULL;
		cp = (char *)(cMsg + DEF_INDEX2_MSGTYPE + 2);
		ZeroMemory(cTxt, sizeof(cTxt)); 
		memcpy(cTxt, m_cAccountName, 10);
		memcpy(cp, cTxt, 10); 
		cp += 10;
		ZeroMemory(cTxt, sizeof(cTxt));
		memcpy(cTxt, m_cAccountPassword, 10);
		memcpy(cp, cTxt, 10); 
		cp += 10;
		memcpy(cp, m_cWorldServerName, 30);
		cp += 30;
iRet = m_pLSock->iSendMsg(cMsg, 56, cKey);

drugi kodzik:

int XSocket::iSendMsg(char * cData, DWORD dwSize, char cKey)
{
 WORD * wp;
 int    i, iRet;
	if (dwSize > m_dwBufferSize) return DEF_XSOCKEVENT_MSGSIZETOOLARGE;
	if (m_cType != DEF_XSOCK_NORMALSOCK) return DEF_XSOCKEVENT_SOCKETMISMATCH;
	if (m_cType == NULL) return DEF_XSOCKEVENT_NOTINITIALIZED;
	m_pSndBuffer[0] = cKey;
	wp  = (WORD *)(m_pSndBuffer + 1);
	*wp = (WORD)(dwSize + 3);
	memcpy((char *)(m_pSndBuffer + 3), cData, dwSize);
	if (cKey != NULL) {
		for (i = 0; i < (int)(dwSize); i++) {
			m_pSndBuffer[3+i] += (i ^ cKey);
			m_pSndBuffer[3+i] = (char)( m_pSndBuffer[3+i] ^ (cKey ^ (dwSize - i)) );
		}
	}
	if (m_bIsWriteEnabled == FALSE) {
		iRet = _iRegisterUnsentData(m_pSndBuffer, dwSize +3);
	} 
	else iRet = _iSend(m_pSndBuffer, dwSize + 3, TRUE);
	if (iRet < 0) return iRet;
	else return (iRet - 3);
}

Jesli ktos znalazl choc troche czasu zeby sie pomeczyc by to przetlumaczyc - wielkie dzieki :) </cpp>

0

Fragment 1. Przepisany na Delphi, bo czystego Pascala pod ręką nie mam:

dwp:=PDWORD(cMsg + DEF_INDEX4_MSGID);
dwp^:=dwMsgID;
wp:=PWORD(cMsg + DEF_INDEX2_MSGTYPE);
wp^:=nil;
cp:=PCHAR(cMsg + DEF_INDEX2_MSGTYPE + 2);
ZeroMemory(cTxt, sizeof(cTxt));
memcpy(cTxt, m_cAccountName, 10);
memcpy(cp, cTxt, 10);
inc(cp,10);
ZeroMemory(cTxt, sizeof(cTxt));
memcpy(cTxt, m_cAccountPassword, 10);
memcpy(cp, cTxt, 10);
inc(cp,10);
memcpy(cp, m_cWorldServerName, 30);
inc(cp,30);
iRet:=m_pLSock.iSendMsg(cMsg, 56, cKey);

Fragment2. Komentarz jak wyżej.

function XSocket.iSendMsg(cData:PChar; dwSize:DWORD; cKey:char):integer;
var wp:PWORD;
    i,iRet:integer;
begin
if (dwSize > m_dwBufferSize) then
  begin
  result:=DEF_XSOCKEVENT_MSGSIZETOOLARGE;
  exit;
  end;
if (m_cType <> DEF_XSOCK_NORMALSOCK) then
  begin
  result:=DEF_XSOCKEVENT_SOCKETMISMATCH;
  exit;
  end;
if (m_cType = 0) then
  begin
  result:=DEF_XSOCKEVENT_NOTINITIALIZED;
  exit;
  end;
m_pSndBuffer[0]:=cKey;
wp:=PWORD(m_pSndBuffer + 1);
wp^:=WORD(dwSize + 3);
memcpy(PChar(m_pSndBuffer + 3), cData, dwSize);
if (cKey <> #0) then
  for i:=0 to Integer(dwSize)-1 do
    begin
    m_pSndBuffer[3+i]:=m_pSndBuffer[3+i]+(i xor cKey);
    m_pSndBuffer[3+i]:=Char(m_pSndBuffer[3+i] xor (cKey xor (dwSize - i)) );
    end;
if (m_bIsWriteEnabled = FALSE) then
  iRet:=_iRegisterUnsentData(m_pSndBuffer, dwSize +3);
else
  iRet:=_iSend(m_pSndBuffer, dwSize + 3, TRUE);
if (iRet < 0) then
  begin
  result:=iRet;
  exit;
  end
else
  begin
  result:=iRet - 3;
  exit;
  end
end;

Ciężko przetłumaczyc fragment wyrwany z kontekstu, ale będzie to takie coś.

1 użytkowników online, w tym zalogowanych: 0, gości: 1