| [895] | 1 | // This may look like C code, but it is really -*- C++ -*-
 | 
|---|
 | 2 | //
 | 
|---|
 | 3 | // $Id: utils.cc,v 1.1 2000-04-12 17:49:52 ansari Exp $
 | 
|---|
 | 4 | //
 | 
|---|
 | 5 | 
 | 
|---|
 | 6 | #include "machdefs.h"
 | 
|---|
 | 7 | #include "utils.h"
 | 
|---|
 | 8 | #include "pexceptions.h"
 | 
|---|
 | 9 | #include <string.h>
 | 
|---|
 | 10 | 
 | 
|---|
 | 11 | // MemCpy marche meme en cas de recouvrement.
 | 
|---|
 | 12 | void* MemCpy(void* dest, const void* source, size_t n)
 | 
|---|
 | 13 | {
 | 
|---|
 | 14 |   int i;   // THINK C ne veut pas du int i dans chaque for...
 | 
|---|
 | 15 |   if (dest < source)
 | 
|---|
 | 16 |     for (i=0; i<n; i++)
 | 
|---|
 | 17 |       ((char*)dest)[i] = ((char*)source)[i];
 | 
|---|
 | 18 |   else 
 | 
|---|
 | 19 |     for (i=n-1; i>=0; i--)
 | 
|---|
 | 20 |       ((char*)dest)[i] = ((char*)source)[i];
 | 
|---|
 | 21 |   
 | 
|---|
 | 22 |   return dest;
 | 
|---|
 | 23 | }
 | 
|---|
 | 24 | 
 | 
|---|
 | 25 | // Dans parmst.cc
 | 
|---|
 | 26 | //int PrtLevel = 0;
 | 
|---|
 | 27 | //int DebugLevel = 0;
 | 
|---|
 | 28 | 
 | 
|---|
 | 29 | char const* PeidaWorkPath()
 | 
|---|
 | 30 | {
 | 
|---|
 | 31 |   char const* envWP = getenv("PEIDAWORKPATH");
 | 
|---|
 | 32 |   if (envWP) return envWP;
 | 
|---|
 | 33 |   #ifdef __mac__
 | 
|---|
 | 34 |   return "WORK";
 | 
|---|
 | 35 |   #endif
 | 
|---|
 | 36 |   return ".";
 | 
|---|
 | 37 | }
 | 
|---|
 | 38 | 
 | 
|---|
 | 39 | #ifndef __mac__
 | 
|---|
 | 40 | void buildPath(char* dst, const char* dir, const char* file)
 | 
|---|
 | 41 | {
 | 
|---|
 | 42 |   strcpy(dst, dir);
 | 
|---|
 | 43 |   char *p = dst; while (*p) p++; p--;
 | 
|---|
 | 44 |   if (*dir && *p != '/') strcat(dst, "/");
 | 
|---|
 | 45 |   strcat(dst, file);
 | 
|---|
 | 46 | }
 | 
|---|
 | 47 | 
 | 
|---|
 | 48 | void buildPath(string& dst, const string& dir, const string& file)
 | 
|---|
 | 49 | {
 | 
|---|
 | 50 |   dst = dir;
 | 
|---|
 | 51 |   if (dir != "" && dir[dir.length()-1] != '/') dst += "/";
 | 
|---|
 | 52 |   dst += file;
 | 
|---|
 | 53 | }
 | 
|---|
 | 54 | 
 | 
|---|
 | 55 | #else
 | 
|---|
 | 56 | void buildPath(char* dst, const char* dir, const char* file)
 | 
|---|
 | 57 | {
 | 
|---|
 | 58 |   if (*dir) {
 | 
|---|
 | 59 |     strcpy(dst, ":");
 | 
|---|
 | 60 |     strcat(dst, dir);
 | 
|---|
 | 61 |     char *p = dst; while (*p) p++; p--;
 | 
|---|
 | 62 |     strcat(dst, ":");
 | 
|---|
 | 63 |     strcat(dst, file);
 | 
|---|
 | 64 |   } else
 | 
|---|
 | 65 |     strcpy(dst, file);
 | 
|---|
 | 66 | }
 | 
|---|
 | 67 | 
 | 
|---|
 | 68 | void buildPath(string& dst, const string& dir, const string& file)
 | 
|---|
 | 69 | {
 | 
|---|
 | 70 |   if (dir != "") {
 | 
|---|
 | 71 |     dst = ":" + dir + ":" + file;
 | 
|---|
 | 72 |   } else
 | 
|---|
 | 73 |     dst = file;
 | 
|---|
 | 74 | }
 | 
|---|
 | 75 | 
 | 
|---|
 | 76 | #endif
 | 
|---|
 | 77 | 
 | 
|---|
 | 78 | 
 | 
|---|
 | 79 | void changeSuffix(char* file, const char* suffix)
 | 
|---|
 | 80 | {
 | 
|---|
 | 81 |   char *p = file;
 | 
|---|
 | 82 |   while (*p) p++;
 | 
|---|
 | 83 |   while (*p != '.' && p > file) p--;
 | 
|---|
 | 84 |   if (*p != '.') 
 | 
|---|
 | 85 |     strcat(file, suffix);
 | 
|---|
 | 86 |   else
 | 
|---|
 | 87 |     strcpy(p,suffix);
 | 
|---|
 | 88 | }
 | 
|---|
 | 89 | 
 | 
|---|
 | 90 | void changeSuffix(string& file, const string& suffix)
 | 
|---|
 | 91 | {
 | 
|---|
 | 92 |   size_t pos = file.rfind('.');
 | 
|---|
 | 93 |   //  if (pos != NPOS) file.remove(pos);
 | 
|---|
 | 94 |   if (pos != NPOS) file = file.substr(0,pos);
 | 
|---|
 | 95 |   file += suffix;
 | 
|---|
 | 96 | }
 | 
|---|
 | 97 | 
 | 
|---|
 | 98 | string itos(int i)
 | 
|---|
 | 99 | {
 | 
|---|
 | 100 |   char s[20];
 | 
|---|
 | 101 |   sprintf(s, "%d", i);
 | 
|---|
 | 102 |   return s;
 | 
|---|
 | 103 | }
 | 
|---|
 | 104 | 
 | 
|---|
 | 105 | string ftos(double f)
 | 
|---|
 | 106 | {
 | 
|---|
 | 107 |   char s[20];
 | 
|---|
 | 108 |   sprintf(s, "%g", f);
 | 
|---|
 | 109 |   return s;
 | 
|---|
 | 110 | }
 | 
|---|
 | 111 | 
 | 
|---|
 | 112 | 
 | 
|---|