home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 June / PCWorld_1998-06_cd.bin / software / sharware / grafika / EROICA32 / _SETUP.3 / Group2 / UTFILE.C < prev    next >
C/C++ Source or Header  |  1998-01-15  |  8KB  |  342 lines

  1. /*-------------------------- Parallax Standard C_File ----------------------------
  2.       C_File: utfile.c
  3.       
  4.       Purpose: This file contains the source code for the randomized
  5.                file selection routines.
  6.               
  7.       
  8. --------------------------------------------------------------------------------
  9.           Copyright (c)1996 Parallax Software , All rights reserved.            
  10. ------------------------------------------------------------------------------*/
  11.  
  12. #include "dde_test.h"
  13. #include "utdde.h"
  14.  
  15. #include <dos.h>
  16. #include <time.h>
  17. #include <stdlib.h>
  18. #include <stdio.h>
  19. #include <string.h>
  20.  
  21. static int tmpfilenum = 0;
  22. static char tmpdir[50] = "";
  23. static char base36[36] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  24.  
  25. /* internal functions */
  26. static void      _InitTmpDir();
  27. static int       _CopyFile(char FAR* pFileNameTo, char FAR* pFileNameFrom);
  28. static char FAR* _FileName(char FAR* filepath);
  29.  
  30. /* 970224 jk add redefinitions of far string functions */
  31. #ifdef _WIN32
  32. static char *_fstrcpy(char *string1, const char *string2)
  33. {
  34.   return strcpy(string1, string2) ;
  35. }
  36. static char *_fstrcat(char *string1, const char *string2)
  37. {
  38.   return strcat(string1, string2) ;
  39. }
  40. static size_t _fstrlen(const char *string)
  41. {
  42.   return strlen(string);
  43. }
  44. static char *_fstrchr(const char *string, int c)
  45. {
  46.   return strchr(string, c);
  47. }
  48. #endif
  49. /* 970224 jk end */
  50.  
  51.  
  52. /* ========================================= Parallax C Function ==================
  53.  
  54.    @Name: _InitTmpDir
  55.    @Desc: 
  56.  
  57. ============================================================================== */
  58.  
  59. static void _InitTmpDir()
  60. {
  61. #if 0
  62.   int len;
  63.   strcpy(tmpdir, getenv("TMP"));
  64.   len = strlen(tmpdir);
  65.  
  66.   if (tmpdir[len-1] != '\\')
  67.   {
  68.      tmpdir[len] = '\\';
  69.      tmpdir[len+1] = '\0';
  70.   } /* if (tmpdir[len-1] != '\\') */
  71. #else
  72.   GetPrivateProfileString("System", "TmpDir", "", tmpdir, sizeof(tmpdir), ".\\dde_test.ini");
  73.   if ( *tmpdir == 0 ) {
  74. #ifdef _WIN32
  75.       GetTempPath( sizeof(tmpdir), tmpdir );
  76. #else
  77.       tmpdir[0] = (char)GetTempDrive(0);
  78.       lstrcpy( tmpdir+1, ":\\" );
  79. #endif
  80.   }
  81.   if ( *tmpdir ) {
  82.       if ( tmpdir[lstrlen(tmpdir)-1] != '\\' ) {
  83.           lstrcat( tmpdir, "\\" );
  84.       }
  85.   } 
  86.   /* strcpy(tmpdir, "C:\\TMP\\"); */
  87. #endif
  88. } /* _InitTmpDir() */
  89.  
  90. /* ========================================= Parallax C Function ==================
  91.  
  92.    @Name: _FileName
  93.    @Desc: 
  94.  
  95. ============================================================================== */
  96.  
  97. static char FAR* _FileName(char FAR* filepath)
  98. {
  99.   char FAR* pTmp0 = filepath;
  100.   char FAR* pTmp1;
  101.  
  102.   /* get over drive letter */
  103.   pTmp1 = _fstrchr(pTmp0, ':');
  104.   if (pTmp1 != NULL) pTmp0 = pTmp1 + 1;
  105.  
  106.   /* get over all subdirs */
  107.   pTmp1 = pTmp0;
  108.  
  109.   do
  110.   {
  111.     pTmp0 = pTmp1 + 1;
  112.     pTmp1 = _fstrchr(pTmp0, '\\');
  113.   } while(pTmp1 != NULL);
  114.  
  115.   return (pTmp0);
  116. } /* _FileName() */
  117.  
  118. /* ========================================= Parallax C Function ==================
  119.  
  120.    @Name: _CopyFile
  121.    @Desc: 
  122.  
  123. ============================================================================== */
  124.  
  125. static int _CopyFile(char FAR* pFileNameTo, char FAR* pFileNameFrom)
  126. {
  127.   int ret=TRUE;
  128.   FILE* fhA = NULL;
  129.   FILE* fhB = NULL;
  130.   char fnameA[256];
  131.   char fnameB[256];
  132.   char buf[16000];
  133.  
  134.   /* copy file names locally */
  135.   _fstrcpy(fnameA, pFileNameTo);
  136.   _fstrcpy(fnameB, pFileNameFrom);
  137.  
  138.   /* open the files */
  139.   fhB = fopen(fnameB, "rb");
  140.   if (fhB == NULL)
  141.   {
  142.     ret = FALSE;
  143.     goto cleanup;
  144.   } /* if (fhB == NULL) */
  145.  
  146.   fhA = fopen(fnameA, "wb");
  147.   if (fhA == NULL)
  148.   {
  149.     ret = FALSE;
  150.     goto cleanup;
  151.   } /* if (fhA == NULL) */
  152.  
  153.    /* copy over */
  154.    while (!feof(fhB))
  155.    {
  156.      int n = fread(buf, 1, 16000, fhB);
  157.      fwrite(buf, 1, n, fhA);
  158.    } /* while (!feof(fhB)) */
  159.  
  160. cleanup:
  161.   if (fhA) fclose(fhA);
  162.   if (fhB) fclose(fhB);
  163.  
  164.   return (ret);
  165. } /* _CopyFile() */
  166.  
  167. /* ========================================= Parallax C Function ==================
  168.  
  169.    @Name: UT_GetTmpFileName
  170.    @Desc: 
  171.  
  172. ============================================================================== */
  173.  
  174. /* 970224 jk add to cover the unsupported WIN31 function */
  175. #ifdef _WIN32
  176. static unsigned _dos_getfileattr(const char *path, unsigned *attrib)
  177. {
  178.   DWORD temp = GetFileAttributes(path) ;
  179.  
  180.   if (temp == 0xFFFFFFFF)
  181.   {
  182.     *attrib = 0 ;
  183.     return 1 ;     /* error */
  184.   } else /* if (temp == 0xFFFFFFFF) */
  185.   {
  186.     *attrib = temp ;
  187.     return 0 ;
  188.   } /* if (temp == 0xFFFFFFFF) */
  189. } /* _dos_getfileattr() */
  190. #endif
  191. /* 970224 jk end */
  192.  
  193. void UT_GetTmpFileName(void FAR* pTmpName)
  194. {
  195.   int  len,i,j;
  196.   unsigned attrib;
  197.   char fname[256];
  198.  
  199.   if (tmpdir[0]==0) _InitTmpDir();
  200.  
  201.   do
  202.   {
  203.     tmpfilenum++;
  204.  
  205.     _fstrcpy(fname, tmpdir);
  206.     len = strlen(fname);
  207.  
  208.     fname[len++] = 'U';
  209.     fname[len++] = 'T';
  210.     i = tmpfilenum;
  211.  
  212.     for (j=5; j>=0; j--)
  213.     {
  214.       fname[len+j] = base36[ i%36 ];
  215.       i /= 36;
  216.     } /* for (j=5; j>=0; j--) */
  217.  
  218.     len+=6;
  219.     fname[len++] = '.';
  220.     fname[len++] = 'T';
  221.     fname[len++] = 'M';
  222.     fname[len++] = 'P';
  223.     fname[len++] = '\0' ;
  224.  
  225.   } while(_dos_getfileattr(fname, &attrib) == 0);
  226.  
  227.   _fstrcpy(pTmpName, fname);
  228. } /* GetTmpFileName() */
  229.  
  230. /* ========================================= Parallax C Function ==================
  231.  
  232.    @Name: UT_GetTmpVersion
  233.    @Desc: 
  234.  
  235. ============================================================================== */
  236.  
  237. void UT_GetTmpVersion(void FAR* pFname, void FAR* pTmpName)
  238. {
  239.   if (tmpdir[0]==0) _InitTmpDir();
  240.  
  241.   _fstrcpy(pTmpName, tmpdir);
  242.   _fstrcat(pTmpName, _FileName(pFname));
  243.   _CopyFile(pTmpName, pFname);
  244. } /* UT_GetTmpVersion() */
  245.  
  246. /* ========================================= Parallax C Function ==================
  247.  
  248.    @Name: UT_DeleteFile
  249.    @Desc: 
  250.  
  251. ============================================================================== */
  252.  
  253. void UT_DeleteFile(void FAR* pName)
  254. {
  255.   char fname[256];
  256.   
  257.   _fstrcpy(fname, pName);
  258.   if ( *fname ) remove(fname);
  259. } /* UT_DeleteFile() */
  260.  
  261. /* ========================================= Parallax C Function ==================
  262.  
  263.    @Name: UT_ConstructUniqueLabel
  264.    @Desc: 
  265.  
  266. ============================================================================== */
  267.  
  268. void UT_ConstructUniqueLabel(int type, void FAR* pName)
  269. {
  270.   char name[256];
  271.   int  len,i,j;
  272.  
  273.   tmpfilenum++;
  274.  
  275.   switch (type)
  276.   {
  277.     case 0:
  278.     {
  279.        _fstrcpy(name, "[ Window ]");
  280.  
  281.        break;
  282.     } /* case 0 */
  283.  
  284.     case 1:
  285.     {
  286.       _fstrcpy(name, "( Document )");
  287.  
  288.       break;
  289.     } /* case 1 */
  290.  
  291.     default:
  292.     {
  293.        _fstrcpy(name, "< Layer >");
  294.  
  295.        break;
  296.     } /* case default */
  297.   } /* swith (type) */
  298.  
  299.   len = _fstrlen(name);
  300.  
  301.   i = tmpfilenum;
  302.  
  303.   for (j=5; j>=0; j--)
  304.   {
  305.     name[len+j] = base36[ i%36 ];
  306.     i /= 36;
  307.   } /* for (j=5; j>=0; j--) */
  308.  
  309.   len+=6;
  310.   name[len++] = '\0';
  311.  
  312.   _fstrcpy(pName, name);
  313. } /* UT_ConstructUniqueLabel() */
  314.  
  315. /* ========================================= Parallax C Function ==================
  316.  
  317.    @Name: UT_Sleep
  318.    @Desc: 
  319.  
  320. ============================================================================== */
  321.  
  322. void UT_Sleep(int sec)
  323. {
  324.   time_t start;
  325.   time_t now;
  326.  
  327.   _FMTMSG("Sleeping for %d seconds...", sec);
  328.  
  329.   time(&start);
  330.   time(&now);
  331.  
  332.   while(difftime(now, start) < sec)
  333.   {
  334.     Yield();
  335.     time(&now);
  336.   } /* while(difftime(now, start) < sec) */
  337. } /* UT_Sleep() */
  338.  
  339. /* UTFILE.C */
  340. /* end of file */
  341.  
  342.