rebuild code to run image viewer in standalone or client mode (not implemented yet)

This commit is contained in:
Edward Emelianov 2023-02-07 17:01:06 +03:00
parent 089370d276
commit 764aa50ccc
10 changed files with 428 additions and 339 deletions

201
ccdfunc.c
View File

@ -19,6 +19,7 @@
#include <dlfcn.h> // dlopen/close
#include <fitsio.h>
#include <math.h>
#include <signal.h> // pthread_kill
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
@ -424,11 +425,10 @@ int startFocuser(void **dlh){
return TRUE;
}
void focclose(void *dlh){
if(!dlh || !focuser) return;
void focclose(){
if(!focuser) return;
focuser->close();
focuser = NULL;
//dlclose(dlh);
}
/*
@ -497,7 +497,7 @@ void focusers(){
if(!focuser->setAbsPos(GP->async, tagpos)) WARNX(_("Can't set position %g"), tagpos);
}
retn:
focclose(dlh);
focclose();
}
int startWheel(void **dlh){
@ -516,11 +516,10 @@ int startWheel(void **dlh){
return TRUE;
}
void closewheel(void *dlh){
if(!dlh || !wheel) return;
void closewheel(){
if(!wheel) return;
wheel->close();
wheel = NULL;
//dlclose(dlh);
}
/*
@ -574,7 +573,7 @@ void wheels(){
if(!wheel->setPos(pos))
WARNX(_("Can't set wheel position %d"), pos);
retn:
closewheel(dlh);
closewheel();
}
/*
static void closeall(){
@ -617,24 +616,19 @@ int startCCD(void **dlh){
return TRUE;
}
void closecam(void *dlh){
if(!dlh || !camera) return;
void closecam(){
if(!camera) return;
DBG("Close cam");
camera->close();
camera = NULL;
DBG("close dlh");
//dlclose(dlh);
}
/*
* Find CCDs and work with each of them
*/
void ccds(){
// make base settings; return TRUE if all OK
int prepare_ccds(){
FNAME();
float tmpf;
int tmpi;
int rtn = FALSE;
void *dlh = NULL;
if(!startCCD(&dlh)) return;
if(!startCCD(&dlh)) return FALSE;
if(GP->listdevices){
for(int i = 0; i < camera->Ndevices; ++i){
if(!camera->setDevNo(i)) continue;
@ -681,6 +675,7 @@ void ccds(){
WARNX(_("Can't set T to %g degC"), GP->temperature);
verbose(3, "SetT=%.1f", GP->temperature);
}
float tmpf;
if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f", tmpf);
if(camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f", tmpf);
if(GP->shtr_cmd > -1 && GP->shtr_cmd < SHUTTER_AMOUNT){
@ -695,6 +690,7 @@ void ccds(){
if(!camera->confio(GP->confio))
WARNX(_("Can't configure (unsupported?)"));
}
int tmpi;
if(GP->getio){
if(camera->getio(&tmpi))
verbose(0, "CCDIOPORT=0x%02X\n", tmpi);
@ -761,23 +757,23 @@ void ccds(){
if(!camera->getbin(&GP->hbin, &GP->vbin)) // GET binning should be AFTER setgeometry!
WARNX(_("Can't get current binning"));
verbose(2, "Binning: %d x %d", GP->hbin, GP->vbin);
int raw_width = fmt.w / GP->hbin, raw_height = fmt.h / GP->vbin;
rtn = TRUE;
retn:
if(!rtn) closecam();
return rtn;
}
/*
* Main CCD process in standalone mode without viewer: get N images and save them
*/
void ccds(){
FNAME();
frameformat fmt = camera->geometry;
int raw_width = fmt.w / GP->hbin, raw_height = fmt.h / GP->vbin;
DBG("w=%d, h=%d", raw_width, raw_height);
uint16_t *img = MALLOC(uint16_t, raw_width * raw_height);
DBG("\n\nAllocated image 2x%dx%d=%d", raw_width, raw_height, 2 * raw_width * raw_height);
IMG ima = {.data = img, .w = raw_width, .h = raw_height};
#ifdef IMAGEVIEW
windowData *mainwin = NULL;
if(GP->showimage){
imageview_init();
DBG("Create new win");
mainwin = createGLwin("Sample window", raw_width, raw_height, NULL);
if(!mainwin){
WARNX(_("Can't open OpenGL window, image preview will be inaccessible"));
}else
pthread_create(&mainwin->thread, NULL, &image_thread, (void*)&ima);
}
#endif
if(GP->nframes < 1) GP->nframes = 1;
for(int j = 0; j < GP->nframes; ++j){
// úÁÈ×ÁÔ ËÁÄÒÁ %d\n
@ -797,44 +793,13 @@ void ccds(){
break;
}
calculate_stat(&ima);
#ifdef IMAGEVIEW
if(!GP->showimage){ // don't save all FITS files in imagev view mode
#endif
saveFITS(&ima, NULL);
#ifdef IMAGEVIEW
}
if(GP->showimage){ // display image
if((mainwin = getWin())){
DBG("change image");
change_displayed_image(mainwin, &ima);
while((mainwin = getWin())){ // test paused state & grabbing custom frames
if((mainwin->winevt & WINEVT_PAUSE) == 0) break;
if(mainwin->winevt & WINEVT_GETIMAGE){
mainwin->winevt &= ~WINEVT_GETIMAGE;
//if(!camera) return;
if(capt() != CAPTURE_READY){
WARNX(_("Can't capture image"));
}else{
//if(!camera) return;
if(!camera->capture(&ima)){
WARNX(_("Can't grab image"));
}
else{
calculate_stat(&ima);
change_displayed_image(mainwin, &ima);
}
}
}
usleep(10000);
}
}else break; // stop capturing when window closed
}
#endif
if(GP->pause_len && j != (GP->nframes - 1)){
double delta, time1 = dtime() + GP->pause_len;
while((delta = time1 - dtime()) > 0.){
// %d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n
verbose(1, _("%d seconds till pause ends\n"), (int)delta);
float tmpf;
if(camera->getTcold(&tmpf)) verbose(1, "CCDTEMP=%.1f\n", tmpf);
if(camera->getTbody(&tmpf)) verbose(1, "BODYTEMP=%.1f\n", tmpf);
if(delta > 6.) sleep(5);
@ -843,39 +808,9 @@ void ccds(){
}
}
}
#ifdef IMAGEVIEW
if(GP->showimage){
if((mainwin = getWin())) mainwin->winevt |= WINEVT_PAUSE;
DBG("Waiting");
while((mainwin = getWin())){
//if(mainwin->killthread) break;
if(mainwin->winevt & WINEVT_GETIMAGE){
DBG("GRAB");
mainwin->winevt &= ~WINEVT_GETIMAGE;
//if(!camera) return;
if(capt() != CAPTURE_READY){
WARNX(_("Can't capture image"));
}else{
//if(!camera) return;
if(!camera->capture(&ima)){
WARNX(_("Can't grab image"));
}
else{
calculate_stat(&ima);
change_displayed_image(mainwin, &ima);
}
}
}
}
DBG("Close window");
usleep(10000);
}
#endif
DBG("FREE img");
FREE(img);
retn:
closecam(dlh);
DBG("closed -> out");
closecam();
}
void cancel(){
@ -883,3 +818,79 @@ void cancel(){
camera->cancel();
}
}
static volatile int grabends = 1;
static void *grabnext(void *arg){
FNAME();
grabends = 0;
static int retval = FALSE;
IMG *ima = (IMG*) arg;
DBG("nxt");
if(!ima || !camera) goto eof;
if(!camera->startexposition()){ WARNX(_("Can't start exposition")); goto eof; }
capture_status cs;
DBG("Poll");
while(!camera->pollcapture(&cs, NULL)){
usleep(10000);
if(!camera) goto eof;
}
DBG("get");
if(!camera->capture(ima)){ WARNX(_("Can't grab image")); goto eof; }
calculate_stat(ima);
retval = TRUE;
DBG("OK");
eof:
grabends = 1;
pthread_exit((void*)&retval);
DBG("EXIT");
}
/**
* @brief ccdcaptured - get new image data for viewer
* @param img - pointer to IMG* (if IMG* is NULL, will be allocated here)
* @return TRUE if new image available
*/
int ccdcaptured(IMG **imgptr){
if(!imgptr) return FALSE;
static pthread_t grabthread = 0;
if(imgptr == (void*)-1){ // kill `grabnext`
DBG("Kill grabbing thread");
if(grabthread){
pthread_cancel(grabthread);
pthread_join(grabthread, NULL);
grabthread = 0;
}
DBG("Killed");
return FALSE;
}
frameformat fmt = camera->geometry;
int raw_width = fmt.w / GP->hbin, raw_height = fmt.h / GP->vbin;
IMG *ima = NULL;
if(!*imgptr){
uint16_t *img = MALLOC(uint16_t, raw_width * raw_height);
DBG("\n\nAllocated image 2x%dx%d=%d", raw_width, raw_height, 2 * raw_width * raw_height);
ima = MALLOC(IMG, 1);
ima->data = img;
ima->w = raw_width;
ima->h = raw_height;
*imgptr = ima;
}else ima = *imgptr;
if(!grabthread){ // start new grab
DBG("\n\n\nStart new grab");
if(pthread_create(&grabthread, NULL, &grabnext, (void*)ima)){
WARN("Can't create grabbing thread");
grabthread = 0;
}
}else{ // grab in process
if(grabends){ // thread is dead
DBG("Thread is dead");
void *vr;
pthread_join(grabthread, &vr);
int retcode = *(int*)vr;
DBG("retcode = %d", retcode);
grabthread = 0;
if(retcode) return TRUE;
}
}
return FALSE;
}

View File

@ -30,14 +30,16 @@ void calculate_stat(IMG *image);
int saveFITS(IMG *img, char **outp); // for imageview module
void focusers();
void wheels();
int prepare_ccds();
void ccds();
void cancel();
int startCCD(void **dlh);
int startWheel(void **dlh);
int startFocuser(void **dlh);
void focclose(void *dlh);
void closewheel(void *dlh);
void closecam(void *dlh);
void focclose();
void closewheel();
void closecam();
int ccdcaptured(IMG **img);
#endif // CCDFUNC_H__

View File

@ -121,7 +121,7 @@ myoption cmdlnopts[] = {
*/
glob_pars *parse_args(int argc, char **argv){
// format of help: "Usage: progname [args]\n"
change_helpstring("Usage: %s [args] [output file prefix]\nTo restart server kill it with SIGUSR1\n\tArgs are:\n");
change_helpstring("Usage: %s [args] [output file prefix or file/dir name to view]\nTo restart server kill it with SIGUSR1\n\tArgs are:\n");
// parse arguments
parseargs(&argc, &argv, cmdlnopts);
if(help) showhelp(-1, cmdlnopts);

View File

@ -21,11 +21,12 @@
#include "events.h"
#include "imageview.h"
extern windowData *win;
/**
* manage pressed keys & menu items
*/
static void processKeybrd(unsigned char key, int mod, _U_ int x, _U_ int y){
windowData *win = getWin();
if(!win) return;
DBG("key=%d (%c), mod=%d", key, key, mod);
if(mod == GLUT_ACTIVE_CTRL){ // 'a' == 1, 'b' == 2...
@ -102,7 +103,6 @@ void mousePressed(int key, int state, int x, int y){
// key: GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON
// state: GLUT_UP, GLUT_DOWN
int mod = glutGetModifiers() & 7;
windowData *win = getWin();
if(!win) return;
if(state == GLUT_DOWN){
oldx = x; oldy = y;
@ -130,7 +130,6 @@ void mousePressed(int key, int state, int x, int y){
}
void mouseMove(int x, int y){
windowData *win = getWin();
if(!win) return;
if(movingwin){
float X, Y, nx, ny, w2, h2;
@ -183,7 +182,6 @@ static const menuentry entries[] = {
void createMenu(){
FNAME();
windowData *win = getWin();
if(!win) return;
DBG("menu for win ID %d", win->ID);
glutSetWindow(win->ID);

View File

@ -28,7 +28,7 @@
#include "imageview.h"
#include "omp.h"
static windowData *win = NULL; // main window
windowData *win = NULL; // main window (common variable for events.c)
static pthread_t GLUTthread = 0; // main GLUT thread
static int imequalize = TRUE;
static int initialized = 0; // ==1 if GLUT is initialized; ==0 after clear_GL_context
@ -38,6 +38,24 @@ static void createWindow();
static void RedrawWindow();
static void Resize(int width, int height);
/**
* Init freeGLUT
*/
static void imageview_init(){
FNAME();
char *v[] = {"Image view window", NULL};
int c = 1;
if(initialized){
WARNX(_("Already initialized!"));
return;
}
XInitThreads(); // we need it for threaded windows
glutInit(&c, v);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION);
initialized = 1;
}
/**
* calculate window properties on creating & resizing
*/
@ -109,7 +127,7 @@ static void createWindow(){
DBG("Window opened");
}
int killwindow(){
static int killwindow(){
if(!win) return 0;
if(!win->killthread){
// say threads to die
@ -140,7 +158,8 @@ int killwindow(){
return 1;
}
void renderBitmapString(float x, float y, void *font, char *string, GLubyte *color){
/*
static void renderBitmapString(float x, float y, void *font, char *string, GLubyte *color){
if(!initialized) return;
char *c;
int x1=x, W=0;
@ -159,7 +178,7 @@ void renderBitmapString(float x, float y, void *font, char *string, GLubyte *col
//glutStrokeCharacter(GLUT_STROKE_ROMAN, *c);
x1 = x1 + glutBitmapWidth(font,*c);// + 1;
}
}
}*/
static void RedrawWindow(){
//DBG("ini=%d, win=%s", initialized, win ? "yes" : "no");
@ -213,6 +232,7 @@ static void *Redraw(_U_ void *arg){
static void Resize(int width, int height){
FNAME();
if(!initialized) return;
if(!initialized || !win || win->killthread) return;
glutReshapeWindow(width, height);
win->w = width;
@ -236,7 +256,7 @@ static void Resize(int width, int height){
* @param rawdata - NULL (then the memory will be allocated here with size w x h)
* or allocated outside data
*/
windowData *createGLwin(char *title, int w, int h, rawimage *rawdata){
static void createGLwin(char *title, int w, int h, rawimage *rawdata){
FNAME();
if(!initialized) imageview_init();
if(win) killwindow();
@ -255,58 +275,22 @@ windowData *createGLwin(char *title, int w, int h, rawimage *rawdata){
}
}
if(!raw || !raw->rawdata){
free(raw);
return NULL;
FREE(raw);
FREE(win);
return;
}
win->title = strdup(title);
win->image = raw;
if(pthread_mutex_init(&win->mutex, NULL)){
WARN(_("Can't init mutex!"));
killwindow();
return NULL;
return;
}
win->w = w;
win->h = h;
pthread_create(&GLUTthread, NULL, &Redraw, NULL);
return win;
}
/**
* Init freeGLUT
*/
void imageview_init(){
FNAME();
char *v[] = {"Image view window", NULL};
int c = 1;
if(initialized){
WARNX(_("Already initialized!"));
return;
}
XInitThreads(); // we need it for threaded windows
glutInit(&c, v);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_CONTINUE_EXECUTION);
initialized = 1;
}
/**
* Close all opened windows and terminate main GLUT thread
*/
void clear_GL_context(){
FNAME();
if(!initialized) return;
initialized = 0;
cancel(); // cancel expositions
DBG("kill");
killwindow();
DBG("join");
DBG("Leave mainloop");
glutLeaveMainLoop();
if(GLUTthread) pthread_join(GLUTthread, NULL); // wait while main thread exits
DBG("main GL thread cancelled");
}
/*
* Coordinates transformation from CS of drawingArea into CS of picture
* x,y - pointer coordinates
@ -328,11 +312,6 @@ void conv_image_to_mouse_coords(float X, float Y,
*y = (int)roundf((window->y0 - Y) * a);
}
windowData *getWin(){
return win;
}
/**
* Convert gray (unsigned short) into RGB components (GLubyte)
* @argument L - gray level (0..1)
@ -451,12 +430,21 @@ static uint8_t *equalize(uint16_t *ori, int w, int h){
return retn;
}
void change_displayed_image(windowData *win, IMG *img){
static void change_displayed_image(IMG *img){
if(!win || !win->image) return;
rawimage *im = win->image;
DBG("imh=%d, imw=%d, ch=%u, cw=%u", im->h, im->w, img->w, img->h);
pthread_mutex_lock(&win->mutex);
rawimage *im = win->image;
DBG("imh=%d, imw=%d, ch=%u, cw=%u", im->h, im->w, img->h, img->w);
int w = img->w, h = img->h, s = w*h;
if(!im || (im->h != h) || (im->w != w)){ // realloc image to new size
DBG("\n\nRealloc rawdata");
if(im) FREE(im->rawdata);
else im = MALLOC(rawimage, 1);
im->rawdata = MALLOC(GLubyte, w*h*3);
im->h = h; im->w = w;
win->image = im;
DBG("win->image changed");
}
if(imequalize){
uint8_t *newima = equalize(img->data, w, h);
GLubyte *dst = im->rawdata;
@ -490,11 +478,13 @@ void change_displayed_image(windowData *win, IMG *img){
pthread_mutex_unlock(&win->mutex);
}
void* image_thread(_U_ void *data){
#if 0
// thread for checking
static void* image_thread(void *data){
FNAME();
IMG *img = (IMG*) data;
IMG *(*newimage)(const char *) = (IMG*(*)(const char*)) data;
IMG *img = NULL;
while(1){
windowData *win = getWin();
if(!win || win->killthread){
DBG("got killthread");
clear_GL_context();
@ -520,9 +510,77 @@ void* image_thread(_U_ void *data){
usleep(10000);
}
}
#endif
void closeGL(){
windowData *win = getWin();
if(win) win->killthread = 1;
while(getWin()) usleep(1000);
usleep(1000);
if(!initialized) return;
initialized = 0;
cancel(); // cancel expositions
DBG("kill");
killwindow();
DBG("Leave mainloop");
glutLeaveMainLoop();
DBG("join");
if(GLUTthread) pthread_join(GLUTthread, NULL); // wait while main thread exits
DBG("main GL thread cancelled");
usleep(1000);
}
/**
* @brief viewer - main viewer process
* @param newimage - image refresh function
* @return 0 if all OK
*/
int viewer(imagefunc newimage){
if(!newimage){
WARNX("No image changing function defined");
return 1;
}
imageview_init();
DBG("Create new win");
createGLwin("Sample window", 1024, 1024, NULL);
if(!win){
WARNX(_("Can't open OpenGL window, image preview will be inaccessible"));
return 1;
}
IMG *img = NULL;
while(1){
if(!win || win->killthread){
DBG("got killthread");
newimage((void*)-1);
signals(0); // just run common cleaner
return 0;
}
if((win->winevt & WINEVT_GETIMAGE) || !(win->winevt & WINEVT_PAUSE)){
if(newimage(&img)){
win->winevt &= ~WINEVT_GETIMAGE;
change_displayed_image(img); // change image if refreshed
}
}
if(!win->winevt){
usleep(10000);
continue;
}
if(win->winevt & WINEVT_SAVEIMAGE){ // save image
verbose(2, "Make screenshot\n");
saveFITS(img, NULL);
win->winevt &= ~WINEVT_SAVEIMAGE;
}
if(win->winevt & WINEVT_ROLLCOLORFUN){
roll_colorfun();
win->winevt &= ~WINEVT_ROLLCOLORFUN;
change_displayed_image(img);
}
if(win->winevt & WINEVT_EQUALIZE){
win->winevt &= ~WINEVT_EQUALIZE;
imequalize = !imequalize;
verbose(1, _("Equalization of histogram: %s"), imequalize ? N_("on") : N_("off"));
change_displayed_image(img);
}
}
}
// getter for events.c
windowData* getWin(){ return win;}

View File

@ -28,13 +28,6 @@
#include "ccdfunc.h"
#include "events.h"
typedef struct{
GLubyte *rawdata; // raw image data
int w; // size of image
int h;
int changed; // == 1 if data was changed outside (to redraw)
} rawimage;
// events from menu:
// temporaly stop capture of regular sequence
#define WINEVT_PAUSE (1<<0)
@ -51,6 +44,14 @@ typedef struct{
#define WIN_FLIP_LR (1<<0)
#define WIN_FLIP_UD (1<<1)
// common structs with events.c
typedef struct{
GLubyte *rawdata; // raw image data
int w; // size of image
int h;
int changed; // == 1 if data was changed outside (to redraw)
} rawimage;
typedef struct{
int ID; // identificator of OpenGL window
char *title; // title of window
@ -69,25 +70,22 @@ typedef struct{
int killthread; // flag for killing data changing thread & also signal that there's no threads
} windowData;
/*
typedef enum{
INNER,
OPENGL
} winIdType;
void imageview_init();
*/
void closeGL();
windowData *createGLwin(char *title, int w, int h, rawimage *rawdata);
windowData *getWin();
int killwindow();
void renderBitmapString(float x, float y, void *font, char *string, GLubyte *color);
void clear_GL_context();
void calc_win_props(GLfloat *Wortho, GLfloat *Hortho);
void conv_mouse_to_image_coords(int x, int y, float *X, float *Y, windowData *window);
void conv_image_to_mouse_coords(float X, float Y, int *x, int *y, windowData *window);
windowData* getWin();
void* image_thread(void *data);
void change_displayed_image(windowData *win, IMG *img);
typedef int (*imagefunc)(IMG**);
int viewer(imagefunc);
#endif // IMAGEVIEW_H__

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-03 09:26+0300\n"
"POT-Creation-Date: 2023-02-07 16:55+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -245,59 +245,59 @@ msgstr ""
msgid "Display image in OpenGL window"
msgstr ""
#: ccdfunc.c:63
#: ccdfunc.c:64
#, c-format
msgid "Can't find plugin %s: %s"
msgstr ""
#: ccdfunc.c:75
#: ccdfunc.c:76
#, c-format
msgid "Can't find focuser in plugin %s: %s"
msgstr ""
#: ccdfunc.c:86
#: ccdfunc.c:87
#, c-format
msgid "Can't find camera in plugin %s: %s"
msgstr ""
#: ccdfunc.c:97
#: ccdfunc.c:98
#, c-format
msgid "Can't find wheel in plugin %s: %s"
msgstr ""
#: ccdfunc.c:183
#: ccdfunc.c:184
msgid "Camera device unknown"
msgstr ""
#: ccdfunc.c:189
#: ccdfunc.c:190
msgid "Neither filename nor filename prefix pointed!"
msgstr ""
#. Не могу сохранить файл
#: ccdfunc.c:208
#: ccdfunc.c:209
#, c-format
msgid "Can't save file with prefix %s"
msgstr ""
#: ccdfunc.c:356
#: ccdfunc.c:357
#, c-format
msgid "File saved as '%s'"
msgstr ""
#: ccdfunc.c:365
#: ccdfunc.c:366
msgid "Error saving file"
msgstr ""
#: ccdfunc.c:405
#: ccdfunc.c:406
#, c-format
msgid "Image stat:\n"
msgstr ""
#: ccdfunc.c:413
#: ccdfunc.c:414
msgid "Focuser device not pointed"
msgstr ""
#: ccdfunc.c:420
#: ccdfunc.c:421
msgid "No focusers found"
msgstr ""
@ -340,217 +340,213 @@ msgstr ""
msgid "No wheels found"
msgstr ""
#: ccdfunc.c:544
#: ccdfunc.c:543
#, c-format
msgid "Found %d wheels, you point number %d"
msgstr ""
#: ccdfunc.c:548
#: ccdfunc.c:547
msgid "Can't set active wheel number"
msgstr ""
#: ccdfunc.c:564
#: ccdfunc.c:563
msgid "Can't get max wheel position"
msgstr ""
#: ccdfunc.c:571
#: ccdfunc.c:570
#, c-format
msgid "Wheel position should be from 0 to %d"
msgstr ""
#: ccdfunc.c:575
#: ccdfunc.c:574
#, c-format
msgid "Can't set wheel position %d"
msgstr ""
#: ccdfunc.c:592
#: ccdfunc.c:591
#, c-format
msgid "%.1f seconds till exposition ends"
msgstr ""
#: ccdfunc.c:606
#: ccdfunc.c:605
msgid "Camera device not pointed"
msgstr ""
#: ccdfunc.c:613 ccdfunc.c:614
#: ccdfunc.c:612 ccdfunc.c:613
msgid "No cameras found"
msgstr ""
#: ccdfunc.c:649
#: ccdfunc.c:643
#, c-format
msgid "Found %d cameras, you point number %d"
msgstr ""
#: ccdfunc.c:653
#: ccdfunc.c:647
msgid "Can't set active camera number"
msgstr ""
#: ccdfunc.c:659
#: ccdfunc.c:653
msgid "Can't set fan speed"
msgstr ""
#: ccdfunc.c:660
#: ccdfunc.c:654
#, c-format
msgid "Set fan speed to %d"
msgstr ""
#: ccdfunc.c:665
#: ccdfunc.c:659
#, c-format
msgid "Camera model: %s"
msgstr ""
#: ccdfunc.c:666
#: ccdfunc.c:660
#, c-format
msgid "Pixel size: %g x %g"
msgstr ""
#: ccdfunc.c:672
#: ccdfunc.c:666
#, c-format
msgid "Full array: %s"
msgstr ""
#: ccdfunc.c:675
#: ccdfunc.c:669
#, c-format
msgid "Field of view: %s"
msgstr ""
#: ccdfunc.c:678
#: ccdfunc.c:672
#, c-format
msgid "Current format: %s"
msgstr ""
#: ccdfunc.c:681
#: ccdfunc.c:675
#, c-format
msgid "Can't set T to %g degC"
msgstr ""
#: ccdfunc.c:688
#: ccdfunc.c:683
#, c-format
msgid "Shutter command: %s\n"
msgstr ""
#: ccdfunc.c:690
#: ccdfunc.c:685
#, c-format
msgid "Can't run shutter command %s (unsupported?)"
msgstr ""
#. "Попытка сконфигурировать порт I/O как %d\n"
#: ccdfunc.c:694
#: ccdfunc.c:689
#, c-format
msgid "Try to configure I/O port as %d"
msgstr ""
#: ccdfunc.c:696
#: ccdfunc.c:691
msgid "Can't configure (unsupported?)"
msgstr ""
#: ccdfunc.c:702
#: ccdfunc.c:698
msgid "Can't get IOport state (unsupported?)"
msgstr ""
#. "Попытка записи %d в порт I/O\n"
#: ccdfunc.c:706
#: ccdfunc.c:702
#, c-format
msgid "Try to write %d to I/O port"
msgstr ""
#: ccdfunc.c:708
#: ccdfunc.c:704
msgid "Can't set IOport"
msgstr ""
#: ccdfunc.c:715
#: ccdfunc.c:711
#, c-format
msgid "Set gain to %g"
msgstr ""
#: ccdfunc.c:716
#: ccdfunc.c:712
#, c-format
msgid "Can't set gain to %g"
msgstr ""
#: ccdfunc.c:721
#: ccdfunc.c:717
#, c-format
msgid "Set brightness to %g"
msgstr ""
#: ccdfunc.c:722
#: ccdfunc.c:718
#, c-format
msgid "Can't set brightness to %g"
msgstr ""
#: ccdfunc.c:730 server.c:223
#: ccdfunc.c:726 server.c:223
#, c-format
msgid "Can't set binning %dx%d"
msgstr ""
#: ccdfunc.c:742 server.c:224
#: ccdfunc.c:738 server.c:224
msgid "Can't set given geometry"
msgstr ""
#: ccdfunc.c:746
#: ccdfunc.c:742
#, c-format
msgid "Can't set %d flushes"
msgstr ""
#: ccdfunc.c:750
#: ccdfunc.c:746
#, c-format
msgid "Can't set exposure time to %f seconds"
msgstr ""
#: ccdfunc.c:753
#: ccdfunc.c:749
msgid "Can't change frame type"
msgstr ""
#: ccdfunc.c:756
#: ccdfunc.c:752
msgid "Can't set bit depth"
msgstr ""
#: ccdfunc.c:758
#: ccdfunc.c:754
msgid "Can't set readout speed"
msgstr ""
#: ccdfunc.c:759
#: ccdfunc.c:755
#, c-format
msgid "Readout mode: %s"
msgstr ""
#: ccdfunc.c:760
#: ccdfunc.c:756
msgid "Only show statistics"
msgstr ""
#. GET binning should be AFTER setgeometry!
#: ccdfunc.c:762
#: ccdfunc.c:758
msgid "Can't get current binning"
msgstr ""
#: ccdfunc.c:776
msgid "Can't open OpenGL window, image preview will be inaccessible"
msgstr ""
#. Захват кадра %d\n
#: ccdfunc.c:784
#: ccdfunc.c:780
#, c-format
msgid "Capture frame %d"
msgstr ""
#: ccdfunc.c:786 server.c:121
#: ccdfunc.c:782 ccdfunc.c:830 server.c:121
msgid "Can't start exposition"
msgstr ""
#: ccdfunc.c:790 ccdfunc.c:816 ccdfunc.c:857
#: ccdfunc.c:786
msgid "Can't capture image"
msgstr ""
#: ccdfunc.c:793
#: ccdfunc.c:789
msgid "Read grabbed image"
msgstr ""
#: ccdfunc.c:796 ccdfunc.c:820 ccdfunc.c:861
#: ccdfunc.c:792 ccdfunc.c:838
msgid "Can't grab image"
msgstr ""
#. %d секунд до окончания паузы\n
#: ccdfunc.c:837 client.c:260
#: ccdfunc.c:801 client.c:260
#, c-format
msgid "%d seconds till pause ends\n"
msgstr ""
@ -567,28 +563,32 @@ msgstr ""
msgid "Server timeout"
msgstr ""
#: imageview.c:264
msgid "Can't init mutex!"
msgstr ""
#: imageview.c:282
#: imageview.c:49
msgid "Already initialized!"
msgstr ""
#: imageview.c:408
#: imageview.c:285
msgid "Can't init mutex!"
msgstr ""
#: imageview.c:387
#, c-format
msgid "Histogram conversion: %s"
msgstr ""
#: imageview.c:517
#: imageview.c:507 imageview.c:579
#, c-format
msgid "Equalization of histogram: %s"
msgstr ""
#: imageview.c:517
#: imageview.c:507 imageview.c:579
msgid "on"
msgstr ""
#: imageview.c:517
#: imageview.c:507 imageview.c:579
msgid "off"
msgstr ""
#: imageview.c:545
msgid "Can't open OpenGL window, image preview will be inaccessible"
msgstr ""

View File

@ -7,7 +7,7 @@
msgid ""
msgstr "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-03 09:26+0300\n"
"POT-Creation-Date: 2023-02-07 16:54+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -16,18 +16,18 @@ msgstr "Project-Id-Version: PACKAGE VERSION\n"
"Content-Type: text/plain; charset=koi8-r\n"
"Content-Transfer-Encoding: 8bit\n"
#: ccdfunc.c:592
#: ccdfunc.c:591
#, c-format
msgid "%.1f seconds till exposition ends"
msgstr "%.1f ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÜËÓÐÏÚÉÃÉÉ"
#. %d Ñ<>екунд до окончаниÑ<C2B8> паузы\n
#: ccdfunc.c:837 client.c:260
#: ccdfunc.c:801 client.c:260
#, c-format
msgid "%d seconds till pause ends\n"
msgstr "%d ÓÅËÕÎÄ ÄÏ ÏËÏÎÞÁÎÉÑ ÐÁÕÚÙ\n"
#: imageview.c:282
#: imageview.c:49
msgid "Already initialized!"
msgstr "õÖÅ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÎÏ!"
@ -39,57 +39,57 @@ msgstr "
msgid "CMOS gain level"
msgstr "ÕÒÏ×ÅÎØ Gain CMOS"
#: ccdfunc.c:606
#: ccdfunc.c:605
msgid "Camera device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÐÏÄËÌÀÞÅÎÏ"
#: ccdfunc.c:183
#: ccdfunc.c:184
msgid "Camera device unknown"
msgstr "õÓÔÒÏÊÓÔ×Ï Ó×ÅÏÐÒÉÅÍÎÉËÁ ÎÅ ÏÐÏÚÎÁÎÏ"
#: ccdfunc.c:665
#: ccdfunc.c:659
#, c-format
msgid "Camera model: %s"
msgstr "íÏÄÅÌØ Ó×ÅÔÏÐÒÉÅÍÎÉËÁ: %s"
#: ccdfunc.c:790 ccdfunc.c:816 ccdfunc.c:857
#: ccdfunc.c:786
msgid "Can't capture image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
#: ccdfunc.c:753
#: ccdfunc.c:749
msgid "Can't change frame type"
msgstr "îÅ ÍÏÇÕ ÉÚÍÅÎÉÔØ ÔÉÐ ËÁÄÒÁ"
#: ccdfunc.c:696
#: ccdfunc.c:691
msgid "Can't configure (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ (ÏÐÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#: ccdfunc.c:86
#: ccdfunc.c:87
#, c-format
msgid "Can't find camera in plugin %s: %s"
msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ ËÁÍÅÒÙ %s: %s"
#: ccdfunc.c:75
#: ccdfunc.c:76
#, c-format
msgid "Can't find focuser in plugin %s: %s"
msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ ÆÏËÕÓÅÒÁ %s: %s"
#: ccdfunc.c:63
#: ccdfunc.c:64
#, c-format
msgid "Can't find plugin %s: %s"
msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ %s: %s"
#: ccdfunc.c:97
#: ccdfunc.c:98
#, c-format
msgid "Can't find wheel in plugin %s: %s"
msgstr "îÅ ÍÏÇÕ ÎÁÊÔÉ ÐÌÁÇÉÎ ÔÕÒÅÌÉ %s: %s"
#: ccdfunc.c:702
#: ccdfunc.c:698
msgid "Can't get IOport state (unsupported?)"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÓÏÓÔÏÑÎÉÅ ÐÏÒÔÁ I/O (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#. GET binning should be AFTER setgeometry!
#: ccdfunc.c:762
#: ccdfunc.c:758
msgid "Can't get current binning"
msgstr "îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ ÔÅËÕÝÅÅ ÚÎÁÞÅÎÉÅ ÂÉÎÎÉÎÇÁ"
@ -101,11 +101,11 @@ msgstr "
msgid "Can't get focuser limit positions"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:564
#: ccdfunc.c:563
msgid "Can't get max wheel position"
msgstr "îÅ ÍÏÇÕ ÏÐÒÅÄÅÌÉÔØ ÐÒÅÄÅÌØÎÕÀ ÐÏÚÉÃÉÀ ËÏÌÅÓÁ"
#: ccdfunc.c:796 ccdfunc.c:820 ccdfunc.c:861
#: ccdfunc.c:792 ccdfunc.c:838
msgid "Can't grab image"
msgstr "îÅ ÍÏÇÕ ÚÁÈ×ÁÔÉÔØ ÉÚÏÂÒÁÖÅÎÉÅ"
@ -113,7 +113,7 @@ msgstr "
msgid "Can't home focuser"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÆÏËÕÓÅÒ × ÎÕÌØ"
#: imageview.c:264
#: imageview.c:285
msgid "Can't init mutex!"
msgstr "îÅ ÍÏÇÕ ÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÍØÀÔÅËÓ!"
@ -121,36 +121,36 @@ msgstr "
msgid "Can't make exposition"
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ÜËÓÐÏÚÉÃÉÀ"
#: ccdfunc.c:776
#: imageview.c:545
msgid "Can't open OpenGL window, image preview will be inaccessible"
msgstr "îÅ ÍÏÇÕ ÏÔËÒÙÔØ ÏËÎÏ OpenGL, ÏÔÏÂÒÁÖÅÎÉÅ ÂÕÄÅÔ ÎÅÄÏÓÔÕÐÎÏ"
#: ccdfunc.c:690
#: ccdfunc.c:685
#, c-format
msgid "Can't run shutter command %s (unsupported?)"
msgstr "îÅ ÍÏÇÕ ×ÙÐÏÌÎÉÔØ ËÏÍÁÎÄÕ ÚÁÔ×ÏÒÁ %s (ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ?)"
#. Ð<>е могу Ñ<>охраниÑÑŒ файл
#: ccdfunc.c:208
#: ccdfunc.c:209
#, c-format
msgid "Can't save file with prefix %s"
msgstr "îÅ ÍÏÇÕ ÓÏÈÒÁÎÉÔØ ÆÁÊÌ Ó ÐÒÅÆÉËÓÏÍ %s"
#: ccdfunc.c:746
#: ccdfunc.c:742
#, c-format
msgid "Can't set %d flushes"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ %d ÓÂÒÏÓÏ×"
#: ccdfunc.c:708
#: ccdfunc.c:704
msgid "Can't set IOport"
msgstr "îÅ ÍÏÇÕ ÐÏÍÅÎÑÔØ ÚÎÁÞÅÎÉÑ ÐÏÒÔÁ I/O"
#: ccdfunc.c:681
#: ccdfunc.c:675
#, c-format
msgid "Can't set T to %g degC"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÔÅÍÐÅÒÁÔÕÒÕ × %g ÇÒÁÄã"
#: ccdfunc.c:653
#: ccdfunc.c:647
msgid "Can't set active camera number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÊ ËÁÍÅÒÙ"
@ -158,39 +158,39 @@ msgstr "
msgid "Can't set active focuser number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ÆÏËÕÓÅÒÁ"
#: ccdfunc.c:548
#: ccdfunc.c:547
msgid "Can't set active wheel number"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÎÏÍÅÒ ÁËÔÉ×ÎÏÇÏ ËÏÌÅÓÁ"
#: ccdfunc.c:730 server.c:223
#: ccdfunc.c:726 server.c:223
#, c-format
msgid "Can't set binning %dx%d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÂÉÎÎÉÎÇ %dx%d"
#: ccdfunc.c:756
#: ccdfunc.c:752
msgid "Can't set bit depth"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÒÁÚÒÑÄÎÏÓÔØ áãð"
#: ccdfunc.c:722
#: ccdfunc.c:718
#, c-format
msgid "Can't set brightness to %g"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:750
#: ccdfunc.c:746
#, c-format
msgid "Can't set exposure time to %f seconds"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÜËÓÐÏÚÉÃÉÀ × %f ÓÅËÕÎÄ"
#: ccdfunc.c:659
#: ccdfunc.c:653
msgid "Can't set fan speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ×"
#: ccdfunc.c:716
#: ccdfunc.c:712
#, c-format
msgid "Can't set gain to %g"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ Gain × %g"
#: ccdfunc.c:742 server.c:224
#: ccdfunc.c:738 server.c:224
msgid "Can't set given geometry"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÇÅÏÍÅÔÒÉÀ"
@ -204,26 +204,26 @@ msgstr "
msgid "Can't set position %g: out of limits [%g, %g]"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÚÉÃÉÀ %g: ×ÎÅ ÐÒÅÄÅÌÏ× [%g, %g]"
#: ccdfunc.c:758
#: ccdfunc.c:754
msgid "Can't set readout speed"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ÓÞÉÔÙ×ÁÎÉÑ"
#: ccdfunc.c:575
#: ccdfunc.c:574
#, c-format
msgid "Can't set wheel position %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÐÏÌÏÖÅÎÉÅ ËÏÌÅÓÁ %d"
#: ccdfunc.c:786 server.c:121
#: ccdfunc.c:782 ccdfunc.c:830 server.c:121
msgid "Can't start exposition"
msgstr "îÅ ÍÏÇÕ ÎÁÞÁÔØ ÜËÓÐÏÚÉÃÉÀ"
#. Захват кадра %d\n
#: ccdfunc.c:784
#: ccdfunc.c:780
#, c-format
msgid "Capture frame %d"
msgstr "úÁÈ×ÁÔ ËÁÄÒÁ %d"
#: ccdfunc.c:678
#: ccdfunc.c:672
#, c-format
msgid "Current format: %s"
msgstr ""
@ -232,30 +232,30 @@ msgstr ""
msgid "Display image in OpenGL window"
msgstr "ïÔÏÂÒÁÖÅÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ × ÏËÎÅ OpenGL"
#: imageview.c:517
#: imageview.c:507 imageview.c:579
#, c-format
msgid "Equalization of histogram: %s"
msgstr "üË×ÁÌÉÚÁÃÉÑ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
#: ccdfunc.c:365
#: ccdfunc.c:366
msgid "Error saving file"
msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÆÁÊÌÁ"
#: ccdfunc.c:675
#: ccdfunc.c:669
#, c-format
msgid "Field of view: %s"
msgstr "ðÏÌÅ ÚÒÅÎÉÑ: %s"
#: ccdfunc.c:356
#: ccdfunc.c:357
#, c-format
msgid "File saved as '%s'"
msgstr "æÁÊÌ ÓÏÈÒÁÎÅÎ ËÁË '%s'"
#: ccdfunc.c:413
#: ccdfunc.c:414
msgid "Focuser device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï ÆÏËÕÓÅÒÁ ÎÅ ÕËÁÚÁÎÏ"
#: ccdfunc.c:649
#: ccdfunc.c:643
#, c-format
msgid "Found %d cameras, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÁÍÅÒ, ×Ù ÕËÁÚÁÌÉ %d"
@ -265,22 +265,22 @@ msgstr "
msgid "Found %d focusers, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ÆÏËÕÓÅÒÏ×, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:544
#: ccdfunc.c:543
#, c-format
msgid "Found %d wheels, you point number %d"
msgstr "ïÂÎÁÒÕÖÅÎÏ %d ËÏÌÅÓ, ×Ù ÕËÁÚÁÌÉ %d"
#: ccdfunc.c:672
#: ccdfunc.c:666
#, c-format
msgid "Full array: %s"
msgstr "ðÏÌÎÙÊ ÆÏÒÍÁÔ: %s"
#: imageview.c:408
#: imageview.c:387
#, c-format
msgid "Histogram conversion: %s"
msgstr "ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÇÉÓÔÏÇÒÁÍÍÙ: %s"
#: ccdfunc.c:405
#: ccdfunc.c:406
#, c-format
msgid "Image stat:\n"
msgstr "óÔÁÔÉÓÔÉËÁ ÐÏ ÉÚÏÂÒÁÖÅÎÉÀ: \n"
@ -289,7 +289,7 @@ msgstr "
msgid "N flushes before exposing (default: 1)"
msgstr "N ÚÁÓ×ÅÞÉ×ÁÎÉÊ ÐÅÒÅÄ ÜËÓÐÏÚÉÃÉÅÊ (ÐÏ ÕÍÏÌÞÁÎÉÀ: 1)"
#: ccdfunc.c:189
#: ccdfunc.c:190
msgid "Neither filename nor filename prefix pointed!"
msgstr "îÉ ÉÍÑ ÆÁÊÌÁ, ÎÉ ÐÒÅÆÉËÓ ÎÅ ÕËÁÚÁÎÙ!"
@ -297,11 +297,11 @@ msgstr "
msgid "No camera device"
msgstr "îÅ ÕËÁÚÁÎÏ ÕÓÔÒÏÊÓÔ×Ï ËÁÍÅÒÙ"
#: ccdfunc.c:613 ccdfunc.c:614
#: ccdfunc.c:612 ccdfunc.c:613
msgid "No cameras found"
msgstr "ëÁÍÅÒ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:420
#: ccdfunc.c:421
msgid "No focusers found"
msgstr "æÏËÕÓÅÒÏ× ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
@ -309,7 +309,7 @@ msgstr "
msgid "No wheels found"
msgstr "ôÕÒÅÌÅÊ ÎÅ ÏÂÎÁÒÕÖÅÎÏ"
#: ccdfunc.c:760
#: ccdfunc.c:756
msgid "Only show statistics"
msgstr "ôÏÌØËÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÁÔÉÓÔÉËÕ"
@ -317,16 +317,16 @@ msgstr "
msgid "PID file (default: "
msgstr "PID-ÆÁÊÌ (ÐÏ ÕÍÏÌÞÁÎÉÀ: "
#: ccdfunc.c:666
#: ccdfunc.c:660
#, c-format
msgid "Pixel size: %g x %g"
msgstr "òÁÚÍÅÒ ÐÉËÓÅÌÑ: %g x %g"
#: ccdfunc.c:793
#: ccdfunc.c:789
msgid "Read grabbed image"
msgstr "óÞÉÔÙ×ÁÎÉÅ ÉÚÏÂÒÁÖÅÎÉÑ"
#: ccdfunc.c:759
#: ccdfunc.c:755
#, c-format
msgid "Readout mode: %s"
msgstr "òÅÖÉÍ ÓÞÉÔÙ×ÁÎÉÑ: %s"
@ -335,34 +335,34 @@ msgstr "
msgid "Server timeout"
msgstr "ôÁÊÍÁÕÔ ÓÅÒ×ÅÒÁ"
#: ccdfunc.c:721
#: ccdfunc.c:717
#, c-format
msgid "Set brightness to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ ÑÒËÏÓÔØ × %g"
#: ccdfunc.c:660
#: ccdfunc.c:654
#, c-format
msgid "Set fan speed to %d"
msgstr "îÅ ÍÏÇÕ ÕÓÔÁÎÏ×ÉÔØ ÓËÏÒÏÓÔØ ×ÅÎÔÉÌÑÔÏÒÏ× × %d"
#: ccdfunc.c:715
#: ccdfunc.c:711
#, c-format
msgid "Set gain to %g"
msgstr "õÓÔÁÎÏ×ÉÔØ Gain × %g"
#: ccdfunc.c:688
#: ccdfunc.c:683
#, c-format
msgid "Shutter command: %s\n"
msgstr "ëÏÍÁÎÄÁ ÚÁÔ×ÏÒÁ: %s\n"
#. "Попытка Ñ<>конфигурироваÑÑŒ порт I/O как %d\n"
#: ccdfunc.c:694
#: ccdfunc.c:689
#, c-format
msgid "Try to configure I/O port as %d"
msgstr "ðÏÐÙÔËÁ ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ ÐÏÒÔ I/O ËÁË %d"
#. "Попытка запиÑ<C2B8>и %d в порт I/O\n"
#: ccdfunc.c:706
#: ccdfunc.c:702
#, c-format
msgid "Try to write %d to I/O port"
msgstr "ðÏÐÙÔËÁ ÚÁÐÉÓÉ %d × ÐÏÒÔ I/O"
@ -375,7 +375,7 @@ msgstr "
msgid "Wheel device not pointed"
msgstr "õÓÔÒÏÊÓÔ×Ï ÔÕÒÅÌÉ ÎÅ ÕËÁÚÁÎÏ"
#: ccdfunc.c:571
#: ccdfunc.c:570
#, c-format
msgid "Wheel position should be from 0 to %d"
msgstr "ðÏÚÉÃÉÑ ËÏÌÅÓÁ ÄÏÌÖÎÁ ÂÙÔØ ÏÔ 0 ÄÏ %d"
@ -509,11 +509,11 @@ msgstr "
msgid "observing program name"
msgstr "ÎÁÚ×ÁÎÉÅ ÐÒÏÇÒÁÍÍÙ"
#: imageview.c:517
#: imageview.c:507 imageview.c:579
msgid "off"
msgstr "×ÙËÌ"
#: imageview.c:517
#: imageview.c:507 imageview.c:579
msgid "on"
msgstr "×ËÌ"

38
main.c
View File

@ -40,7 +40,7 @@ static int isserver = FALSE;
static pid_t childpid = 0;
void signals(int signo){
signal(signo, SIG_IGN);
if(signo) signal(signo, SIG_IGN);
if(childpid){ // master process
if(signo == SIGUSR1){ // kill child
kill(childpid, signo);
@ -56,7 +56,7 @@ void signals(int signo){
exit(signo);
}
// slave: cancel exposition
WARNX("Get signal %d - exit", signo);
if(signo) WARNX("Get signal %d - exit", signo);
if(!GP->client){
DBG("Cancel capturing");
cancel();
@ -64,8 +64,11 @@ void signals(int signo){
#ifdef IMAGEVIEW
DBG("KILL GL");
closeGL();
usleep(100000);
usleep(10000);
#endif
closewheel();
focclose();
closecam();
exit(signo);
}
@ -102,6 +105,8 @@ int main(int argc, char **argv){
if(!GP->client) isserver = TRUE;
}
if(GP->path && !GP->client) isserver = TRUE;
if(GP->client && (GP->commondev || GP->focuserdev || GP->cameradev || GP->wheeldev))
ERRX("Can't be client and standalone in same time!");
if(GP->logfile){
int lvl = LOGLEVEL_WARN + GP->verbose;
DBG("level = %d", lvl);
@ -119,15 +124,33 @@ int main(int argc, char **argv){
signal(SIGUSR1, signals); // restart server
// check for another running process in server and standalone mode
if(!GP->client) check4running(self, GP->pidfile);
if(!isserver && !GP->client){ // standalone mode
focusers();
if(!isserver){ // run in standalone or client mode
int camerainit = FALSE;
if(!GP->client){ // standalone mode
focusers(); // run focusers and wheels before showimage
wheels();
ccds();
camerainit = prepare_ccds();
}else{ // client mode
#ifdef IMAGEVIEW
if(GP->showimage) return viewer(NULL); // TODO
#endif
if(GP->path) return start_socket(isserver, GP->path, FALSE);
if(GP->port) return start_socket(isserver, GP->port, TRUE);
}
#ifdef IMAGEVIEW
if(GP->showimage){ // activate image vindow in capture or simple viewer mode
imagefunc imfn = NULL;
if(GP->cameradev || GP->commondev){if(camerainit) imfn = ccdcaptured;} // capture mode
else imfn = NULL; // TODO - simple file viewer
return viewer(imfn);
}
#endif
if(camerainit) ccds();
return 0;
}
LOGMSG("Started");
#ifndef EBUG
if(isserver){
unsigned int pause = 5;
while(1){
childpid = fork();
@ -145,7 +168,6 @@ int main(int argc, char **argv){
break;
}
}
}
#endif
if(GP->path) return start_socket(isserver, GP->path, FALSE);

View File

@ -1009,7 +1009,7 @@ void server(int sock){
}
focclose(focdev);
closewheel(wheeldev);
closecam(camdev);
closecam();
}
/**