A free MS Word reader for Linux and RISC OS. Antiword converts the files from Word 2, 6, 7, 97, 2000

源代码在线查看: riscos.c

软件大小: 311 K
上传用户: cq745
关键词: Word Antiword converts reader
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*				 * riscos.c				 * Copyright (C) 2001,2002 A.J. van Os; Released under GPL				 *				 * Description:				 * RISC OS only functions				 */								#include 				#include 				#include 				#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				 */				void				werr(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.				 */				int				iGetFiletype(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.				 */				void				vSetFiletype(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.				 */				BOOL				bMakeDirectory(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				 */				int				iReadCurrentAlphabetNumber(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				 */				int				iGetRiscOsVersion(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 							/* RISC OS 4.10 and up */							return 410;						}						/* Unknown version */						return 0;					}				} /* end of iGetRiscOsVersion */								#if defined(DEBUG)				BOOL				bGetJpegInfo(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 */							

相关资源