이전에 C파일에서 H파일 H파일에서 C파일로 토클 되는 macro를 만든 적이 있다.
개발 소스 환경이 바뀌어 include 디렉토리가 따로 관리되다 보니 C/H가 같은 경로에 있지 않아
적용 되지 않았다.
소스 인사이트에 풀패스를 주지 않아도 되기 때문에 아래와 같이 업글 하였다.
pos 는 .에 위치
pos2는 백슬래쉬에 위치를 찾아
파일이름만 뜯어 내서 거기에 확장자를 붙여 열어 주니 된다.
macro OpenSourceHeader()
{
hbuf = GetCurrentBuf()
bufFileName = tolower(GetBufName(hbuf))
pos = strlen(bufFileName)-1
pos2 = strlen(bufFileName)-1
while(bufFileName[pos] != ".")
pos = pos -1
while(bufFileName[pos2] != "\\") //<--추가된 곳
pos2= pos2 -1
szFileNameOnly = strmid(bufFileName,pos2+1,pos) //<--이름만 얻는다.
szFileExt = strmid(bufFileName, pos + 1, strlen(bufFileName))
if (szFileExt =="c" || szFileExt=="cpp" || szFileExt=="cxx" )
{
openbufFileName = cat(szFileNameOnly , ".h")
hopenbuf = OpenBuf(openbufFileName)
if (hopenbuf == hNil)
{
openbufFileName = cat(szFileNameOnly , ".hpp")
hopenbuf = OpenBuf(openbufFileName)
}
if (hopenbuf == hNil)
{
openbufFileName = cat(szFileNameOnly , ".hxx")
hopenbuf = OpenBuf(openbufFileName)
}
if (hopenbuf == hNil)
{
Msg(openbufFileName)
return
}
SetCurrentBuf (hopenbuf)
}
else if (szFileExt=="h" || szFileExt=="hpp" || szFileExt=="hxx")
{
openbufFileName = cat(szFileNameOnly , ".c")
hopenbuf = OpenBuf(openbufFileName)
if (hopenbuf == hNil)
{
openbufFileName = cat(szFileNameOnly , ".cpp")
hopenbuf = OpenBuf(openbufFileName)
}
if (hopenbuf == hNil)
{
openbufFileName = cat(szFileNameOnly , ".cxxx")
hopenbuf = OpenBuf(openbufFileName)
}
if (hopenbuf == hNil)
{
Msg(openbufFileName)
return
}
SetCurrentBuf (hopenbuf)
}
}
2009년 6월 30일 화요일
2009년 6월 26일 금요일
.svn 디렉토리들을 제거 하기...
svn으로 관리되는 소스에는 .svn 디렉토리 들이 매 디렉토리 마다 있다.
일단 svn에서 관리 하지 않고 단지 소스를 복사 해서 본다고 하면.
보이지 않는 이 디렉토리들을 제거 하고 싶을 때가 있다.
find . -name .svn -print0 | xargs -0 rm -rf
간단하게 모두 제거 하자....
일단 svn에서 관리 하지 않고 단지 소스를 복사 해서 본다고 하면.
보이지 않는 이 디렉토리들을 제거 하고 싶을 때가 있다.
find . -name .svn -print0 | xargs -0 rm -rf
간단하게 모두 제거 하자....
2009년 6월 20일 토요일
2009년 6월 16일 화요일
ubuntu ext3->ext4
9.04에서 ext4를 지원한다.
업그레이드를 한것으로 ext3 상태이다.
인터넷을 보니 ext4가 성능이 더 좋다 하길래 감행 하였다.
1. 먼저 GRUB 부팅에서 recovery를 선택
다음 메뉴에서 root 머시기를 선택
fdisk -l 을 해서 먼저 ext4로 변경 할 /dev/sdaN을 확인 한다.
내경우 /dev/sda5, /dev/sda2였다.
변경후 fstab을 다시 마운트 해서 수정 해라고 했지만 실제로 해보니 read only라면서
마운트 포지션을 만들지도 못하고 마운트 못하는 경우가 집에 laptop에서 발생 했다.
그래서 순서를 변경
먼저 vi로 fstab을 변경 ext3->ext4
그리고
umount /dev/sda2
umount /dev/sda5
해준다음
tune2fs -O extents,uninit_bg,dir_index /dev/sda2
tune2fs -O extents,uninit_bg,dir_index /dev/sda5
한다음 (이미 변경)
아래와 같이 검사
fsck -pDf /dev/sda2
fsck -pDf /dev/sda5
좀오래 걸림
재부팅
ext4로 변경 되고 재부팅 잘됨
성능은 얼마나 좋아 졌는지 모르지만
그냥 한번 변경 해 보았는데.. 지금 까지는 특별한 문제 없이 잘 동작 함..
업그레이드를 한것으로 ext3 상태이다.
인터넷을 보니 ext4가 성능이 더 좋다 하길래 감행 하였다.
1. 먼저 GRUB 부팅에서 recovery를 선택
다음 메뉴에서 root 머시기를 선택
fdisk -l 을 해서 먼저 ext4로 변경 할 /dev/sdaN을 확인 한다.
내경우 /dev/sda5, /dev/sda2였다.
변경후 fstab을 다시 마운트 해서 수정 해라고 했지만 실제로 해보니 read only라면서
마운트 포지션을 만들지도 못하고 마운트 못하는 경우가 집에 laptop에서 발생 했다.
그래서 순서를 변경
먼저 vi로 fstab을 변경 ext3->ext4
그리고
umount /dev/sda2
umount /dev/sda5
해준다음
tune2fs -O extents,uninit_bg,dir_index /dev/sda2
tune2fs -O extents,uninit_bg,dir_index /dev/sda5
한다음 (이미 변경)
아래와 같이 검사
fsck -pDf /dev/sda2
fsck -pDf /dev/sda5
좀오래 걸림
재부팅
ext4로 변경 되고 재부팅 잘됨
성능은 얼마나 좋아 졌는지 모르지만
그냥 한번 변경 해 보았는데.. 지금 까지는 특별한 문제 없이 잘 동작 함..
2009년 6월 12일 금요일
DSN 이름 으로 부터 IP, PORT, USERNAME, DB NAME, NLS_USE 등 얻기
레지스트리에서 DSN이름으로 아래의 정보를 구할수 있음
#include <registry.hpp>
..... 아래처럼 함수를 구현 한다. ....
/DNS 으로 부터 기타 정보 얻기 IP, NAME, ...
//registry HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\DSN
TRegistry* reg = new TRegistry(KEY_READ);
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("SOFTWARE",FALSE);
reg->OpenKey("ODBC",FALSE);
reg->OpenKey("ODBC.INI",FALSE);
reg->OpenKey(cbboxDSNList->Text,FALSE);
edtServer->Text = reg->ReadString("Server");
edtDatabase->Text = reg->ReadString("Database");
cbboxNLS->Text = reg->ReadString("NLS_USE");
edtPasswd->Text = reg->ReadString("Password");
edtPort->Text = reg->ReadString("Port");
edtUserName->Text = reg->ReadString("User");
#include <registry.hpp>
..... 아래처럼 함수를 구현 한다. ....
/DNS 으로 부터 기타 정보 얻기 IP, NAME, ...
//registry HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\DSN
TRegistry* reg = new TRegistry(KEY_READ);
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("SOFTWARE",FALSE);
reg->OpenKey("ODBC",FALSE);
reg->OpenKey("ODBC.INI",FALSE);
reg->OpenKey(cbboxDSNList->Text,FALSE);
edtServer->Text = reg->ReadString("Server");
edtDatabase->Text = reg->ReadString("Database");
cbboxNLS->Text = reg->ReadString("NLS_USE");
edtPasswd->Text = reg->ReadString("Password");
edtPort->Text = reg->ReadString("Port");
edtUserName->Text = reg->ReadString("User");
2009년 6월 11일 목요일
DSN List 얻기
//---------------------------------------------------------------------------
#include <vcl.h>
#include <sql.h>
#include <sql.h>
#include <sqlext.h>
#include <sqltypes.h>//---------------------------------------------------------------------------
#pragma hdrstop
#pragma comment(lib, "odbc32.lib")
#include "regServerUnit.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmRegisterDatabaseServer *frmRegisterDatabaseServer;
//---------------------------------------------------------------------------
__fastcall TfrmRegisterDatabaseServer::TfrmRegisterDatabaseServer(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmRegisterDatabaseServer::FormCreate(TObject *Sender)
{
//DSN 리스트 얻기
HENV hEnv;
char tmpDSN[256];
SWORD tmpDSNLen = 255;
SWORD ResultLen;
UCHAR tmpDriver[256];
SWORD tmpDriverLen = 255;
SWORD ResultDescLen;
RETCODE ReturnCode = SQL_SUCCESS;
UnicodeString DSNList;
ReturnCode = ::SQLAllocEnv(&hEnv);
if (SQL_SUCCESS == ReturnCode)
{
ReturnCode = ::SQLDataSources(hEnv, SQL_FETCH_FIRST, tmpDSN, tmpDSNLen, &ResultLen, tmpDriver, tmpDriverLen, &ResultDescLen);
while(!ReturnCode)
{
// additional processing
DSNList = tmpDSN;
cbboxDSNList->AddItem(DSNList,NULL);
ReturnCode = ::SQLDataSources(hEnv, SQL_FETCH_NEXT, tmpDSN, tmpDSNLen, &ResultLen, tmpDriver, tmpDriverLen, &ResultDescLen);
};
}
}
//---------------------------------------------------------------------------
2009년 6월 3일 수요일
피드 구독하기:
글 (Atom)

