%%
%% This is file `l3sys-shell.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% l3sys-shell.dtx  (with options: `package')
%% 
%% Copyright (C) 2018-2021 The LaTeX Project
%% 
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version.  The latest
%% version of this license is in the file:
%% 
%%    http://www.latex-project.org/lppl.txt
%% 
%% This file is part of the "l3experimental bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%% 
%% File: l3sys-shell.dtx
\RequirePackage{expl3}
\ProvidesExplPackage{l3sys-shell}{2021-02-18}{}
  {L3 Experimental system shell functions}
\scan_new:N \s__sys_stop
\quark_new:N \q__sys_nil
\__kernel_quark_new_conditional:Nn \__sys_quark_if_nil:N { F }
\cs_new:Npn \__sys_path_to_win:n #1
  {
    \exp_after:wN \__sys_path_to_win:w \tl_to_str:n {#1} ~ \s__sys_stop
  }
\cs_new:Npn \__sys_path_to_win:w #1 ~ #2 \s__sys_stop
  {
    \__sys_path_to_win:N #1 \q__sys_nil
    \tl_if_empty:nF {#2}
      {
        \c_space_tl
        \__sys_path_to_win:w #2 \s__sys_stop
      }
  }
\cs_new:Npn \__sys_path_to_win:N #1
  {
    \__sys_quark_if_nil:NF #1
      {
        \token_if_eq_meaning:NNTF #1 /
          { \c_backslash_str }
          {#1}
         \__sys_path_to_win:N
      }
  }
\cs_new_protected:Npx \sys_shell_cp:nn #1#2
  {
    \sys_if_shell_unrestricted:T
      {
        \sys_shell_now:x
          {
            \sys_if_platform_unix:T
              {
                cp~-f~ \exp_not:N \tl_to_str:n {#1} ~
                  \exp_not:N \tl_to_str:n {#2}
              }
            \sys_if_platform_windows:T
              {
                copy~/y~ \exp_not:N \__sys_path_to_win:n {#1} ~
                  \exp_not:N \__sys_path_to_win:n {#2}
              }
          }
      }
  }
\cs_new_protected:Npx \sys_shell_mkdir:n #1
  {
    \sys_if_shell_unrestricted:T
      {
        \sys_shell_now:x
          {
            \sys_if_platform_unix:T
              { mkdir~-p~ \exp_not:N \tl_to_str:n {#1} }
            \sys_if_platform_windows:T
              {
                if~not~exist~
                  \exp_not:N \__sys_path_to_win:n { #1 / nul } ~
                  mkdir~ \exp_not:N \__sys_path_to_win:n {#1}
              }
          }
      }
  }
\cs_new_protected:Npx \sys_shell_mv:nn #1#2
  {
    \sys_if_shell_unrestricted:T
      {
        \sys_shell_now:x
          {
            \sys_if_platform_unix:T
              {
                mv~ \exp_not:N \tl_to_str:n {#1} ~
                  \exp_not:N \tl_to_str:n {#2}
              }
            \sys_if_platform_windows:T
              {
                copy~/y~ \exp_not:N \__sys_path_to_win:n {#1} ~
                  \exp_not:N \__sys_path_to_win:n {#2}
                  \token_to_str:N & \token_to_str:N &
                  del~/f~/q~\exp_not:N \__sys_path_to_win:n {#1}
              }
          }
      }
  }
\cs_new_protected:Npx \sys_shell_rm:n #1
  {
    \sys_if_shell_unrestricted:T
      {
        \sys_shell_now:x
          {
            \sys_if_platform_unix:T
              { rm~-f~ \exp_not:N \tl_to_str:n {#1}  }
            \sys_if_platform_windows:T
              { del~/f~/q~ \exp_not:N \__sys_path_to_win:n {#1} }
          }
      }
  }
\cs_new_protected:Npx \sys_shell_rmdir:n #1
  {
    \sys_if_shell_unrestricted:T
      {
        \sys_shell_mkdir:n {#1}
        \sys_shell_now:x
          {
            \sys_if_platform_unix:T
              { rm~-rf~ \exp_not:N \tl_to_str:n {#1} }
            \sys_if_platform_windows:T
              { rmdir~/s~/q~ \exp_not:N \__sys_path_to_win:n {#1} }
          }
      }
  }
\tl_new:N \l__sys_tmp_tl
\cs_new_protected:Npx \sys_get_shell_pwd:N #1
  {
    \sys_if_shell_unrestricted:T
      {
        \exp_not:N \sys_get_shell:nnN
          {
            \sys_if_platform_unix:T { pwd }
            \sys_if_platform_windows:T { cd }
          }
          {
            \char_set_catcode_other:N \exp_not:N \\
            \char_set_catcode_other:N \exp_not:N \#
            \char_set_catcode_other:N \exp_not:N \~
            \char_set_catcode_other:N \exp_not:N \%
            \char_set_catcode_space:N \exp_not:N \ %
            \tex_endlinechar:D -1 \scan_stop:
          }
        \exp_not:N \l__sys_tmp_tl
        \str_set:NV #1 \exp_not:N \l__sys_tmp_tl
      }
  }
\cs_new_protected:Npx \sys_shell_split_ls:nN #1#2
  {
    \sys_if_shell_unrestricted:T
      {
        \exp_not:N \sys_get_shell:nnN
          {
            \sys_if_platform_unix:T { ls~-1~ #1 }
            \sys_if_platform_windows:T { dir~/b~ #1 }
          }
          {
            \ExplSyntaxOff
            \char_set_catcode_other:N \exp_not:N \\
            \char_set_catcode_other:N \exp_not:N \#
            \char_set_catcode_other:N \exp_not:N \~
            \char_set_catcode_other:N \exp_not:N \%
            \char_set_catcode_other:n { 13 }
          }
          \exp_not:N \l__sys_tmp_tl
        \str_set:NV \exp_not:N \l__sys_tmp_tl \exp_not:N \l__sys_tmp_tl
        \seq_set_split:NnV #2 { \char_generate:nn { `\^^M } { 12 } }
          \exp_not:N \l__sys_tmp_tl
        \seq_pop_right:NN #2 \exp_not:N \l__sys_tmp_tl
      }
  }
%% 
%%
%% End of file `l3sys-shell.sty'.
