Files @ r20790:1c40c83d41c6
Branch filter:

Location: cpp/openttd-patchpack/source/src/os/os2/os2.cpp - annotation

frosch
(svn r25834) -Codechange: Use NUM_OBJECTS_PER_GRF instead of NUM_OBJECTS to properly distinguish limits per NewGRF and limits of the pool.
-Change: [NewGRF] Lower the limit of object types per NewGRF from 256 to 255 to prevent usage of ID 0xFF in Action3, and thus allowing it to become an extended byte somewhen.
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r17271:3e6d78458bdb
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r20485:b630adf7e860
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r13191:af1540e675da
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r13191:af1540e675da
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r12836:aa53aa9303d2
r18624:af0d406ed005
r18624:af0d406ed005
r18624:af0d406ed005
r18624:af0d406ed005
r18624:af0d406ed005
/* $Id$ */

/*
 * This file is part of OpenTTD.
 * OpenTTD 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, version 2.
 * OpenTTD 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 General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 */

/** @file os2.cpp OS2 related OS support. */

#include "../../stdafx.h"
#include "../../openttd.h"
#include "../../gui.h"
#include "../../fileio_func.h"
#include "../../fios.h"
#include "../../openttd.h"
#include "../../core/random_func.hpp"
#include "../../string_func.h"
#include "../../textbuf_gui.h"

#include "table/strings.h"

#include <dirent.h>
#include <unistd.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <time.h>
#ifndef __INNOTEK_LIBC__
	#include <dos.h>
#endif

#define INCL_WIN
#define INCL_WINCLIPBOARD

#include <os2.h>
#ifndef __INNOTEK_LIBC__
	#include <i86.h>
#endif

bool FiosIsRoot(const char *file)
{
	return file[3] == '\0';
}

void FiosGetDrives()
{
	uint disk, disk2, save, total;

#ifndef __INNOTEK_LIBC__
	_dos_getdrive(&save); // save original drive
#else
	save = _getdrive(); // save original drive
	char wd[MAX_PATH];
	getcwd(wd, MAX_PATH);
	total = 'z';
#endif

	/* get an available drive letter */
#ifndef __INNOTEK_LIBC__
	for (disk = 1;; disk++) {
		_dos_setdrive(disk, &total);
#else
	for (disk = 'A';; disk++) {
		_chdrive(disk);
#endif
		if (disk >= total)  break;

#ifndef __INNOTEK_LIBC__
		_dos_getdrive(&disk2);
#else
		disk2 = _getdrive();
#endif

		if (disk == disk2) {
			FiosItem *fios = _fios_items.Append();
			fios->type = FIOS_TYPE_DRIVE;
			fios->mtime = 0;
#ifndef __INNOTEK_LIBC__
			snprintf(fios->name, lengthof(fios->name),  "%c:", 'A' + disk - 1);
#else
			snprintf(fios->name, lengthof(fios->name),  "%c:", disk);
#endif
			strecpy(fios->title, fios->name, lastof(fios->title));
		}
	}

	/* Restore the original drive */
#ifndef __INNOTEK_LIBC__
	_dos_setdrive(save, &total);
#else
	chdir(wd);
#endif
}

bool FiosGetDiskFreeSpace(const char *path, uint64 *tot)
{
#ifndef __INNOTEK_LIBC__
	struct diskfree_t free;
	char drive = path[0] - 'A' + 1;

	if (tot != NULL && _getdiskfree(drive, &free) == 0) {
		*tot = free.avail_clusters * free.sectors_per_cluster * free.bytes_per_sector;
		return true;
	}

	return false;
#else
	uint64 free = 0;

#ifdef HAS_STATVFS
	{
		struct statvfs s;

		if (statvfs(path, &s) != 0) return false;
		free = (uint64)s.f_frsize * s.f_bavail;
	}
#endif
	if (tot != NULL) *tot = free;
	return true;
#endif
}

bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb)
{
	char filename[MAX_PATH];

	snprintf(filename, lengthof(filename), "%s" PATHSEP "%s", path, ent->d_name);
	return stat(filename, sb) == 0;
}

bool FiosIsHiddenFile(const struct dirent *ent)
{
	return ent->d_name[0] == '.';
}

void ShowInfo(const char *str)
{
	HAB hab;
	HMQ hmq;
	ULONG rc;

	/* init PM env. */
	hmq = WinCreateMsgQueue((hab = WinInitialize(0)), 0);

	/* display the box */
	rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, (const unsigned char *)str, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_INFORMATION);

	/* terminate PM env. */
	WinDestroyMsgQueue(hmq);
	WinTerminate(hab);
}

void ShowOSErrorBox(const char *buf, bool system)
{
	HAB hab;
	HMQ hmq;
	ULONG rc;

	/* init PM env. */
	hmq = WinCreateMsgQueue((hab = WinInitialize(0)), 0);

	/* display the box */
	rc = WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, (const unsigned char *)buf, (const unsigned char *)"OpenTTD", 0, MB_OK | MB_MOVEABLE | MB_ERROR);

	/* terminate PM env. */
	WinDestroyMsgQueue(hmq);
	WinTerminate(hab);
}

int CDECL main(int argc, char *argv[])
{
	SetRandomSeed(time(NULL));

	return openttd_main(argc, argv);
}

bool GetClipboardContents(char *buffer, size_t buff_len)
{
/* XXX -- Currently no clipboard support implemented with GCC */
#ifndef __INNOTEK_LIBC__
	HAB hab = 0;

	if (WinOpenClipbrd(hab))
	{
		const char *text = (const char*)WinQueryClipbrdData(hab, CF_TEXT);

		if (text != NULL)
		{
			ttd_strlcpy(buffer, text, buff_len);
			WinCloseClipbrd(hab);
			return true;
		}

		WinCloseClipbrd(hab);
	}
#endif
	return false;
}


void CSleep(int milliseconds)
{
#ifndef __INNOTEK_LIBC__
	delay(milliseconds);
#else
	usleep(milliseconds * 1000);
#endif
}

const char *FS2OTTD(const char *name) {return name;}
const char *OTTD2FS(const char *name) {return name;}

uint GetCPUCoreCount()
{
	return 1;
}