11월, 2014의 게시물 표시

OS/2 codes: How to pass linker commands to a linker using gcc

Some flags are availabile only to linkers such as ld and emxomfld. To use those flags, it is possible to use ld or emxomfld directly. But it is not recommended, because it is not compatible and comfortable. If so, what are the ways to pass linker commands to linker using gcc ? gcc has two options. One is [-Wl,], which is supported on cross-platform. The other is [-Zlinker], which is specific to OS/2. gcc with [-Wl,] passes commands separated by comma[,] to linkers such as ld or emxomfld. For example, both ld and emxomfld support -Zdll-search, which enables to find .dll as an ordinary library, but it is disabled by default. gcc does not supports this option directly. To enable dll search feature, [-Wl,] is needed, like this. gcc -Wl,-Zdll-search ... gcc with [-Zlinker] passes a command to linkers such as LINK386, ILINK or WLINK. That is, it passes commands only to emxomfld. In fact, it passes to ld as well. But an option(-O) which emxomfld understand but ld does not is prepend...

Porting to OS/2: Case #19 Windows and Odin

OS/2 and Windows are based on similar architectures. Because of these, when porting programs for other platforms to OS/2, Windows codes are very helpful. Then how about porting from Windows to OS/2 directly ? As I said above, architectures used on OS/2 and Windows are similar. So it's possible to think that porting is relatively easy. However, implementing and replacing Windows APIs are hard and boring task. Especially, porting GUI APIs is peak. Nevertheless, there is no need to be afraid beforehand. Find the way to go slowly. Implementing Windows APIs First way is to implement Windows APIs directly. When you try to this, MSDN is your friend. You should implement those APIs in according to specifications of MSDN. If you have no clues, then try googling or refer to Odin sources. Many people already implemented many Windows APIs in Odin proejct. And Odin project is being maintained at netlabs. Window Coordinate Systems When implementing GUI APIs, there is one thing whic...

Porting to OS/2: Case #18 Qt basic

Qt is a very powerful cross-platform framework. And it was ported to OS/2, but it is more or less old. Because the latest upstream version is 5.3, and OS/2 version is 4.7.3. Nevertheless, Qt4 is still very powerful and useful. In addition, bww bitwise works, who is porting Qt to OS/2, has a plan to port Qt5 as well. So I recommend to use Qt if you have a plan to create GUI programs for OS/2 rather than native PM APIs. And this has another benefits. If you don't use specific codes to OS/2, then you can create a program for other platforms with minimum modifications. This is true when porting to OS/2. That is, if some programs have no specific codes to specific OSes, they can be ported to OS/2 easily. Based on this aspect, let's find basic ways to port programs using Qt to OS/2. Basic procedures to build Qt-programs is like the following. qmake make What a simple. But sometimes, some projects requires some tasks such as configure before qmake. Or, they may use other pr...

별의 적경과 위치 쉽게 알아내기

이미지
지구과학을 공부할 때 만나게 되는 가장 어려운 부분 중의 하나가 천구이다. 그 중에서 별의 적경을 계산하고, 시간에 따라 하늘에서의 위치를 파악하려면 머리가 뽀개질 지경이 된다. 이렇게 복잡하고 어려운 까닭은 적경은 천구의 적도면을 기준으로 하고, 하늘의 위치는 관측자의 지평면을 기준으로 하기 때문에, 3 차원 입체 천구 속에서 서로 교차하는 두 개의 평면을, 머리 속에 떠올리는 것은 쉽지 않고, 게다가 종이 같은 것에 그린다 하더라도 워낙 선들이 많아지니 복잡하기 이를 데 없기 때문이다. 그럼 이대로 주저앉아서 머리가 빙빙 돌다 뽀개지기를 기다려야 하는가 ? 그래야 한다면 이 글을 쓰고 있을까? ^^ 원리는 간단하다. 하나의 평면에 방위와 적경을 모두 나타내면 된다. 너무 간단한가 ? 계속 나아가보자. 그렇다면 지평면과 적도면, 두 개의 평면 중에 어떤 평면을 기준으로 삼는 것이 좋을까 ? 관측은 관측자 중심으로 이루어지기 때문에 지평면을 기준으로 하는 것이 좋다. 다음 그림은 지평면과 적도면을 하나로 합쳐 나타낸 새로운 관측자의 하늘이다. 우선 눈에 띄는 것은 북쪽이 위쪽이 아니라 남쪽이 위쪽이라는 것이다. 이것은 일반적으로 대부분의 천체가 동쪽에서 떠서 남쪽 하늘을 거쳐 서쪽으로 지는 것을 반영한 것이다. 그리고 가운데에 있는 지평선은 하늘에 떠 있는 천체와 이미 지고 보이지 않는 천체를 가르는 기준이다. 곧 지평선보다 위쪽(남쪽)에 있는 천체는 하늘에 떠 있는 것이고, 지평선보다 아래쪽(북쪽)에 있는 천체는 이미 지고 보이지 않는 것이다. 끝으로 각 방위별로 표시되어 있는 시간은 태양의 위치를 뜻한다. 왜냐하면 우리가 사용하는 시간 자체가 태양의 위치를 기준으로 정해지기 때문이다. 예를 들어 현재 시각이 정오(오후 12시)라면 태양은 남쪽 하늘에 위치해 있는 것이고, 오후 6시라면 태양은 서쪽 지평선에 걸려 있는 것이다. 이제 여기에 적경을 적용해 보자. 적경을 알기 위해서는 춘분점의 위치를 알아야 한다. 춘분점의 위치를 알기...

SubGit 으로 만든 git 저장소에 svn 저장소의 변경 사항이 적용되지 않을 때 해결 방법

SubGit 은 git 를 이용해서 svn 저장소에 접근할 수 있는 기능을 제공하는 아주 강력한 도구이다. 하지만 가끔 svn 저장소에는 분명히 변경 사항이 있는데, git 에서는 보이지 않는 경우가 있다. 처음에는 svn 을 git 로 바꾸는 작업을 처음부터 다시 했었는데, svn 저장소가 매우 크다면 git 저장소로 바꾸는데 시간이 꽤 많이 걸린다. 그래서 좀 더 나은 방법이 없을까 생각해보다 찾아낸 것이 SubGit 의 install 명령을 다시 수행하는 것이다. 이미 있는 git 저장소에 subgit install 을 다시 수행하면 git 저장소에 아직 적용되지 않은 변경 사항만을 svn 저장소로부터 가져온다. 따라서 훨씬 시간이 줄어든다. 예를 들어, git 저장소가 ~/git/repo.git 이라면, subgit install ~/git/repo.git  을 하면, 다시 올바르게 작동한다. // ---- 2014/12/20 subgit 과 git 저장소를 원격 서버에 설치해서 쓰고 있는데, subgit 데몬이 시간이 좀 지나면 저절로 죽었다. 이게 꽤 빈번한터라, 매번 서버에 접속해서 subgit install 을 수행야 했는데, 정말 귀찮은 작업이었다. 그래서 더 좋은 방법이 있지 않을까해서 개발사에 물어보았다. 개발사의 설명은 이랬다. 일단 subgit 데몬이 죽는 이유는 로그 분석에 따르면 커널이 죽이는 것이라고 했다. 해결 방법으로는 메모리를 늘리거나 스왑을 설정하라라는 것이었는데, 관리자가 아닌 서버에 더부살이 하는 입장에서 그렇게 하기에는 힘들었다. 그리고 svn 저장소로부터 git 저장소로 변경사항들을 가져오려면 이를 위한 데몬이 실행되어야 하는데, 문제는 이 데몬이 자동으로 실행되지 않는다는 것이다. 데몬이 실행되는 경우는 두 경우라고 한다. 하나는 subgit install 이고, 다른 하나는 git push 이다. git pull 은 해당되지 않는다. 따라서 아무리 git pull 을 하더라도...

구글 드라이브에 HWP 올리기

이미지
요즘에는 많은 사람들이 안드로이드 기반 스마트 폰을 쓰고 있는지라, 적어도 한 사람당 구글 계정 하나씩은 가지고 있다. 이 구글 계정을 통해 구글의 많은 서비스를 이용하고 있는데, 그 중에서도 구글 드라이브라는 클라우드 저장 서비스를 이용할 수 있다. 계정이 하나 만들어지면 15GB 의 저장 공간이 주어지는데, 다른 유사 서비스에 비해 용량이 작은 것 같지만, 몇 가지 조건만 맞으면 저장 공간 사용량으로 인정되지 않기 때문에, 그리 작은 공간도 아니다. 그리고 계정을 원하는 만큼 만들 수 있기 때문에 사실 저장 공간이 제약되는 것도 아니다. 여러 개의 계정을 관리해야 하는 번거로움이 있지만... 저장 공간을 사용하지 않는 방법으로 구글 드라이브에 맞는 문서로 변환해서 저장하는 것이 있다. 구글 드라이브는 MS 오피스 문서를 거의 완벽하게 변환한다. 하지만, 안타깝게도 HWP 에 대해서는 지원하지 않는다. 그대로 올리면 문제 없지만, 구글 드라이브에서 직접 보고 싶은 경우에 상당히 아쉬운 점이다. 하지만 아예 방법이 없는 것은 아니다. HWP 파일을 MS Word 문서로 변환하면 된다. 첫번째는 HWP 에서 MS Word 문서로 저장하는 것이고, 두번째는 MS Word 에서 HWP 읽어 들여 MS Word 형태로 저장하는 것이다. 최신 버전의 한글은 모르겠지만, 한글 2007 에서는 수식이 올바르게 변환되지 않았다. 하지만 MS Word 에서는 올바르게 읽어들였다. MS Word 에서 HWP 를 읽어 들이기 위해서는 별도의 변환도구가 필요하다. 아래 링크를 따라가면 받을 수 있다. Microsoft Word를 위한 아래아한글 문서 변환 도구 받을 파일은 자신이 사용하는 오피스에 따라 달라진다. 오피스가 32비트(x86)용이라면 HwpConverter_x86_ko-kr.exe 를 받고, 오피스가 64비트(x64)용이라면 HwpConverter_x64_ko-kr.exe 를 받으면 된다. 잘 모르겠으면, 둘 다 받고 하나씩 설치해서 HW...

OS/2 codes: How to writes initialization/termination codes with gcc

When programming, one of the most annoying things is to write initialization/termination codes. In case of DLL, OS/2 provides the opportunity for this by _DLL_InitTerm(). However, if it is a static library, OS/2 does not provide any ways for this. Instead, compilers provides its own ways for this. Of course, gcc has its own ways. They are __attribute__((consturctor)) for intialization and __attribute__((destructor)) for termination. Here are the sample code. Colored By Color Scripter ™ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include  <stdio.h> __attribute__((constructor)) static   void  before(  void  ) {     printf( "constructor : before()\n" ); } __attribute__((destructor)) static   void  after(  void  ) {     printf( "destructor : after()\n" ); } int  main(  void  ) {     printf( "ma...