diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/riscos_8c_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/riscos_8c_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,267 @@ + + +
+ +00001 /* +00002 * riscos.c +00003 * Copyright (C) 2001,2002 A.J. van Os; Released under GPL +00004 * +00005 * Description: +00006 * RISC OS only functions +00007 */ +00008 +00009 #include <string.h> +00010 #include <stdlib.h> +00011 #include <stdarg.h> +00012 #include "DeskLib:Error.h" +00013 #include "DeskLib:SWI.h" +00014 #include "antiword.h" +00015 +00016 #if !defined(DrawFile_Render) +00017 #define DrawFile_Render 0x045540 +00018 #endif /* !DrawFile_Render */ +00019 #if !defined(JPEG_Info) +00020 #define JPEG_Info 0x049980 +00021 #endif /* !JPEG_Info */ +00022 +00023 /* +00024 * werr - write an error message and exit if needed +00025 */ +00026 void +00027 werr(int iFatal, const char *szFormat, ...) +00028 { +00029 va_list tArg; +00030 +00031 va_start(tArg, szFormat); +00032 Error_Report(iFatal, (char *)szFormat, tArg); +00033 va_end(tArg); +00034 switch (iFatal) { +00035 case 0: /* The message is just a warning, so no exit */ +00036 return; +00037 case 1: /* Fatal error with a standard exit */ +00038 exit(EXIT_FAILURE); +00039 default: /* Fatal error with a non-standard exit */ +00040 exit(iFatal); +00041 } +00042 } /* end of werr */ +00043 +00044 /* +00045 * iGetFiletype +00046 * This function will get the filetype of the given file. +00047 * returns the filetype. +00048 */ +00049 int +00050 iGetFiletype(const char *szFilename) +00051 { +00052 os_error *e; +00053 int iType; +00054 +00055 fail(szFilename == NULL || szFilename[0] == '\0'); +00056 +00057 e = SWI(2, 7, SWI_OS_File | XOS_Bit, +00058 23, szFilename, +00059 NULL, NULL, NULL, NULL, NULL, NULL, &iType); +00060 if (e == NULL) { +00061 return iType; +00062 } +00063 werr(0, "Get Filetype error %d: %s", e->errnum, e->errmess); +00064 return -1; +00065 } /* end of iGetFiletype */ +00066 +00067 /* +00068 * vSetFiletype +00069 * This procedure will set the filetype of the given file to the given +00070 * type. +00071 */ +00072 void +00073 vSetFiletype(const char *szFilename, int iFiletype) +00074 { +00075 os_error *e; +00076 +00077 fail(szFilename == NULL || szFilename[0] == '\0'); +00078 +00079 if (iFiletype < 0x000 || iFiletype > 0xfff) { +00080 return; +00081 } +00082 e = SWI(3, 0, SWI_OS_File | XOS_Bit, +00083 18, szFilename, iFiletype); +00084 if (e != NULL) { +00085 switch (e->errnum) { +00086 case 0x000113: /* ROM */ +00087 case 0x0104e1: /* Read-only floppy DOSFS */ +00088 case 0x0108c9: /* Read-only floppy ADFS */ +00089 case 0x013803: /* Read-only ArcFS */ +00090 case 0x80344a: /* CD-ROM */ +00091 break; +00092 default: +00093 werr(0, "Set Filetype error %d: %s", +00094 e->errnum, e->errmess); +00095 break; +00096 } +00097 } +00098 } /* end of vSetFileType */ +00099 +00100 /* +00101 * Check if the directory part of the given file exists, make the directory +00102 * if it does not exist yet. +00103 * Returns TRUE in case of success, otherwise FALSE. +00104 */ +00105 BOOL +00106 bMakeDirectory(const char *szFilename) +00107 { +00108 os_error *e; +00109 char *pcLastDot; +00110 int iObjectType; +00111 char szDirectory[PATH_MAX+1]; +00112 +00113 DBG_MSG("bMakeDirectory"); +00114 fail(szFilename == NULL || szFilename[0] == '\0'); +00115 DBG_MSG(szFilename); +00116 +00117 if (strlen(szFilename) >= sizeof(szDirectory)) { +00118 DBG_DEC(strlen(szFilename)); +00119 return FALSE; +00120 } +00121 strcpy(szDirectory, szFilename); +00122 pcLastDot = strrchr(szDirectory, '.'); +00123 if (pcLastDot == NULL) { +00124 /* No directory equals current directory */ +00125 DBG_MSG("No directory part given"); +00126 return TRUE; +00127 } +00128 *pcLastDot = '\0'; +00129 DBG_MSG(szDirectory); +00130 /* Check if the name exists */ +00131 e = SWI(2, 1, SWI_OS_File | XOS_Bit, +00132 17, szDirectory, +00133 &iObjectType); +00134 if (e != NULL) { +00135 werr(0, "Directory check %d: %s", e->errnum, e->errmess); +00136 return FALSE; +00137 } +00138 if (iObjectType == 2) { +00139 /* The name exists and it is a directory */ +00140 DBG_MSG("The directory already exists"); +00141 return TRUE; +00142 } +00143 if (iObjectType != 0) { +00144 /* The name exists and it is not a directory */ +00145 DBG_DEC(iObjectType); +00146 return FALSE; +00147 } +00148 /* The name does not exist, make the directory */ +00149 e = SWI(5, 0, SWI_OS_File | XOS_Bit, +00150 8, szDirectory, 0, 0, 0); +00151 if (e != NULL) { +00152 werr(0, "I can't make a directory %d: %s", +00153 e->errnum, e->errmess); +00154 return FALSE; +00155 } +00156 return TRUE; +00157 } /* end of bMakeDirectory */ +00158 +00159 /* +00160 * iReadCurrentAlphabetNumber +00161 * This function reads the current Alphabet number. +00162 * Returns the current Alphabet number when successful, otherwise -1 +00163 */ +00164 int +00165 iReadCurrentAlphabetNumber(void) +00166 { +00167 os_error *e; +00168 int iAlphabetNumber; +00169 +00170 e = SWI(2, 2, SWI_OS_Byte | XOS_Bit, +00171 71, 127, +00172 NULL, &iAlphabetNumber); +00173 if (e == NULL) { +00174 return iAlphabetNumber; +00175 } +00176 werr(0, "Read alphabet error %d: %s", e->errnum, e->errmess); +00177 return -1; +00178 } /* end of iReadCurrentAlphabetNumber */ +00179 +00180 /* +00181 * iGetRiscOsVersion - get the RISC OS version number +00182 * +00183 * returns the RISC OS version * 100 +00184 */ +00185 int +00186 iGetRiscOsVersion(void) +00187 { +00188 os_error *e; +00189 int iVersion; +00190 +00191 e = SWI(3, 2, SWI_OS_Byte | XOS_Bit, +00192 129, 0, 0xff, +00193 NULL, &iVersion); +00194 if (e != NULL) { +00195 werr(0, "Read RISC OS version error %d: %s", +00196 e->errnum, e->errmess); +00197 return 0; +00198 } +00199 switch (iVersion) { +00200 case 0xa0: /* Arthur 1.20 */ +00201 return 120; +00202 case 0xa1: /* RISC OS 2.00 */ +00203 return 200; +00204 case 0xa2: /* RISC OS 2.01 */ +00205 return 201; +00206 case 0xa3: /* RISC OS 3.00 */ +00207 return 300; +00208 case 0xa4: /* RISC OS 3.1x */ +00209 return 310; +00210 case 0xa5: /* RISC OS 3.50 */ +00211 return 350; +00212 case 0xa6: /* RISC OS 3.60 */ +00213 return 360; +00214 case 0xa7: /* RISC OS 3.7x */ +00215 return 370; +00216 case 0xa8: /* RISC OS 4.0x */ +00217 return 400; +00218 default: +00219 if (iVersion >= 0xa9 && iVersion <= 0xaf) { +00220 /* RISC OS 4.10 and up */ +00221 return 410; +00222 } +00223 /* Unknown version */ +00224 return 0; +00225 } +00226 } /* end of iGetRiscOsVersion */ +00227 +00228 #if defined(DEBUG) +00229 BOOL +00230 bGetJpegInfo(UCHAR *pucJpeg, size_t tJpegSize) +00231 { +00232 os_error *e; +00233 int iReg0, iReg4, iReg5; +00234 +00235 e = SWI(3, 6, JPEG_Info | XOS_Bit, +00236 0x00, pucJpeg, tJpegSize, +00237 &iReg0, NULL, NULL, NULL, &iReg4, &iReg5); +00238 if (e == NULL) { +00239 if (iReg0 & BIT(2)) { +00240 DBG_MSG("Pixel density is a simple ratio"); +00241 } else { +00242 DBG_MSG("Pixel density is in dpi"); +00243 } +00244 DBG_DEC(iReg4); +00245 DBG_DEC(iReg5); +00246 return TRUE; +00247 } +00248 werr(0, "JPEG Info error %d: %s", e->errnum, e->errmess); +00249 return FALSE; +00250 } /* end of bGetJpegInfo */ +00251 #endif /* DEBUG */ +