This is unixtime.c in view mode; [Download] [Up]
/* Copyright (C) 1994 M. Hagiya, W. Schelter, T. Yuasa This file is part of GNU Common Lisp, herein referred to as GCL GCL is free software; you can redistribute it and/or modify it under the terms of the GNU LIBRARY GENERAL PUBLIC LICENSE as published by the Free Software Foundation; either version 2, or (at your option) any later version. GCL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with GCL; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* unixtime.c */ #define IN_UNIXTIME #include "include.h" #include <sys/types.h> #ifdef UNIX /* all we want from this is HZ the number of clock ticks per second which is usually 60 maybe 100 or something else. */ #undef PAGESIZE #include <sys/param.h> #endif #ifndef HZ #define HZ 60 #endif #ifdef USE_ATT_TIME #undef BSD #define ATT #endif #ifdef BSD #include <sys/timeb.h> #include <sys/times.h> #include <sys/time.h> static struct timeb beginning; #endif #ifdef ATT #include <sys/times.h> long beginning; #endif #ifdef E15 #include <sys/times.h> long beginning; #endif #ifdef DGUX #endif runtime() { struct tms buf; times(&buf); return(buf.tms_utime); } object unix_time_to_universal_time(i) int i; { object x; vs_mark; vs_push(make_fixnum(24*60*60)); vs_push(make_fixnum(70*365+17)); x = number_times(vs_top[-1], vs_top[-2]); vs_push(x); vs_push(make_fixnum(i)); x = number_plus(vs_top[-1], vs_top[-2]); vs_reset; return(x); } DEFUNO("GET-UNIVERSAL-TIME",object,fLget_universal_time,LISP ,0,0,NONE,OO,OO,OO,OO,Lget_universal_time,"")() { /* 0 args */ RETURN1(unix_time_to_universal_time(time(0))); } Lsleep() { object z; check_arg(1); check_type_or_rational_float(&vs_base[0]); if (number_minusp(vs_base[0]) == TRUE) FEerror("~S is not a non-negative number.", 1, vs_base[0]); Lround(); z = vs_base[0]; if (type_of(z) == t_fixnum) sleep(fix(z)); else for(;;) sleep(1000); vs_top = vs_base; vs_push(Cnil); } Lget_internal_run_time() { struct tms buf; check_arg(0); times(&buf); vs_push(make_fixnum(buf.tms_utime)); vs_push(make_fixnum(buf.tms_cutime)); } Lget_internal_real_time() { #ifdef BSD static struct timeval begin_tzp; struct timeval tzp; check_arg(0); if (begin_tzp.tv_sec==0) gettimeofday(&begin_tzp,0); gettimeofday(&tzp,0); /* the value returned will be relative to the first time this is called, plus the fraction of a second. We must make it relative, so this will only wrap if the process lasts longer than 818 days */ vs_push(make_fixnum((tzp.tv_sec-begin_tzp.tv_sec)*HZ + ((tzp.tv_usec)*HZ)/1000000)); #endif #ifdef ATT check_arg(0); vs_push(make_fixnum((time(0) - beginning)*HZ)); #endif #ifdef E15 check_arg(0); vs_push(make_fixnum((time(0) - beginning)*HZ)); #endif #ifdef DGUX #endif } DEFVAR("*DEFAULT-TIME-ZONE*",sSAdefault_time_zoneA,SI,make_fixnum(TIME_ZONE),""); init_unixtime() { #ifdef BSD ftime(&beginning); #endif #ifdef ATT beginning = time(0); #endif #ifdef E15 beginning = time(0); #endif #ifdef DGUX #endif make_constant("INTERNAL-TIME-UNITS-PER-SECOND", make_fixnum(HZ)); make_function("SLEEP", Lsleep); make_function("GET-INTERNAL-RUN-TIME", Lget_internal_run_time); make_function("GET-INTERNAL-REAL-TIME", Lget_internal_real_time); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.