Clément Vuchener
c2584d615c
Define MapExtras::BiomeInfo::MAX_LAYERS ( #1496 )
...
Definition is required even for constexpr variables in some compilation
setups (e.g. debug builds).
2020-02-15 01:22:58 -06:00
Ben Lubar
9caf6e97e6
add -enums, -sizes, and specific starting point flags to check-structures-sanity
2020-02-14 19:47:26 -06:00
Ben Lubar
f7f7bd7ca7
update structures
2020-02-13 21:23:42 -06:00
Ben Lubar
69c4f5c972
update structures
2020-02-13 02:12:26 -06:00
Ben Lubar
8fe950f815
update structures
...
sizecheck no longer segfaults on the medium world
2020-02-13 00:52:00 -06:00
Ben Lubar
3996189f9f
update structures and scripts
2020-02-12 23:52:58 -06:00
Ben Lubar
e9a295c788
update structures
2020-02-12 19:00:18 -06:00
Ben Lubar
b754192f2d
update structures
2020-02-12 16:18:05 -06:00
Ben Lubar
ddc3cfcfbc
update structures
2020-02-12 13:34:04 -06:00
Ben Lubar
7bb921be19
update structures
2020-02-12 11:35:58 -06:00
Ben Lubar
3c9f6f79ab
fix some warnings
2020-02-10 19:35:17 -06:00
Ben Lubar
7b9ea1f1b6
update structures
2020-02-10 18:23:57 -06:00
Ben Lubar
69611ab325
exit if a fatal startup error is encountered while in headless mode ( #1491 )
2020-02-09 18:05:09 -06:00
Ben Lubar
5b56125ad6
update structures
2020-02-08 23:02:25 -06:00
Ben Lubar
b375586b67
Update to DF 0.47.02
2020-02-07 16:00:53 -06:00
Ben Lubar
0243e422e5
Allow plugins to define subclasses of dfhack_viewscreen that have their own virtual_identity.
2020-02-07 16:00:14 -06:00
Ben Lubar
5db7d518ee
update structures; fix some minor compile warnings
2020-02-05 12:35:43 -06:00
Ben Lubar
321d948f8d
Fix crash on missing symbols.
...
Fixes #1487 .
2020-02-03 20:21:10 -06:00
Ben Lubar
9c52b4e5e6
update structures
2020-02-02 17:31:01 -06:00
Ben Lubar
dfc90fe660
Update df-structures and scripts.
2020-02-02 17:10:11 -06:00
Ben Lubar
62e3802d26
Update to DF 0.47.01
2020-01-29 14:51:48 -06:00
lethosor
815821eb93
Merge branch 'develop' into cmake-cleanup
...
Conflicts:
depends/lua/CMakeLists.txt
plugins/CMakeLists.txt
plugins/devel/CMakeLists.txt
2020-01-18 22:28:43 -05:00
lethosor
bb9bc4e353
Update submodules
2020-01-18 18:52:32 -05:00
Ben Lubar
96d8dffd32
Make dfhack.run_command return the command_result value.
...
Rename local variables to match dfhack.run_command_silent for clarity.
2020-01-14 17:53:52 -06:00
lethosor
47fa9e1159
Update authors, submodules
2020-01-13 23:35:31 -05:00
lethosor
5eca50476e
Merge remote-tracking branch 'nornagon/unit-description' into develop
2020-01-13 23:31:23 -05:00
Ben Lubar
be5dc2d4a4
Make Units::isGay act consistently when called on an asexual unit.
...
The function appears to be used to determine whether heterosexual relationships are possible, so asexual units will always return true for isGay.
Old behavior was to treat asexual units as male.
2020-01-09 14:48:30 -06:00
Jeremy Apthorp
5de368a1ed
unit_{=> get_}physical_description
2020-01-04 22:17:03 +11:00
Jeremy Apthorp
7644dde9e4
default to empty description if symbol unavailable
2019-12-14 12:01:13 -08:00
Jeremy Apthorp
50e696acf6
getDescription => getPhysicalDescription
2019-12-14 09:36:47 -08:00
Jeremy Apthorp
7fce6fe0b0
move THISCALL define to header, clean up code a little
2019-12-13 23:54:27 -08:00
Jeremy Apthorp
dfab521a71
specify __thiscall
...
According to https://docs.microsoft.com/en-us/cpp/cpp/thiscall?view=vs-2019 , "on ARM and x64 machines, __thiscall is accepted and ignored by the compiler.". So it should be OK to specify this for all win32
2019-12-12 17:51:41 -08:00
Jeremy Apthorp
9a37849603
use symbols.xml
2019-12-07 22:41:55 -08:00
Jeremy Apthorp
910f965838
wip
2019-12-07 22:17:59 -08:00
lethosor
49563b4618
Merge remote-tracking branch 'warmist/FilteredListFix' into develop
2019-11-02 16:28:06 -04:00
lethosor
08aeb6faeb
Fix EventManager building ID type
...
The pointer to the building ID was sometimes not dereferenced properly.
Addressed by switching to an ID cast to a pointer type for consistency with
other types of events.
Fixes #1434
Ref #1003 (19695b4ee7
)
Broken in #1253 (a7dfacd1c5
)
2019-10-05 20:26:31 -04:00
lethosor
7d5970303f
Update xml ( dfhack/df-structures#286 )
2019-10-04 00:14:08 -04:00
lethosor
ca7d0f1cac
Add algorithm include for MSVC
2019-10-03 23:26:57 -04:00
lethosor
f3658db85f
Merge branch 'develop' into avoid_rebuilding_df_statics_if_core_h_changes
2019-10-03 23:23:36 -04:00
Warmist
a2b5c1ddd9
lua/widgets filtered list input fix
...
FilteredList was not consuming input events.
2019-09-30 22:00:06 +03:00
lethosor
ac5a54c8db
Merge branch 'develop' into cmake-cleanup
...
Conflicts:
library/CMakeLists.txt
plugins/CMakeLists.txt
2019-08-23 23:58:00 -04:00
Alan
0f4162acc9
Merge pull request #1402 from BenLubar/persist
...
Add Persistence module.
2019-08-23 23:37:06 -04:00
lethosor
222b88063c
Update submodules
2019-08-23 21:37:50 -04:00
lethosor
2ef46562c8
Avoid calling doSaveData twice when unloading a world
...
This was happening because of a switch to viewscreen_game_cleanerst and back to
viewscreen_savegamest when saving
2019-08-23 20:45:35 -04:00
lethosor
100e584c34
Fix saving persistent data on regular save
2019-08-23 20:30:06 -04:00
lethosor
07575095fd
Merge branch 'develop' into persist
2019-08-22 22:00:50 -04:00
lethosor
88757d5c27
Merge branch 'develop' into cmake-cleanup
2019-07-20 19:22:33 -04:00
lethosor
99038c395a
Merge remote-tracking branch 'ab9rf/biometype' into develop
2019-07-20 16:32:46 -04:00
lethosor
8a07426643
Merge branch 'develop' into cmake-cleanup
2019-07-20 15:15:39 -04:00
Pauli
49f3de979f
Make ServerMain and ServerConnection data race free
...
RemoteServer and PluginManager side would need complete redesign to be
data race free and concurrent. But as that would be unlikely to be
required from DFHack I decided simpler solution that is fixing data
ownership to a thread and all ServerConnection share a single lock which
allows access to PluginManager and Core.
2019-07-18 23:05:11 -04:00
Pauli
0605b9601c
Make Core::started thread safe
2019-07-18 23:05:11 -04:00
Pauli
0ed5c8db39
Fix data race between threaded init and EventManager
...
The initial run_dfhack_init loads shared state information that is used
by EventManager when state changes. There is a small risk that
EventManager can handle events while run_dfhack_init is still running.
2019-07-18 23:04:40 -04:00
lethosor
76da2c2aaf
Clean up CMakeLists.txt style
2019-07-16 22:19:11 -04:00
lethosor
b60faa8021
dfhack-run: add note about installation when called with no arguments
2019-07-13 15:51:46 -04:00
lethosor
c125926727
Update submodules and Authors.rst
...
Ref #1432
Ref dfhack/stonesense#54
Ref dfhack/scripts#93
2019-07-10 19:21:23 -04:00
lethosor
5b11d14c6c
Rename save/load to "save data"/"load data"
2019-05-29 19:52:03 -04:00
lethosor
ceebef5fe2
Merge branch 'develop' into persist
2019-05-28 21:08:16 -04:00
lethosor
dd9c433f17
Use BYPRODUCTS to keep ninja builds from re-running codegen every time
...
This partially reverts f02466de8a
, but behavior
should be the same under MSVC, which that commit attempted to fix. From
https://cmake.org/cmake/help/v3.14/command/add_custom_command.html :
> The `BYPRODUCTS` option is ignored on non-Ninja generators except to mark
> byproducts `GENERATED`.
Since `$GENERATED_HDRS` are already marked generated, this change should have
no effect on non-Ninja generators.
2019-05-13 19:47:39 -04:00
lethosor
32a0ab9679
Update submodules
2019-05-11 23:34:59 -04:00
lethosor
e5eade1ad7
Make gui.dwarfmode.{get_movement_delta,get_hotkey_target} public
2019-04-30 16:53:09 -04:00
lethosor
6c266075de
Console-posix: fix crash with prompts longer than screen width
...
Also add an extra fallback check around substr
Fixes #1425
2019-01-15 21:06:49 -05:00
Pauli
f0632347d0
Remove Core.h include from DataDefs.h
...
Core.h isn't required for DataDefs.h which removes Core.h dependency
from DataStatics*.
2018-12-30 17:08:42 -05:00
lethosor
e74946f62e
Update xml and related changelog entries
2018-12-27 17:37:13 -05:00
lethosor
a2f8742128
Merge remote-tracking branch 'suokko/runtime_debug_prints' into develop
...
Also fix and reorganize changelog
2018-12-27 16:28:25 -05:00
lethosor
13c6bfc1b2
Merge remote-tracking branch 'sgayda2/memory_fixes' into develop
2018-12-22 11:54:31 -05:00
lethosor
b913076451
Update xml, stonesense, changelog
...
Merged DFHack/df-structures#296 and (modified) attached changelog
entry
2018-11-24 17:09:24 -05:00
lethosor
368f8d0504
Remove and replace checks for OnBreak
2018-11-24 14:52:26 -05:00
Kelly Kinkade
02f047e9f1
a pox on whitespace
2018-09-11 18:41:32 -05:00
Kelly Kinkade
3817773b5a
eliminate stray whitespace
2018-09-11 17:32:33 -05:00
Ben Lubar
10267f3e70
Only save on the first frame of the save screen.
2018-08-26 19:11:41 -05:00
Ben Lubar
a672ffcb95
Use viewscreen_savegamest instead of viewscreen_optionst
2018-08-26 19:05:44 -05:00
Ben Lubar
4e690df96a
Add Persistence module.
...
Alter World to use Persistence instead of storing data in historical figures.
Fake historical figures will be converted to the new format when a world is loaded.
Added plugin_save and plugin_load functions to the plugin API.
Made the weird int7/int28 code that was in the old persistence API slightly safer.
2018-08-26 18:27:58 -05:00
Kelly Kinkade
338572d270
resolve uninitialized variable warning
2018-08-16 12:15:56 -05:00
Kelly Kinkade
59d70d6687
Add function to infer biome type to Maps module
...
This moves code intended to infer biome type currently living in a
couple of plugins into the Maps module, so that this code can be shared
more easily by multiple plugins, as discussed in #1392 .
2018-08-15 20:28:18 -05:00
lethosor
e56cb2a25a
Update xml (setup_character_info.skill_points_remaining)
2018-08-04 00:59:15 -04:00
Lethosor
9bd5ecd738
Merge pull request #1372 from BenLubar/dfhack-viewscreen-identity
...
Add an identity to dfhack_viewscreen and dfhack_lua_viewscreen.
2018-07-26 16:06:24 -04:00
Ben Lubar
4837e65322
Add an identity to dfhack_viewscreen and dfhack_lua_viewscreen.
2018-07-22 17:31:39 -05:00
lethosor
c53353fc28
Update changelog, xml
2018-07-20 23:29:24 -04:00
lethosor
163c9b4059
Add utils.OrderedTable, make test order consistent
...
Also added OrderedTable tests and comment support to expect.*()
2018-07-19 12:40:25 -04:00
lethosor
063602349c
Add a basic test library and a couple GUI module tests (squashed)
...
Also modified Core/Console a bit to get this to actually produce output on
Travis (DFHACK_DISABLE_CONSOLE now allows console output, just not input)
Squashed merge from lethosor/tests
2018-07-18 14:29:13 -04:00
lethosor
3b44c18576
Followups for #1325
...
- Fix git tag detection
- Fix changelog entry position
- Update/clean up docs some
2018-07-17 00:58:49 -04:00
lethosor
1d6c3dc871
Merge remote-tracking branch 'suokko/fix_cmake_dependencies_to_generated_headers' into develop
2018-07-17 00:24:18 -04:00
Stoyan Gaydarov
38cccdb0f4
Update the module create calls to return unique_ptrs
2018-07-14 19:55:25 -07:00
Stoyan Gaydarov
6f90273bb6
More usage of smart pointers throughout core and version info.
2018-07-14 19:55:25 -07:00
Stoyan Gaydarov
699f864110
use dts::make_unique instead of new
2018-07-14 19:51:46 -07:00
Stoyan Gaydarov
6cfd987c0d
Remove an outdated comment, with c++11 enabled the code is thread safe
2018-07-14 19:51:46 -07:00
Stoyan Gaydarov
12c8046f90
Some memory management changes for Core
2018-07-14 19:51:46 -07:00
Stoyan Gaydarov
b5ddde8475
Use a shared_ptr to avoid having to manage VersionInfo vector memory
2018-07-14 19:51:46 -07:00
Stoyan Gaydarov
c127ceab96
Use a unique_ptr for VersionInfo to avoid worrying about memory
2018-07-14 19:51:46 -07:00
lethosor
790d16cc1c
Merge remote-tracking branch 'sgayda2/call_once' into develop
2018-07-14 21:08:15 -04:00
Stoyan Gaydarov
99d05117ab
fix a return statement in FirstCall
2018-07-14 12:15:52 -07:00
lethosor
c2a64b3573
Update changelog, xml, bump to r1
2018-07-13 21:16:35 -04:00
lethosor
f85b2c2b3c
Merge branch 'develop' of gh:dfhack/dfhack into develop
2018-07-13 20:00:52 -04:00
lethosor
78f2431c93
Update xml
2018-07-13 19:59:46 -04:00
Ben Lubar
b44789285c
Fix Windows df-structures stubs failing to compile if the option to keep symbols is specified.
2018-07-13 15:49:37 -05:00
Pauli
f02466de8a
Correct codegen.pl output dependecies for VC
...
The change allows correct and optimized incremental builds with VC and
ninja but unix makefile backend will rebuild everything if anything
changes in structures.
2018-07-13 17:01:36 +03:00
Pauli
bc8b8ef256
Use configure_file to optimize incremental builds for git-describe.h
2018-07-13 16:07:46 +03:00
Pauli
c92b52537c
Only run once codegen.pl and git-describe.cmake with make
...
ninja has a single build file which avoided issues if multiple targets
depend on same files. But Unix Makefiles generator user recursive make
which requires each ADD_CUSTOM_COMMAND to have only one target depending
on them.
Then makefile generator also has stupid rule that it touches all
secundary output files if primary file has been updated.
It was surprising hard to find a version that actually works correctly
for both issues. Solution is using BYPRODUCTS and refactoring command
and target dependencies.
As a bonus this change now allows build to work from source tarball if
the tarball includes git-describe.h.
2018-07-13 15:23:54 +03:00
Pauli
fad9d58ac6
Keep git-describe.h in source tree
...
Temporary file goes to binary directory to avoid race between
simultanous builts.
2018-07-13 15:16:04 +03:00
Pauli
68d1dfa0da
Keep make output short
...
Without custom comment add_custom_command would list all target files.
2018-07-13 15:15:42 +03:00
Pauli
3f34ea196b
Fix build not to delete git-describe.h
...
make doesn't keep primary output file if secundary is missing.
always_rebuild must be primary output to make the phony command work
correctly.
2018-07-13 15:15:42 +03:00
Pauli
2956e654d4
Add dependency from codegen.pl to df/*.h
2018-07-13 15:15:42 +03:00
Pauli
5154370402
Add full paths to codegen.pl error messages
...
I noticed that relative paths were not correctly guessed by vim. I
decided to fix the paths to allow me quickly to jump to error line in
xml.
2018-07-13 15:15:42 +03:00
Pauli
b3b23e8278
Add dependency from git-describe.h to DFHackVersion.cpp
...
Using add_custom_command allows cmake to track dependency from command
to git-describe.h that is implicit dependency of DFHackVersion.cpp.
The change also fixes issues if there is multiple build directories and
git-describe.h missing but git-dsecribe.h.tmp is present.
2018-07-13 15:15:39 +03:00
lethosor
9ee368d456
Merge remote-tracking branch 'suokko/MapCache_reduce_latency_from_designation_to_jobs' into develop
2018-07-11 11:51:24 -04:00
lethosor
7afa3690bf
Add support for DFHACK_BUILD_ID
...
Used for BuildMaster builds, for example
2018-07-11 11:47:55 -04:00
lethosor
2d8be8f4ad
Update xml (dlsym vtables, dfhack/df-structures#282 )
2018-07-10 13:01:54 -04:00
lethosor
fa8c6724f6
Merge remote-tracking branch 'suokko/dlsym_libgraphics' into develop
2018-07-10 12:25:11 -04:00
lethosor
dd3c04eb26
Merge remote-tracking branch 'suokko/windows_crash_after_die' into develop
2018-07-10 11:57:10 -04:00
lethosor
06511340ab
Merge remote-tracking branch 'BenLubar/proto-docs' into develop
2018-07-10 11:26:31 -04:00
Pauli
7d92d3f48f
Fix the class vs struct warning
2018-07-10 18:24:34 +03:00
Pauli
5eea7198a9
Make Core::~Core safe to call after die
...
Fixes #1356
2018-07-10 18:24:34 +03:00
lethosor
4a842810d5
Update xml, changelog
2018-07-10 11:24:26 -04:00
Pauli
ce6af3d649
Use c++ standard std::_Exit instead of _exit
...
_exit seems to run dll unloading code which calls static destructors.
Standrd requires std::_Exit not to call destructors which makes using it
attractive in case MSVC actually follows the standard.
2018-07-10 18:21:09 +03:00
Pauli
96c9b8b864
Add windows emulation for RTLD_DEFAULT
...
I'm not sure if calling GetModuleHandle in static construction is safe.
But I assumme it is and works correctly.
There is still potential issue that documentation can be understood
meaning that the HMODULE will resolve only symbols from exe while
RTLD_DEFAULT resolves all global symbols.
2018-07-10 17:10:30 +03:00
Pauli
ca5c11603f
Support dlsym loading from libgraphics vtables
2018-07-10 17:08:23 +03:00
lethosor
2dac3c53c7
Add stress cutoffs to Units module, fix dwarfmonitor/manipulator
...
Fixes #1292
2018-07-09 15:59:12 -04:00
lethosor
46e53fc3b3
Make df2console only call df2utf if the output stream is a console
...
Fixes output in command-prompt, for example
2018-07-09 11:00:28 -04:00
lethosor
7fcc6be6f6
Update xml, changelog
2018-07-09 10:46:19 -04:00
Pauli
ab179bbf42
Fix crash when editing lines that are exactly console width
...
plen+cooked_cursor==cols => begin = -1 which is passed to substr. The
sign is incorrect as code should be removing a character from begin
instead of trying to add a character.
2018-07-09 16:12:39 +03:00
Stoyan Gaydarov
e96c6f07ce
fixes from comments
2018-07-08 15:53:26 -07:00
Stoyan Gaydarov
68770ecbf2
Use std::call_once to ensure thread safety and a single call to initialize the SDL pointers
2018-07-08 12:52:06 -07:00
lethosor
5d16e5a74c
Bump to 0.44.12-alpha1
2018-07-08 14:26:57 -04:00
lethosor
480907259c
Rename ui_sidebar_menus.command_line field
...
Ref dfhack/df-structures#277
2018-07-07 23:51:20 -04:00
lethosor
03b01048d7
Merge remote-tracking branch 'BenLubar/linked-list' into develop
2018-07-07 23:49:53 -04:00
lethosor
037e7e4901
Merge remote-tracking branch 'suokko/spotclean_ui_state_fix_1194' into develop
...
Moved/adjusted changelog entry
2018-07-07 18:08:53 -04:00
Pauli
dec61b89be
Fix windows ReadConsoleInput return value check
...
I messed up the check. I forgot that windows commonly has opposite
return values to posix and failed to check it from documentation.
Fixes 1345
2018-07-08 00:50:43 +03:00
lethosor
aa76b92662
Merge remote-tracking branch 'suokko/main_thread_ownership_for_df_ai' into develop
2018-07-06 16:37:06 -04:00
lethosor
c006df561e
Merge remote-tracking branch 'suokko/lua_printall_recurse' into develop
2018-07-06 14:25:35 -04:00
lethosor
be9affc8fb
Update xml, changelog
2018-07-06 14:22:46 -04:00
lethosor
dc6fd8d35c
Merge remote-tracking branch 'suokko/stl_printf_remove_extra_null' into develop
2018-07-06 11:09:39 -04:00
lethosor
54cf8b7dc3
Fix getVisibleName for units with identities
...
As of 0.44.11 (possibly 0.44.01), identity names take precedence over the
associated histfig names. Tested with:
https://drive.google.com/file/d/1bX5CQMqNsb_mjJOEOS4wBm4mGDLLs_cZ/view (#1279 )
http://dffd.bay12games.com/file.php?id=13428 (from http://www.bay12games.com/dwarves/mantisbt/view.php?id=10530 )
Fixes #1279
2018-07-06 11:06:04 -04:00
Ben Lubar
3b6a0738a0
Add check-rpc.py for Travis.
2018-07-04 15:32:06 -05:00
Pauli
d1a3f1a738
Allow canceling lineedit with ctrl+c
2018-07-04 15:21:25 +03:00
Pauli
a550e112c3
Allow temporary transfer of main logic thread ownership
...
Dependency to fix df-ai to work with the new CoreSuspender
2018-07-04 00:02:03 +03:00
Ben Lubar
dabe04cbf1
Rename bind argument proto -> plugin to avoid confusion.
2018-07-03 16:00:48 -05:00
Pauli
320e94a1eb
Avoid locking CoreSuspender second time in main thread
2018-07-04 00:00:06 +03:00
Ben Lubar
6839fde555
Remove execute permission on files that are not executables.
2018-07-03 15:37:16 -05:00
Pauli
8a3a05de24
Allow unloading plugins that use std::regex
2018-07-03 15:23:46 +03:00
Pauli
ee999ccbdf
Implement runtime debug print filtering
...
The runtime debug print filtering support dynamic debug print selection.
Tis patch only implements basic core support for filtering. The commands
to change the runtime filtering settings will be added in a following
patch.
But even with only this one can change filtering settings by editing
memory using a debugger. It can even be automated by using gdb break
point commands.
2018-07-03 15:23:46 +03:00
lethosor
616675f0ce
Merge remote-tracking branch 'suokko/kittens_data_race_fix' into develop
2018-07-03 00:30:36 -04:00
lethosor
c449041c11
Merge remote-tracking branch 'suokko/lua_List_setChoices_internal_table_1171' into develop
2018-07-03 00:27:22 -04:00
lethosor
c543a17250
Improve RPC port handling
...
- Use port from remote-server.json in dfhack-run
- Make DFHACK_RUN environment variable take priority over remote-server.json
- Log current port to stderr
2018-07-02 23:53:56 -04:00
lethosor
81a7ddcf92
Merge remote-tracking branch 'suokko/screen_show_memory_leak' into develop
2018-07-02 22:58:11 -04:00
lethosor
f0ff96f614
Merge remote-tracking branch 'suokko/multibyte_console' into develop
2018-07-02 10:55:03 -04:00
Ben Lubar
b5eb541fd3
Handle pointers back to the list link.
2018-06-30 23:04:27 -05:00
Ben Lubar
1606483e7e
perf improvement for DfLinkedList::end(), erase/insert/insert_after/push_front implementations
2018-06-30 23:04:26 -05:00
Ben Lubar
0b9d46712f
Run DfLinkedList::end's computations only when needed.
2018-06-30 23:04:26 -05:00
Ben Lubar
31d22967f8
Linked list
2018-06-30 23:04:26 -05:00
Pauli
ba1d3fcb6a
Add dfhack.printall_recurse to quickly print df containers
...
I often want to see multiple items quickly when trying to figure out
what states actually matter to an issue that I debug. I decided to make
it easier to quickly dump df structures with substructures and
containers. It will generate large amount of data which can be sometimes
slow to process manually. But processing can be automated using
dfhack-run lua ^<df data to inspect> and pipe to other tools (eg grep,
sed, perl, sort, uniq etc)
2018-06-30 22:31:49 +03:00