home *** CD-ROM | disk | FTP | other *** search
- /*
- ** Call.c
- **
- ** Call log file maintenance routines
- **
- ** Copyright © 1990-1996 by Olaf `Olsen' Barthel
- ** All Rights Reserved
- **
- ** :ts=4
- */
-
- #ifndef _GLOBAL_H
- #include "Global.h"
- #endif
-
- /* Some local variables. */
-
- STATIC BPTR CallFile;
- STATIC struct timeval CallTime;
- STATIC PhoneLogHandle * LogHandle;
- STATIC BOOL CallActive;
-
- /* InitPhoneLogEntry(struct PhoneLogEntry *Item,STRPTR Number,STRPTR Name):
- *
- * Initialize a log entry for the PhoneLog support routines.
- */
-
- STATIC VOID
- InitPhoneLogEntry(struct PhoneLogEntry *Item,STRPTR Name,STRPTR Number,LONG BackTime)
- {
- struct ClockData ClockData;
- struct timeval Now;
-
- GetSysTime(&Now);
- Amiga2Date(Now.tv_secs - BackTime,&ClockData);
-
- memset(Item,0,sizeof(struct PhoneLogEntry));
-
- if(Number)
- {
- LimitedStrcpy(sizeof(Item->Number),Item->Number,Number);
-
- if(Number == Name)
- Name = "???";
- }
-
- if(Name)
- LimitedStrcpy(sizeof(Item->Name),Item->Name,Name);
-
- strcpy(Item->Reason,"-");
-
- strcpy(Item->ProgramName,"term");
-
- Item->ProgramVersion = TermVersion;
- Item->ProgramRevision = TermRevision;
-
- Item->StartDay = ClockData.mday;
- Item->StartMonth = ClockData.month;
- Item->StartYear = ClockData.year;
- Item->StartHour = ClockData.hour;
- Item->StartMin = ClockData.min;
- Item->StartSec = ClockData.sec;
-
- Item->EndDay = ClockData.mday;
- Item->EndMonth = ClockData.month;
- Item->EndYear = ClockData.year;
- Item->EndHour = ClockData.hour;
- Item->EndMin = ClockData.min;
- Item->EndSec = ClockData.sec;
- }
-
- /* CallDate():
- *
- * Add the current date and time to the logfile.
- */
-
- STATIC VOID
- CallDate(LONG Seconds,BPTR FileHandle)
- {
- /* Days of the week. */
-
- STATIC STRPTR CallDays[7] =
- {
- "Sun","Mon","Tue","Wed","Thu","Fri","Sat"
- };
-
- /* Months of the year. */
-
- STATIC STRPTR CallMonths[12] =
- {
- "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
- };
-
- struct ClockData ClockData;
-
- /* Convert time and date. */
-
- Amiga2Date(Seconds,&ClockData);
-
- /* Add the date line. */
-
- FPrintf(FileHandle,"%s %s %02ld %02ld:%02ld:%02ld %ld\n",CallDays[ClockData.wday],CallMonths[ClockData.month - 1],ClockData.mday,ClockData.hour,ClockData.min,ClockData.sec,ClockData.year);
- }
-
- /* MakeCall(struct PhoneEntry *Entry):
- *
- * Register a new phone call.
- */
-
- VOID
- MakeCall(STRPTR Name,STRPTR Number,LONG BackTime)
- {
- /* End previous entry. */
-
- if(CallActive)
- StopCall(FALSE);
-
- /* Get current system time. */
-
- GetSysTime(&CallTime);
- CallTime.tv_secs -= BackTime;
-
- /* Call logging enabled? */
-
- if(Config->CaptureConfig->LogCall && Config->CaptureConfig->CallLogFileName[0])
- {
- if(Config->CaptureConfig->LogFileFormat == LOGFILEFORMAT_CallInfo)
- {
- /* Open logfile for writing. */
-
- if(CallFile = OpenToAppend(Config->CaptureConfig->CallLogFileName,NULL))
- {
- /* Add the title line. */
-
- FPrintf(CallFile,"%s (%s)\n--------------------------------\nLogin: ",Name,Number);
-
- /* Make the line complete. */
-
- CallDate(CallTime.tv_secs,CallFile);
-
- CallActive = TRUE;
- }
- }
- else
- {
- /* Open the log file */
-
- if(LogHandle = OpenPhoneLog(Config->CaptureConfig->CallLogFileName))
- {
- struct PhoneLogEntry Item;
-
- /* Set up a log entry */
-
- InitPhoneLogEntry(&Item,Name,Number,BackTime);
-
- /* And write it */
-
- WritePhoneLogStartEntry(LogHandle,&Item);
-
- CallActive = TRUE;
- }
- }
- }
- }
-
- /* StopCall(BOOLEAN Finish):
- *
- * End the current phone call.
- */
-
- VOID
- StopCall(BOOL Finish)
- {
- UBYTE LocalBuffer[MAX_FILENAME_LENGTH];
- BOOL GotName = FALSE;
-
- /* Is a call currently being made? */
-
- if(CallFile)
- {
- struct timeval StopTime;
- LONG Seconds;
-
- /* Get current system time. */
-
- GetSysTime(&StopTime);
- Seconds = StopTime.tv_secs;
-
- /* Subtract the starting time from it. */
-
- SubTime(&StopTime,&CallTime);
-
- /* Add the info line. */
-
- if(Finish)
- FPrintf(CallFile,"*** term exited before logout: ");
- else
- FPrintf(CallFile,"Logout: ");
-
- /* Make the line complete. */
-
- CallDate(Seconds,CallFile);
-
- /* Get the file name. */
-
- GotName = NameFromFH(CallFile,LocalBuffer,sizeof(LocalBuffer));
-
- /* Add the online time. */
-
- FPrintf(CallFile,"Time online: %02ld:%02ld:%02ld\n\n",(StopTime.tv_secs % 86400) / 3600,(StopTime.tv_secs % 3600) / 60,StopTime.tv_secs % 60);
-
- /* Finis... */
-
- Close(CallFile);
- CallFile = NULL;
- }
-
- /* Now what about the PhoneLog file? */
-
- if(LogHandle)
- {
- struct PhoneLogEntry Item;
-
- /* Get the file name. */
-
- GotName = NameFromFH(LogHandle->file,LocalBuffer,sizeof(LocalBuffer));
-
- InitPhoneLogEntry(&Item,NULL,NULL,0);
-
- WritePhoneLogEndEntry(LogHandle,&Item);
- ClosePhoneLog(LogHandle);
-
- LogHandle = NULL;
- }
-
-
- /* Clear the `executable' bit. */
-
- if(GotName)
- {
- AddProtection(LocalBuffer,FIBF_EXECUTE);
-
- if(Config->MiscConfig->CreateIcons)
- AddIcon(LocalBuffer,FILETYPE_TEXT,TRUE);
- }
-
- /* No call is active now */
-
- CallActive = FALSE;
- }
-