⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 riscos.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
/* * riscos.c * Copyright (C) 2001,2002 A.J. van Os; Released under GPL * * Description: * RISC OS only functions */#include <string.h>#include <stdlib.h>#include <stdarg.h>#include "DeskLib:Error.h"#include "DeskLib:SWI.h"#include "antiword.h"#if !defined(DrawFile_Render)#define DrawFile_Render		0x045540#endif /* !DrawFile_Render */#if !defined(JPEG_Info)#define JPEG_Info		0x049980#endif /* !JPEG_Info *//* * werr - write an error message and exit if needed */voidwerr(int iFatal, const char *szFormat, ...){	va_list tArg;	va_start(tArg, szFormat);	Error_Report(iFatal, (char *)szFormat, tArg);	va_end(tArg);	switch (iFatal) {	case 0:		/* The message is just a warning, so no exit */		return;	case 1:		/* Fatal error with a standard exit */		exit(EXIT_FAILURE);	default:	/* Fatal error with a non-standard exit */		exit(iFatal);	}} /* end of werr *//* * iGetFiletype * This function will get the filetype of the given file. * returns the filetype. */intiGetFiletype(const char *szFilename){	os_error	*e;	int		iType;	fail(szFilename == NULL || szFilename[0] == '\0');	e = SWI(2, 7, SWI_OS_File | XOS_Bit,		23, szFilename,		NULL, NULL, NULL, NULL, NULL, NULL, &iType);	if (e == NULL) {		return iType;	}	werr(0, "Get Filetype error %d: %s", e->errnum, e->errmess);	return -1;} /* end of iGetFiletype *//* * vSetFiletype * This procedure will set the filetype of the given file to the given * type. */voidvSetFiletype(const char *szFilename, int iFiletype){	os_error	*e;	fail(szFilename == NULL || szFilename[0] == '\0');	if (iFiletype < 0x000 || iFiletype > 0xfff) {		return;	}	e = SWI(3, 0, SWI_OS_File | XOS_Bit,		18, szFilename, iFiletype);	if (e != NULL) {		switch (e->errnum) {		case 0x000113:	/* ROM */		case 0x0104e1:	/* Read-only floppy DOSFS */		case 0x0108c9:	/* Read-only floppy ADFS */		case 0x013803:	/* Read-only ArcFS */		case 0x80344a:	/* CD-ROM */			break;		default:			werr(0, "Set Filetype error %d: %s",				e->errnum, e->errmess);			break;		}	}} /* end of vSetFileType *//* * Check if the directory part of the given file exists, make the directory * if it does not exist yet. * Returns TRUE in case of success, otherwise FALSE. */BOOLbMakeDirectory(const char *szFilename){	os_error	*e;	char	*pcLastDot;	int	iObjectType;	char	szDirectory[PATH_MAX+1];	DBG_MSG("bMakeDirectory");	fail(szFilename == NULL || szFilename[0] == '\0');	DBG_MSG(szFilename);	if (strlen(szFilename) >= sizeof(szDirectory)) {		DBG_DEC(strlen(szFilename));		return FALSE;	}	strcpy(szDirectory, szFilename);	pcLastDot = strrchr(szDirectory, '.');	if (pcLastDot == NULL) {		/* No directory equals current directory */		DBG_MSG("No directory part given");		return TRUE;	}	*pcLastDot = '\0';	DBG_MSG(szDirectory);	/* Check if the name exists */	e = SWI(2, 1, SWI_OS_File | XOS_Bit,		17, szDirectory,		&iObjectType);	if (e != NULL) {		werr(0, "Directory check %d: %s", e->errnum, e->errmess);		return FALSE;	}	if (iObjectType == 2) {		/* The name exists and it is a directory */		DBG_MSG("The directory already exists");		return TRUE;	}	if (iObjectType != 0) {		/* The name exists and it is not a directory */		DBG_DEC(iObjectType);		return FALSE;	}	/* The name does not exist, make the directory */	e = SWI(5, 0, SWI_OS_File | XOS_Bit,		8, szDirectory, 0, 0, 0);	if (e != NULL) {		werr(0, "I can't make a directory %d: %s",			e->errnum, e->errmess);		return FALSE;	}	return TRUE;} /* end of bMakeDirectory *//* * iReadCurrentAlphabetNumber * This function reads the current Alphabet number. * Returns the current Alphabet number when successful, otherwise -1 */intiReadCurrentAlphabetNumber(void){	os_error	*e;	int		iAlphabetNumber;	e = SWI(2, 2, SWI_OS_Byte | XOS_Bit,		71, 127,		NULL, &iAlphabetNumber);	if (e == NULL) {		return iAlphabetNumber;	}	werr(0, "Read alphabet error %d: %s", e->errnum, e->errmess);	return -1;} /* end of iReadCurrentAlphabetNumber *//* * iGetRiscOsVersion - get the RISC OS version number * * returns the RISC OS version * 100 */intiGetRiscOsVersion(void){	os_error	*e;	int		iVersion;	e = SWI(3, 2, SWI_OS_Byte | XOS_Bit,		129, 0, 0xff,		NULL, &iVersion);	if (e != NULL) {		werr(0, "Read RISC OS version error %d: %s",			e->errnum, e->errmess);		return 0;	}	switch (iVersion) {	case 0xa0:	/* Arthur 1.20 */		return 120;	case 0xa1:	/* RISC OS 2.00 */		return 200;	case 0xa2:	/* RISC OS 2.01 */		return 201;	case 0xa3:	/* RISC OS 3.00 */		return 300;	case 0xa4:	/* RISC OS 3.1x */		return 310;	case 0xa5:	/* RISC OS 3.50 */		return 350;	case 0xa6:	/* RISC OS 3.60 */		return 360;	case 0xa7:	/* RISC OS 3.7x */		return 370;	case 0xa8:	/* RISC OS 4.0x */		return 400;	default:		if (iVersion >= 0xa9 && iVersion <= 0xaf) {			/* RISC OS 4.10 and up */			return 410;		}		/* Unknown version */		return 0;	}} /* end of iGetRiscOsVersion */#if defined(DEBUG)BOOLbGetJpegInfo(UCHAR *pucJpeg, size_t tJpegSize){	os_error	*e;	int	iReg0, iReg4, iReg5;	e = SWI(3, 6, JPEG_Info | XOS_Bit,		0x00, pucJpeg, tJpegSize,		&iReg0, NULL, NULL, NULL, &iReg4, &iReg5);	if (e == NULL) {		if (iReg0 & BIT(2)) {			DBG_MSG("Pixel density is a simple ratio");		} else {			DBG_MSG("Pixel density is in dpi");		}		DBG_DEC(iReg4);		DBG_DEC(iReg5);		return TRUE;	}	werr(0, "JPEG Info error %d: %s", e->errnum, e->errmess);	return FALSE;} /* end of bGetJpegInfo */#endif /* DEBUG */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -