blob: c636741e500f482453d7def1bdec3fdd108a1130 [file] [log] [blame]
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
// PREPROC: start of file: file guard
#if (!defined(ydialect_included_already) || defined(ydialect_including_section) || defined(ydialect_including_self))
//
//
#if (!defined(ydialect_including_self) && !defined(ydialect_including_section))
#define ydialect_included_already
#endif
//
//
// PREPROC: start of section:
#if (defined(ydialect_) || (!defined(ydialect_including_section) && !defined(ydialect_including_self)))
#undef ydialect_
//
#include "rosetta/rosgen.h" /* rosetta utilities */
// #pragma page "Messages -- Dialect Description Format"
//
// Defining a Dialect
//
// This section outlines some common ways of handling dialect definition to
// simplify construction and understanding a new dialect.
//
//
// General Rules for Dialects
//
// Dialect code numbers are kept in the T16 Bible.
//
// The data structures describing a dialect are in a single file
// which is not a section of some larger file (not a ?section). It
// should be constructed to "stand alone" and only
// require this file be sourced to allow compilation.
//
// A Dialect description File has a header such as the following example:
//
// EXAMPLE
// Requester: File System
// Server: all IOPs
// Name: FS_IOPALL
//
// The last item is the <dialect-name> referenced in the remainder of this
// section.
// A dialect description contains the following:
//
// A data structure for the requests and replies. This is best done as
// one data structure with substructures for each request and each reply.
// This limits the degree of name conflicts and gives short meaningful
// names to the requests (e.g. msg.open). The name of this structure
// should be <dialect-name>_TEMPLATE.
//
// A set of literals for the request and reply codes. This should be
// mutually exclusive (no reply code = any request code). Requests
// should have a name format <dialect-name>_<request substruct-name>.
// Where there is only one reply to a given request the name format
// should be <dialect-name>_<reply-substruct-name>. Where a request may
// return multiple replies variations of this name should be used putting
// "_REPLY" on the end of all reply data structures. An additional reply
// for the simplest reply if required in the dialect (just an error code)
// should be defined as <dialect-name>_SIMPLE_REPLY.
//
// A set of literals for the version numbers with the following format:
// <dialect-name>_VERSION_<date>.
//
// A literal defining the maximum request size in the dialect with the name:
// <dialect-name>_REQUEST_MAXSIZE. If the dialect contains secure messages
// it must add in the securityblock_size_xxx literal (defined in this file
// as SecurityBlock_Size_D00). For example
// Literal Frog_Toad_Request_Maxsize = 128 + SecurityBlock_Size_D00;
//
// A literal defining the maximum reply size in the dialect with the name:
// <dialect-name>_REPLY_MAXSIZE.
// #pragma page "Messages -- Defining VarStrings"
//
// The VARSTRING Data Structure
//
// If the structure contains variable length information it should
// use the VARSTRING structure to be an offset and length to it.
// A varstring structure is defined as
#if !defined(__GNUC__)
#pragma fieldalign shared2 varstring
#endif
struct varstring {
int_16 offset; // Byte offset to data. It is the offset from the
// outermost structure that the varstring is
// contained in (usually the base of the message).
int_16 length; // Byte length of data, 0 = not present.
}; // struct varstring
// The offset is computed from the lowest level of statically
// enclosing structure as in the following example:
//
// Struct Msg (*); Begin
// String Base[0:-1]; ! 0: for access (as in MESSAGE_HEADER define)
// Int A; ! 0:
// Struct SubRec; Begin
// Int B; ! 2:
// Struct Name (VARSTRING); ! 4: variable len name (descriptor)
// end; !struct subrec
// Int C; ! 8:
// String data[0:-1]; ! 10: where variable data may be placed
// End; ! struct msg
//
// Then Msg.Subrec.Name.Offset = 10 or greater, and
// @Msg.Base[ Msg.Subrec.Name.Offset ] is the address of the data.
// [ Note: The variable data in a few instances might itself be a structure
// including varstrings; its own varstring offsets would be relative to
// its own base. ]
//
//
// The following define allows direct access to the data referenced by a
// varstring with no address pointer required (though using
// @VARSTRING_ACCESS(msg,vars) will generate the address).
//
// For example:
// locname ':=' VARSTRING_ACCESS( Msg, Subrec.Name ) FOR
// VARSTRING_LENGTH( Msg, Subrec.Name ) BYTES;
// MSG is a pointer
#define VARSTRING_ACCESS(msg,vars) (&(msg)->base())[ (msg)->vars.offset ]
#define VSACC( msg, vars ) VARSTRING_ACCESS(msg,vars)
#define VARSTRING_LENGTH(msg,vars) (msg)->vars.length
#define VSLEN( msg, vars ) VARSTRING_LENGTH(msg,vars)
// To initialize the varstring offset use the following:
// E.G. VARSTRING_SETOFFSET(msg, open.filename, ptr);
// (both pointers must be string or .EXT as a byte offset is required)
#define VARSTRING_SETOFFSET( msg, vars, ptr) \
(msg)->vars.offset = (int_16)_xlow ((int_ptr)ptr - (int_ptr)msg)
#define VSSET( msg, vars, ptr) VARSTRING_SETOFFSET(msg, vars, ptr)
// #pragma page "Messages -- Message System Parameters as Part of a Message"
//
// The message system provides the server with the following
//
// Request control buffer size:
//
// This is NEVER used to convey "version" information about the
// request. Servers should read the full control buffer even if it is larger
// than the expected buffer to allow new versions to be read with the
// variable data still at the end of the fixed data (which is larger
// in a new version)
//
//
// Request data buffer size:
//
// This is AWAYS used to denote the data size. In particular
// the control part of a message that uses a data buffer should not
// have a field for the size of the data in the buffer. The control
// part may contain sizes of subsets of the data if it represents
// multiple objects.
//
//
// Maximum reply control size:
//
// This is NEVER used to convey version about the desired reply.
// Each dialect has a literal denoting the recommended size for
// any reply in the dialect. The Server's reply must fit into the
// requester's maximum control buffer (so version handling may be more
// complex in that the control reply may have to actually be formated in
// the old version).
//
//
// Maximum reply data size:
//
// This is AWAYS used to denote the size of the desired data (e.g.
// the read count).
//
//
// Some Standard Defines
//
// The MESSAGE_HEADER define is used as the first fields in the dialect
// data structure. It uses the maximum of the request and reply maximum
// size literals to set the size of the message data structure.
//
// The INTERROGATE^DEF define is used to define the basic form of interrogate
// version request and reply (i.e. only the fields defined
// in \(msgfmts\)). If a more complex request or reply is desired then
// it should be defined just like any other request using the name
// INTERROGATE and INTERROGATE_REPLY.
//
// The request code must be manually included as
//
// <dialect_name>_INTERROGATE = 0
// and
// <dialect_name>_INTERROGATE_REPLY = 1.
//
//
// Requests and Replies
//
// All request substructures are equivalenced to REQUEST with bounds of
// [0:-1] (this allows the possibility of the header items changing
// before D00 with only recompilation required).
//
// For example OPEN [0:-1] = REQUEST.
//
// All reply substructures are equivalenced to REPLY with bounds of
// [0:-1]. For replies that map 1 to 1 to requests the naming convention
// of <request-name>_REPLY should be used (e.g. OPEN_REPLY).
// For the simplest reply (just an error return) the following should be
// defined:
//
// STRUCT SIMPLE_REPLY;
// BEGIN INT NODATA[0:-1]; END;
//
// This allows some uniformity on how this special, simple response is
// described. Of course if this is not a valid reply to any request it
// should not be included in the dialect.
//
// #pragma page "Messages -- Dialect Numbers"
//
// Format: DIALECT_<requester>_<server> = nn,-- %oo, <comment>
// -- <product #>: <file name>
//
enum {DIALECT_ZERO = 0, // %0, Unenlightened messages
// T9050: DOLDREQS,DMON0
// T9055: JFSFS0, JFSIOPA0,JFSDISK0
// DDIAL0, DSTATUS0
DIALECT_MSG_ERROR = 1, // %1, Message system: includes only error
// replies.
// T9050: DMSGHI(MSG_ERROR_DIALECT)
DIALECT_FS_IOPALL = 2, // %2, File sys to all iop
// T9055: DFSIOPAL
DIALECT_FS_IOPNONDISK = 3, // %3, File sys to non disk iop
// T9055: DFSIOPNO
DIALECT_FS_IOPDISK = 4, // %4, File sys to disk iop (dp2,odp)
// T9055: DFSIOPDI
DIALECT_FS_FS = 5, // %5, File sys to file sys
// T9055: DFSFS
DIALECT_FS_FSCHECK = 6, // %6, File sys to checkmonitor
// T9055: JFSFSCHK
DIALECT_DSC_IOP = 7, // %7, Pup/coup to all iops currently only
// non disks
// T9023: DDSCIOP
DIALECT_SYSTEMSTATUS = 8, // %10, Guardian Status info
// T9055: DSTATUS, KSYSMSG
DIALECT_IOPRM_IOPRM = 9, // %11, IopRm to IopRm (mainly for
// checkpoint)
// T9219: DIOPRM2
DIALECT_ZSVR_TPPROC = 10, // %12, Tapestry to Tape process
// T6958: DZSVRTP
DIALECT_TMF_IOPDISK = 11, // %13, Tmf to disk iop
// T9066: NTMFDPIF
DIALECT_IOPNONDISK_FS = 12, // %14, Non-disk iop to fs (break)
// T9055: DIOPNOFS
DIALECT_MSGSYS = 13, // %15, Message system (not special msg
// sys response with an error)
// T9050: DMSGHI (MSGSYS_LH_DIALECT)
DIALECT_IOPRM_IOP = 14, // %16, IOPRM to IOP
// T9219: DIOPRMIO
DIALECT_GUARD_IO = 15, // %17, Guardian IO
// T9219: DGUARDIO
DIALECT_OPER = 16, // %20, FS/Guard to $0
// T9055: DOPERATR
DIALECT_MEASURE = 17, // %21, Measure to Measure
// T9086: DMDIAL
DIALECT_PRCMON = 18, // %22, Monitor process control
// T9050: DPRCMON
DIALECT_BUSMON = 19, // %23, Monitor Bus control
// T9050: DBUSMON
DIALECT_MISMON = 20, // %24, Misc. to Monitor
// T9050: DMISMON
DIALECT_CPUMON = 21, // %25, Monitor Cpu control
// T9050: DCPUMON
DIALECT_MEMMON = 22, // %26, Monitor Memory control
// T9050: DMEMMON
DIALECT_DSCMON = 23, // %27, Monitor Dynamic Sys. Conf.
// T9050: DDSCMON
DIALECT_EMSMON = 24, // %30, Monitor Event Mgmt. Sys.
// T9050: <<< unknown file >>>
DIALECT_PCOLL_CDIST = 25, // %31, $0 to $Z0 for keeping $Z0 in sync
// with $0.
// T9631: D0Z0
DIALECT_FS_MONITOR = 26, // %32, Fs to Monitor
// T9055: DFSMON
DIALECT_MEMORYSEND = 27, // %33, Guardian memory function to copy
// sections of resident segments.
// Local only
// T9050: DMEMSEND
DIALECT_EXPLH_NAM = 28, // %34, Expand line handler to nam I/f
// T9057: DLHNAM
DIALECT_EXPMGR_EXPLH = 29, // %35, Expand manager to expand line
// handler
// T9117: DMGRLH
DIALECT_EXPMGR_EXPNCP = 30, // %36, Expand manager to Ncp
// T9117: DMGRNCP
DIALECT_ZNUP_EXPLH = 31, // %37, $Znup to Expand line handler
// T9057: DZNUPLH
DIALECT_EXPLH_EXPLH = 32, // %40, Expand Line handler to lh
// T9057: DLHLH
DIALECT_EXPLH_EXPNCP = 33, // %41, Expand line handler to NCP
// T9057: DLHNCP
DIALECT_ZNUP_EXPNCP = 34, // %42, $Znup to Expand Ncp
// T9057: DZNUPNCP
DIALECT_EXPNCP_EXPLH = 35, // %43, Expand Ncp to Expand Line handler
// T9057: DNCPLH
DIALECT_NAM_EXPLH = 36, // %44, Nam (ipb/x25/lan) to expand line
// handler.
// T9057: DNAMLH
DIALECT_GUARD_ZNUP = 37, // %45, Guardian kernel to $Znup
// T9050: JGRDZNUP
DIALECT_EXPMGR_ZNUP = 38, // %46, Expand manager to $Znup ($Zexp)
// T9117: DMGRZNUP
DIALECT_EXPNCP_EXPNCP = 39, // %47, Expand Net control primary to
// backup
// T9057: DNCPNCP
DIALECT_GUARD_EXPNCP = 40, // %50, Guardian Libs to Ncp
// T9050: DGRDNCP
DIALECT_TMDS_IOP = 41, // %51, Tmds to Iop
// T9459: DTMDSIOP
DIALECT_PCOLL_AUX = 42, // %52, $0 to $Zoper (the $0 aux process)
// T9631: DZ0ZOPR
DIALECT_CMP_IOP = 43, // %53, Cmp to Iop (comm)
// T9394: DCMPIOP
DIALECT_FS_IOPENVOY = 44, // %54, File sys to Envoy Comm IOP
// T9055: DFSIOPEN
// 45,-- %55, unused
DIALECT_AM3270_TR3271 = 46, // %56, Am 3270 to/from Tr 3271
// T9058: DAMTR
DIALECT_COMMIOP_CSM = 47, // %57, Comm Iops to Communication
// Subsystem Manager (CSM)
// T9339: DIOPCSM
DIALECT_CSM_CSM = 48, // %60, Commumication Subsystem manager
// primary to backup
// T9339: DCSMCSM
DIALECT_FS_LINKMON = 49, // %61, File sys to Rabbit LinkMon
// T9055: DFSLINK
DIALECT_MONIPB = 50, // %62, Monitor to IPB Monitor
// T9050: JMONIPB
DIALECT_PX_TAST = 51, // %63, Utility to OSS socket agent
// T8397: STOPTAH
DIALECT_AMPRIM_AMBKUP = 52, // %64, AM3270 and TR3271 primary to
// backup Iop
// T9058: DPRIMBK
DIALECT_SNAX_X25 = 53, // %65, Snax/Xf line handler to X25am
// device
// T9064: <<<unknown file>>>
DIALECT_X25_SNAX = 54, // %66, X25am device to Snax/Xf line
// handler
// T9064: <<unknown file>>>
DIALECT_DP2_DP2 = 55, // %67, DP2 to DP2 dialect (local only)
// T9053: DDP2DP2
DIALECT_FS2_IOPDISK = 56, // %70, FS2 (sql file system) to DP2
// T9196: DDP2SQLD
DIALECT_IOPLIB_IOP = 57, // %71, IopLib (snax) to Iop (snax)
// T9064: <<<unknown file>>>
DIALECT_TMP_LOCAL = 58, // %72, TMF3 processes to TMP
// T9066: <<<unknown file>>>
DIALECT_ENVOY_ENVOY = 59, // %73, Envoy Primary to Backup
// T9051: DENVENV
DIALECT_PXFS_NS = 60, // %74 Posix File System to Name Server
// T8620: FSNSEXTH
DIALECT_PXFS_DP2 = 61, // %75 Posix File System to DP2
// T9053: DPXFSDP2
DIALECT_PXFS_MON = 62, // %76 Posix File System to Posix Monito
// T????: <<<unknown file>>>
DIALECT_PXFM_PS = 63, // %77 Posix File Manager to Pipe Serve
// T????: <<<unknown file>>>
DIALECT_PXNS_DP2 = 64, // %100 Posix Name Server to DP2
// T9053: DPXNSDP2
DIALECT_PXNS_PS = 65, // %101 Posix Name Server to Pipe Server
// T8620: NSPSEXTH
DIALECT_PXPIPE_PS = 66, // %102 Posix Pipe Library to Pipe Server
// T8620: PIPSEXTH
DIALECT_PXMON_NS = 67, // %103 Posix Monitor to Name Server
// T8620: PMNSEXTH
DIALECT_PXMON_FM = 68, // %104 Posix Monitor to File Manager
// T????: <<<unknown file>>>
DIALECT_DSC_ODP = 69, // %105 Dsc (Coup) to Odp (optical disk)
// T9123: DDSCODP
DIALECT_PXMON_IOP = 70, // %106 Posix Monitor to IOPs
// T9053: DPXMRIOP
DIALECT_DP2_PXFM = 71, // %107 Dp2 to Posix File Manager
// T9123: DDP2PXFM
DIALECT_DP2UTIL_DP2 = 72, // %110 Dp2 utility to Dp2
// T9053: DUTIDP2
//DIALECT_TMFRESMON_LOCAL = 73, -- %111 Local TMF components to TMF
// Resident Monitor
// T????:<<<unknown file>>>
//DIALECT_TMFMON2_LOCAL = 74, -- %112 Local TMF components to TMF
// TMFMON2
// T????:<<<unknown file>>>
//DIALECT_TMF_NETWORK = 75, -- %113 TMF TMP to remote TMP
// T????:<<<unknown file>>>
DIALECT_TCPIP_TCPIP = 76, // %114 TCP primary to TCP backup
// T9551:DTCPTCP
DIALECT_SNA_LANTR = 77, // %115 Token ring between SNAX/XF & TLAM
// T9375:DSNATR
DIALECT_LANTR_SNA = 78, // %116 Token ring between TLAM & SNAX/XF
// T9375:DTRSNA
DIALECT_DEBUG_ODP = 79, // %117 Debug to Optical disk
// T9123: DDBGODP
DIALECT_ODP_ODP = 80, // %120 Odp to Odp backup
// T9123: DODPODP
DIALECT_PRC_PRC = 81, // %121 Process Control to Process Control
// T9050: DPRCPRC
DIALECT_RCV_IOPDISK = 82, // %122 TMF recovery (file & volume
// recovery) to IOP disk
// T9066: NRCVDPIF
DIALECT_FS_COMM = 83, // %123 Fs to fscomm
// T9055: DFSCOMM
DIALECT_ORSERV_DP2 = 84, // %124 DP2 to FUP ORSERV
// T9053: DDP2ORE
DIALECT_PXNS_NS = 85, // %125 Posix Name server to its backup
// T8621: NSNSTOPC
DIALECT_SMSPP_DP2 = 86, // %126 SMS pool process to DP2
// S7050: SHPPDPEN
DIALECT_PM_SMSPP = 87, // %127 Placement Managers (currently SMS
// logical volume process and POSIX
// name server) to SMS pool process
// S7050: SHPMPPEH
DIALECT_FS_SMS = 88, // %130 File system to SMS processes
// S7050: SHFSPPEH
DIALECT_SMSMP_SMSPP = 89, // %131 SMS master process ($ZSMS) to
// SMS pool process.
// S7050: SHMPPPEH
DIALECT_SMSPP_PM = 90, // %132 SMS Pool process to Placement
// Managers (currently SMS logical
// volume process and POSIX name
// server)
// S7050: SHPPPMEH
DIALECT_SEC_SFG = 91, // %133
// T9750: DSECSFG
DIALECT_TIF_CLIENTS = 92, // %134 TIF to TIF clients.
// T8698:TMFMON2, T8923:TIFSERVE
DIALECT_XIO_XIO = 93, // %135
// XIO internal dialect
// T8374:DXIOXIO
DIALECT_TP_TA = 94, // %136 OSS sockets: Transport Providers
// (such as TCP) to Transport Agent
// ($ZTAnn process)
// T8397:DTPTA (tal),tptaext.h (C)
DIALECT_TA_TP = 95, // %137 OSS sockets: Transport Agent
// ($ZTAnn) to Transport Providers
// (TCP, et.al.)
// T8397:DTATP (tal),tatpext.h (C)
DIALECT_PUP_SMS = 96, // %140 PUP to SMS process for SMS
// configuration <prod>:<file>
DIALECT_ATP_ATP = 97, // %141 ATP6100 trace commands to
// backup. T9337:<file>
DIALECT_CP_CP = 98, // %142 CP6100 trace commands to
// backup. T9338:<file>
DIALECT_PXNS_LS = 99, // %143 Posix Name Server to AF_UNIX Local
// Server. T8621:NSSOCKC to T8994:ISNCS
DIALECT_PXLS_NS = 100, // %144 Posix AF_UNIX Local Server to
// Name Server. T8994:ISNCS to
// T8621:NSSOCKC
DIALECT_PXMSGQ_MS = 101, // %145 Posix Message Queue Library to
// Message Queue Server
// <prod>:<file>
DIALECT_PXPS_PS = 102, // %146 OSS Pipe Server to OSS Pipe
// Server.
// T8624 pspsexth
DIALECT_PXMON_LS = 103, // %147 OSS Posix Monitor to OSS Local
// Server.
// T8994 pmlsexth
DIALECT_PXLS_LS = 104, // %150 OSS Local Server to OSS Local
// Server.
// T8994 lsnstopc
DIALECT_ACPXF_ACPXF = 105, // %151 EnvoyACP/XF Trace command to
// backup.
// T9088:BSBFS
DIALECT_CONF_ZCNG = 106, // %152 Configuration services API to
// Config Utility Process ($ZCNF)
// T6586:<file>
//DIALECT_TESTER_IOP = 107, -- %153 Error Injector to IOP
// <product>:<file>
//DIALECT_REQ_SMS = 108, -- %154 (TMF) Requester Process to SMS
// <product>:<file>
//DIALECT_TMFRCV_SMS = 109, -- %155 TMF Recovery Process to SMS
// <product>:<file>
DIALECT_IOP_CONMGR = 110, // %156 Sierra WAN IOP to Connection
// Manager
// T8365:<file>
DIALECT_ZCNF_CKPT = 111, // %157 Config Utility Process ($ZCNF)
// Checkpoint to backup
// T6586:<file>
DIALECT_REQ_SCSIIFM = 112, // %160 Requester to SCSI IFM
// T1075:<file>
DIALECT_NSKCOM_SRLMON = 113, // %161 NSKCOM to SRLMON
// T5838:JNSKSRLH
DIALECT_SRLMON_SRLCTL = 114, // %162 SRLMON to SRLCTL
// T7898:JMONMSGH
DIALECT_SRLCTL_SRLMON = 115, // %163 SRLCTL to SRLMON
// T7898:JCTLMSGH
DIALECT_QUERY_SRLCTL = 116, // %164 Phoenix etc. to SRLCTL
// T7898:JCTLMSGH
DIALECT_SRLCTL_MONITOR = 117, // %165 SRLCTL to MONITOR
// T7898:JCTLMSGH
DIALECT_TM_DP2_SQ = 118,
DIALECT_TM_AMP_SQ = 121,
DIALECT_AMP_AMP_SQ = 122,
DIALECT_LAST_VALID_DIALECT = 122 // Range check
// DIALECT_next_to_be_allocated = 123
}; // Range check
// #pragma page "Message Dialects - Common Structures"
//
// The OPENID is returned by a server (IOP) to requester (FS) on open reply
// This must always be treated as a unit by the requester and
// does not have to be constructed the same way for any two
// IOPs.
// As viewed by the IOP and IOPRM it must contain some kind of open index and
// some validity check (like the old request code).
// In particular if an IOP is handling multiple Ldevs (termprocess, odp)
// it may want to place the opener's ldev into one word of the openid
// as it is not a part of many messages done under an open.
//
// For ease of crossreferencing the uses of Openids use the define
// instead of fixed.
//
#define OPENID_DEF fixed_0
//
// The FILEID is sent by requester (FS) to server (IOP) in open request
// This is used for duplicate open (wrongid) checking, each open for
// a process will have a unique value in the struct (qualified by process).
//
#define FILEID_DEF fixed_0
//
// The TCBREF^DEF is used for transaction references in messages. This is not
// the internal definition and is either a transid or a tcbref.
// Its validity in any message is denoted
// by an additional bit (usually Flags.Transid_valid). Additionally, and
// all zero transid in the null transid.
//
#define TCBREF_DEF fixed_0
// #pragma page "Messages -- Standard Request and Reply Headers"
//
// This is the first item in all dialect definitions, except dialect 0.
// The size is determined by the dialect designer and should be the
// value that would be allocated by a requester to issue an arbitrary message
// in the dialect.
//
#define MESSAGE_HEADER \
_redef(int_16,first_word,dialect_type); /* (generic word for Tal substruct access)*/\
int_16 dialect_type; /* defined above, for both request and reply*/\
_redef(unsigned_char,base,dialect_type); /* used for varstring offset accesses*/\
/* request format*/ \
int_16 request_type; /* defined by each dialect*/ \
_redef2(int_32,dialect_request_type,dialect_type /* A short way to check both the dialect*/\
); /* and the request i.e.*/\
/* msg.dialect_request_type = $Dbll(di,req)*/\
int_16 request_version; /* highest version that requester understand*/\
int_16 minimum_interpretation_version; /* lowest version req. will accept*/\
typedef class _ydialect_h_as_class_1 /* all requests equivalenced to this*/\
{ \
public: \
/**** If you add any data to this struct, change this*/ \
/**** literal to reflect the new size of the struct.*/ \
enum {_size = 0}; \
_redefarray(int_16,nodata,0,-1,this[0]); /* use xxx_REQUEST_MAXSIZE literal for len*/\
} __request; \
_redefarrayafter \
(__request,request,0,-1,minimum_interpretation_version); /* substruct request*/\
/* reply format*/ \
_redef(int_16,reply_type,request_type); /* reply code*/ \
_redef(int_16,reply_version,request_version); /* version of the reply*/\
_redef(int_16,error,minimum_interpretation_version); \
typedef class _ydialect_h_as_class_2{ \
public: \
/**** If you add any data to this struct, change this*/ \
/**** literal to reflect the new size of the struct.*/ \
enum {_size = 0}; \
_redefarray(int_16,nodata,0,-1,this[0]); /* use xxx_REPLY_MAXSIZE literal for length*/\
} /* substruct reply*/ \
__reply; \
_redefarrayafter(__reply,reply,0,-1,minimum_interpretation_version)
#if !defined(__GNUC__)
#pragma fieldalign shared2 message_header_template
#endif
class message_header_template {
public:
MESSAGE_HEADER;
};
// #pragma page "Messages - Dialects and Common data Structures"
//
// INTERROGATE^DEF: This define generates the basic interrogate version
// request and reply. For more complex ones define them as other requests
//
#define INTERROGATE_DEF \
typedef class _ydialect_h_as_class_0{ \
public: \
/**** If you add any data to this struct, change this*/ \
/**** literal to reflect the new size of the struct.*/ \
enum {_size = 0}; \
_redefarray(int_16,nodata,0,-1,this[0]); /* placeholder, header is all*/ \
} __interrogate; \
_redefarray(__interrogate,interrogate,0,-1,this[1]); /* substruct interrogate*/\
/**/ \
typedef struct _ydialect_h_as_0 { \
int_16 responder_version; /* Server's (highest) version*/\
/* of this dialect*/ \
int_16 responder_tosversion; /* Server's OS version*/\
} /* substruct interrogate_reply*/ \
__interrogate_reply; \
_redefarray(__interrogate_reply,interrogate_reply,0,-1,this[1])
// #pragma page "Messages -- Secure Messages"
//
// The following defines the length of a securityblock which are part
//
enum {SECURITYBLOCK_SIZE_D00 = 98}; // At D00, size in bytes
// #pragma page "Messages -- Dialect Description Format"
//
#endif
// PREPROC: end of section:
//
//
#if (!defined(ydialect_including_self))
#undef ydialect_including_section
#endif
#endif // file guard
// end of file