[UNIX & C] Pixel단위 화면제어가 Terminal Mode에서 가능한

asura313의 이미지

음...짧게 쓰려고 노력한 제목이라 내용 전달이 제대로 안되었을거라 생각됩니다.

유닉스환경에서 C를 이용하여 화면을 제어할땐 보통

Character Base 화면제어방식인 curses를 이용합니다.

그런데, Character Base가 아닌 Pixel단위로도 제어가 가능한지,

가능하다면 어떤 라이브러리와 함수를 사용해야 하는지 궁금합니다.

물론, X-Window나 Java 등등의 GUI가 아닌 환경을 말씀드리는겁니다.

예전에 SPC-1000이나 Apple ][ 같은 경우에는 Character Base와

Pixel단위 제어가 모두 가능했었는데... 지금 저의 지식으로는 UNIX환경에서

C로 Pixel단위 화면제어를 할 수 있는 방법을 알아낼 수가 없네요.

고수분들께 문의드립니다.

감사합니다.

fox9의 이미지

유닉스라 하시면 어느 특정 유닉스로 정해져 있는 것인가요?
리눅스를 말씀하신것이라면 Frame Buffer를 이용해서 원하시는 것 비슷(?)한 것을 하실수 있습니다.
물론 X-Window 구동안시키고 가능한 것입니다.
google에서 검색해보시면 많이 나옵니다.

간단한 예제는 아래의 링크 한번 보시면 될듯

http://linux-sarang.net/board/?p=read&table=tip&no=10165&page=&o[at]=s&o[sc]=a&o[ss]=frame&o[st]=a

asura313의 이미지

Solaris, AIX, HP-UX, ...

대부분의 상용 유닉스에서 모두 사용 가능한 방법이 있는지를 말씀드린거구요

답변이 올라오는 중에 게시판을 검색해본 결과...

제가 원하는 답이 svgalib 였다는걸 알게 되었습니다.

그런데 한가지 문제는,

svgalib가 위에 열거한 상용유닉스들에서 기본적으로 제공이 될까요?

음...지금 소스를 받아서 열어보니... ALPHA에 포팅된다...라는 글귀가

있는것으로 미루어보아.. 다른 유닉스들에서는 안되거나 없을수도 있겠네요

한번 다른 유닉스 장비에서 svgalib같은 라이브러리가 있는지 찾아보고

정보를 공유하도록 하겠습니다.

그리고 짧은 시간에 답변주셔서 감사합니다. ^^

제가 이런 정보가 필요한 건,

여러 장비에 포팅 될 수 있는 패키지를 만들어야 하므로(대부분 상용유닉스)

리눅스에서만 되는건 저한테는 큰 의미가 없어서 입니다.

ㅎㅎ 물론 온 세상의 모든 장비가 다 리눅스를 쓴다면 좋겠지만...

뭐...현실은 꼭 그렇지만은 않아서...

cjh의 이미지

그렇게 하려면 해당 장비의 프레임버퍼를 직접 제어해야 하는데, 많은 경우 텍스트 모드에서는 픽셀단위 제어가 불가능하기 때문에 안될 겁니다. x86 linux의 svgalib같은 경우는 화면을 SVGA모드로 바꾸고 그림을 그리는 것이지 일반적인 80x24 텍스트 모드에서 픽셀단위로 그림을 그릴 수 있다는 이야기가 아닙니다.
비디오 칩셋이 어떤 것이냐에 따라 완전히 다르겠죠.

--
익스펙토 페트로눔

newmania의 이미지

프레임버퍼 드라이버가 정상적으로 동작한다면 현재 설정된 비디오 모드에 해당되는 데이터를 /dev/fb0 에 직접 쓰면 화면에 나타나기 시작합니다. mmap 을 이용하여 application 에서 사용가능한 포인터를 얻어 화면 전체 메모리를 얻은 뒤에 write 하시면 됩니다.

bugiii의 이미지

그래픽 모드말고 텍스트 모드에서도 어느정도 가능한 방법이 있긴 하지만 모든 유닉스에서 호환되지는 않겠죠... 텍스트 모드라는게 아예 없는 경우도 있고, 그래픽 모드를 직접 접근하게 하는 공통적인 인터페이스가 있을리도 만무하고... X가 있는 이유중에 하나가 이런 것 때문이 아닐까요?

그 옛날 도깨비 한글처럼 문자정의를 이용해서 하는 방법도 있지만, 모든 문자 도형을 재정의한다고 해도 화면을 가득채울 수는 없습니다. 예전의 DOS 유틸리티 중에 텍스트 모드임에도 마우스 포인터가 사각이 아니라 부드럽게 움직이는 화살표 포인터인 경우도 이것을 이용한 것입니다.

SPC-1000 에서 이런 동작을 이용해서 텍스트 모드에서 그래픽을 구현한 예도 있긴 합니다. 이것은 화면의 1/4정도를 채울 수 있었는데, 4분할 화면을 아주 빠르게 동기시킬 수 있었습니다. 또한 색깔을 증가시키기 위해서 화면을 번갈아가면서 찍어서 색혼합하는 효과도 가지고 있었던 걸로 기억합니다.

asura313의 이미지

음.. 주제 그대로 이고요..

많은 도움이 되었을 뿐만 아니라 전혀 몰랐던 내용도 새로 배우게 되었네요..

^^ 그저 감사할 따름입니다...

근데 SPC-1000을 기억하시는 분이 계시네요...반갑습니다...

그 시절에 MSX의 화려함에 밀려서 (사실 SPC-1000이 좀 떨어지긴 합니다.)

많이 뒷전으로 물러앉긴 했지만, 첫 PC이다보니 애착이 많이 갔네요..

그때도, 보기 좋으면서도 왠지 MSX가 싫었는데...

M$에대한 저의 신경전 내지는 거부감이 그때부터 시작된게 아닌가~ ^^

싶네요~~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.