mirror of
https://github.com/eddyem/fitsmaniplib.git
synced 2026-01-31 20:35:12 +03:00
keys manipulation OK
This commit is contained in:
parent
b8dc08bbfd
commit
65f2ed910a
@ -23,6 +23,7 @@
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct{
|
||||
@ -79,6 +80,12 @@ glob_pars *parse_args(int argc, char **argv){
|
||||
return &G;
|
||||
}
|
||||
|
||||
void ch(int s){
|
||||
signal(s, SIG_IGN);
|
||||
printf("signal: %d\n", s);
|
||||
signal(s, ch);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]){
|
||||
initial_setup();
|
||||
parse_args(argc, argv);
|
||||
@ -137,11 +144,27 @@ int main(int argc, char *argv[]){
|
||||
++ptr;
|
||||
}
|
||||
}
|
||||
// test for signals handler: ctrl+c, ctrl+z
|
||||
signal(SIGINT, ch);
|
||||
signal(SIGTSTP, ch);
|
||||
// protect critical zone blocking all possible signals:
|
||||
sigset_t mask, oldmask;
|
||||
sigfillset(&mask);
|
||||
sigprocmask(SIG_SETMASK, &mask, &oldmask);
|
||||
if(G.outfile){ // save result to new file
|
||||
FITS_write(G.outfile, f);
|
||||
}else{
|
||||
FITS_rewrite(f);
|
||||
}
|
||||
DBG("Written! Sleep for 2 seconds in ctitical section");
|
||||
sleep(2);
|
||||
// return ignoring
|
||||
DBG("Unblock signals, sleep for 2 seconds");
|
||||
sigprocmask(SIG_SETMASK, &oldmask, NULL);
|
||||
sleep(2);
|
||||
/*
|
||||
* Do something here
|
||||
*/
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
43
fits.c
43
fits.c
@ -22,6 +22,8 @@
|
||||
#include "FITSmanip.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <libgen.h> // dirname, basename
|
||||
#include <limits.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
@ -722,7 +724,7 @@ FITS *FITS_open(char *filename){
|
||||
FITS *fits = MALLOC(FITS, 1);
|
||||
int fst = 0;
|
||||
// use fits_open_diskfile instead of fits_open_file to prevent using of extended name syntax
|
||||
fits_open_diskfile(&fits->fp, filename, READWRITE, &fst); // READWRITE allows to modify files on-the-fly
|
||||
fits_open_diskfile(&fits->fp, filename, READONLY, &fst);
|
||||
if(fst){
|
||||
fits_report_error(stderr, fst);
|
||||
FITS_free(&fits);
|
||||
@ -805,7 +807,7 @@ static bool keylist_write(KeyList *kl, fitsfile *fp){
|
||||
|
||||
/**
|
||||
* @brief FITS_write - write FITS file to disk
|
||||
* @param filename - new filename
|
||||
* @param filename - new filename (with possible cfitsio additions like ! and so on)
|
||||
* @param fits - structure to write
|
||||
* @return TRUE if all OK
|
||||
*/
|
||||
@ -813,7 +815,7 @@ bool FITS_write(char *filename, FITS *fits){
|
||||
if(!filename || !fits) return FALSE;
|
||||
fitsfile *fp;
|
||||
int fst = 0;
|
||||
fits_create_diskfile(&fp, filename, &fst);
|
||||
fits_create_file(&fp, filename, &fst);
|
||||
DBG("create file %s", filename);
|
||||
if(fst){fits_report_error(stderr, fst); return FALSE;}
|
||||
int N = fits->NHDUs;
|
||||
@ -872,17 +874,34 @@ bool FITS_write(char *filename, FITS *fits){
|
||||
*/
|
||||
bool FITS_rewrite(FITS *fits){
|
||||
FNAME();
|
||||
char rlpath[PATH_MAX];
|
||||
if(realpath(fits->filename, rlpath)){do{ // got real path - try to make link
|
||||
char *d = strdup(rlpath);
|
||||
if(!d){ WARN("strdup()"); FREE(d); break; }
|
||||
char *dir = dirname(d);
|
||||
if(!dir){ WARN("dirname()"); FREE(d); break; }
|
||||
char newpath[PATH_MAX];
|
||||
char *nm = tmpnam(NULL);
|
||||
if(!nm){WARN("tmpnam()"); return FALSE;}
|
||||
char *fnm = strrchr(nm, '/');
|
||||
if(!fnm){WARN("strrchr()"); return FALSE;}
|
||||
++fnm;
|
||||
DBG("make link: %s -> %s", fits->filename, fnm);
|
||||
if(link(fits->filename, fnm)){
|
||||
WARN("link()");
|
||||
return FALSE;
|
||||
}
|
||||
if(!nm){ WARN("tmpnam()"); FREE(d); break; }
|
||||
char *fnm = basename(nm);
|
||||
if(!fnm){ WARN("basename()"); FREE(d); break; }
|
||||
snprintf(newpath, PATH_MAX, "%s/%s", dir, fnm);
|
||||
FREE(d);
|
||||
DBG("make link: %s -> %s", rlpath, newpath);
|
||||
if(link(rlpath, newpath)){ WARN("link()"); break; }
|
||||
if(unlink(rlpath)){ WARN("unlink()"); break; }
|
||||
if(FITS_write(rlpath, fits)){
|
||||
unlink(newpath);
|
||||
return TRUE;
|
||||
}
|
||||
// problems: restore old file
|
||||
if(link(newpath, rlpath)) WARN("link()");
|
||||
if(unlink(newpath)) WARN("unlink()");
|
||||
}while(0);}else WARN(_("Can't get real path for %s, use cfitsio to rewrite"), fits->filename);
|
||||
// Can't get realpath or some other error, try to use cfitsio
|
||||
snprintf(rlpath, PATH_MAX, "!%s", fits->filename);
|
||||
DBG("PATH: %s", rlpath);
|
||||
return FITS_write(rlpath, fits);
|
||||
}
|
||||
|
||||
/**************************************************************************************
|
||||
|
||||
Binary file not shown.
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-02-14 22:15+0300\n"
|
||||
"POT-Creation-Date: 2019-02-21 20:26+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"
|
||||
@ -18,70 +18,77 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#. / "îÅ ÍÏÇÕ ÓËÏÐÉÒÏ×ÁÔØ ÄÁÎÎÙÅ"
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:72
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:90
|
||||
msgid "Can't copy data"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:287
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:282
|
||||
msgid "No keywords in given HDU"
|
||||
msgstr ""
|
||||
|
||||
#. / "îÅ ÍÏÇÕ ÄÏÂÁ×ÉÔØ ÚÁÐÉÓØ × ÓÐÉÓÏË"
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:298
|
||||
msgid "Can't add record to list"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:351
|
||||
msgid "strdup() failed!"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:319
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:384
|
||||
#, c-format
|
||||
msgid "Can't read column %d!"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:333
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:398
|
||||
#, c-format
|
||||
msgid "Can't read column %d row %d!"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:342
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:407
|
||||
msgid "Can't read table data type"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:346
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:411
|
||||
msgid "Can't read table data unit"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:466
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:527
|
||||
msgid "Unsupported column data type!"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:599
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:662
|
||||
#, c-format
|
||||
msgid "Can't write table %s!"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:609
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:672
|
||||
#, c-format
|
||||
msgid "Can't write column %s!"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:650
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:751
|
||||
msgid "Can't read HDU"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:664
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:778
|
||||
msgid "Unknown HDU type"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:900
|
||||
#, c-format
|
||||
msgid "Can't get real path for %s, use cfitsio to rewrite"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:976
|
||||
msgid "Bad w, h or pxsz"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:1076
|
||||
msgid "Images with > 2 dimensions are not supported"
|
||||
msgstr ""
|
||||
|
||||
#. / "îÅ ÍÏÇÕ ÄÏÂÁ×ÉÔØ ÚÁÐÉÓØ × ÓÐÉÓÏË"
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:701
|
||||
msgid "Can't add record to list"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:715
|
||||
#, c-format
|
||||
msgid "Can't open image HDU #%d"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:724
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:1100
|
||||
#, c-format
|
||||
msgid "Found %d pixels with undefined value"
|
||||
msgstr ""
|
||||
|
||||
#. / îÅÐÒÁ×ÉÌØÎÙÊ ÔÉÐ ÄÁÎÎÙÈ
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:841
|
||||
msgid "Wrong data type"
|
||||
msgstr ""
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
msgid ""
|
||||
msgstr "Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-02-14 22:15+0300\n"
|
||||
"POT-Creation-Date: 2019-02-21 20:26+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,71 +16,79 @@ msgstr "Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Content-Type: text/plain; charset=koi8-r\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:976
|
||||
msgid "Bad w, h or pxsz"
|
||||
msgstr "Неверные значения w, h или pxsz"
|
||||
|
||||
#. / "îÅ ÍÏÇÕ ÄÏÂÁ×ÉÔØ ÚÁÐÉÓØ × ÓÐÉÓÏË"
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:701
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:298
|
||||
msgid "Can't add record to list"
|
||||
msgstr ""
|
||||
msgstr "Не могу добавить запись в список"
|
||||
|
||||
#. / "îÅ ÍÏÇÕ ÓËÏÐÉÒÏ×ÁÔØ ÄÁÎÎÙÅ"
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:72
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:90
|
||||
msgid "Can't copy data"
|
||||
msgstr ""
|
||||
msgstr "Не могу скопировать данные"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:715
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:900
|
||||
#, c-format
|
||||
msgid "Can't open image HDU #%d"
|
||||
msgstr ""
|
||||
msgid "Can't get real path for %s, use cfitsio to rewrite"
|
||||
msgstr "Не могу определить путь (realpath) к %s, использую cfitsio для "
|
||||
"перезаписи"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:650
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:751
|
||||
msgid "Can't read HDU"
|
||||
msgstr ""
|
||||
msgstr "Не могу прочесть HDU"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:333
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:398
|
||||
#, c-format
|
||||
msgid "Can't read column %d row %d!"
|
||||
msgstr ""
|
||||
msgstr "Не могу прочесть столбец %d строку %d"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:319
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:384
|
||||
#, c-format
|
||||
msgid "Can't read column %d!"
|
||||
msgstr ""
|
||||
msgstr "Не могу прочесть столбец %d!"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:342
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:407
|
||||
msgid "Can't read table data type"
|
||||
msgstr ""
|
||||
msgstr "Не могу прочесть тип данных таблицы"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:346
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:411
|
||||
msgid "Can't read table data unit"
|
||||
msgstr ""
|
||||
msgstr "Не могу прочесть единицы измерения данных таблицы"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:609
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:672
|
||||
#, c-format
|
||||
msgid "Can't write column %s!"
|
||||
msgstr ""
|
||||
msgstr "Не могу записать столбец %s!"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:599
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:662
|
||||
#, c-format
|
||||
msgid "Can't write table %s!"
|
||||
msgstr ""
|
||||
msgstr "Не могу записать таблицу %s!"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:724
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:1100
|
||||
#, c-format
|
||||
msgid "Found %d pixels with undefined value"
|
||||
msgstr ""
|
||||
msgstr "Найдено %d пикселей с неопределенными значениями"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:664
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:1076
|
||||
msgid "Images with > 2 dimensions are not supported"
|
||||
msgstr ""
|
||||
msgstr "Изображения с более чем двумя измерениями не поддерживаются"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:466
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:282
|
||||
msgid "No keywords in given HDU"
|
||||
msgstr "В данном HDU ключи отсутствуют"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:778
|
||||
msgid "Unknown HDU type"
|
||||
msgstr "Неизвестный тип HDU"
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:527
|
||||
msgid "Unsupported column data type!"
|
||||
msgstr ""
|
||||
msgstr "Неподдерживаемый тип данных столбца!"
|
||||
|
||||
#. / îÅÐÒÁ×ÉÌØÎÙÊ ÔÉÐ ÄÁÎÎÙÈ
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:841
|
||||
msgid "Wrong data type"
|
||||
msgstr ""
|
||||
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:287
|
||||
#: /home/eddy/C-files/FITSmaniplib/sharedlib_template/fits.c:351
|
||||
msgid "strdup() failed!"
|
||||
msgstr ""
|
||||
msgstr "Не удалось сделать strdup()!"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user