/pliant/admin/shell.pli
 
 1  # Copyright  Hubert Tonneau  hubert.tonneau@pliant.cx 
 2  # 
 3  # This program is free software; you can redistribute it and/or 
 4  # modify it under the terms of the GNU General Public License version 2 
 5  # as published by the Free Software Foundation. 
 6  # 
 7  # This program is distributed in the hope that it will be useful, 
 8  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 9  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 10  # GNU General Public License for more details. 
 11  # 
 12  # You should have received a copy of the GNU General Public License 
 13  # version 2 along with this program; if not, write to the Free Software 
 14  # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. 
 15   
 16  module "/pliant/language/context.pli" 
 17   
 18  if os_api="linux" 
 19    module "/pliant/language/stream.pli" 
 20    module "file.pli" 
 21    module "execute.pli" 
 22   
 23    constant unix_shell "/bin/sh" 
 24     
 25    function shell c -> retcode 
 26      arg Str c ; arg Int retcode 
 27      var Str temp := file_temporary 
 28      (var Stream s) open temp out+safe 
 29      writeline c 
 30      if s:is_crashed 
 31        return -1 
 32      close 
 33      var Str ostemp := file_os_name temp 
 34      if ostemp="" 
 35        return -2 
 36      retcode := execute unix_shell+" "+ostemp 
 37      file_delete temp 
 38   
 39    export shell 
 40   
 41  eif os_api="posix" 
 42   
 43    module "/pliant/language/os.pli" 
 44   
 45    function system cmd -> ret 
 46      arg Address cmd ; arg Int ret 
 47      external os_libc_filename "system" 
 48   
 49    function shell c -> retcode 
 50      arg Str c ; arg Int retcode 
 51      var Str sz := c+"[0]" 
 52      retcode := system sz:characters 
 53   
 54    export shell