/* This file is part of the origami distribution. (Amiga Port)
 *
 * Source code written by Thomas Hadig in October 1993
 * Version : 1.6.92.1, February 1994
 * (C) 1993-94 by Thomas Hadig
 * may be distributed unchanged ! (see copyright notes)
 */

/*{{{}}}*/
/*{{{  includes*/
#include <limits.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

#include <h/envvar_str.h>
#include <h/os.h>
#include <lib/ori_rc_lib.h>
#include <lib/ori_add_lib.h>
#include <h/getmsg.h>
/*}}}  */

/*{{{  get_prg_name*/
char *get_prg_name(char *arg0)
{
  if (arg0)
   { char *p;
   
     /*{{{  arg0 behind last path separator*/
     for (p=arg0;;)
      { switch (*p++)
         { case PATH_C:
           case ':':
              arg0=p;
           default:
              continue;
           case '\0':
              break;
         }
        break;
      }
     /*}}}  */
     /*{{{  cut at first .*/
     if (arg0[0]=='.')
        arg0++;
     for (p=arg0;;p++)
      { switch (*p)
         { case '.':
              *p='\0';
           case '\0':
              break;
           default:
              continue;
         }
        break;
      }
     /*}}}  */
   }
  else
     arg0="";
  return(arg0);
}
/*}}}  */
/*{{{  path_file_test*/
int path_file_test
 ( char * const buff,
   char **dir,
   char const * const pre,
   char const * const post
 )
{
  int l = _POSIX_PATH_MAX;

  /*{{{  cat first part of path to buff*/
  { char *s = *dir, *d = buff, c;

    while ((c= *s)&&(c!=LIST_C)&&(c!=LIST_C_1))
     { if (l--) *d++=c;
       s++;
     }
    *d='\0';
    *dir = c ? s+1 : s;
  }
  /*}}}  */
  /*{{{  maybe add slash*/
  if (*buff && l && buff[strlen(buff)-1]!=':')
   { strcat(buff,PATH_SEP);
     l--;
   }
  /*}}}  */
  /*{{{  add pre post*/
  if ((l-=strlen(pre))>0)
   { strcat(buff,pre);
     if ((l-=strlen(post))>0)
        strcat(buff,post);
   }
  /*}}}  */
  home_expand(buff);

  return(!access(buff,R_OK));
}
/*}}}  */
/*{{{  get_system_filename*/
char *get_system_filename
 ( char const * const ori_path,
   char const * base,
   char const * const ending,
   char * const name_default
 )
{
  static char keyfile[_POSIX_PATH_MAX+1];
  static char std_basename[]=STD_BASENAME;
  int prefix=!IS_ROOT((char*)base);
  int msg_wished;

  /*{{{  try all path in list*/
  {
    char *s=prefix?(char*)ori_path:(char*)"";

    do
       if (path_file_test(keyfile,&s,base,ending))
          return(keyfile);
    while (*s);
  }
  /*}}}  */
  /*{{{  for msg, try standard in ORIGAMI_PATH/STD_BASENAMEmsg*/
    if ((msg_wished=!strcmp(ending,MSG_ENDING)))
    /*{{{  try all path in list*/
     { char *s=(char*)ori_path;

      do
          if (path_file_test(keyfile,&s,std_basename,ending))
             return(keyfile);
      while (*s);
    }
    /*}}}  */
  /*}}}  */
  keyfile[0]='\0';
  if (name_default)
   /*{{{  create default name for error message*/
   { if (msg_wished)
        base=std_basename;
     else
      { strcpy(keyfile+1,base); base=keyfile+1; }
     if (msg_wished || prefix)
      { name_default[0]='[';
        strcat(name_default+1,ori_path);
        strcat(name_default,"]"PATH_SEP);
        strcat(name_default,base);
        strcat(name_default,ending);
      }
     else
      { strcpy(name_default,base);
        strcat(name_default,ending);
      }
   }
   /*}}}  */
  return(keyfile);
}
/*}}}  */
