/****************************************************************/ /* */ /* syspack.c */ /* */ /* System Disk Byte Order Packing Functions */ /* */ /* Copyright (c) 1995 */ /* Pasquale J. Villani */ /* All Rights Reserved */ /* */ /* This file is part of DOS-C. */ /* */ /* DOS-C 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, or (at your option) any later version. */ /* */ /* DOS-C 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 DOS-C; see the file COPYING. If not, */ /* write to the Free Software Foundation, 675 Mass Ave, */ /* Cambridge, MA 02139, USA. */ /* */ /****************************************************************/ #include "../../hdr/portab.h" #include "globals.h" /* $Logfile: C:/dos-c/src/fs/syspack.c_v $ */ #ifndef IPL static BYTE *syspackRcsId = "$Header: C:/dos-c/src/fs/syspack.c_v 1.2 01 Sep 1995 17:48:42 patv $"; #endif /* * $Log: C:/dos-c/src/fs/syspack.c_v $ * * Rev 1.2 01 Sep 1995 17:48:42 patv * First GPL release. * * Rev 1.1 30 Jul 1995 20:50:26 patv * Eliminated version strings in ipl * * Rev 1.0 02 Jul 1995 8:05:34 patv * Initial revision. */ #ifdef NONNATIVE VOID getlong (REG VOID *vp, LONG *lp) { *lp = (((BYTE *)vp)[0] & 0xff) + ((((BYTE *)vp)[1] & 0xff) << 8) + ((((BYTE *)vp)[2] & 0xff) << 16) + ((((BYTE *)vp)[3] & 0xff) << 24); } VOID getword (REG VOID *vp, WORD *wp) { *wp = (((BYTE *)vp)[0] & 0xff) + ((((BYTE *)vp)[1] & 0xff) << 8); } VOID getbyte (VOID *vp, BYTE *bp) { *bp = *((BYTE *)vp); } VOID fgetword (REG VOID FAR *vp, WORD FAR *wp) { *wp = (((BYTE FAR *)vp)[0] & 0xff) + ((((BYTE FAR *)vp)[1] & 0xff) << 8); } VOID fgetlong (REG VOID FAR *vp, LONG FAR *lp) { *lp = (((BYTE *)vp)[0] & 0xff) + ((((BYTE *)vp)[1] & 0xff) << 8) + ((((BYTE *)vp)[2] & 0xff) << 16) + ((((BYTE *)vp)[3] & 0xff) << 24); } VOID fgetbyte (VOID FAR *vp, BYTE FAR *bp) { *bp = *((BYTE FAR *)vp); } VOID fputlong (LONG FAR *lp, VOID FAR *vp) { REG BYTE FAR *bp = (BYTE FAR *)vp; bp[0] = *lp & 0xff; bp[1] = (*lp >> 8) & 0xff; bp[2] = (*lp >> 16) & 0xff; bp[3] = (*lp >> 24) & 0xff; } VOID fputword (WORD FAR *wp, VOID FAR *vp) { REG BYTE FAR *bp = (BYTE FAR *)vp; bp[0] = *wp & 0xff; bp[1] = (*wp >> 8) & 0xff; } VOID fputbyte (BYTE FAR *bp, VOID FAR *vp) { *(BYTE FAR *)vp = *bp; } #endif VOID getdirent (BYTE FAR *vp, struct dirent FAR *dp) { fbcopy(&vp[DIR_NAME], dp -> dir_name, FNAME_SIZE); fbcopy(&vp[DIR_EXT], dp -> dir_ext, FEXT_SIZE); fgetbyte(&vp[DIR_ATTRIB], (BYTE FAR *)&dp -> dir_attrib); fgetword(&vp[DIR_TIME], (WORD FAR *)&dp -> dir_time); fgetword(&vp[DIR_DATE], (WORD FAR *)&dp -> dir_date); fgetword(&vp[DIR_START], (WORD FAR *)&dp -> dir_start); fgetlong(&vp[DIR_SIZE], (LONG FAR *)&dp -> dir_size); } VOID putdirent (struct dirent FAR *dp, BYTE FAR *vp) { REG COUNT i; REG BYTE FAR *p; fbcopy(dp -> dir_name, &vp[DIR_NAME], FNAME_SIZE); fbcopy(dp -> dir_ext, &vp[DIR_EXT], FEXT_SIZE); fputbyte((BYTE FAR *)&dp -> dir_attrib, &vp[DIR_ATTRIB]); fputword((WORD FAR *)&dp -> dir_time, &vp[DIR_TIME]); fputword((WORD FAR *)&dp -> dir_date, &vp[DIR_DATE]); fputword((WORD FAR *)&dp -> dir_start, &vp[DIR_START]); fputlong((LONG FAR *)&dp -> dir_size, &vp[DIR_SIZE]); for(i = 0, p = (BYTE FAR *)&vp[DIR_RESERVED]; i < 10; i++) *p++ = NULL; }