573 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			573 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
#include "StdAfx.h"
 | 
						|
 | 
						|
#include "connect.h"
 | 
						|
#include "server.h"
 | 
						|
#include "sqlfile.h"
 | 
						|
 | 
						|
long TPrassiConnection::OpenFile(int nLogicNum, LPCSTR sWhere)
 | 
						|
{
 | 
						|
	TSqlFile* pSqlFile;
 | 
						|
	long nHandle = nLogicNum*1000;
 | 
						|
	for ( ; m_sqlFiles.Lookup(nHandle, pSqlFile); nHandle++);
 | 
						|
 | 
						|
	pSqlFile = new TSqlFile(m_nFirm, nLogicNum, sWhere, Id());
 | 
						|
	
 | 
						|
	if (pSqlFile->Open() == 0)
 | 
						|
		m_sqlFiles.SetAt(nHandle, pSqlFile);
 | 
						|
	else
 | 
						|
	{
 | 
						|
		delete pSqlFile;
 | 
						|
		nHandle = 0;
 | 
						|
	}
 | 
						|
 | 
						|
	return nHandle;
 | 
						|
}
 | 
						|
 | 
						|
TSqlFile* TPrassiConnection::GetFile(long nHandle)
 | 
						|
{
 | 
						|
	TSqlFile* pSqlFile = NULL;
 | 
						|
	m_sqlFiles.Lookup(nHandle, pSqlFile);
 | 
						|
	if (pSqlFile == NULL && nHandle < 1000)
 | 
						|
	{
 | 
						|
		int nLogicNum = nHandle;
 | 
						|
		pSqlFile = new TSqlFile(m_nFirm, nLogicNum, NULL, Id());
 | 
						|
		if (pSqlFile->Exists())
 | 
						|
			m_sqlFiles.SetAt(nLogicNum, pSqlFile);
 | 
						|
		else
 | 
						|
		{
 | 
						|
			delete pSqlFile;
 | 
						|
			pSqlFile = NULL;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return pSqlFile;
 | 
						|
}
 | 
						|
 | 
						|
BOOL TPrassiConnection::CloseFile(long nHandle)
 | 
						|
{
 | 
						|
	TSqlFile* pSqlFile = GetFile(nHandle);
 | 
						|
	if (pSqlFile)
 | 
						|
	{
 | 
						|
		delete pSqlFile;
 | 
						|
		m_sqlFiles.RemoveKey(nHandle);
 | 
						|
	}
 | 
						|
 | 
						|
	return pSqlFile != NULL;
 | 
						|
}
 | 
						|
 | 
						|
BOOL TPrassiConnection::SetFirm(int nFirm)
 | 
						|
{
 | 
						|
	BOOL bOk = m_nFirm == nFirm;
 | 
						|
	if (!bOk)
 | 
						|
	{
 | 
						|
		TPrassiServer& s = GetServer();
 | 
						|
		bOk = s.TestFirm(nFirm);
 | 
						|
		if (bOk)
 | 
						|
		{
 | 
						|
			long nHandle;
 | 
						|
			TSqlFile* pSqlFile;
 | 
						|
			for (POSITION pos = m_sqlFiles.GetStartPosition(); pos; )
 | 
						|
			{
 | 
						|
				m_sqlFiles.GetNextAssoc(pos, nHandle, pSqlFile);
 | 
						|
				pSqlFile->SetFirm(nFirm); 	
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return bOk;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// Jolly2File
 | 
						|
 | 
						|
static TSqlFile* Jolly2File(TConnection& conn, void *pJolly)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = NULL;
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	if (argv.GetSize() > 1)
 | 
						|
	{
 | 
						|
		TPrassiConnection& c = (TPrassiConnection&)conn;
 | 
						|
		const long n = atol(argv[1]);
 | 
						|
		pFile = c.GetFile(n);
 | 
						|
	}
 | 
						|
	return pFile;
 | 
						|
}
 | 
						|
 | 
						|
static TSqlFile* Jolly2FileInt(TConnection& conn, void *pJolly, int& num)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = NULL;
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	if (argv.GetSize() > 2)
 | 
						|
	{
 | 
						|
		pFile = Jolly2File(conn, pJolly);
 | 
						|
		num = atoi(argv[2]);
 | 
						|
	}
 | 
						|
	return pFile;
 | 
						|
}
 | 
						|
 | 
						|
static TSqlFile* Jolly2FileIntInt(TConnection& conn, void *pJolly, int& num, int& flag)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = NULL;
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	if (argv.GetSize() > 3)
 | 
						|
	{
 | 
						|
		pFile = Jolly2File(conn, pJolly);
 | 
						|
		num = atoi(argv[2]);
 | 
						|
		flag = atoi(argv[3]);
 | 
						|
	}
 | 
						|
	return pFile;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
static TSqlFile* Jolly2FileString(TConnection& conn, void *pJolly, CString& str)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = NULL;
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	if (argv.GetSize() > 2)
 | 
						|
	{
 | 
						|
		pFile = Jolly2File(conn, pJolly);
 | 
						|
		str = argv[2];
 | 
						|
	}
 | 
						|
	return pFile;
 | 
						|
}
 | 
						|
 | 
						|
static TSqlFile* Jolly2FileStringInt(TConnection& conn, void *pJolly, CString& str, int& num)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = NULL;
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	if (argv.GetSize() > 3)
 | 
						|
	{
 | 
						|
		pFile = Jolly2File(conn, pJolly);
 | 
						|
		str = argv[2];
 | 
						|
		num = atoi(argv[3]); 
 | 
						|
	}
 | 
						|
	return pFile;
 | 
						|
}
 | 
						|
 | 
						|
static TSqlFile* Jolly2FileStringString(TConnection& conn, void *pJolly, CString& str, CString& val)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = NULL;
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	if (argv.GetSize() > 3)
 | 
						|
	{
 | 
						|
		pFile = Jolly2File(conn, pJolly);
 | 
						|
		str = argv[2];
 | 
						|
		val = argv[3]; 
 | 
						|
	}
 | 
						|
	return pFile;
 | 
						|
}
 | 
						|
 | 
						|
static int Jolly2Int(void *pJolly)
 | 
						|
{
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	int n = 0;
 | 
						|
	if (argv.GetSize() > 1)
 | 
						|
		n = atoi(argv[1]);
 | 
						|
	return n;
 | 
						|
}
 | 
						|
 | 
						|
static CString Jolly2String(void *pJolly)
 | 
						|
{
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	CString str;
 | 
						|
	if (argv.GetSize() > 1)
 | 
						|
		str = argv[1];
 | 
						|
	return str;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileClearFields(int nHandle)
 | 
						|
 | 
						|
BOOL f_FileClearFields(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = Jolly2File(conn, pJolly);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->ClearFields());
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileClose(int nHandle)
 | 
						|
 | 
						|
BOOL f_FileClose(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	if (argv.GetSize() > 1)
 | 
						|
	{
 | 
						|
		TPrassiConnection& c = (TPrassiConnection&)conn;
 | 
						|
		long nHandle = atol(argv[1]);
 | 
						|
		TSqlFile* pFile = c.GetFile(nHandle);
 | 
						|
		if (pFile)
 | 
						|
		{
 | 
						|
			int err = pFile->Close();
 | 
						|
			if (err == 0)
 | 
						|
				c.CloseFile(nHandle);
 | 
						|
 			return conn.ReturnInteger(err);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileFirst(int nHandle)
 | 
						|
 | 
						|
int f_FileFirst(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int nLocks;
 | 
						|
	TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nLocks);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->First(nLocks));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileGetField(int nHandle, CString strName)
 | 
						|
 | 
						|
BOOL f_FileGetField(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	CString strName;
 | 
						|
	TSqlFile* pFile = Jolly2FileString(conn, pJolly, strName);
 | 
						|
	if (pFile)
 | 
						|
	{
 | 
						|
		const char* str = pFile->GetField(strName);
 | 
						|
		if (str)
 | 
						|
			return conn.ReturnString(str);
 | 
						|
	}
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// CString FileGetFieldInfo(int nLogicNum, int nIndex)
 | 
						|
 | 
						|
BOOL f_FileGetFieldInfo(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int nIndex;
 | 
						|
	TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nIndex);
 | 
						|
	if (pFile)
 | 
						|
	{
 | 
						|
		CString strInfo = pFile->GetFieldInfo(nIndex);
 | 
						|
		return conn.ReturnString(strInfo);
 | 
						|
	}
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileGetItems(long nHandle)
 | 
						|
 | 
						|
BOOL f_FileGetItems(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = Jolly2File(conn, pJolly);
 | 
						|
	if (pFile)
 | 
						|
	{
 | 
						|
 		int items = pFile->GetRecordCount();
 | 
						|
		if (items >= 0)
 | 
						|
			return conn.ReturnInteger(items);
 | 
						|
	}
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileGetKey(int nHandle)
 | 
						|
 | 
						|
BOOL f_FileGetKey(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = Jolly2File(conn, pJolly);
 | 
						|
	if (pFile)
 | 
						|
	{
 | 
						|
		int key = pFile->GetKey();
 | 
						|
		if (key > 0)
 | 
						|
			return conn.ReturnInteger(key);
 | 
						|
	}
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// CString FileGetKeyExpr(int nLogicNum)
 | 
						|
 | 
						|
BOOL f_FileGetKeyExpr(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int key;
 | 
						|
	TSqlFile* pFile = Jolly2FileInt(conn, pJolly, key);
 | 
						|
	if (pFile)
 | 
						|
		return conn.ReturnString(pFile->GetKeyExpr(key));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileGetPosition(int nHandle)
 | 
						|
 | 
						|
BOOL f_FileGetPosition(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = Jolly2File(conn, pJolly);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->GetPosition());
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileLast(int nHandle, int nLock)
 | 
						|
 | 
						|
BOOL f_FileLast(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int nLocks;
 | 
						|
	TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nLocks);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->Last(nLocks));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileLock(int nHandle)
 | 
						|
 | 
						|
BOOL f_FileLock(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = Jolly2File(conn, pJolly);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->ExclusiveLock());
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileMove(int nHandle, int pos)
 | 
						|
 | 
						|
BOOL f_FileMove(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int nPos, nLocks;
 | 
						|
	TSqlFile* pFile = Jolly2FileIntInt(conn, pJolly, nPos, nLocks);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->Move(nPos, nLocks));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileNext(int nHandle)
 | 
						|
 | 
						|
BOOL f_FileNext(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int nLocks;
 | 
						|
	TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nLocks);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->Next(nLocks));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileOpen(int nLogicNum)
 | 
						|
 | 
						|
BOOL f_FileOpen(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	if (argv.GetSize() > 1)
 | 
						|
	{
 | 
						|
		TPrassiConnection& c = (TPrassiConnection&)conn;
 | 
						|
		int nLogicNum = atoi(argv[1]);
 | 
						|
		LPCSTR sWhere = NULL;
 | 
						|
		if (argv.GetSize() > 2)
 | 
						|
			sWhere = argv[2];
 | 
						|
		long nHandle = c.OpenFile(nLogicNum, sWhere);
 | 
						|
		if (nHandle)
 | 
						|
			return c.ReturnInteger(nHandle);
 | 
						|
	}
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileOpenTable(const char* str)
 | 
						|
 | 
						|
BOOL f_FileOpenTable(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	const CStringArray& argv = *(CStringArray*)pJolly;
 | 
						|
	if (argv.GetSize() > 1)
 | 
						|
	{
 | 
						|
		TPrassiConnection& c = (TPrassiConnection&)conn;
 | 
						|
		const char* tab = argv[1];
 | 
						|
		int nLogicNum = 5;
 | 
						|
		if (!isalnum(*tab))
 | 
						|
		{
 | 
						|
			nLogicNum--;
 | 
						|
			tab++;
 | 
						|
		}
 | 
						|
		CString strWhere;
 | 
						|
		strWhere.Format("COD='%s'", tab);
 | 
						|
		if (argv.GetSize() > 2)
 | 
						|
		{
 | 
						|
			strWhere += " AND ";
 | 
						|
			strWhere += argv[2];
 | 
						|
		}
 | 
						|
		long nHandle = c.OpenFile(nLogicNum, strWhere);
 | 
						|
		if (nHandle)
 | 
						|
			return c.ReturnInteger(nHandle);
 | 
						|
	}
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FilePrev(int nHandle)
 | 
						|
 | 
						|
BOOL f_FilePrev(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int nLocks;
 | 
						|
	TSqlFile* pFile = Jolly2FileInt(conn, pJolly, nLocks);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->Prev(nLocks));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileRead(int nHandle, CString where, int flags)
 | 
						|
 | 
						|
BOOL f_FileRead(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	CString fields;
 | 
						|
	int flags;
 | 
						|
	TSqlFile* pFile = Jolly2FileStringInt(conn, pJolly, fields, flags);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->Read(fields, flags));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileRemove(int nHandle, CString key)
 | 
						|
 | 
						|
BOOL f_FileRemove(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	CString key;
 | 
						|
	TSqlFile* pFile = Jolly2FileString(conn, pJolly, key);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->Remove(key));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileRewrite(int nHandle, CString key)
 | 
						|
 | 
						|
BOOL f_FileRewrite(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	CString key;
 | 
						|
	TSqlFile* pFile = Jolly2FileString(conn, pJolly, key);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->Rewrite(key));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileSetField(int nHandle, int field, CString value)
 | 
						|
// int FileSetField(int nHandle, CString field, CString value)
 | 
						|
 | 
						|
BOOL f_FileSetField(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	CString strField;
 | 
						|
	CString strValue;
 | 
						|
	TSqlFile* pFile = Jolly2FileStringString(conn, pJolly, 
 | 
						|
		                                     strField, strValue);
 | 
						|
	if (pFile)
 | 
						|
	{
 | 
						|
		const int nIndex = atoi(strField);
 | 
						|
		int err;
 | 
						|
		if (nIndex > 0)
 | 
						|
			err = pFile->SetField(nIndex, strValue);
 | 
						|
		else
 | 
						|
			err = pFile->SetField(strField, strValue);
 | 
						|
		return conn.ReturnInteger(err);
 | 
						|
	}
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileSetKey(int nHandle, int key)
 | 
						|
 | 
						|
BOOL f_FileSetKey(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int key;
 | 
						|
	TSqlFile* pFile = Jolly2FileInt(conn, pJolly, key);
 | 
						|
	if (pFile)
 | 
						|
	{
 | 
						|
		int nErr = pFile->SetKey(key);
 | 
						|
		return conn.ReturnInteger(nErr);
 | 
						|
	}
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileSkip(int nHandle, int pos)
 | 
						|
 | 
						|
BOOL f_FileSkip(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int nPos, nLocks;
 | 
						|
	TSqlFile* pFile = Jolly2FileIntInt(conn, pJolly, nPos, nLocks);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->Skip(nPos, nLocks));
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileUnlock(int nHandle)
 | 
						|
 | 
						|
BOOL f_FileUnlock(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = Jolly2File(conn, pJolly);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->ExclusiveUnlock());
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FileWrite(int nHandle)
 | 
						|
 | 
						|
BOOL f_FileWrite(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	TSqlFile* pFile = Jolly2File(conn, pJolly);
 | 
						|
	if (pFile)
 | 
						|
 		return conn.ReturnInteger(pFile->Write());
 | 
						|
	return FALSE;
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FirmGet()
 | 
						|
 | 
						|
BOOL f_FirmGet(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	TPrassiConnection& c = (TPrassiConnection&)conn;
 | 
						|
	return c.ReturnInteger(c.GetFirm());
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FirmSet()
 | 
						|
 | 
						|
BOOL f_FirmSet(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int nFirm = Jolly2Int(pJolly);
 | 
						|
	TPrassiConnection& c = (TPrassiConnection&)conn;
 | 
						|
	return c.ReturnBool(c.SetFirm(nFirm));
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// int FirmTest()
 | 
						|
 | 
						|
BOOL f_FirmTest(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	int nFirm = Jolly2Int(pJolly);
 | 
						|
	TPrassiServer& s = GetServer();
 | 
						|
	return conn.ReturnBool(s.TestFirm(nFirm));
 | 
						|
}
 | 
						|
 | 
						|
///////////////////////////////////////////////////////////
 | 
						|
// void* FtpGetFile(CString)
 | 
						|
 | 
						|
BOOL f_FtpGetFile(TConnection& conn, void* pJolly)
 | 
						|
{
 | 
						|
	CString filename;
 | 
						|
	filename = Jolly2String(pJolly);
 | 
						|
	FILE* f = fopen(filename, "rb");
 | 
						|
	if (f != NULL)
 | 
						|
	{
 | 
						|
		fseek(f, 0, SEEK_END);
 | 
						|
		DWORD dwSize = ftell(f); 
 | 
						|
		BYTE* pData  = conn.Server().GetBuffer(dwSize);
 | 
						|
		fseek(f, 0, SEEK_SET);
 | 
						|
		size_t r = fread(pData, dwSize, 1, f);
 | 
						|
		fclose(f);
 | 
						|
	}
 | 
						|
 | 
						|
	return f != NULL;
 | 
						|
}
 |