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

📄 record.c

📁 open source bios with linux platform, very good and can be reused.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * libhfs - library for reading and writing Macintosh HFS volumes * Copyright (C) 1996-1998 Robert Leslie * * This program 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; either version 2 of the License, or * (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: record.c,v 1.9 1998/11/02 22:09:07 rob Exp $ */#include "openbios/config.h"#include "libhfs.h"#include "record.h"#include "data.h"/* * NAME:	record->packcatkey() * DESCRIPTION:	pack a catalog record key */void r_packcatkey(const CatKeyRec *key, byte *pkey, unsigned int *len){  const byte *start = pkey;  d_storesb(&pkey, key->ckrKeyLen);  d_storesb(&pkey, key->ckrResrv1);  d_storeul(&pkey, key->ckrParID);  d_storestr(&pkey, key->ckrCName, sizeof(key->ckrCName));  if (len)    *len = HFS_RECKEYSKIP(start);}/* * NAME:	record->unpackcatkey() * DESCRIPTION:	unpack a catalog record key */void r_unpackcatkey(const byte *pkey, CatKeyRec *key){  d_fetchsb(&pkey, &key->ckrKeyLen);  d_fetchsb(&pkey, &key->ckrResrv1);  d_fetchul(&pkey, &key->ckrParID);  d_fetchstr(&pkey, key->ckrCName, sizeof(key->ckrCName));}/* * NAME:	record->packextkey() * DESCRIPTION:	pack an extents record key */void r_packextkey(const ExtKeyRec *key, byte *pkey, unsigned int *len){  const byte *start = pkey;  d_storesb(&pkey, key->xkrKeyLen);  d_storesb(&pkey, key->xkrFkType);  d_storeul(&pkey, key->xkrFNum);  d_storeuw(&pkey, key->xkrFABN);  if (len)    *len = HFS_RECKEYSKIP(start);}/* * NAME:	record->unpackextkey() * DESCRIPTION:	unpack an extents record key */void r_unpackextkey(const byte *pkey, ExtKeyRec *key){  d_fetchsb(&pkey, &key->xkrKeyLen);  d_fetchsb(&pkey, &key->xkrFkType);  d_fetchul(&pkey, &key->xkrFNum);  d_fetchuw(&pkey, &key->xkrFABN);}/* * NAME:	record->comparecatkeys() * DESCRIPTION:	compare two (packed) catalog record keys */int r_comparecatkeys(const CatKeyRec *key1, const CatKeyRec *key2){  int diff;  diff = key1->ckrParID - key2->ckrParID;  if (diff)    return diff;  return d_relstring(key1->ckrCName, key2->ckrCName);}/* * NAME:	record->compareextkeys() * DESCRIPTION:	compare two (packed) extents record keys */int r_compareextkeys(const ExtKeyRec *key1, const ExtKeyRec *key2){  int diff;  diff = key1->xkrFNum - key2->xkrFNum;  if (diff)    return diff;  diff = (unsigned char) key1->xkrFkType -         (unsigned char) key2->xkrFkType;  if (diff)    return diff;  return key1->xkrFABN - key2->xkrFABN;}/* * NAME:	record->packcatdata() * DESCRIPTION:	pack catalog record data */void r_packcatdata(const CatDataRec *data, byte *pdata, unsigned int *len){  const byte *start = pdata;  int i;  d_storesb(&pdata, data->cdrType);  d_storesb(&pdata, data->cdrResrv2);  switch (data->cdrType)    {    case cdrDirRec:      d_storesw(&pdata, data->u.dir.dirFlags);      d_storeuw(&pdata, data->u.dir.dirVal);      d_storeul(&pdata, data->u.dir.dirDirID);      d_storesl(&pdata, data->u.dir.dirCrDat);      d_storesl(&pdata, data->u.dir.dirMdDat);      d_storesl(&pdata, data->u.dir.dirBkDat);      d_storesw(&pdata, data->u.dir.dirUsrInfo.frRect.top);      d_storesw(&pdata, data->u.dir.dirUsrInfo.frRect.left);      d_storesw(&pdata, data->u.dir.dirUsrInfo.frRect.bottom);      d_storesw(&pdata, data->u.dir.dirUsrInfo.frRect.right);      d_storesw(&pdata, data->u.dir.dirUsrInfo.frFlags);      d_storesw(&pdata, data->u.dir.dirUsrInfo.frLocation.v);      d_storesw(&pdata, data->u.dir.dirUsrInfo.frLocation.h);      d_storesw(&pdata, data->u.dir.dirUsrInfo.frView);      d_storesw(&pdata, data->u.dir.dirFndrInfo.frScroll.v);      d_storesw(&pdata, data->u.dir.dirFndrInfo.frScroll.h);      d_storesl(&pdata, data->u.dir.dirFndrInfo.frOpenChain);      d_storesw(&pdata, data->u.dir.dirFndrInfo.frUnused);      d_storesw(&pdata, data->u.dir.dirFndrInfo.frComment);      d_storesl(&pdata, data->u.dir.dirFndrInfo.frPutAway);      for (i = 0; i < 4; ++i)	d_storesl(&pdata, data->u.dir.dirResrv[i]);      break;    case cdrFilRec:      d_storesb(&pdata, data->u.fil.filFlags);      d_storesb(&pdata, data->u.fil.filTyp);      d_storesl(&pdata, data->u.fil.filUsrWds.fdType);      d_storesl(&pdata, data->u.fil.filUsrWds.fdCreator);      d_storesw(&pdata, data->u.fil.filUsrWds.fdFlags);      d_storesw(&pdata, data->u.fil.filUsrWds.fdLocation.v);      d_storesw(&pdata, data->u.fil.filUsrWds.fdLocation.h);      d_storesw(&pdata, data->u.fil.filUsrWds.fdFldr);      d_storeul(&pdata, data->u.fil.filFlNum);      d_storeuw(&pdata, data->u.fil.filStBlk);      d_storeul(&pdata, data->u.fil.filLgLen);      d_storeul(&pdata, data->u.fil.filPyLen);      d_storeuw(&pdata, data->u.fil.filRStBlk);      d_storeul(&pdata, data->u.fil.filRLgLen);      d_storeul(&pdata, data->u.fil.filRPyLen);      d_storesl(&pdata, data->u.fil.filCrDat);      d_storesl(&pdata, data->u.fil.filMdDat);      d_storesl(&pdata, data->u.fil.filBkDat);      d_storesw(&pdata, data->u.fil.filFndrInfo.fdIconID);      for (i = 0; i < 4; ++i)	d_storesw(&pdata, data->u.fil.filFndrInfo.fdUnused[i]);      d_storesw(&pdata, data->u.fil.filFndrInfo.fdComment);      d_storesl(&pdata, data->u.fil.filFndrInfo.fdPutAway);      d_storeuw(&pdata, data->u.fil.filClpSize);      for (i = 0; i < 3; ++i)	{	  d_storeuw(&pdata, data->u.fil.filExtRec[i].xdrStABN);	  d_storeuw(&pdata, data->u.fil.filExtRec[i].xdrNumABlks);	}      for (i = 0; i < 3; ++i)	{	  d_storeuw(&pdata, data->u.fil.filRExtRec[i].xdrStABN);	  d_storeuw(&pdata, data->u.fil.filRExtRec[i].xdrNumABlks);	}      d_storesl(&pdata, data->u.fil.filResrv);      break;    case cdrThdRec:      for (i = 0; i < 2; ++i)	d_storesl(&pdata, data->u.dthd.thdResrv[i]);      d_storeul(&pdata, data->u.dthd.thdParID);      d_storestr(&pdata, data->u.dthd.thdCName,		 sizeof(data->u.dthd.thdCName));      break;    case cdrFThdRec:      for (i = 0; i < 2; ++i)	d_storesl(&pdata, data->u.fthd.fthdResrv[i]);      d_storeul(&pdata, data->u.fthd.fthdParID);      d_storestr(&pdata, data->u.fthd.fthdCName,		 sizeof(data->u.fthd.fthdCName));      break;    default:      ASSERT(0);    }  if (len)    *len += pdata - start;}/* * NAME:	record->unpackcatdata() * DESCRIPTION:	unpack catalog record data */void r_unpackcatdata(const byte *pdata, CatDataRec *data){  int i;  d_fetchsb(&pdata, &data->cdrType);  d_fetchsb(&pdata, &data->cdrResrv2);  switch (data->cdrType)    {    case cdrDirRec:      d_fetchsw(&pdata, &data->u.dir.dirFlags);      d_fetchuw(&pdata, &data->u.dir.dirVal);      d_fetchul(&pdata, &data->u.dir.dirDirID);      d_fetchsl(&pdata, &data->u.dir.dirCrDat);      d_fetchsl(&pdata, &data->u.dir.dirMdDat);      d_fetchsl(&pdata, &data->u.dir.dirBkDat);      d_fetchsw(&pdata, &data->u.dir.dirUsrInfo.frRect.top);      d_fetchsw(&pdata, &data->u.dir.dirUsrInfo.frRect.left);      d_fetchsw(&pdata, &data->u.dir.dirUsrInfo.frRect.bottom);      d_fetchsw(&pdata, &data->u.dir.dirUsrInfo.frRect.right);      d_fetchsw(&pdata, &data->u.dir.dirUsrInfo.frFlags);      d_fetchsw(&pdata, &data->u.dir.dirUsrInfo.frLocation.v);      d_fetchsw(&pdata, &data->u.dir.dirUsrInfo.frLocation.h);      d_fetchsw(&pdata, &data->u.dir.dirUsrInfo.frView);      d_fetchsw(&pdata, &data->u.dir.dirFndrInfo.frScroll.v);      d_fetchsw(&pdata, &data->u.dir.dirFndrInfo.frScroll.h);      d_fetchsl(&pdata, &data->u.dir.dirFndrInfo.frOpenChain);      d_fetchsw(&pdata, &data->u.dir.dirFndrInfo.frUnused);

⌨️ 快捷键说明

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