|
|
1.1 root 1: /*
2: Hatari - log.c
3:
4: This file is distributed under the GNU Public License, version 2 or at
5: your option any later version. Read the file gpl.txt for details.
6:
7: Logger functions.
8:
9: When Hatari runs, it can output information, debug, warning and error texts
10: to the error log file and/or displays them in alert dialog boxes.
11: */
1.1.1.2 ! root 12: const char Log_rcsid[] = "Hatari $Id: log.c,v 1.3 2006/02/08 22:49:27 eerot Exp $";
1.1 root 13:
14: #include <stdio.h>
15: #include <stdarg.h>
16: #include <errno.h>
17:
18: #include "main.h"
19: #include "configuration.h"
20: #include "dialog.h"
21: #include "log.h"
22: #include "screen.h"
23:
24:
25: static FILE *hLogFile = NULL;
26:
27:
28: /*-----------------------------------------------------------------------*/
29: /*
30: Initialize the logging functions (open the log file etc.).
31: */
32: void Log_Init(void)
33: {
34: /* First check for "stdout" and "stderr" which are special */
35: if (!strcmp(ConfigureParams.Log.sLogFileName, "stdout"))
36: {
37: hLogFile = stdout;
38: }
39: else if (!strcmp(ConfigureParams.Log.sLogFileName, "stderr"))
40: {
41: hLogFile = stderr;
42: }
43: else
44: {
45: /* Open a normal log file */
46: hLogFile = fopen(ConfigureParams.Log.sLogFileName, "w");
47: if (!hLogFile)
48: fprintf(stderr, "Can't open log file %s: %s\n",
49: ConfigureParams.Log.sLogFileName, strerror(errno));
50: }
51: }
52:
53:
54: /*-----------------------------------------------------------------------*/
55: /*
56: Un-Initialize - close error log file etc.
57: */
58: void Log_UnInit(void)
59: {
60: if (hLogFile && hLogFile != stdout && hLogFile != stderr)
61: {
62: fclose(hLogFile);
63: }
64: hLogFile = NULL;
65: }
66:
67:
68: /*-----------------------------------------------------------------------*/
69: /*
70: Output string to log file
71: */
72: void Log_Printf(LOGTYPE nType, const char *psFormat, ...)
73: {
74: va_list argptr;
75:
76: if (hLogFile && (int)nType <= ConfigureParams.Log.nTextLogLevel)
77: {
78: va_start(argptr, psFormat);
79: vfprintf(hLogFile, psFormat, argptr);
80: va_end(argptr);
81: }
82: }
83:
84:
85: /*-----------------------------------------------------------------------*/
86: /*
87: Show logging alert dialog box and output string to log file
88: */
89: void Log_AlertDlg(LOGTYPE nType, const char *psFormat, ...)
90: {
91: va_list argptr;
92:
93: /* Output to log file: */
94: if (hLogFile && (int)nType <= ConfigureParams.Log.nTextLogLevel)
95: {
96: va_start(argptr, psFormat);
97: vfprintf(hLogFile, psFormat, argptr);
98: va_end(argptr);
99: /* Add a new-line if necessary: */
100: if (psFormat[strlen(psFormat)-1] != '\n')
101: fputs("\n", hLogFile);
102: }
103:
104: /* Show alert dialog box: */
105: if (sdlscrn && (int)nType <= ConfigureParams.Log.nAlertDlgLogLevel)
106: {
107: char *psTmpBuf;
108: psTmpBuf = malloc(2048);
109: if (!psTmpBuf)
110: {
111: perror("Log_AlertDlg");
112: return;
113: }
114: va_start(argptr, psFormat);
115: vsnprintf(psTmpBuf, 2048, psFormat, argptr);
116: va_end(argptr);
117: DlgAlert_Notice(psTmpBuf);
118: free(psTmpBuf);
119: }
120: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.