some code added
This commit is contained in:
parent
ab6e95d5ff
commit
ce649bbcb2
|
@ -0,0 +1,336 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# Network chess by Evgeny Stepanischev http://bolknote.ru 2011
|
||||||
|
|
||||||
|
if [ $# -ne 2 ]; then
|
||||||
|
echo Usage: $0 host-of-opponent port
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Хост оппонента
|
||||||
|
HOST="$1"
|
||||||
|
|
||||||
|
# Общий порт
|
||||||
|
PORT="$2"
|
||||||
|
|
||||||
|
# Клавиатурные комбинации извстной длины
|
||||||
|
SEQLEN=(1b5b4. [2-7]. [cd]... [89ab].{5} f.{7})
|
||||||
|
|
||||||
|
# Фигуры
|
||||||
|
WHITE=(♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖)
|
||||||
|
BLACK=(♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜ ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟)
|
||||||
|
|
||||||
|
# Наш ход?
|
||||||
|
OURMOVE=
|
||||||
|
|
||||||
|
# Я чёрный или белый?
|
||||||
|
MYCOLOR=
|
||||||
|
|
||||||
|
# Доска
|
||||||
|
declare -a XY
|
||||||
|
|
||||||
|
# Курсор
|
||||||
|
CX=1 CY=7
|
||||||
|
TAKEN=
|
||||||
|
|
||||||
|
# Необходимые нам клавиатурные коды
|
||||||
|
KUP=1b5b41
|
||||||
|
KDOWN=1b5b42
|
||||||
|
KLEFT=1b5b44
|
||||||
|
KRIGHT=1b5b43
|
||||||
|
KSPACE=20
|
||||||
|
|
||||||
|
# Восстановление экрана
|
||||||
|
function Restore {
|
||||||
|
echo -ne "\033[5B\033[5B\033[?25h\033[m"
|
||||||
|
stty "$ORIG" 2>/dev/null
|
||||||
|
bind '"\r":accept-line'
|
||||||
|
}
|
||||||
|
|
||||||
|
trap Restore EXIT
|
||||||
|
|
||||||
|
# Выключаем Enter
|
||||||
|
bind -r '\r'
|
||||||
|
# Выключаем остальную клавиатуру
|
||||||
|
ORIG=`stty -g`
|
||||||
|
stty -echo
|
||||||
|
|
||||||
|
# Убирам курсор
|
||||||
|
echo -e "\033[?25l"
|
||||||
|
|
||||||
|
# Отдаём события клавиатуры в сеть
|
||||||
|
function ToNet {
|
||||||
|
echo $1 | nc "$HOST" "$PORT"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Реакция на клавиши курсора
|
||||||
|
function React {
|
||||||
|
case $1 in
|
||||||
|
$KLEFT)
|
||||||
|
if [ $CX -gt 1 ]; then
|
||||||
|
CX=$(($CX-1))
|
||||||
|
PrintBoard
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
$KRIGHT)
|
||||||
|
if [ $CX -lt 8 ]; then
|
||||||
|
CX=$(($CX+1))
|
||||||
|
PrintBoard
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
$KUP)
|
||||||
|
if [ $CY -gt 1 ]; then
|
||||||
|
CY=$(($CY-1))
|
||||||
|
PrintBoard
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
$KDOWN)
|
||||||
|
if [ $CY -lt 8 ]; then
|
||||||
|
CY=$(($CY+1))
|
||||||
|
PrintBoard
|
||||||
|
fi
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Отдаём события клавиатуры в сеть
|
||||||
|
[ "$OURMOVE" ] && ToNet $1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Проверка совпадения с известной клавиатурной комбинацией
|
||||||
|
function CheckCons {
|
||||||
|
local i
|
||||||
|
|
||||||
|
for i in ${SEQLEN[@]}; do
|
||||||
|
if [[ $1 =~ ^$i ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция реакции на клавиатуру, вызывает React на каждую нажатую клавишу,
|
||||||
|
# кроме KSPACE — на неё возвращается управление
|
||||||
|
|
||||||
|
function PressEvents {
|
||||||
|
local real code action
|
||||||
|
|
||||||
|
# Цикл обработки клавиш, здесь считываются коды клавиш,
|
||||||
|
# по паузам между нажатиями собираются комбинации и известные
|
||||||
|
# обрабатываются сразу
|
||||||
|
while true; do
|
||||||
|
# измеряем время выполнения команды read и смотрим код нажатой клавиши
|
||||||
|
# akw NR==1||NR==4 забирает только строку №1 (там время real) и №4 (код клавиши)
|
||||||
|
eval $( (time -p read -r -s -n1 ch; printf 'code %d\n' "'$ch") 2>&1 |
|
||||||
|
awk 'NR==1||NR==4 {print $1 "=" $2}' | tr '\r\n' ' ')
|
||||||
|
|
||||||
|
# read возвращает пусто для Enter и пробела, присваиваем им код 20,
|
||||||
|
# а так же возвращаются отрицательные коды для UTF8
|
||||||
|
if [ "$code" = 0 ]; then
|
||||||
|
code=20
|
||||||
|
else
|
||||||
|
[ $code -lt 0 ] && code=$((256+$code))
|
||||||
|
|
||||||
|
code=$(printf '%02x' $code)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $code = $KSPACE ]; then
|
||||||
|
[ "$OURMOVE" ] && ToNet $KSPACE
|
||||||
|
|
||||||
|
SpaceEvent && return
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Если клавиши идут подряд (задержки по времени нет)
|
||||||
|
if [ $real = 0.00 ]; then
|
||||||
|
seq="$seq$code"
|
||||||
|
|
||||||
|
if CheckCons $seq; then
|
||||||
|
React $seq
|
||||||
|
seq=
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Клавиши идут с задержкой (пользователь не может печатать с нулевой задержкой),
|
||||||
|
# значит последовательность собрана, надо начинать новую
|
||||||
|
else
|
||||||
|
[ "$seq" ] && React $seq
|
||||||
|
seq=$code
|
||||||
|
|
||||||
|
# возможно последовательность состоит из одного символа
|
||||||
|
if CheckCons $seq; then
|
||||||
|
React $seq
|
||||||
|
seq=
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Проверяем чёрная или белая фигура
|
||||||
|
function CheckColor {
|
||||||
|
echo -n ${1:0:1}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Первичное заполнение доски
|
||||||
|
function FillBoard {
|
||||||
|
local x y ch
|
||||||
|
|
||||||
|
for y in {1..8}; do
|
||||||
|
for x in {1..8}; do
|
||||||
|
ch='S '
|
||||||
|
|
||||||
|
if [ $y -le 2 ]; then
|
||||||
|
ch=B${BLACK[$x+8*$y-9]}
|
||||||
|
else
|
||||||
|
if [ $y -ge 7 ]; then
|
||||||
|
ch=W${WHITE[$x+8*$y-57]}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
XY[$x+100*$y]=$ch
|
||||||
|
done
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Вывод букв по краю доски
|
||||||
|
function PrintBoardLetters {
|
||||||
|
local letters=abcdefgh
|
||||||
|
|
||||||
|
[ -z "$OURMOVE" ] && echo -ne "\033[30m" || echo -ne "\033[0m"
|
||||||
|
|
||||||
|
echo -n ' '
|
||||||
|
|
||||||
|
for x in {0..7}; do
|
||||||
|
echo -n "${letters:$x:1} "
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
# Вывод цифры по краю доски
|
||||||
|
function PrintBoardDigit {
|
||||||
|
[ -z "$OURMOVE" ] && echo -ne "\033[30m"
|
||||||
|
echo -en " $((9-$1))\033[0m "
|
||||||
|
}
|
||||||
|
|
||||||
|
# Вывод доски
|
||||||
|
function PrintBoard {
|
||||||
|
local x y c ch
|
||||||
|
local colors=('48;5;209;37;1' '48;5;94;37;1')
|
||||||
|
|
||||||
|
PrintBoardLetters
|
||||||
|
|
||||||
|
for y in {1..8}; do
|
||||||
|
PrintBoardDigit $y
|
||||||
|
|
||||||
|
for x in {1..8}; do
|
||||||
|
c=${colors[($x+$y) & 1]}
|
||||||
|
ch=${XY[$x+100*$y]}
|
||||||
|
|
||||||
|
if [[ $CX == $x && $CY == $y ]]; then
|
||||||
|
c="$c;7"
|
||||||
|
[ "$TAKEN" ] && ch=$TAKEN
|
||||||
|
[ $MYCOLOR == B ] && c="$c;38;5;16"
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ $(CheckColor "$ch") == "B" ]] && c="$c;38;5;16"
|
||||||
|
|
||||||
|
echo -en "\033[${c}m${ch:1:1} \033[m"
|
||||||
|
done
|
||||||
|
|
||||||
|
PrintBoardDigit $y
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
|
||||||
|
PrintBoardLetters
|
||||||
|
|
||||||
|
echo -e "\033[11A"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Приём событий
|
||||||
|
function NetListen {
|
||||||
|
nc -l -p $PORT
|
||||||
|
}
|
||||||
|
|
||||||
|
# Готовы слушать события сети
|
||||||
|
function NetEvents {
|
||||||
|
local code
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
code=$(NetListen)
|
||||||
|
|
||||||
|
[[ "$code" == "$KSPACE" ]] && SpaceEvent && return
|
||||||
|
|
||||||
|
React $code
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Реакция на нажатие Space и Enter — взять или положить фигуру
|
||||||
|
function SpaceEvent {
|
||||||
|
local xy
|
||||||
|
|
||||||
|
# Проверяем, есть ли фигура под курсором
|
||||||
|
let xy="$CX+$CY*100"
|
||||||
|
|
||||||
|
# Фигуры нет
|
||||||
|
if [ "${XY[$xy]:-S }" = "S " ]; then
|
||||||
|
if [ -z "$TAKEN" ]; then
|
||||||
|
echo -en "\007"
|
||||||
|
else
|
||||||
|
# Положили фигуру
|
||||||
|
XY[$xy]=$TAKEN
|
||||||
|
TAKEN=
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
# Фигура есть
|
||||||
|
else
|
||||||
|
# Мы не должны позволять «съесть» свою фигуру
|
||||||
|
if [[ $(CheckColor "$TAKEN") == $(CheckColor "${XY[$xy]}") ]]; then
|
||||||
|
echo -en "\007"
|
||||||
|
else
|
||||||
|
# Мы взяли фигуру
|
||||||
|
TAKEN=${XY[$xy]}
|
||||||
|
XY[$xy]="S "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Очистка клавиатурного буфера
|
||||||
|
function ClearKeyboardBuffer {
|
||||||
|
# Быстро — через zsh
|
||||||
|
which -s zsh && (zsh -c 'while {} {read -rstk1 || break}'; return)
|
||||||
|
|
||||||
|
# Медленно — через bash
|
||||||
|
local delta
|
||||||
|
while true; do
|
||||||
|
delta=`(time -p read -rs -n1 -t1) 2>&1 | awk 'NR==1{print $2}'`
|
||||||
|
[[ "$delta" == "0.00" ]] || break
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
FillBoard
|
||||||
|
|
||||||
|
# Кто будет ходить первым
|
||||||
|
ToNet HI
|
||||||
|
[[ "$(NetListen)" == "HI" ]] && OURMOVE=1
|
||||||
|
ToNet ULOOSE
|
||||||
|
|
||||||
|
[ "$OURMOVE" ] && MYCOLOR=W || MYCOLOR=B
|
||||||
|
|
||||||
|
PrintBoard
|
||||||
|
|
||||||
|
# Основной цикл — обрабатываем события из сети или с клавиатуры
|
||||||
|
while true; do
|
||||||
|
if [ -n "$OURMOVE" ]; then
|
||||||
|
ClearKeyboardBuffer
|
||||||
|
PressEvents
|
||||||
|
OURMOVE=
|
||||||
|
else
|
||||||
|
NetEvents
|
||||||
|
OURMOVE=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PrintBoard
|
||||||
|
done
|
|
@ -0,0 +1,34 @@
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
#include <tchar.h>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#pragma argsused
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "insys_parser/vcl/DataFilesFunctions.hpp"
|
||||||
|
|
||||||
|
int _tmain(int argc, _TCHAR* argv[])
|
||||||
|
{
|
||||||
|
std::string s = "2010.10.22 11:12:13.14";
|
||||||
|
|
||||||
|
printf("%s\n", s.c_str());
|
||||||
|
|
||||||
|
prec_tm dt = datetime_sscanf(s.c_str());
|
||||||
|
|
||||||
|
printf("year = %.4d\n", dt.tm.tm_year + 1900);
|
||||||
|
printf("month = %.2d\n", dt.tm.tm_mon + 1);
|
||||||
|
printf("day = %.2d\n", dt.tm.tm_mday);
|
||||||
|
|
||||||
|
printf("hour = %.2d\n", dt.tm.tm_hour);
|
||||||
|
printf("min = %.2d\n", dt.tm.tm_min);
|
||||||
|
printf("sec = %.2d\n", dt.tm.tm_sec);
|
||||||
|
|
||||||
|
printf("ssec = %.2d\n", dt.ss);
|
||||||
|
|
||||||
|
AnsiString as = "123";
|
||||||
|
printf("%c\n", as[1]);
|
||||||
|
|
||||||
|
system("pause");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
//---------------------------------------------------------------------------
|
|
@ -0,0 +1,88 @@
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#include <vcl.h>
|
||||||
|
#pragma hdrstop
|
||||||
|
|
||||||
|
#include <tchar.h>
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#pragma argsused
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------------
|
||||||
|
#define _XOPEN_SOURCE /* glibc2 needs this */
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
// òî÷íîå âðåìÿ
|
||||||
|
struct prec_tm {
|
||||||
|
struct tm tm; // ñòàíäàðòíûé timestamp
|
||||||
|
unsigned char ss; // ñàíòèñåêóíäû
|
||||||
|
};
|
||||||
|
|
||||||
|
// òî÷íîå âðåìÿ -> êîë-âî ñàíòèñåêóíä (!!)
|
||||||
|
int time2ss(struct prec_tm * ptm, __int64 * ss) {
|
||||||
|
time_t time = mktime(&ptm->tm);
|
||||||
|
if (time == (time_t)-1) {
|
||||||
|
fprintf(stderr, "mktime(3) fails with error: can't convert date to time!\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
*ss = ((__int64)time) * 100 + ptm->ss;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// êîë-âî ñàíòèñåêóíä -> òî÷íîå âðåìÿ (!!)
|
||||||
|
int ss2time(const __int64 * ss, struct prec_tm * ptm) {
|
||||||
|
time_t time = (*ss)/100;
|
||||||
|
struct tm * ret = localtime(&time);
|
||||||
|
if (ret == NULL) {
|
||||||
|
fprintf(stderr, "localtime_r(3) fails with error: can't convert time to date!\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
ptm->tm = *ret;
|
||||||
|
ptm->ss = (*ss)%100;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ñòðîêà -> òî÷íîå âðåìÿ
|
||||||
|
int str2time(const char * date, struct prec_tm * ptm) {
|
||||||
|
char *ret = strptime(date, "%d.%m.%Y %T", &ptm->tm);
|
||||||
|
|
||||||
|
// ÿ íå ïîíÿë ñòàíäàðòà, âèäèìî îòâåòñòâåííîñòü çà êîððåêòíîñòü âõîäíûõ äàííûõ ëîæèòñÿ íà òîãî, êòî êëàä¸ò...
|
||||||
|
// if (ret == NULL) {
|
||||||
|
// fprintf(stderr, "strptime(3) error: can't parse date!\n");
|
||||||
|
// return 1;
|
||||||
|
// }
|
||||||
|
// ptm->tm.tm_year -= 1900;
|
||||||
|
|
||||||
|
int len = strlen(date); // ìåäëåííàÿ îïåðàöèÿ, ó ïðèíöèïå...
|
||||||
|
ptm->ss = atoi(date + len - 2);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// òî÷íîå âðåìÿ -> ñòðîêà
|
||||||
|
int time2str(struct prec_tm * ptm, char * buf) {
|
||||||
|
sprintf(buf, "%.2u.%.2u.%.4u %.2u:%.2u:%.2u.%.2u", ptm->tm.tm_mday, ptm->tm.tm_mon + 1,
|
||||||
|
ptm->tm.tm_year + 1900, ptm->tm.tm_hour, ptm->tm.tm_min, ptm->tm.tm_sec, ptm->ss);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
const char date[] = "23.12.2008 10:50:59.36";
|
||||||
|
char buf[1024];
|
||||||
|
|
||||||
|
struct prec_tm ptm;
|
||||||
|
|
||||||
|
str2time(date, &ptm);
|
||||||
|
|
||||||
|
__int64 ss;
|
||||||
|
time2ss(&ptm, &ss);
|
||||||
|
ss2time(&ss, &ptm);
|
||||||
|
|
||||||
|
time2str(&ptm, buf);
|
||||||
|
|
||||||
|
printf("%s\n", buf);
|
||||||
|
|
||||||
|
system("pause");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
# This file is generated with smake.sh.
|
||||||
|
# You can use this make file with instruction make to
|
||||||
|
# use one of build mode: debug, profile, develop, release.
|
||||||
|
# No need to call make clean if You make with other mode,
|
||||||
|
# because the Makefile containes rules for automatically clean.
|
||||||
|
# Some usage examples:
|
||||||
|
# make # default mode is debug
|
||||||
|
# CFLAGS="-O2 -march=core2 -mtune=core2 --msse4.1 mfpmath=sse -fomit-frame-pointer -pipe" LDFLAGS="-Wl,-O1 -Wl,-ass-needed" make mode=develop
|
||||||
|
# CFLAGS="-O2 -march=amdfam10 -mtune=amdfam10 -msse4a --mfpmath=sse -fomit-frame-pointer -pipe" LDFLAGS="-Wl,-O1 -Wl,--as-needed" make mode=profile
|
||||||
|
# CFLAGS="-O2 -march=k6-2 -mtune=k6-2 -m3dnow --mfpmath=387 -fomit-frame-pointer -pipe" LDFLAGS="-Wl,-O1 -Wl,--as-needed" make mode=release
|
||||||
|
# Report bugs to <mecareful@gmail.com>
|
||||||
|
|
||||||
|
#_________________________________
|
||||||
|
# ENVIRONMENT |
|
||||||
|
#________________________________|
|
||||||
|
CC=cc
|
||||||
|
CXX=c++
|
||||||
|
LIBRARIES=
|
||||||
|
TARGET0=time2ss2time
|
||||||
|
TARGET= $(TARGET0)
|
||||||
|
INCLUDE1=$(HOME)/projects/include
|
||||||
|
INCLUDE2=/usr/local/include
|
||||||
|
INCLUDE=-I$(INCLUDE1) -I$(INCLUDE2)
|
||||||
|
|
||||||
|
#________________________________________
|
||||||
|
# BUILD SCRIPT (don't change) |
|
||||||
|
#_______________________________________|
|
||||||
|
ifeq ($(mode),)
|
||||||
|
mode = debug
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),debug)
|
||||||
|
CFLAGS := -O0 -g -std=gnu99 -pedantic -Wextra -Wconversion $(CFLAGS)
|
||||||
|
LDFLAGS := $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),profile)
|
||||||
|
CFLAGS := -O0 -g -p -ftest-coverage -Wcoverage-mismatch $(CFLAGS)
|
||||||
|
LDFLAGS := -g -p $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),develop)
|
||||||
|
CFLAGS := -O2 -g $(CFLAGS)
|
||||||
|
LDFLAGS := -O1 $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),release)
|
||||||
|
CFLAGS := -O2 $(CFLAGS)
|
||||||
|
LDFLAGS := -O1 $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS += -Wall
|
||||||
|
LDFLAGS += -Wall $(LIBRARIES)
|
||||||
|
|
||||||
|
all: change_make_options $(TARGET)
|
||||||
|
|
||||||
|
ifneq ($(mode),debug)
|
||||||
|
ifneq ($(mode),profile)
|
||||||
|
ifneq ($(mode),develop)
|
||||||
|
ifneq ($(mode),release)
|
||||||
|
@echo "Invalid build mode."
|
||||||
|
@echo "Please use 'make mode=release', 'make mode=develop', 'make mode=profile' or 'make mode=debug'"
|
||||||
|
@exit 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
@echo ".........................."
|
||||||
|
@echo "Building on "$(mode)" mode "
|
||||||
|
@echo "CFLAGS=$(CFLAGS)"
|
||||||
|
@echo "LDFLAGS=$(LDFLAGS)"
|
||||||
|
@echo ".........................."
|
||||||
|
|
||||||
|
OLD_BUILD_MODE=$(shell grep ^MODE make_options.out 2>/dev/null | sed 's~^MODE=~~')
|
||||||
|
OLD_BUILD_CFLAGS=$(shell grep ^CFLAGS make_options.out 2>/dev/null | sed 's~^CFLAGS=~~')
|
||||||
|
OLD_BUILD_LDFLAGS=$(shell grep ^LDFLAGS make_options.out 2>/dev/null | sed 's~^LDFLAGS=~~')
|
||||||
|
change_make_options:
|
||||||
|
ifneq ($(mode)|$(CFLAGS)|$(LDFLAGS), $(OLD_BUILD_MODE)|$(OLD_BUILD_CFLAGS)|$(OLD_BUILD_LDFLAGS))
|
||||||
|
@echo CLEANING...
|
||||||
|
@make clean &>/dev/null
|
||||||
|
@echo "MODE=$(mode)" > make_options.out
|
||||||
|
@echo "CFLAGS=$(CFLAGS)" >> make_options.out
|
||||||
|
@echo "LDFLAGS=$(LDFLAGS)" >> make_options.out
|
||||||
|
endif
|
||||||
|
|
||||||
|
%.o :
|
||||||
|
$(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o *.out callgrind.out.* *.gcno $(TARGET)
|
||||||
|
|
||||||
|
.PHONY: all change_make_options clean
|
||||||
|
|
||||||
|
#_________________________________
|
||||||
|
# R U L E S |
|
||||||
|
#________________________________|
|
||||||
|
target_objs0 = \
|
||||||
|
time2ss2time.o
|
||||||
|
|
||||||
|
$(TARGET0): $(target_objs0)
|
||||||
|
$(CC) $(LDFLAGS) -o $@ $(target_objs0)
|
||||||
|
|
||||||
|
|
||||||
|
time2ss2time.o: \
|
||||||
|
time2ss2time.c
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "dtparser.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
std::string s = "2010.10.22 11:12:13.14";
|
||||||
|
|
||||||
|
printf("%s\n", s.c_str());
|
||||||
|
|
||||||
|
prec_tm dt = datetime_sscanf(s.c_str());
|
||||||
|
|
||||||
|
printf("year = %.4d\n", dt.tm.tm_year + 1900);
|
||||||
|
printf("month = %.2d\n", dt.tm.tm_mon + 1);
|
||||||
|
printf("day = %.2d\n", dt.tm.tm_mday);
|
||||||
|
|
||||||
|
printf("hour = %.2d\n", dt.tm.tm_hour);
|
||||||
|
printf("min = %.2d\n", dt.tm.tm_min);
|
||||||
|
printf("sec = %.2d\n", dt.tm.tm_sec);
|
||||||
|
|
||||||
|
printf("ssec = %.2d\n", dt.ss);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
#define _XOPEN_SOURCE
|
||||||
|
#include <time.h>
|
||||||
|
#define __USE_UNIX98
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int mktime_test(const char* str)
|
||||||
|
{
|
||||||
|
struct tm local_tm, local_tm2;
|
||||||
|
time_t local_time;
|
||||||
|
char buffer[128];
|
||||||
|
|
||||||
|
memset(buffer, 0, sizeof(buffer));
|
||||||
|
puts(str);
|
||||||
|
if (strptime(str, "%Y-%m-%d %H:%M:%S", &local_tm) == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "failed to convert `%s' to struct tm\n", str);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
snprintf(buffer, sizeof(buffer), "%d-%02d-%02d %02d:%02d:%02d",
|
||||||
|
local_tm.tm_year + 1900, local_tm.tm_mon + 1, local_tm.tm_mday,
|
||||||
|
local_tm.tm_hour, local_tm.tm_min, local_tm.tm_sec);
|
||||||
|
puts(buffer);
|
||||||
|
if (strcmp(str, buffer) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "strptime() failed\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
local_tm.tm_isdst = -1;
|
||||||
|
local_time = mktime(&local_tm);
|
||||||
|
localtime_r(&local_time, &local_tm2);
|
||||||
|
snprintf(buffer, sizeof(buffer), "%d-%02d-%02d %02d:%02d:%02d",
|
||||||
|
local_tm2.tm_year + 1900, local_tm2.tm_mon + 1, local_tm2.tm_mday,
|
||||||
|
local_tm2.tm_hour, local_tm2.tm_min, local_tm2.tm_sec);
|
||||||
|
puts(buffer);
|
||||||
|
if (strcmp(str, buffer) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "mktime() or localtime_r() failed\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
mktime_test("1981-07-01 00:00:00");
|
||||||
|
mktime_test("1981-07-01 00:00:00");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
putenv("TZ=");
|
||||||
|
tzset();
|
||||||
|
int64_t ss;
|
||||||
|
struct tm t;
|
||||||
|
//t.tm_isdst = -1;
|
||||||
|
t.tm_year = 2007;
|
||||||
|
t.tm_mon = 11;
|
||||||
|
t.tm_mday = 25;
|
||||||
|
t.tm_hour = 17;
|
||||||
|
t.tm_min = 33;
|
||||||
|
t.tm_sec = 52;
|
||||||
|
time_t time = mktime(&t);
|
||||||
|
t = *gmtime(&time);
|
||||||
|
printf("%d.%d.%d %d:%d:%d", t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
# This file is generated with smake.sh.
|
||||||
|
# You can use this make file with instruction make to
|
||||||
|
# use one of build mode: debug, profile, develop, release.
|
||||||
|
# No need to call make clean if You make with other mode,
|
||||||
|
# because the Makefile containes rules for automatically clean.
|
||||||
|
# Some usage examples:
|
||||||
|
# make # default mode is debug
|
||||||
|
# CFLAGS="-O2 -march=core2 -mtune=core2 --msse4.1 mfpmath=sse -fomit-frame-pointer -pipe" LDFLAGS="-Wl,-O1 -Wl,-ass-needed" make mode=develop
|
||||||
|
# CFLAGS="-O2 -march=amdfam10 -mtune=amdfam10 -msse4a --mfpmath=sse -fomit-frame-pointer -pipe" LDFLAGS="-Wl,-O1 -Wl,--as-needed" make mode=profile
|
||||||
|
# CFLAGS="-O2 -march=k6-2 -mtune=k6-2 -m3dnow --mfpmath=387 -fomit-frame-pointer -pipe" LDFLAGS="-Wl,-O1 -Wl,--as-needed" make mode=release
|
||||||
|
# Report bugs to <mecareful@gmail.com>
|
||||||
|
|
||||||
|
#_________________________________
|
||||||
|
# ENVIRONMENT |
|
||||||
|
#________________________________|
|
||||||
|
CC=cc
|
||||||
|
CXX=c++
|
||||||
|
LIBRARIES=
|
||||||
|
TARGET0=eps_pass
|
||||||
|
TARGET= $(TARGET0)
|
||||||
|
INCLUDE1=$(HOME)/projects/include
|
||||||
|
INCLUDE2=/usr/local/include
|
||||||
|
INCLUDE=-I$(INCLUDE1) -I$(INCLUDE2)
|
||||||
|
|
||||||
|
#________________________________________
|
||||||
|
# BUILD SCRIPT (don't change) |
|
||||||
|
#_______________________________________|
|
||||||
|
ifeq ($(mode),)
|
||||||
|
mode = debug
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),debug)
|
||||||
|
CFLAGS := -O0 -g -std=gnu99 -pedantic -Wextra -Wconversion $(CFLAGS)
|
||||||
|
LDFLAGS := $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),profile)
|
||||||
|
CFLAGS := -O0 -g -p -ftest-coverage -Wcoverage-mismatch $(CFLAGS)
|
||||||
|
LDFLAGS := -g -p $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),develop)
|
||||||
|
CFLAGS := -O2 -g $(CFLAGS)
|
||||||
|
LDFLAGS := -O1 $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),release)
|
||||||
|
CFLAGS := -O2 $(CFLAGS)
|
||||||
|
LDFLAGS := -O1 $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS += -Wall
|
||||||
|
LDFLAGS += -Wall $(LIBRARIES)
|
||||||
|
|
||||||
|
all: change_make_options $(TARGET)
|
||||||
|
|
||||||
|
ifneq ($(mode),debug)
|
||||||
|
ifneq ($(mode),profile)
|
||||||
|
ifneq ($(mode),develop)
|
||||||
|
ifneq ($(mode),release)
|
||||||
|
@echo "Invalid build mode."
|
||||||
|
@echo "Please use 'make mode=release', 'make mode=develop', 'make mode=profile' or 'make mode=debug'"
|
||||||
|
@exit 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
@echo ".........................."
|
||||||
|
@echo "Building on "$(mode)" mode "
|
||||||
|
@echo "CFLAGS=$(CFLAGS)"
|
||||||
|
@echo "LDFLAGS=$(LDFLAGS)"
|
||||||
|
@echo ".........................."
|
||||||
|
|
||||||
|
OLD_BUILD_MODE=$(shell grep ^MODE make_options.out 2>/dev/null | sed 's~^MODE=~~')
|
||||||
|
OLD_BUILD_CFLAGS=$(shell grep ^CFLAGS make_options.out 2>/dev/null | sed 's~^CFLAGS=~~')
|
||||||
|
OLD_BUILD_LDFLAGS=$(shell grep ^LDFLAGS make_options.out 2>/dev/null | sed 's~^LDFLAGS=~~')
|
||||||
|
change_make_options:
|
||||||
|
ifneq ($(mode)|$(CFLAGS)|$(LDFLAGS), $(OLD_BUILD_MODE)|$(OLD_BUILD_CFLAGS)|$(OLD_BUILD_LDFLAGS))
|
||||||
|
@echo CLEANING...
|
||||||
|
@make clean &>/dev/null
|
||||||
|
@echo "MODE=$(mode)" > make_options.out
|
||||||
|
@echo "CFLAGS=$(CFLAGS)" >> make_options.out
|
||||||
|
@echo "LDFLAGS=$(LDFLAGS)" >> make_options.out
|
||||||
|
endif
|
||||||
|
|
||||||
|
%.o :
|
||||||
|
$(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o *.out callgrind.out.* *.gcno $(TARGET)
|
||||||
|
|
||||||
|
.PHONY: all change_make_options clean
|
||||||
|
|
||||||
|
#_________________________________
|
||||||
|
# R U L E S |
|
||||||
|
#________________________________|
|
||||||
|
target_objs0 = \
|
||||||
|
eps_pass.o
|
||||||
|
|
||||||
|
$(TARGET0): $(target_objs0)
|
||||||
|
$(CC) $(LDFLAGS) -o $@ $(target_objs0)
|
||||||
|
|
||||||
|
|
||||||
|
eps_pass.o: \
|
||||||
|
eps_pass.c
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
int eps = 5, r = 0, s = 0;
|
||||||
|
|
||||||
|
printf("[0, 0]");
|
||||||
|
|
||||||
|
for (r = 1; r < eps; r++) {
|
||||||
|
printf(" (r = %d)", r);
|
||||||
|
|
||||||
|
printf(" [%d, %d]", r, 0);
|
||||||
|
printf(" [%d, %d]", -r, 0);
|
||||||
|
printf(" [%d, %d]", 0, r);
|
||||||
|
printf(" [%d, %d]", 0, -r);
|
||||||
|
|
||||||
|
for (s = 1; s < eps; s++) {
|
||||||
|
printf(" (s = %d)", s);
|
||||||
|
|
||||||
|
printf(" [%d, %d]", r, s);
|
||||||
|
printf(" [%d, %d]", r, -s);
|
||||||
|
printf(" [%d, %d]", -r, s);
|
||||||
|
printf(" [%d, %d]", -r, -s);
|
||||||
|
|
||||||
|
if (s != r) {
|
||||||
|
printf(" [%d, %d]", s, r);
|
||||||
|
printf(" [%d, %d]", s, -r);
|
||||||
|
printf(" [%d, %d]", -s, r);
|
||||||
|
printf(" [%d, %d]", -s, -r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
# This file is generated with smake.sh.
|
||||||
|
# You can use this make file with instruction make to
|
||||||
|
# use one of build mode: debug, profile, develop, release.
|
||||||
|
# No need to call make clean if You make with other mode,
|
||||||
|
# because the Makefile containes rules for automatically clean.
|
||||||
|
# Some usage examples:
|
||||||
|
# make # default mode is debug
|
||||||
|
# CFLAGS="-O2 -march=core2 -mtune=core2 --msse4.1 mfpmath=sse -fomit-frame-pointer -pipe" LDFLAGS="-Wl,-O1 -Wl,-ass-needed" make mode=develop
|
||||||
|
# CFLAGS="-O2 -march=amdfam10 -mtune=amdfam10 -msse4a --mfpmath=sse -fomit-frame-pointer -pipe" LDFLAGS="-Wl,-O1 -Wl,--as-needed" make mode=profile
|
||||||
|
# CFLAGS="-O2 -march=k6-2 -mtune=k6-2 -m3dnow --mfpmath=387 -fomit-frame-pointer -pipe" LDFLAGS="-Wl,-O1 -Wl,--as-needed" make mode=release
|
||||||
|
# Report bugs to <mecareful@gmail.com>
|
||||||
|
|
||||||
|
#_________________________________
|
||||||
|
# ENVIRONMENT |
|
||||||
|
#________________________________|
|
||||||
|
CC=cc
|
||||||
|
CXX=c++
|
||||||
|
LIBRARIES=
|
||||||
|
TARGET0=localtime
|
||||||
|
TARGET= $(TARGET0)
|
||||||
|
INCLUDE1=$(HOME)/projects/include
|
||||||
|
INCLUDE2=/usr/local/include
|
||||||
|
INCLUDE=-I$(INCLUDE1) -I$(INCLUDE2)
|
||||||
|
|
||||||
|
#________________________________________
|
||||||
|
# BUILD SCRIPT (don't change) |
|
||||||
|
#_______________________________________|
|
||||||
|
ifeq ($(mode),)
|
||||||
|
mode = debug
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),debug)
|
||||||
|
CFLAGS := -O0 -g -std=gnu99 -pedantic -Wextra -Wconversion $(CFLAGS)
|
||||||
|
LDFLAGS := $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),profile)
|
||||||
|
CFLAGS := -O0 -g -p -ftest-coverage -Wcoverage-mismatch $(CFLAGS)
|
||||||
|
LDFLAGS := -g -p $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),develop)
|
||||||
|
CFLAGS := -O2 -g $(CFLAGS)
|
||||||
|
LDFLAGS := -O1 $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
ifeq ($(mode),release)
|
||||||
|
CFLAGS := -O2 $(CFLAGS)
|
||||||
|
LDFLAGS := -O1 $(LDFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
|
CFLAGS += -Wall
|
||||||
|
LDFLAGS += -Wall $(LIBRARIES)
|
||||||
|
|
||||||
|
all: change_make_options $(TARGET)
|
||||||
|
|
||||||
|
ifneq ($(mode),debug)
|
||||||
|
ifneq ($(mode),profile)
|
||||||
|
ifneq ($(mode),develop)
|
||||||
|
ifneq ($(mode),release)
|
||||||
|
@echo "Invalid build mode."
|
||||||
|
@echo "Please use 'make mode=release', 'make mode=develop', 'make mode=profile' or 'make mode=debug'"
|
||||||
|
@exit 1
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
@echo ".........................."
|
||||||
|
@echo "Building on "$(mode)" mode "
|
||||||
|
@echo "CFLAGS=$(CFLAGS)"
|
||||||
|
@echo "LDFLAGS=$(LDFLAGS)"
|
||||||
|
@echo ".........................."
|
||||||
|
|
||||||
|
OLD_BUILD_MODE=$(shell grep ^MODE make_options.out 2>/dev/null | sed 's~^MODE=~~')
|
||||||
|
OLD_BUILD_CFLAGS=$(shell grep ^CFLAGS make_options.out 2>/dev/null | sed 's~^CFLAGS=~~')
|
||||||
|
OLD_BUILD_LDFLAGS=$(shell grep ^LDFLAGS make_options.out 2>/dev/null | sed 's~^LDFLAGS=~~')
|
||||||
|
change_make_options:
|
||||||
|
ifneq ($(mode)|$(CFLAGS)|$(LDFLAGS), $(OLD_BUILD_MODE)|$(OLD_BUILD_CFLAGS)|$(OLD_BUILD_LDFLAGS))
|
||||||
|
@echo CLEANING...
|
||||||
|
@make clean &>/dev/null
|
||||||
|
@echo "MODE=$(mode)" > make_options.out
|
||||||
|
@echo "CFLAGS=$(CFLAGS)" >> make_options.out
|
||||||
|
@echo "LDFLAGS=$(LDFLAGS)" >> make_options.out
|
||||||
|
endif
|
||||||
|
|
||||||
|
%.o :
|
||||||
|
$(CC) -c $(CFLAGS) $(INCLUDE) -o $@ $<
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(RM) *.o *.out callgrind.out.* *.gcno $(TARGET)
|
||||||
|
|
||||||
|
.PHONY: all change_make_options clean
|
||||||
|
|
||||||
|
#_________________________________
|
||||||
|
# R U L E S |
|
||||||
|
#________________________________|
|
||||||
|
target_objs0 = \
|
||||||
|
localtime.o
|
||||||
|
|
||||||
|
$(TARGET0): $(target_objs0)
|
||||||
|
$(CC) $(LDFLAGS) -o $@ $(target_objs0)
|
||||||
|
|
||||||
|
|
||||||
|
localtime.o: \
|
||||||
|
localtime.c
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
time_t result;
|
||||||
|
|
||||||
|
|
||||||
|
result = time(NULL);
|
||||||
|
printf("%s%ju secs since the Epoch\n",
|
||||||
|
asctime(localtime(&result)),
|
||||||
|
(uintmax_t)result);
|
||||||
|
return(0);
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/usr/bin/php
|
||||||
|
|
||||||
|
<?php
|
||||||
|
mail("mecareful@gmail.com","subject","message","headers");
|
||||||
|
?>
|
||||||
|
|
Loading…
Reference in New Issue