/******************************************************************************* * Concurrent Clean Simulator: simple_sun_io.c * * =========================================== * * At: Department of Computer Science * * University of Nijmegen * * Version: 1.1 * ******************************************************************************/ #include "system.h" #if !defined (applec) || defined (__MWERKS__) # include # include # include #endif #if !(defined (applec) || defined (_PC_)) # include #endif char *GetFileExtension (FileKind kind) { switch (kind){ case abcFile: return ".abc"; case obj00File: return ".obj0"; case obj20File: return ".obj1"; case obj81File: return ".obj2"; case iclFile: return ".icl"; case dclFile: return ".dcl"; case dumpFile: return ".dmp"; case statFile: return ".stt"; case stasFile: return ".str"; case assFile: return ".a"; case sunAssFile: return ".s"; case helpFile: case applFile: case otherFile: default: return ""; } } #define SEARCHPATH "CLEANPATH" #ifdef SOLARIS char clean_lib_directory[145] = "#$@CLEANLIB %*&."; # define clean_lib_directory (&clean_lib_directory[16]) #else char clean_lib_directory[129] = "."; #endif #define CLEANLIB clean_lib_directory static int use_clean_system_files_folder=1; char *PATHLIST = SEARCHPATH; static Bool file_exists (char *path) { return access (path, F_OK) == 0; } extern char *path_parameter; static Bool findfilepath (char *fname,FileKind kind,char *mode,char *path) { char *s,*path_elem,c,*pathlist,*ext; int in_clean_system_files_folder; if (path_parameter==NULL) pathlist=getenv ("CLEANPATH"); else pathlist=path_parameter; if (pathlist==NULL) pathlist="."; ext = GetFileExtension (kind); in_clean_system_files_folder=0; if (use_clean_system_files_folder) switch (kind){ case abcFile: case obj00File: case obj20File: case obj81File: in_clean_system_files_folder=1; } if (! (fname[0]=='/')){ path_elem = pathlist; s=path_elem; for (;;){ c = *s; if (c == ':' || c == '\0'){ char *from_p,*dest_p; from_p=path_elem; dest_p=path; while (from_p #include #include #ifdef HP # include # include #endif SysTime GetSysTime (unsigned scale) { /* #ifndef HP # ifdef OS2 unsigned long time; SysTime t; # define INCL_DOS # include DosQuerySysInfo (QSV_MS_COUNT,QSV_MS_COUNT,&time,sizeof (time)); if (scale>=1000) t=(SysTime)(time * (unsigned long) (scale/1000)); else t=(SysTime)((time * (unsigned long) scale)/1000); return t; # else struct rusage usage; SysTime t; (void) getrusage (RUSAGE_SELF, &usage); t = (SysTime) (usage.ru_utime.tv_sec * (unsigned long) scale + usage.ru_utime.tv_usec / (unsigned long) (1000000L / scale)); return t; # endif #else double clock_ticks_per_second; struct tms time_buffer; clock_ticks_per_second=sysconf (_SC_CLK_TCK); times (&time_buffer); return (SysTime) (((double)time_buffer.tms_utime * scale) / clock_ticks_per_second); #endif */ return 0; } /* GetSysTime */ void StopTimer (void) { } /* StopTimer */ void ResetTimer (void) { } /* ResetTimer */ FileTime FGetFileTime (char *fname, FileKind kind) { struct stat buf; char path[MAXPATHLEN]; if (! findfilepath (fname, kind, "", path)) return NoFile; stat (path, &buf); return (FileTime) buf.st_mtime; } /* FGetFileTime */ /******************************************************************************* * * * Error Handling * * * ******************************************************************************/ void DoError (char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } /* DoError */ void DoFatalError (char *fmt, ...) { va_list args; va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); exit (0); } /* DoFatalError */ void CmdError (char *errormsg,...) { va_list args; va_start (args, errormsg); fputs ("Command line error: ", stdout); vfprintf (stdout, errormsg, args); fputc ('\n', stdout); va_end (args); } /* CmdError */ /******************************************************************************* * Interrupt Handling * ******************************************************************************/ #include /* Special for the stand alone version of the Clean compiler: No interrupthandler should be installed */ static void DoNothing (void) { } /* DoNothing */ void (*SetSignal (void (*f) (void))) (void) { return DoNothing; } /* SetSignal */ int CheckInterrupt (void) { return 0; } /* CheckInterrupt */ /******************************************************************************* * Storage * ******************************************************************************/ void *Alloc (long unsigned count, SizeT size) { if (size == 1) { if (count >= MAXUNSIGNED) DoFatalError ("Allocate: severe memory allocation problem"); return (void *) malloc ((size_t) count); } else if (count >= (MAXUNSIGNED / size)) DoFatalError ("Allocate: severe memory allocation problem"); return (void *) malloc ((size_t) (count * size)); } /* Alloc */ void Free (void *p) { (void) free (p); } /* Free */