/* * $Author: djh $ $Date: 1996/04/25 01:24:27 $ * $Header: /mac/src/cap60/netat/RCS/afpcmd.h,v 2.6 1996/04/25 01:24:27 djh Rel djh $ * $Revision: 2.6 $ * */ /* * abafpcmd.h - header file for AppleTalk Filing Protocol Command Packets * * AppleTalk package for UNIX (4.2 BSD). * * Copyright (c) 1986, 1987 by The Trustees of Columbia University in the * City of New York. * * Edit History: * * March, 1987 Schilit Created * */ typedef struct { /* FPAddAPPL */ byte aap_cmd; /* Command */ byte aap_zero; /* Always zero */ word aap_dtrefnum; /* desk top refnum */ sdword aap_dirid; /* directory id */ byte aap_fcreator[4]; /* file creator */ dword aap_apptag; /* application tag */ byte aap_ptype; /* path type */ byte aap_path[MAXPATH]; /* path */ } AddAPPLPkt, *AAPPtr; typedef struct { /* AddComment */ byte adc_cmd; /* Command */ byte adc_zero; /* always zero */ word adc_dtrefnum; /* desk top refnum */ sdword adc_dirid; /* directory id */ byte adc_ptype; /* path type */ byte adc_path[MAXPATH]; /* path */ byte adc_clen; /* comment length */ byte adc_comment[MAXCLEN]; /* comment string (PASCAL) */ } AddCommentPkt, *ACPPtr; typedef struct { /* AddIcon */ byte adi_cmd; /* Command */ byte adi_zero; word adi_dtref; /* Desktop refnum */ byte adi_fcreator[4]; /* file creator */ byte adi_ftype[4]; /* file type */ byte adi_icontype; /* icon type */ byte adi_zero2; dword adi_icontag; /* user icon tag */ word adi_iconsize; /* icon size */ } AddIconPkt, *AIPPtr; typedef struct { /* ByteRangeLock */ byte brl_cmd; /* command */ byte brl_flg; /* flags */ #define BRL_START 0x100 /* high bit */ #define BRL_UNLOCK 0x001 /* low bit */ word brl_refnum; /* file refnum */ dword brl_offset; /* offset to start lock */ dword brl_length; /* number of bytes to lock */ } ByteRangeLockPkt, *BRLPPtr; typedef struct { /* ByteRangeLock Reply */ dword brlr_rangestart; /* range locked */ } ByteRangeLockReplyPkt, *BRLRPPtr; typedef struct { /* FPCloseDir */ byte cdr_cmd; /* command */ byte cdr_zero; /* always zero */ word cdr_volid; /* volume id */ sdword cdr_dirid; /* directory id */ } CloseDirPkt, *CDPPtr; typedef struct { /* FPCloseDT */ byte cdt_cmd; /* command */ byte cdt_zero; /* zero byte */ word cdt_dtrefnum; /* desktop database refnum */ } CloseDTPkt, *CDTPPtr; typedef struct { /* FPCloseFork */ byte cfk_cmd; /* command */ byte cfk_zero; /* zero byte */ word cfk_refnum; /* open fork reference number */ } CloseForkPkt, *CFkPPtr; typedef struct { /* FPCloseVol */ byte cv_cmd; /* command */ byte cv_zero; /* always zero */ word cv_volid; /* volume ID */ } CloseVolPkt, *CVPPtr; typedef struct { /* FPCopyFile (optional) */ byte cpf_cmd; /* command */ byte cpf_zero; /* always zero */ word cpf_svolid; /* source volume id */ sdword cpf_sdirid; /* source directory id */ word cpf_dvolid; /* destination volume id */ sdword cpf_ddirid; /* destination directory id */ byte cpf_sptype; /* source path type */ byte cpf_spath[MAXPATH]; /* source path */ byte cpf_dptype; /* destination path type */ byte cpf_dpath[MAXPATH]; /* destination path */ byte cpf_newtype; /* new path type */ byte cpf_newname[MAXPATH]; /* new name */ } CopyFilePkt, *CpFPPtr; typedef struct { /* FPCreateDir */ byte crd_cmd; /* command */ byte crd_zero; /* always zero */ word crd_volid; /* volume id */ sdword crd_dirid; /* directory id */ byte crd_ptype; /* path type */ byte crd_path[MAXPATH]; /* path */ } CreateDirPkt, *CRDPPtr; typedef struct { /* FPCreateFile */ byte crf_cmd; /* command */ byte crf_flg; /* flags */ #define CRF_HARD 0x80 /* hard create */ word crf_volid; /* volume id */ sdword crf_dirid; /* directory id */ byte crf_ptype; /* path name type */ byte crf_path[MAXPATH]; /* path name */ } CreateFilePkt, *CFPPtr; typedef struct { /* FPDelete */ byte del_cmd; /* command */ byte del_zero; /* always zero */ word del_volid; /* volume id */ sdword del_dirid; /* directory id */ byte del_ptype; /* path type */ byte del_path[MAXPATH]; /* path */ } DeletePkt, *DPPtr; typedef struct { /* FPEnumerate */ byte enu_cmd; /* command */ byte enu_zero; /* always zero */ word enu_volid; /* volume id */ sdword enu_dirid; /* directory id */ word enu_fbitmap; /* file bitmap */ word enu_dbitmap; /* directory bitmap */ word enu_reqcnt; /* request count */ word enu_stidx; /* start index */ word enu_maxreply; /* max reply size */ byte enu_ptype; /* path type */ byte enu_path[MAXPATH]; /* path */ } EnumeratePkt, *EPPtr; typedef struct { byte enurfdp_len; byte enurfdp_flag; byte enurfdp_parms[1]; } EnuReplyParms; typedef struct { /* FPEnumerate Reply */ word enur_fbitmap; word enur_dbitmap; word enur_actcnt; EnuReplyParms enurfdp[1]; } EnumerateReplyPkt, *ERPPtr; #define ENUR_ACTCNT_OFF 4 /* offset to enur_actcnt */ typedef struct { /* FPFlush */ byte fls_cmd; /* command */ byte fls_zero; /* always zero */ word fls_volid; /* volume ID */ } FlushPkt, *FPPtr; typedef struct { /* FPFlushFork */ byte flf_cmd; /* command */ byte flf_zero; /* always zero */ word flf_refnum; /* open fork reference number */ } FlushForkPkt, *FFkPPtr; typedef struct { /* FPGetAPPL */ byte gap_cmd; byte gap_zero; word gap_dtrefnum; /* desk top reference number */ byte gap_fcreator[4]; /* creator type of the appl to be returned */ word gap_applidx; /* index of the APPL entry to be retrieved */ word gap_bitmap; /* bitmap of parms to return */ } GetAPPLPkt, *GAPPtr; typedef struct { /* FPGetAPPL Reply */ word gapr_bitmap; /* returned bitmap */ dword gapr_appltag; /* appl tag */ FileDirParm fdp; /* file parms */ } GetAPPLReplyPkt, *GARPPtr; typedef struct { /* FPGetComment */ byte gcm_cmd; /* command */ byte gcm_zero; word gcm_dtrefnum; /* desktop reference number */ sdword gcm_dirid; /* directory id */ byte gcm_ptype; /* path type */ byte gcm_path[MAXPATH]; /* path */ } GetCommentPkt, *GCPPtr; typedef struct { /* FPGetComment Reply */ byte gcmr_clen; /* comment length */ byte gcmr_ctxt[MAXCLEN]; /* comment text */ } GetCommentReplyPkt, *GCRPPtr; typedef struct { /* FPGetFileDirParms */ byte gdp_cmd; /* command */ byte gdp_zero; /* always zero */ word gdp_volid; /* volume ID */ sdword gdp_dirid; /* directory id */ word gdp_fbitmap; /* file bitmap */ word gdp_dbitmap; /* directory bitmap */ byte gdp_ptype; /* path type */ byte gdp_path[MAXPATH]; /* path */ } GetFileDirParmsPkt, *GFDPPPtr; typedef struct { /* FPGetFileDirParms Reply */ word gdpr_fbitmap; /* file bitmap */ word gdpr_dbitmap; /* directory bitmap */ word gdpr_flags; byte gdpr_zero; /* followed by packed parms */ } GetFileDirParmsReplyPkt, *GFDPRPPtr; typedef struct { /* FPGetForkParms */ byte gfp_cmd; /* command */ byte gfp_zero; /* zero word */ word gfp_refnum; /* open fork reference number */ word gfp_bitmap; /* bitmap */ } GetForkParmsPkt, *GFkPPPtr; typedef struct { /* FPGetForkParms Reply */ byte gfpr_bitmap; /* bitmap */ /* followed by packed fork parms */ } GetForkParmsReplyPkt, *GFkPRPPtr; typedef struct { /* FPGetIcon */ byte gic_cmd; byte gic_zero; word gic_dtrefnum; /* desktop ref num */ byte gic_fcreator[4]; /* file creator */ byte gic_ftype[4]; /* file type */ byte gic_itype; /* icon type */ byte gic_zero2; word gic_length; } GetIconPkt, *GIPPtr; typedef struct { /* FPGetIconInfo */ byte gii_cmd; byte gii_zero; word gii_dtrefnum; byte gii_fcreator[4]; word gii_iidx; /* icon index */ } GetIconInfoPkt, *GIIPPtr; typedef struct { /* FPGetIconInfo Reply */ dword giir_itag; /* icon tag */ byte giir_ftype[4]; /* file type */ byte giir_itype; /* icon type */ byte giir_zero; word giir_size; /* size of icon */ } GetIconInfoReplyPkt, *GIIRPPtr; typedef struct { /* FPGetSrvrInfo */ byte gsi_cmd; /* GetSrvrInfo command */ } GetSrvrInfoPkt, *GSIPPtr; typedef struct { char sr_machtype[17]; /* machine name */ byte *sr_avo; /* offset to afp versions */ byte *sr_uamo; /* user access methods offset (ISTR) */ char *sr_vicono; /* offset to volume icon */ word sr_flags; /* flags */ #define SupportsFPCopyFile 0x01 /* can do a local server copyfile */ #define SupportsChgPwd 0x02 /* AFP2.0: can do change password */ #define DontAllowSavePwd 0x04 /* AFP2.1: user can't save password */ #define SupportsServerMsgs 0x08 /* AFP2.1: can send server messages */ #define SupportsServerSig 0x10 /* AFP2.2: can supply unique signature */ #define SupportsTCPIP 0x20 /* AFP2.2: AFP commands via TCP/IP stream */ #define SupportsSrvrNotif 0x40 /* AFP2.2: server to client messages */ byte sr_servername[33]; /* server name */ byte *sr_sigo; /* AFP2.2: offset to signature */ byte *sr_naddro; /* AFP2.2: offset to network address count */ } GetSrvrInfoReplyPkt, *GSIRPPtr; typedef struct { /* FPGetSrvrParms */ byte gsp_cmd; /* command */ } GetSrvrParmsPkt, *GSPPPtr; typedef struct { /* SrvrParm */ byte volp_flag; /* flags */ #define SRVRP_PASSWD 0x80 /* password is present */ #define SRVRP_CONFIG 0x01 /* user configuration for prodos */ byte volp_name[MAXVLEN]; /* volume name */ } VolParm; typedef struct { /* FPGetSrvrParms Reply */ /* word gspr_volid; /* volume id */ dword gspr_time; /* server time */ byte gspr_nvols; /* number of volume parms returned */ VolParm gspr_volp[1]; /* one VolParm for each volume */ } GetSrvrParmsReplyPkt, *GSPRPPtr; typedef struct { /* FPGetVolParms */ byte gvp_cmd; /* command */ byte gvp_zero; /* always zero */ word gvp_volid; /* volume id */ word gvp_bitmap; /* request bitmap */ } GetVolParmsPkt, *GVPPPtr; typedef struct { /* FPGetVolParms */ word gvpr_bitmap; /* return bitmap */ word gvpr_attr; /* attributes */ word gvpr_sig; /* volume signature */ sdword gvpr_cdate; /* volume creation date */ sdword gvpr_mdate; /* volume modification date */ sdword gvpr_bdate; /* volume backup date */ word gvpr_volid; /* volume id */ sdword gvpr_size; /* size of volume in bytes */ sdword gvpr_free; /* free bytes on volume */ byte gvpr_name[MAXVLEN]; /* advertised name */ byte gvpr_esize[8]; /* extended volume size */ byte gvpr_efree[8]; /* extended bytes free */ } GetVolParmsReplyPkt, *GVPRPPtr; #define UAM_UNKNOWN -1 /* internal code */ #define UAM_ANON 0 #define UAM_CLEAR 1 #define UAM_RANDNUM 2 #define UAM_2WAYRAND 3 #define UAMP_USER 1 /* need user name */ #define UAMP_PASS 2 /* need password */ #define UAMP_RAND 4 /* need randnum */ #define UAMP_ENCR 8 /* need encrypted passwd */ #define UAMP_ZERO 0x10 /* need zero between user and passwd */ #define UAMP_INUM 0x20 /* id number for fplogin exchange */ #define UAMP_TWAY 0x40 /* need second random dword */ typedef struct { /* FPLogin */ byte log_cmd; /* Login command */ byte log_ver[MAXPSTR]; /* version string */ byte log_uam[MAXPSTR]; /* UAM method */ byte log_auth[MAXPSTR]; /* authorization info (optional) */ byte log_passwd[MAXPLEN]; /* 8 bytes for password (plaintext) */ byte log_user[MAXPSTR]; /* user name */ byte log_flag; /* flags for authinfo */ byte log_zero; /* used for zero's */ } LoginPkt, *LPPtr; typedef struct { /* FPLogin Reply */ byte logr_flag; /* flags... */ word logr_idnum; /* id number (under some uams) */ byte logr_randnum[8]; /* 64bit random number for RANDNUM uam */ } LoginReplyPkt, *LRPPtr; typedef struct { /* FPLoginCont */ byte lgc_cmd; /* command */ byte lgc_zero; /* is this here? */ word lgc_idno; /* ID number */ byte lgc_encrypted[8]; /* encrypted version of random number */ /* for randnum exchange uam (64 bits) */ byte lgc_wsencrypt[8]; /* encrypted version of workstation id */ /* for 2-Way rand exchange uam (64 bits) */ byte lgc_flags; /* really just the uam */ } LoginContPkt, *LCPPtr; typedef struct { /* FPLogout */ byte lgo_cmd; } LogoutPkt, *LOPPtr; typedef struct { /* FPMapID */ byte mpi_cmd; /* MapID command */ byte mpi_fcn; /* function */ sdword mpi_id; /* ID to map */ } MapIDPkt, *MIPPtr; typedef struct { /* FPMapID Reply */ byte mpir_name[MAXPSTR]; } MapIDReplyPkt, *MIRPPtr; typedef struct { /* FPMapName */ byte mpn_cmd; /* command */ byte mpn_fcn; /* function */ byte mpn_name[MAXPSTR]; /* name */ } MapNamePkt, *MNPPtr; typedef struct { /* FPMapName Reply */ word mpnr_id; /* returned id */ } MapNameReplyPkt, *MNRPPtr; typedef struct { /* FPMove */ byte mov_cmd; /* command */ byte mov_zero; /* always zero */ word mov_volid; /* volume id */ sdword mov_sdirid; /* source directory id */ sdword mov_ddirid; /* destination directory id */ byte mov_sptype; /* source path type */ byte mov_spath[MAXPATH]; /* source path */ byte mov_dptype; /* destination path type */ byte mov_dpath[MAXPATH]; /* destination path */ byte mov_newtype; /* new type */ byte mov_newname[MAXPATH]; /* new name */ } MovePkt, *MPPtr; typedef struct { /* FPOpenDir */ byte odr_cmd; /* command */ byte odr_zero; /* always zero */ word odr_volid; /* volume ID */ sdword odr_dirid; /* directory ID */ byte odr_ptype; /* path type */ byte odr_path[MAXPATH]; /* path */ } OpenDirPkt, *ODPPtr; typedef struct { /* FPOpenDT */ byte odt_cmd; /* command */ byte odt_zero; word odt_volid; /* desktop volume id */ } OpenDTPkt, *ODTPPtr; typedef struct { /* FPOpenDT Reply */ word odtr_dtrefnum; /* desktop reference number */ } OpenDTReplyPkt, *ODTRPPtr; typedef struct { /* FPOpenFork */ byte ofk_cmd; /* command */ byte ofk_rdflg; /* resource/data flag */ #define OFK_RSRC 0x80 /* resource fork */ word ofk_volid; /* volume id */ sdword ofk_dirid; /* directory id */ word ofk_bitmap; /* bitmap */ word ofk_mode; /* access mode */ #define OFK_MRD 0x01 /* read mode */ #define OFK_MWR 0x02 /* write mode */ #define OFK_MRDX 0x10 /* exclusive read mode */ #define OFK_MWRX 0x20 /* exclusive write mode */ byte ofk_ptype; /* path type */ byte ofk_path[MAXPATH]; /* path name */ } OpenForkPkt, *OFkPPtr; typedef struct { /* FPOpenFork Reply */ word ofkr_bitmap; /* bitmap */ word ofkr_refnum; /* opened fork reference number */ /* File parameters follow */ } OpenForkReplyPkt, *OFkRPPtr; typedef struct { /* FPOpenVol */ byte ovl_cmd; /* command */ byte ovl_zero; /* always zero */ word ovl_bitmap; /* request bitmap */ byte ovl_name[MAXVNAME]; /* volume name packed... */ /* possible null byte */ byte ovl_pass[MAXPASSWD]; /* password (optional) */ } OpenVolPkt, *OVPPtr; typedef struct { /* FPOpenVol Reply */ word ovlr_bitmap; /* request bitmap */ /* volume parameters follow */ } OpenVolReplyPkt, *OVRPPtr; typedef struct { /* FPRead */ byte rdf_cmd; byte rdf_zero; word rdf_refnum; /* fork reference number */ sdword rdf_offset; /* offset for read */ sdword rdf_reqcnt; /* request count */ byte rdf_flag; #define RDF_NEWLINE 0xFF byte rdf_nlchar; /* newline char */ } ReadPkt, *ReadPPtr; typedef struct { /* FPRead Reply */ byte rdfr_data[1]; /* data */ } ReadReplyPkt, *RRPPtr; typedef struct { /* FPRemoveAPPL */ byte rma_cmd; byte rma_zero; word rma_refnum; sdword rma_dirid; byte rma_fcreator[4]; byte rma_ptype; byte rma_path[MAXPATH]; } RemoveAPPLPkt, *RAPPtr; typedef struct { /* FPRemoveComment */ byte rmc_cmd; byte rmc_zero; word rmc_dtrefnum; /* dest top ref num */ sdword rmc_dirid; byte rmc_ptype; byte rmc_path[MAXPATH]; } RemoveCommentPkt, *RCPPtr; typedef struct { /* FPRename */ byte ren_cmd; /* command */ byte ren_zero; /* always zero */ word ren_volid; /* volume id */ sdword ren_dirid; /* directory id */ byte ren_ptype; /* path type */ byte ren_path[MAXPATH]; /* path name */ byte ren_ntype; /* new type */ byte ren_npath[MAXPATH]; /* new path */ } RenamePkt, *RPPtr; typedef struct { /* FPSetDirParms */ byte sdp_cmd; /* command */ byte sdp_zero; /* always zero */ word sdp_volid; /* volume ID */ sdword sdp_dirid; /* parent directory id */ word sdp_bitmap; /* bitmap */ byte sdp_ptype; /* path type */ byte sdp_path[MAXPATH]; /* path */ /* Possible null byte */ /* Directory Parameters: */ FileDirParm fdp; } SetDirParmsPkt, *SDPPPtr; typedef struct { /* FPSetFileParms */ byte sfp_cmd; /* command */ byte sfp_zero; /* always zero */ word sfp_volid; /* volume id */ sdword sfp_dirid; /* directory id */ word sfp_bitmap; /* set bitmap */ byte sfp_ptype; /* path type */ byte sfp_path[MAXPATH]; /* path + file parameters to set */ /* possible null byte */ /* File Parameters: */ FileDirParm fdp; } SetFileParmsPkt, *SFPPPtr; typedef struct { /* FPSetFileDirParms */ byte scp_cmd; /* set common parms command */ byte scp_zero; word scp_volid; sdword scp_dirid; word scp_bitmap; byte scp_ptype; byte scp_path[MAXPATH]; /* possible null byte */ /* Common Parameters follow: */ FileDirParm fdp; } SetFileDirParmsPkt, *SFDPPPtr; typedef struct { /* FPSetForkParms */ byte sfkp_cmd; /* command */ byte sfkp_zero; /* zero word */ word sfkp_refnum; /* reference number */ word sfkp_bitmap; /* bitmap */ sdword sfkp_rflen; /* resource fork length */ sdword sfkp_dflen; /* data fork length */ } SetForkParmsPkt, *SFkPPPtr; typedef struct { /* FPSetVolParms */ byte svp_cmd; /* command */ byte svp_zero; /* always zero */ word svp_volid; /* volume id */ word svp_bitmap; /* set bitmap */ dword svp_backdata; /* backup data to set */ } SetVolParmsPkt, *SVPPPtr; typedef struct { /* FPWrite */ byte wrt_cmd; byte wrt_flag; #define WRT_START 0x01 word wrt_refnum; dword wrt_offset; dword wrt_reqcnt; } WritePkt, *WPPtr; typedef struct { /* FPWrite Reply */ dword wrtr_lwrt; /* last written */ } WriteReplyPkt, *WRPPtr; /* New as of AFP 2.0 */ typedef struct { byte cp_cmd; /* command */ byte cp_zero; /* always zero */ byte cp_uam[MAXPSTR]; /* authentication method */ byte cp_user[MAXPSTR]; /* user name */ byte cp_oldpass[MAXPLEN]; /* 8 bytes for old password */ byte cp_newpass[MAXPLEN]; /* 8 bytes for new password */ byte cp_pad; /* dummy for padding */ } ChgPasswdPkt, *CPPtr; typedef struct { byte cpr_cmd; byte cpr_zero; byte cpr_uam[MAXPSTR]; /* authentication method */ byte cpr_user[MAXPSTR]; /* user name */ byte cpr_newpass[MAXPLEN]; /* 8 bytes for new password */ byte cpr_pad; /* dummy */ } ChgPasswdReplyPkt, *CPRPtr; typedef struct { byte gui_cmd; /* command */ byte gui_flag; /* flag word */ #define GUI_THIS_USER 0x1 /* set implies current user, o.w. use userid */ dword gui_userid; /* user id */ word gui_bitmap; /* bitmap of info to return */ } GetUserInfoPkt, *GUIPtr; typedef struct { word guir_bitmap; /* bitmap to return */ dword guir_userid; /* user id */ dword guir_pgroup; /* primary group */ } GetUserInfoReplyPkt, *GUIRPtr; typedef struct { /* FPExchangeFiles */ byte exc_cmd; /* command */ byte exc_zero; /* always zero */ word exc_volid; /* volume id */ sdword exc_adirid; /* first directory id */ sdword exc_bdirid; /* second directory id */ byte exc_aptype; /* first path type */ byte exc_apath[MAXPATH]; /* first path */ byte exc_bptype; /* second path type */ byte exc_bpath[MAXPATH]; /* second path */ } ExchPkt, *EXPtr; #define SRVRMSGLEN 200 typedef struct { /* FPGetSrvrMsg */ byte msg_cmd; /* command */ byte msg_zero; /* always zero */ word msg_typ; /* message type */ word msg_bitmap; /* bitmap */ } SrvrMsgPkt, *SrvrMsgPtr; typedef struct { word msgr_typ; /* message type */ word msgr_bitmap; /* bitmap */ byte msgr_data[SRVRMSGLEN]; /* message string */ } SrvrMsgReplyPkt, *SrvrMsgReplyPtr; typedef struct { /* FPCreateID */ byte crid_cmd; /* command */ byte crid_zero; /* always zero */ word crid_volid; /* volume ID */ sdword crid_dirid; /* directory ID */ byte crid_ptype; /* path type */ byte crid_path[MAXPATH]; /* path */ } CreateIDPkt, *CreateIDPtr; typedef struct { /* FPDeleteID */ byte did_cmd; /* command */ byte did_zero; /* always zero */ word did_volid; /* volume ID */ sdword did_fileid; /* file ID */ } DeleteIDPkt, *DeleteIDPtr; typedef struct { /* FPResolveID */ byte rid_cmd; /* command */ byte rid_zero; /* always zero */ word rid_volid; /* volume ID */ sdword rid_fileid; /* file id */ word rid_fbitmap; /* result bitmap */ } ResolveIDPkt, *ResolveIDPtr; typedef struct { /* FPResolveID Reply */ word ridr_fbitmap; /* result bitmap */ /* followed by packed parms */ } ResolveIDReplyPkt, *ResolveIDRPtr; typedef struct { int pe_typ; /* type of data */ int pe_off; /* offset in host structure */ int pe_siz; /* size or max size */ int pe_bit; /* bit if specified by bitmap */ } PackEntry; #define P_END -1 /* end of structure */ #define P_WORD 0 /* 2 byte word */ #define P_BYTE 1 /* 1 byte */ #define P_DWRD 2 /* 4 byte double word */ #define P_BYTS 3 /* arbitrary length bytes set by struct len */ #define P_PSTR 4 /* pascal string/c string */ #define P_BMAP 5 /* bitmap (not sent to net) */ #define P_OSTR 6 /* offset c/pascal string */ #define P_PATH 7 /* preserved pascal string */ #define P_OPTR 8 /* offset to object pointer */ #define P_OPTH 9 /* offset to preserved pascal string */ #define P_EVEN 10 /* move to even boundary (+0,+1) */ #define P_ZERO 11 /* mark entry as zero */ #define P_TIME 12 /* entry points to time (dword) */ /* Pack(pointer, type of data, scalar result field) */ #define PACK(pt,t,s) {t,(int) &((pt) 0)->s,sizeof(((pt) 0)->s),0} /* Paks(pointer, type of data, array result field) */ #ifdef ADDRINPACK #define PAKS(pt,t,s) {t,(int) &((pt) 0)->s,sizeof(((pt) 0)->s),0} #else ADDRINPACK #define PAKS(pt,t,s) {t,(int) ((pt) 0)->s,sizeof(((pt) 0)->s),0} #endif ADDRINPACK /* Both require that a "type of data" field type P_BMAP be set first */ /* pakb(pointer, type of data, scalar result field, bit of bitmap */ #define PAKB(pt,t,s,b) {t,(int) &((pt) 0)->s,sizeof(((pt) 0)->s),b} /* pksb(pointer, type of data, array result field, bit of bitmap */ #ifdef ADDRINPACK #define PKSB(pt,t,s,b) {t,(int) &((pt) 0)->s,sizeof(((pt) 0)->s),b} #else ADDRINPACK #define PKSB(pt,t,s,b) {t,(int) ((pt) 0)->s,sizeof(((pt) 0)->s),b} #endif ADDRINPACK /* Pack even - to mark that we should be on even boundary */ #define PACKEVEN() {P_EVEN, 0, 0, 0} /* PACKEND() for ending the packet */ #define PACKEND() {P_END,0,0,0} typedef struct { /* type for packing offset objects */ int optr_len; byte *optr_loc; } OPTRType;