mirror of
https://github.com/eddyem/mytakepic.git
synced 2025-12-06 02:35:16 +03:00
init on github
This commit is contained in:
parent
35ec5278af
commit
a84e6caf0c
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
*~
|
||||||
|
*.bak
|
||||||
|
*.bck
|
||||||
|
*.o
|
||||||
|
.hg*
|
||||||
|
.dropbox.attr
|
||||||
64
CMakeLists.txt
Normal file
64
CMakeLists.txt
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.6)
|
||||||
|
set(PROJ takepic)
|
||||||
|
project(${PROJ})
|
||||||
|
set(VERSION "0.2.0")
|
||||||
|
set(CMAKE_COLOR_MAKEFILE ON)
|
||||||
|
if(DEFINED DEBUG)
|
||||||
|
add_definitions(-DEBUG)
|
||||||
|
endif()
|
||||||
|
if(DEFINED CMAKE_INSTALL_PREFIX AND CMAKE_INSTALL_PREFIX MATCHES "/usr/local")
|
||||||
|
set(CMAKE_INSTALL_PREFIX "/usr")
|
||||||
|
endif()
|
||||||
|
message("Install dir prefix: ${CMAKE_INSTALL_PREFIX}")
|
||||||
|
#aux_source_directory(. SOURCES)
|
||||||
|
set(SOURCES takepic.c usage.c)
|
||||||
|
if(NOT DEFINED NOBTA)
|
||||||
|
set(SOURCES ${SOURCES} bta_print.c)
|
||||||
|
add_definitions(-DUSE_BTA)
|
||||||
|
endif()
|
||||||
|
set(LCPATH locale/ru)
|
||||||
|
set(CFLAGS -O3 -Wall -Werror -W -std=c99)
|
||||||
|
set(PO_FILE ${LCPATH}/messages.po)
|
||||||
|
set(MO_FILE ${LCPATH}/LC_MESSAGES/${PROJ}.mo)
|
||||||
|
set(RU_FILE ${LCPATH}/ru.po)
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
set(MODULES cfitsio>=3.0 fli>=1.71)
|
||||||
|
if(DEFINED USEPNG)
|
||||||
|
set(MODULES ${MODULES} libpng>=1.2)
|
||||||
|
add_definitions(-DUSEPNG)
|
||||||
|
endif()
|
||||||
|
pkg_check_modules(${PROJ} REQUIRED ${MODULES})
|
||||||
|
if(DEFINED USERAW)
|
||||||
|
add_definitions(-DUSERAW)
|
||||||
|
endif()
|
||||||
|
add_executable(${PROJ} ${SOURCES} ${PO_FILE} ${MO_FILE})
|
||||||
|
target_link_libraries(${PROJ} ${${PROJ}_LIBRARIES})
|
||||||
|
include_directories(${${PROJ}_INCLUDE_DIRS})
|
||||||
|
link_directories(${${PROJ}_LIBRARY_DIRS})
|
||||||
|
add_definitions(${CFLAGS} -DLOCALEDIR=\"${CMAKE_INSTALL_PREFIX}/share/locale\"
|
||||||
|
-DPACKAGE_VERSION=\"${VERSION}\" -DGETTEXT_PACKAGE=\"${PROJ}\")
|
||||||
|
|
||||||
|
# Installation of the program
|
||||||
|
INSTALL(FILES ${MO_FILE} DESTINATION "share/locale/ru/LC_MESSAGES")
|
||||||
|
#PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ)
|
||||||
|
INSTALL(TARGETS ${PROJ} DESTINATION "bin")
|
||||||
|
#PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
||||||
|
# Script to be executed at installation time (kind of post-intallation script) to
|
||||||
|
# change the right accesses on the installed files
|
||||||
|
#INSTALL(SCRIPT inst.cmake)
|
||||||
|
|
||||||
|
find_package(Gettext REQUIRED)
|
||||||
|
find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext)
|
||||||
|
if(NOT GETTEXT_XGETTEXT_EXECUTABLE OR NOT GETTEXT_MSGFMT_EXECUTABLE)
|
||||||
|
message(FATAL_ERROR "xgettext not found")
|
||||||
|
endif()
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${PO_FILE}
|
||||||
|
COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} --from-code=koi8-r ${SOURCES} -c -k_ -kN_ -o ${PO_FILE}
|
||||||
|
COMMAND sed 's/charset=UTF-8/charset=koi8-r/' ${PO_FILE} | enconv > tmp && mv -f tmp ${PO_FILE}
|
||||||
|
COMMAND ${GETTEXT_MSGMERGE_EXECUTABLE} -Uis ${RU_FILE} ${PO_FILE}
|
||||||
|
DEPENDS ${SOURCES})
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${MO_FILE}
|
||||||
|
COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} ${RU_FILE} -o ${MO_FILE}
|
||||||
|
DEPENDS ${RU_FILE})
|
||||||
16
README
Normal file
16
README
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
1. cmake .
|
||||||
|
2. make
|
||||||
|
3. [make install] or just copy file takepic wherever you want
|
||||||
|
|
||||||
|
File bta_print.c needed to fill specific FITS keys for BTA telescope
|
||||||
|
If your want use this outside SAO RAS localnet, write:
|
||||||
|
1. cmake -DNOBTA=1 .
|
||||||
|
2. make ...
|
||||||
|
|
||||||
|
|
||||||
|
If you wish to save not only FITS, define:
|
||||||
|
* -DUSERAW=1 to save raw data
|
||||||
|
* -DUSEPNG=1 to save png data
|
||||||
|
|
||||||
|
define
|
||||||
|
* -DEBUG=1 for debug info
|
||||||
157
README-func
Normal file
157
README-func
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
// ÐÅÒÅÍÅÎÎÙÅ, ÔÉÐÙ
|
||||||
|
flidomain_t = METHOD | DEVICE;
|
||||||
|
// METHOD: FLIDOMAIN_PARALLEL_PORT, FLIDOMAIN_USB, FLIDOMAIN_SERIAL, FLIDOMAIN_INET;
|
||||||
|
// DEVICE: FLIDEVICE_CAMERA, FLIDOMAIN_FILTERWHEEL, FLIDOMAIN_FOCUSER.
|
||||||
|
|
||||||
|
fliframe_t = FLI_FRAME_TYPE_NORMAL ÉÌÉ FLI_FRAME_TYPE_DARK.
|
||||||
|
|
||||||
|
flibitdepth_t = FLI_MODE_8BIT ÉÌÉ FLI_MODE_16BIT.
|
||||||
|
|
||||||
|
flishutter_t = FLI_SHUTTER_CLOSE, FLI_SHUTTER_OPEN, FLI_SHUTTER_EXTERNAL_TRIGGER,
|
||||||
|
FLI_SHUTTER_EXTERNAL_TRIGGER_LOW, and FLI_SHUTTER_EXTERNAL_TRIGGER HIGH.
|
||||||
|
|
||||||
|
flibgflush_t = FLI_BGFLUSH_STOP and FLI_BGFLUSH_START.
|
||||||
|
|
||||||
|
flichannel_t = FLI_TEMPERATURE_INTERNAL and FLI_TEMPERATURE_EXTERNAL.
|
||||||
|
|
||||||
|
flidebug_t = FLIDEBUG_NONE, FLIDEBUG_INFO, FLIDEBUG_WARN, and FLIDEBUG_FAIL.
|
||||||
|
|
||||||
|
// ÆÕÎËÃÉÉ
|
||||||
|
|
||||||
|
LIBFLIAPI FLICancelExposure(flidev_t dev); // ÏÔÍÅÎÁ ÜËÓÐÏÚÉÃÉÉ
|
||||||
|
// return: 0 - ÕÓÐÅÈ, !0 - ÎÅÕÄÁÞÁ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIClose(flidev_t dev); // ÚÁËÒÙÔØ ÕÓÔÒÏÊÓÔ×Ï
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetArrayArea(flidev_t dev,
|
||||||
|
long* ul_x, long* ul_y, long* lr_x, long* lr_y); // ÐÏÌÕÞÉÔØ ÒÁÚÍÅÒ ÆÒÅÊÍÁ
|
||||||
|
// ul_x, ul_y - ËÏÏÒÄÉÎÁÔÙ ×ÅÒÈÎÅÇÏ ÌÅ×ÏÇÏ ÕÇÌÁ
|
||||||
|
// lr_x, lr_y - Ë-ÔÙ ÐÒÁ×ÏÇÏ ÎÉÖÎÅÇÏ ÕÇÌÁ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIFlushRow(flidev_t dev, long rows, long repeat); // ÓÂÒÏÓ ÒÑÄÏ×
|
||||||
|
// rows - ËÏÌ-×Ï ÒÑÄÏ× ÄÌÑ ÓÂÒÏÓÁ, repeat - ÓËÏÌØËÏ ÒÁÚ ÐÏÄÒÑÄ ÓÂÒÏÓÉÔØ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetFWRevision(flidev_t dev, long* fwrev); // ×ÅÒÓÉÑ ÐÒÏÛÉ×ËÉ
|
||||||
|
LIBFLIAPI FLIGetHWRevision(flidev_t dev, long* hwrev); // ×ÅÒÓÉÑ ÖÅÌÅÚÁ
|
||||||
|
// fwrev - ×ÅÒÓÉÑ ÐÒÏÛÉ×ËÉ, hwrev - ×ÅÒÓÉÑ ÖÅÌÅÚÁ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetLibVersion(char* ver, size_t len); // ×ÅÒÓÉÑ ÂÉÂÌÉÏÔÅËÉ
|
||||||
|
// ver - ÂÕÆÅÒ ÄÌÑ ×ÅÒÓÉÉ, len - ÅÇÏ ÄÌÉÎÁ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetModel(flidev_t dev, char* model, size_t len); // ÉÍÑ ÍÏÄÅÌÉ
|
||||||
|
// model - ÂÕÆÅÒ, len - ÅÇÏ ÄÌÉÎÁ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetPixelSize(flidev_t dev,
|
||||||
|
double* pixel x, double* pixel y); // ÒÁÚÍÅÒ ÐÉËÓÅÌÑ × ÍËÍ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetVisibleArea(flidev_t dev,
|
||||||
|
long* ul_x, long* ul_y, long* lr_x, long* lr_y); // Ò-Ò ×ÉÄÉÍÏÊ ÏÂÌÁÓÔÉ
|
||||||
|
// Ë-ÔÙ ÁÎÁÌÏÇÉÞÎÏ FLIGetArrayArea
|
||||||
|
|
||||||
|
LIBFLIAPI FLIOpen(flidev_t* dev, char* name, flidomain_t domain); // ÏÔËÒÙÔØ
|
||||||
|
// name - ÉÍÑ ÉÝ FLIList()
|
||||||
|
|
||||||
|
LIBFLIAPI FLISetDebugLevel(char* host, flidebug_t level); // ÕÒÏ×ÅÎØ ÏÔÌÁÄËÉ
|
||||||
|
// host ÉÇÎÏÒÉÒÕÅÔÓÑ
|
||||||
|
|
||||||
|
LIBFLIAPI FLISetExposureTime(flidev_t dev, long exptime); // ×ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ
|
||||||
|
// exptime - × ÍÉÌÌÉÓÅËÕÎÄÁÈ
|
||||||
|
|
||||||
|
LIBFLIAPI FLISetHBin(flidev_t dev, long hbin); // ÇÏÒÉÚ. ÂÉÎÎÉÎÇ
|
||||||
|
LIBFLIAPI FLISetVBin(flidev_t dev, long vbin); // ×ÅÒÔ. ÂÉÎÎÉÎÇ
|
||||||
|
// hbin = 1..16, vbin = 1..16
|
||||||
|
|
||||||
|
LIBFLIAPI FLISetFrameType(flidev_t dev, fliframe_t frametype); // ÔÅÍÎÏ×ÏÊ ÉÌÉ ÏÂÙÞÎÙÊ
|
||||||
|
|
||||||
|
LIBFLIAPI FLISetImageArea(flidev_t dev,
|
||||||
|
long ul_x, long ul_y, long lr_x, long lr_y); // ÕÓÔÁÎÏ×ÉÔØ ÏÂÌÁÓÔØ Ë-Ô
|
||||||
|
// lr_x = ul_x+(lrx-ul_x)/hbin;
|
||||||
|
// lr_y = ul_y+(lry-ul_y)/vbin;
|
||||||
|
// lrx, lry - ÁÂÓ. ËÏÏÒÄÉÎÁÔÙ × ÖÅÌÁÅÍÏÊ ÏÂÌÁÓÔÉ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetExposureStatus(flidev_t dev, long* timeleft);
|
||||||
|
// ×ÒÅÍÑ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ
|
||||||
|
|
||||||
|
LIBFLIAPI FLISetTemperature(flidev_t dev, double temperature); // ÚÁÄÁÔØ ô
|
||||||
|
// temperature - × ÇÒÁÄÕÓÁÈ ãÅÌØÓÉÑ, ÏÔ -55 ÄÏ +45
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetTemperature(flidev_t dev, double* temperature); // ÕÚÎÁÔØ ô
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGrabRow(flidev_t dev, void* buff, size_t width); // ÓÞÉÔÁÔØ ÒÑÄ
|
||||||
|
// buff - ÂÕÆÅÒ, width - ÍÁËÓ. ÛÉÒÉÎÁ ÒÑÄÁ (ÒÁÚÍÅÒ ÂÕÆÅÒÁ)
|
||||||
|
// ÓÞÉÔÙ×ÁÅÔ ÏÞÅÒÅÄÎÏÊ ÒÑÄ Ó ËÁÍÅÒÙ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIExposeFrame(flidev_t dev); // ÎÁÞÁÔØ ÎÁËÏÐÌÅÎÉÅ
|
||||||
|
|
||||||
|
LIBFLIAPI FLISetBitDepth(flidev_t dev, flibitdepth_t bitdepth); // ÚÁÄÁÔØ ÒÁÚÒÑÄÎÏÓÔØ
|
||||||
|
|
||||||
|
LIBFLIAPI FLISetNFlushes(flidev_t dev, long nflushes); // ÚÁÄÁÔØ ËÏÌ-×Ï ÓÂÒÏÓÏ×
|
||||||
|
// ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIReadIOPort(flidev_t dev, long* ioportset); // ÓÞÉÔÁÔØ ÐÏÒÔ io
|
||||||
|
// ioportset - ÓÞÉÔÁÎÎÙÅ ÄÁÎÎÙÅ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIWriteIOPort(flidev_t dev, long ioportset); // ÚÁÐÉÓÁÔØ × io
|
||||||
|
|
||||||
|
LIBFLIAPI FLIConfigureIOPort(flidev_t dev, long ioportset); // ÎÁÓÔÒÏÊËÁ
|
||||||
|
// ÆÕÎËÃÉÏÎÁÌ ËÁÖÄÏÇÏ ËÏÎÔÁËÔÁ ÐÏÒÔÁ io ÚÁ×ÉÓÉÔ ÏÔ ÚÎÁÞÅÎÉÑ ioportset
|
||||||
|
// 1 - ×ÙÈÏÄ, 0 - ×ÈÏÄ
|
||||||
|
|
||||||
|
LIBFLIAPI FLILockDevice(flidev_t dev); // ÂÌÏËÉÒÏ×ËÁ ÕÓÔÒÏÊÓÔ×Á
|
||||||
|
// ÄÌÑ ÏÂÅÓÐÅÞÅÎÉÑ ÍÏÎÏÐÏÌØÎÏÇÏ ÄÏÓÔÕÐÁ
|
||||||
|
LIBFLIAPI FLIUnlockDevice(flidev_t dev);
|
||||||
|
|
||||||
|
LIBFLIAPI FLIControlShutter(flidev_t dev, flishutter_t shutter); // ÚÁÔ×ÏÒ
|
||||||
|
// FLI_SHUTTER_EXTERNAL_TRIGGER_LOW É FLI_SHUTTER_EXTERNAL_TRIGGER
|
||||||
|
// ÚÁÐÕÓËÁÀÔ ÜËÓÐÏÚÉÃÉÀ ÐÒÉ ÎÁÌÉÞÉÉ ÌÏÇ. ÎÕÌÑ ÎÁ io0
|
||||||
|
// FLI_SHUTTER_EXTERNAL_TRIGGER_HIGH - ÚÁÐÕÓË ÜËÓÐ. ÎÁ ÌÏÇ1 ÎÁ io0
|
||||||
|
|
||||||
|
LIBFLIAPI FLIControlBackgroundFlush(flidev_t dev, flibgflush_t bgflush);
|
||||||
|
// ÆÏÎÏ×ÙÊ ÓÂÒÏÓ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIList(flidomain_t domain, char*** names);
|
||||||
|
// ÓÐÉÓÏË ÕÓÔÒÏÊÓÔ× ÉÚ ÄÏÍÅÎÁ domain
|
||||||
|
LIBFLIAPI FLIFreeList(char** names); // ÏÞÉÓÔÉÔØ ÓÐÉÓÏË names
|
||||||
|
|
||||||
|
LIBFLIAPI FLISetFilterPos(flidev_t dev, long filter);
|
||||||
|
// ÕÓÔÁÎÏ×ÉÔØ ÆÉÌØÔÒ × ÐÏÚÉÃÉÀ filter
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetFilterPos(flidev_t dev, long* filter);
|
||||||
|
// ÔÅËÕÝÅÅ ÐÏÌÏÖÅÎÉÅ ÆÉÌØÔÒÁ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetStepsRemaining(flidev_t dev, long* steps);
|
||||||
|
// ËÏÌÉÞÅÓÔ×Ï ÛÁÇÏ×, ÏÓÔÁ×ÛÉÈÓÑ ÄÏ ÎÁÚÎÁÞÅÎÎÏÊ ÐÏÚÉÃÉÉ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetFilterCount(flidev_t dev, long* filter);
|
||||||
|
// ÕÚÎÁÔØ ËÏÌ-×Ï ÆÉÌØÔÒÏ×
|
||||||
|
|
||||||
|
LIBFLIAPI FLIStepMotorAsync(flidev_t dev, long steps);
|
||||||
|
LIBFLIAPI FLIStepMotor(flidev_t dev, long steps);
|
||||||
|
// ÐÅÒÅÄ×ÉÎÕÔØ ÔÕÒÅÌØ ÎÁ ÚÁÄÁÎÎÏÅ ËÏÌ-×Ï ÛÁÇÏ×
|
||||||
|
|
||||||
|
LIBFLIAPI FLIGetStepperPosition(flidev_t dev, long* position);
|
||||||
|
// ÔÅËÕÝÅÅ ÐÏÌÏÖÅÎÉÅ ûä
|
||||||
|
|
||||||
|
// ÆÕÎËÃÉÉ ÄÌÑ ÒÁÂÏÔÙ Ó ÆÏËÕÓÉÒÕÀÝÉÍ ÕÓÔÒÏÊÓÔ×ÏÍ
|
||||||
|
LIBFLIAPI FLIHomeFocuser(flidev_t dev);
|
||||||
|
LIBFLIAPI FLIGetFocuserExtent(flidev_t dev, long* extent);
|
||||||
|
LIBFLIAPI FLIReadTemperature(flidev_t dev, flichannel_t channel,
|
||||||
|
double* temperature);
|
||||||
|
|
||||||
|
LIBFLIAPI FLICreateList(flidomain_t domain); // ÓÏÚÄÁÔØ ÓÐÉÓÏË
|
||||||
|
LIBFLIAPI FLIDeleteList(void); // ÕÄÁÌÉÔØ ÓÐÉÓÏË
|
||||||
|
LIBFLIAPI FLIListFirst(flidomain_t* domain, char* filename,
|
||||||
|
size_t fnlen, char* name, size_t namelen); // ÐÏÌÕÞÉÔØ ÐÅÒ×ÏÅ ÕÓÔÒÏÊÓÔ×Ï ÉÚ ÓÐÉÓËÁ
|
||||||
|
// domain - ÄÏÍÅÎ ÕÓÔÒ-×Á;
|
||||||
|
// filename - ÉÍÑ ÆÁÊÌÁ ÕÓÔÒ-×Á;
|
||||||
|
// fnlen - ÄÌÉÎÁ ÂÕÆÅÒÁ ÉÍÅÎÉ ÆÁÊÌÁ;
|
||||||
|
// name - ÎÁÚ×ÁÎÉÅ ÕÓÔÒ-×Á;
|
||||||
|
// namelen - ÄÌÉÎÁ ÂÕÆÅÒÁ ÎÁÚ×ÁÎÉÑ
|
||||||
|
|
||||||
|
LIBFLIAPI FLIListNext(flidomain_t* domain, char* filename,
|
||||||
|
size_t fnlen, char* name, size_t namelen); // ÐÏÌÕÞÉÔØ ÓÌÅÄÕÀÝÅÅ ÕÓÔÒ-×Ï
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
138
bta_print.c
Normal file
138
bta_print.c
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
/* Print some BTA NewACS data (or write to file)
|
||||||
|
* Usage:
|
||||||
|
* bta_print [time_step] [file_name]
|
||||||
|
* Where:
|
||||||
|
* time_step - writing period in sec., >=1.0
|
||||||
|
* <1.0 - once and exit (default)
|
||||||
|
* file_name - name of file to write to,
|
||||||
|
* "-" - stdout (default)
|
||||||
|
*/
|
||||||
|
#include "bta_print.h"
|
||||||
|
#include "bta_shdata.h"
|
||||||
|
|
||||||
|
|
||||||
|
static char buf[1024];
|
||||||
|
char *time_asc(double t){
|
||||||
|
int h, m;
|
||||||
|
double s;
|
||||||
|
h = (int)(t/3600.);
|
||||||
|
m = (int)((t - (double)h*3600.)/60.);
|
||||||
|
s = t - (double)h*3600. - (double)m*60.;
|
||||||
|
h %= 24;
|
||||||
|
if(s>59) s=59;
|
||||||
|
sprintf(buf, "%dh:%02dm:%04.1fs", h,m,s);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *angle_asc(double a){
|
||||||
|
char s;
|
||||||
|
int d, min;
|
||||||
|
double sec;
|
||||||
|
if (a >= 0.)
|
||||||
|
s = '+';
|
||||||
|
else{
|
||||||
|
s = '-'; a = -a;
|
||||||
|
}
|
||||||
|
d = (int)(a/3600.);
|
||||||
|
min = (int)((a - (double)d*3600.)/60.);
|
||||||
|
sec = a - (double)d*3600. - (double)min*60.;
|
||||||
|
d %= 360;
|
||||||
|
if(sec>59.9) sec=59.9;
|
||||||
|
sprintf(buf, "%c%d:%02d':%04.1f''", s,d,min,sec);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CMNTSZ 79
|
||||||
|
#define CMNT(...) snprintf(comment, CMNTSZ, __VA_ARGS__)
|
||||||
|
#define FTKEY(...) WRITEKEY(fp, __VA_ARGS__, comment)
|
||||||
|
|
||||||
|
void write_bta_data(fitsfile *fp){
|
||||||
|
char comment[CMNTSZ + 1];
|
||||||
|
char *val;
|
||||||
|
double dtmp;
|
||||||
|
int i;
|
||||||
|
get_shm_block(&sdat, ClientSide);
|
||||||
|
if(!check_shm_block(&sdat)) return;
|
||||||
|
// TELESCOP / Telescope name
|
||||||
|
CMNT("Telescope name");
|
||||||
|
FTKEY(TSTRING, "TELESCOP", "BTA 6m telescope");
|
||||||
|
dtmp = S_time-EE_time;
|
||||||
|
// ST / sidereal time (hh:mm:ss.ms)
|
||||||
|
CMNT("Sidereal time: %s", time_asc(dtmp));
|
||||||
|
FTKEY(TDOUBLE, "ST", &dtmp);
|
||||||
|
// UT / universal time (hh:mm:ss.ms)
|
||||||
|
CMNT("Universal time: %s", time_asc(M_time));
|
||||||
|
FTKEY(TDOUBLE, "UT", &M_time);
|
||||||
|
CMNT("Julian date");
|
||||||
|
FTKEY(TDOUBLE, "JD", &JDate);
|
||||||
|
|
||||||
|
switch(Tel_Focus){
|
||||||
|
default:
|
||||||
|
case Prime :
|
||||||
|
val = "Prime";
|
||||||
|
// FOCUS / Focus of telescope (mm)
|
||||||
|
CMNT("Focus of telescope (mm)");
|
||||||
|
FTKEY(TDOUBLE, "VAL_F", &val_F);
|
||||||
|
break;
|
||||||
|
case Nasmyth1 : val = "Nasmyth1"; break;
|
||||||
|
case Nasmyth2 : val = "Nasmyth2"; break;
|
||||||
|
}
|
||||||
|
CMNT("Observation focus");
|
||||||
|
FTKEY(TSTRING, "FOCUS", val);
|
||||||
|
// EPOCH / Epoch of RA & DEC
|
||||||
|
time_t epoch = time(NULL);
|
||||||
|
strftime(comment, CMNTSZ, "%Y", gmtime(&epoch));
|
||||||
|
i = atoi(comment);
|
||||||
|
CMNT("Epoch of RA & DEC");
|
||||||
|
FTKEY(TINT, "EPOCH", &i);
|
||||||
|
CMNT("Current object R.A.: %s", time_asc(CurAlpha));
|
||||||
|
// RA / Right ascention (HH MM SS)
|
||||||
|
FTKEY(TDOUBLE, "RA", &CurAlpha);
|
||||||
|
// DEC / Declination (DD MM SS)
|
||||||
|
CMNT("Current object Decl.: %s", angle_asc(CurDelta));
|
||||||
|
FTKEY(TDOUBLE, "DEC", &CurDelta);
|
||||||
|
CMNT("Source R.A.: %s", time_asc(SrcAlpha));
|
||||||
|
FTKEY(TDOUBLE, "S_RA", &SrcAlpha);
|
||||||
|
CMNT("Source Decl.: %s", angle_asc(SrcDelta));
|
||||||
|
FTKEY(TDOUBLE, "S_DEC", &SrcDelta);
|
||||||
|
CMNT("Telescope R.A: %s", time_asc(val_Alp));
|
||||||
|
FTKEY(TDOUBLE, "T_RA", &val_Alp);
|
||||||
|
CMNT("Telescope Decl.: %s", angle_asc(val_Del));
|
||||||
|
FTKEY(TDOUBLE, "T_DEC", &val_Del);
|
||||||
|
// A / Azimuth
|
||||||
|
CMNT("Current object Azimuth: %s", angle_asc(tag_A));
|
||||||
|
FTKEY(TDOUBLE, "A", &tag_A);
|
||||||
|
// Z / Zenith distance
|
||||||
|
CMNT("Current object Zenith: %s", angle_asc(tag_Z));
|
||||||
|
FTKEY(TDOUBLE, "Z", &tag_Z);
|
||||||
|
// ROTANGLE / Field rotation angle
|
||||||
|
CMNT("Field rotation angle: %s", angle_asc(tag_P));
|
||||||
|
FTKEY(TDOUBLE, "ROTANGLE", &tag_P);
|
||||||
|
|
||||||
|
CMNT("Telescope A: %s", angle_asc(val_A));
|
||||||
|
FTKEY(TDOUBLE, "VAL_A", &val_A);
|
||||||
|
CMNT("Telescope Z: %s", angle_asc(val_Z));
|
||||||
|
FTKEY(TDOUBLE, "VAL_Z", &val_Z);
|
||||||
|
CMNT("Current P: %s", angle_asc(val_P));
|
||||||
|
FTKEY(TDOUBLE, "VAL_P", &val_P);
|
||||||
|
|
||||||
|
CMNT("Dome A: %s", angle_asc(val_D));
|
||||||
|
FTKEY(TDOUBLE, "VAL_D", &val_D);
|
||||||
|
// OUTTEMP / Out temperature (C)
|
||||||
|
CMNT("Outern temperature, degC");
|
||||||
|
FTKEY(TDOUBLE, "OUTTEMP", &val_T1);
|
||||||
|
// DOMETEMP / Dome temperature (C)
|
||||||
|
CMNT("In-dome temperature, degC");
|
||||||
|
FTKEY(TDOUBLE, "DOMETEMP", &val_T2);
|
||||||
|
// MIRRTEMP / Mirror temperature (C)
|
||||||
|
CMNT("Mirror temperature, degC");
|
||||||
|
// PRESSURE / Pressure (mmHg)
|
||||||
|
FTKEY(TDOUBLE, "MIRRTEMP", &val_T3);
|
||||||
|
CMNT("Pressure, mmHg");
|
||||||
|
FTKEY(TDOUBLE, "PRESSURE", &val_B);
|
||||||
|
// WIND / Wind speed (m/s)
|
||||||
|
CMNT("Wind speed, m/s");
|
||||||
|
FTKEY(TDOUBLE, "WIND", &val_Wnd);
|
||||||
|
CMNT("Humidity, %%");
|
||||||
|
FTKEY(TDOUBLE, "HUM", &val_Hmd);
|
||||||
|
}
|
||||||
8
bta_print.h
Normal file
8
bta_print.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef __BTA_PRINT_H__
|
||||||
|
#define __BTA_PRINT_H__
|
||||||
|
|
||||||
|
#include "takepic.h"
|
||||||
|
|
||||||
|
void write_bta_data(fitsfile *fp);
|
||||||
|
|
||||||
|
#endif // __BTA_PRINT_H__
|
||||||
1159
bta_shdata.h
Normal file
1159
bta_shdata.h
Normal file
File diff suppressed because it is too large
Load Diff
BIN
extern/fliusb-1.3.tgz
vendored
Normal file
BIN
extern/fliusb-1.3.tgz
vendored
Normal file
Binary file not shown.
BIN
extern/libfli-1.104.tgz
vendored
Normal file
BIN
extern/libfli-1.104.tgz
vendored
Normal file
Binary file not shown.
BIN
locale/ru/LC_MESSAGES/takepic.mo
Normal file
BIN
locale/ru/LC_MESSAGES/takepic.mo
Normal file
Binary file not shown.
401
locale/ru/ru.po
Normal file
401
locale/ru/ru.po
Normal file
@ -0,0 +1,401 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr "Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2011-06-28 09:54+0400\n"
|
||||||
|
"PO-Revision-Date: 2011-06-28 09:22+0300\n"
|
||||||
|
"Last-Translator: Edward V. Emelianov <eddy@sao.ru>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=koi8-r\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#. "\tïÐÃÉÉ:\n"
|
||||||
|
#: usage.c:78
|
||||||
|
#, c-format
|
||||||
|
msgid "\tOptions:\n"
|
||||||
|
msgstr "\tïÐÃÉÉ:\n"
|
||||||
|
|
||||||
|
#. %.3f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ\n
|
||||||
|
#: takepic.c:166
|
||||||
|
#, c-format
|
||||||
|
msgid "%.3f seconds till exposition ends\n"
|
||||||
|
msgstr "%.3f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ\n"
|
||||||
|
|
||||||
|
#. %d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n
|
||||||
|
#: takepic.c:220
|
||||||
|
#, c-format
|
||||||
|
msgid "%d seconds till pause ends\n"
|
||||||
|
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
|
||||||
|
|
||||||
|
#. ðÏÌÅ ÉÚÏÂÒÁÖÅÎÉÑ: (%ld, %ld)(%ld, %ld)
|
||||||
|
#: takepic.c:125
|
||||||
|
#, c-format
|
||||||
|
msgid "Array field: (%ld, %ld)(%ld, %ld)"
|
||||||
|
msgstr "ðÏÌÅ ÉÚÏÂÒÁÖÅÎÉÑ: (%ld, %ld)(%ld, %ld)"
|
||||||
|
|
||||||
|
#. îÁÞÉÎÁÀ ÜËÓÐÏÚÉÃÉÀ %dÍÓ, ×ÒÅÍÑ: %s, ÆÁÊÌ: %s.%d.%d\n
|
||||||
|
#: takepic.c:160
|
||||||
|
#, c-format
|
||||||
|
msgid "Begin exposition %dms, exptime: %s, filename: %s.%d.%d\n"
|
||||||
|
msgstr "îÁÞÉÎÁÀ ÜËÓÐÏÚÉÃÉÀ %dÍÓ, ×ÒÅÍÑ: %s, ÆÁÊÌ: %s.%d.%d\n"
|
||||||
|
|
||||||
|
#. ëÁÍÅÒÁ '%s' ÉÚ ÄÏÍÅÎÁ %s
|
||||||
|
#: takepic.c:101
|
||||||
|
#, c-format
|
||||||
|
msgid "Camera '%s', domain %s"
|
||||||
|
msgstr "ëÁÍÅÒÁ '%s' ÉÚ ÄÏÍÅÎÁ %s"
|
||||||
|
|
||||||
|
#. îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ ÖÕÒÎÁÌÁ ÓÔÁÔÉÓÔÉËÉ
|
||||||
|
#: takepic.c:89
|
||||||
|
msgid "Can't open statistics log file"
|
||||||
|
msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÖÕÒÎÁÌ ÓÔÁÔÉÓÔÉËÉ"
|
||||||
|
|
||||||
|
#. îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ ÖÕÒÎÁÌÁ ÔÅÍÐÅÒÁÔÕÒ
|
||||||
|
#: takepic.c:80
|
||||||
|
msgid "Can't open temperature log file"
|
||||||
|
msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÖÕÒÎÁÌ ÔÅÍÐÅÒÁÔÕÒ"
|
||||||
|
|
||||||
|
#. îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ
|
||||||
|
#: takepic.c:199
|
||||||
|
msgid "Can't save file"
|
||||||
|
msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ"
|
||||||
|
|
||||||
|
#. úÁÈ×ÁÔ ËÁÄÒÁ %d\n
|
||||||
|
#: takepic.c:155
|
||||||
|
#, c-format
|
||||||
|
msgid "Capture frame %d\n"
|
||||||
|
msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d\n"
|
||||||
|
|
||||||
|
#. "óßÅÍËÁ ÔÅÍÎÏ×ÙÈ"
|
||||||
|
#: usage.c:193
|
||||||
|
msgid "Dark frames"
|
||||||
|
msgstr "óßÅÍËÁ ÔÅÍÎÏ×ÙÈ"
|
||||||
|
|
||||||
|
#. "÷ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ: %dÍÓ"
|
||||||
|
#: usage.c:296
|
||||||
|
#, c-format
|
||||||
|
msgid "Exposure time: %dms"
|
||||||
|
msgstr "÷ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ: %dÍÓ"
|
||||||
|
|
||||||
|
#. ÷ÉÄÉÍÏÅ ÐÏÌÅ: %s
|
||||||
|
#: takepic.c:120
|
||||||
|
#, c-format
|
||||||
|
msgid "Field of view: %s"
|
||||||
|
msgstr "÷ÉÄÉÍÏÅ ÐÏÌÅ: %s"
|
||||||
|
|
||||||
|
#. æÁÊÌ ÚÁÐÉÓÁÎ × '%s'
|
||||||
|
#: takepic.c:203
|
||||||
|
#, c-format
|
||||||
|
msgid "File saved as '%s'"
|
||||||
|
msgstr "æÁÊÌ ÚÁÐÉÓÁÎ × '%s'"
|
||||||
|
|
||||||
|
#. ðÏÌÎÏÅ ÖÕÒÎÁÌÉÒÏ×ÁÎÉÅ ÓÔÁÔÉÓÔÉËÉ ÂÅÚ ÓÏÈÒÁÎÅÎÉÑ ÉÚÏÂÒÁÖÅÎÉÊ
|
||||||
|
#: usage.c:225
|
||||||
|
msgid "Full statistics logging without saving images"
|
||||||
|
msgstr "ðÏÌÎÏÅ ÖÕÒÎÁÌÉÒÏ×ÁÎÉÅ ÓÔÁÔÉÓÔÉËÉ ÂÅÚ ÓÏÈÒÁÎÅÎÉÑ ÉÚÏÂÒÁÖÅÎÉÊ"
|
||||||
|
|
||||||
|
#. áÐÐ. ×ÅÒÓÉÑ: %ld
|
||||||
|
#: takepic.c:110
|
||||||
|
#, c-format
|
||||||
|
msgid "HW revision: %ld"
|
||||||
|
msgstr "áÐÐ. ×ÅÒÓÉÑ: %ld"
|
||||||
|
|
||||||
|
#. "çÏÒ. ÂÉÎÎÉÎÇ: %d"
|
||||||
|
#: usage.c:209
|
||||||
|
#, c-format
|
||||||
|
msgid "Horisontal binning: %d"
|
||||||
|
msgstr "çÏÒ. ÂÉÎÎÉÎÇ: %d"
|
||||||
|
|
||||||
|
#. "éÇÎÏÒÉÒÕÀ ÁÒÇÕÍÅÎÔ[Ù]:\n"
|
||||||
|
#: usage.c:327
|
||||||
|
#, c-format
|
||||||
|
msgid "Ignore argument[s]:\n"
|
||||||
|
msgstr "éÇÎÏÒÉÒÕÀ ÁÒÇÕÍÅÎÔ[Ù]:\n"
|
||||||
|
|
||||||
|
#. óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ\n
|
||||||
|
#: takepic.c:470
|
||||||
|
#, c-format
|
||||||
|
msgid "Image stat:\n"
|
||||||
|
msgstr "óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ\n"
|
||||||
|
|
||||||
|
#. "ôÉÐ ÉÚÏÂÒÁÖÅÎÉÑ - %s"
|
||||||
|
#: usage.c:214
|
||||||
|
#, c-format
|
||||||
|
msgid "Image type - %s"
|
||||||
|
msgstr "ôÉÐ ÉÚÏÂÒÁÖÅÎÉÑ - %s"
|
||||||
|
|
||||||
|
#. ôÅÍÐÅÒÁÔÕÒÁ (×ÎÕÔÒ.): %f
|
||||||
|
#: takepic.c:141
|
||||||
|
#, c-format
|
||||||
|
msgid "Inner temperature: %f"
|
||||||
|
msgstr "ôÅÍÐÅÒÁÔÕÒÁ (×ÎÕÔÒ.): %f"
|
||||||
|
|
||||||
|
#. "îÁÚ×ÁÎÉÅ ÐÒÉÂÏÒÁ - %s"
|
||||||
|
#: usage.c:219
|
||||||
|
#, c-format
|
||||||
|
msgid "Instrument name - %s"
|
||||||
|
msgstr "îÁÚ×ÁÎÉÅ ÐÒÉÂÏÒÁ - %s"
|
||||||
|
|
||||||
|
#. ÷ÅÒÓÉÑ ÂÉÂÌÉÏÔÅËÉ '%s'
|
||||||
|
#: takepic.c:75
|
||||||
|
#, c-format
|
||||||
|
msgid "Library version '%s'"
|
||||||
|
msgstr "÷ÅÒÓÉÑ ÂÉÂÌÉÏÔÅËÉ '%s'"
|
||||||
|
|
||||||
|
#. íÏÄÅÌØ:\t\t%s
|
||||||
|
#: takepic.c:106
|
||||||
|
#, c-format
|
||||||
|
msgid "Model:\t\t%s"
|
||||||
|
msgstr "íÏÄÅÌØ:\t\t%s"
|
||||||
|
|
||||||
|
#. "N ÓÂÒÏÓÏ× ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ"
|
||||||
|
#: usage.c:87
|
||||||
|
msgid "N flushes before exposing"
|
||||||
|
msgstr "N ÓÂÒÏÓÏ× ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ"
|
||||||
|
|
||||||
|
#. ëÁÍÅÒÙ ÎÅ ÎÁÊÄÅÎÙ!\n
|
||||||
|
#: takepic.c:286
|
||||||
|
msgid "No cameras found!\n"
|
||||||
|
msgstr "ëÁÍÅÒÙ ÎÅ ÎÁÊÄÅÎÙ!\n"
|
||||||
|
|
||||||
|
#. "éÍÑ ÏÂßÅËÔÁ - %s"
|
||||||
|
#: usage.c:243
|
||||||
|
#, c-format
|
||||||
|
msgid "Object name - %s"
|
||||||
|
msgstr "éÍÑ ÏÂßÅËÔÁ - %s"
|
||||||
|
|
||||||
|
#. "îÁÂÌÀÄÁÔÅÌÉ: %s"
|
||||||
|
#: usage.c:248
|
||||||
|
#, c-format
|
||||||
|
msgid "Observers: %s"
|
||||||
|
msgstr "îÁÂÌÀÄÁÔÅÌÉ: %s"
|
||||||
|
|
||||||
|
#. ôÅÍÐÅÒÁÔÕÒÁ (×ÎÅÛÎ.): %f
|
||||||
|
#: takepic.c:144
|
||||||
|
#, c-format
|
||||||
|
msgid "Outern temperature: %f"
|
||||||
|
msgstr "ôÅÍÐÅÒÁÔÕÒÁ (×ÎÅÛÎ.): %f"
|
||||||
|
|
||||||
|
#. "îÅÔ ÐÒÅÆÉËÓÁ ÉÍÅÎÉ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×"
|
||||||
|
#: usage.c:316
|
||||||
|
msgid "Output file names prefix is absent"
|
||||||
|
msgstr "îÅÔ ÐÒÅÆÉËÓÁ ÉÍÅÎÉ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×"
|
||||||
|
|
||||||
|
#. "ðÁÕÚÁ: %dÓ"
|
||||||
|
#: usage.c:261
|
||||||
|
#, c-format
|
||||||
|
msgid "Pause: %ds"
|
||||||
|
msgstr "ðÁÕÚÁ: %dÓ"
|
||||||
|
|
||||||
|
#. òÁÚÍÅÒ ÐÉËÓÅÌÑ: %g x %g
|
||||||
|
#: takepic.c:116
|
||||||
|
#, c-format
|
||||||
|
msgid "Pixel size: %g x %g"
|
||||||
|
msgstr "òÁÚÍÅÒ ÐÉËÓÅÌÑ: %g x %g"
|
||||||
|
|
||||||
|
#. "á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ: %s"
|
||||||
|
#: usage.c:188
|
||||||
|
#, c-format
|
||||||
|
msgid "Program author: %s"
|
||||||
|
msgstr "á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ: %s"
|
||||||
|
|
||||||
|
#. "îÁÚ×ÁÎÉÅ ÐÒÏÇÒÁÍÍÙ: %s"
|
||||||
|
#: usage.c:253
|
||||||
|
#, c-format
|
||||||
|
msgid "Program name: %s"
|
||||||
|
msgstr "îÁÚ×ÁÎÉÅ ÐÒÏÇÒÁÍÍÙ: %s"
|
||||||
|
|
||||||
|
#. óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ:
|
||||||
|
#: takepic.c:179
|
||||||
|
#, c-format
|
||||||
|
msgid "Read image: "
|
||||||
|
msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ: "
|
||||||
|
|
||||||
|
#. ðÒÏÇÒ. ×ÅÒÓÉÑ: %ld
|
||||||
|
#: takepic.c:113
|
||||||
|
#, c-format
|
||||||
|
msgid "SW revision: %ld"
|
||||||
|
msgstr "ðÒÏÇÒ. ×ÅÒÓÉÑ: %ld"
|
||||||
|
|
||||||
|
#. "óÏÈÒÁÎÅÎÉÅ ÖÕÒÎÁÌÁ ÔÅÍÐÅÒÁÔÕÒ"
|
||||||
|
#: usage.c:230
|
||||||
|
msgid "Save temperature log"
|
||||||
|
msgstr "óÏÈÒÁÎÅÎÉÅ ÖÕÒÎÁÌÁ ÔÅÍÐÅÒÁÔÕÒ"
|
||||||
|
|
||||||
|
#. "óÅÒÉÑ ÉÚ %d ËÁÄÒÏ×"
|
||||||
|
#: usage.c:238
|
||||||
|
#, c-format
|
||||||
|
msgid "Series of %d frames"
|
||||||
|
msgstr "óÅÒÉÑ ÉÚ %d ËÁÄÒÏ×"
|
||||||
|
|
||||||
|
#. "õÓÔÁÎÏ×ÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ: %.3f"
|
||||||
|
#: usage.c:280
|
||||||
|
#, c-format
|
||||||
|
msgid "Set temperature: %.3f"
|
||||||
|
msgstr "õÓÔÁÎÏ×ÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ: %.3f"
|
||||||
|
|
||||||
|
#. "éÓÐÏÌØÚÏ×ÁÎÉÅ:\t%s [ÏÐÃÉÉ] <ÐÒÅÆÉËÓ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×>\n"
|
||||||
|
#: usage.c:75
|
||||||
|
#, c-format
|
||||||
|
msgid "Usage:\t%s [options] <output files prefix>\n"
|
||||||
|
msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ:\t%s [ÏÐÃÉÉ] <ÐÒÅÆÉËÓ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×>\n"
|
||||||
|
|
||||||
|
#. "÷ÅÒÔ. ÂÉÎÎÉÎÇ: %d"
|
||||||
|
#: usage.c:288
|
||||||
|
#, c-format
|
||||||
|
msgid "Vertical binning: %d"
|
||||||
|
msgstr "÷ÅÒÔ. ÂÉÎÎÉÎÇ: %d"
|
||||||
|
|
||||||
|
#. "îÅ×ÅÒÎÙÊ"
|
||||||
|
#: usage.c:206 usage.c:285
|
||||||
|
msgid "Wrong"
|
||||||
|
msgstr "îÅ×ÅÒÎÙÊ"
|
||||||
|
|
||||||
|
#. "îÅ×ÅÒÎÏÅ ×ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ: %s"
|
||||||
|
#: usage.c:293
|
||||||
|
#, c-format
|
||||||
|
msgid "Wrong exposure time: %s"
|
||||||
|
msgstr "îÅ×ÅÒÎÏÅ ×ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ: %s"
|
||||||
|
|
||||||
|
#. "îÅ×ÅÒÎÏÅ ËÏÌ-×Ï ËÁÄÒÏ×: %s"
|
||||||
|
#: usage.c:235
|
||||||
|
#, c-format
|
||||||
|
msgid "Wrong frames number in series: %s"
|
||||||
|
msgstr "îÅ×ÅÒÎÏÅ ËÏÌ-×Ï ËÁÄÒÏ×: %s"
|
||||||
|
|
||||||
|
#. "îÅ×ÅÒÎÁÑ ÎÉÖÎÑÑ ÇÒÁÎÉÃÁ: %s"
|
||||||
|
#: usage.c:54
|
||||||
|
#, c-format
|
||||||
|
msgid "Wrong lower border: %s"
|
||||||
|
msgstr "îÅ×ÅÒÎÁÑ ÎÉÖÎÑÑ ÇÒÁÎÉÃÁ: %s"
|
||||||
|
|
||||||
|
#. "îÅ×ÅÒÎÁÑ ÐÁÕÚÁ: %s"
|
||||||
|
#: usage.c:258
|
||||||
|
#, c-format
|
||||||
|
msgid "Wrong pause length: %s"
|
||||||
|
msgstr "îÅ×ÅÒÎÁÑ ÐÁÕÚÁ: %s"
|
||||||
|
|
||||||
|
#. "îÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ ÔÅÍÐÅÒÁÔÕÒÙ: %s (ÄÏÌÖÎÏ ÂÙÔØ ÏÔ -55 ÄÏ 30)"
|
||||||
|
#: usage.c:276
|
||||||
|
#, c-format
|
||||||
|
msgid "Wrong temperature: %s (must be from -55 to 30)"
|
||||||
|
msgstr "îÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ ÔÅÍÐÅÒÁÔÕÒÙ: %s (ÄÏÌÖÎÏ ÂÙÔØ ÏÔ -55 ÄÏ 30)"
|
||||||
|
|
||||||
|
#. "îÅ×ÅÒÎÁÑ ×ÅÒÈÎÑÑ ÇÒÁÎÉÃÁ: %s"
|
||||||
|
#: usage.c:59
|
||||||
|
#, c-format
|
||||||
|
msgid "Wrong upper border: %s"
|
||||||
|
msgstr "îÅ×ÅÒÎÁÑ ×ÅÒÈÎÑÑ ÇÒÁÎÉÃÁ: %s"
|
||||||
|
|
||||||
|
#. "äÉÁÐÁÚÏÎ ÐÏ X: [%d, %d]"
|
||||||
|
#: usage.c:301
|
||||||
|
#, c-format
|
||||||
|
msgid "X range: [%d, %d]"
|
||||||
|
msgstr "äÉÁÐÁÚÏÎ ÐÏ X: [%d, %d]"
|
||||||
|
|
||||||
|
#. "äÉÁÐÁÚÏÎ ÐÏ Y: [%d, %d]"
|
||||||
|
#: usage.c:306
|
||||||
|
#, c-format
|
||||||
|
msgid "Y range: [%d, %d]"
|
||||||
|
msgstr "äÉÁÐÁÚÏÎ ÐÏ Y: [%d, %d]"
|
||||||
|
|
||||||
|
#. ÄÁÔÁ/×ÒÅÍÑ
|
||||||
|
#: takepic.c:171 takepic.c:225
|
||||||
|
msgid "date/time"
|
||||||
|
msgstr "ÄÁÔÁ/×ÒÅÍÑ"
|
||||||
|
|
||||||
|
#. "ÎÅ ÓÏÈÒÁÎÑÔØ ÉÚÏÂÒÁÖÅÎÉÑ, ÌÉÛØ ×ÅÓÔÉ ÚÁÐÉÓØ ÓÔÁÔÉÓÔËÉ"
|
||||||
|
#: usage.c:99
|
||||||
|
msgid "don't save images, only make all-stat log"
|
||||||
|
msgstr "ÎÅ ÓÏÈÒÁÎÑÔØ ÉÚÏÂÒÁÖÅÎÉÑ, ÌÉÛØ ×ÅÓÔÉ ÚÁÐÉÓØ ÓÔÁÔÉÓÔËÉ"
|
||||||
|
|
||||||
|
#. "ÂÉÎÎÉÎÇ N ÐÉËÓÅÌÅÊ ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ"
|
||||||
|
#: usage.c:90
|
||||||
|
msgid "horizontal binning to N pixels"
|
||||||
|
msgstr "ÂÉÎÎÉÎÇ N ÐÉËÓÅÌÅÊ ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ"
|
||||||
|
|
||||||
|
#. "ÔÉÐ ÉÚÏÂÒÁÖÅÎÉÑ"
|
||||||
|
#: usage.c:93
|
||||||
|
msgid "image type"
|
||||||
|
msgstr "ÔÉÐ ÉÚÏÂÒÁÖÅÎÉÑ"
|
||||||
|
|
||||||
|
#. "ÎÁÚ×ÁÎÉÅ ÐÒÉÂÏÒÁ"
|
||||||
|
#: usage.c:96
|
||||||
|
msgid "instrument name"
|
||||||
|
msgstr "ÎÁÚ×ÁÎÉÅ ÐÒÉÂÏÒÁ"
|
||||||
|
|
||||||
|
#. "×ÙÄÅÒÖÁÔØ ptime ÓÅËÕÎÄ ÍÅÖÄÕ ÜËÓÐÏÚÉÃÉÑÍÉ"
|
||||||
|
#: usage.c:117
|
||||||
|
msgid "make pause for ptime seconds between expositions"
|
||||||
|
msgstr "×ÙÄÅÒÖÁÔØ ptime ÓÅËÕÎÄ ÍÅÖÄÕ ÜËÓÐÏÚÉÃÉÑÍÉ"
|
||||||
|
|
||||||
|
#. "N ËÁÄÒÏ× × ÓÅÒÉÉ"
|
||||||
|
#: usage.c:105
|
||||||
|
msgid "make series of N frames"
|
||||||
|
msgstr "N ËÁÄÒÏ× × ÓÅÒÉÉ"
|
||||||
|
|
||||||
|
#. "×ÅÓÔÉ ÚÁÐÉÓØ ÒÁÂÏÞÉÈ ÔÅÍÐÅÒÁÔÕÒ × ÆÁÊÌ temp_log"
|
||||||
|
#: usage.c:102
|
||||||
|
msgid "make temperatures logging to file temp_log"
|
||||||
|
msgstr "×ÅÓÔÉ ÚÁÐÉÓØ ÒÁÂÏÞÉÈ ÔÅÍÐÅÒÁÔÕÒ × ÆÁÊÌ temp_log"
|
||||||
|
|
||||||
|
#. "ÎÅ ÏÔËÒÙ×ÁÔØ ÚÁÔ×ÏÒ ÐÒÉ ÜËÓÐÏÚÉÃÉÉ (\"ÔÅÍÎÏ×ÙÅ\")"
|
||||||
|
#: usage.c:84
|
||||||
|
msgid "not open shutter, when exposing (\"dark frames\")"
|
||||||
|
msgstr "ÎÅ ÏÔËÒÙ×ÁÔØ ÚÁÔ×ÏÒ ÐÒÉ ÜËÓÐÏÚÉÃÉÉ (\"ÔÅÍÎÏ×ÙÅ\")"
|
||||||
|
|
||||||
|
#. "ÎÅ ÓÏÈÒÁÎÑÔØ ÉÚÏÂÒÁÖÅÎÉÅ, Á ÔÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
|
||||||
|
#: usage.c:120
|
||||||
|
msgid "not save image, just show statistics"
|
||||||
|
msgstr "ÎÅ ÓÏÈÒÁÎÑÔØ ÉÚÏÂÒÁÖÅÎÉÅ, Á ÔÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
|
||||||
|
|
||||||
|
#. "ÎÁÚ×ÁÎÉÅ ÏÂßÅËÔÁ"
|
||||||
|
#: usage.c:108
|
||||||
|
msgid "object name"
|
||||||
|
msgstr "ÎÁÚ×ÁÎÉÅ ÏÂßÅËÔÁ"
|
||||||
|
|
||||||
|
#. "ÉÍÅÎÁ ÎÁÂÌÀÄÁÔÅÌÅÊ"
|
||||||
|
#: usage.c:111
|
||||||
|
msgid "observers' names"
|
||||||
|
msgstr "ÉÍÅÎÁ ÎÁÂÌÀÄÁÔÅÌÅÊ"
|
||||||
|
|
||||||
|
#. "ÎÁÚ×ÁÎÉÅ ÐÒÏÇÒÁÍÍÙ ÎÁÂÌÀÄÅÎÉÊ"
|
||||||
|
#: usage.c:114
|
||||||
|
msgid "observing program name"
|
||||||
|
msgstr "ÎÁÚ×ÁÎÉÅ ÐÒÏÇÒÁÍÍÙ ÎÁÂÌÀÄÅÎÉÊ"
|
||||||
|
|
||||||
|
#. "ÔÏÌØËÏ ÚÁÄÁÔØ/ÐÏÌÕÞÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ"
|
||||||
|
#. "ÔÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ/ÚÁÄÁÔØ ÔÅÍÐÅÒÁÔÕÒÕ"
|
||||||
|
#: usage.c:123 usage.c:270
|
||||||
|
msgid "only set/get temperature"
|
||||||
|
msgstr "ÔÏÌØËÏ ÚÁÄÁÔØ/ÐÏÌÕÞÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ"
|
||||||
|
|
||||||
|
#. "Á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ"
|
||||||
|
#: usage.c:81
|
||||||
|
msgid "program author"
|
||||||
|
msgstr "Á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ"
|
||||||
|
|
||||||
|
#. "×ÙÂÒÁÔØ ÄÉÁÐÁÚÏÎ ÄÌÑ ÓÞÉÔÙ×ÁÎÉÑ"
|
||||||
|
#: usage.c:135 usage.c:138
|
||||||
|
msgid "select clip region"
|
||||||
|
msgstr "×ÙÂÒÁÔØ ÄÉÁÐÁÚÏÎ ÄÌÑ ÓÞÉÔÙ×ÁÎÉÑ"
|
||||||
|
|
||||||
|
#. "×ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ exptime ÍÓ"
|
||||||
|
#: usage.c:132
|
||||||
|
msgid "set exposure time to exptime ms"
|
||||||
|
msgstr "×ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ exptime ÍÓ"
|
||||||
|
|
||||||
|
#. "ÚÁÄÁÔØ ÒÁÂÏÞÕÀ ÔÅÍÐÅÒÁÔÕÒÕ degr ÇÒÁÄÕÓÏ×"
|
||||||
|
#: usage.c:126
|
||||||
|
msgid "set work temperature to degr C"
|
||||||
|
msgstr "ÚÁÄÁÔØ ÒÁÂÏÞÕÀ ÔÅÍÐÅÒÁÔÕÒÕ degr ÇÒÁÄÕÓÏ×"
|
||||||
|
|
||||||
|
#. "ÂÉÎÎÉÎÇ N ÐÉËÓÅÌÅÊ ÐÏ ×ÅÒÔÉËÁÌÉ"
|
||||||
|
#: usage.c:129
|
||||||
|
msgid "vertical binning to N pixels"
|
||||||
|
msgstr "ÂÉÎÎÉÎÇ N ÐÉËÓÅÌÅÊ ÐÏ ×ÅÒÔÉËÁÌÉ"
|
||||||
503
takepic.c
Normal file
503
takepic.c
Normal file
@ -0,0 +1,503 @@
|
|||||||
|
#include "takepic.h"
|
||||||
|
#include "usage.h"
|
||||||
|
#ifdef USE_BTA
|
||||||
|
#include "bta_print.h"
|
||||||
|
#endif
|
||||||
|
#include <locale.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#ifdef USEPNG
|
||||||
|
int writepng(char *filename, int width, int height, void *data);
|
||||||
|
#endif /* USEPNG */
|
||||||
|
|
||||||
|
#define BUFF_SIZ 4096
|
||||||
|
|
||||||
|
#define TMBUFSIZ 40 // ÄÌÉÎÁ ÂÕÆÅÒÁ ÄÌÑ ÓÔÒÏËÉ Ó ×ÒÅÍÅÎÅÍ
|
||||||
|
char tm_buf[TMBUFSIZ]; // ÂÕÆÅÒ ÄÌÑ ÓÔÒÏËÉ Ó ×ÒÅÍÅÎÅÍ
|
||||||
|
|
||||||
|
u_int16_t max=0, min=65535; // ÜËÓÔÒÅÍÁÌØÎÙÅ ÚÎÁÞÅÎÉÑ ÔÅËÕÝÅÇÏ ÉÚÏÂÒÁÖÅÎÉÑ
|
||||||
|
double avr, std; // ÓÒÅÄÎÅÅ ÚÎÁÞÅÎÉÅ É ÓÒÅÄÎÅË×ÁÄÒÁÔÉÞÅÓËÏÅ ÏÔËÌÏÎÅÎÉÅ ÔÅËÕÝÅÇÏ ÉÚÏÂÒ.
|
||||||
|
char *camera = NULL, viewfield[80];
|
||||||
|
double pixX, pixY; // ÒÁÚÍÅÒ ÐÉËÓÅÌÑ
|
||||||
|
|
||||||
|
int numcams = 0;
|
||||||
|
|
||||||
|
void print_stat(u_int16_t *img, long size, FILE* f);
|
||||||
|
|
||||||
|
int itime(){ // ÕÓÌ. ×ÒÅÍÑ × ÓÅËÕÎÄÁÈ
|
||||||
|
struct timeval ct;
|
||||||
|
gettimeofday(&ct, NULL);
|
||||||
|
return (ct.tv_sec);
|
||||||
|
}
|
||||||
|
int time0;
|
||||||
|
int ltime(){ // ×ÒÅÍÑ, ÐÒÏÛÅÄÛÅÅ Ó ÍÏÍÅÎÔÁ ÚÁÐÕÓËÁ ÐÒÏÇÒÁÍÍÙ
|
||||||
|
return(itime()-time0);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t curtime(char *s_time){ // ÓÔÒÏËÁ - ÔÅËÕÝÅÅ ×ÒÅÍÑ/ÄÁÔÁ
|
||||||
|
time_t tm = time(NULL);
|
||||||
|
return strftime(s_time, TMBUFSIZ, "%d/%m/%Y,%H:%M:%S", localtime(&tm));
|
||||||
|
}
|
||||||
|
|
||||||
|
double t_ext, t_int; // ×ÎÅÛÎÑÑ Ô., Ô. ËÁÍÅÒÙ (+ ÎÁ ËÏÎÅà ÜËÓÐÏÚÉÃÉÉ)
|
||||||
|
time_t expStartsAt; // ×ÒÅÍÑ ÎÁÞÁÌÁ ÜËÓÐÏÚÉÃÉÉ (time_t)
|
||||||
|
|
||||||
|
int check_filename(char *buff, char *outfile, char *ext){
|
||||||
|
struct stat filestat;
|
||||||
|
int num;
|
||||||
|
for(num = 1; num < 10000; num++){
|
||||||
|
if(snprintf(buff, BUFF_SIZ, "%s_%04d.%s", outfile, num, ext) < 1)
|
||||||
|
return 0;
|
||||||
|
if(stat(buff, &filestat)) // ÆÁÊÌÁ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv){
|
||||||
|
int i; // ÄÌÑ ÃÉËÌÏ×
|
||||||
|
FILE *f_tlog = NULL;// ÆÁÊÌ, × ËÏÔÏÒÙÊ ÂÕÄÅÔ ÚÁÐÉÓÙ×ÁÔØÓÑ ÖÕÒÎÁÌ ÔÅÍÐÅÒÁÔÕÒ
|
||||||
|
FILE *f_statlog = NULL; // ÆÁÊÌ ÄÌÑ ÓÔÁÔÉÓÔÉËÉ × ÒÅÖÉÍÅ "ÔÏÌØËÏ ÓÔÁÔÉÓÔÉËÁ"
|
||||||
|
char libver[LIBVERSIZ]; // ÂÕÆÅÒ ÄÌÑ ×ÅÒÓÉÉ ÂÉÂÌÉÏÔÅËÉ fli
|
||||||
|
cam_t *cam = NULL; // ÓÐÉÓÏË ËÁÍÅÒ
|
||||||
|
setlocale(LC_ALL, getenv("LC_ALL"));
|
||||||
|
setlocale(LC_NUMERIC, "C");
|
||||||
|
bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
|
//bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
|
||||||
|
textdomain(GETTEXT_PACKAGE);
|
||||||
|
parse_args(argc, argv);
|
||||||
|
//TRYFUNC(FLISetDebugLevel, NULL /* "NO HOST" */, FLIDEBUG_ALL);
|
||||||
|
TRYFUNC(FLISetDebugLevel, NULL, FLIDEBUG_NONE);
|
||||||
|
TRYFUNC(FLIGetLibVersion, libver, LIBVERSIZ);
|
||||||
|
// ÷ÅÒÓÉÑ ÂÉÂÌÉÏÔÅËÉ '%s'
|
||||||
|
info(_("Library version '%s'"), libver);
|
||||||
|
findcams(FLIDOMAIN_USB, &cam);
|
||||||
|
if(save_Tlog){
|
||||||
|
f_tlog = fopen("temp_log", "a");
|
||||||
|
// îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ ÖÕÒÎÁÌÁ ÔÅÍÐÅÒÁÔÕÒ
|
||||||
|
if(!f_tlog) err(1, _("Can't open temperature log file"));
|
||||||
|
fprintf(f_tlog, "\n\n\n");
|
||||||
|
}
|
||||||
|
if(stat_logging){
|
||||||
|
struct stat s;
|
||||||
|
char print_hdr = 1;
|
||||||
|
if(stat("stat_log", &s) == 0) print_hdr = 0;
|
||||||
|
f_statlog = fopen("stat_log", "a");
|
||||||
|
// îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÆÁÊÌ ÖÕÒÎÁÌÁ ÓÔÁÔÉÓÔÉËÉ
|
||||||
|
if(!f_statlog) err(1, _("Can't open statistics log file"));
|
||||||
|
if(print_hdr)
|
||||||
|
fprintf(f_statlog, "Time\t\t\tUnix time\tTexp\tTint\tText\tImax\tImin\tIavr\tIstd\tNover\tN>3std\tIavr3\t\tIstd3\n");
|
||||||
|
}
|
||||||
|
i = 0;
|
||||||
|
for (i = 0; i < numcams; i++){
|
||||||
|
long x0,x1, y0,y1, row, img_rows, row_width, ltmp, img_size;
|
||||||
|
flidev_t dev;
|
||||||
|
char buff[BUFF_SIZ];
|
||||||
|
u_int16_t *img;
|
||||||
|
int j;
|
||||||
|
// ëÁÍÅÒÁ '%s' ÉÚ ÄÏÍÅÎÁ %s
|
||||||
|
info(_("Camera '%s', domain %s"), cam[i].name, cam[i].dname);
|
||||||
|
TRYFUNC(FLIOpen, &dev, cam[i].name, FLIDEVICE_CAMERA | cam[i].domain);
|
||||||
|
if(r) continue;
|
||||||
|
TRYFUNC(FLIGetModel, dev, buff, BUFF_SIZ);
|
||||||
|
// íÏÄÅÌØ:\t\t%s
|
||||||
|
info(_("Model:\t\t%s"), buff);
|
||||||
|
camera = strdup(buff);
|
||||||
|
TRYFUNC(FLIGetHWRevision, dev, <mp);
|
||||||
|
// áÐÐ. ×ÅÒÓÉÑ: %ld
|
||||||
|
info(_("HW revision: %ld"), ltmp);
|
||||||
|
TRYFUNC(FLIGetFWRevision, dev, <mp);
|
||||||
|
// ðÒÏÇÒ. ×ÅÒÓÉÑ: %ld
|
||||||
|
info(_("SW revision: %ld"), ltmp);
|
||||||
|
TRYFUNC(FLIGetPixelSize, dev, &pixX, &pixY);
|
||||||
|
// òÁÚÍÅÒ ÐÉËÓÅÌÑ: %g x %g
|
||||||
|
info(_("Pixel size: %g x %g"), pixX, pixY);
|
||||||
|
TRYFUNC(FLIGetVisibleArea, dev, &x0, &y0, &x1, &y1);
|
||||||
|
snprintf(viewfield, 79, "(%ld, %ld)(%ld, %ld)", x0, y0, x1, y1);
|
||||||
|
// ÷ÉÄÉÍÏÅ ÐÏÌÅ: %s
|
||||||
|
info(_("Field of view: %s"), viewfield);
|
||||||
|
if(X1 > x1) X1 = x1;
|
||||||
|
if(Y1 > y1) Y1 = y1;
|
||||||
|
TRYFUNC(FLIGetArrayArea, dev, &x0, &y0, &x1, &y1);
|
||||||
|
// ðÏÌÅ ÉÚÏÂÒÁÖÅÎÉÑ: (%ld, %ld)(%ld, %ld)
|
||||||
|
info(_("Array field: (%ld, %ld)(%ld, %ld)"), x0, y0, x1, y1);
|
||||||
|
TRYFUNC(FLISetHBin, dev, hbin);
|
||||||
|
TRYFUNC(FLISetVBin, dev, vbin);
|
||||||
|
if(X0 == -1) X0 = x0; // ÚÁÄÁÅÍ ÚÎÁÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ
|
||||||
|
if(Y0 == -1) Y0 = y0;
|
||||||
|
if(X1 == -1) X1 = x1;
|
||||||
|
if(Y1 == -1) Y1 = y1;
|
||||||
|
row_width = (X1 - X0) / hbin;
|
||||||
|
img_rows = (Y1 - Y0) / vbin;
|
||||||
|
//TRYFUNC(FLISetImageArea, dev, ltmp, tmp2, tmp3, tmp4);
|
||||||
|
TRYFUNC(FLISetImageArea, dev, X0, Y0,
|
||||||
|
X0 + (X1 - X0) / hbin, Y0 + (Y1 - Y0) / vbin);
|
||||||
|
TRYFUNC(FLISetNFlushes, dev, flushes);
|
||||||
|
if(set_T) TRYFUNC(FLISetTemperature, dev, temperature);
|
||||||
|
TRYFUNC(FLIGetTemperature, dev, &t_int);
|
||||||
|
// ôÅÍÐÅÒÁÔÕÒÁ (×ÎÕÔÒ.): %f
|
||||||
|
info(_("Inner temperature: %f"), t_int);
|
||||||
|
TRYFUNC(FLIReadTemperature, dev, FLI_TEMPERATURE_EXTERNAL, &t_ext);
|
||||||
|
// ôÅÍÐÅÒÁÔÕÒÁ (×ÎÅÛÎ.): %f
|
||||||
|
info(_("Outern temperature: %f"), t_ext);
|
||||||
|
if(only_T) continue;
|
||||||
|
TRYFUNC(FLISetExposureTime, dev, exptime);
|
||||||
|
TRYFUNC(FLISetFrameType, dev, frametype);
|
||||||
|
//TRYFUNC(FLISetBitDepth, dev, FLI_MODE_16BIT);
|
||||||
|
img_size = img_rows * row_width * sizeof(u_int16_t);
|
||||||
|
if((img = malloc(img_size)) == NULL) err(1, "malloc() failed");
|
||||||
|
for (j = 0; j < pics; j ++){
|
||||||
|
TRYFUNC(FLIGetTemperature, dev, &temperature); // ÔÅÍÐÅÒÁÔÕÒÁ ÄÏ ÎÁÞÁÌÁ ÜËÓÐÏÚÉÃÉÉ
|
||||||
|
printf("\n\n");
|
||||||
|
// úÁÈ×ÁÔ ËÁÄÒÁ %d\n
|
||||||
|
printf(_("Capture frame %d\n"), j);
|
||||||
|
TRYFUNC(FLIExposeFrame, dev);
|
||||||
|
expStartsAt = time(NULL); // ×ÒÅÍÑ ÎÁÞÁÌÁ ÜËÓÐÏÚÉÃÉÉ
|
||||||
|
if(save_Tlog) if(curtime(tm_buf))
|
||||||
|
// îÁÞÉÎÁÀ ÜËÓÐÏÚÉÃÉÀ %dÍÓ, ×ÒÅÍÑ: %s, ÆÁÊÌ: %s.%d.%d\n
|
||||||
|
fprintf(f_tlog, _("Begin exposition %dms, exptime: %s, filename: %s.%d.%d\n"),
|
||||||
|
exptime, tm_buf, outfile, i, j);
|
||||||
|
do{
|
||||||
|
TRYFUNC(FLIGetExposureStatus, dev, <mp);
|
||||||
|
if(r) break;
|
||||||
|
// %.3f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ\n
|
||||||
|
printf(_("%.3f seconds till exposition ends\n"), ((float)ltmp) / 1000.);
|
||||||
|
TRYFUNC(FLIGetTemperature, dev, &t_int);
|
||||||
|
TRYFUNC(FLIReadTemperature, dev, FLI_TEMPERATURE_EXTERNAL, &t_ext);
|
||||||
|
if(curtime(tm_buf)){
|
||||||
|
// ÄÁÔÁ/×ÒÅÍÑ
|
||||||
|
printf("%s: %s\tText=%.2f\tTint=%.2f\n", _("date/time"), tm_buf, t_ext, t_int);
|
||||||
|
if(save_Tlog) fprintf(f_tlog, "%s\t\t%.5f\t\t%.5f\n", tm_buf, t_ext, t_int);
|
||||||
|
}
|
||||||
|
else info("curtime() error");
|
||||||
|
if(ltmp > 10000) sleep(10);
|
||||||
|
else usleep(ltmp * 1000);
|
||||||
|
}while(ltmp);
|
||||||
|
// óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ:
|
||||||
|
printf(_("Read image: "));
|
||||||
|
int portion = 0;
|
||||||
|
for (row = 0; row < img_rows; row++){
|
||||||
|
TRYFUNC(FLIGrabRow, dev, &img[row * row_width], row_width);
|
||||||
|
if(r) break;
|
||||||
|
int progress = (int)(((float)row / (float)img_rows) * 100.);
|
||||||
|
if(progress/5 > portion){
|
||||||
|
if((++portion)%2) printf("..");
|
||||||
|
else printf("%d%%", portion*5);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("100%%\n");
|
||||||
|
curtime(tm_buf);
|
||||||
|
if(f_statlog)
|
||||||
|
fprintf(f_statlog, "%s\t%ld\t%g\t%.2f\t%.2f\t", tm_buf, time(NULL), exptime/1000., t_int, t_ext);
|
||||||
|
print_stat(img, row_width * img_rows, f_statlog);
|
||||||
|
inline void WRITEIMG(int (*writefn)(char*,int,int,void*), char *ext){
|
||||||
|
if(!check_filename(buff, outfile, ext))
|
||||||
|
// îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ
|
||||||
|
err(1, _("Can't save file"));
|
||||||
|
else{
|
||||||
|
TRYFUNC(writefn, buff, row_width, img_rows, img);
|
||||||
|
// æÁÊÌ ÚÁÐÉÓÁÎ × '%s'
|
||||||
|
if (r == 0) info(_("File saved as '%s'"), buff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(save_image){
|
||||||
|
#ifdef USERAW
|
||||||
|
WRITEIMG(writeraw, "raw");
|
||||||
|
#endif // USERAW
|
||||||
|
WRITEIMG(writefits, "fit");
|
||||||
|
#ifdef USEPNG
|
||||||
|
WRITEIMG(writepng, "png");
|
||||||
|
#endif /* USEPNG */
|
||||||
|
}
|
||||||
|
if(pause_len){
|
||||||
|
int delta;
|
||||||
|
time0 = itime();
|
||||||
|
while((delta = pause_len - ltime()) > 0){
|
||||||
|
// %d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n
|
||||||
|
printf(_("%d seconds till pause ends\n"), delta);
|
||||||
|
TRYFUNC(FLIGetTemperature, dev, &t_int);
|
||||||
|
TRYFUNC(FLIReadTemperature, dev, FLI_TEMPERATURE_EXTERNAL, &t_ext);
|
||||||
|
if(curtime(tm_buf)){
|
||||||
|
// ÄÁÔÁ/×ÒÅÍÑ
|
||||||
|
printf("%s: %s\tText=%.2f\tTint=%.2f\n", _("date/time"), tm_buf, t_ext, t_int);
|
||||||
|
if(save_Tlog) fprintf(f_tlog, "%s\t\t%.5f\t\t%.5f\n", tm_buf, t_ext, t_int);
|
||||||
|
}
|
||||||
|
else info("curtime() error");
|
||||||
|
if(delta > 10) sleep(10);
|
||||||
|
else sleep(delta);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(camera);
|
||||||
|
free(img);
|
||||||
|
TRYFUNC(FLIClose, dev);
|
||||||
|
}
|
||||||
|
for (i = 0; i < numcams; i++)
|
||||||
|
free(cam[i].name);
|
||||||
|
free(cam);
|
||||||
|
if(f_tlog) fclose(f_tlog);
|
||||||
|
if(f_statlog) fclose(f_statlog);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void findcams(flidomain_t domain, cam_t **cam){
|
||||||
|
long r;
|
||||||
|
char **tmplist;
|
||||||
|
TRYFUNC(FLIList, domain | FLIDEVICE_CAMERA, &tmplist);
|
||||||
|
if (tmplist != NULL && tmplist[0] != NULL){
|
||||||
|
int i, cams = 0;
|
||||||
|
for (i = 0; tmplist[i] != NULL; i++) cams++;
|
||||||
|
if ((*cam = realloc(*cam, (numcams + cams) * sizeof(cam_t))) == NULL)
|
||||||
|
err(1, "realloc() failed");
|
||||||
|
for (i = 0; tmplist[i] != NULL; i++) {
|
||||||
|
int j;
|
||||||
|
cam_t *tmpcam = *cam + i;
|
||||||
|
for (j = 0; tmplist[i][j] != '\0'; j++)
|
||||||
|
if (tmplist[i][j] == ';'){
|
||||||
|
tmplist[i][j] = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tmpcam->domain = domain;
|
||||||
|
switch (domain){
|
||||||
|
case FLIDOMAIN_PARALLEL_PORT:
|
||||||
|
tmpcam->dname = "parallel port";
|
||||||
|
break;
|
||||||
|
case FLIDOMAIN_USB:
|
||||||
|
tmpcam->dname = "USB";
|
||||||
|
break;
|
||||||
|
case FLIDOMAIN_SERIAL:
|
||||||
|
tmpcam->dname = "serial";
|
||||||
|
break;
|
||||||
|
case FLIDOMAIN_INET:
|
||||||
|
tmpcam->dname = "inet";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
tmpcam->dname = "Unknown domain";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tmpcam->name = strdup(tmplist[i]);
|
||||||
|
}
|
||||||
|
numcams += cams;
|
||||||
|
}
|
||||||
|
// ëÁÍÅÒÙ ÎÅ ÎÁÊÄÅÎÙ!\n
|
||||||
|
else info(_("No cameras found!\n"));
|
||||||
|
TRYFUNC(FLIFreeList, tmplist);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USERAW
|
||||||
|
int writeraw(char *filename, int width, int height, void *data){
|
||||||
|
int fd, size, err;
|
||||||
|
if ((fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC,
|
||||||
|
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH )) == -1){
|
||||||
|
warn("open(%s) failed", filename);
|
||||||
|
return -errno;
|
||||||
|
}
|
||||||
|
size = width * height * sizeof(u_int16_t);
|
||||||
|
if ((err = write(fd, data, size)) != size){
|
||||||
|
warn("write() failed");
|
||||||
|
err = -errno;
|
||||||
|
}
|
||||||
|
else err = 0;
|
||||||
|
close(fd);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
#endif // USERAW
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ÷ ÛÁÐËÅ ÄÏÌÖÎÙ ÂÙÔØ:
|
||||||
|
* RATE / Readout rate (KPix/sec)
|
||||||
|
* GAIN / gain, e/ADU
|
||||||
|
* SEEING / Seeing ('')
|
||||||
|
* IMSCALE / Image scale (''/pix x ''/pix)
|
||||||
|
* CLOUDS / Clouds (%)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
int writefits(char *filename, int width, int height, void *data){
|
||||||
|
long naxes[2] = {width, height}, startTime;
|
||||||
|
double tmp = 0.0;
|
||||||
|
struct tm *tm_starttime;
|
||||||
|
char buf[80];
|
||||||
|
time_t savetime = time(NULL);
|
||||||
|
fitsfile *fp;
|
||||||
|
TRYFITS(fits_create_file, &fp, filename);
|
||||||
|
TRYFITS(fits_create_img, fp, USHORT_IMG, 2, naxes);
|
||||||
|
// FILE / Input file original name
|
||||||
|
WRITEKEY(fp, TSTRING, "FILE", filename, "Input file original name");
|
||||||
|
// ORIGIN / organization responsible for the data
|
||||||
|
WRITEKEY(fp, TSTRING, "ORIGIN", "SAO RAS", "organization responsible for the data");
|
||||||
|
// OBSERVAT / Observatory name
|
||||||
|
WRITEKEY(fp, TSTRING, "OBSERVAT", "Special Astrophysical Observatory, Russia", "Observatory name");
|
||||||
|
// DETECTOR / detector
|
||||||
|
if(camera){
|
||||||
|
WRITEKEY(fp, TSTRING, "DETECTOR", camera, "Detector model");
|
||||||
|
}
|
||||||
|
// INSTRUME / Instrument
|
||||||
|
if(instrument){
|
||||||
|
WRITEKEY(fp, TSTRING, "INSTRUME", instrument, "Instrument");
|
||||||
|
}else
|
||||||
|
WRITEKEY(fp, TSTRING, "INSTRUME", "direct imaging", "Instrument");
|
||||||
|
// BZERO / zero point in scaling equation
|
||||||
|
//WRITEKEY(fp, TDOUBLE, "BZERO", &tmp, "zero point in scaling equation");
|
||||||
|
// BSCALE / linear factor in scaling equation
|
||||||
|
//tmp = 1.0; WRITEKEY(fp, TDOUBLE, "BSCALE", &tmp, "linear factor in scaling equation");
|
||||||
|
snprintf(buf, 79, "%.g x %.g", pixX, pixY);
|
||||||
|
// PXSIZE / pixel size
|
||||||
|
WRITEKEY(fp, TSTRING, "PXSIZE", buf, "Pixel size in m");
|
||||||
|
WRITEKEY(fp, TSTRING, "VIEW_FIELD", viewfield, "Camera field of view");
|
||||||
|
// CRVAL1, CRVAL2 / Offset in X, Y
|
||||||
|
if(X0) WRITEKEY(fp, TINT, "CRVAL1", &X0, "Offset in X");
|
||||||
|
if(Y0) WRITEKEY(fp, TINT, "CRVAL2", &Y0, "Offset in Y");
|
||||||
|
if(exptime == 0) sprintf(buf, "bias");
|
||||||
|
else if(frametype == FLI_FRAME_TYPE_DARK) sprintf(buf, "dark");
|
||||||
|
else if(objtype) strncpy(buf, objtype, 79);
|
||||||
|
else sprintf(buf, "object");
|
||||||
|
// IMAGETYP / object, flat, dark, bias, scan, eta, neon, push
|
||||||
|
WRITEKEY(fp, TSTRING, "IMAGETYP", buf, "Image type");
|
||||||
|
// DATAMAX, DATAMIN / Max,min pixel value
|
||||||
|
WRITEKEY(fp, TUSHORT, "DATAMAX", &max, "Max pixel value");
|
||||||
|
WRITEKEY(fp, TUSHORT, "DATAMIN", &min, "Min pixel value");
|
||||||
|
WRITEKEY(fp, TDOUBLE, "DATAAVR", &avr, "Average pixel value");
|
||||||
|
WRITEKEY(fp, TDOUBLE, "DATASTD", &std, "Standart deviation of pixel value");
|
||||||
|
WRITEKEY(fp, TDOUBLE, "TEMP0", &temperature, "Camera temperature at exp. start (degr C)");
|
||||||
|
WRITEKEY(fp, TDOUBLE, "TEMP1", &t_int, "Camera temperature at exp. end (degr C)");
|
||||||
|
WRITEKEY(fp, TDOUBLE, "TEMPBODY", &t_ext, "Camera body temperature at exp. end (degr C)");
|
||||||
|
tmp = (temperature + t_int) / 2. + 273.15;
|
||||||
|
// CAMTEMP / Camera temperature (K)
|
||||||
|
WRITEKEY(fp, TDOUBLE, "CAMTEMP", &tmp, "Camera temperature (K)");
|
||||||
|
tmp = (double)exptime / 1000.;
|
||||||
|
// EXPTIME / actual exposition time (sec)
|
||||||
|
WRITEKEY(fp, TDOUBLE, "EXPTIME", &tmp, "actual exposition time (sec)");
|
||||||
|
// DATE / Creation date (YYYY-MM-DDThh:mm:ss, UTC)
|
||||||
|
strftime(buf, 79, "%Y-%m-%dT%H:%M:%S", gmtime(&savetime));
|
||||||
|
WRITEKEY(fp, TSTRING, "DATE", buf, "Creation date (YYYY-MM-DDThh:mm:ss, UTC)");
|
||||||
|
startTime = (long)expStartsAt;
|
||||||
|
tm_starttime = localtime(&expStartsAt);
|
||||||
|
strftime(buf, 79, "exposition starts at %d/%m/%Y, %H:%M:%S (local)", tm_starttime);
|
||||||
|
WRITEKEY(fp, TLONG, "UNIXTIME", &startTime, buf);
|
||||||
|
strftime(buf, 79, "%Y/%m/%d", tm_starttime);
|
||||||
|
// DATE-OBS / DATE (YYYY/MM/DD) OF OBS.
|
||||||
|
WRITEKEY(fp, TSTRING, "DATE-OBS", buf, "DATE OF OBS. (YYYY/MM/DD, local)");
|
||||||
|
strftime(buf, 79, "%H:%M:%S", tm_starttime);
|
||||||
|
// START / Measurement start time (local) (hh:mm:ss)
|
||||||
|
WRITEKEY(fp, TSTRING, "START", buf, "Measurement start time (hh:mm:ss, local)");
|
||||||
|
// OBJECT / Object name
|
||||||
|
if(objname){
|
||||||
|
WRITEKEY(fp, TSTRING, "OBJECT", objname, "Object name");
|
||||||
|
}
|
||||||
|
// BINNING / Binning
|
||||||
|
if(hbin != 1 || vbin != 1){
|
||||||
|
snprintf(buf, 79, "%d x %d", hbin, vbin);
|
||||||
|
WRITEKEY(fp, TSTRING, "BINNING", buf, "Binning (hbin x vbin)");
|
||||||
|
}
|
||||||
|
// OBSERVER / Observers
|
||||||
|
if(observers){
|
||||||
|
WRITEKEY(fp, TSTRING, "OBSERVER", observers, "Observers");
|
||||||
|
}
|
||||||
|
// PROG-ID / Observation program identifier
|
||||||
|
if(prog_id){
|
||||||
|
WRITEKEY(fp, TSTRING, "PROG-ID", prog_id, "Observation program identifier");
|
||||||
|
}
|
||||||
|
// AUTHOR / Author of the program
|
||||||
|
if(author){
|
||||||
|
WRITEKEY(fp, TSTRING, "AUTHOR", author, "Author of the program");
|
||||||
|
}
|
||||||
|
#ifdef USE_BTA
|
||||||
|
write_bta_data(fp);
|
||||||
|
#endif
|
||||||
|
TRYFITS(fits_write_img, fp, TUSHORT, 1, width * height, data);
|
||||||
|
TRYFITS(fits_close_file, fp);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USEPNG
|
||||||
|
int writepng(char *filename, int width, int height, void *data){
|
||||||
|
int err;
|
||||||
|
FILE *fp = NULL;
|
||||||
|
png_structp pngptr = NULL;
|
||||||
|
png_infop infoptr = NULL;
|
||||||
|
void *row;
|
||||||
|
if ((fp = fopen(filename, "wb")) == NULL){
|
||||||
|
err = -errno;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
if ((pngptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
|
||||||
|
NULL, NULL, NULL)) == NULL){
|
||||||
|
err = -ENOMEM;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
if ((infoptr = png_create_info_struct(pngptr)) == NULL){
|
||||||
|
err = -ENOMEM;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
png_init_io(pngptr, fp);
|
||||||
|
png_set_compression_level(pngptr, Z_BEST_COMPRESSION);
|
||||||
|
png_set_IHDR(pngptr, infoptr, width, height, 16, PNG_COLOR_TYPE_GRAY,
|
||||||
|
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT,
|
||||||
|
PNG_FILTER_TYPE_DEFAULT);
|
||||||
|
png_write_info(pngptr, infoptr);
|
||||||
|
png_set_swap(pngptr);
|
||||||
|
for(row = data; height > 0; row += width * sizeof(u_int16_t), height--)
|
||||||
|
png_write_row(pngptr, row);
|
||||||
|
png_write_end(pngptr, infoptr);
|
||||||
|
err = 0;
|
||||||
|
done:
|
||||||
|
if(fp) fclose(fp);
|
||||||
|
if(pngptr) png_destroy_write_struct(&pngptr, &infoptr);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
#endif /* USEPNG */
|
||||||
|
|
||||||
|
void print_stat(u_int16_t *img, long size, FILE *f){
|
||||||
|
long i, Noverld = 0L, N = 0L;
|
||||||
|
double pv, sum=0., sum2=0., sz = (double)size, tres;
|
||||||
|
u_int16_t *ptr = img, val;
|
||||||
|
max = 0; min = 65535;
|
||||||
|
for(i = 0; i < size; i++, ptr++){
|
||||||
|
val = *ptr;
|
||||||
|
pv = (double) val;
|
||||||
|
sum += pv;
|
||||||
|
sum2 += (pv * pv);
|
||||||
|
if(max < val) max = val;
|
||||||
|
if(min > val) min = val;
|
||||||
|
if(val >= 65530) Noverld++;
|
||||||
|
}
|
||||||
|
// óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ\n
|
||||||
|
printf(_("Image stat:\n"));
|
||||||
|
avr = sum/sz;
|
||||||
|
printf("avr = %.1f, std = %.1f, Noverload = %ld\n", avr,
|
||||||
|
std = sqrt(fabs(sum2/sz - avr*avr)), Noverld);
|
||||||
|
printf("max = %u, min = %u, size = %ld\n", max, min, size);
|
||||||
|
// ÐÏÌÎÁÑ ÓÔÁÔÉÓÔÉËÁ, ÅÓÌÉ Õ ÎÁÓ ÒÅÖÉÍ ÓÏÈÒÁÎÅÎÉÑ ÓÔÁÔÉÓÔÉËÉ:
|
||||||
|
if(!f) return;
|
||||||
|
// IÓÒÅÄÎÅÅ, IÓÉÇÍÁ, NÐÅÒÅËÏÐ
|
||||||
|
fprintf(f, "%d\t%d\t%.3f\t%.3f\t%ld\t", max, min, avr, std, Noverld);
|
||||||
|
Noverld = 0L;
|
||||||
|
ptr = img; sum = 0.; sum2 = 0.;
|
||||||
|
tres = avr + 3. * std; // ÐÏÒÏÇ ÐÏ ÍÁËÓÉÍÕÍÕ - 3 ÓÉÇÍÙ
|
||||||
|
for(i = 0; i < size; i++, ptr++){
|
||||||
|
val = *ptr;
|
||||||
|
pv = (double) val;
|
||||||
|
if(pv > tres){
|
||||||
|
Noverld++; // ÔÅÐÅÒØ ÜÔÏ - ËÏÌ-×Ï ÓÌÉÛËÏÍ ÑÒËÉÈ ÐÉËÓÅÌÅÊ
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
sum += pv;
|
||||||
|
sum2 += (pv * pv);
|
||||||
|
N++;
|
||||||
|
}
|
||||||
|
if(N == 0L){
|
||||||
|
fprintf(f, "err\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
sz = (double)N;
|
||||||
|
avr = sum/sz; std = sqrt(fabs(sum2/sz - avr*avr));
|
||||||
|
// NÂÏÌØÛÅ3ÓÉÇÍ, IÓÒÅÄÎÅÅ × ÐÒÅÄÅÌÁÈ 3ÓÉÇÍ, IÓÉÇÍÁ × ÐÒÅÄÅÌÁÈ 3ÓÉÇÍ
|
||||||
|
fprintf(f, "%ld\t%.3f\t%.3f\n", Noverld, avr, std);
|
||||||
|
fflush(f);
|
||||||
|
printf("Novr3 = %ld\n", Noverld);
|
||||||
|
}
|
||||||
95
takepic.h
Normal file
95
takepic.h
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
#ifndef __TAKEPIC_H__
|
||||||
|
#define __TAKEPIC_H__
|
||||||
|
#define _XOPEN_SOURCE 501
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <err.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <fitsio.h>
|
||||||
|
#include <libintl.h>
|
||||||
|
|
||||||
|
#ifdef USEPNG
|
||||||
|
#include <png.h>
|
||||||
|
#endif /* USEPNG */
|
||||||
|
|
||||||
|
#include "libfli.h"
|
||||||
|
|
||||||
|
#ifndef GETTEXT_PACKAGE
|
||||||
|
#define GETTEXT_PACKAGE "takepic"
|
||||||
|
#endif
|
||||||
|
#ifndef LOCALEDIR
|
||||||
|
#define LOCALEDIR "./locale"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _(String) gettext(String)
|
||||||
|
#define gettext_noop(String) String
|
||||||
|
#define N_(String) gettext_noop(String)
|
||||||
|
|
||||||
|
// ÒÅÖÉÍ ÏÔÌÁÄËÉ, -DEBUG
|
||||||
|
#ifdef EBUG
|
||||||
|
#define RED "\033[1;32;41m"
|
||||||
|
#define GREEN "\033[5;30;42m"
|
||||||
|
#define OLDCOLOR "\033[0;0;0m"
|
||||||
|
#define FNAME() fprintf(stderr, "\n%s (%s, line %d)\n", __func__, __FILE__, __LINE__)
|
||||||
|
#define DBG(...) do{fprintf(stderr, "%s (%s, line %d): ", __func__, __FILE__, __LINE__); \
|
||||||
|
fprintf(stderr, __VA_ARGS__); \
|
||||||
|
fprintf(stderr, "\n");} while(0)
|
||||||
|
#else
|
||||||
|
#define FNAME() do{}while(0)
|
||||||
|
#define DBG(...) do{}while(0)
|
||||||
|
#endif //EBUG
|
||||||
|
|
||||||
|
extern const char *__progname;
|
||||||
|
#define info(format, args...) do{ \
|
||||||
|
printf("%s: ", __progname); \
|
||||||
|
printf(format, ## args); \
|
||||||
|
printf("\n");}while(0)
|
||||||
|
|
||||||
|
#define warnc(c, format, args...) \
|
||||||
|
warnx(format ": %s", ## args, strerror(c))
|
||||||
|
|
||||||
|
long r;
|
||||||
|
#define TRYFUNC(f, ...) \
|
||||||
|
do{ if((r = f(__VA_ARGS__))) \
|
||||||
|
warnc(-r, #f "() failed"); \
|
||||||
|
}while(0)
|
||||||
|
|
||||||
|
#define LIBVERSIZ 1024
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
flidomain_t domain;
|
||||||
|
char *dname;
|
||||||
|
char *name;
|
||||||
|
}cam_t;
|
||||||
|
|
||||||
|
void findcams(flidomain_t domain, cam_t **cam);
|
||||||
|
#ifdef USERAW
|
||||||
|
int writeraw(char *filename, int width, int height, void *data);
|
||||||
|
#endif // USERAW
|
||||||
|
|
||||||
|
#define TRYFITS(f, ...) \
|
||||||
|
do{ int status = 0; \
|
||||||
|
f(__VA_ARGS__, &status); \
|
||||||
|
if (status){ \
|
||||||
|
fits_report_error(stderr, status); \
|
||||||
|
return -1;} \
|
||||||
|
}while(0)
|
||||||
|
#define WRITEKEY(...) \
|
||||||
|
do{ int status = 0; \
|
||||||
|
fits_write_key(__VA_ARGS__, &status); \
|
||||||
|
if(status) fits_report_error(stderr, status);\
|
||||||
|
}while(0)
|
||||||
|
int writefits(char *filename, int width, int height, void *data);
|
||||||
|
|
||||||
|
|
||||||
|
#endif // __TAKEPIC_H__
|
||||||
331
usage.c
Normal file
331
usage.c
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
#include "usage.h"
|
||||||
|
|
||||||
|
char
|
||||||
|
*objname = NULL // ÉÍÑ ÏÂßÅËÔÁ
|
||||||
|
,*outfile = NULL // ÐÒÅÆÉËÓ ÉÍÅÎÉ ÆÁÊÌÁ ÄÌÑ ÚÁÐÉÓÉ raw/fits
|
||||||
|
,*objtype = NULL // ÔÉÐ ËÁÄÒÁ (ÐÏ ÕÍÏÌÞÁÎÉÀ - object, ÐÒÉ -d - dark)
|
||||||
|
,*instrument = NULL // ÎÁÚ×ÁÎÉÅ ÐÒÉÂÏÒÁ (ÐÏ ÕÍÏÌÞÁÎÉÀ - "direct imaging")
|
||||||
|
,*observers = NULL // ÎÁÂÌÀÄÁÔÅÌÉ
|
||||||
|
,*prog_id = NULL // ÉÍÑ ÐÒÏÇÒÁÍÍÙ
|
||||||
|
,*author = NULL // Á×ÔÏÒ
|
||||||
|
;
|
||||||
|
int
|
||||||
|
exptime = 500 // ×ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ (× ÍÓ)
|
||||||
|
,pics = 1 // ËÏÌ-×Ï ÓÎÉÍÁÅÍÙÈ ËÁÄÒÏ×
|
||||||
|
,hbin = 1 // ÇÏÒÉÚÏÎÔÁÌØÎÙÊ ÂÉÎÎÉÎÇ
|
||||||
|
,vbin = 1 // ×ÅÒÔÉËÁÌØÎÙÊ ÂÉÎÎÉÎÇ
|
||||||
|
,X0=-1,Y0=-1 // ËÏÏÒÄÉÎÁÔÙ ×ÅÒÈÎÅÇÏ ÌÅ×ÏÇÏ ÕÇÌÁ ÓÞÉÔÙ×ÁÅÍÏÇÏ ÉÚÏÂÒÁÖÅÎÉÑ
|
||||||
|
// -1 - ×ÓÑ ÏÂÌÁÓÔØ, × Ô.Þ. "Ï×ÅÒÓËÁÎ"
|
||||||
|
,X1=-1,Y1=-1 // ËÏÏÒÄÉÎÁÔÙ ÐÒÁ×ÏÇÏ ÎÉÖÎÅÇÏ ÕÇÌÁ ÓÞÉÔÙ×ÁÅÍÏÇÏ ÉÚÏÂÒÁÖÅÎÉÑ
|
||||||
|
,flushes = 1 // ËÏÌ-×Ï ÓÂÒÏÓÏ×
|
||||||
|
,pause_len = 0 // ÐÒÏÄÏÌÖÉÔÅÌØÎÏÓÔØ ÐÁÕÚÙ (× Ó) ÍÅÖÄÕ ËÁÄÒÁÍÉ
|
||||||
|
;
|
||||||
|
double temperature = -20.; // ÔÅÍÐÅÒÁÔÕÒÁ (ËÏÔÏÒÕÀ ÚÁÄÁÔØ, ÐÏÔÏÍ - ÎÁ ÎÁÞÁÌÏ ÜËÓÐ.)
|
||||||
|
|
||||||
|
fliframe_t frametype = FLI_FRAME_TYPE_NORMAL; // ÔÉÐ ÆÒÅÊÍÁ (ÏÂÙÞÎÙÊ ÉÌÉ ÔÅÍÎÏ×ÏÊ)
|
||||||
|
|
||||||
|
bool
|
||||||
|
only_T = FALSE // ÔÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ - É ×ÙÊÔÉ
|
||||||
|
,set_T = FALSE // ÚÁÄÁÔØ ÎÕÖÎÕÀ ÔÅÍÐÅÒÁÔÕÒÕ
|
||||||
|
,save_Tlog = FALSE // ÓÏÈÒÁÎÑÔØ ÖÕÒÎÁÌ ÔÅÍÐÅÒÁÔÕÒ
|
||||||
|
,save_image = TRUE // ÓÏÈÒÁÎÑÔØ ÉÚÏÂÒÁÖÅÎÉÅ
|
||||||
|
,stat_logging = FALSE // ÐÏÌÎÏÅ ÌÏÇÇÉÒÏ×ÁÎÉÅ ÓÔÁÔÉÓÔÉËÉ
|
||||||
|
;
|
||||||
|
int myatoi(int *num, const char *str){ // "ÁËËÕÒÁÔÎÙÊ" atoi
|
||||||
|
long tmp;
|
||||||
|
char *endptr;
|
||||||
|
tmp = strtol(str, &endptr, 0);
|
||||||
|
if (*str == '\0' || *endptr != '\0' || tmp < INT_MIN || tmp > INT_MAX){
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
*num = (int)tmp;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void getrange(int *X0, int *X1, char *arg){
|
||||||
|
char *a = NULL, *pair;
|
||||||
|
pair = strdup(arg);
|
||||||
|
if((a = strchr(pair, ','))){
|
||||||
|
*a = 0;
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
if(myatoi(X0, pair) || *X0 < 0){
|
||||||
|
// "îÅ×ÅÒÎÁÑ ÎÉÖÎÑÑ ÇÒÁÎÉÃÁ: %s"
|
||||||
|
usage(_("Wrong lower border: %s"), pair);
|
||||||
|
}
|
||||||
|
if(a){
|
||||||
|
if(myatoi(X1, a) || *X1 < 0 || *X1 <= *X0){
|
||||||
|
// "îÅ×ÅÒÎÁÑ ×ÅÒÈÎÑÑ ÇÒÁÎÉÃÁ: %s"
|
||||||
|
usage(_("Wrong upper border: %s"), pair);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(pair);
|
||||||
|
}
|
||||||
|
|
||||||
|
void usage(char *fmt, ...){
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
printf("\n");
|
||||||
|
if (fmt != NULL){
|
||||||
|
vprintf(fmt, ap);
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
va_end(ap);
|
||||||
|
// "éÓÐÏÌØÚÏ×ÁÎÉÅ:\t%s [ÏÐÃÉÉ] <ÐÒÅÆÉËÓ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×>\n"
|
||||||
|
printf(_("Usage:\t%s [options] <output files prefix>\n"),
|
||||||
|
__progname);
|
||||||
|
// "\tïÐÃÉÉ:\n"
|
||||||
|
printf(_("\tOptions:\n"));
|
||||||
|
printf("\t-A,\t--author=author\t\t%s\n",
|
||||||
|
// "Á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ"
|
||||||
|
_("program author"));
|
||||||
|
printf("\t-d,\t--dark\t\t\t%s\n",
|
||||||
|
// "ÎÅ ÏÔËÒÙ×ÁÔØ ÚÁÔ×ÏÒ ÐÒÉ ÜËÓÐÏÚÉÃÉÉ (\"ÔÅÍÎÏ×ÙÅ\")"
|
||||||
|
_("not open shutter, when exposing (\"dark frames\")"));
|
||||||
|
printf("\t-f,\t--flushes=N\t\t%s\n",
|
||||||
|
// "N ÓÂÒÏÓÏ× ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ"
|
||||||
|
_("N flushes before exposing"));
|
||||||
|
printf("\t-h,\t--hbin=N\t\t%s\n",
|
||||||
|
// "ÂÉÎÎÉÎÇ N ÐÉËÓÅÌÅÊ ÐÏ ÇÏÒÉÚÏÎÔÁÌÉ"
|
||||||
|
_("horizontal binning to N pixels"));
|
||||||
|
printf("\t-I,\t--image-type=type\t%s\n",
|
||||||
|
// "ÔÉÐ ÉÚÏÂÒÁÖÅÎÉÑ"
|
||||||
|
_("image type"));
|
||||||
|
printf("\t-i,\t--instrument=instr\t%s\n",
|
||||||
|
// "ÎÁÚ×ÁÎÉÅ ÐÒÉÂÏÒÁ"
|
||||||
|
_("instrument name"));
|
||||||
|
printf("\t-L,\t--log-only\t\t%s\n",
|
||||||
|
// "ÎÅ ÓÏÈÒÁÎÑÔØ ÉÚÏÂÒÁÖÅÎÉÑ, ÌÉÛØ ×ÅÓÔÉ ÚÁÐÉÓØ ÓÔÁÔÉÓÔËÉ"
|
||||||
|
_("don't save images, only make all-stat log"));
|
||||||
|
printf("\t-l,\t--tlog\t\t\t%s\n",
|
||||||
|
// "×ÅÓÔÉ ÚÁÐÉÓØ ÒÁÂÏÞÉÈ ÔÅÍÐÅÒÁÔÕÒ × ÆÁÊÌ temp_log"
|
||||||
|
_("make temperatures logging to file temp_log"));
|
||||||
|
printf("\t-n,\t--nframes=N\t\t%s\n",
|
||||||
|
// "N ËÁÄÒÏ× × ÓÅÒÉÉ"
|
||||||
|
_("make series of N frames"));
|
||||||
|
printf("\t-O,\t--object=obj\t\t%s\n",
|
||||||
|
// "ÎÁÚ×ÁÎÉÅ ÏÂßÅËÔÁ"
|
||||||
|
_("object name"));
|
||||||
|
printf("\t-o,\t--observer=obs\t\t%s\n",
|
||||||
|
// "ÉÍÅÎÁ ÎÁÂÌÀÄÁÔÅÌÅÊ"
|
||||||
|
_("observers' names"));
|
||||||
|
printf("\t-P,\t--prog-id=prname\t%s\n",
|
||||||
|
// "ÎÁÚ×ÁÎÉÅ ÐÒÏÇÒÁÍÍÙ ÎÁÂÌÀÄÅÎÉÊ"
|
||||||
|
_("observing program name"));
|
||||||
|
printf("\t-p,\t--pause-len=ptime\t%s\n",
|
||||||
|
// "×ÙÄÅÒÖÁÔØ ptime ÓÅËÕÎÄ ÍÅÖÄÕ ÜËÓÐÏÚÉÃÉÑÍÉ"
|
||||||
|
_("make pause for ptime seconds between expositions"));
|
||||||
|
printf("\t-s,\t--only-stat\t\t%s\n",
|
||||||
|
// "ÎÅ ÓÏÈÒÁÎÑÔØ ÉÚÏÂÒÁÖÅÎÉÅ, Á ÔÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
|
||||||
|
_("not save image, just show statistics"));
|
||||||
|
printf("\t-T,\t--only-temp\t\t%s\n",
|
||||||
|
// "ÔÏÌØËÏ ÚÁÄÁÔØ/ÐÏÌÕÞÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ"
|
||||||
|
_("only set/get temperature"));
|
||||||
|
printf("\t-t,\t--set-temp=degr\t\t%s\n",
|
||||||
|
// "ÚÁÄÁÔØ ÒÁÂÏÞÕÀ ÔÅÍÐÅÒÁÔÕÒÕ degr ÇÒÁÄÕÓÏ×"
|
||||||
|
_("set work temperature to degr C"));
|
||||||
|
printf("\t-v,\t--vbin=N\t\t%s\n",
|
||||||
|
// "ÂÉÎÎÉÎÇ N ÐÉËÓÅÌÅÊ ÐÏ ×ÅÒÔÉËÁÌÉ"
|
||||||
|
_("vertical binning to N pixels"));
|
||||||
|
printf("\t-x,\t--exp=exptime\t\t%s\n",
|
||||||
|
// "×ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ exptime ÍÓ"
|
||||||
|
_("set exposure time to exptime ms"));
|
||||||
|
printf("\t-X,\t--xclip=X0[,X1]\t\t%s [X0:X1]\n",
|
||||||
|
// "×ÙÂÒÁÔØ ÄÉÁÐÁÚÏÎ ÄÌÑ ÓÞÉÔÙ×ÁÎÉÑ"
|
||||||
|
_("select clip region"));
|
||||||
|
printf("\t-Y,\t--xclip=Y0[,Y1]\t\t%s [Y0:Y1]\n",
|
||||||
|
// "×ÙÂÒÁÔØ ÄÉÁÐÁÚÏÎ ÄÌÑ ÓÞÉÔÙ×ÁÎÉÑ"
|
||||||
|
_("select clip region"));
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void parse_args(int argc, char **argv){
|
||||||
|
int i;
|
||||||
|
char short_options[] = "A:df:h:I:i:Lln:O:o:P:p:sTt:v:x:X:Y:";
|
||||||
|
struct option long_options[] = {
|
||||||
|
/* { name, has_arg, flag, val }, ÇÄÅ:
|
||||||
|
* name - ÉÍÑ "ÄÌÉÎÎÏÇÏ" ÐÁÒÁÍÅÔÒÁ
|
||||||
|
* has_arg = 0 - ÎÅÔ ÁÒÇÕÍÅÎÔÁ, 1 - ÏÂÑÚÁÔÅÌØÎÙÊ ÁÒÇÕÍÅÎÔ, 2 - ÎÅÏÂÑÚÁÔÅÌØÎÙÊ ÁÒÇÕÍÅÎÔ
|
||||||
|
* flag = NULL ÄÌÑ ×ÏÚ×ÒÁÔÁ val, ÕËÁÚÁÔÅÌØ ÎÁ ÐÅÒÅÍÅÎÎÕÀ int - ÄÌÑ ÐÒÉÓ×ÏÅÎÉÑ ÅÊ
|
||||||
|
* ÚÎÁÞÅÎÉÑ val (× ÜÔÏÍ ÓÌÕÞÁÅ ÆÕÎËÃÉÑ ×ÏÚ×ÒÁÝÁÅÔ 0)
|
||||||
|
* val - ×ÏÚ×ÒÁÝÁÅÍÏÅ ÚÎÁÞÅÎÉÅ getopt_long ÉÌÉ ÚÎÁÞÅÎÉÅ, ÐÒÉÓ×ÁÅÍÏÅ ÕËÁÚÁÔÅÌÀ flag
|
||||||
|
* !!! ÐÏÓÌÅÄÎÑÑ ÓÔÒÏËÁ - ÞÅÔÙÒÅ ÎÕÌÑ
|
||||||
|
*/
|
||||||
|
{"author", 1, 0, 'A'},
|
||||||
|
{"dark", 0, 0, 'd'},
|
||||||
|
{"flushes", 1, 0, 'f'},
|
||||||
|
{"hbin", 1, 0, 'h'},
|
||||||
|
{"image-type", 1, 0, 'I'},
|
||||||
|
{"instrument", 1, 0, 'i'},
|
||||||
|
{"log-only", 0, 0, 'L'},
|
||||||
|
{"tlog", 0, 0, 'l'},
|
||||||
|
{"nframes", 1, 0, 'n'},
|
||||||
|
{"object", 1, 0, 'O'},
|
||||||
|
{"observers", 1, 0, 'o'},
|
||||||
|
{"prog-id", 1, 0, 'P'},
|
||||||
|
{"pause-len", 1, 0, 'p'},
|
||||||
|
{"only-stat", 0, 0, 's'},
|
||||||
|
{"only-temp", 0, 0, 'T'},
|
||||||
|
{"set-temp", 1, 0, 't'},
|
||||||
|
{"vbin", 1, 0, 'v'},
|
||||||
|
{"exp", 1, 0, 'x'},
|
||||||
|
{"xclip", 1, 0, 'X'},
|
||||||
|
{"yclip", 1, 0, 'Y'},
|
||||||
|
{ 0, 0, 0, 0 }
|
||||||
|
};
|
||||||
|
/* "ÄÌÉÎÎÙÅ" É "ËÏÒÏÔËÉÅ" ÐÁÒÁÍÅÔÒÙ getopt_long ÎÅ ÄÏÌÖÎÙ ÓÏ×ÐÁÄÁÔØ
|
||||||
|
* (ÌÉÛØ ÅÓÌÉ "ÄÌÉÎÎÙÊ" ÄÏÌÖÅÎ ÚÎÁÞÉÔØ ÔÏ ÖÅ, ÞÔÏ "ËÏÒÏÔËÉÊ", ÄÌÑ ÎÅÇÏ
|
||||||
|
* ÄÏÌÖÎÏ ÂÙÔØ flag = NULL, val = ÚÎÁÞÅÎÉÅ ËÏÒÏÔËÏÇÏ
|
||||||
|
*/
|
||||||
|
while (1){
|
||||||
|
int opt;
|
||||||
|
if((opt = getopt_long(argc, argv, short_options,
|
||||||
|
long_options, NULL)) == -1) break;
|
||||||
|
switch(opt){
|
||||||
|
case 'A':
|
||||||
|
author = strdup(optarg);
|
||||||
|
// "á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ: %s"
|
||||||
|
info(_("Program author: %s"), author);
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
frametype = FLI_FRAME_TYPE_DARK;
|
||||||
|
// "óßÅÍËÁ ÔÅÍÎÏ×ÙÈ"
|
||||||
|
info(_("Dark frames"));
|
||||||
|
break;
|
||||||
|
case 'f':
|
||||||
|
if (myatoi(&flushes, optarg) || flushes < 0){
|
||||||
|
// "îÅ×ÅÒÎÏÅ ËÏÌ-×Ï ÓÂÒÏÓÏ×: %s"
|
||||||
|
usage("Wrong flushes number: %s", optarg);
|
||||||
|
}
|
||||||
|
// "ëÏÌ-×Ï ÓÂÒÏÓÏ×: %d"
|
||||||
|
info("Flushes number: %d", flushes);
|
||||||
|
break;
|
||||||
|
case 'h':
|
||||||
|
if (myatoi(&hbin, optarg) || hbin < 1 || hbin > 16){
|
||||||
|
// "îÅ×ÅÒÎÙÊ"
|
||||||
|
usage("%s hbin: %s", _("Wrong"), optarg);
|
||||||
|
}
|
||||||
|
// "çÏÒ. ÂÉÎÎÉÎÇ: %d"
|
||||||
|
info(_("Horisontal binning: %d"), hbin);
|
||||||
|
break;
|
||||||
|
case 'I':
|
||||||
|
objtype = strdup(optarg);
|
||||||
|
// "ôÉÐ ÉÚÏÂÒÁÖÅÎÉÑ - %s"
|
||||||
|
info(_("Image type - %s"), objtype);
|
||||||
|
break;
|
||||||
|
case 'i':
|
||||||
|
instrument = strdup(optarg);
|
||||||
|
// "îÁÚ×ÁÎÉÅ ÐÒÉÂÏÒÁ - %s"
|
||||||
|
info(_("Instrument name - %s"), instrument);
|
||||||
|
break;
|
||||||
|
case 'L':
|
||||||
|
stat_logging = TRUE;
|
||||||
|
save_image = FALSE;
|
||||||
|
// ðÏÌÎÏÅ ÖÕÒÎÁÌÉÒÏ×ÁÎÉÅ ÓÔÁÔÉÓÔÉËÉ ÂÅÚ ÓÏÈÒÁÎÅÎÉÑ ÉÚÏÂÒÁÖÅÎÉÊ
|
||||||
|
info(_("Full statistics logging without saving images"));
|
||||||
|
break;
|
||||||
|
case 'l':
|
||||||
|
save_Tlog = TRUE;
|
||||||
|
// "óÏÈÒÁÎÅÎÉÅ ÖÕÒÎÁÌÁ ÔÅÍÐÅÒÁÔÕÒ"
|
||||||
|
info(_("Save temperature log"));
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
if (myatoi(&pics, optarg) || pics <= 0){
|
||||||
|
// "îÅ×ÅÒÎÏÅ ËÏÌ-×Ï ËÁÄÒÏ×: %s"
|
||||||
|
usage(_("Wrong frames number in series: %s"), optarg);
|
||||||
|
}
|
||||||
|
// "óÅÒÉÑ ÉÚ %d ËÁÄÒÏ×"
|
||||||
|
info(_("Series of %d frames"), pics);
|
||||||
|
break;
|
||||||
|
case 'O':
|
||||||
|
objname = strdup(optarg);
|
||||||
|
// "éÍÑ ÏÂßÅËÔÁ - %s"
|
||||||
|
info(_("Object name - %s"), objname);
|
||||||
|
break;
|
||||||
|
case 'o':
|
||||||
|
observers = strdup(optarg);
|
||||||
|
// "îÁÂÌÀÄÁÔÅÌÉ: %s"
|
||||||
|
info(_("Observers: %s"), observers);
|
||||||
|
break;
|
||||||
|
case 'P':
|
||||||
|
prog_id = strdup(optarg);
|
||||||
|
// "îÁÚ×ÁÎÉÅ ÐÒÏÇÒÁÍÍÙ: %s"
|
||||||
|
info(_("Program name: %s"), prog_id);
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
if (myatoi(&pause_len, optarg) || pause_len < 0){
|
||||||
|
// "îÅ×ÅÒÎÁÑ ÐÁÕÚÁ: %s"
|
||||||
|
usage(_("Wrong pause length: %s"), optarg);
|
||||||
|
}
|
||||||
|
// "ðÁÕÚÁ: %dÓ"
|
||||||
|
info(_("Pause: %ds"), pause_len);
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
save_image = FALSE;
|
||||||
|
break;
|
||||||
|
case 'T':
|
||||||
|
only_T = TRUE;
|
||||||
|
save_image = FALSE;
|
||||||
|
// "ÔÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ/ÚÁÄÁÔØ ÔÅÍÐÅÒÁÔÕÒÕ"
|
||||||
|
info(_("only set/get temperature"));
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
temperature = atof(optarg);
|
||||||
|
if(temperature < -55. || temperature > 30.){
|
||||||
|
// "îÅ×ÅÒÎÏÅ ÚÎÁÞÅÎÉÅ ÔÅÍÐÅÒÁÔÕÒÙ: %s (ÄÏÌÖÎÏ ÂÙÔØ ÏÔ -55 ÄÏ 30)"
|
||||||
|
usage(_("Wrong temperature: %s (must be from -55 to 30)"), optarg);
|
||||||
|
}
|
||||||
|
set_T = TRUE;
|
||||||
|
// "õÓÔÁÎÏ×ÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ: %.3f"
|
||||||
|
info(_("Set temperature: %.3f"), temperature);
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
if (myatoi(&vbin, optarg) || vbin < 1 || vbin > 16){
|
||||||
|
// "îÅ×ÅÒÎÙÊ"
|
||||||
|
usage("%s vbin: %s", _("Wrong"), optarg);
|
||||||
|
}
|
||||||
|
// "÷ÅÒÔ. ÂÉÎÎÉÎÇ: %d"
|
||||||
|
info(_("Vertical binning: %d"), vbin);
|
||||||
|
break;
|
||||||
|
case 'x':
|
||||||
|
if (myatoi(&exptime, optarg) || exptime < 0){
|
||||||
|
// "îÅ×ÅÒÎÏÅ ×ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ: %s"
|
||||||
|
usage(_("Wrong exposure time: %s"), optarg);
|
||||||
|
}
|
||||||
|
// "÷ÒÅÍÑ ÜËÓÐÏÚÉÃÉÉ: %dÍÓ"
|
||||||
|
info(_("Exposure time: %dms"), exptime);
|
||||||
|
break;
|
||||||
|
case 'X':
|
||||||
|
getrange(&X0, &X1, optarg);
|
||||||
|
// "äÉÁÐÁÚÏÎ ÐÏ X: [%d, %d]"
|
||||||
|
info(_("X range: [%d, %d]"), X0, X1);
|
||||||
|
break;
|
||||||
|
case 'Y':
|
||||||
|
getrange(&Y0, &Y1, optarg);
|
||||||
|
// "äÉÁÐÁÚÏÎ ÐÏ Y: [%d, %d]"
|
||||||
|
info(_("Y range: [%d, %d]"), Y0, Y1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
usage(NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argc -= optind;
|
||||||
|
argv += optind;
|
||||||
|
if(argc == 0 && save_image){
|
||||||
|
// "îÅÔ ÐÒÅÆÉËÓÁ ÉÍÅÎÉ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×"
|
||||||
|
usage(_("Output file names prefix is absent"));
|
||||||
|
}
|
||||||
|
else{ if(argc != 0){
|
||||||
|
outfile = argv[0];
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
}
|
||||||
|
else outfile = strdup("nofile");
|
||||||
|
}
|
||||||
|
if(argc > 0){
|
||||||
|
// "éÇÎÏÒÉÒÕÀ ÁÒÇÕÍÅÎÔ[Ù]:\n"
|
||||||
|
printf(_("Ignore argument[s]:\n"));
|
||||||
|
}
|
||||||
|
for (i = 0; i < argc; i++)
|
||||||
|
warnx("%s ", argv[i]);
|
||||||
|
}
|
||||||
39
usage.h
Normal file
39
usage.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#ifndef __USAGE_H__
|
||||||
|
#define __USAGE_H__
|
||||||
|
|
||||||
|
#include "takepic.h"
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
extern int
|
||||||
|
exptime // время экспозиции (в мс)
|
||||||
|
,pics // кол-во снимаемых кадров
|
||||||
|
,hbin // горизонтальный биннинг
|
||||||
|
,vbin // вертикальный биннинг
|
||||||
|
,X0, X1, Y0, Y1 // координаты выбранного окна
|
||||||
|
,flushes // кол-во сбросов
|
||||||
|
,pause_len // продолжительность паузы (в с) между кадрами
|
||||||
|
;
|
||||||
|
extern double temperature; // температура (которую задать, потом - на начало эксп.)
|
||||||
|
|
||||||
|
extern fliframe_t frametype; // тип фрейма (обычный или темновой)
|
||||||
|
|
||||||
|
extern bool
|
||||||
|
only_T // только отобразить температуру - и выйти
|
||||||
|
,set_T // задать нужную температуру
|
||||||
|
,save_Tlog // сохранять журнал температур
|
||||||
|
,save_image // сохранять изображение
|
||||||
|
,stat_logging // полное логгирование статистики
|
||||||
|
;
|
||||||
|
extern char *objname // имя объекта
|
||||||
|
,*outfile // префикс имени файла для записи raw/fits
|
||||||
|
,*objtype // тип изображения
|
||||||
|
,*instrument // название прибора (по умолчанию - "direct imaging")
|
||||||
|
,*observers // наблюдатели
|
||||||
|
,*prog_id // имя программы
|
||||||
|
,*author // автор
|
||||||
|
;
|
||||||
|
void usage(char *fmt, ...);
|
||||||
|
void parse_args(int argc, char **argv);
|
||||||
|
|
||||||
|
#endif // __USAGE_H__
|
||||||
Loading…
x
Reference in New Issue
Block a user