msys – tput 함수 구현

msys2에는.. tput이 있으나.. msys에는 없다..
아래와 같이.. /etc/proflile 파일에 넣어두고..

if ! which tput 2> /dev/null ; then
	tput () {
		case "$1" in
			bold)
				echo -ne "\033[1m" ;;
			setaf)
				echo -ne "\033[0;3$2m" ;;
			sgr0)
				echo -ne "\033(\033[m" ;;
		esac
	}
fi

아래와 같이 프롬프트를 셋팅해본다..

export PS1="\[\e]0;$(gcc -dumpmachine) $(gcc -dumpversion) : \w\a\]\n\[$(tput bold)\]\[$(tput setaf 1)\][\[$(tput setaf 3)\]\u\[$(tput setaf 2)\]@\[$(tput setaf 4)\]\h \[$(tput setaf 5)\]\W\[$(tput setaf 1)\]]\[$(tput setaf 7)\]\\$ \[$(tput sgr0)\]"

아래와 같이 나온다..

tput

Duktape

홈페이지: http://duktape.org/

cropped-w212-h212

자바는 현재.. 웹부라우저 영역이 아닌.. 서버 사이드, 임베디드등 다양한 분야에 사용되고 있음.
Duktape은 C/C++ 코드에 Java 스크립트 코드를 실행하기 위한 엔진(인터프리터) 제공을 목적으로 함.

/* test.c */
#include "duktape.h"

int main(int argc, char *argv[]) {
  duk_context *ctx = duk_create_heap_default();
  duk_eval_string(ctx, "print('Hello world!');");
  duk_destroy_heap(ctx);
  return 0;
}
$ gcc -std=c99 -o test test.c duktape.c -lm
$ ./test
Hello world!

Duktape는 Ecmascript E5 / E5.1과 호환되는 소형 JavaScript 엔진.
유니 코드 지원, 정규 표현 엔진탑재, GC도 탑재되어 있음.

Simple Dynamic Strings

SDS 라이브러리
홈페이지: https://github.com/antirez/sds

C용 스트링 처리 라이브러리. Concatenating, Formatting, Trimming strings and getting ranges, Fast number to string operations, String copying, Quoting strings, Tokenization, String joining.. 을 지원

아래는 concat의 예제로 메모리를 자동으로 동적 할당.

#include <sds.h>

void test(char **s)
{
	*s = sdscat(*s, "foo");
	*s = sdscat(*s, "bar");
	*s = sdscat(*s, "123");
}

void main(void)
{
	sds s;
	s = sdsempty();
	s = sdscat(s, "foo");
	s = sdscat(s, "bar");
	s = sdscat(s, "123");
	printf("%s\n", s);
	sdsfree(s);

	s = sdsempty();
	test(&s);
	printf("%s\n", s);
	sdsfree(s);
}

Make Directory with Recursive

/* works like mkdir(1) used as "mkdir -p" */
static int Mkdirp(const char *pathname)
{
	char parent[2048], *p;
	/* make a parent directory path */
	strncpy(parent, pathname, sizeof(parent));
	parent[sizeof(parent) - 1] = '\0';
	for(p = parent + strlen(parent); *p != '/' && p != parent; p--);
	*p = '\0';
	/* try make parent directory */
	if(p != parent && Mkdirp(parent) != 0)
		return -1;
	/* make this one if parent has been made */
	if(mkdir(pathname) == 0)
		return 0;
	/* if it already exists that is fine */
	if(errno == EEXIST)
		return 0;
	return -1;
}