442 lines
14 KiB
C
442 lines
14 KiB
C
/*
|
||
|
||
Copyright (c) 1992 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
afpconst.h
|
||
|
||
Abstract:
|
||
|
||
This module contains the Afp API function codes and error codes.
|
||
|
||
Author:
|
||
|
||
Jameel Hyder (microsoft!jameelh)
|
||
|
||
|
||
Revision History:
|
||
25 Apr 1992 Initial Version
|
||
|
||
Notes: Tab stop: 4
|
||
--*/
|
||
|
||
#ifndef _AFPCONST_
|
||
#define _AFPCONST_
|
||
|
||
/* The real AFP Function codes */
|
||
#define AFP_BYTE_RANGE_LOCK 0x01
|
||
#define AFP_CLOSE_VOL 0x02
|
||
#define AFP_CLOSE_DIR 0x03
|
||
#define AFP_CLOSE_FORK 0x04
|
||
#define AFP_COPY_FILE 0x05
|
||
#define AFP_CREATE_DIR 0x06
|
||
#define AFP_CREATE_FILE 0x07
|
||
#define AFP_DELETE 0x08
|
||
#define AFP_ENUMERATE 0x09
|
||
#define AFP_FLUSH 0x0A
|
||
#define AFP_FLUSH_FORK 0x0B
|
||
/************* 0C-0D ARE UNDEFINED *************/
|
||
#define AFP_GET_FORK_PARMS 0x0E
|
||
#define AFP_GET_SRVR_INFO 0x0F
|
||
#define AFP_GET_SRVR_PARMS 0x10
|
||
#define AFP_GET_VOL_PARMS 0x11
|
||
#define AFP_LOGIN 0x12
|
||
#define AFP_LOGIN_CONT 0x13
|
||
#define AFP_LOGOUT 0x14
|
||
#define AFP_MAP_ID 0x15
|
||
#define AFP_MAP_NAME 0x16
|
||
#define AFP_MOVE_AND_RENAME 0x17
|
||
#define AFP_OPEN_VOL 0x18
|
||
#define AFP_OPEN_DIR 0x19
|
||
#define AFP_OPEN_FORK 0x1A
|
||
#define AFP_READ 0x1B
|
||
#define AFP_RENAME 0x1C
|
||
#define AFP_SET_DIR_PARMS 0x1D
|
||
#define AFP_SET_FILE_PARMS 0x1E
|
||
#define AFP_SET_FORK_PARMS 0x1F
|
||
#define AFP_SET_VOL_PARMS 0x20
|
||
#define AFP_WRITE 0x21
|
||
#define AFP_GET_FILE_DIR_PARMS 0x22
|
||
#define AFP_SET_FILE_DIR_PARMS 0x23
|
||
#define AFP_CHANGE_PASSWORD 0x24
|
||
#define AFP_GET_USER_INFO 0x25
|
||
#define AFP_GET_SRVR_MSG 0x26
|
||
#define AFP_CREATE_ID 0x27
|
||
#define AFP_DELETE_ID 0x28
|
||
#define AFP_RESOLVE_ID 0x29
|
||
#define AFP_EXCHANGE_FILES 0x2A
|
||
#define AFP_CAT_SEARCH 0x2B
|
||
/************* 2C-2F ARE UNDEFINED *************/
|
||
#define AFP_OPEN_DT 0x30
|
||
#define AFP_CLOSE_DT 0x31
|
||
/************* 32 IS UNDEFINED *************/
|
||
#define AFP_GET_ICON 0x33
|
||
#define AFP_GET_ICON_INFO 0x34
|
||
#define AFP_ADD_APPL 0x35
|
||
#define AFP_REMOVE_APPL 0x36
|
||
#define AFP_GET_APPL 0x37
|
||
#define AFP_ADD_COMMENT 0x38
|
||
#define AFP_REMOVE_COMMENT 0x39
|
||
#define AFP_GET_COMMENT 0x3A
|
||
/************* 3B-BF ARE UNDEFINED *************/
|
||
#define AFP_ADD_ICON 0xC0
|
||
/************* C1-FE ARE UNDEFINED *************/
|
||
#define AFF_GET_DOMAIN_LIST 0xFF
|
||
|
||
|
||
|
||
/* AFP Error codes */
|
||
|
||
#define AFP_ERR_NONE 0
|
||
#define AFP_ERR_BASE (-5000)
|
||
#define AFP_ERR_ACCESS_DENIED (AFP_ERR_BASE-0)
|
||
#define AFP_ERR_AUTH_CONTINUE (AFP_ERR_BASE-1)
|
||
#define AFP_ERR_BAD_UAM (AFP_ERR_BASE-2)
|
||
#define AFP_ERR_BAD_VERSION (AFP_ERR_BASE-3)
|
||
#define AFP_ERR_BITMAP (AFP_ERR_BASE-4)
|
||
#define AFP_ERR_CANT_MOVE (AFP_ERR_BASE-5)
|
||
#define AFP_ERR_DENY_CONFLICT (AFP_ERR_BASE-6)
|
||
#define AFP_ERR_DIR_NOT_EMPTY (AFP_ERR_BASE-7)
|
||
#define AFP_ERR_DISK_FULL (AFP_ERR_BASE-8)
|
||
#define AFP_ERR_EOF (AFP_ERR_BASE-9)
|
||
#define AFP_ERR_FILE_BUSY (AFP_ERR_BASE-10)
|
||
#define AFP_ERR_FLAT_VOL (AFP_ERR_BASE-11)
|
||
#define AFP_ERR_ITEM_NOT_FOUND (AFP_ERR_BASE-12)
|
||
#define AFP_ERR_LOCK (AFP_ERR_BASE-13)
|
||
#define AFP_ERR_MISC (AFP_ERR_BASE-14)
|
||
#define AFP_ERR_NO_MORE_LOCKS (AFP_ERR_BASE-15)
|
||
#define AFP_ERR_NO_SERVER (AFP_ERR_BASE-16)
|
||
#define AFP_ERR_OBJECT_EXISTS (AFP_ERR_BASE-17)
|
||
#define AFP_ERR_OBJECT_NOT_FOUND (AFP_ERR_BASE-18)
|
||
#define AFP_ERR_PARAM (AFP_ERR_BASE-19)
|
||
#define AFP_ERR_RANGE_NOT_LOCKED (AFP_ERR_BASE-20)
|
||
#define AFP_ERR_RANGE_OVERLAP (AFP_ERR_BASE-21)
|
||
#define AFP_ERR_SESS_CLOSED (AFP_ERR_BASE-22)
|
||
#define AFP_ERR_USER_NOT_AUTH (AFP_ERR_BASE-23)
|
||
#define AFP_ERR_CALL_NOT_SUPPORTED (AFP_ERR_BASE-24)
|
||
#define AFP_ERR_OBJECT_TYPE (AFP_ERR_BASE-25)
|
||
#define AFP_ERR_TOO_MANY_FILES_OPEN (AFP_ERR_BASE-26)
|
||
#define AFP_ERR_SERVER_GOING_DOWN (AFP_ERR_BASE-27)
|
||
#define AFP_ERR_CANT_RENAME (AFP_ERR_BASE-28)
|
||
#define AFP_ERR_DIR_NOT_FOUND (AFP_ERR_BASE-29)
|
||
#define AFP_ERR_ICON_TYPE (AFP_ERR_BASE-30)
|
||
#define AFP_ERR_VOLUME_LOCKED (AFP_ERR_BASE-31)
|
||
#define AFP_ERR_OBJECT_LOCKED (AFP_ERR_BASE-32)
|
||
/************* -5033 IS Undefined *************/
|
||
#define AFP_ERR_ID_NOT_FOUND (AFP_ERR_BASE-34)
|
||
#define AFP_ERR_ID_EXISTS (AFP_ERR_BASE-35)
|
||
#define AFP_ERR_DIFF_VOL (AFP_ERR_BASE-36) // AfpExchangeFiles
|
||
#define AFP_ERR_CATALOG_CHANGED (AFP_ERR_BASE-37) // AfpCatSearch
|
||
#define AFP_ERR_SAME_OBJECT (AFP_ERR_BASE-38) // AfpExchangeFiles
|
||
#define AFP_ERR_BAD_ID (AFP_ERR_BASE-39)
|
||
#define AFP_ERR_PWD_SAME (AFP_ERR_BASE-40)
|
||
#define AFP_ERR_PWD_TOO_SHORT (AFP_ERR_BASE-41)
|
||
#define AFP_ERR_PWD_EXPIRED (AFP_ERR_BASE-42)
|
||
#define AFP_ERR_INSIDE_SHARE (AFP_ERR_BASE-43) // Specific to AppleShare
|
||
#define AFP_ERR_INSIDE_TRASH (AFP_ERR_BASE-44) // Specific to AppleShare
|
||
#define AFP_ERR_PWD_NEEDS_CHANGE (AFP_ERR_BASE-45) // Specific to AppleShare
|
||
|
||
// The following error codes are used internally and never returned to the
|
||
// client.
|
||
#define AFP_ERR_QUEUE -7000
|
||
#define AFP_ERR_DEFER -7001
|
||
#define AFP_ERR_WRITE_LOCK_REQUIRED -7002
|
||
#define AFP_ERR_EXTENDED -7003
|
||
#define AFP_ERR_REQUEUE -7004
|
||
|
||
|
||
// The following codes are used with the custom UAM to indicate exact
|
||
// reasons for logon failures and change password failures
|
||
#define AFP_ERR_EXTENDED_ERRORS -13000
|
||
#define AFP_ERR_ACCOUNT_DISABLED -13002
|
||
#define AFP_ERR_INVALID_WORKSTATION -13003
|
||
#define AFP_ERR_INVALID_LOGON_HOURS -13004
|
||
#define AFP_ERR_PASSWORD_EXPIRED -13005
|
||
#define AFP_ERR_PASSWORD_CANT_CHANGE -13006
|
||
#define AFP_ERR_PASSWORD_HIST_CONFLICT -13007
|
||
#define AFP_ERR_PASSWORD_TOO_SHORT -13008
|
||
#define AFP_ERR_PASSWORD_TOO_RECENT -13009
|
||
#define AFP_ERR_PASSWORD_RESTRICTED -13010
|
||
#define AFP_ERR_ACCOUNT_RESTRICTED -13011
|
||
|
||
// The following error is returned from a logon when the LsaLogonUser
|
||
// call returns STATUS_LICENSE_QUOTA_EXCEEDED. The mac will map this
|
||
// to the correct dialog no matter what UAM is used.
|
||
#define ASP_SERVER_BUSY -1071
|
||
|
||
|
||
// This is GROSS but we need to do it. Else we get TONS of warnings
|
||
#define True (BOOLEAN)TRUE
|
||
#define False (BOOLEAN)FALSE
|
||
|
||
typedef LONG AFPSTATUS;
|
||
typedef LONG AFPTIME, *PAFPTIME;
|
||
typedef LARGE_INTEGER FORKOFFST, *PFORKOFFST;
|
||
typedef LARGE_INTEGER FORKSIZE, *PFORKSIZE;
|
||
|
||
#ifndef DWORD
|
||
typedef ULONG DWORD;
|
||
typedef DWORD *PDWORD;
|
||
typedef DWORD *LPDWORD;
|
||
#endif
|
||
#ifndef BYTE
|
||
typedef UCHAR BYTE;
|
||
typedef BYTE *PBYTE;
|
||
typedef BYTE *LPBYTE;
|
||
#endif
|
||
|
||
/*
|
||
* The following macros deal with on-the-wire integer and long values
|
||
*
|
||
* On the wire format is big-endian i.e. a long value of 0x01020304 is
|
||
* represented as 01 02 03 04. Similarly an int value of 0x0102 is
|
||
* represented as 01 02.
|
||
*
|
||
* The host format is not assumed since it will vary from processor to
|
||
* processor.
|
||
*/
|
||
|
||
// Get a byte from on-the-wire format to a short in the host format
|
||
#define GETBYTE2SHORT(DstPtr, SrcPtr) \
|
||
*(PUSHORT)(DstPtr) = (USHORT) (*(PBYTE)(SrcPtr))
|
||
|
||
// Get a byte from on-the-wire format to a short in the host format
|
||
#define GETBYTE2DWORD(DstPtr, SrcPtr) \
|
||
*(PDWORD)(DstPtr) = (DWORD) (*(PBYTE)(SrcPtr))
|
||
|
||
// Get a short from on-the-wire format to a dword in the host format
|
||
#define GETSHORT2DWORD(DstPtr, SrcPtr) \
|
||
*(PDWORD)(DstPtr) = ((*((PBYTE)(SrcPtr)+0) << 8) + \
|
||
(*((PBYTE)(SrcPtr)+1) ))
|
||
|
||
// Get a short from on-the-wire format to a dword in the host format
|
||
#define GETSHORT2SHORT(DstPtr, SrcPtr) \
|
||
*(PUSHORT)(DstPtr) = ((*((PBYTE)(SrcPtr)+0) << 8) + \
|
||
(*((PBYTE)(SrcPtr)+1) ))
|
||
|
||
// Get a dword from on-the-wire format to a dword in the host format
|
||
#define GETDWORD2DWORD(DstPtr, SrcPtr) \
|
||
*(PDWORD)(DstPtr) = ((*((PBYTE)(SrcPtr)+0) << 24) + \
|
||
(*((PBYTE)(SrcPtr)+1) << 16) + \
|
||
(*((PBYTE)(SrcPtr)+2) << 8) + \
|
||
(*((PBYTE)(SrcPtr)+3) ))
|
||
|
||
// Get a dword from on-the-wire format to a dword in the same format but
|
||
// also watch out for alignment
|
||
#define GETDWORD2DWORD_NOCONV(DstPtr, SrcPtr) \
|
||
*((PBYTE)(DstPtr)+0) = *((PBYTE)(SrcPtr)+0); \
|
||
*((PBYTE)(DstPtr)+1) = *((PBYTE)(SrcPtr)+1); \
|
||
*((PBYTE)(DstPtr)+2) = *((PBYTE)(SrcPtr)+2); \
|
||
*((PBYTE)(DstPtr)+3) = *((PBYTE)(SrcPtr)+3);
|
||
|
||
// Put a dword from the host format to a short to on-the-wire format
|
||
#define PUTBYTE2BYTE(DstPtr, Src) \
|
||
*((PBYTE)(DstPtr)) = (BYTE)(Src)
|
||
|
||
// Put a dword from the host format to a short to on-the-wire format
|
||
#define PUTSHORT2BYTE(DstPtr, Src) \
|
||
*((PBYTE)(DstPtr)) = ((USHORT)(Src) % 256)
|
||
|
||
// Put a dword from the host format to a short to on-the-wire format
|
||
#define PUTSHORT2SHORT(DstPtr, Src) \
|
||
*((PBYTE)(DstPtr)+0) = (BYTE) ((USHORT)(Src) >> 8), \
|
||
*((PBYTE)(DstPtr)+1) = (BYTE)(Src)
|
||
|
||
// Put a dword from the host format to a byte to on-the-wire format
|
||
#define PUTDWORD2BYTE(DstPtr, Src) \
|
||
*(PBYTE)(DstPtr) = (BYTE)(Src)
|
||
|
||
// Put a dword from the host format to a short to on-the-wire format
|
||
#define PUTDWORD2SHORT(DstPtr, Src) \
|
||
*((PBYTE)(DstPtr)+0) = (BYTE) ((DWORD)(Src) >> 8), \
|
||
*((PBYTE)(DstPtr)+1) = (BYTE) (Src)
|
||
|
||
// Put a dword from the host format to a dword to on-the-wire format
|
||
#define PUTDWORD2DWORD(DstPtr, Src) \
|
||
*((PBYTE)(DstPtr)+0) = (BYTE) ((DWORD)(Src) >> 24), \
|
||
*((PBYTE)(DstPtr)+1) = (BYTE) ((DWORD)(Src) >> 16), \
|
||
*((PBYTE)(DstPtr)+2) = (BYTE) ((DWORD)(Src) >> 8), \
|
||
*((PBYTE)(DstPtr)+3) = (BYTE) (Src)
|
||
|
||
// Put a BYTE[4] array into another BYTE4 array.
|
||
#define PUTBYTE42BYTE4(DstPtr, SrcPtr) \
|
||
*((PBYTE)(DstPtr)+0) = *((PBYTE)(SrcPtr)+0), \
|
||
*((PBYTE)(DstPtr)+1) = *((PBYTE)(SrcPtr)+1), \
|
||
*((PBYTE)(DstPtr)+2) = *((PBYTE)(SrcPtr)+2), \
|
||
*((PBYTE)(DstPtr)+3) = *((PBYTE)(SrcPtr)+3)
|
||
|
||
/* AFP Miscellaneous values */
|
||
|
||
#define AFP_SHORTNAME 1
|
||
#define AFP_LONGNAME 2
|
||
#define VALIDPATHTYPE(PathType) \
|
||
(PathType == AFP_LONGNAME || PathType == AFP_SHORTNAME)
|
||
|
||
#define AFP_HARDCREATE_FLAG 0x80
|
||
|
||
#define AFP_VOLUMES_MAX 255 // Count of volumes that fit in a byte
|
||
#define AFP_FILENAME_LEN 31 // Maximum file name length
|
||
#define AFP_SHORTNAME_LEN 12 // 8.3
|
||
#define AFP_LONGNAME_LEN 31
|
||
#define AFP_MAXCOMMENTSIZE 199
|
||
#define AFP_MAXPWDSIZE 8 // Cleartext password length
|
||
#define BEGINNING_OF_TIME 0x80000000
|
||
#define DAYS_FROM_1980_2000 7305L // (20*365 + 5)
|
||
#define SECONDS_PER_DAY 86400L // 24*60*60
|
||
#define SECONDS_FROM_1980_2000 SECONDS_PER_DAY * DAYS_FROM_1980_2000
|
||
#define NUM_100ns_PER_SECOND 10000000L
|
||
|
||
#define ASP_MAX_STATUS_BUF 512
|
||
#define ASP_QUANTUM 4624
|
||
|
||
#define AFP_SERVER_SIGNATURE *(PDWORD)"AFP"
|
||
#define AFP_SERVER_SIGNATURE_INITIDDB *(PDWORD)"INI"
|
||
#define AFP_SERVER_SIGNATURE_MANUALSTOP *(PDWORD)"MAN"
|
||
#define AFP_SERVER_VERSION 0x00010000
|
||
#define AFP_SERVER_VERSION2 0x00020000
|
||
|
||
// AFP Version strings and values
|
||
#define AFP_NUM_VERSIONS 3
|
||
#define AFP_VER_20 0
|
||
#define AFP_VER_20_NAME "AFPVersion 2.0"
|
||
#define AFP_VER_21 1
|
||
#define AFP_VER_21_NAME "AFPVersion 2.1"
|
||
#define AFP_VER_22 2
|
||
#define AFP_VER_22_NAME "AFP2.2"
|
||
|
||
// Name to use for the Logon Process
|
||
#define AFP_LOGON_PROCESS_NAME "MSAfpSrv"
|
||
|
||
#define AFP_MACHINE_TYPE_STR "Windows NT"
|
||
#define AFP_MACHINE_TYPE_LEN sizeof(AFP_MACHINE_TYPE_STR) - 1
|
||
#define AFP_DEFAULT_WORKSTATION L"Macintosh"
|
||
#define AFP_DEFAULT_WORKSTATION_A "Macintosh"
|
||
|
||
#define AFPSERVER_VOLUME_ICON_FILE_ANSI {'I','C','O','N', 0x0D}
|
||
|
||
#define AFP_ID_PARENT_OF_ROOT 1
|
||
#define AFP_ID_ROOT 2
|
||
#define AFP_ID_NETWORK_TRASH 3
|
||
#define AFP_FIRST_DIRID 4
|
||
#define AFP_MAX_DIRID MAXULONG
|
||
|
||
// NTFS Stream names
|
||
#define AFP_IDDB_STREAM L":AFP_IdIndex"
|
||
#define AFP_DT_STREAM L":AFP_DeskTop"
|
||
#define AFP_RESC_STREAM L":AFP_Resource"
|
||
#define AFP_INFO_STREAM L":AFP_AfpInfo"
|
||
#define AFP_COMM_STREAM L":Comments"
|
||
#define AFP_DATA_STREAM L""
|
||
#define AFP_MAX_STREAMNAME sizeof(AFP_RESC_STREAM)/sizeof(WCHAR)
|
||
#define BIG_PATH_LEN (4*(AFP_FILENAME_LEN + 1))
|
||
|
||
#define FULL_DATA_STREAM_NAME L"::$DATA"
|
||
#define FULL_COMMENT_STREAM_NAME L":Comments:$DATA"
|
||
#define FULL_RESOURCE_STREAM_NAME L":AFP_Resource:$DATA"
|
||
#define FULL_INFO_STREAM_NAME L":AFP_AfpInfo:$DATA"
|
||
|
||
|
||
// Supported file system names
|
||
#define AFP_NTFS L"NTFS"
|
||
#define AFP_CDFS L"CDFS"
|
||
#define AFP_AHFS L"AHFS"
|
||
|
||
// Length of unicode string Buffer to send when querying the FS name
|
||
#define AFP_FSNAME_BUFLEN 30
|
||
|
||
#if DBG
|
||
#define POOL_OVERHEAD (12+8) // 12 for AfpAllocMemory() & 8 for ExAllocatePool()
|
||
#else
|
||
#define POOL_OVERHEAD (8+8) // 8 for AfpAllocMemory() & 8 for ExAllocatePool()
|
||
#endif
|
||
|
||
// Length of buffer to use for enumeration of directories
|
||
#define AFP_ENUMBUF_SIZE (16*1024)
|
||
|
||
// Prepended to full path of volume root in order to open the volume root dir
|
||
#define AFP_DOSDEVICES L"\\DOSDEVICES\\"
|
||
|
||
// Name of the Macintosh System 7.x network trash directory
|
||
#define AFP_NWTRASH_NAME L"Network Trash Folder"
|
||
#define AFP_NWTRASH_NAME_U L"Network Trash Folder"
|
||
#define AFP_NWTRASH_NAME_A "Network Trash Folder"
|
||
|
||
// Default Type/Creator and Extensions
|
||
#define AFP_DEFAULT_ETC_EXT "* "
|
||
#define AFP_DEFAULT_ETC_CREATOR "LMAN"
|
||
#define AFP_DEFAULT_ETC_TYPE "TEXT"
|
||
|
||
#define AFP_MAX_ETCMAP_ENTRIES MAXLONG
|
||
#define AFP_MAX_FREE_ETCMAP_ENTRIES 16
|
||
|
||
|
||
#define AFP_SERVER_TYPE "AFPServer"
|
||
#define AFP_SERVER_ZONE "*"
|
||
|
||
|
||
typedef struct _PascalString
|
||
{
|
||
BYTE ps_Length;
|
||
BYTE ps_String[1];
|
||
} *PASCALSTR;
|
||
|
||
#define SIZE_PASCALSTR(Len) ((Len) + sizeof(struct _PascalString) - 1)
|
||
|
||
typedef struct _AfpPathString
|
||
{
|
||
BYTE aps_PathType;
|
||
BYTE aps_Length;
|
||
BYTE aps_Path[1];
|
||
} *AFPPATHSTR;
|
||
|
||
|
||
// Mac Finder Information layout
|
||
|
||
// see pg. 9-37 of Inside Macintosh vol. 6
|
||
#define FINDER_FLAG_INVISIBLE 0x40 // fd_Attr1
|
||
#define FINDER_FLAG_SET 0x01 // fd_Attr1
|
||
#define FINDER_FLAG_HAS_CUSTOM_ICON 0x04 // fd_Attr1
|
||
|
||
#define FINDER_INFO_SIZE 32
|
||
typedef struct _FinderInfo
|
||
{
|
||
// Force DWORD alignment
|
||
union
|
||
{
|
||
BYTE fd_Type[4];
|
||
DWORD fd_TypeD;
|
||
};
|
||
union
|
||
{
|
||
BYTE fd_Creator[4];
|
||
DWORD fd_CreatorD;
|
||
};
|
||
BYTE fd_Attr1; // Bits 8-15
|
||
BYTE fd_Attr2; // Bits 0-7
|
||
BYTE fd_Location[4];
|
||
BYTE fd_FDWindow[2];
|
||
BYTE fd_OtherStuff[16];
|
||
} FINDERINFO, *PFINDERINFO;
|
||
|
||
// Apple-II (ProDOS) information.
|
||
|
||
// default values for newly discovered items
|
||
#define PRODOS_TYPE_FILE 0x04 // corresponds to finder fdType 'TEXT'
|
||
#define PRODOS_TYPE_DIR 0x0F
|
||
#define PRODOS_AUX_DIR 0x02 // actually 0x0200
|
||
|
||
// some other finder fdType to prodos FileType mapping values
|
||
#define PRODOS_FILETYPE_PSYS 0xFF
|
||
#define PRODOS_FILETYPE_PS16 0xB3
|
||
|
||
#define PRODOS_INFO_SIZE 6
|
||
typedef struct
|
||
{
|
||
BYTE pd_FileType[2];
|
||
BYTE pd_AuxType[4];
|
||
} PRODOSINFO, *PPRODOSINFO;
|
||
|
||
#endif // _AFPCONST_
|
||
|