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