3
3
#include " Common.h"
4
4
#include " Compression.h"
5
5
6
- // Äëÿ îáðàáîòêè îøèáîê âî âëîæåííûõ ïðîöåäóðàõ - longjmp ñèãíàëèçèðóåò ïðîöåäóðå âåðõíåãî óðîâíÿ î ïðîèçîøåäøåé îøèáêå
6
+ // Äëÿ îáðàáîòêè îøèáîê âî âëîæåííûõ ïðîöåäóðàõ - longjmp ñèãíàëèçèðóåò ïðîöåäóðå âåðõíåãî óðîâíÿ î ïðîèçîøåäøåé îøèáêå
7
7
int jmpready = FALSE ;
8
8
jmp_buf jumper;
9
9
@@ -117,19 +117,19 @@ void BigFree(void *address) throw()
117
117
118
118
119
119
// ****************************************************************************
120
- // Ôóíêöèè ïàðñèíãà è àðèôìåòèêè **********************************************
120
+ // Ôóíêöèè ïàðñèíãà è àðèôìåòèêè **********************************************
121
121
// ****************************************************************************
122
122
123
- // Êîïèðóåò ñòðî÷êó from â to, íî íå áîëåå len ñèìâîëîâ
123
+ // Êîïèðóåò ñòðî÷êó from â to, íî íå áîëåå len ñèìâîëîâ
124
124
void strncopy ( char *to, char *from, int len ) {
125
125
for (int i = len; --i && *from; ) *to++ = *from++;
126
126
*to = ' \0 ' ;
127
127
}
128
128
129
- // Ðàçáèòü ñòðîêó str íà ïîäñòðîêè, ðàçäåë¸ííûå ñèìâîëîì splitter.
130
- // Ðåçóëüòàò - â ñòðîêå str splitter çàìåíÿåòñÿ íà '\0'
131
- // è ìàññèâ result çàïîëíÿåòñÿ ññûëêàìè íà âûäåëåííûå â str ïîäñòðîêè + NULL (àíàëîãè÷íî argv)
132
- // Âîçâðàùàåò ÷èñëî íàéäåííûõ ïîäñòðîê
129
+ // Ðàçáèòü ñòðîêó str íà ïîäñòðîêè, ðàçäåë¸ííûå ñèìâîëîì splitter.
130
+ // Ðåçóëüòàò - â ñòðîêå str splitter çàìåíÿåòñÿ íà '\0'
131
+ // è ìàññèâ result çàïîëíÿåòñÿ ññûëêàìè íà âûäåëåííûå â str ïîäñòðîêè + NULL (àíàëîãè÷íî argv)
132
+ // Âîçâðàùàåò ÷èñëî íàéäåííûõ ïîäñòðîê
133
133
int split (char *str, char splitter, char **result_base, int result_size)
134
134
{
135
135
char **result = result_base;
@@ -147,7 +147,7 @@ int split (char *str, char splitter, char **result_base, int result_size)
147
147
return result-result_base;
148
148
}
149
149
150
- // Îáúåäèíèòü NULL-terminated ìàññèâ ñòðîê src â ñòðîêó result, ñòàâÿ ìåæäó ñòðîêàìè ðàçäåëèòåëü splitter
150
+ // Îáúåäèíèòü NULL-terminated ìàññèâ ñòðîê src â ñòðîêó result, ñòàâÿ ìåæäó ñòðîêàìè ðàçäåëèòåëü splitter
151
151
void join (char **src, char splitter, char *result, int result_size)
152
152
{
153
153
char *dst = result; *dst = ' \0 ' ;
@@ -159,7 +159,7 @@ void join (char **src, char splitter, char *result, int result_size)
159
159
}
160
160
}
161
161
162
- // Íàéòè ïàðàìåòð ñ çàäàííûì èìåíåì â ìàññèâå ïàðàìåòðîâ àëãîðèòìà
162
+ // Íàéòè ïàðàìåòð ñ çàäàííûì èìåíåì â ìàññèâå ïàðàìåòðîâ àëãîðèòìà
163
163
char *search_param (char **param, char *prefix)
164
164
{
165
165
for ( ; *param; param++)
@@ -168,8 +168,8 @@ char *search_param(char **param, char *prefix)
168
168
return NULL ;
169
169
}
170
170
171
- // Çàìåíÿåò â ñòðîêå original âñå âõîæäåíèÿ from íà to,
172
- // âîçâðàùàÿ âíîâü âûäåëåííóþ new ñòðîêó è îñâîáîæäàÿ îðèãèíàë, åñëè áûëà õîòü îäíà çàìåíà
171
+ // Çàìåíÿåò â ñòðîêå original âñå âõîæäåíèÿ from íà to,
172
+ // âîçâðàùàÿ âíîâü âûäåëåííóþ new ñòðîêó è îñâîáîæäàÿ îðèãèíàë, åñëè áûëà õîòü îäíà çàìåíà
173
173
char *subst (char *original, char *from, char *to)
174
174
{
175
175
while (1 ) {
@@ -184,7 +184,7 @@ char *subst (char *original, char *from, char *to)
184
184
}
185
185
}
186
186
187
- // Ïðîïóñêàåò ïðîáåëû â íà÷àëå ñòðîêè è óáèðàåò èõ â êîíöå, ìîäèôèöèðóÿ ñòðîêó
187
+ // Ïðîïóñêàåò ïðîáåëû â íà÷àëå ñòðîêè è óáèðàåò èõ â êîíöå, ìîäèôèöèðóÿ ñòðîêó
188
188
char *trim_spaces (char *s)
189
189
{
190
190
while (isspace (*s)) s++;
@@ -211,6 +211,12 @@ char *str_replace (char *orig, char *from, char *to)
211
211
else return strdup_msg (orig);
212
212
}
213
213
214
+ // If the string param contains a double, return it - otherwise set error=1
215
+ double parseDouble (char *param, int *error)
216
+ {
217
+ return atof (param) ;
218
+ }
219
+
214
220
// If the string param contains an integer, return it - otherwise set error=1
215
221
MemSize parseInt (char *param, int *error)
216
222
{
@@ -248,7 +254,8 @@ MemSize parseMem (char *param, int *error, char spec)
248
254
// Returns a string with the amount of memory
249
255
void showMem (MemSize mem, char *result)
250
256
{
251
- if (mem%gb==0 ) sprintf (result, " %.0lfgb" , double (mem/gb));
257
+ if (mem ==0 ) sprintf (result, " 0b" );
258
+ else if (mem%gb==0 ) sprintf (result, " %.0lfgb" , double (mem/gb));
252
259
else if (mem%mb==0 ) sprintf (result, " %.0lfmb" , double (mem/mb));
253
260
else if (mem%kb==0 ) sprintf (result, " %.0lfkb" , double (mem/kb));
254
261
else sprintf (result, " %.0lfb" , double (mem));
@@ -257,6 +264,8 @@ void showMem (MemSize mem, char *result)
257
264
// Returns a string with the amount of memory
258
265
void showMem64 (uint64 mem, char *result)
259
266
{
267
+ if (mem ==0 ) sprintf (result, " 0b" );
268
+ else
260
269
if (mem%terabyte==0 ) sprintf (result, " %.0lftb" , double (mem/terabyte));
261
270
else if (mem%gb==0 ) sprintf (result, " %.0lfgb" , double (mem/gb));
262
271
else if (mem%mb==0 ) sprintf (result, " %.0lfmb" , double (mem/mb));
@@ -265,7 +274,7 @@ void showMem64 (uint64 mem, char *result)
265
274
}
266
275
267
276
268
- // Êîäèðîâàíèå ñòðîêè â øåñòíàäöàòåðè÷íûé âèä ïëþñ \0
277
+ // Êîäèðîâàíèå ñòðîêè â øåñòíàäöàòåðè÷íûé âèä ïëþñ \0
269
278
void encode16 (const BYTE *src, int srcSize, char *dst)
270
279
{
271
280
for ( ; srcSize--; src++)
@@ -274,21 +283,21 @@ void encode16 (const BYTE *src, int srcSize, char *dst)
274
283
*dst++ = ' \0 ' ;
275
284
}
276
285
277
- // Äåêîäèðîâàíèå ñòðîêè, çàïèñàííîé â øåñòíàäöàòåðè÷íîì âèäå, â ïîñëåäîâàòåëüíîñòü áàéò
286
+ // Äåêîäèðîâàíèå ñòðîêè, çàïèñàííîé â øåñòíàäöàòåðè÷íîì âèäå, â ïîñëåäîâàòåëüíîñòü áàéò
278
287
void decode16 (const char *src, BYTE *dst)
279
288
{
280
289
for ( ; src[0 ] && src[1 ]; src+=2 )
281
290
*dst++ = char2int (src[0 ]) * 16 + char2int (src[1 ]);
282
291
}
283
292
284
- // ÎØÈÁÎ×ÍÎÅ äåêîäèðîâàíèå ñòðîêè, çàïèñàííîé â øåñòíàäöàòåðè÷íîì âèäå, â ïîñëåäîâàòåëüíîñòü áàéò
293
+ // ÎØÈÁÎ×ÍÎÅ äåêîäèðîâàíèå ñòðîêè, çàïèñàííîé â øåñòíàäöàòåðè÷íîì âèäå, â ïîñëåäîâàòåëüíîñòü áàéò
285
294
void buggy_decode16 (const char *src, BYTE *dst)
286
295
{
287
296
for ( ; src[0 ] && src[1 ]; src+=2 )
288
297
*dst++ = buggy_char2int (src[0 ]) * 16 + buggy_char2int (src[1 ]);
289
298
}
290
299
291
- // Îêðóãëÿåò ðàçìåð ïàìÿòè âíèç äî óäîáíîé âåëè÷èíû
300
+ // Îêðóãëÿåò ðàçìåð ïàìÿòè âíèç äî óäîáíîé âåëè÷èíû
292
301
MemSize rounddown_mem (MemSize n)
293
302
{
294
303
if (n < 32 *kb) return n;
@@ -516,7 +525,7 @@ int GetProcessorsCount (void)
516
525
517
526
void SetFileDateTime (CFILENAME Filename, time_t t)
518
527
{
519
- if (t<0 ) t=INT_MAX; // Èíà÷å ïîëó÷àåì âûëåò :(
528
+ if (t<0 ) t=INT_MAX; // Èíà÷å ïîëó÷àåì âûëåò :(
520
529
struct tm * t2 = gmtime (&t);
521
530
522
531
SYSTEMTIME t3;
@@ -571,7 +580,7 @@ int RunCommand (CFILENAME command, CFILENAME curdir, int wait_finish, SIMPLE_CAL
571
580
si.hStdError = (HANDLE) _get_osfhandle (2 );
572
581
PROCESS_INFORMATION pi ;
573
582
ZeroMemory (&pi , sizeof (pi ));
574
- DWORD ExitCode = 0 ; // êîä âîçâðàòà âûçûâàåìîé ïðîãðàììû
583
+ DWORD ExitCode = 0 ; // êîä âîçâðàòà âûçûâàåìîé ïðîãðàììû
575
584
576
585
BOOL process_created = CreateProcessW (NULL , command, NULL , NULL , TRUE , 0 , NULL , curdir, &si, &pi );
577
586
if (callback)
@@ -606,7 +615,7 @@ void RunFile (CFILENAME filename, CFILENAME curdir, int wait_finish)
606
615
CloseHandle (sei.hProcess );
607
616
}
608
617
609
- // Âåðñèÿ Windows
618
+ // Âåðñèÿ Windows
610
619
#define CheckWinVersion (ver ) (GetWinVersion() >= ver)
611
620
612
621
#define WIN_VERSION_VISTA 0x600
@@ -631,23 +640,23 @@ int GetWinVersion()
631
640
#define THREAD_MODE_BACKGROUND_END 0x00020000
632
641
#endif
633
642
634
- // Óñòàíîâèòü ïðèîðèòåò òðåäà êàêîé ïîëàãàåòñÿ äëÿ òðåäîâ ñæàòèÿ (ðàñïàêîâêè, øèôðîâàíèÿ...).
635
- // Èñïîëüçóåòñÿ äëÿ òðåäîâ, êîòîðûå âûïîëíÿþò òîëüêî ñæàòèå
643
+ // Óñòàíîâèòü ïðèîðèòåò òðåäà êàêîé ïîëàãàåòñÿ äëÿ òðåäîâ ñæàòèÿ (ðàñïàêîâêè, øèôðîâàíèÿ...).
644
+ // Èñïîëüçóåòñÿ äëÿ òðåäîâ, êîòîðûå âûïîëíÿþò òîëüêî ñæàòèå
636
645
void SetCompressionThreadPriority (void )
637
646
{
638
647
SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_BELOW_NORMAL);
639
648
}
640
649
641
- // Âðåìåííî óñòàíîâèòü ïðèîðèòåò òðåäà êàêîé ïîëàãàåòñÿ äëÿ òðåäîâ ñæàòèÿ (ðàñïàêîâêè, øèôðîâàíèÿ...)
642
- // è âîçâðàòèòü ñòàðîå çíà÷åíèå óðîâíÿ ïðèîðèòåòà. Èñïîëüçóåòñÿ äëÿ òðåäîâ, âðåìåííî âûïîëíÿþùèõ çàäà÷è ñæàòèÿ
650
+ // Âðåìåííî óñòàíîâèòü ïðèîðèòåò òðåäà êàêîé ïîëàãàåòñÿ äëÿ òðåäîâ ñæàòèÿ (ðàñïàêîâêè, øèôðîâàíèÿ...)
651
+ // è âîçâðàòèòü ñòàðîå çíà÷åíèå óðîâíÿ ïðèîðèòåòà. Èñïîëüçóåòñÿ äëÿ òðåäîâ, âðåìåííî âûïîëíÿþùèõ çàäà÷è ñæàòèÿ
643
652
int BeginCompressionThreadPriority (void )
644
653
{
645
654
DWORD dwThreadPriority = GetThreadPriority (GetCurrentThread ());
646
655
SetCompressionThreadPriority ();
647
656
return dwThreadPriority;
648
657
}
649
658
650
- // Âîññòàíîâèòü ïðèîðèòåò òðåäà òàêèì, êàê ìû åãî çàïîìíèëè
659
+ // Âîññòàíîâèòü ïðèîðèòåò òðåäà òàêèì, êàê ìû åãî çàïîìíèëè
651
660
void EndCompressionThreadPriority (int old_priority)
652
661
{
653
662
SetThreadPriority (GetCurrentThread (), old_priority);
@@ -658,6 +667,7 @@ void EndCompressionThreadPriority (int old_priority)
658
667
659
668
#include < unistd.h>
660
669
#include < sys/resource.h>
670
+ #include < sys/sysctl.h>
661
671
662
672
uint64 GetPhysicalMemory (void )
663
673
{
@@ -666,7 +676,16 @@ uint64 GetPhysicalMemory (void)
666
676
667
677
uint64 GetAvailablePhysicalMemory (void )
668
678
{
679
+ #if defined(_SC_AVPHYS_PAGES)
669
680
return uint64 (sysconf (_SC_AVPHYS_PAGES)) * sysconf (_SC_PAGE_SIZE);
681
+ #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__minix)
682
+ unsigned long page_count = 0 ;
683
+ size_t page_count_size = sizeof (page_count);
684
+ sysctlbyname (" hw.availpages" , &page_count, &page_count, NULL , 0 );
685
+ return page_count * sysconf (_SC_PAGE_SIZE);
686
+ #else
687
+ # error "There's no support for memory stats on your system."
688
+ #endif
670
689
}
671
690
672
691
int GetProcessorsCount (void )
@@ -676,7 +695,7 @@ int GetProcessorsCount (void)
676
695
677
696
void SetFileDateTime (CFILENAME Filename, time_t t)
678
697
{
679
- if (t<0 ) t=INT_MAX; // Èíà÷å ïîëó÷àåì âûëåò :(
698
+ if (t<0 ) t=INT_MAX; // Èíà÷å ïîëó÷àåì âûëåò :(
680
699
struct stat st;
681
700
stat (Filename, &st);
682
701
struct utimbuf times;
@@ -715,23 +734,23 @@ void RunFile (CFILENAME filename, CFILENAME curdir, int wait_finish)
715
734
RunCommand (filename, curdir, wait_finish, NULL , NULL );
716
735
}
717
736
718
- // Óñòàíîâèòü ïðèîðèòåò òðåäà êàêîé ïîëàãàåòñÿ äëÿ òðåäîâ ñæàòèÿ (ðàñïàêîâêè, øèôðîâàíèÿ...).
719
- // Èñïîëüçóåòñÿ äëÿ òðåäîâ, êîòîðûå âûïîëíÿþò òîëüêî ñæàòèå
737
+ // Óñòàíîâèòü ïðèîðèòåò òðåäà êàêîé ïîëàãàåòñÿ äëÿ òðåäîâ ñæàòèÿ (ðàñïàêîâêè, øèôðîâàíèÿ...).
738
+ // Èñïîëüçóåòñÿ äëÿ òðåäîâ, êîòîðûå âûïîëíÿþò òîëüêî ñæàòèå
720
739
void SetCompressionThreadPriority (void )
721
740
{
722
741
int old = getpriority (PRIO_PROCESS, 0 );
723
742
setpriority (PRIO_PROCESS, 0 , old+1 );
724
743
}
725
744
726
- // Âðåìåííî óñòàíîâèòü ïðèîðèòåò òðåäà êàêîé ïîëàãàåòñÿ äëÿ òðåäîâ ñæàòèÿ (ðàñïàêîâêè, øèôðîâàíèÿ...)
745
+ // Âðåìåííî óñòàíîâèòü ïðèîðèòåò òðåäà êàêîé ïîëàãàåòñÿ äëÿ òðåäîâ ñæàòèÿ (ðàñïàêîâêè, øèôðîâàíèÿ...)
727
746
int BeginCompressionThreadPriority (void )
728
747
{
729
748
int old = getpriority (PRIO_PROCESS, 0 );
730
- // setpriority(PRIO_PROCESS, 0, old+1); çàêîììåíòèðîâàíî èç-çà ïðîáëåì ñ âîññòàíîâëåíèåì ñòàðîãî ïðèîðèòåòà :(
749
+ // setpriority(PRIO_PROCESS, 0, old+1); çàêîììåíòèðîâàíî èç-çà ïðîáëåì ñ âîññòàíîâëåíèåì ñòàðîãî ïðèîðèòåòà :(
731
750
return old;
732
751
}
733
752
734
- // Âîññòàíîâèòü ïðèîðèòåò òðåäà òàêèì, êàê ìû åãî çàïîìíèëè
753
+ // Âîññòàíîâèòü ïðèîðèòåò òðåäà òàêèì, êàê ìû åãî çàïîìíèëè
735
754
void EndCompressionThreadPriority (int old_priority)
736
755
{
737
756
// setpriority(PRIO_PROCESS, 0, old_priority);
@@ -740,7 +759,7 @@ void EndCompressionThreadPriority (int old_priority)
740
759
#endif // Windows/Unix
741
760
742
761
743
- // Ñîçäàòü êàòàëîãè íà ïóòè ê name
762
+ // Ñîçäàòü êàòàëîãè íà ïóòè ê name
744
763
void BuildPathTo (CFILENAME name)
745
764
{
746
765
CFILENAME path_ptr = NULL ;
@@ -762,7 +781,7 @@ void BuildPathTo (CFILENAME name)
762
781
763
782
764
783
// ****************************************************************************************************************************
765
- // ÏÎÄÄÅÐÆÊÀ ÑÏÈÑÊÀ ÂÐÅÌÅÍÍÛÕ ÔÀÉËÎÂ È ÓÄÀËÅÍÈÅ ÈÕ ÏÐÈ ÀÂÀÐÈÉÍÎÌ ÂÛÕÎÄÅ ÈÇ ÏÐÎÃÐÀÌÌÛ ******************************************
784
+ // ÏÎÄÄÅÐÆÊÀ ÑÏÈÑÊÀ ÂÐÅÌÅÍÍÛÕ ÔÀÉËÎÂ È ÓÄÀËÅÍÈÅ ÈÕ ÏÐÈ ÀÂÀÐÈÉÍÎÌ ÂÛÕÎÄÅ ÈÇ ÏÐÎÃÐÀÌÌÛ ******************************************
766
785
// ****************************************************************************************************************************
767
786
768
787
// Table of temporary files that should be deleted on ^Break
@@ -801,7 +820,7 @@ void removeTemporaryFiles (void)
801
820
#ifndef FREEARC_NO_TIMING
802
821
803
822
// *****************************************************************************
804
- // Âûâîä çàãîëîâêà îêíà *******************************************************
823
+ // Âûâîä çàãîëîâêà îêíà *******************************************************
805
824
// *****************************************************************************
806
825
807
826
#ifdef FREEARC_WIN
@@ -810,7 +829,7 @@ void removeTemporaryFiles (void)
810
829
TCHAR Saved_Title[MY_FILENAME_MAX+1000 ];
811
830
bool Saved = FALSE , SavedA = FALSE ;
812
831
813
- // Óñòàíîâèòü çàãîëîâîê êîíñîëüíîãî îêíà
832
+ // Óñòàíîâèòü çàãîëîâîê êîíñîëüíîãî îêíà
814
833
void EnvSetConsoleTitle (TCHAR *title)
815
834
{
816
835
if (!Saved && !SavedA) {
@@ -828,7 +847,7 @@ void EnvSetConsoleTitleA (char *title)
828
847
SetConsoleTitleA (title);
829
848
}
830
849
831
- // Âîññòàíîâèòü çàãîëîâîê, êîòîðûé áûë â íà÷àëå ðàáîòû ïðîãðàììû
850
+ // Âîññòàíîâèòü çàãîëîâîê, êîòîðûé áûë â íà÷àëå ðàáîòû ïðîãðàììû
832
851
void EnvResetConsoleTitle (void )
833
852
{
834
853
if (Saved) {
@@ -950,7 +969,7 @@ void Install_signal_handler (void (__cdecl *signal_handler)(int))
950
969
// Windows 7 taskbar progress indicator ***************************************
951
970
// *****************************************************************************
952
971
953
- #ifdef FREEARC_WIN2
972
+ #ifdef FREEARC_WIN_VSTUDIO
954
973
955
974
// Include Win7-specific defines unless on GCC3
956
975
#if !defined(__GNUC__) || __GNUC__>=4
0 commit comments