You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
454 lines
16 KiB
454 lines
16 KiB
// main.c
|
|
// Jedi Academy Server Log Converter - Version 2.0
|
|
//
|
|
// Created By Steven Mattera on August 30th 2010.
|
|
// Copyright (c) 2010 Steven Mattera <stevenmattera@gmail.com>
|
|
//
|
|
// Jedi Academy Server Log Converter is free software; you can
|
|
// redistribute it and/or modify it under the terms of the GNU General
|
|
// Public License as published by the Free Software Foundation; either
|
|
// version 2 of the License, or (at your option) any later version.
|
|
//
|
|
// Jedi Academy Server Log Converter is distributed in the hope that it
|
|
// will be useful, but WITHOUT ANY WARRENTY; without even the implied
|
|
// warrenty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more deails.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Jedi Academy Server Log Converter; if not, write to the Free
|
|
// Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
|
|
// USA
|
|
//
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <windows.h>
|
|
#include "resource.h"
|
|
|
|
enum {
|
|
ID_LOADEDIT = 1,
|
|
ID_LOADBUTTON,
|
|
ID_SAVEEDIT,
|
|
ID_SAVEBUTTON,
|
|
ID_CONVERTBUTTON
|
|
};
|
|
|
|
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|
|
|
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
|
|
WNDCLASSEX wc;
|
|
MSG Msg;
|
|
HWND hwnd;
|
|
|
|
wc.cbSize = sizeof(WNDCLASSEX);
|
|
wc.style = 0;
|
|
wc.lpfnWndProc = WndProc;
|
|
wc.cbClsExtra = 0;
|
|
wc.cbWndExtra = 0;
|
|
wc.hInstance = hInstance;
|
|
wc.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
|
|
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
|
|
wc.lpszMenuName = NULL;
|
|
wc.lpszClassName = "mainWindow";
|
|
wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);
|
|
|
|
if (!RegisterClassEx(&wc)) {
|
|
MessageBox(NULL, "Window Registration Failed!", "Error", MB_ICONEXCLAMATION|MB_OK);
|
|
return 0;
|
|
}
|
|
|
|
hwnd = CreateWindowEx(0, "mainWindow", "Jedi Academy Server Log Converter", WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX, (GetSystemMetrics(SM_CXSCREEN) - 500)/2, (GetSystemMetrics(SM_CYSCREEN) - 72)/2, 500, 100, NULL, NULL, hInstance, NULL);
|
|
|
|
if (hwnd == NULL) {
|
|
MessageBox(NULL, "Window Creation Failed!", "Error", MB_ICONEXCLAMATION|MB_OK);
|
|
return 0;
|
|
}
|
|
|
|
ShowWindow(hwnd, nCmdShow);
|
|
UpdateWindow(hwnd);
|
|
|
|
MessageBox(hwnd, "Jedi Academy Server Log Converter\nCopyright (c) 2010 Steven Mattera <stevenmattera@gmail.com>\n\nJedi Academy Server Log Converter is free software; you can redistribute it\nand/or modify it under the terms of the GNU General Public License as published\nby the Free Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nJedi Academy Server Log Converter is distributed in the hope that it will be\nuseful, but WITHOUT ANY WARRENTY; without even the implied warrenty of \nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public\nLicense for more deails.\n\nYou should have received a copy of the GNU General Public License along with\nJedi Academy Server Log Converter; if not, write to the Free Software\nFoundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA", "Welcome to Jedi Academy Server Log Converter", MB_OK);
|
|
|
|
while(GetMessage(&Msg, NULL, 0, 0) > 0) {
|
|
TranslateMessage(&Msg);
|
|
DispatchMessage(&Msg);
|
|
}
|
|
|
|
return Msg.wParam;
|
|
}
|
|
|
|
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
|
char szFileName[MAX_PATH] = "";
|
|
OPENFILENAME ofn;
|
|
|
|
switch(msg) {
|
|
case WM_CREATE:
|
|
HFONT hfDefault;
|
|
HWND hLoadEdit;
|
|
HWND hLoadButton;
|
|
HWND hSaveEdit;
|
|
HWND hSaveButton;
|
|
HWND hConvertButton;
|
|
|
|
hLoadEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL, 10, 10, 300, 21, hwnd, (HMENU)ID_LOADEDIT, GetModuleHandle(NULL), NULL);
|
|
hLoadButton = CreateWindowEx(0, "BUTTON", "Input", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 320, 10, 70, 21, hwnd, (HMENU)ID_LOADBUTTON, GetModuleHandle(NULL), NULL);
|
|
hSaveEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL, 10, 41, 300, 21, hwnd, (HMENU)ID_SAVEEDIT, GetModuleHandle(NULL), NULL);
|
|
hSaveButton = CreateWindowEx(0, "BUTTON", "Output", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 320, 41, 70, 21, hwnd, (HMENU)ID_SAVEBUTTON, GetModuleHandle(NULL), NULL);
|
|
hConvertButton = CreateWindowEx(0, "BUTTON", "Convert", WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, 400, 10, 80, 52, hwnd, (HMENU)ID_CONVERTBUTTON, GetModuleHandle(NULL), NULL);
|
|
|
|
hfDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
|
|
SendMessage(hLoadEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
|
|
SendMessage(hLoadButton, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
|
|
SendMessage(hSaveEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
|
|
SendMessage(hSaveButton, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
|
|
SendMessage(hConvertButton, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
|
|
break;
|
|
case WM_CLOSE:
|
|
DestroyWindow(hwnd);
|
|
break;
|
|
case WM_DESTROY:
|
|
PostQuitMessage(0);
|
|
break;
|
|
case WM_COMMAND:
|
|
switch(wParam) {
|
|
case ID_LOADBUTTON:
|
|
ZeroMemory(&ofn, sizeof(ofn));
|
|
|
|
ofn.lStructSize = sizeof(ofn);
|
|
ofn.hwndOwner = hwnd;
|
|
ofn.lpstrFilter = "Log Files (*.log)\0*.log\0Log Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
|
|
ofn.lpstrFile = szFileName;
|
|
ofn.nMaxFile = MAX_PATH;
|
|
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
|
|
ofn.lpstrDefExt = "log";
|
|
|
|
if(GetOpenFileName(&ofn)) {
|
|
HWND hLoadEdit = GetDlgItem(hwnd, ID_LOADEDIT);
|
|
SetWindowText(hLoadEdit, szFileName);
|
|
}
|
|
break;
|
|
case ID_SAVEBUTTON:
|
|
ZeroMemory(&ofn, sizeof(ofn));
|
|
|
|
ofn.lStructSize = sizeof(ofn);
|
|
ofn.hwndOwner = hwnd;
|
|
ofn.lpstrFilter = "HTML Files (*.html)\0*.html\0RTF Files (*.rtf)\0*.rtf\0Text Files (*.txt)\0*.txt\0";
|
|
ofn.lpstrFile = szFileName;
|
|
ofn.nMaxFile = MAX_PATH;
|
|
ofn.Flags = OFN_EXPLORER | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
|
|
ofn.lpstrDefExt = "html";
|
|
|
|
if(GetSaveFileName(&ofn)) {
|
|
HWND hSaveEdit = GetDlgItem(hwnd, ID_SAVEEDIT);
|
|
SetWindowText(hSaveEdit, szFileName);
|
|
}
|
|
break;
|
|
case ID_CONVERTBUTTON:
|
|
HWND hLoadEdit = GetDlgItem(hwnd, ID_LOADEDIT);
|
|
HWND hLoadButton = GetDlgItem(hwnd, ID_LOADBUTTON);
|
|
HWND hSaveEdit = GetDlgItem(hwnd, ID_SAVEEDIT);
|
|
HWND hSaveButton = GetDlgItem(hwnd, ID_SAVEBUTTON);
|
|
|
|
char loadFilename[MAX_PATH] = "";
|
|
char saveFilename[MAX_PATH] = "";
|
|
|
|
FILE * loadFile, * saveFile;
|
|
|
|
GetWindowText(hLoadEdit, loadFilename, MAX_PATH);
|
|
GetWindowText(hSaveEdit, saveFilename, MAX_PATH);
|
|
|
|
if (strcmp(loadFilename, saveFilename) == 0) {
|
|
MessageBox(hwnd, "Can not overwrite input file with output file.", "Error", MB_ICONEXCLAMATION|MB_OK);
|
|
break;
|
|
}
|
|
|
|
loadFile = fopen(loadFilename, "r");
|
|
if (loadFile == NULL) {
|
|
MessageBox(hwnd, "Opening file stream.", "Error", MB_ICONEXCLAMATION|MB_OK);
|
|
break;
|
|
}
|
|
|
|
saveFile = fopen(saveFilename, "w+");
|
|
if (saveFile == NULL) {
|
|
MessageBox(hwnd, "Opening file stream.", "Error", MB_ICONEXCLAMATION|MB_OK);
|
|
fclose(loadFile);
|
|
break;
|
|
}
|
|
|
|
char * saveFileExt = strrchr(saveFilename,'.');
|
|
char * line;
|
|
int color = 7;
|
|
|
|
if (strcmp(saveFileExt, ".html") == 0) {
|
|
fputs("<html><head><style>body{background-color:gray}b{font-weight:normal}.r{color:red}.g{color:green}.y{color:yellow}.b{color:blue}.c{color:cyan}.m{color:magenta}.w{color:white}.l{color:black}</style></head><body><span class='w'>", saveFile);
|
|
|
|
while (!feof(loadFile)) {
|
|
line = (char *)malloc(sizeof(char)*512);
|
|
memset(line, '\0', sizeof(char)*512);
|
|
|
|
fgets(line, 512, loadFile);
|
|
if(color != 7) {
|
|
fputs("</b><b class=w>", saveFile);
|
|
color = 7;
|
|
}
|
|
|
|
int n;
|
|
for (n = 0; n < strlen(line); n++) {
|
|
if(line[n] == '^') {
|
|
switch (atoi(&line[n+1])) {
|
|
case 1:
|
|
if(color != 1) {
|
|
color = 1;
|
|
fputs("</b><b class=r>", saveFile);
|
|
}
|
|
break;
|
|
case 2:
|
|
if(color != 2) {
|
|
color = 2;
|
|
fputs("</b><b class=g>", saveFile);
|
|
}
|
|
break;
|
|
case 3:
|
|
if(color != 3) {
|
|
color = 3;
|
|
fputs("</b><b class=y>", saveFile);
|
|
}
|
|
break;
|
|
case 4:
|
|
if(color != 4) {
|
|
color = 4;
|
|
fputs("</b><b class=b>", saveFile);
|
|
}
|
|
break;
|
|
case 5:
|
|
if(color != 5) {
|
|
color = 5;
|
|
fputs("</b><b class=c>", saveFile);
|
|
}
|
|
break;
|
|
case 6:
|
|
if(color != 6) {
|
|
color = 6;
|
|
fputs("</b><b class=m>", saveFile);
|
|
}
|
|
break;
|
|
case 7:
|
|
if(color != 7) {
|
|
color = 7;
|
|
fputs("</b><b class=w>", saveFile);
|
|
}
|
|
break;
|
|
case 0:
|
|
if(color != 8) {
|
|
color = 8;
|
|
fputs("</b><b class=l>", saveFile);
|
|
}
|
|
break;
|
|
default:
|
|
fputc('^', saveFile);
|
|
fputc(line[n+1], saveFile);
|
|
break;
|
|
}
|
|
n++;
|
|
}
|
|
else if (line[n] == ':' && color != 7) {
|
|
fputs("</b><b class=w>", saveFile);
|
|
fputc(':', saveFile);
|
|
}
|
|
else if (line[n] == '\\' && color != 7) {
|
|
fputs("</b><b class=w>", saveFile);
|
|
fputc('\\', saveFile);
|
|
}
|
|
else if (line[n] == ' ' && line[n+1] == 'k' && line[n+2] == 'i' && line[n+3] == 'l' && line[n+4] == 'l' && line[n+5] == 'e' && line[n+6] == 'd' && line[n+7] == ' ' && color != 7) {
|
|
fputs("</b><b class=w>", saveFile);
|
|
fputc(' ', saveFile);
|
|
}
|
|
else if (line[n] == ' ' && line[n+1] == 'b' && line[n+2] == 'y' && line[n+3] == ' ' && color != 7) {
|
|
fputs("</b><b class=w>", saveFile);
|
|
fputc(' ', saveFile);
|
|
}
|
|
else if (line[n] == '<') {
|
|
fputs("<", saveFile);
|
|
}
|
|
else if (line[n] == '>') {
|
|
fputs(">", saveFile);
|
|
}
|
|
else if (line[n] == '&') {
|
|
fputs("&", saveFile);
|
|
}
|
|
else if (line[n] != '\n' && line[n] != '\r') {
|
|
fputc(line[n], saveFile);
|
|
}
|
|
}
|
|
|
|
fputs("<br>", saveFile);
|
|
|
|
free(line);
|
|
}
|
|
|
|
fputs("</body></html>", saveFile);
|
|
}
|
|
else if (strcmp(saveFileExt, ".rtf") == 0) {
|
|
fputs("{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1033{\\fonttbl{\\f0\\fswiss\\fcharset0 Arial;}}{\\colortbl ;\\red255\\green0\\blue0;\\red0\\green255\\blue0;\\red255\\green255\\blue0;\\red0\\green0\\blue255;\\red255\\green0\\blue255;\\red0\\green255\\blue255;\\red255\\green255\\blue255;}\\margl1440\\margr1440\\vieww9000\\viewh8400\\viewkind0{\\*\\background {\\shp{\\*\\shpinst\\shpleft0\\shptop0\\shpright0\\shpbottom0\\shpfhdr0\\shpbxmargin\\shpbymargin\\shpwr0\\shpwrk0\\shpfblwtxt1\\shpz0\\shplid1025{\\sp{\\sn shapeType}{\\sv 1}}{\\sp{\\sn fFlipH}{\\sv 0}}{\\sp{\\sn fFlipV}{\\sv 0}}{\\sp{\\sn fillColor}{\\sv 12237498}}{\\sp{\\sn fFilled}{\\sv 1}}{\\sp{\\sn lineWidth}{\\sv 0}}{\\sp{\\sn fLine}{\\sv 0}}{\\sp{\\sn bWMode}{\\sv 9}}{\\sp{\\sn fBackground}{\\sv 1}}}}}\\pard\\tx720\\tx1440\\tx2160\\tx2880\\tx3600\\tx4320\\tx5040\\tx5760\\tx6480\\tx7200\\tx7920\\tx8640\\ql\\qnatural\\pardirnatural\\f0\\cf7 ", saveFile);
|
|
|
|
while (!feof(loadFile)) {
|
|
line = (char *)malloc(sizeof(char)*512);
|
|
memset(line, '\0', sizeof(char)*512);
|
|
|
|
fgets(line, 512, loadFile);
|
|
if(color != 7) {
|
|
fputs("\\cf7 ", saveFile);
|
|
color = 7;
|
|
}
|
|
|
|
int n;
|
|
for (n = 0; n < strlen(line); n++) {
|
|
if(line[n] == '^') {
|
|
switch (atoi(&line[n+1])) {
|
|
case 1:
|
|
if(color != 1) {
|
|
color = 1;
|
|
fputs("\\cf1 ", saveFile);
|
|
}
|
|
break;
|
|
case 2:
|
|
if(color != 2) {
|
|
color = 2;
|
|
fputs("\\cf2 ", saveFile);
|
|
}
|
|
break;
|
|
case 3:
|
|
if(color != 3) {
|
|
color = 3;
|
|
fputs("\\cf3 ", saveFile);
|
|
}
|
|
break;
|
|
case 4:
|
|
if(color != 4) {
|
|
color = 4;
|
|
fputs("\\cf4 ", saveFile);
|
|
}
|
|
break;
|
|
case 5:
|
|
if(color != 5) {
|
|
color = 5;
|
|
fputs("\\cf5 ", saveFile);
|
|
}
|
|
break;
|
|
case 6:
|
|
if(color != 6) {
|
|
color = 6;
|
|
fputs("\\cf6 ", saveFile);
|
|
}
|
|
break;
|
|
case 7:
|
|
if(color != 7) {
|
|
color = 7;
|
|
fputs("\\cf7 ", saveFile);
|
|
}
|
|
break;
|
|
case 0:
|
|
if(color != 8) {
|
|
color = 8;
|
|
fputs("\\cf8 ", saveFile);
|
|
}
|
|
break;
|
|
default:
|
|
fputc('^', saveFile);
|
|
fputc(line[n+1], saveFile);
|
|
break;
|
|
}
|
|
n++;
|
|
}
|
|
else if (line[n] == ':' && color != 7) {
|
|
fputs("\\cf7 ", saveFile);
|
|
fputc(':', saveFile);
|
|
}
|
|
else if (line[n] == '\\') {
|
|
if (color != 7) fputs("\\cf7 \\\\", saveFile);
|
|
else fputs("\\\\", saveFile);
|
|
}
|
|
else if (line[n] == ' ' && line[n+1] == 'k' && line[n+2] == 'i' && line[n+3] == 'l' && line[n+4] == 'l' && line[n+5] == 'e' && line[n+6] == 'd' && line[n+7] == ' ' && color != 7) {
|
|
fputs("\\cf7 ", saveFile);
|
|
}
|
|
else if (line[n] == ' ' && line[n+1] == 'b' && line[n+2] == 'y' && line[n+3] == ' ' && color != 7) {
|
|
fputs("\\cf7 ", saveFile);
|
|
}
|
|
else if (line[n] != '\n' && line[n] != '\r') {
|
|
fputc(line[n], saveFile);
|
|
}
|
|
}
|
|
|
|
fputs("\\par ", saveFile);
|
|
|
|
free(line);
|
|
}
|
|
|
|
fputs("}", saveFile);
|
|
}
|
|
else {
|
|
while (!feof(loadFile)) {
|
|
line = (char *)malloc(sizeof(char)*513);
|
|
memset(line, '\0', sizeof(char)*513);
|
|
fgets(line, 512, loadFile);
|
|
|
|
int n;
|
|
for (n = 0; n < strlen(line); n++) {
|
|
if(line[n] == '^') {
|
|
switch (atoi(&line[n+1])) {
|
|
case 1:
|
|
//Skip and don't put anything.
|
|
break;
|
|
case 2:
|
|
//Skip and don't put anything.
|
|
break;
|
|
case 3:
|
|
//Skip and don't put anything.
|
|
break;
|
|
case 4:
|
|
//Skip and don't put anything.
|
|
break;
|
|
case 5:
|
|
//Skip and don't put anything.
|
|
break;
|
|
case 6:
|
|
//Skip and don't put anything.
|
|
break;
|
|
case 7:
|
|
//Skip and don't put anything.
|
|
break;
|
|
case 0:
|
|
//Skip and don't put anything.
|
|
break;
|
|
default:
|
|
fputc('^', saveFile);
|
|
fputc(line[n+1], saveFile);
|
|
break;
|
|
}
|
|
n++;
|
|
}
|
|
else {
|
|
fputc(line[n], saveFile);
|
|
}
|
|
}
|
|
|
|
free(line);
|
|
}
|
|
}
|
|
|
|
fclose(loadFile);
|
|
fclose(saveFile);
|
|
|
|
MessageBox(NULL, "Server log successfully converted.", "Conversion Complete", MB_ICONASTERISK|MB_OK);
|
|
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
return DefWindowProc(hwnd, msg, wParam, lParam);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|