# License: AGPLv3-or-later # see files COPYRIGHT, LICENSE, and AGPL-3.0.txt included in canonical repository for details. # https://k.sfconservancy.org/NPO-Accounting/beancount-tools-in-Perl use strict; use warnings; our %BEANCOUNT_QUERY; my $IPC_GLUE = 'BeAn'; sub BeancountQueryInitialize { my %options = (create => 0, exclusive => 0, mode => 0600, destroy => 0); tie %BEANCOUNT_QUERY, 'IPC::Shareable', $IPC_GLUE, { %options } or die "BEANCOUNT_QUERY: tie failed: is the goffy beancount server running?\n"; } sub BeancountQuerySubmit($) { my($question) = @_; (tied %BEANCOUNT_QUERY)->shlock; $BEANCOUNT_QUERY{fifoName} = undef; $BEANCOUNT_QUERY{question} = $question; (tied %BEANCOUNT_QUERY)->shunlock; while (not defined $BEANCOUNT_QUERY{fifoName}) { sleep 1; } die "Ceci n'est pas une pipe: BEANCOUNT_QUERY{fifoName}, $BEANCOUNT_QUERY{fifoName}:$!" unless (-p $BEANCOUNT_QUERY{fifoName}); (tied %BEANCOUNT_QUERY)->shlock; return $BEANCOUNT_QUERY{fifoName}; } sub BeancountQueryComplete { $BEANCOUNT_QUERY{question} = undef; (tied %BEANCOUNT_QUERY)->shunlock; } 1;