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

📄 psf.c

📁 psp开发用的所有头文件。包含所有系统API。需要psp-gcc编译器。在www.psp-dev.com上有
💻 C
字号:
/* * PSP Software Development Kit - http://www.pspdev.org * ----------------------------------------------------------------------- * Licensed under the BSD license, see LICENSE in PSPSDK root for details. * * psf.c - PSF parsing routines * * Copyright (c) 2005 Jim Paris <jim@jtan.com> * Coypright (c) 2005 psp123 * * $Id: psf.c 1560 2005-12-10 01:16:32Z jim $ */#include "psf.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <malloc.h>#include <pspchnnlsv.h>/* Find to the named section in the PSF file, and return an   absolute pointer to it and the section size. */int find_psf_section(const char *name,		     unsigned char *data,		     int dataLen,		     unsigned char **location,		     int *size){	unsigned short int nameLoc;        int i, magicHead, strLoc, headLen, numSects;	int sectCurLen, sectBufLen, sectBufLoc, curPos;	if (dataLen < 0x14)		return -1;	/* Get the basics from the header */        magicHead = *(unsigned int *)&data[0x00];        strLoc = *(unsigned int *)&data[0x08];        headLen = *(unsigned int *)&data[0x0C];        numSects = *(unsigned int *)&data[0x10];        /* Do some error checking */        if (magicHead != 0x46535000)                return -2;        /* Verify strLoc is proper */        if ((strLoc > headLen) || (strLoc >= dataLen))                return -3;        /* Verify headLen is proper */        if (headLen >= dataLen)                return -4;        /* Verify numSects is proper */        if (numSects != ((strLoc - 0x14) / 0x10))                return -5;	/* Process all sections */        for (i = 0; i < numSects; i++)        {                /* Get the curPos */                curPos = 0x14 + (i * 0x10);                /* Verify curPos is proper */                if (curPos >= strLoc)                        return -6;                /* Get some basic info about this section */                nameLoc = *(unsigned short *)&data[curPos];                sectCurLen = *(unsigned short *)&data[curPos + 0x04];                sectBufLen = *(unsigned short *)&data[curPos + 0x08];                sectBufLoc = *(unsigned short *)&data[curPos + 0x0C];                /* Do some error checking */                if ((nameLoc < dataLen) && (sectCurLen < dataLen)		    && (sectBufLen < dataLen) && (sectBufLoc < dataLen))                {                        /* Check if this is the section we want */                        if (!stricmp((char *)&data[strLoc + nameLoc], name))                        {                                /* Update the location and size */                                *location = &data[headLen + sectBufLoc];                                *size = sectBufLen;                                return 0;                        }                }        }        /* Section was not found if it makes it here */        return -7;}/* Find the named file inside the FILE_LIST, and return   an absolute pointer to it. */int find_psf_datafile(const char *name,		      unsigned char *filelist,		      int size,		      unsigned char **location){        int i;	        /* Process all files */        for (i = 0; (i + 0x0d) <= size; i += 0x20)        {                /* Check if this is the filename we want */		if (!strncasecmp((char *)&filelist[i], name, 0x0d)) {			*location = &filelist[i];			return 0;		}        }	        /* File was not found if it makes it here */        return -1;}

⌨️ 快捷键说明

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