As with "file_write_error_message()", so with
[obnox/wireshark/wip.git] / ncp2222.py
1 #!/usr/bin/env python
2
3 """
4 Creates C code from a table of NCP type 0x2222 packet types.
5 (And 0x3333, which are the replies, but the packets are more commonly
6 refered to as type 0x2222; the 0x3333 replies are understood to be
7 part of the 0x2222 "family")
8
9 The data-munging code was written by Gilbert Ramirez.
10 The NCP data comes from Greg Morris <GMORRIS@novell.com>.
11 Many thanks to Novell for letting him work on this.
12
13 Additional data sources:
14 "Programmer's Guide to the NetWare Core Protocol" by Steve Conner and Dianne Conner.
15
16 Novell provides info at:
17
18 http://developer.novell.com/ndk/ncp.htm  (where you can download an
19 *.exe file which installs a PDF, although you may have to create a login
20 to do this)
21
22 or
23
24 http://developer.novell.com/ndk/doc/ncp/
25 for a badly-formatted HTML version of the same PDF.
26
27
28 $Id: ncp2222.py,v 1.63 2003/11/01 04:42:19 guy Exp $
29
30
31 Portions Copyright (c) 2000-2002 by Gilbert Ramirez <gram@alumni.rice.edu>.
32 Portions Copyright (c) Novell, Inc. 2000-2003.
33
34 This program is free software; you can redistribute it and/or
35 modify it under the terms of the GNU General Public License
36 as published by the Free Software Foundation; either version 2
37 of the License, or (at your option) any later version.
38
39 This program is distributed in the hope that it will be useful,
40 but WITHOUT ANY WARRANTY; without even the implied warranty of
41 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
42 GNU General Public License for more details.
43
44 You should have received a copy of the GNU General Public License
45 along with this program; if not, write to the Free Software
46 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
47 """
48
49 import os
50 import sys
51 import string
52 import getopt
53 import traceback
54
55 errors          = {}
56 groups          = {}
57 packets         = []
58 compcode_lists  = None
59 ptvc_lists      = None
60 msg             = None
61
62 REC_START       = 0
63 REC_LENGTH      = 1
64 REC_FIELD       = 2
65 REC_ENDIANNESS  = 3
66 REC_VAR         = 4
67 REC_REPEAT      = 5
68 REC_REQ_COND    = 6
69
70 NO_VAR          = -1
71 NO_REPEAT       = -1
72 NO_REQ_COND     = -1
73 NO_LENGTH_CHECK = -2
74
75
76 PROTO_LENGTH_UNKNOWN    = -1
77
78 global_highest_var = -1
79 global_req_cond = {}
80
81
82 REQ_COND_SIZE_VARIABLE = "REQ_COND_SIZE_VARIABLE"
83 REQ_COND_SIZE_CONSTANT = "REQ_COND_SIZE_CONSTANT"
84
85 ##############################################################################
86 # Global containers
87 ##############################################################################
88
89 class UniqueCollection:
90         """The UniqueCollection class stores objects which can be compared to other
91         objects of the same class. If two objects in the collection are equivalent,
92         only one is stored."""
93
94         def __init__(self, name):
95                 "Constructor"
96                 self.name = name
97                 self.members = []
98                 self.member_reprs = {}
99
100         def Add(self, object):
101                 """Add an object to the members lists, if a comparable object
102                 doesn't already exist. The object that is in the member list, that is
103                 either the object that was added or the comparable object that was
104                 already in the member list, is returned."""
105
106                 r = repr(object)
107                 # Is 'object' a duplicate of some other member?
108                 if self.member_reprs.has_key(r):
109                         return self.member_reprs[r]
110                 else:
111                         self.member_reprs[r] = object
112                         self.members.append(object)
113                         return object
114
115         def Members(self):
116                 "Returns the list of members."
117                 return self.members
118
119         def HasMember(self, object):
120                 "Does the list of members contain the object?"
121                 if self.members_reprs.has_key(repr(object)):
122                         return 1
123                 else:
124                         return 0
125
126 # This list needs to be defined before the NCP types are defined,
127 # because the NCP types are defined in the global scope, not inside
128 # a function's scope.
129 ptvc_lists      = UniqueCollection('PTVC Lists')
130
131 ##############################################################################
132
133 class NamedList:
134         "NamedList's keep track of PTVC's and Completion Codes"
135         def __init__(self, name, list):
136                 "Constructor"
137                 self.name = name
138                 self.list = list
139
140         def __cmp__(self, other):
141                 "Compare this NamedList to another"
142
143                 if isinstance(other, NamedList):
144                         return cmp(self.list, other.list)
145                 else:
146                         return 0
147
148
149         def Name(self, new_name = None):
150                 "Get/Set name of list"
151                 if new_name != None:
152                         self.name = new_name
153                 return self.name
154
155         def Records(self):
156                 "Returns record lists"
157                 return self.list
158
159         def Null(self):
160                 "Is there no list (different from an empty list)?"
161                 return self.list == None
162
163         def Empty(self):
164                 "It the list empty (different from a null list)?"
165                 assert(not self.Null())
166
167                 if self.list:
168                         return 0
169                 else:
170                         return 1
171
172         def __repr__(self):
173                 return repr(self.list)
174
175 class PTVC(NamedList):
176         """ProtoTree TVBuff Cursor List ("PTVC List") Class"""
177
178         def __init__(self, name, records):
179                 "Constructor"
180                 NamedList.__init__(self, name, [])
181
182                 global global_highest_var
183
184                 expected_offset = None
185                 highest_var = -1
186
187                 named_vars = {}
188
189                 # Make a PTVCRecord object for each list in 'records'
190                 for record in records:
191                         offset = record[REC_START]
192                         length = record[REC_LENGTH]
193                         field = record[REC_FIELD]
194                         endianness = record[REC_ENDIANNESS]
195
196                         # Variable
197                         var_name = record[REC_VAR]
198                         if var_name:
199                                 # Did we already define this var?
200                                 if named_vars.has_key(var_name):
201                                         sys.exit("%s has multiple %s vars." % \
202                                                 (name, var_name))
203
204                                 highest_var = highest_var + 1
205                                 var = highest_var
206                                 if highest_var > global_highest_var:
207                                     global_highest_var = highest_var
208                                 named_vars[var_name] = var
209                         else:
210                                 var = NO_VAR
211
212                         # Repeat
213                         repeat_name = record[REC_REPEAT]
214                         if repeat_name:
215                                 # Do we have this var?
216                                 if not named_vars.has_key(repeat_name):
217                                         sys.exit("%s does not have %s var defined." % \
218                                                 (name, var_name))
219                                 repeat = named_vars[repeat_name]
220                         else:
221                                 repeat = NO_REPEAT
222
223                         # Request Condition
224                         req_cond = record[REC_REQ_COND]
225                         if req_cond != NO_REQ_COND:
226                                 global_req_cond[req_cond] = None
227
228                         ptvc_rec = PTVCRecord(field, length, endianness, var, repeat, req_cond)
229
230                         if expected_offset == None:
231                                 expected_offset = offset
232
233                         elif expected_offset == -1:
234                                 pass
235
236                         elif expected_offset != offset and offset != -1:
237                                 msg.write("Expected offset in %s for %s to be %d\n" % \
238                                         (name, field.HFName(), expected_offset))
239                                 sys.exit(1)
240
241                         # We can't make a PTVC list from a variable-length
242                         # packet, unless the fields can tell us at run time
243                         # how long the packet is. That is, nstring8 is fine, since
244                         # the field has an integer telling us how long the string is.
245                         # Fields that don't have a length determinable at run-time
246                         # cannot be variable-length.
247                         if type(ptvc_rec.Length()) == type(()):
248                                 if isinstance(ptvc_rec.Field(), nstring):
249                                         expected_offset = -1
250                                         pass
251                                 elif isinstance(ptvc_rec.Field(), nbytes):
252                                         expected_offset = -1
253                                         pass
254                                 elif isinstance(ptvc_rec.Field(), struct):
255                                         expected_offset = -1
256                                         pass
257                                 else:
258                                         field = ptvc_rec.Field()
259                                         assert 0, "Cannot make PTVC from %s, type %s" % \
260                                                 (field.HFName(), field)
261
262                         elif expected_offset > -1:
263                                 if ptvc_rec.Length() < 0:
264                                         expected_offset = -1
265                                 else:
266                                         expected_offset = expected_offset + ptvc_rec.Length()
267
268
269                         self.list.append(ptvc_rec)
270
271         def ETTName(self):
272                 return "ett_%s" % (self.Name(),)
273
274
275         def Code(self):
276                 x =  "static const ptvc_record %s[] = {\n" % (self.Name())
277                 for ptvc_rec in self.list:
278                         x = x +  "\t%s,\n" % (ptvc_rec.Code())
279                 x = x + "\t{ NULL, 0, NULL, NO_ENDIANNESS, NO_VAR, NO_REPEAT, NO_REQ_COND, NCP_FMT_NONE }\n"
280                 x = x + "};\n"
281                 return x
282
283         def __repr__(self):
284                 x = ""
285                 for ptvc_rec in self.list:
286                         x = x + repr(ptvc_rec)
287                 return x
288
289
290 class PTVCBitfield(PTVC):
291         def __init__(self, name, vars):
292                 NamedList.__init__(self, name, [])
293
294                 for var in vars:
295                         ptvc_rec = PTVCRecord(var, var.Length(), var.Endianness(),
296                                 NO_VAR, NO_REPEAT, NO_REQ_COND)
297                         self.list.append(ptvc_rec)
298
299         def Code(self):
300                 ett_name = self.ETTName()
301                 x = "static gint %s;\n" % (ett_name,)
302
303                 x = x + "static const ptvc_record ptvc_%s[] = {\n" % (self.Name())
304                 for ptvc_rec in self.list:
305                         x = x +  "\t%s,\n" % (ptvc_rec.Code())
306                 x = x + "\t{ NULL, 0, NULL, NO_ENDIANNESS, NO_VAR, NO_REPEAT, NO_REQ_COND, NCP_FMT_NONE }\n"
307                 x = x + "};\n"
308
309                 x = x + "static const sub_ptvc_record %s = {\n" % (self.Name(),)
310                 x = x + "\t&%s,\n" % (ett_name,)
311                 x = x + "\tNULL,\n"
312                 x = x + "\tptvc_%s,\n" % (self.Name(),)
313                 x = x + "};\n"
314                 return x
315
316
317 class PTVCRecord:
318         def __init__(self, field, length, endianness, var, repeat, req_cond):
319                 "Constructor"
320                 self.field      = field
321                 self.length     = length
322                 self.endianness = endianness
323                 self.var        = var
324                 self.repeat     = repeat
325                 self.req_cond   = req_cond
326
327         def __cmp__(self, other):
328                 "Comparison operator"
329                 if self.field != other.field:
330                         return 1
331                 elif self.length < other.length:
332                         return -1
333                 elif self.length > other.length:
334                         return 1
335                 elif self.endianness != other.endianness:
336                         return 1
337                 else:
338                         return 0
339
340         def Code(self):
341                 # Nice textual representations
342                 if self.var == NO_VAR:
343                         var = "NO_VAR"
344                 else:
345                         var = self.var
346
347                 if self.repeat == NO_REPEAT:
348                         repeat = "NO_REPEAT"
349                 else:
350                         repeat = self.repeat
351
352                 if self.req_cond == NO_REQ_COND:
353                         req_cond = "NO_REQ_COND"
354                 else:
355                         req_cond = global_req_cond[self.req_cond]
356                         assert req_cond != None
357
358                 if isinstance(self.field, struct):
359                         return self.field.ReferenceString(var, repeat, req_cond)
360                 else:
361                         return self.RegularCode(var, repeat, req_cond)
362
363         def RegularCode(self, var, repeat, req_cond):
364                 "String representation"
365                 endianness = 'BE'
366                 if self.endianness == LE:
367                         endianness = 'LE'
368
369                 length = None
370
371                 if type(self.length) == type(0):
372                         length = self.length
373                 else:
374                         # This is for cases where a length is needed
375                         # in order to determine a following variable-length,
376                         # like nstring8, where 1 byte is needed in order
377                         # to determine the variable length.
378                         var_length = self.field.Length()
379                         if var_length > 0:
380                                 length = var_length
381
382                 if length == PROTO_LENGTH_UNKNOWN:
383                         # XXX length = "PROTO_LENGTH_UNKNOWN"
384                         pass
385
386                 assert length, "Length not handled for %s" % (self.field.HFName(),)
387
388                 sub_ptvc_name = self.field.PTVCName()
389                 if sub_ptvc_name != "NULL":
390                         sub_ptvc_name = "&%s" % (sub_ptvc_name,)
391
392
393                 return "{ &%s, %s, %s, %s, %s, %s, %s, %s }" % \
394                         (self.field.HFName(), length, sub_ptvc_name,
395                         endianness, var, repeat, req_cond,
396                         self.field.SpecialFmt())
397
398         def Offset(self):
399                 return self.offset
400
401         def Length(self):
402                 return self.length
403
404         def Field(self):
405                 return self.field
406
407         def __repr__(self):
408                 return "{%s len=%s end=%s var=%s rpt=%s rqc=%s}" % \
409                         (self.field.HFName(), self.length,
410                         self.endianness, self.var, self.repeat, self.req_cond)
411
412 ##############################################################################
413
414 class NCP:
415         "NCP Packet class"
416         def __init__(self, func_code, description, group, has_length=1):
417                 "Constructor"
418                 self.func_code          = func_code
419                 self.description        = description
420                 self.group              = group
421                 self.codes              = None
422                 self.request_records    = None
423                 self.reply_records      = None
424                 self.has_length         = has_length
425                 self.req_cond_size      = None
426                 self.req_info_str       = None
427
428                 if not groups.has_key(group):
429                         msg.write("NCP 0x%x has invalid group '%s'\n" % \
430                                 (self.func_code, group))
431                         sys.exit(1)
432
433                 if self.HasSubFunction():
434                         # NCP Function with SubFunction
435                         self.start_offset = 10
436                 else:
437                         # Simple NCP Function
438                         self.start_offset = 7
439
440         def ReqCondSize(self):
441                 return self.req_cond_size
442
443         def ReqCondSizeVariable(self):
444                 self.req_cond_size = REQ_COND_SIZE_VARIABLE
445
446         def ReqCondSizeConstant(self):
447                 self.req_cond_size = REQ_COND_SIZE_CONSTANT
448
449         def FunctionCode(self, part=None):
450                 "Returns the function code for this NCP packet."
451                 if part == None:
452                         return self.func_code
453                 elif part == 'high':
454                         if self.HasSubFunction():
455                                 return (self.func_code & 0xff00) >> 8
456                         else:
457                                 return self.func_code
458                 elif part == 'low':
459                         if self.HasSubFunction():
460                                 return self.func_code & 0x00ff
461                         else:
462                                 return 0x00
463                 else:
464                         msg.write("Unknown directive '%s' for function_code()\n" % (part))
465                         sys.exit(1)
466
467         def HasSubFunction(self):
468                 "Does this NPC packet require a subfunction field?"
469                 if self.func_code <= 0xff:
470                         return 0
471                 else:
472                         return 1
473
474         def HasLength(self):
475                 return self.has_length
476
477         def Description(self):
478                 return self.description
479
480         def Group(self):
481                 return self.group
482
483         def PTVCRequest(self):
484                 return self.ptvc_request
485
486         def PTVCReply(self):
487                 return self.ptvc_reply
488
489         def Request(self, size, records=[], **kwargs):
490                 self.request_size = size
491                 self.request_records = records
492                 if self.HasSubFunction():
493                         if self.HasLength():
494                                 self.CheckRecords(size, records, "Request", 10)
495                         else:
496                                 self.CheckRecords(size, records, "Request", 8)
497                 else:
498                         self.CheckRecords(size, records, "Request", 7)
499                 self.ptvc_request = self.MakePTVC(records, "request")
500
501                 if kwargs.has_key("info_str"):
502                         self.req_info_str = kwargs["info_str"]
503
504         def Reply(self, size, records=[]):
505                 self.reply_size = size
506                 self.reply_records = records
507                 self.CheckRecords(size, records, "Reply", 8)
508                 self.ptvc_reply = self.MakePTVC(records, "reply")
509
510         def CheckRecords(self, size, records, descr, min_hdr_length):
511                 "Simple sanity check"
512                 if size == NO_LENGTH_CHECK:
513                         return
514                 min = size
515                 max = size
516                 if type(size) == type(()):
517                         min = size[0]
518                         max = size[1]
519
520                 lower = min_hdr_length
521                 upper = min_hdr_length
522
523                 for record in records:
524                         rec_size = record[REC_LENGTH]
525                         rec_lower = rec_size
526                         rec_upper = rec_size
527                         if type(rec_size) == type(()):
528                                 rec_lower = rec_size[0]
529                                 rec_upper = rec_size[1]
530
531                         lower = lower + rec_lower
532                         upper = upper + rec_upper
533
534                 error = 0
535                 if min != lower:
536                         msg.write("%s records for 2222/0x%x sum to %d bytes minimum, but param1 shows %d\n" \
537                                 % (descr, self.FunctionCode(), lower, min))
538                         error = 1
539                 if max != upper:
540                         msg.write("%s records for 2222/0x%x sum to %d bytes maximum, but param1 shows %d\n" \
541                                 % (descr, self.FunctionCode(), upper, max))
542                         error = 1
543
544                 if error == 1:
545                         sys.exit(1)
546
547
548         def MakePTVC(self, records, name_suffix):
549                 """Makes a PTVC out of a request or reply record list. Possibly adds
550                 it to the global list of PTVCs (the global list is a UniqueCollection,
551                 so an equivalent PTVC may already be in the global list)."""
552
553                 name = "%s_%s" % (self.CName(), name_suffix)
554                 ptvc = PTVC(name, records)
555                 return ptvc_lists.Add(ptvc)
556
557         def CName(self):
558                 "Returns a C symbol based on the NCP function code"
559                 return "ncp_0x%x" % (self.func_code)
560
561         def InfoStrName(self):
562                 "Returns a C symbol based on the NCP function code, for the info_str"
563                 return "info_str_0x%x" % (self.func_code)
564
565         def Variables(self):
566                 """Returns a list of variables used in the request and reply records.
567                 A variable is listed only once, even if it is used twice (once in
568                 the request, once in the reply)."""
569
570                 variables = {}
571                 if self.request_records:
572                         for record in self.request_records:
573                                 var = record[REC_FIELD]
574                                 variables[var.HFName()] = var
575
576                                 sub_vars = var.SubVariables()
577                                 for sv in sub_vars:
578                                         variables[sv.HFName()] = sv
579
580                 if self.reply_records:
581                         for record in self.reply_records:
582                                 var = record[REC_FIELD]
583                                 variables[var.HFName()] = var
584
585                                 sub_vars = var.SubVariables()
586                                 for sv in sub_vars:
587                                         variables[sv.HFName()] = sv
588
589                 return variables.values()
590
591         def CalculateReqConds(self):
592                 """Returns a list of request conditions (dfilter text) used
593                 in the reply records. A request condition is listed only once,
594                 even it it used twice. """
595                 texts = {}
596                 if self.reply_records:
597                         for record in self.reply_records:
598                                 text = record[REC_REQ_COND]
599                                 if text != NO_REQ_COND:
600                                         texts[text] = None
601
602                 if len(texts) == 0:
603                         self.req_conds = None
604                         return None
605
606                 dfilter_texts = texts.keys()
607                 dfilter_texts.sort()
608                 name = "%s_req_cond_indexes" % (self.CName(),)
609                 return NamedList(name, dfilter_texts)
610
611         def GetReqConds(self):
612                 return self.req_conds
613
614         def SetReqConds(self, new_val):
615                 self.req_conds = new_val
616
617
618         def CompletionCodes(self, codes=None):
619                 """Sets or returns the list of completion
620                 codes. Internally, a NamedList is used to store the
621                 completion codes, but the caller of this function never
622                 realizes that because Python lists are the input and
623                 output."""
624
625                 if codes == None:
626                         return self.codes
627
628                 # Sanity check
629                 okay = 1
630                 for code in codes:
631                         if not errors.has_key(code):
632                                 msg.write("Errors table does not have key 0x%04x for NCP=0x%x\n" % (code,
633                                         self.func_code))
634                                 okay = 0
635
636                 # Delay the exit until here so that the programmer can get
637                 # the complete list of missing error codes
638                 if not okay:
639                         sys.exit(1)
640
641                 # Create CompletionCode (NamedList) object and possible
642                 # add it to  the global list of completion code lists.
643                 name = "%s_errors" % (self.CName(),)
644                 codes.sort()
645                 codes_list = NamedList(name, codes)
646                 self.codes = compcode_lists.Add(codes_list)
647
648                 self.Finalize()
649
650         def Finalize(self):
651                 """Adds the NCP object to the global collection of NCP
652                 objects. This is done automatically after setting the
653                 CompletionCode list. Yes, this is a shortcut, but it makes
654                 our list of NCP packet definitions look neater, since an
655                 explicit "add to global list of packets" is not needed."""
656
657                 # Add packet to global collection of packets
658                 packets.append(self)
659
660 def rec(start, length, field, endianness=None, **kw):
661         return _rec(start, length, field, endianness, kw)
662
663 def srec(field, endianness=None, **kw):
664         return _rec(-1, -1, field, endianness, kw)
665
666 def _rec(start, length, field, endianness, kw):
667         # If endianness not explicitly given, use the field's
668         # default endiannes.
669         if endianness == None:
670                 endianness = field.Endianness()
671
672         # Setting a var?
673         if kw.has_key("var"):
674                 # Is the field an INT ?
675                 if not isinstance(field, CountingNumber):
676                         sys.exit("Field %s used as count variable, but not integer." \
677                                 % (field.HFName()))
678                 var = kw["var"]
679         else:
680                 var = None
681
682         # If 'var' not used, 'repeat' can be used.
683         if not var and kw.has_key("repeat"):
684                 repeat = kw["repeat"]
685         else:
686                 repeat = None
687
688         # Request-condition ?
689         if kw.has_key("req_cond"):
690                 req_cond = kw["req_cond"]
691         else:
692                 req_cond = NO_REQ_COND
693
694         return [start, length, field, endianness, var, repeat, req_cond]
695
696
697
698
699 ##############################################################################
700
701 LE              = 1             # Little-Endian
702 BE              = 0             # Big-Endian
703 NA              = -1            # Not Applicable
704
705 class Type:
706         " Virtual class for NCP field types"
707         type            = "Type"
708         ftype           = None
709         disp            = "BASE_DEC"
710         endianness      = NA
711         values          = []
712
713         def __init__(self, abbrev, descr, bytes, endianness = NA):
714                 self.abbrev = abbrev
715                 self.descr = descr
716                 self.bytes = bytes
717                 self.endianness = endianness
718                 self.hfname = "hf_ncp_" + self.abbrev
719                 self.special_fmt = "NCP_FMT_NONE"
720
721         def Length(self):
722                 return self.bytes
723
724         def Abbreviation(self):
725                 return self.abbrev
726
727         def Description(self):
728                 return self.descr
729
730         def HFName(self):
731                 return self.hfname
732
733         def DFilter(self):
734                 return "ncp." + self.abbrev
735
736         def EtherealFType(self):
737                 return self.ftype
738
739         def Display(self, newval=None):
740                 if newval != None:
741                         self.disp = newval
742                 return self.disp
743
744         def ValuesName(self):
745                 return "NULL"
746
747         def Mask(self):
748                 return 0
749
750         def Endianness(self):
751                 return self.endianness
752
753         def SubVariables(self):
754                 return []
755
756         def PTVCName(self):
757                 return "NULL"
758
759         def NWDate(self):
760                 self.special_fmt = "NCP_FMT_NW_DATE"
761
762         def NWTime(self):
763                 self.special_fmt = "NCP_FMT_NW_TIME"
764
765         def NWUnicode(self):
766                 self.special_fmt = "NCP_FMT_UNICODE"
767
768         def SpecialFmt(self):
769                 return self.special_fmt
770
771         def __cmp__(self, other):
772                 return cmp(self.hfname, other.hfname)
773
774 class struct(PTVC, Type):
775         def __init__(self, name, items, descr=None):
776                 name = "struct_%s" % (name,)
777                 NamedList.__init__(self, name, [])
778
779                 self.bytes = 0
780                 self.descr = descr
781                 for item in items:
782                         if isinstance(item, Type):
783                                 field = item
784                                 length = field.Length()
785                                 endianness = field.Endianness()
786                                 var = NO_VAR
787                                 repeat = NO_REPEAT
788                                 req_cond = NO_REQ_COND
789                         elif type(item) == type([]):
790                                 field = item[REC_FIELD]
791                                 length = item[REC_LENGTH]
792                                 endianness = item[REC_ENDIANNESS]
793                                 var = item[REC_VAR]
794                                 repeat = item[REC_REPEAT]
795                                 req_cond = item[REC_REQ_COND]
796                         else:
797                                 assert 0, "Item %s item not handled." % (item,)
798
799                         ptvc_rec = PTVCRecord(field, length, endianness, var,
800                                 repeat, req_cond)
801                         self.list.append(ptvc_rec)
802                         self.bytes = self.bytes + field.Length()
803
804                 self.hfname = self.name
805
806         def Variables(self):
807                 vars = []
808                 for ptvc_rec in self.list:
809                         vars.append(ptvc_rec.Field())
810                 return vars
811
812         def ReferenceString(self, var, repeat, req_cond):
813                 return "{ PTVC_STRUCT, NO_LENGTH, &%s, NO_ENDIANNESS, %s, %s, %s, NCP_FMT_NONE }" % \
814                         (self.name, var, repeat, req_cond)
815
816         def Code(self):
817                 ett_name = self.ETTName()
818                 x = "static gint %s;\n" % (ett_name,)
819                 x = x + "static const ptvc_record ptvc_%s[] = {\n" % (self.name,)
820                 for ptvc_rec in self.list:
821                         x = x +  "\t%s,\n" % (ptvc_rec.Code())
822                 x = x + "\t{ NULL, NO_LENGTH, NULL, NO_ENDIANNESS, NO_VAR, NO_REPEAT, NO_REQ_COND, NCP_FMT_NONE }\n"
823                 x = x + "};\n"
824
825                 x = x + "static const sub_ptvc_record %s = {\n" % (self.name,)
826                 x = x + "\t&%s,\n" % (ett_name,)
827                 if self.descr:
828                         x = x + '\t"%s",\n' % (self.descr,)
829                 else:
830                         x = x + "\tNULL,\n"
831                 x = x + "\tptvc_%s,\n" % (self.Name(),)
832                 x = x + "};\n"
833                 return x
834
835         def __cmp__(self, other):
836                 return cmp(self.HFName(), other.HFName())
837
838
839 class byte(Type):
840         type    = "byte"
841         ftype   = "FT_UINT8"
842         def __init__(self, abbrev, descr):
843                 Type.__init__(self, abbrev, descr, 1)
844
845 class CountingNumber:
846         pass
847
848 # Same as above. Both are provided for convenience
849 class uint8(Type, CountingNumber):
850         type    = "uint8"
851         ftype   = "FT_UINT8"
852         bytes   = 1
853         def __init__(self, abbrev, descr):
854                 Type.__init__(self, abbrev, descr, 1)
855
856 class uint16(Type, CountingNumber):
857         type    = "uint16"
858         ftype   = "FT_UINT16"
859         def __init__(self, abbrev, descr, endianness = LE):
860                 Type.__init__(self, abbrev, descr, 2, endianness)
861
862 class uint24(Type, CountingNumber):
863         type    = "uint24"
864         ftype   = "FT_UINT24"
865         def __init__(self, abbrev, descr, endianness = LE):
866                 Type.__init__(self, abbrev, descr, 3, endianness)
867
868 class uint32(Type, CountingNumber):
869         type    = "uint32"
870         ftype   = "FT_UINT32"
871         def __init__(self, abbrev, descr, endianness = LE):
872                 Type.__init__(self, abbrev, descr, 4, endianness)
873
874 class boolean8(uint8):
875         type    = "boolean8"
876         ftype   = "FT_BOOLEAN"
877
878 class boolean16(uint16):
879         type    = "boolean16"
880         ftype   = "FT_BOOLEAN"
881
882 class boolean24(uint24):
883         type    = "boolean24"
884         ftype   = "FT_BOOLEAN"
885
886 class boolean32(uint32):
887         type    = "boolean32"
888         ftype   = "FT_BOOLEAN"
889
890 class nstring:
891         pass
892
893 class nstring8(Type, nstring):
894         """A string of up to (2^8)-1 characters. The first byte
895         gives the string length."""
896
897         type    = "nstring8"
898         ftype   = "FT_UINT_STRING"
899         def __init__(self, abbrev, descr):
900                 Type.__init__(self, abbrev, descr, 1)
901
902 class nstring16(Type, nstring):
903         """A string of up to (2^16)-2 characters. The first 2 bytes
904         gives the string length."""
905
906         type    = "nstring16"
907         ftype   = "FT_UINT_STRING"
908         def __init__(self, abbrev, descr, endianness = LE):
909                 Type.__init__(self, abbrev, descr, 2, endianness)
910
911 class nstring32(Type, nstring):
912         """A string of up to (2^32)-4 characters. The first 4 bytes
913         gives the string length."""
914
915         type    = "nstring32"
916         ftype   = "FT_UINT_STRING"
917         def __init__(self, abbrev, descr, endianness = LE):
918                 Type.__init__(self, abbrev, descr, 4, endianness)
919
920 class fw_string(Type):
921         """A fixed-width string of n bytes."""
922
923         type    = "fw_string"
924         ftype   = "FT_STRING"
925
926         def __init__(self, abbrev, descr, bytes):
927                 Type.__init__(self, abbrev, descr, bytes)
928
929
930 class stringz(Type):
931         "NUL-terminated string, with a maximum length"
932
933         type    = "stringz"
934         ftype   = "FT_STRINGZ"
935         def __init__(self, abbrev, descr):
936                 Type.__init__(self, abbrev, descr, PROTO_LENGTH_UNKNOWN)
937
938 class val_string(Type):
939         """Abstract class for val_stringN, where N is number
940         of bits that key takes up."""
941
942         type    = "val_string"
943         disp    = 'BASE_HEX'
944
945         def __init__(self, abbrev, descr, val_string_array, endianness = LE):
946                 Type.__init__(self, abbrev, descr, self.bytes, endianness)
947                 self.values = val_string_array
948
949         def Code(self):
950                 result = "static const value_string %s[] = {\n" \
951                                 % (self.ValuesCName())
952                 for val_record in self.values:
953                         value   = val_record[0]
954                         text    = val_record[1]
955                         value_repr = self.value_format % value
956                         result = result + '\t{ %s,\t"%s" },\n' \
957                                         % (value_repr, text)
958
959                 value_repr = self.value_format % 0
960                 result = result + "\t{ %s,\tNULL },\n" % (value_repr)
961                 result = result + "};\n"
962                 REC_VAL_STRING_RES = self.value_format % value
963                 return result
964
965         def ValuesCName(self):
966                 return "ncp_%s_vals" % (self.abbrev)
967
968         def ValuesName(self):
969                 return "VALS(%s)" % (self.ValuesCName())
970
971 class val_string8(val_string):
972         type            = "val_string8"
973         ftype           = "FT_UINT8"
974         bytes           = 1
975         value_format    = "0x%02x"
976
977 class val_string16(val_string):
978         type            = "val_string16"
979         ftype           = "FT_UINT16"
980         bytes           = 2
981         value_format    = "0x%04x"
982
983 class val_string32(val_string):
984         type            = "val_string32"
985         ftype           = "FT_UINT32"
986         bytes           = 4
987         value_format    = "0x%08x"
988
989 class bytes(Type):
990         type    = 'bytes'
991         ftype   = 'FT_BYTES'
992
993         def __init__(self, abbrev, descr, bytes):
994                 Type.__init__(self, abbrev, descr, bytes, NA)
995
996 class nbytes:
997         pass
998
999 class nbytes8(Type, nbytes):
1000         """A series of up to (2^8)-1 bytes. The first byte
1001         gives the byte-string length."""
1002
1003         type    = "nbytes8"
1004         ftype   = "FT_UINT_BYTES"
1005         def __init__(self, abbrev, descr, endianness = LE):
1006                 Type.__init__(self, abbrev, descr, 1, endianness)
1007
1008 class nbytes16(Type, nbytes):
1009         """A series of up to (2^16)-2 bytes. The first 2 bytes
1010         gives the byte-string length."""
1011
1012         type    = "nbytes16"
1013         ftype   = "FT_UINT_BYTES"
1014         def __init__(self, abbrev, descr, endianness = LE):
1015                 Type.__init__(self, abbrev, descr, 2, endianness)
1016
1017 class nbytes32(Type, nbytes):
1018         """A series of up to (2^32)-4 bytes. The first 4 bytes
1019         gives the byte-string length."""
1020
1021         type    = "nbytes32"
1022         ftype   = "FT_UINT_BYTES"
1023         def __init__(self, abbrev, descr, endianness = LE):
1024                 Type.__init__(self, abbrev, descr, 4, endianness)
1025
1026 class bf_uint(Type):
1027         type    = "bf_uint"
1028         disp    = None
1029
1030         def __init__(self, bitmask, abbrev, descr, endianness=LE):
1031                 Type.__init__(self, abbrev, descr, self.bytes, endianness)
1032                 self.bitmask = bitmask
1033
1034         def Mask(self):
1035                 return self.bitmask
1036
1037 class bf_val_str(bf_uint):
1038         type    = "bf_uint"
1039         disp    = None
1040
1041         def __init__(self, bitmask, abbrev, descr, val_string_array, endiannes=LE):
1042                 bf_uint.__init__(self, bitmask, abbrev, descr, endiannes)
1043                 self.values = val_string_array
1044
1045         def ValuesName(self):
1046                 return "VALS(%s)" % (self.ValuesCName())
1047
1048 class bf_val_str8(bf_val_str, val_string8):
1049         type    = "bf_val_str8"
1050         ftype   = "FT_UINT8"
1051         disp    = "BASE_HEX"
1052         bytes   = 1
1053
1054 class bf_val_str16(bf_val_str, val_string16):
1055         type    = "bf_val_str16"
1056         ftype   = "FT_UINT16"
1057         disp    = "BASE_HEX"
1058         bytes   = 2
1059
1060 class bf_val_str32(bf_val_str, val_string32):
1061         type    = "bf_val_str32"
1062         ftype   = "FT_UINT32"
1063         disp    = "BASE_HEX"
1064         bytes   = 4
1065
1066 class bf_boolean:
1067     pass
1068
1069 class bf_boolean8(bf_uint, boolean8, bf_boolean):
1070         type    = "bf_boolean8"
1071         ftype   = "FT_BOOLEAN"
1072         disp    = "8"
1073         bytes   = 1
1074
1075 class bf_boolean16(bf_uint, boolean16, bf_boolean):
1076         type    = "bf_boolean16"
1077         ftype   = "FT_BOOLEAN"
1078         disp    = "16"
1079         bytes   = 2
1080
1081 class bf_boolean24(bf_uint, boolean24, bf_boolean):
1082         type    = "bf_boolean24"
1083         ftype   = "FT_BOOLEAN"
1084         disp    = "24"
1085         bytes   = 3
1086
1087 class bf_boolean32(bf_uint, boolean32, bf_boolean):
1088         type    = "bf_boolean32"
1089         ftype   = "FT_BOOLEAN"
1090         disp    = "32"
1091         bytes   = 4
1092
1093 class bitfield(Type):
1094         type    = "bitfield"
1095         disp    = 'BASE_HEX'
1096
1097         def __init__(self, vars):
1098                 var_hash = {}
1099                 for var in vars:
1100                         if isinstance(var, bf_boolean):
1101                                 if not isinstance(var, self.bf_type):
1102                                         print "%s must be of type %s" % \
1103                                                 (var.Abbreviation(),
1104                                                 self.bf_type)
1105                                         sys.exit(1)
1106                         var_hash[var.bitmask] = var
1107
1108                 bitmasks = var_hash.keys()
1109                 bitmasks.sort()
1110                 bitmasks.reverse()
1111
1112                 ordered_vars = []
1113                 for bitmask in bitmasks:
1114                         var = var_hash[bitmask]
1115                         ordered_vars.append(var)
1116
1117                 self.vars = ordered_vars
1118                 self.ptvcname = "ncp_%s_bitfield" % (self.abbrev,)
1119                 self.hfname = "hf_ncp_%s" % (self.abbrev,)
1120                 self.sub_ptvc = PTVCBitfield(self.PTVCName(), self.vars)
1121
1122         def SubVariables(self):
1123                 return self.vars
1124
1125         def SubVariablesPTVC(self):
1126                 return self.sub_ptvc
1127
1128         def PTVCName(self):
1129                 return self.ptvcname
1130
1131
1132 class bitfield8(bitfield, uint8):
1133         type    = "bitfield8"
1134         ftype   = "FT_UINT8"
1135         bf_type = bf_boolean8
1136
1137         def __init__(self, abbrev, descr, vars):
1138                 uint8.__init__(self, abbrev, descr)
1139                 bitfield.__init__(self, vars)
1140
1141 class bitfield16(bitfield, uint16):
1142         type    = "bitfield16"
1143         ftype   = "FT_UINT16"
1144         bf_type = bf_boolean16
1145
1146         def __init__(self, abbrev, descr, vars, endianness=LE):
1147                 uint16.__init__(self, abbrev, descr, endianness)
1148                 bitfield.__init__(self, vars)
1149
1150 class bitfield24(bitfield, uint24):
1151         type    = "bitfield24"
1152         ftype   = "FT_UINT24"
1153         bf_type = bf_boolean24
1154
1155         def __init__(self, abbrev, descr, vars, endianness=LE):
1156                 uint24.__init__(self, abbrev, descr, endianness)
1157                 bitfield.__init__(self, vars)
1158
1159 class bitfield32(bitfield, uint32):
1160         type    = "bitfield32"
1161         ftype   = "FT_UINT32"
1162         bf_type = bf_boolean32
1163
1164         def __init__(self, abbrev, descr, vars, endianness=LE):
1165                 uint32.__init__(self, abbrev, descr, endianness)
1166                 bitfield.__init__(self, vars)
1167
1168 #
1169 # Force the endianness of a field to a non-default value; used in
1170 # the list of fields of a structure.
1171 #
1172 def endian(field, endianness):
1173         return [-1, field.Length(), field, endianness, NO_VAR, NO_REPEAT, NO_REQ_COND]
1174
1175 ##############################################################################
1176 # NCP Field Types. Defined in Appendix A of "Programmer's Guide..."
1177 ##############################################################################
1178 FileSize64bit       = bytes("f_size_64bit", "64bit File Size", 64)
1179 Length64bit         = bytes("length_64bit", "64bit Length", 64)
1180 StartOffset64bit    = bytes("s_offset_64bit", "64bit Starting Offset", 64)
1181
1182 AbortQueueFlag                  = val_string8("abort_q_flag", "Abort Queue Flag", [
1183         [ 0x00, "Place at End of Queue" ],
1184         [ 0x01, "Do Not Place Spool File, Examine Flags" ],
1185 ])
1186 AcceptedMaxSize                 = uint16("accepted_max_size", "Accepted Max Size")
1187 AccessControl                   = val_string8("access_control", "Access Control", [
1188         [ 0x00, "Open for read by this client" ],
1189         [ 0x01, "Open for write by this client" ],
1190         [ 0x02, "Deny read requests from other stations" ],
1191         [ 0x03, "Deny write requests from other stations" ],
1192         [ 0x04, "File detached" ],
1193         [ 0x05, "TTS holding detach" ],
1194         [ 0x06, "TTS holding open" ],
1195 ])
1196 AccessDate                      = uint16("access_date", "Access Date")
1197 AccessDate.NWDate()
1198 AccessMode                      = bitfield8("access_mode", "Access Mode", [
1199         bf_boolean8(0x01, "acc_mode_read", "Read Access"),
1200         bf_boolean8(0x02, "acc_mode_write", "Write Access"),
1201         bf_boolean8(0x04, "acc_mode_deny_read", "Deny Read Access"),
1202         bf_boolean8(0x08, "acc_mode_deny_write", "Deny Write Access"),
1203         bf_boolean8(0x10, "acc_mode_comp", "Compatibility Mode"),
1204 ])
1205 AccessPrivileges                = bitfield8("access_privileges", "Access Privileges", [
1206         bf_boolean8(0x01, "acc_priv_read", "Read Privileges (files only)"),
1207         bf_boolean8(0x02, "acc_priv_write", "Write Privileges (files only)"),
1208         bf_boolean8(0x04, "acc_priv_open", "Open Privileges (files only)"),
1209         bf_boolean8(0x08, "acc_priv_create", "Create Privileges (files only)"),
1210         bf_boolean8(0x10, "acc_priv_delete", "Delete Privileges (files only)"),
1211         bf_boolean8(0x20, "acc_priv_parent", "Parental Privileges (directories only for creating, deleting, and renaming)"),
1212         bf_boolean8(0x40, "acc_priv_search", "Search Privileges (directories only)"),
1213         bf_boolean8(0x80, "acc_priv_modify", "Modify File Status Flags Privileges (files and directories)"),
1214 ])
1215 AccessRightsMask                = bitfield8("access_rights_mask", "Access Rights", [
1216         bf_boolean8(0x0001, "acc_rights_read", "Read Rights"),
1217         bf_boolean8(0x0002, "acc_rights_write", "Write Rights"),
1218         bf_boolean8(0x0004, "acc_rights_open", "Open Rights"),
1219         bf_boolean8(0x0008, "acc_rights_create", "Create Rights"),
1220         bf_boolean8(0x0010, "acc_rights_delete", "Delete Rights"),
1221         bf_boolean8(0x0020, "acc_rights_parent", "Parental Rights"),
1222         bf_boolean8(0x0040, "acc_rights_search", "Search Rights"),
1223         bf_boolean8(0x0080, "acc_rights_modify", "Modify Rights"),
1224 ])
1225 AccessRightsMaskWord            = bitfield16("access_rights_mask_word", "Access Rights", [
1226         bf_boolean16(0x0001, "acc_rights1_read", "Read Rights"),
1227         bf_boolean16(0x0002, "acc_rights1_write", "Write Rights"),
1228         bf_boolean16(0x0004, "acc_rights1_open", "Open Rights"),
1229         bf_boolean16(0x0008, "acc_rights1_create", "Create Rights"),
1230         bf_boolean16(0x0010, "acc_rights1_delete", "Delete Rights"),
1231         bf_boolean16(0x0020, "acc_rights1_parent", "Parental Rights"),
1232         bf_boolean16(0x0040, "acc_rights1_search", "Search Rights"),
1233         bf_boolean16(0x0080, "acc_rights1_modify", "Modify Rights"),
1234         bf_boolean16(0x0100, "acc_rights1_supervisor", "Supervisor Access Rights"),
1235 ])
1236 AccountBalance                  = uint32("account_balance", "Account Balance")
1237 AccountVersion                  = uint8("acct_version", "Acct Version")
1238 ActionFlag                      = bitfield8("action_flag", "Action Flag", [
1239         bf_boolean8(0x01, "act_flag_open", "Open"),
1240         bf_boolean8(0x02, "act_flag_replace", "Replace"),
1241         bf_boolean8(0x10, "act_flag_create", "Create"),
1242 ])
1243 ActiveConnBitList               = fw_string("active_conn_bit_list", "Active Connection List", 512)
1244 ActiveIndexedFiles              = uint16("active_indexed_files", "Active Indexed Files")
1245 ActualMaxBinderyObjects         = uint16("actual_max_bindery_objects", "Actual Max Bindery Objects")
1246 ActualMaxIndexedFiles           = uint16("actual_max_indexed_files", "Actual Max Indexed Files")
1247 ActualMaxOpenFiles              = uint16("actual_max_open_files", "Actual Max Open Files")
1248 ActualMaxSimultaneousTransactions = uint16("actual_max_sim_trans", "Actual Max Simultaneous Transactions")
1249 ActualMaxUsedDirectoryEntries   = uint16("actual_max_used_directory_entries", "Actual Max Used Directory Entries")
1250 ActualMaxUsedRoutingBuffers     = uint16("actual_max_used_routing_buffers", "Actual Max Used Routing Buffers")
1251 ActualResponseCount             = uint16("actual_response_count", "Actual Response Count")
1252 AddNameSpaceAndVol              = stringz("add_nm_spc_and_vol", "Add Name Space and Volume")
1253 AFPEntryID                      = uint32("afp_entry_id", "AFP Entry ID", BE)
1254 AFPEntryID.Display("BASE_HEX")
1255 AllocAvailByte                  = uint32("alloc_avail_byte", "Bytes Available for Allocation")
1256 AllocateMode                    = val_string16("allocate_mode", "Allocate Mode", [
1257         [ 0x0000, "Permanent Directory Handle" ],
1258         [ 0x0001, "Temporary Directory Handle" ],
1259         [ 0x0002, "Special Temporary Directory Handle" ],
1260 ])
1261 AllocationBlockSize             = uint32("allocation_block_size", "Allocation Block Size")
1262 AllocFreeCount                  = uint32("alloc_free_count", "Reclaimable Free Bytes")
1263 ApplicationNumber               = uint16("application_number", "Application Number")
1264 ArchivedTime                    = uint16("archived_time", "Archived Time")
1265 ArchivedTime.NWTime()
1266 ArchivedDate                    = uint16("archived_date", "Archived Date")
1267 ArchivedDate.NWDate()
1268 ArchiverID                      = uint32("archiver_id", "Archiver ID", BE)
1269 ArchiverID.Display("BASE_HEX")
1270 AssociatedNameSpace             = uint8("associated_name_space", "Associated Name Space")
1271 AttachDuringProcessing          = uint16("attach_during_processing", "Attach During Processing")
1272 AttachedIndexedFiles            = uint8("attached_indexed_files", "Attached Indexed Files")
1273 AttachWhileProcessingAttach     = uint16("attach_while_processing_attach", "Attach While Processing Attach")
1274 Attributes                      = uint32("attributes", "Attributes")
1275 AttributesDef                   = bitfield8("attr_def", "Attributes", [
1276         bf_boolean8(0x01, "att_def_ro", "Read Only"),
1277         bf_boolean8(0x02, "att_def_hidden", "Hidden"),
1278         bf_boolean8(0x04, "att_def_system", "System"),
1279         bf_boolean8(0x08, "att_def_execute", "Execute"),
1280         bf_boolean8(0x10, "att_def_sub_only", "Subdirectory"),
1281         bf_boolean8(0x20, "att_def_archive", "Archive"),
1282         bf_boolean8(0x80, "att_def_shareable", "Shareable"),
1283 ])
1284 AttributesDef16                 = bitfield16("attr_def_16", "Attributes", [
1285         bf_boolean16(0x0001, "att_def16_ro", "Read Only"),
1286         bf_boolean16(0x0002, "att_def16_hidden", "Hidden"),
1287         bf_boolean16(0x0004, "att_def16_system", "System"),
1288         bf_boolean16(0x0008, "att_def16_execute", "Execute"),
1289         bf_boolean16(0x0010, "att_def16_sub_only", "Subdirectory"),
1290         bf_boolean16(0x0020, "att_def16_archive", "Archive"),
1291         bf_boolean16(0x0080, "att_def16_shareable", "Shareable"),
1292         bf_boolean16(0x1000, "att_def16_transaction", "Transactional"),
1293         bf_boolean16(0x4000, "att_def16_read_audit", "Read Audit"),
1294         bf_boolean16(0x8000, "att_def16_write_audit", "Write Audit"),
1295 ])
1296 AttributesDef32                 = bitfield32("attr_def_32", "Attributes", [
1297         bf_boolean32(0x00000001, "att_def32_ro", "Read Only"),
1298         bf_boolean32(0x00000002, "att_def32_hidden", "Hidden"),
1299         bf_boolean32(0x00000004, "att_def32_system", "System"),
1300         bf_boolean32(0x00000008, "att_def32_execute", "Execute"),
1301         bf_boolean32(0x00000010, "att_def32_sub_only", "Subdirectory"),
1302         bf_boolean32(0x00000020, "att_def32_archive", "Archive"),
1303         bf_boolean32(0x00000080, "att_def32_shareable", "Shareable"),
1304         bf_boolean32(0x00001000, "att_def32_transaction", "Transactional"),
1305         bf_boolean32(0x00004000, "att_def32_read_audit", "Read Audit"),
1306         bf_boolean32(0x00008000, "att_def32_write_audit", "Write Audit"),
1307         bf_boolean32(0x00010000, "att_def_purge", "Purge"),
1308         bf_boolean32(0x00020000, "att_def_reninhibit", "Rename Inhibit"),
1309         bf_boolean32(0x00040000, "att_def_delinhibit", "Delete Inhibit"),
1310         bf_boolean32(0x00080000, "att_def_cpyinhibit", "Copy Inhibit"),
1311         bf_boolean32(0x02000000, "att_def_im_comp", "Immediate Compress"),
1312         bf_boolean32(0x04000000, "att_def_comp", "Compressed"),
1313 ])
1314 AttributeValidFlag              = uint32("attribute_valid_flag", "Attribute Valid Flag")
1315 AuditFileVersionDate            = uint16("audit_file_ver_date", "Audit File Version Date")
1316 AuditFileVersionDate.NWDate()
1317 AuditFlag                       = val_string8("audit_flag", "Audit Flag", [
1318         [ 0x00, "Do NOT audit object" ],
1319         [ 0x01, "Audit object" ],
1320 ])
1321 AuditHandle                     = uint32("audit_handle", "Audit File Handle")
1322 AuditHandle.Display("BASE_HEX")
1323 AuditID                         = uint32("audit_id", "Audit ID", BE)
1324 AuditID.Display("BASE_HEX")
1325 AuditIDType                     = val_string16("audit_id_type", "Audit ID Type", [
1326         [ 0x0000, "Volume" ],
1327         [ 0x0001, "Container" ],
1328 ])
1329 AuditVersionDate                = uint16("audit_ver_date", "Auditing Version Date")
1330 AuditVersionDate.NWDate()
1331 AvailableBlocks                 = uint32("available_blocks", "Available Blocks")
1332 AvailableClusters               = uint16("available_clusters", "Available Clusters")
1333 AvailableDirectorySlots         = uint16("available_directory_slots", "Available Directory Slots")
1334 AvailableDirEntries             = uint32("available_dir_entries", "Available Directory Entries")
1335 AvailableIndexedFiles           = uint16("available_indexed_files", "Available Indexed Files")
1336
1337 BackgroundAgedWrites            = uint32("background_aged_writes", "Background Aged Writes")
1338 BackgroundDirtyWrites           = uint32("background_dirty_writes", "Background Dirty Writes")
1339 BadLogicalConnectionCount       = uint16("bad_logical_connection_count", "Bad Logical Connection Count")
1340 BannerName                      = fw_string("banner_name", "Banner Name", 14)
1341 BaseDirectoryID                 = uint32("base_directory_id", "Base Directory ID", BE)
1342 BaseDirectoryID.Display("BASE_HEX")
1343 binderyContext                  = nstring8("bindery_context", "Bindery Context")
1344 BitMap                          = bytes("bit_map", "Bit Map", 512)
1345 BlockNumber                     = uint32("block_number", "Block Number")
1346 BlockSize                       = uint16("block_size", "Block Size")
1347 BlockSizeInSectors              = uint32("block_size_in_sectors", "Block Size in Sectors")
1348 BoardInstalled                  = uint8("board_installed", "Board Installed")
1349 BoardNumber                     = uint32("board_number", "Board Number")
1350 BoardNumbers                    = uint32("board_numbers", "Board Numbers")
1351 BufferSize                      = uint16("buffer_size", "Buffer Size")
1352 BusString                       = stringz("bus_string", "Bus String")
1353 BusType                         = val_string8("bus_type", "Bus Type", [
1354         [0x00, "ISA"],
1355         [0x01, "Micro Channel" ],
1356         [0x02, "EISA"],
1357         [0x04, "PCI"],
1358         [0x08, "PCMCIA"],
1359         [0x10, "ISA"],
1360         [0x14, "ISA"],
1361 ])
1362 BytesActuallyTransferred        = uint32("bytes_actually_transferred", "Bytes Actually Transferred")
1363 BytesRead                       = fw_string("bytes_read", "Bytes Read", 6)
1364 BytesToCopy                     = uint32("bytes_to_copy", "Bytes to Copy")
1365 BytesWritten                    = fw_string("bytes_written", "Bytes Written", 6)
1366
1367 CacheAllocations                = uint32("cache_allocations", "Cache Allocations")
1368 CacheBlockScrapped              = uint16("cache_block_scrapped", "Cache Block Scrapped")
1369 CacheBufferCount                = uint16("cache_buffer_count", "Cache Buffer Count")
1370 CacheBufferSize                 = uint16("cache_buffer_size", "Cache Buffer Size")
1371 CacheFullWriteRequests          = uint32("cache_full_write_requests", "Cache Full Write Requests")
1372 CacheGetRequests                = uint32("cache_get_requests", "Cache Get Requests")
1373 CacheHitOnUnavailableBlock      = uint16("cache_hit_on_unavailable_block", "Cache Hit On Unavailable Block")
1374 CacheHits                       = uint32("cache_hits", "Cache Hits")
1375 CacheMisses                     = uint32("cache_misses", "Cache Misses")
1376 CachePartialWriteRequests       = uint32("cache_partial_write_requests", "Cache Partial Write Requests")
1377 CacheReadRequests               = uint32("cache_read_requests", "Cache Read Requests")
1378 CacheWriteRequests              = uint32("cache_write_requests", "Cache Write Requests")
1379 CategoryName                    = stringz("category_name", "Category Name")
1380 CCFileHandle                    = uint32("cc_file_handle", "File Handle")
1381 CCFileHandle.Display("BASE_HEX")
1382 CCFunction                      = val_string8("cc_function", "OP-Lock Flag", [
1383         [ 0x01, "Clear OP-Lock" ],
1384         [ 0x02, "Acknowledge Callback" ],
1385         [ 0x03, "Decline Callback" ],
1386     [ 0x04, "Level 2" ],
1387 ])
1388 ChangeBits                      = bitfield16("change_bits", "Change Bits", [
1389         bf_boolean16(0x0001, "change_bits_modify", "Modify Name"),
1390         bf_boolean16(0x0002, "change_bits_fatt", "File Attributes"),
1391         bf_boolean16(0x0004, "change_bits_cdate", "Creation Date"),
1392         bf_boolean16(0x0008, "change_bits_ctime", "Creation Time"),
1393         bf_boolean16(0x0010, "change_bits_owner", "Owner ID"),
1394         bf_boolean16(0x0020, "change_bits_adate", "Archive Date"),
1395         bf_boolean16(0x0040, "change_bits_atime", "Archive Time"),
1396         bf_boolean16(0x0080, "change_bits_aid", "Archiver ID"),
1397         bf_boolean16(0x0100, "change_bits_udate", "Update Date"),
1398         bf_boolean16(0x0200, "change_bits_utime", "Update Time"),
1399         bf_boolean16(0x0400, "change_bits_uid", "Update ID"),
1400         bf_boolean16(0x0800, "change_bits_acc_date", "Access Date"),
1401         bf_boolean16(0x1000, "change_bits_max_acc_mask", "Maximum Access Mask"),
1402         bf_boolean16(0x2000, "change_bits_max_space", "Maximum Space"),
1403 ])
1404 ChannelState                    = val_string8("channel_state", "Channel State", [
1405         [ 0x00, "Channel is running" ],
1406         [ 0x01, "Channel is stopping" ],
1407         [ 0x02, "Channel is stopped" ],
1408         [ 0x03, "Channel is not functional" ],
1409 ])
1410 ChannelSynchronizationState     = val_string8("channel_synchronization_state", "Channel Synchronization State", [
1411         [ 0x00, "Channel is not being used" ],
1412         [ 0x02, "NetWare is using the channel; no one else wants it" ],
1413         [ 0x04, "NetWare is using the channel; someone else wants it" ],
1414         [ 0x06, "Someone else is using the channel; NetWare does not need it" ],
1415         [ 0x08, "Someone else is using the channel; NetWare needs it" ],
1416         [ 0x0A, "Someone else has released the channel; NetWare should use it" ],
1417 ])
1418 ChargeAmount                    = uint32("charge_amount", "Charge Amount")
1419 ChargeInformation               = uint32("charge_information", "Charge Information")
1420 ClientCompFlag                  = val_string16("client_comp_flag", "Completion Flag", [
1421         [ 0x0000, "Successful" ],
1422         [ 0x0001, "Illegal Station Number" ],
1423         [ 0x0002, "Client Not Logged In" ],
1424         [ 0x0003, "Client Not Accepting Messages" ],
1425         [ 0x0004, "Client Already has a Message" ],
1426         [ 0x0096, "No Alloc Space for the Message" ],
1427         [ 0x00fd, "Bad Station Number" ],
1428         [ 0x00ff, "Failure" ],
1429 ])
1430 ClientIDNumber                  = uint32("client_id_number", "Client ID Number", BE)
1431 ClientIDNumber.Display("BASE_HEX")
1432 ClientList                      = uint32("client_list", "Client List")
1433 ClientListCount                 = uint16("client_list_cnt", "Client List Count")
1434 ClientListLen                   = uint8("client_list_len", "Client List Length")
1435 ClientName                      = nstring8("client_name", "Client Name")
1436 ClientRecordArea                = fw_string("client_record_area", "Client Record Area", 152)
1437 ClientStation                   = uint8("client_station", "Client Station")
1438 ClientStationLong               = uint32("client_station_long", "Client Station")
1439 ClientTaskNumber                = uint8("client_task_number", "Client Task Number")
1440 ClientTaskNumberLong            = uint32("client_task_number_long", "Client Task Number")
1441 ClusterCount                    = uint16("cluster_count", "Cluster Count")
1442 ClustersUsedByDirectories       = uint32("clusters_used_by_directories", "Clusters Used by Directories")
1443 ClustersUsedByExtendedDirectories = uint32("clusters_used_by_extended_dirs", "Clusters Used by Extended Directories")
1444 ClustersUsedByFAT               = uint32("clusters_used_by_fat", "Clusters Used by FAT")
1445 ComCnts                         = uint16("com_cnts", "Communication Counters")
1446 Comment                         = nstring8("comment", "Comment")
1447 CommentType                     = uint16("comment_type", "Comment Type")
1448 CompletionCode                  = uint32("ncompletion_code", "Completion Code")
1449 CompressedDataStreamsCount      = uint32("compressed_data_streams_count", "Compressed Data Streams Count")
1450 CompressedLimboDataStreamsCount = uint32("compressed_limbo_data_streams_count", "Compressed Limbo Data Streams Count")
1451 CompressedSectors               = uint32("compressed_sectors", "Compressed Sectors")
1452 compressionStage                = uint32("compression_stage", "Compression Stage")
1453 compressVolume                  = uint32("compress_volume", "Volume Compression")
1454 ConfigMajorVN                   = uint8("config_major_vn", "Configuration Major Version Number")
1455 ConfigMinorVN                   = uint8("config_minor_vn", "Configuration Minor Version Number")
1456 ConfigurationDescription        = fw_string("configuration_description", "Configuration Description", 80)
1457 ConfigurationText               = fw_string("configuration_text", "Configuration Text", 160)
1458 ConfiguredMaxBinderyObjects     = uint16("configured_max_bindery_objects", "Configured Max Bindery Objects")
1459 ConfiguredMaxOpenFiles          = uint16("configured_max_open_files", "Configured Max Open Files")
1460 ConfiguredMaxRoutingBuffers     = uint16("configured_max_routing_buffers", "Configured Max Routing Buffers")
1461 ConfiguredMaxSimultaneousTransactions = uint16("cfg_max_simultaneous_transactions", "Configured Max Simultaneous Transactions")
1462 ConnectedLAN                    = uint32("connected_lan", "LAN Adapter")
1463 ConnectionControlBits           = bitfield8("conn_ctrl_bits", "Connection Control", [
1464         bf_boolean8(0x01, "enable_brdcasts", "Enable Broadcasts"),
1465         bf_boolean8(0x02, "enable_personal_brdcasts", "Enable Personal Broadcasts"),
1466         bf_boolean8(0x04, "enable_wdog_messages", "Enable Watchdog Message"),
1467         bf_boolean8(0x10, "disable_brdcasts", "Disable Broadcasts"),
1468         bf_boolean8(0x20, "disable_personal_brdcasts", "Disable Personal Broadcasts"),
1469         bf_boolean8(0x40, "disable_wdog_messages", "Disable Watchdog Message"),
1470 ])
1471 ConnectionListCount             = uint32("conn_list_count", "Connection List Count")
1472 ConnectionList                  = uint32("connection_list", "Connection List")
1473 ConnectionNumber                = uint32("connection_number", "Connection Number", BE)
1474 ConnectionNumberList            = nstring8("connection_number_list", "Connection Number List")
1475 ConnectionNumberWord            = uint16("conn_number_word", "Connection Number")
1476 ConnectionNumberByte            = uint8("conn_number_byte", "Connection Number")
1477 ConnectionServiceType           = val_string8("connection_service_type","Connection Service Type",[
1478         [ 0x01, "CLIB backward Compatibility" ],
1479         [ 0x02, "NCP Connection" ],
1480         [ 0x03, "NLM Connection" ],
1481         [ 0x04, "AFP Connection" ],
1482         [ 0x05, "FTAM Connection" ],
1483         [ 0x06, "ANCP Connection" ],
1484         [ 0x07, "ACP Connection" ],
1485         [ 0x08, "SMB Connection" ],
1486         [ 0x09, "Winsock Connection" ],
1487 ])
1488 ConnectionsInUse                = uint16("connections_in_use", "Connections In Use")
1489 ConnectionsMaxUsed              = uint16("connections_max_used", "Connections Max Used")
1490 ConnectionsSupportedMax         = uint16("connections_supported_max", "Connections Supported Max")
1491 ConnectionType                  = val_string8("connection_type", "Connection Type", [
1492         [ 0x00, "Not in use" ],
1493         [ 0x02, "NCP" ],
1494         [ 0x11, "UDP (for IP)" ],
1495 ])
1496 ConnListLen                     = uint8("conn_list_len", "Connection List Length")
1497 Copyright                       = nstring8("copyright", "Copyright")
1498 connList                        = uint32("conn_list", "Connection List")
1499 ControlFlags                    = val_string8("control_flags", "Control Flags", [
1500         [ 0x00, "Forced Record Locking is Off" ],
1501         [ 0x01, "Forced Record Locking is On" ],
1502 ])
1503 ControllerDriveNumber           = uint8("controller_drive_number", "Controller Drive Number")
1504 ControllerNumber                = uint8("controller_number", "Controller Number")
1505 ControllerType                  = uint8("controller_type", "Controller Type")
1506 Cookie1                         = uint32("cookie_1", "Cookie 1")
1507 Cookie2                         = uint32("cookie_2", "Cookie 2")
1508 Copies                          = uint8( "copies", "Copies" )
1509 CoprocessorFlag                 = uint32("co_processor_flag", "CoProcessor Present Flag")
1510 CoProcessorString               = stringz("co_proc_string", "CoProcessor String")
1511 CounterMask                     = val_string8("counter_mask", "Counter Mask", [
1512         [ 0x00, "Counter is Valid" ],
1513         [ 0x01, "Counter is not Valid" ],
1514 ])
1515 CPUNumber                       = uint32("cpu_number", "CPU Number")
1516 CPUString                       = stringz("cpu_string", "CPU String")
1517 CPUType                         = val_string8("cpu_type", "CPU Type", [
1518         [ 0x00, "80386" ],
1519         [ 0x01, "80486" ],
1520         [ 0x02, "Pentium" ],
1521         [ 0x03, "Pentium Pro" ],
1522 ])
1523 CreationDate                    = uint16("creation_date", "Creation Date")
1524 CreationDate.NWDate()
1525 CreationTime                    = uint16("creation_time", "Creation Time")
1526 CreationTime.NWTime()
1527 CreatorID                       = uint32("creator_id", "Creator ID", BE)
1528 CreatorID.Display("BASE_HEX")
1529 CreatorNameSpaceNumber          = val_string8("creator_name_space_number", "Creator Name Space Number", [
1530         [ 0x00, "DOS Name Space" ],
1531         [ 0x01, "MAC Name Space" ],
1532         [ 0x02, "NFS Name Space" ],
1533         [ 0x04, "Long Name Space" ],
1534 ])
1535 CreditLimit                     = uint32("credit_limit", "Credit Limit")
1536 CtrlFlags                       = val_string16("ctrl_flags", "Control Flags", [
1537         [ 0x0000, "Do Not Return File Name" ],
1538         [ 0x0001, "Return File Name" ],
1539 ])
1540 curCompBlks                     = uint32("cur_comp_blks", "Current Compression Blocks")
1541 curInitialBlks                  = uint32("cur_initial_blks", "Current Initial Blocks")
1542 curIntermediateBlks             = uint32("cur_inter_blks", "Current Intermediate Blocks")
1543 CurNumOfRTags                   = uint32("cur_num_of_r_tags", "Current Number of Resource Tags")
1544 CurrentBlockBeingDecompressed   = uint32("cur_blk_being_dcompress", "Current Block Being Decompressed")
1545 CurrentChangedFATs              = uint16("current_changed_fats", "Current Changed FAT Entries")
1546 CurrentEntries                  = uint32("current_entries", "Current Entries")
1547 CurrentFormType                 = uint8( "current_form_type", "Current Form Type" )
1548 CurrentLFSCounters              = uint32("current_lfs_counters", "Current LFS Counters")
1549 CurrentlyUsedRoutingBuffers     = uint16("currently_used_routing_buffers", "Currently Used Routing Buffers")
1550 CurrentOpenFiles                = uint16("current_open_files", "Current Open Files")
1551 CurrentReferenceID              = uint16("curr_ref_id", "Current Reference ID")
1552 CurrentServers                  = uint32("current_servers", "Current Servers")
1553 CurrentServerTime               = uint32("current_server_time", "Time Elapsed Since Server Was Brought Up")
1554 CurrentSpace                    = uint32("current_space", "Current Space")
1555 CurrentTransactionCount         = uint32("current_trans_count", "Current Transaction Count")
1556 CurrentUsedBinderyObjects       = uint16("current_used_bindery_objects", "Current Used Bindery Objects")
1557 CurrentUsedDynamicSpace         = uint32("current_used_dynamic_space", "Current Used Dynamic Space")
1558 CustomCnts                      = uint32("custom_cnts", "Custom Counters")
1559 CustomCount                     = uint32("custom_count", "Custom Count")
1560 CustomCounters                  = uint32("custom_counters", "Custom Counters")
1561 CustomString                    = nstring8("custom_string", "Custom String")
1562 CustomVariableValue             = uint32("custom_var_value", "Custom Variable Value")
1563
1564 Data                            = nstring8("data", "Data")
1565 DataForkFirstFAT                = uint32("data_fork_first_fat", "Data Fork First FAT Entry")
1566 DataForkLen                     = uint32("data_fork_len", "Data Fork Len")
1567 DataForkSize                    = uint32("data_fork_size", "Data Fork Size")
1568 DataSize                        = uint32("data_size", "Data Size")
1569 DataStream                      = val_string8("data_stream", "Data Stream", [
1570         [ 0x00, "Resource Fork or DOS" ],
1571         [ 0x01, "Data Fork" ],
1572 ])
1573 DataStreamName                  = nstring8("data_stream_name", "Data Stream Name")
1574 DataStreamNumber                = uint8("data_stream_number", "Data Stream Number")
1575 DataStreamsCount                = uint32("data_streams_count", "Data Streams Count")
1576 DataStreamSize                  = uint32("data_stream_size", "Size")
1577 DataStreamSpaceAlloc            = uint32( "data_stream_space_alloc", "Space Allocated for Data Stream" )
1578 Day                             = uint8("s_day", "Day")
1579 DayOfWeek                       = val_string8("s_day_of_week", "Day of Week", [
1580         [ 0x00, "Sunday" ],
1581         [ 0x01, "Monday" ],
1582         [ 0x02, "Tuesday" ],
1583         [ 0x03, "Wednesday" ],
1584         [ 0x04, "Thursday" ],
1585         [ 0x05, "Friday" ],
1586         [ 0x06, "Saturday" ],
1587 ])
1588 DeadMirrorTable                 = bytes("dead_mirror_table", "Dead Mirror Table", 32)
1589 DefinedDataStreams              = uint8("defined_data_streams", "Defined Data Streams")
1590 DefinedNameSpaces               = uint8("defined_name_spaces", "Defined Name Spaces")
1591 DeletedDate                     = uint16("deleted_date", "Deleted Date")
1592 DeletedDate.NWDate()
1593 DeletedFileTime                 = uint32( "deleted_file_time", "Deleted File Time")
1594 DeletedFileTime.Display("BASE_HEX")
1595 DeletedTime                     = uint16("deleted_time", "Deleted Time")
1596 DeletedTime.NWTime()
1597 DeletedID                       = uint32( "delete_id", "Deleted ID", BE)
1598 DeletedID.Display("BASE_HEX")
1599 DeleteExistingFileFlag          = val_string8("delete_existing_file_flag", "Delete Existing File Flag", [
1600         [ 0x00, "Do Not Delete Existing File" ],
1601         [ 0x01, "Delete Existing File" ],
1602 ])
1603 DenyReadCount                   = uint16("deny_read_count", "Deny Read Count")
1604 DenyWriteCount                  = uint16("deny_write_count", "Deny Write Count")
1605 DescriptionStrings              = fw_string("description_string", "Description", 512)
1606 DesiredAccessRights             = bitfield16("desired_access_rights", "Desired Access Rights", [
1607         bf_boolean16(0x0001, "dsired_acc_rights_read_o", "Read Only"),
1608         bf_boolean16(0x0002, "dsired_acc_rights_write_o", "Write Only"),
1609         bf_boolean16(0x0004, "dsired_acc_rights_deny_r", "Deny Read"),
1610         bf_boolean16(0x0008, "dsired_acc_rights_deny_w", "Deny Write"),
1611         bf_boolean16(0x0010, "dsired_acc_rights_compat", "Compatibility"),
1612         bf_boolean16(0x0040, "dsired_acc_rights_w_thru", "File Write Through"),
1613         bf_boolean16(0x0400, "dsired_acc_rights_del_file_cls", "Delete File Close"),
1614 ])
1615 DesiredResponseCount            = uint16("desired_response_count", "Desired Response Count")
1616 DestDirHandle                   = uint8("dest_dir_handle", "Destination Directory Handle")
1617 DestNameSpace                   = val_string8("dest_name_space", "Destination Name Space", [
1618         [ 0x00, "DOS Name Space" ],
1619         [ 0x01, "MAC Name Space" ],
1620         [ 0x02, "NFS Name Space" ],
1621         [ 0x04, "Long Name Space" ],
1622 ])
1623 DestPathComponentCount          = uint8("dest_component_count", "Destination Path Component Count")
1624 DestPath                        = nstring8("dest_path", "Destination Path")
1625 DetachDuringProcessing          = uint16("detach_during_processing", "Detach During Processing")
1626 DetachForBadConnectionNumber    = uint16("detach_for_bad_connection_number", "Detach For Bad Connection Number")
1627 DirHandle                       = uint8("dir_handle", "Directory Handle")
1628 DirHandleName                   = uint8("dir_handle_name", "Handle Name")
1629 DirHandleLong                   = uint32("dir_handle_long", "Directory Handle")
1630 DirectoryAccessRights           = uint8("directory_access_rights", "Directory Access Rights")
1631 #
1632 # XXX - what do the bits mean here?
1633 #
1634 DirectoryAttributes             = uint8("directory_attributes", "Directory Attributes")
1635 DirectoryBase                   = uint32("dir_base", "Directory Base")
1636 DirectoryBase.Display("BASE_HEX")
1637 DirectoryCount                  = uint16("dir_count", "Directory Count")
1638 DirectoryEntryNumber            = uint32("directory_entry_number", "Directory Entry Number")
1639 DirectoryEntryNumber.Display('BASE_HEX')
1640 DirectoryEntryNumberWord        = uint16("directory_entry_number_word", "Directory Entry Number")
1641 DirectoryID                     = uint16("directory_id", "Directory ID", BE)
1642 DirectoryID.Display("BASE_HEX")
1643 DirectoryName                   = fw_string("directory_name", "Directory Name",12)
1644 DirectoryName14                 = fw_string("directory_name_14", "Directory Name", 14)
1645 DirectoryNameLen                = uint8("directory_name_len", "Directory Name Length")
1646 DirectoryNumber                 = uint32("directory_number", "Directory Number")
1647 DirectoryNumber.Display("BASE_HEX")
1648 DirectoryPath                   = fw_string("directory_path", "Directory Path", 16)
1649 DirectoryServicesObjectID       = uint32("directory_services_object_id", "Directory Services Object ID")
1650 DirectoryServicesObjectID.Display("BASE_HEX")
1651 DirectoryStamp                  = uint16("directory_stamp", "Directory Stamp (0xD1D1)")
1652 DirtyCacheBuffers               = uint16("dirty_cache_buffers", "Dirty Cache Buffers")
1653 DiskChannelNumber               = uint8("disk_channel_number", "Disk Channel Number")
1654 DiskChannelTable                = val_string8("disk_channel_table", "Disk Channel Table", [
1655         [ 0x01, "XT" ],
1656         [ 0x02, "AT" ],
1657         [ 0x03, "SCSI" ],
1658         [ 0x04, "Disk Coprocessor" ],
1659 ])
1660 DiskSpaceLimit                  = uint32("disk_space_limit", "Disk Space Limit")
1661 DMAChannelsUsed                 = uint32("dma_channels_used", "DMA Channels Used")
1662 DMInfoEntries                   = uint32("dm_info_entries", "DM Info Entries")
1663 DMInfoLevel                     = val_string8("dm_info_level", "DM Info Level", [
1664         [ 0x00, "Return Detailed DM Support Module Information" ],
1665         [ 0x01, "Return Number of DM Support Modules" ],
1666         [ 0x02, "Return DM Support Modules Names" ],
1667 ])
1668 DMFlags                         = val_string8("dm_flags", "DM Flags", [
1669         [ 0x00, "OnLine Media" ],
1670         [ 0x01, "OffLine Media" ],
1671 ])
1672 DMmajorVersion                  = uint32("dm_major_version", "DM Major Version")
1673 DMminorVersion                  = uint32("dm_minor_version", "DM Minor Version")
1674 DMPresentFlag                   = val_string8("dm_present_flag", "Data Migration Present Flag", [
1675         [ 0x00, "Data Migration NLM is not loaded" ],
1676         [ 0x01, "Data Migration NLM has been loaded and is running" ],
1677 ])
1678 DOSDirectoryBase                = uint32("dos_directory_base", "DOS Directory Base")
1679 DOSDirectoryBase.Display("BASE_HEX")
1680 DOSDirectoryEntry               = uint32("dos_directory_entry", "DOS Directory Entry")
1681 DOSDirectoryEntry.Display("BASE_HEX")
1682 DOSDirectoryEntryNumber         = uint32("dos_directory_entry_number", "DOS Directory Entry Number")
1683 DOSDirectoryEntryNumber.Display('BASE_HEX')
1684 DOSFileAttributes               = uint8("dos_file_attributes", "DOS File Attributes")
1685 DOSParentDirectoryEntry         = uint32("dos_parent_directory_entry", "DOS Parent Directory Entry")
1686 DOSParentDirectoryEntry.Display('BASE_HEX')
1687 DOSSequence                     = uint32("dos_sequence", "DOS Sequence")
1688 DriveCylinders                  = uint16("drive_cylinders", "Drive Cylinders")
1689 DriveDefinitionString           = fw_string("drive_definition_string", "Drive Definition", 64)
1690 DriveHeads                      = uint8("drive_heads", "Drive Heads")
1691 DriveMappingTable               = bytes("drive_mapping_table", "Drive Mapping Table", 32)
1692 DriveMirrorTable                = bytes("drive_mirror_table", "Drive Mirror Table", 32)
1693 DriverBoardName                 = stringz("driver_board_name", "Driver Board Name")
1694 DriveRemovableFlag              = val_string8("drive_removable_flag", "Drive Removable Flag", [
1695         [ 0x00, "Nonremovable" ],
1696         [ 0xff, "Removable" ],
1697 ])
1698 DriverLogicalName               = stringz("driver_log_name", "Driver Logical Name")
1699 DriverShortName                 = stringz("driver_short_name", "Driver Short Name")
1700 DriveSize                       = uint32("drive_size", "Drive Size")
1701 DstEAFlags                      = val_string16("dst_ea_flags", "Destination EA Flags", [
1702         [ 0x0000, "Return EAHandle,Information Level 0" ],
1703         [ 0x0001, "Return NetWareHandle,Information Level 0" ],
1704         [ 0x0002, "Return Volume/Directory Number,Information Level 0" ],
1705         [ 0x0004, "Return EAHandle,Close Handle on Error,Information Level 0" ],
1706         [ 0x0005, "Return NetWareHandle,Close Handle on Error,Information Level 0" ],
1707         [ 0x0006, "Return Volume/Directory Number,Close Handle on Error,Information Level 0" ],
1708         [ 0x0010, "Return EAHandle,Information Level 1" ],
1709         [ 0x0011, "Return NetWareHandle,Information Level 1" ],
1710         [ 0x0012, "Return Volume/Directory Number,Information Level 1" ],
1711         [ 0x0014, "Return EAHandle,Close Handle on Error,Information Level 1" ],
1712         [ 0x0015, "Return NetWareHandle,Close Handle on Error,Information Level 1" ],
1713         [ 0x0016, "Return Volume/Directory Number,Close Handle on Error,Information Level 1" ],
1714         [ 0x0020, "Return EAHandle,Information Level 2" ],
1715         [ 0x0021, "Return NetWareHandle,Information Level 2" ],
1716         [ 0x0022, "Return Volume/Directory Number,Information Level 2" ],
1717         [ 0x0024, "Return EAHandle,Close Handle on Error,Information Level 2" ],
1718         [ 0x0025, "Return NetWareHandle,Close Handle on Error,Information Level 2" ],
1719         [ 0x0026, "Return Volume/Directory Number,Close Handle on Error,Information Level 2" ],
1720         [ 0x0030, "Return EAHandle,Information Level 3" ],
1721         [ 0x0031, "Return NetWareHandle,Information Level 3" ],
1722         [ 0x0032, "Return Volume/Directory Number,Information Level 3" ],
1723         [ 0x0034, "Return EAHandle,Close Handle on Error,Information Level 3" ],
1724         [ 0x0035, "Return NetWareHandle,Close Handle on Error,Information Level 3" ],
1725         [ 0x0036, "Return Volume/Directory Number,Close Handle on Error,Information Level 3" ],
1726         [ 0x0040, "Return EAHandle,Information Level 4" ],
1727         [ 0x0041, "Return NetWareHandle,Information Level 4" ],
1728         [ 0x0042, "Return Volume/Directory Number,Information Level 4" ],
1729         [ 0x0044, "Return EAHandle,Close Handle on Error,Information Level 4" ],
1730         [ 0x0045, "Return NetWareHandle,Close Handle on Error,Information Level 4" ],
1731         [ 0x0046, "Return Volume/Directory Number,Close Handle on Error,Information Level 4" ],
1732         [ 0x0050, "Return EAHandle,Information Level 5" ],
1733         [ 0x0051, "Return NetWareHandle,Information Level 5" ],
1734         [ 0x0052, "Return Volume/Directory Number,Information Level 5" ],
1735         [ 0x0054, "Return EAHandle,Close Handle on Error,Information Level 5" ],
1736         [ 0x0055, "Return NetWareHandle,Close Handle on Error,Information Level 5" ],
1737         [ 0x0056, "Return Volume/Directory Number,Close Handle on Error,Information Level 5" ],
1738         [ 0x0060, "Return EAHandle,Information Level 6" ],
1739         [ 0x0061, "Return NetWareHandle,Information Level 6" ],
1740         [ 0x0062, "Return Volume/Directory Number,Information Level 6" ],
1741         [ 0x0064, "Return EAHandle,Close Handle on Error,Information Level 6" ],
1742         [ 0x0065, "Return NetWareHandle,Close Handle on Error,Information Level 6" ],
1743         [ 0x0066, "Return Volume/Directory Number,Close Handle on Error,Information Level 6" ],
1744         [ 0x0070, "Return EAHandle,Information Level 7" ],
1745         [ 0x0071, "Return NetWareHandle,Information Level 7" ],
1746         [ 0x0072, "Return Volume/Directory Number,Information Level 7" ],
1747         [ 0x0074, "Return EAHandle,Close Handle on Error,Information Level 7" ],
1748         [ 0x0075, "Return NetWareHandle,Close Handle on Error,Information Level 7" ],
1749         [ 0x0076, "Return Volume/Directory Number,Close Handle on Error,Information Level 7" ],
1750         [ 0x0080, "Return EAHandle,Information Level 0,Immediate Close Handle" ],
1751         [ 0x0081, "Return NetWareHandle,Information Level 0,Immediate Close Handle" ],
1752         [ 0x0082, "Return Volume/Directory Number,Information Level 0,Immediate Close Handle" ],
1753         [ 0x0084, "Return EAHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1754         [ 0x0085, "Return NetWareHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1755         [ 0x0086, "Return Volume/Directory Number,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1756         [ 0x0090, "Return EAHandle,Information Level 1,Immediate Close Handle" ],
1757         [ 0x0091, "Return NetWareHandle,Information Level 1,Immediate Close Handle" ],
1758         [ 0x0092, "Return Volume/Directory Number,Information Level 1,Immediate Close Handle" ],
1759         [ 0x0094, "Return EAHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1760         [ 0x0095, "Return NetWareHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1761         [ 0x0096, "Return Volume/Directory Number,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1762         [ 0x00a0, "Return EAHandle,Information Level 2,Immediate Close Handle" ],
1763         [ 0x00a1, "Return NetWareHandle,Information Level 2,Immediate Close Handle" ],
1764         [ 0x00a2, "Return Volume/Directory Number,Information Level 2,Immediate Close Handle" ],
1765         [ 0x00a4, "Return EAHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1766         [ 0x00a5, "Return NetWareHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1767         [ 0x00a6, "Return Volume/Directory Number,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1768         [ 0x00b0, "Return EAHandle,Information Level 3,Immediate Close Handle" ],
1769         [ 0x00b1, "Return NetWareHandle,Information Level 3,Immediate Close Handle" ],
1770         [ 0x00b2, "Return Volume/Directory Number,Information Level 3,Immediate Close Handle" ],
1771         [ 0x00b4, "Return EAHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1772         [ 0x00b5, "Return NetWareHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1773         [ 0x00b6, "Return Volume/Directory Number,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1774         [ 0x00c0, "Return EAHandle,Information Level 4,Immediate Close Handle" ],
1775         [ 0x00c1, "Return NetWareHandle,Information Level 4,Immediate Close Handle" ],
1776         [ 0x00c2, "Return Volume/Directory Number,Information Level 4,Immediate Close Handle" ],
1777         [ 0x00c4, "Return EAHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1778         [ 0x00c5, "Return NetWareHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1779         [ 0x00c6, "Return Volume/Directory Number,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1780         [ 0x00d0, "Return EAHandle,Information Level 5,Immediate Close Handle" ],
1781         [ 0x00d1, "Return NetWareHandle,Information Level 5,Immediate Close Handle" ],
1782         [ 0x00d2, "Return Volume/Directory Number,Information Level 5,Immediate Close Handle" ],
1783         [ 0x00d4, "Return EAHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1784         [ 0x00d5, "Return NetWareHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1785         [ 0x00d6, "Return Volume/Directory Number,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1786         [ 0x00e0, "Return EAHandle,Information Level 6,Immediate Close Handle" ],
1787         [ 0x00e1, "Return NetWareHandle,Information Level 6,Immediate Close Handle" ],
1788         [ 0x00e2, "Return Volume/Directory Number,Information Level 6,Immediate Close Handle" ],
1789         [ 0x00e4, "Return EAHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1790         [ 0x00e5, "Return NetWareHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1791         [ 0x00e6, "Return Volume/Directory Number,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1792         [ 0x00f0, "Return EAHandle,Information Level 7,Immediate Close Handle" ],
1793         [ 0x00f1, "Return NetWareHandle,Information Level 7,Immediate Close Handle" ],
1794         [ 0x00f2, "Return Volume/Directory Number,Information Level 7,Immediate Close Handle" ],
1795         [ 0x00f4, "Return EAHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1796         [ 0x00f5, "Return NetWareHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1797         [ 0x00f6, "Return Volume/Directory Number,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1798 ])
1799 dstNSIndicator                  = val_string16("dst_ns_indicator", "Destination Name Space Indicator", [
1800         [ 0x0000, "Return Source Name Space Information" ],
1801         [ 0x0001, "Return Destination Name Space Information" ],
1802 ])
1803 DstQueueID                      = uint32("dst_queue_id", "Destination Queue ID")
1804 DuplicateRepliesSent            = uint16("duplicate_replies_sent", "Duplicate Replies Sent")
1805
1806 EAAccessFlag                    = bitfield16("ea_access_flag", "EA Access Flag", [
1807         bf_boolean16(0x0001, "ea_permanent_memory", "Permanent Memory"),
1808         bf_boolean16(0x0002, "ea_deep_freeze", "Deep Freeze"),
1809         bf_boolean16(0x0004, "ea_in_progress", "In Progress"),
1810         bf_boolean16(0x0008, "ea_header_being_enlarged", "Header Being Enlarged"),
1811         bf_boolean16(0x0010, "ea_new_tally_used", "New Tally Used"),
1812         bf_boolean16(0x0020, "ea_tally_need_update", "Tally Need Update"),
1813         bf_boolean16(0x0040, "ea_score_card_present", "Score Card Present"),
1814         bf_boolean16(0x0080, "ea_need_bit_flag", "EA Need Bit Flag"),
1815         bf_boolean16(0x0100, "ea_write_privileges", "Write Privileges"),
1816         bf_boolean16(0x0200, "ea_read_privileges", "Read Privileges"),
1817         bf_boolean16(0x0400, "ea_delete_privileges", "Delete Privileges"),
1818         bf_boolean16(0x0800, "ea_system_ea_only", "System EA Only"),
1819         bf_boolean16(0x1000, "ea_write_in_progress", "Write In Progress"),
1820 ])
1821 EABytesWritten                  = uint32("ea_bytes_written", "Bytes Written")
1822 EACount                         = uint32("ea_count", "Count")
1823 EADataSize                      = uint32("ea_data_size", "Data Size")
1824 EADataSizeDuplicated            = uint32("ea_data_size_duplicated", "Data Size Duplicated")
1825 EADuplicateCount                = uint32("ea_duplicate_count", "Duplicate Count")
1826 EAErrorCodes                    = val_string16("ea_error_codes", "EA Error Codes", [
1827         [ 0x0000, "SUCCESSFUL" ],
1828         [ 0x00c8, "ERR_MISSING_EA_KEY" ],
1829         [ 0x00c9, "ERR_EA_NOT_FOUND" ],
1830         [ 0x00ca, "ERR_INVALID_EA_HANDLE_TYPE" ],
1831         [ 0x00cb, "ERR_EA_NO_KEY_NO_DATA" ],
1832         [ 0x00cc, "ERR_EA_NUMBER_MISMATCH" ],
1833         [ 0x00cd, "ERR_EXTENT_NUMBER_OUT_OF_RANGE" ],
1834         [ 0x00ce, "ERR_EA_BAD_DIR_NUM" ],
1835         [ 0x00cf, "ERR_INVALID_EA_HANDLE" ],
1836         [ 0x00d0, "ERR_EA_POSITION_OUT_OF_RANGE" ],
1837         [ 0x00d1, "ERR_EA_ACCESS_DENIED" ],
1838         [ 0x00d2, "ERR_DATA_PAGE_ODD_SIZE" ],
1839         [ 0x00d3, "ERR_EA_VOLUME_NOT_MOUNTED" ],
1840         [ 0x00d4, "ERR_BAD_PAGE_BOUNDARY" ],
1841         [ 0x00d5, "ERR_INSPECT_FAILURE" ],
1842         [ 0x00d6, "ERR_EA_ALREADY_CLAIMED" ],
1843         [ 0x00d7, "ERR_ODD_BUFFER_SIZE" ],
1844         [ 0x00d8, "ERR_NO_SCORECARDS" ],
1845         [ 0x00d9, "ERR_BAD_EDS_SIGNATURE" ],
1846         [ 0x00da, "ERR_EA_SPACE_LIMIT" ],
1847         [ 0x00db, "ERR_EA_KEY_CORRUPT" ],
1848         [ 0x00dc, "ERR_EA_KEY_LIMIT" ],
1849         [ 0x00dd, "ERR_TALLY_CORRUPT" ],
1850 ])
1851 EAFlags                         = val_string16("ea_flags", "EA Flags", [
1852         [ 0x0000, "Return EAHandle,Information Level 0" ],
1853         [ 0x0001, "Return NetWareHandle,Information Level 0" ],
1854         [ 0x0002, "Return Volume/Directory Number,Information Level 0" ],
1855         [ 0x0004, "Return EAHandle,Close Handle on Error,Information Level 0" ],
1856         [ 0x0005, "Return NetWareHandle,Close Handle on Error,Information Level 0" ],
1857         [ 0x0006, "Return Volume/Directory Number,Close Handle on Error,Information Level 0" ],
1858         [ 0x0010, "Return EAHandle,Information Level 1" ],
1859         [ 0x0011, "Return NetWareHandle,Information Level 1" ],
1860         [ 0x0012, "Return Volume/Directory Number,Information Level 1" ],
1861         [ 0x0014, "Return EAHandle,Close Handle on Error,Information Level 1" ],
1862         [ 0x0015, "Return NetWareHandle,Close Handle on Error,Information Level 1" ],
1863         [ 0x0016, "Return Volume/Directory Number,Close Handle on Error,Information Level 1" ],
1864         [ 0x0020, "Return EAHandle,Information Level 2" ],
1865         [ 0x0021, "Return NetWareHandle,Information Level 2" ],
1866         [ 0x0022, "Return Volume/Directory Number,Information Level 2" ],
1867         [ 0x0024, "Return EAHandle,Close Handle on Error,Information Level 2" ],
1868         [ 0x0025, "Return NetWareHandle,Close Handle on Error,Information Level 2" ],
1869         [ 0x0026, "Return Volume/Directory Number,Close Handle on Error,Information Level 2" ],
1870         [ 0x0030, "Return EAHandle,Information Level 3" ],
1871         [ 0x0031, "Return NetWareHandle,Information Level 3" ],
1872         [ 0x0032, "Return Volume/Directory Number,Information Level 3" ],
1873         [ 0x0034, "Return EAHandle,Close Handle on Error,Information Level 3" ],
1874         [ 0x0035, "Return NetWareHandle,Close Handle on Error,Information Level 3" ],
1875         [ 0x0036, "Return Volume/Directory Number,Close Handle on Error,Information Level 3" ],
1876         [ 0x0040, "Return EAHandle,Information Level 4" ],
1877         [ 0x0041, "Return NetWareHandle,Information Level 4" ],
1878         [ 0x0042, "Return Volume/Directory Number,Information Level 4" ],
1879         [ 0x0044, "Return EAHandle,Close Handle on Error,Information Level 4" ],
1880         [ 0x0045, "Return NetWareHandle,Close Handle on Error,Information Level 4" ],
1881         [ 0x0046, "Return Volume/Directory Number,Close Handle on Error,Information Level 4" ],
1882         [ 0x0050, "Return EAHandle,Information Level 5" ],
1883         [ 0x0051, "Return NetWareHandle,Information Level 5" ],
1884         [ 0x0052, "Return Volume/Directory Number,Information Level 5" ],
1885         [ 0x0054, "Return EAHandle,Close Handle on Error,Information Level 5" ],
1886         [ 0x0055, "Return NetWareHandle,Close Handle on Error,Information Level 5" ],
1887         [ 0x0056, "Return Volume/Directory Number,Close Handle on Error,Information Level 5" ],
1888         [ 0x0060, "Return EAHandle,Information Level 6" ],
1889         [ 0x0061, "Return NetWareHandle,Information Level 6" ],
1890         [ 0x0062, "Return Volume/Directory Number,Information Level 6" ],
1891         [ 0x0064, "Return EAHandle,Close Handle on Error,Information Level 6" ],
1892         [ 0x0065, "Return NetWareHandle,Close Handle on Error,Information Level 6" ],
1893         [ 0x0066, "Return Volume/Directory Number,Close Handle on Error,Information Level 6" ],
1894         [ 0x0070, "Return EAHandle,Information Level 7" ],
1895         [ 0x0071, "Return NetWareHandle,Information Level 7" ],
1896         [ 0x0072, "Return Volume/Directory Number,Information Level 7" ],
1897         [ 0x0074, "Return EAHandle,Close Handle on Error,Information Level 7" ],
1898         [ 0x0075, "Return NetWareHandle,Close Handle on Error,Information Level 7" ],
1899         [ 0x0076, "Return Volume/Directory Number,Close Handle on Error,Information Level 7" ],
1900         [ 0x0080, "Return EAHandle,Information Level 0,Immediate Close Handle" ],
1901         [ 0x0081, "Return NetWareHandle,Information Level 0,Immediate Close Handle" ],
1902         [ 0x0082, "Return Volume/Directory Number,Information Level 0,Immediate Close Handle" ],
1903         [ 0x0084, "Return EAHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1904         [ 0x0085, "Return NetWareHandle,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1905         [ 0x0086, "Return Volume/Directory Number,Close Handle on Error,Information Level 0,Immediate Close Handle" ],
1906         [ 0x0090, "Return EAHandle,Information Level 1,Immediate Close Handle" ],
1907         [ 0x0091, "Return NetWareHandle,Information Level 1,Immediate Close Handle" ],
1908         [ 0x0092, "Return Volume/Directory Number,Information Level 1,Immediate Close Handle" ],
1909         [ 0x0094, "Return EAHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1910         [ 0x0095, "Return NetWareHandle,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1911         [ 0x0096, "Return Volume/Directory Number,Close Handle on Error,Information Level 1,Immediate Close Handle" ],
1912         [ 0x00a0, "Return EAHandle,Information Level 2,Immediate Close Handle" ],
1913         [ 0x00a1, "Return NetWareHandle,Information Level 2,Immediate Close Handle" ],
1914         [ 0x00a2, "Return Volume/Directory Number,Information Level 2,Immediate Close Handle" ],
1915         [ 0x00a4, "Return EAHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1916         [ 0x00a5, "Return NetWareHandle,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1917         [ 0x00a6, "Return Volume/Directory Number,Close Handle on Error,Information Level 2,Immediate Close Handle" ],
1918         [ 0x00b0, "Return EAHandle,Information Level 3,Immediate Close Handle" ],
1919         [ 0x00b1, "Return NetWareHandle,Information Level 3,Immediate Close Handle" ],
1920         [ 0x00b2, "Return Volume/Directory Number,Information Level 3,Immediate Close Handle" ],
1921         [ 0x00b4, "Return EAHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1922         [ 0x00b5, "Return NetWareHandle,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1923         [ 0x00b6, "Return Volume/Directory Number,Close Handle on Error,Information Level 3,Immediate Close Handle" ],
1924         [ 0x00c0, "Return EAHandle,Information Level 4,Immediate Close Handle" ],
1925         [ 0x00c1, "Return NetWareHandle,Information Level 4,Immediate Close Handle" ],
1926         [ 0x00c2, "Return Volume/Directory Number,Information Level 4,Immediate Close Handle" ],
1927         [ 0x00c4, "Return EAHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1928         [ 0x00c5, "Return NetWareHandle,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1929         [ 0x00c6, "Return Volume/Directory Number,Close Handle on Error,Information Level 4,Immediate Close Handle" ],
1930         [ 0x00d0, "Return EAHandle,Information Level 5,Immediate Close Handle" ],
1931         [ 0x00d1, "Return NetWareHandle,Information Level 5,Immediate Close Handle" ],
1932         [ 0x00d2, "Return Volume/Directory Number,Information Level 5,Immediate Close Handle" ],
1933         [ 0x00d4, "Return EAHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1934         [ 0x00d5, "Return NetWareHandle,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1935         [ 0x00d6, "Return Volume/Directory Number,Close Handle on Error,Information Level 5,Immediate Close Handle" ],
1936         [ 0x00e0, "Return EAHandle,Information Level 6,Immediate Close Handle" ],
1937         [ 0x00e1, "Return NetWareHandle,Information Level 6,Immediate Close Handle" ],
1938         [ 0x00e2, "Return Volume/Directory Number,Information Level 6,Immediate Close Handle" ],
1939         [ 0x00e4, "Return EAHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1940         [ 0x00e5, "Return NetWareHandle,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1941         [ 0x00e6, "Return Volume/Directory Number,Close Handle on Error,Information Level 6,Immediate Close Handle" ],
1942         [ 0x00f0, "Return EAHandle,Information Level 7,Immediate Close Handle" ],
1943         [ 0x00f1, "Return NetWareHandle,Information Level 7,Immediate Close Handle" ],
1944         [ 0x00f2, "Return Volume/Directory Number,Information Level 7,Immediate Close Handle" ],
1945         [ 0x00f4, "Return EAHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1946         [ 0x00f5, "Return NetWareHandle,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1947         [ 0x00f6, "Return Volume/Directory Number,Close Handle on Error,Information Level 7,Immediate Close Handle" ],
1948 ])
1949 EAHandle                        = uint32("ea_handle", "EA Handle")
1950 EAHandle.Display("BASE_HEX")
1951 EAHandleOrNetWareHandleOrVolume = uint32("ea_handle_or_netware_handle_or_volume", "EAHandle or NetWare Handle or Volume (see EAFlags)")
1952 EAHandleOrNetWareHandleOrVolume.Display("BASE_HEX")
1953 EAKey                           = nstring16("ea_key", "EA Key")
1954 EAKeySize                       = uint32("ea_key_size", "Key Size")
1955 EAKeySizeDuplicated             = uint32("ea_key_size_duplicated", "Key Size Duplicated")
1956 EAValue                         = nstring16("ea_value", "EA Value")
1957 EAValueRep                      = fw_string("ea_value_rep", "EA Value", 1)
1958 EAValueLength                   = uint16("ea_value_length", "Value Length")
1959 EchoSocket                      = uint16("echo_socket", "Echo Socket")
1960 EchoSocket.Display('BASE_HEX')
1961 EffectiveRights                 = bitfield8("effective_rights", "Effective Rights", [
1962         bf_boolean8(0x01, "effective_rights_read", "Read Rights"),
1963         bf_boolean8(0x02, "effective_rights_write", "Write Rights"),
1964         bf_boolean8(0x04, "effective_rights_open", "Open Rights"),
1965         bf_boolean8(0x08, "effective_rights_create", "Create Rights"),
1966         bf_boolean8(0x10, "effective_rights_delete", "Delete Rights"),
1967         bf_boolean8(0x20, "effective_rights_parental", "Parental Rights"),
1968         bf_boolean8(0x40, "effective_rights_search", "Search Rights"),
1969         bf_boolean8(0x80, "effective_rights_modify", "Modify Rights"),
1970 ])
1971 EnumInfoMask                    = bitfield8("enum_info_mask", "Return Information Mask", [
1972         bf_boolean8(0x01, "enum_info_transport", "Transport Information"),
1973         bf_boolean8(0x02, "enum_info_time", "Time Information"),
1974         bf_boolean8(0x04, "enum_info_name", "Name Information"),
1975         bf_boolean8(0x08, "enum_info_lock", "Lock Information"),
1976         bf_boolean8(0x10, "enum_info_print", "Print Information"),
1977         bf_boolean8(0x20, "enum_info_stats", "Statistical Information"),
1978         bf_boolean8(0x40, "enum_info_account", "Accounting Information"),
1979         bf_boolean8(0x80, "enum_info_auth", "Authentication Information"),
1980 ])
1981
1982 eventOffset                     = bytes("event_offset", "Event Offset", 8)
1983 eventOffset.Display("BASE_HEX")
1984 eventTime                       = uint32("event_time", "Event Time")
1985 eventTime.Display("BASE_HEX")
1986 ExpirationTime                  = uint32("expiration_time", "Expiration Time")
1987 ExpirationTime.Display('BASE_HEX')
1988 ExtAttrDataSize                 = uint32("ext_attr_data_size", "Extended Attributes Data Size")
1989 ExtAttrCount                    = uint32("ext_attr_count", "Extended Attributes Count")
1990 ExtAttrKeySize                  = uint32("ext_attr_key_size", "Extended Attributes Key Size")
1991 ExtendedAttributesDefined       = uint32("extended_attributes_defined", "Extended Attributes Defined")
1992 ExtendedAttributeExtantsUsed    = uint32("extended_attribute_extants_used", "Extended Attribute Extants Used")
1993 ExtendedInfo                    = bitfield16("ext_info", "Extended Return Information", [
1994         bf_boolean16(0x0001, "ext_info_update", "Update"),
1995         bf_boolean16(0x0002, "ext_info_dos_name", "DOS Name"),
1996         bf_boolean16(0x0004, "ext_info_flush", "Flush"),
1997         bf_boolean16(0x0008, "ext_info_parental", "Parental"),
1998         bf_boolean16(0x0010, "ext_info_mac_finder", "MAC Finder"),
1999         bf_boolean16(0x0020, "ext_info_sibling", "Sibling"),
2000         bf_boolean16(0x0040, "ext_info_effective", "Effective"),
2001         bf_boolean16(0x0080, "ext_info_mac_date", "MAC Date"),
2002         bf_boolean16(0x0100, "ext_info_access", "Last Access"),
2003         bf_boolean16(0x0400, "ext_info_64_bit_fs", "64 Bit File Sizes"),
2004         bf_boolean16(0x8000, "ext_info_newstyle", "New Style"),
2005 ])
2006 ExtRouterActiveFlag             = boolean8("ext_router_active_flag", "External Router Active Flag")
2007
2008 FailedAllocReqCnt               = uint32("failed_alloc_req", "Failed Alloc Request Count")
2009 FatalFATWriteErrors             = uint16("fatal_fat_write_errors", "Fatal FAT Write Errors")
2010 FATScanErrors                   = uint16("fat_scan_errors", "FAT Scan Errors")
2011 FATWriteErrors                  = uint16("fat_write_errors", "FAT Write Errors")
2012 FieldsLenTable                  = bytes("fields_len_table", "Fields Len Table", 32)
2013 FileCount                       = uint16("file_count", "File Count")
2014 FileDate                        = uint16("file_date", "File Date")
2015 FileDate.NWDate()
2016 FileDirWindow                   = uint16("file_dir_win", "File/Dir Window")
2017 FileDirWindow.Display("BASE_HEX")
2018 FileExecuteType                 = uint8("file_execute_type", "File Execute Type")
2019 FileExtendedAttributes          = val_string8("file_ext_attr", "File Extended Attributes", [
2020         [ 0x00, "Search On All Read Only Opens" ],
2021         [ 0x01, "Search On Read Only Opens With No Path" ],
2022         [ 0x02, "Shell Default Search Mode" ],
2023         [ 0x03, "Search On All Opens With No Path" ],
2024         [ 0x04, "Do Not Search" ],
2025         [ 0x05, "Reserved" ],
2026         [ 0x06, "Search On All Opens" ],
2027         [ 0x07, "Reserved" ],
2028         [ 0x08, "Search On All Read Only Opens/Indexed" ],
2029         [ 0x09, "Search On Read Only Opens With No Path/Indexed" ],
2030         [ 0x0a, "Shell Default Search Mode/Indexed" ],
2031         [ 0x0b, "Search On All Opens With No Path/Indexed" ],
2032         [ 0x0c, "Do Not Search/Indexed" ],
2033         [ 0x0d, "Indexed" ],
2034         [ 0x0e, "Search On All Opens/Indexed" ],
2035         [ 0x0f, "Indexed" ],
2036         [ 0x10, "Search On All Read Only Opens/Transactional" ],
2037         [ 0x11, "Search On Read Only Opens With No Path/Transactional" ],
2038         [ 0x12, "Shell Default Search Mode/Transactional" ],
2039         [ 0x13, "Search On All Opens With No Path/Transactional" ],
2040         [ 0x14, "Do Not Search/Transactional" ],
2041         [ 0x15, "Transactional" ],
2042         [ 0x16, "Search On All Opens/Transactional" ],
2043         [ 0x17, "Transactional" ],
2044         [ 0x18, "Search On All Read Only Opens/Indexed/Transactional" ],
2045         [ 0x19, "Search On Read Only Opens With No Path/Indexed/Transactional" ],
2046         [ 0x1a, "Shell Default Search Mode/Indexed/Transactional" ],
2047         [ 0x1b, "Search On All Opens With No Path/Indexed/Transactional" ],
2048         [ 0x1c, "Do Not Search/Indexed/Transactional" ],
2049         [ 0x1d, "Indexed/Transactional" ],
2050         [ 0x1e, "Search On All Opens/Indexed/Transactional" ],
2051         [ 0x1f, "Indexed/Transactional" ],
2052         [ 0x40, "Search On All Read Only Opens/Read Audit" ],
2053         [ 0x41, "Search On Read Only Opens With No Path/Read Audit" ],
2054         [ 0x42, "Shell Default Search Mode/Read Audit" ],
2055         [ 0x43, "Search On All Opens With No Path/Read Audit" ],
2056         [ 0x44, "Do Not Search/Read Audit" ],
2057         [ 0x45, "Read Audit" ],
2058         [ 0x46, "Search On All Opens/Read Audit" ],
2059         [ 0x47, "Read Audit" ],
2060         [ 0x48, "Search On All Read Only Opens/Indexed/Read Audit" ],
2061         [ 0x49, "Search On Read Only Opens With No Path/Indexed/Read Audit" ],
2062         [ 0x4a, "Shell Default Search Mode/Indexed/Read Audit" ],
2063         [ 0x4b, "Search On All Opens With No Path/Indexed/Read Audit" ],
2064         [ 0x4c, "Do Not Search/Indexed/Read Audit" ],
2065         [ 0x4d, "Indexed/Read Audit" ],
2066         [ 0x4e, "Search On All Opens/Indexed/Read Audit" ],
2067         [ 0x4f, "Indexed/Read Audit" ],
2068         [ 0x50, "Search On All Read Only Opens/Transactional/Read Audit" ],
2069         [ 0x51, "Search On Read Only Opens With No Path/Transactional/Read Audit" ],
2070         [ 0x52, "Shell Default Search Mode/Transactional/Read Audit" ],
2071         [ 0x53, "Search On All Opens With No Path/Transactional/Read Audit" ],
2072         [ 0x54, "Do Not Search/Transactional/Read Audit" ],
2073         [ 0x55, "Transactional/Read Audit" ],
2074         [ 0x56, "Search On All Opens/Transactional/Read Audit" ],
2075         [ 0x57, "Transactional/Read Audit" ],
2076         [ 0x58, "Search On All Read Only Opens/Indexed/Transactional/Read Audit" ],
2077         [ 0x59, "Search On Read Only Opens With No Path/Indexed/Transactional/Read Audit" ],
2078         [ 0x5a, "Shell Default Search Mode/Indexed/Transactional/Read Audit" ],
2079         [ 0x5b, "Search On All Opens With No Path/Indexed/Transactional/Read Audit" ],
2080         [ 0x5c, "Do Not Search/Indexed/Transactional/Read Audit" ],
2081         [ 0x5d, "Indexed/Transactional/Read Audit" ],
2082         [ 0x5e, "Search On All Opens/Indexed/Transactional/Read Audit" ],
2083         [ 0x5f, "Indexed/Transactional/Read Audit" ],
2084         [ 0x80, "Search On All Read Only Opens/Write Audit" ],
2085         [ 0x81, "Search On Read Only Opens With No Path/Write Audit" ],
2086         [ 0x82, "Shell Default Search Mode/Write Audit" ],
2087         [ 0x83, "Search On All Opens With No Path/Write Audit" ],
2088         [ 0x84, "Do Not Search/Write Audit" ],
2089         [ 0x85, "Write Audit" ],
2090         [ 0x86, "Search On All Opens/Write Audit" ],
2091         [ 0x87, "Write Audit" ],
2092         [ 0x88, "Search On All Read Only Opens/Indexed/Write Audit" ],
2093         [ 0x89, "Search On Read Only Opens With No Path/Indexed/Write Audit" ],
2094         [ 0x8a, "Shell Default Search Mode/Indexed/Write Audit" ],
2095         [ 0x8b, "Search On All Opens With No Path/Indexed/Write Audit" ],
2096         [ 0x8c, "Do Not Search/Indexed/Write Audit" ],
2097         [ 0x8d, "Indexed/Write Audit" ],
2098         [ 0x8e, "Search On All Opens/Indexed/Write Audit" ],
2099         [ 0x8f, "Indexed/Write Audit" ],
2100         [ 0x90, "Search On All Read Only Opens/Transactional/Write Audit" ],
2101         [ 0x91, "Search On Read Only Opens With No Path/Transactional/Write Audit" ],
2102         [ 0x92, "Shell Default Search Mode/Transactional/Write Audit" ],
2103         [ 0x93, "Search On All Opens With No Path/Transactional/Write Audit" ],
2104         [ 0x94, "Do Not Search/Transactional/Write Audit" ],
2105         [ 0x95, "Transactional/Write Audit" ],
2106         [ 0x96, "Search On All Opens/Transactional/Write Audit" ],
2107         [ 0x97, "Transactional/Write Audit" ],
2108         [ 0x98, "Search On All Read Only Opens/Indexed/Transactional/Write Audit" ],
2109         [ 0x99, "Search On Read Only Opens With No Path/Indexed/Transactional/Write Audit" ],
2110         [ 0x9a, "Shell Default Search Mode/Indexed/Transactional/Write Audit" ],
2111         [ 0x9b, "Search On All Opens With No Path/Indexed/Transactional/Write Audit" ],
2112         [ 0x9c, "Do Not Search/Indexed/Transactional/Write Audit" ],
2113         [ 0x9d, "Indexed/Transactional/Write Audit" ],
2114         [ 0x9e, "Search On All Opens/Indexed/Transactional/Write Audit" ],
2115         [ 0x9f, "Indexed/Transactional/Write Audit" ],
2116         [ 0xa0, "Search On All Read Only Opens/Read Audit/Write Audit" ],
2117         [ 0xa1, "Search On Read Only Opens With No Path/Read Audit/Write Audit" ],
2118         [ 0xa2, "Shell Default Search Mode/Read Audit/Write Audit" ],
2119         [ 0xa3, "Search On All Opens With No Path/Read Audit/Write Audit" ],
2120         [ 0xa4, "Do Not Search/Read Audit/Write Audit" ],
2121         [ 0xa5, "Read Audit/Write Audit" ],
2122         [ 0xa6, "Search On All Opens/Read Audit/Write Audit" ],
2123         [ 0xa7, "Read Audit/Write Audit" ],
2124         [ 0xa8, "Search On All Read Only Opens/Indexed/Read Audit/Write Audit" ],
2125         [ 0xa9, "Search On Read Only Opens With No Path/Indexed/Read Audit/Write Audit" ],
2126         [ 0xaa, "Shell Default Search Mode/Indexed/Read Audit/Write Audit" ],
2127         [ 0xab, "Search On All Opens With No Path/Indexed/Read Audit/Write Audit" ],
2128         [ 0xac, "Do Not Search/Indexed/Read Audit/Write Audit" ],
2129         [ 0xad, "Indexed/Read Audit/Write Audit" ],
2130         [ 0xae, "Search On All Opens/Indexed/Read Audit/Write Audit" ],
2131         [ 0xaf, "Indexed/Read Audit/Write Audit" ],
2132         [ 0xb0, "Search On All Read Only Opens/Transactional/Read Audit/Write Audit" ],
2133         [ 0xb1, "Search On Read Only Opens With No Path/Transactional/Read Audit/Write Audit" ],
2134         [ 0xb2, "Shell Default Search Mode/Transactional/Read Audit/Write Audit" ],
2135         [ 0xb3, "Search On All Opens With No Path/Transactional/Read Audit/Write Audit" ],
2136         [ 0xb4, "Do Not Search/Transactional/Read Audit/Write Audit" ],
2137         [ 0xb5, "Transactional/Read Audit/Write Audit" ],
2138         [ 0xb6, "Search On All Opens/Transactional/Read Audit/Write Audit" ],
2139         [ 0xb7, "Transactional/Read Audit/Write Audit" ],
2140         [ 0xb8, "Search On All Read Only Opens/Indexed/Transactional/Read Audit/Write Audit" ],
2141         [ 0xb9, "Search On Read Only Opens With No Path/Indexed/Transactional/Read Audit/Write Audit" ],
2142         [ 0xba, "Shell Default Search Mode/Indexed/Transactional/Read Audit/Write Audit" ],
2143         [ 0xbb, "Search On All Opens With No Path/Indexed/Transactional/Read Audit/Write Audit" ],
2144         [ 0xbc, "Do Not Search/Indexed/Transactional/Read Audit/Write Audit" ],
2145         [ 0xbd, "Indexed/Transactional/Read Audit/Write Audit" ],
2146         [ 0xbe, "Search On All Opens/Indexed/Transactional/Read Audit/Write Audit" ],
2147         [ 0xbf, "Indexed/Transactional/Read Audit/Write Audit" ],
2148 ])
2149 fileFlags                       = uint32("file_flags", "File Flags")
2150 FileHandle                      = bytes("file_handle", "File Handle", 6)
2151 FileLimbo                       = uint32("file_limbo", "File Limbo")
2152 FileListCount                   = uint32("file_list_count", "File List Count")
2153 FileLock                        = val_string8("file_lock", "File Lock", [
2154         [ 0x00, "Not Locked" ],
2155         [ 0xfe, "Locked by file lock" ],
2156         [ 0xff, "Unknown" ],
2157 ])
2158 FileLockCount                   = uint16("file_lock_count", "File Lock Count")
2159 FileMode                        = uint8("file_mode", "File Mode")
2160 FileName                        = nstring8("file_name", "Filename")
2161 FileName12                      = fw_string("file_name_12", "Filename", 12)
2162 FileName14                      = fw_string("file_name_14", "Filename", 14)
2163 FileNameLen                     = uint8("file_name_len", "Filename Length")
2164 FileOffset                      = uint32("file_offset", "File Offset")
2165 FilePath                        = nstring8("file_path", "File Path")
2166 FileSize                        = uint32("file_size", "File Size", BE)
2167 FileSystemID                    = uint8("file_system_id", "File System ID")
2168 FileTime                        = uint16("file_time", "File Time")
2169 FileTime.NWTime()
2170 FileWriteFlags                  = val_string8("file_write_flags", "File Write Flags", [
2171         [ 0x01, "Writing" ],
2172         [ 0x02, "Write aborted" ],
2173 ])
2174 FileWriteState                  = val_string8("file_write_state", "File Write State", [
2175         [ 0x00, "Not Writing" ],
2176         [ 0x01, "Write in Progress" ],
2177         [ 0x02, "Write Being Stopped" ],
2178 ])
2179 Filler                          = uint8("filler", "Filler")
2180 FinderAttr                      = bitfield16("finder_attr", "Finder Info Attributes", [
2181         bf_boolean16(0x0001, "finder_attr_desktop", "Object on Desktop"),
2182         bf_boolean16(0x2000, "finder_attr_invisible", "Object is Invisible"),
2183         bf_boolean16(0x4000, "finder_attr_bundle", "Object Has Bundle"),
2184 ])
2185 FixedBitMask                    = uint32("fixed_bit_mask", "Fixed Bit Mask")
2186 FixedBitsDefined                = uint16("fixed_bits_defined", "Fixed Bits Defined")
2187 FlagBits                        = uint8("flag_bits", "Flag Bits")
2188 Flags                           = uint8("flags", "Flags")
2189 FlagsDef                        = uint16("flags_def", "Flags")
2190 FlushTime                       = uint32("flush_time", "Flush Time")
2191 FolderFlag                      = val_string8("folder_flag", "Folder Flag", [
2192         [ 0x00, "Not a Folder" ],
2193         [ 0x01, "Folder" ],
2194 ])
2195 ForkCount                       = uint8("fork_count", "Fork Count")
2196 ForkIndicator                   = val_string8("fork_indicator", "Fork Indicator", [
2197         [ 0x00, "Data Fork" ],
2198         [ 0x01, "Resource Fork" ],
2199 ])
2200 ForceFlag                       = val_string8("force_flag", "Force Server Down Flag", [
2201         [ 0x00, "Down Server if No Files Are Open" ],
2202         [ 0xff, "Down Server Immediately, Auto-Close Open Files" ],
2203 ])
2204 ForgedDetachedRequests          = uint16("forged_detached_requests", "Forged Detached Requests")
2205 FormType                        = uint16( "form_type", "Form Type" )
2206 FormTypeCnt                     = uint32("form_type_count", "Form Types Count")
2207 FoundSomeMem                    = uint32("found_some_mem", "Found Some Memory")
2208 FractionalSeconds               = uint32("fractional_time", "Fractional Time in Seconds")
2209 FraggerHandle                   = uint32("fragger_handle", "Fragment Handle")
2210 FraggerHandle.Display('BASE_HEX')
2211 FragmentWriteOccurred           = uint16("fragment_write_occurred", "Fragment Write Occurred")
2212 FragSize                        = uint32("frag_size", "Fragment Size")
2213 FreeableLimboSectors            = uint32("freeable_limbo_sectors", "Freeable Limbo Sectors")
2214 FreeBlocks                      = uint32("free_blocks", "Free Blocks")
2215 FreedClusters                   = uint32("freed_clusters", "Freed Clusters")
2216 FreeDirectoryEntries            = uint16("free_directory_entries", "Free Directory Entries")
2217 FSEngineFlag                    = boolean8("fs_engine_flag", "FS Engine Flag")
2218 FullName                        = fw_string("full_name", "Full Name", 39)
2219
2220 GetSetFlag                      = val_string8("get_set_flag", "Get Set Flag", [
2221         [ 0x00, "Get the default support module ID" ],
2222         [ 0x01, "Set the default support module ID" ],
2223 ])
2224 GUID                            = bytes("guid", "GUID", 16)
2225 GUID.Display("BASE_HEX")
2226
2227 HandleFlag                      = val_string8("handle_flag", "Handle Flag", [
2228         [ 0x00, "Short Directory Handle" ],
2229         [ 0x01, "Directory Base" ],
2230         [ 0xFF, "No Handle Present" ],
2231 ])
2232 HandleInfoLevel                 = val_string8("handle_info_level", "Handle Info Level", [
2233         [ 0x00, "Get Limited Information from a File Handle" ],
2234         [ 0x01, "Get Limited Information from a File Handle Using a Name Space" ],
2235         [ 0x02, "Get Information from a File Handle" ],
2236         [ 0x03, "Get Information from a Directory Handle" ],
2237         [ 0x04, "Get Complete Information from a Directory Handle" ],
2238         [ 0x05, "Get Complete Information from a File Handle" ],
2239 ])
2240 HeldBytesRead                   = bytes("held_bytes_read", "Held Bytes Read", 6)
2241 HeldBytesWritten                = bytes("held_bytes_write", "Held Bytes Written", 6)
2242 HeldConnectTimeInMinutes        = uint32("held_conn_time", "Held Connect Time in Minutes")
2243 HeldRequests                    = uint32("user_info_held_req", "Held Requests")
2244 HoldAmount                      = uint32("hold_amount", "Hold Amount")
2245 HoldCancelAmount                = uint32("hold_cancel_amount", "Hold Cancel Amount")
2246 HolderID                        = uint32("holder_id", "Holder ID")
2247 HolderID.Display("BASE_HEX")
2248 HoldTime                        = uint32("hold_time", "Hold Time")
2249 HopsToNet                       = uint16("hops_to_net", "Hop Count")
2250 HorizLocation                   = uint16("horiz_location", "Horizontal Location")
2251 HostAddress                     = bytes("host_address", "Host Address", 6)
2252 HotFixBlocksAvailable           = uint16("hot_fix_blocks_available", "Hot Fix Blocks Available")
2253 HotFixDisabled                  = val_string8("hot_fix_disabled", "Hot Fix Disabled", [
2254         [ 0x00, "Enabled" ],
2255         [ 0x01, "Disabled" ],
2256 ])
2257 HotFixTableSize                 = uint16("hot_fix_table_size", "Hot Fix Table Size")
2258 HotFixTableStart                = uint32("hot_fix_table_start", "Hot Fix Table Start")
2259 Hour                            = uint8("s_hour", "Hour")
2260 HugeBitMask                     = uint32("huge_bit_mask", "Huge Bit Mask")
2261 HugeBitsDefined                 = uint16("huge_bits_defined", "Huge Bits Defined")
2262 HugeData                        = nstring8("huge_data", "Huge Data")
2263 HugeDataUsed                    = uint32("huge_data_used", "Huge Data Used")
2264 HugeStateInfo                   = bytes("huge_state_info", "Huge State Info", 16)
2265
2266 IdentificationNumber            = uint32("identification_number", "Identification Number")
2267 IgnoredRxPkts                   = uint32("ignored_rx_pkts", "Ignored Receive Packets")
2268 IncomingPacketDiscardedNoDGroup = uint16("incoming_packet_discarded_no_dgroup", "Incoming Packet Discarded No DGroup")
2269 IndexNumber                     = uint8("index_number", "Index Number")
2270 InfoCount                       = uint16("info_count", "Info Count")
2271 InfoFlags                       = bitfield32("info_flags", "Info Flags", [
2272         bf_boolean32(0x10000000, "info_flags_security", "Return Object Security"),
2273         bf_boolean32(0x20000000, "info_flags_flags", "Return Object Flags"),
2274         bf_boolean32(0x40000000, "info_flags_type", "Return Object Type"),
2275         bf_boolean32(0x80000000, "info_flags_name", "Return Object Name"),
2276 ])
2277 InfoLevelNumber                 = val_string8("info_level_num", "Information Level Number", [
2278         [ 0x01, "Volume Information Definition" ],
2279         [ 0x02, "Volume Information 2 Definition" ],
2280 ])
2281 InfoMask                        = bitfield32("info_mask", "Information Mask", [
2282         bf_boolean32(0x00000001, "info_flags_dos_time", "DOS Time"),
2283         bf_boolean32(0x00000002, "info_flags_ref_count", "Reference Count"),
2284         bf_boolean32(0x00000004, "info_flags_dos_attr", "DOS Attributes"),
2285         bf_boolean32(0x00000008, "info_flags_ids", "ID's"),
2286         bf_boolean32(0x00000010, "info_flags_ds_sizes", "Data Stream Sizes"),
2287         bf_boolean32(0x00000020, "info_flags_ns_attr", "Name Space Attributes"),
2288         bf_boolean32(0x00000040, "info_flags_ea_present", "EA Present Flag"),
2289         bf_boolean32(0x00000080, "info_flags_all_attr", "All Attributes"),
2290         bf_boolean32(0x00000100, "info_flags_all_dirbase_num", "All Directory Base Numbers"),
2291         bf_boolean32(0x00000200, "info_flags_max_access_mask", "Maximum Access Mask"),
2292         bf_boolean32(0x00000400, "info_flags_flush_time", "Flush Time"),
2293         bf_boolean32(0x00000800, "info_flags_prnt_base_id", "Parent Base ID"),
2294         bf_boolean32(0x00001000, "info_flags_mac_finder", "Mac Finder Information"),
2295         bf_boolean32(0x00002000, "info_flags_sibling_cnt", "Sibling Count"),
2296         bf_boolean32(0x00004000, "info_flags_effect_rights", "Effective Rights"),
2297         bf_boolean32(0x00008000, "info_flags_mac_time", "Mac Time"),
2298         bf_boolean32(0x20000000, "info_mask_dosname", "DOS Name"),
2299         bf_boolean32(0x40000000, "info_mask_c_name_space", "Creator Name Space & Name"),
2300         bf_boolean32(0x80000000, "info_mask_name", "Name"),
2301 ])
2302 InheritedRightsMask             = bitfield16("inherited_rights_mask", "Inherited Rights Mask", [
2303         bf_boolean16(0x0001, "inh_rights_read", "Read Rights"),
2304         bf_boolean16(0x0002, "inh_rights_write", "Write Rights"),
2305         bf_boolean16(0x0004, "inh_rights_open", "Open Rights"),
2306         bf_boolean16(0x0008, "inh_rights_create", "Create Rights"),
2307         bf_boolean16(0x0010, "inh_rights_delete", "Delete Rights"),
2308         bf_boolean16(0x0020, "inh_rights_parent", "Change Access"),
2309         bf_boolean16(0x0040, "inh_rights_search", "See Files Flag"),
2310         bf_boolean16(0x0080, "inh_rights_modify", "Modify Rights"),
2311         bf_boolean16(0x0100, "inh_rights_supervisor", "Supervisor"),
2312 ])
2313 InheritanceRevokeMask           = bitfield16("inheritance_revoke_mask", "Revoke Rights Mask", [
2314         bf_boolean16(0x0001, "inh_revoke_read", "Read Rights"),
2315         bf_boolean16(0x0002, "inh_revoke_write", "Write Rights"),
2316         bf_boolean16(0x0004, "inh_revoke_open", "Open Rights"),
2317         bf_boolean16(0x0008, "inh_revoke_create", "Create Rights"),
2318         bf_boolean16(0x0010, "inh_revoke_delete", "Delete Rights"),
2319         bf_boolean16(0x0020, "inh_revoke_parent", "Change Access"),
2320         bf_boolean16(0x0040, "inh_revoke_search", "See Files Flag"),
2321         bf_boolean16(0x0080, "inh_revoke_modify", "Modify Rights"),
2322         bf_boolean16(0x0100, "inh_revoke_supervisor", "Supervisor"),
2323 ])
2324 InitialSemaphoreValue           = uint8("initial_semaphore_value", "Initial Semaphore Value")
2325 InspectSize                     = uint32("inspect_size", "Inspect Size")
2326 InternetBridgeVersion           = uint8("internet_bridge_version", "Internet Bridge Version")
2327 InterruptNumbersUsed            = uint32("interrupt_numbers_used", "Interrupt Numbers Used")
2328 InUse                           = uint32("in_use", "Bytes in Use")
2329 IOAddressesUsed                 = bytes("io_addresses_used", "IO Addresses Used", 8)
2330 IOErrorCount                    = uint16("io_error_count", "IO Error Count")
2331 IOEngineFlag                    = boolean8("io_engine_flag", "IO Engine Flag")
2332 IPXNotMyNetwork                 = uint16("ipx_not_my_network", "IPX Not My Network")
2333 ItemsChanged                    = uint32("items_changed", "Items Changed")
2334 ItemsChecked                    = uint32("items_checked", "Items Checked")
2335 ItemsCount                      = uint32("items_count", "Items Count")
2336 itemsInList                     = uint32("items_in_list", "Items in List")
2337 ItemsInPacket                   = uint32("items_in_packet", "Items in Packet")
2338
2339 JobControlFlags                 = bitfield8("job_control_flags", "Job Control Flags", [
2340         bf_boolean8(0x08, "job_control_job_recovery", "Job Recovery"),
2341         bf_boolean8(0x10, "job_control_reservice", "ReService Job"),
2342         bf_boolean8(0x20, "job_control_file_open", "File Open"),
2343         bf_boolean8(0x40, "job_control_user_hold", "User Hold"),
2344         bf_boolean8(0x80, "job_control_operator_hold", "Operator Hold"),
2345
2346 ])
2347 JobControlFlagsWord             = bitfield16("job_control_flags_word", "Job Control Flags", [
2348         bf_boolean16(0x0008, "job_control1_job_recovery", "Job Recovery"),
2349         bf_boolean16(0x0010, "job_control1_reservice", "ReService Job"),
2350         bf_boolean16(0x0020, "job_control1_file_open", "File Open"),
2351         bf_boolean16(0x0040, "job_control1_user_hold", "User Hold"),
2352         bf_boolean16(0x0080, "job_control1_operator_hold", "Operator Hold"),
2353
2354 ])
2355 JobCount                        = uint32("job_count", "Job Count")
2356 JobFileHandle                   = bytes("job_file_handle", "Job File Handle", 6)
2357 JobFileHandleLong               = uint32("job_file_handle_long", "Job File Handle", BE)
2358 JobFileHandleLong.Display("BASE_HEX")
2359 JobFileName                     = fw_string("job_file_name", "Job File Name", 14)
2360 JobPosition                     = uint8("job_position", "Job Position")
2361 JobPositionWord                 = uint16("job_position_word", "Job Position")
2362 JobNumber                       = uint16("job_number", "Job Number", BE )
2363 JobNumberLong                   = uint32("job_number_long", "Job Number", BE )
2364 JobNumberLong.Display("BASE_HEX")
2365 JobType                         = uint16("job_type", "Job Type", BE )
2366
2367 LANCustomVariablesCount         = uint32("lan_cust_var_count", "LAN Custom Variables Count")
2368 LANdriverBoardInstance          = uint16("lan_drv_bd_inst", "LAN Driver Board Instance")
2369 LANdriverBoardNumber            = uint16("lan_drv_bd_num", "LAN Driver Board Number")
2370 LANdriverCardID                 = uint16("lan_drv_card_id", "LAN Driver Card ID")
2371 LANdriverCardName               = fw_string("lan_drv_card_name", "LAN Driver Card Name", 28)
2372 LANdriverCFG_MajorVersion       = uint8("lan_dvr_cfg_major_vrs", "LAN Driver Config - Major Version")
2373 LANdriverCFG_MinorVersion       = uint8("lan_dvr_cfg_minor_vrs", "LAN Driver Config - Minor Version")
2374 LANdriverDMAUsage1              = uint8("lan_drv_dma_usage1", "Primary DMA Channel")
2375 LANdriverDMAUsage2              = uint8("lan_drv_dma_usage2", "Secondary DMA Channel")
2376 LANdriverFlags                  = uint16("lan_drv_flags", "LAN Driver Flags")
2377 LANdriverFlags.Display("BASE_HEX")
2378 LANdriverInterrupt1             = uint8("lan_drv_interrupt1", "Primary Interrupt Vector")
2379 LANdriverInterrupt2             = uint8("lan_drv_interrupt2", "Secondary Interrupt Vector")
2380 LANdriverIOPortsAndRanges1      = uint16("lan_drv_io_ports_and_ranges_1", "Primary Base I/O Port")
2381 LANdriverIOPortsAndRanges2      = uint16("lan_drv_io_ports_and_ranges_2", "Number of I/O Ports")
2382 LANdriverIOPortsAndRanges3      = uint16("lan_drv_io_ports_and_ranges_3", "Secondary Base I/O Port")
2383 LANdriverIOPortsAndRanges4      = uint16("lan_drv_io_ports_and_ranges_4", "Number of I/O Ports")
2384 LANdriverIOReserved             = bytes("lan_drv_io_reserved", "LAN Driver IO Reserved", 14)
2385 LANdriverLineSpeed              = uint16("lan_drv_line_speed", "LAN Driver Line Speed")
2386 LANdriverLink                   = uint32("lan_drv_link", "LAN Driver Link")
2387 LANdriverLogicalName            = bytes("lan_drv_log_name", "LAN Driver Logical Name", 18)
2388 LANdriverMajorVersion           = uint8("lan_drv_major_ver", "LAN Driver Major Version")
2389 LANdriverMaximumSize            = uint32("lan_drv_max_size", "LAN Driver Maximum Size")
2390 LANdriverMaxRecvSize            = uint32("lan_drv_max_rcv_size", "LAN Driver Maximum Receive Size")
2391 LANdriverMediaID                = uint16("lan_drv_media_id", "LAN Driver Media ID")
2392 LANdriverMediaType              = fw_string("lan_drv_media_type", "LAN Driver Media Type", 40)
2393 LANdriverMemoryDecode0          = uint32("lan_drv_mem_decode_0", "LAN Driver Memory Decode 0")
2394 LANdriverMemoryDecode1          = uint32("lan_drv_mem_decode_1", "LAN Driver Memory Decode 1")
2395 LANdriverMemoryLength0          = uint16("lan_drv_mem_length_0", "LAN Driver Memory Length 0")
2396 LANdriverMemoryLength1          = uint16("lan_drv_mem_length_1", "LAN Driver Memory Length 1")
2397 LANdriverMinorVersion           = uint8("lan_drv_minor_ver", "LAN Driver Minor Version")
2398 LANdriverModeFlags              = val_string8("lan_dvr_mode_flags", "LAN Driver Mode Flags", [
2399         [0x80, "Canonical Address" ],
2400         [0x81, "Canonical Address" ],
2401         [0x82, "Canonical Address" ],
2402         [0x83, "Canonical Address" ],
2403         [0x84, "Canonical Address" ],
2404         [0x85, "Canonical Address" ],
2405         [0x86, "Canonical Address" ],
2406         [0x87, "Canonical Address" ],
2407         [0x88, "Canonical Address" ],
2408         [0x89, "Canonical Address" ],
2409         [0x8a, "Canonical Address" ],
2410         [0x8b, "Canonical Address" ],
2411         [0x8c, "Canonical Address" ],
2412         [0x8d, "Canonical Address" ],
2413         [0x8e, "Canonical Address" ],
2414         [0x8f, "Canonical Address" ],
2415         [0x90, "Canonical Address" ],
2416         [0x91, "Canonical Address" ],
2417         [0x92, "Canonical Address" ],
2418         [0x93, "Canonical Address" ],
2419         [0x94, "Canonical Address" ],
2420         [0x95, "Canonical Address" ],
2421         [0x96, "Canonical Address" ],
2422         [0x97, "Canonical Address" ],
2423         [0x98, "Canonical Address" ],
2424         [0x99, "Canonical Address" ],
2425         [0x9a, "Canonical Address" ],
2426         [0x9b, "Canonical Address" ],
2427         [0x9c, "Canonical Address" ],
2428         [0x9d, "Canonical Address" ],
2429         [0x9e, "Canonical Address" ],
2430         [0x9f, "Canonical Address" ],
2431         [0xa0, "Canonical Address" ],
2432         [0xa1, "Canonical Address" ],
2433         [0xa2, "Canonical Address" ],
2434         [0xa3, "Canonical Address" ],
2435         [0xa4, "Canonical Address" ],
2436         [0xa5, "Canonical Address" ],
2437         [0xa6, "Canonical Address" ],
2438         [0xa7, "Canonical Address" ],
2439         [0xa8, "Canonical Address" ],
2440         [0xa9, "Canonical Address" ],
2441         [0xaa, "Canonical Address" ],
2442         [0xab, "Canonical Address" ],
2443         [0xac, "Canonical Address" ],
2444         [0xad, "Canonical Address" ],
2445         [0xae, "Canonical Address" ],
2446         [0xaf, "Canonical Address" ],
2447         [0xb0, "Canonical Address" ],
2448         [0xb1, "Canonical Address" ],
2449         [0xb2, "Canonical Address" ],
2450         [0xb3, "Canonical Address" ],
2451         [0xb4, "Canonical Address" ],
2452         [0xb5, "Canonical Address" ],
2453         [0xb6, "Canonical Address" ],
2454         [0xb7, "Canonical Address" ],
2455         [0xb8, "Canonical Address" ],
2456         [0xb9, "Canonical Address" ],
2457         [0xba, "Canonical Address" ],
2458         [0xbb, "Canonical Address" ],
2459         [0xbc, "Canonical Address" ],
2460         [0xbd, "Canonical Address" ],
2461         [0xbe, "Canonical Address" ],
2462         [0xbf, "Canonical Address" ],
2463         [0xc0, "Non-Canonical Address" ],
2464         [0xc1, "Non-Canonical Address" ],
2465         [0xc2, "Non-Canonical Address" ],
2466         [0xc3, "Non-Canonical Address" ],
2467         [0xc4, "Non-Canonical Address" ],
2468         [0xc5, "Non-Canonical Address" ],
2469         [0xc6, "Non-Canonical Address" ],
2470         [0xc7, "Non-Canonical Address" ],
2471         [0xc8, "Non-Canonical Address" ],
2472         [0xc9, "Non-Canonical Address" ],
2473         [0xca, "Non-Canonical Address" ],
2474         [0xcb, "Non-Canonical Address" ],
2475         [0xcc, "Non-Canonical Address" ],
2476         [0xcd, "Non-Canonical Address" ],
2477         [0xce, "Non-Canonical Address" ],
2478         [0xcf, "Non-Canonical Address" ],
2479         [0xd0, "Non-Canonical Address" ],
2480         [0xd1, "Non-Canonical Address" ],
2481         [0xd2, "Non-Canonical Address" ],
2482         [0xd3, "Non-Canonical Address" ],
2483         [0xd4, "Non-Canonical Address" ],
2484         [0xd5, "Non-Canonical Address" ],
2485         [0xd6, "Non-Canonical Address" ],
2486         [0xd7, "Non-Canonical Address" ],
2487         [0xd8, "Non-Canonical Address" ],
2488         [0xd9, "Non-Canonical Address" ],
2489         [0xda, "Non-Canonical Address" ],
2490         [0xdb, "Non-Canonical Address" ],
2491         [0xdc, "Non-Canonical Address" ],
2492         [0xdd, "Non-Canonical Address" ],
2493         [0xde, "Non-Canonical Address" ],
2494         [0xdf, "Non-Canonical Address" ],
2495         [0xe0, "Non-Canonical Address" ],
2496         [0xe1, "Non-Canonical Address" ],
2497         [0xe2, "Non-Canonical Address" ],
2498         [0xe3, "Non-Canonical Address" ],
2499         [0xe4, "Non-Canonical Address" ],
2500         [0xe5, "Non-Canonical Address" ],
2501         [0xe6, "Non-Canonical Address" ],
2502         [0xe7, "Non-Canonical Address" ],
2503         [0xe8, "Non-Canonical Address" ],
2504         [0xe9, "Non-Canonical Address" ],
2505         [0xea, "Non-Canonical Address" ],
2506         [0xeb, "Non-Canonical Address" ],
2507         [0xec, "Non-Canonical Address" ],
2508         [0xed, "Non-Canonical Address" ],
2509         [0xee, "Non-Canonical Address" ],
2510         [0xef, "Non-Canonical Address" ],
2511         [0xf0, "Non-Canonical Address" ],
2512         [0xf1, "Non-Canonical Address" ],
2513         [0xf2, "Non-Canonical Address" ],
2514         [0xf3, "Non-Canonical Address" ],
2515         [0xf4, "Non-Canonical Address" ],
2516         [0xf5, "Non-Canonical Address" ],
2517         [0xf6, "Non-Canonical Address" ],
2518         [0xf7, "Non-Canonical Address" ],
2519         [0xf8, "Non-Canonical Address" ],
2520         [0xf9, "Non-Canonical Address" ],
2521         [0xfa, "Non-Canonical Address" ],
2522         [0xfb, "Non-Canonical Address" ],
2523         [0xfc, "Non-Canonical Address" ],
2524         [0xfd, "Non-Canonical Address" ],
2525         [0xfe, "Non-Canonical Address" ],
2526         [0xff, "Non-Canonical Address" ],
2527 ])
2528 LANDriverNumber                 = uint8("lan_driver_number", "LAN Driver Number")
2529 LANdriverNodeAddress            = bytes("lan_dvr_node_addr", "LAN Driver Node Address", 6)
2530 LANdriverRecvSize               = uint32("lan_drv_rcv_size", "LAN Driver Receive Size")
2531 LANdriverReserved               = uint16("lan_drv_reserved", "LAN Driver Reserved")
2532 LANdriverSendRetries            = uint16("lan_drv_snd_retries", "LAN Driver Send Retries")
2533 LANdriverSharingFlags           = uint16("lan_drv_share", "LAN Driver Sharing Flags")
2534 LANdriverShortName              = fw_string("lan_drv_short_name", "LAN Driver Short Name", 40)
2535 LANdriverSlot                   = uint16("lan_drv_slot", "LAN Driver Slot")
2536 LANdriverSrcRouting             = uint32("lan_drv_src_route", "LAN Driver Source Routing")
2537 LANdriverTransportTime          = uint16("lan_drv_trans_time", "LAN Driver Transport Time")
2538 LastAccessedDate                = uint16("last_access_date", "Last Accessed Date")
2539 LastAccessedDate.NWDate()
2540 LastAccessedTime                = uint16("last_access_time", "Last Accessed Time")
2541 LastAccessedTime.NWTime()
2542 LastGarbCollect                 = uint32("last_garbage_collect", "Last Garbage Collection")
2543 LastInstance                    = uint32("last_instance", "Last Instance")
2544 LastRecordSeen                  = uint16("last_record_seen", "Last Record Seen")
2545 LastSearchIndex                 = uint16("last_search_index", "Search Index")
2546 LastSeen                        = uint32("last_seen", "Last Seen")
2547 LastSequenceNumber              = uint16("last_sequence_number", "Sequence Number")
2548 Level                           = uint8("level", "Level")
2549 LFSCounters                     = uint32("lfs_counters", "LFS Counters")
2550 LimboDataStreamsCount           = uint32("limbo_data_streams_count", "Limbo Data Streams Count")
2551 limbCount                       = uint32("limb_count", "Limb Count")
2552 LimboUsed                       = uint32("limbo_used", "Limbo Used")
2553 LoadedNameSpaces                = uint8("loaded_name_spaces", "Loaded Name Spaces")
2554 LocalConnectionID               = uint32("local_connection_id", "Local Connection ID")
2555 LocalConnectionID.Display("BASE_HEX")
2556 LocalMaxPacketSize              = uint32("local_max_packet_size", "Local Max Packet Size")
2557 LocalMaxSendSize                = uint32("local_max_send_size", "Local Max Send Size")
2558 LocalMaxRecvSize                = uint32("local_max_recv_size", "Local Max Recv Size")
2559 LocalLoginInfoCcode             = uint8("local_login_info_ccode", "Local Login Info C Code")
2560 LocalTargetSocket               = uint32("local_target_socket", "Local Target Socket")
2561 LocalTargetSocket.Display("BASE_HEX")
2562 LockAreaLen                     = uint32("lock_area_len", "Lock Area Length")
2563 LockAreasStartOffset            = uint32("lock_areas_start_offset", "Lock Areas Start Offset")
2564 LockTimeout                     = uint16("lock_timeout", "Lock Timeout")
2565 Locked                          = val_string8("locked", "Locked Flag", [
2566         [ 0x00, "Not Locked Exclusively" ],
2567         [ 0x01, "Locked Exclusively" ],
2568 ])
2569 LockFlag                        = val_string8("lock_flag", "Lock Flag", [
2570         [ 0x00, "Not Locked, Log for Future Exclusive Lock" ],
2571         [ 0x01, "Exclusive Lock (Read/Write)" ],
2572         [ 0x02, "Log for Future Shared Lock"],
2573         [ 0x03, "Shareable Lock (Read-Only)" ],
2574         [ 0xfe, "Locked by a File Lock" ],
2575         [ 0xff, "Locked by Begin Share File Set" ],
2576 ])
2577 LockName                        = nstring8("lock_name", "Lock Name")
2578 LockStatus                      = val_string8("lock_status", "Lock Status", [
2579         [ 0x00, "Locked Exclusive" ],
2580         [ 0x01, "Locked Shareable" ],
2581         [ 0x02, "Logged" ],
2582         [ 0x06, "Lock is Held by TTS"],
2583 ])
2584 LockType                        = val_string8("lock_type", "Lock Type", [
2585         [ 0x00, "Locked" ],
2586         [ 0x01, "Open Shareable" ],
2587         [ 0x02, "Logged" ],
2588         [ 0x03, "Open Normal" ],
2589         [ 0x06, "TTS Holding Lock" ],
2590         [ 0x07, "Transaction Flag Set on This File" ],
2591 ])
2592 LogFileFlagHigh                 = bitfield8("log_file_flag_high", "Log File Flag (byte 2)", [
2593         bf_boolean8(0x80, "log_flag_call_back", "Call Back Requested" ),
2594 ])
2595 LogFileFlagLow                  = bitfield8("log_file_flag_low", "Log File Flag", [
2596         bf_boolean8(0x01, "log_flag_lock_file", "Lock File Immediately" ),
2597 ])
2598 LoggedObjectID                  = uint32("logged_object_id", "Logged in Object ID")
2599 LoggedObjectID.Display("BASE_HEX")
2600 LoggedCount                     = uint16("logged_count", "Logged Count")
2601 LogicalConnectionNumber         = uint16("logical_connection_number", "Logical Connection Number", BE)
2602 LogicalDriveCount               = uint8("logical_drive_count", "Logical Drive Count")
2603 LogicalDriveNumber              = uint8("logical_drive_number", "Logical Drive Number")
2604 LogicalLockThreshold            = uint8("logical_lock_threshold", "LogicalLockThreshold")
2605 LogicalRecordName               = nstring8("logical_record_name", "Logical Record Name")
2606 LoginKey                        = bytes("login_key", "Login Key", 8)
2607 LogLockType                     = uint8("log_lock_type", "Log Lock Type")
2608 LogTtlRxPkts                    = uint32("log_ttl_rx_pkts", "Total Received Packets")
2609 LogTtlTxPkts                    = uint32("log_ttl_tx_pkts", "Total Transmitted Packets")
2610 LongName                        = fw_string("long_name", "Long Name", 32)
2611 LRUBlockWasDirty                = uint16("lru_block_was_dirty", "LRU Block Was Dirty")
2612
2613 MacAttr                         = bitfield16("mac_attr", "Attributes", [
2614         bf_boolean16(0x0001, "mac_attr_smode1", "Search Mode"),
2615         bf_boolean16(0x0002, "mac_attr_smode2", "Search Mode"),
2616         bf_boolean16(0x0004, "mac_attr_smode3", "Search Mode"),
2617         bf_boolean16(0x0010, "mac_attr_transaction", "Transaction"),
2618         bf_boolean16(0x0020, "mac_attr_index", "Index"),
2619         bf_boolean16(0x0040, "mac_attr_r_audit", "Read Audit"),
2620         bf_boolean16(0x0080, "mac_attr_w_audit", "Write Audit"),
2621         bf_boolean16(0x0100, "mac_attr_r_only", "Read Only"),
2622         bf_boolean16(0x0200, "mac_attr_hidden", "Hidden"),
2623         bf_boolean16(0x0400, "mac_attr_system", "System"),
2624         bf_boolean16(0x0800, "mac_attr_execute_only", "Execute Only"),
2625         bf_boolean16(0x1000, "mac_attr_subdirectory", "Subdirectory"),
2626         bf_boolean16(0x2000, "mac_attr_archive", "Archive"),
2627         bf_boolean16(0x8000, "mac_attr_share", "Shareable File"),
2628 ])
2629 MACBackupDate                   = uint16("mac_backup_date", "Mac Backup Date")
2630 MACBackupDate.NWDate()
2631 MACBackupTime                   = uint16("mac_backup_time", "Mac Backup Time")
2632 MACBackupTime.NWTime()
2633 MacBaseDirectoryID              = uint32("mac_base_directory_id", "Mac Base Directory ID", BE)
2634 MacBaseDirectoryID.Display("BASE_HEX")
2635 MACCreateDate                   = uint16("mac_create_date", "Mac Create Date")
2636 MACCreateDate.NWDate()
2637 MACCreateTime                   = uint16("mac_create_time", "Mac Create Time")
2638 MACCreateTime.NWTime()
2639 MacDestinationBaseID            = uint32("mac_destination_base_id", "Mac Destination Base ID")
2640 MacDestinationBaseID.Display("BASE_HEX")
2641 MacFinderInfo                   = bytes("mac_finder_info", "Mac Finder Information", 32)
2642 MacLastSeenID                   = uint32("mac_last_seen_id", "Mac Last Seen ID")
2643 MacLastSeenID.Display("BASE_HEX")
2644 MacSourceBaseID                 = uint32("mac_source_base_id", "Mac Source Base ID")
2645 MacSourceBaseID.Display("BASE_HEX")
2646 MajorVersion                    = uint32("major_version", "Major Version")
2647 MaxBytes                        = uint16("max_bytes", "Maximum Number of Bytes")
2648 MaxDataStreams                  = uint32("max_data_streams", "Maximum Data Streams")
2649 MaxDirDepth                     = uint32("max_dir_depth", "Maximum Directory Depth")
2650 MaximumSpace                    = uint16("max_space", "Maximum Space")
2651 MaxNumOfConn                    = uint32("max_num_of_conn", "Maximum Number of Connections")
2652 MaxNumOfLANS                    = uint32("max_num_of_lans", "Maximum Number Of LAN's")
2653 MaxNumOfMedias                  = uint32("max_num_of_medias", "Maximum Number Of Media's")
2654 MaxNumOfNmeSps                  = uint32("max_num_of_nme_sps", "Maximum Number Of Name Spaces")
2655 MaxNumOfSpoolPr                 = uint32("max_num_of_spool_pr", "Maximum Number Of Spool Printers")
2656 MaxNumOfStacks                  = uint32("max_num_of_stacks", "Maximum Number Of Stacks")
2657 MaxNumOfUsers                   = uint32("max_num_of_users", "Maximum Number Of Users")
2658 MaxNumOfVol                     = uint32("max_num_of_vol", "Maximum Number of Volumes")
2659 MaxSpace                        = uint32("maxspace", "Maximum Space")
2660 MaxUsedDynamicSpace             = uint32("max_used_dynamic_space", "Max Used Dynamic Space")
2661 MediaList                       = uint32("media_list", "Media List")
2662 MediaListCount                  = uint32("media_list_count", "Media List Count")
2663 MediaName                       = nstring8("media_name", "Media Name")
2664 MediaNumber                     = uint32("media_number", "Media Number")
2665 MediaObjectType                 = val_string8("media_object_type", "Object Type", [
2666         [ 0x00, "Adapter" ],
2667         [ 0x01, "Changer" ],
2668         [ 0x02, "Removable Device" ],
2669         [ 0x03, "Device" ],
2670         [ 0x04, "Removable Media" ],
2671         [ 0x05, "Partition" ],
2672         [ 0x06, "Slot" ],
2673         [ 0x07, "Hotfix" ],
2674         [ 0x08, "Mirror" ],
2675         [ 0x09, "Parity" ],
2676         [ 0x0a, "Volume Segment" ],
2677         [ 0x0b, "Volume" ],
2678         [ 0x0c, "Clone" ],
2679         [ 0x0d, "Fixed Media" ],
2680         [ 0x0e, "Unknown" ],
2681 ])
2682 MemberName                      = nstring8("member_name", "Member Name")
2683 MemberType                      = val_string16("member_type", "Member Type", [
2684         [ 0x0000,       "Unknown" ],
2685         [ 0x0001,       "User" ],
2686         [ 0x0002,       "User group" ],
2687         [ 0x0003,       "Print queue" ],
2688         [ 0x0004,       "NetWare file server" ],
2689         [ 0x0005,       "Job server" ],
2690         [ 0x0006,       "Gateway" ],
2691         [ 0x0007,       "Print server" ],
2692         [ 0x0008,       "Archive queue" ],
2693         [ 0x0009,       "Archive server" ],
2694         [ 0x000a,       "Job queue" ],
2695         [ 0x000b,       "Administration" ],
2696         [ 0x0021,       "NAS SNA gateway" ],
2697         [ 0x0026,       "Remote bridge server" ],
2698         [ 0x0027,       "TCP/IP gateway" ],
2699 ])
2700 MessageLanguage                 = uint32("message_language", "NLM Language")
2701 MigratedFiles                   = uint32("migrated_files", "Migrated Files")
2702 MigratedSectors                 = uint32("migrated_sectors", "Migrated Sectors")
2703 MinorVersion                    = uint32("minor_version", "Minor Version")
2704 Minute                          = uint8("s_minute", "Minutes")
2705 MixedModePathFlag               = uint8("mixed_mode_path_flag", "Mixed Mode Path Flag")
2706 ModifiedDate                    = uint16("modified_date", "Modified Date")
2707 ModifiedDate.NWDate()
2708 ModifiedTime                    = uint16("modified_time", "Modified Time")
2709 ModifiedTime.NWTime()
2710 ModifierID                      = uint32("modifier_id", "Modifier ID", BE)
2711 ModifierID.Display("BASE_HEX")
2712 ModifyDOSInfoMask               = bitfield16("modify_dos_info_mask", "Modify DOS Info Mask", [
2713         bf_boolean16(0x0002, "modify_dos_read", "Attributes"),
2714         bf_boolean16(0x0004, "modify_dos_write", "Creation Date"),
2715         bf_boolean16(0x0008, "modify_dos_open", "Creation Time"),
2716         bf_boolean16(0x0010, "modify_dos_create", "Creator ID"),
2717         bf_boolean16(0x0020, "modify_dos_delete", "Archive Date"),
2718         bf_boolean16(0x0040, "modify_dos_parent", "Archive Time"),
2719         bf_boolean16(0x0080, "modify_dos_search", "Archiver ID"),
2720         bf_boolean16(0x0100, "modify_dos_mdate", "Modify Date"),
2721         bf_boolean16(0x0200, "modify_dos_mtime", "Modify Time"),
2722         bf_boolean16(0x0400, "modify_dos_mid", "Modifier ID"),
2723         bf_boolean16(0x0800, "modify_dos_laccess", "Last Access"),
2724         bf_boolean16(0x1000, "modify_dos_inheritance", "Inheritance"),
2725         bf_boolean16(0x2000, "modify_dos_max_space", "Maximum Space"),
2726 ])
2727 Month                           = val_string8("s_month", "Month", [
2728         [ 0x01, "January"],
2729         [ 0x02, "Febuary"],
2730         [ 0x03, "March"],
2731         [ 0x04, "April"],
2732         [ 0x05, "May"],
2733         [ 0x06, "June"],
2734         [ 0x07, "July"],
2735         [ 0x08, "August"],
2736         [ 0x09, "September"],
2737         [ 0x0a, "October"],
2738         [ 0x0b, "November"],
2739         [ 0x0c, "December"],
2740 ])
2741
2742 MoreFlag                        = val_string8("more_flag", "More Flag", [
2743         [ 0x00, "No More Segments/Entries Available" ],
2744         [ 0x01, "More Segments/Entries Available" ],
2745         [ 0xff, "More Segments/Entries Available" ],
2746 ])
2747 MoreProperties                  = val_string8("more_properties", "More Properties", [
2748         [ 0x00, "No More Properties Available" ],
2749         [ 0x01, "No More Properties Available" ],
2750         [ 0xff, "More Properties Available" ],
2751 ])
2752
2753 Name                            = nstring8("name", "Name")
2754 Name12                          = fw_string("name12", "Name", 12)
2755 NameLen                         = uint8("name_len", "Name Space Length")
2756 NameLength                      = uint8("name_length", "Name Length")
2757 NameList                        = uint32("name_list", "Name List")
2758 #
2759 # XXX - should this value be used to interpret the characters in names,
2760 # search patterns, and the like?
2761 #
2762 # We need to handle character sets better, e.g. translating strings
2763 # from whatever character set they are in the packet (DOS/Windows code
2764 # pages, ISO character sets, UNIX EUC character sets, UTF-8, UCS-2/Unicode,
2765 # Mac character sets, etc.) into UCS-4 or UTF-8 and storing them as such
2766 # in the protocol tree, and displaying them as best we can.
2767 #
2768 NameSpace                       = val_string8("name_space", "Name Space", [
2769         [ 0x00, "DOS" ],
2770         [ 0x01, "MAC" ],
2771         [ 0x02, "NFS" ],
2772         [ 0x03, "FTAM" ],
2773         [ 0x04, "OS/2, Long" ],
2774 ])
2775 NamesSpaceInfoMask                      = bitfield16("ns_info_mask", "Names Space Info Mask", [
2776         bf_boolean16(0x0001, "ns_info_mask_modify", "Modify Name"),
2777         bf_boolean16(0x0002, "ns_info_mask_fatt", "File Attributes"),
2778         bf_boolean16(0x0004, "ns_info_mask_cdate", "Creation Date"),
2779         bf_boolean16(0x0008, "ns_info_mask_ctime", "Creation Time"),
2780         bf_boolean16(0x0010, "ns_info_mask_owner", "Owner ID"),
2781         bf_boolean16(0x0020, "ns_info_mask_adate", "Archive Date"),
2782         bf_boolean16(0x0040, "ns_info_mask_atime", "Archive Time"),
2783         bf_boolean16(0x0080, "ns_info_mask_aid", "Archiver ID"),
2784         bf_boolean16(0x0100, "ns_info_mask_udate", "Update Date"),
2785         bf_boolean16(0x0200, "ns_info_mask_utime", "Update Time"),
2786         bf_boolean16(0x0400, "ns_info_mask_uid", "Update ID"),
2787         bf_boolean16(0x0800, "ns_info_mask_acc_date", "Access Date"),
2788         bf_boolean16(0x1000, "ns_info_mask_max_acc_mask", "Inheritance"),
2789         bf_boolean16(0x2000, "ns_info_mask_max_space", "Maximum Space"),
2790 ])
2791 NameSpaceName                   = nstring8("name_space_name", "Name Space Name")
2792 nameType                        = uint32("name_type", "nameType")
2793 NCPdataSize                     = uint32("ncp_data_size", "NCP Data Size")
2794 NCPextensionMajorVersion        = uint8("ncp_extension_major_version", "NCP Extension Major Version")
2795 NCPextensionMinorVersion        = uint8("ncp_extension_minor_version", "NCP Extension Minor Version")
2796 NCPextensionName                = nstring8("ncp_extension_name", "NCP Extension Name")
2797 NCPextensionNumber              = uint32("ncp_extension_number", "NCP Extension Number")
2798 NCPextensionNumber.Display("BASE_HEX")
2799 NCPExtensionNumbers             = uint32("ncp_extension_numbers", "NCP Extension Numbers")
2800 NCPextensionRevisionNumber      = uint8("ncp_extension_revision_number", "NCP Extension Revision Number")
2801 NCPPeakStaInUse                 = uint32("ncp_peak_sta_in_use", "Peak Number of Connections since Server was brought up")
2802 NCPStaInUseCnt                  = uint32("ncp_sta_in_use", "Number of Workstations Connected to Server")
2803 NDSRequestFlags                 = bitfield16("nds_request_flags", "NDS Request Flags", [
2804         bf_boolean16(0x0001, "nds_request_flags_output", "Output Fields"),
2805         bf_boolean16(0x0002, "nds_request_flags_no_such_entry", "No Such Entry"),
2806         bf_boolean16(0x0004, "nds_request_flags_local_entry", "Local Entry"),
2807         bf_boolean16(0x0008, "nds_request_flags_type_ref", "Type Referral"),
2808         bf_boolean16(0x0010, "nds_request_flags_alias_ref", "Alias Referral"),
2809         bf_boolean16(0x0020, "nds_request_flags_req_cnt", "Request Count"),
2810         bf_boolean16(0x0040, "nds_request_flags_req_data_size", "Request Data Size"),
2811         bf_boolean16(0x0080, "nds_request_flags_reply_data_size", "Reply Data Size"),
2812         bf_boolean16(0x0100, "nds_request_flags_trans_ref", "Transport Referral"),
2813         bf_boolean16(0x0200, "nds_request_flags_trans_ref2", "Transport Referral"),
2814         bf_boolean16(0x0400, "nds_request_flags_up_ref", "Up Referral"),
2815         bf_boolean16(0x0800, "nds_request_flags_dn_ref", "Down Referral"),
2816 ])
2817 NDSStatus                       = uint32("nds_status", "NDS Status")
2818 NetBIOSBroadcastWasPropogated   = uint32("netbios_broadcast_was_propogated", "NetBIOS Broadcast Was Propogated")
2819 NetIDNumber                     = uint32("net_id_number", "Net ID Number")
2820 NetIDNumber.Display("BASE_HEX")
2821 NetAddress                      = nbytes32("address", "Address")
2822 NetStatus                       = uint16("net_status", "Network Status")
2823 NetWareAccessHandle             = bytes("netware_access_handle", "NetWare Access Handle", 6)
2824 NetworkAddress                  = uint32("network_address", "Network Address")
2825 NetworkAddress.Display("BASE_HEX")
2826 NetworkNodeAddress              = bytes("network_node_address", "Network Node Address", 6)
2827 NetworkNumber                   = uint32("network_number", "Network Number")
2828 NetworkNumber.Display("BASE_HEX")
2829 #
2830 # XXX - this should have the "ipx_socket_vals" value_string table
2831 # from "packet-ipx.c".
2832 #
2833 NetworkSocket                   = uint16("network_socket", "Network Socket")
2834 NetworkSocket.Display("BASE_HEX")
2835 NewAccessRights                 = bitfield16("new_access_rights_mask", "New Access Rights", [
2836         bf_boolean16(0x0001, "new_access_rights_read", "Read"),
2837         bf_boolean16(0x0002, "new_access_rights_write", "Write"),
2838         bf_boolean16(0x0004, "new_access_rights_open", "Open"),
2839         bf_boolean16(0x0008, "new_access_rights_create", "Create"),
2840         bf_boolean16(0x0010, "new_access_rights_delete", "Delete"),
2841         bf_boolean16(0x0020, "new_access_rights_parental", "Parental"),
2842         bf_boolean16(0x0040, "new_access_rights_search", "Search"),
2843         bf_boolean16(0x0080, "new_access_rights_modify", "Modify"),
2844         bf_boolean16(0x0100, "new_access_rights_supervisor", "Supervisor"),
2845 ])
2846 NewDirectoryID                  = uint32("new_directory_id", "New Directory ID", BE)
2847 NewDirectoryID.Display("BASE_HEX")
2848 NewEAHandle                     = uint32("new_ea_handle", "New EA Handle")
2849 NewEAHandle.Display("BASE_HEX")
2850 NewFileName                     = fw_string("new_file_name", "New File Name", 14)
2851 NewFileNameLen                  = nstring8("new_file_name_len", "New File Name")
2852 NewFileSize                     = uint32("new_file_size", "New File Size")
2853 NewPassword                     = nstring8("new_password", "New Password")
2854 NewPath                         = nstring8("new_path", "New Path")
2855 NewPosition                     = uint8("new_position", "New Position")
2856 NewObjectName                   = nstring8("new_object_name", "New Object Name")
2857 NextCntBlock                    = uint32("next_cnt_block", "Next Count Block")
2858 NextHugeStateInfo               = bytes("next_huge_state_info", "Next Huge State Info", 16)
2859 nextLimbScanNum                 = uint32("next_limb_scan_num", "Next Limb Scan Number")
2860 NextObjectID                    = uint32("next_object_id", "Next Object ID", BE)
2861 NextObjectID.Display("BASE_HEX")
2862 NextRecord                      = uint32("next_record", "Next Record")
2863 NextRequestRecord               = uint16("next_request_record", "Next Request Record")
2864 NextSearchIndex                 = uint16("next_search_index", "Next Search Index")
2865 NextSearchNumber                = uint16("next_search_number", "Next Search Number")
2866 NextSearchNum                   = uint32("nxt_search_num", "Next Search Number")
2867 nextStartingNumber              = uint32("next_starting_number", "Next Starting Number")
2868 NextTrusteeEntry                = uint32("next_trustee_entry", "Next Trustee Entry")
2869 NextVolumeNumber                = uint32("next_volume_number", "Next Volume Number")
2870 NLMBuffer                       = nstring8("nlm_buffer", "Buffer")
2871 NLMcount                        = uint32("nlm_count", "NLM Count")
2872 NLMFlags                        = bitfield8("nlm_flags", "Flags", [
2873         bf_boolean8(0x01, "nlm_flags_reentrant", "ReEntrant"),
2874         bf_boolean8(0x02, "nlm_flags_multiple", "Can Load Multiple Times"),
2875         bf_boolean8(0x04, "nlm_flags_synchronize", "Synchronize Start"),
2876         bf_boolean8(0x08, "nlm_flags_pseudo", "PseudoPreemption"),
2877 ])
2878 NLMLoadOptions                  = uint32("nlm_load_options", "NLM Load Options")
2879 NLMName                         = stringz("nlm_name_stringz", "NLM Name")
2880 NLMNumber                       = uint32("nlm_number", "NLM Number")
2881 NLMNumbers                      = uint32("nlm_numbers", "NLM Numbers")
2882 NLMsInList                      = uint32("nlms_in_list", "NLM's in List")
2883 NLMStartNumber                  = uint32("nlm_start_num", "NLM Start Number")
2884 NLMType                         = val_string8("nlm_type", "NLM Type", [
2885         [ 0x00, "Generic NLM (.NLM)" ],
2886         [ 0x01, "LAN Driver (.LAN)" ],
2887         [ 0x02, "Disk Driver (.DSK)" ],
2888         [ 0x03, "Name Space Support Module (.NAM)" ],
2889         [ 0x04, "Utility or Support Program (.NLM)" ],
2890         [ 0x05, "Mirrored Server Link (.MSL)" ],
2891         [ 0x06, "OS NLM (.NLM)" ],
2892         [ 0x07, "Paged High OS NLM (.NLM)" ],
2893         [ 0x08, "Host Adapter Module (.HAM)" ],
2894         [ 0x09, "Custom Device Module (.CDM)" ],
2895         [ 0x0a, "File System Engine (.NLM)" ],
2896         [ 0x0b, "Real Mode NLM (.NLM)" ],
2897         [ 0x0c, "Hidden NLM (.NLM)" ],
2898         [ 0x15, "NICI Support (.NLM)" ],
2899         [ 0x16, "NICI Support (.NLM)" ],
2900         [ 0x17, "Cryptography (.NLM)" ],
2901         [ 0x18, "Encryption (.NLM)" ],
2902         [ 0x19, "NICI Support (.NLM)" ],
2903         [ 0x1c, "NICI Support (.NLM)" ],
2904 ])
2905 nodeFlags                       = uint32("node_flags", "Node Flags")
2906 nodeFlags.Display("BASE_HEX")
2907 NoMoreMemAvlCnt                 = uint32("no_more_mem_avail", "No More Memory Available Count")
2908 NonDedFlag                      = boolean8("non_ded_flag", "Non Dedicated Flag")
2909 NonFreeableAvailableSubAllocSectors = uint32("non_freeable_avail_sub_alloc_sectors", "Non Freeable Available Sub Alloc Sectors")
2910 NonFreeableLimboSectors         = uint32("non_freeable_limbo_sectors", "Non Freeable Limbo Sectors")
2911 NotUsableSubAllocSectors        = uint32("not_usable_sub_alloc_sectors", "Not Usable Sub Alloc Sectors")
2912 NotYetPurgeableBlocks           = uint32("not_yet_purgeable_blocks", "Not Yet Purgeable Blocks")
2913 NSInfoBitMask                   = uint32("ns_info_bit_mask", "Name Space Info Bit Mask")
2914 NSSOAllInFlags                  = bitfield32("nsso_all_in_flags", "SecretStore All Input Flags",[
2915         bf_boolean32(0x00000010, "nsso_all_unicode", "Unicode Data"),
2916         bf_boolean32(0x00000080, "nsso_set_tree", "Set Tree"),
2917         bf_boolean32(0x00000200, "nsso_destroy_ctx", "Destroy Context"),
2918 ])
2919 NSSOGetServiceInFlags           = bitfield32("nsso_get_svc_in_flags", "SecretStore Get Service Flags",[
2920         bf_boolean32(0x00000100, "nsso_get_ctx", "Get Context"),
2921 ])
2922 NSSOReadInFlags                 = bitfield32("nsso_read_in_flags", "SecretStore Read Flags",[
2923         bf_boolean32(0x00000001, "nsso_rw_enh_prot", "Read/Write Enhanced Protection"),
2924         bf_boolean32(0x00000008, "nsso_repair", "Repair SecretStore"),
2925 ])
2926 NSSOReadOrUnlockInFlags         = bitfield32("nsso_read_or_unlock_in_flags", "SecretStore Read or Unlock Flags",[
2927         bf_boolean32(0x00000004, "nsso_ep_master_pwd", "Master Password used instead of ENH Password"),
2928 ])
2929 NSSOUnlockInFlags               = bitfield32("nsso_unlock_in_flags", "SecretStore Unlock Flags",[
2930         bf_boolean32(0x00000004, "nsso_rmv_lock", "Remove Lock from Store"),
2931 ])
2932 NSSOWriteInFlags                = bitfield32("nsso_write_in_flags", "SecretStore Write Flags",[
2933         bf_boolean32(0x00000001, "nsso_enh_prot", "Enhanced Protection"),
2934         bf_boolean32(0x00000002, "nsso_create_id", "Create ID"),
2935         bf_boolean32(0x00000040, "nsso_ep_pwd_used", "Enhanced Protection Password Used"),
2936 ])
2937 NSSOContextOutFlags             = bitfield32("nsso_cts_out_flags", "Type of Context",[
2938         bf_boolean32(0x00000001, "nsso_ds_ctx", "DSAPI Context"),
2939         bf_boolean32(0x00000080, "nsso_ldap_ctx", "LDAP Context"),
2940         bf_boolean32(0x00000200, "nsso_dc_ctx", "Reserved"),
2941 ])
2942 NSSOGetServiceOutFlags          = bitfield32("nsso_get_svc_out_flags", "SecretStore Status Flags",[
2943         bf_boolean32(0x00400000, "nsso_mstr_pwd", "Master Password Present"),
2944 ])
2945 NSSOGetServiceReadOutFlags      = bitfield32("nsso_get_svc_read_out_flags", "SecretStore Status Flags",[
2946         bf_boolean32(0x00800000, "nsso_mp_disabled", "Master Password Disabled"),
2947 ])
2948 NSSOReadOutFlags                = bitfield32("nsso_read_out_flags", "SecretStore Read Flags",[
2949         bf_boolean32(0x00010000, "nsso_secret_locked", "Enhanced Protection Lock on Secret"),
2950         bf_boolean32(0x00020000, "nsso_secret_not_init", "Secret Not Yet Initialized"),
2951         bf_boolean32(0x00040000, "nsso_secret_marked", "Secret Marked for Enhanced Protection"),
2952         bf_boolean32(0x00080000, "nsso_secret_not_sync", "Secret Not Yet Synchronized in NDS"),
2953         bf_boolean32(0x00200000, "nsso_secret_enh_pwd", "Enhanced Protection Password on Secret"),
2954 ])
2955 NSSOReadOutStatFlags            = bitfield32("nsso_read_out_stat_flags", "SecretStore Read Status Flags",[
2956         bf_boolean32(0x00100000, "nsso_admin_mod", "Admin Modified Secret Last"),
2957 ])
2958 NSSOVerb                        = val_string8("nsso_verb", "SecretStore Verb", [
2959         [ 0x00, "Query Server" ],
2960         [ 0x01, "Read App Secrets" ],
2961         [ 0x02, "Write App Secrets" ],
2962         [ 0x03, "Add Secret ID" ],
2963         [ 0x04, "Remove Secret ID" ],
2964         [ 0x05, "Remove SecretStore" ],
2965         [ 0x06, "Enumerate SecretID's" ],
2966         [ 0x07, "Unlock Store" ],
2967         [ 0x08, "Set Master Password" ],
2968         [ 0x09, "Get Service Information" ],
2969 ])
2970 NSSpecificInfo                  = fw_string("ns_specific_info", "Name Space Specific Info", 512)
2971 NumberOfAllocs                  = uint32("num_of_allocs", "Number of Allocations")
2972 NumberOfAttributes              = uint32("number_of_attributes", "Number of Attributes")
2973 NumberOfCPUs                    = uint32("number_of_cpus", "Number of CPU's")
2974 NumberOfDataStreams             = uint16("number_of_data_streams", "Number of Data Streams")
2975 NumberOfDynamicMemoryAreas      = uint16("number_of_dynamic_memory_areas", "Number Of Dynamic Memory Areas")
2976 NumberOfEntries                 = uint8("number_of_entries", "Number of Entries")
2977 NumberOfLocks                   = uint8("number_of_locks", "Number of Locks")
2978 NumberOfMinutesToDelay          = uint32("number_of_minutes_to_delay", "Number of Minutes to Delay")
2979 NumberOfNCPExtensions           = uint32("number_of_ncp_extensions", "Number Of NCP Extensions")
2980 NumberOfNSLoaded                = uint16("number_of_ns_loaded", "Number Of Name Spaces Loaded")
2981 NumberOfProtocols               = uint8("number_of_protocols", "Number of Protocols")
2982 NumberOfRecords                 = uint16("number_of_records", "Number of Records")
2983 NumberOfReferencedPublics       = uint32("num_of_ref_publics", "Number of Referenced Public Symbols")
2984 NumberOfSemaphores              = uint16("number_of_semaphores", "Number Of Semaphores")
2985 NumberOfServiceProcesses        = uint8("number_of_service_processes", "Number Of Service Processes")
2986 NumberOfSetCategories           = uint32("number_of_set_categories", "Number Of Set Categories")
2987 NumberOfSMs                     = uint32("number_of_sms", "Number Of Storage Medias")
2988 NumberOfStations                = uint8("number_of_stations", "Number of Stations")
2989 NumBytes                        = uint16("num_bytes", "Number of Bytes")
2990 NumOfCCinPkt                    = uint32("num_of_cc_in_pkt", "Number of Custom Counters in Packet")
2991 NumOfChecks                     = uint32("num_of_checks", "Number of Checks")
2992 NumOfEntries                    = uint32("num_of_entries", "Number of Entries")
2993 NumOfFilesMigrated              = uint32("num_of_files_migrated", "Number Of Files Migrated")
2994 NumOfGarbageColl                = uint32("num_of_garb_coll", "Number of Garbage Collections")
2995 NumOfNCPReqs                    = uint32("num_of_ncp_reqs", "Number of NCP Requests since Server was brought up")
2996 NumOfSegments                   = uint32("num_of_segments", "Number of Segments")
2997
2998 ObjectCount                     = uint32("object_count", "Object Count")
2999 ObjectFlags                     = val_string8("object_flags", "Object Flags", [
3000         [ 0x00, "Dynamic object" ],
3001         [ 0x01, "Static object" ],
3002 ])
3003 ObjectHasProperties             = val_string8("object_has_properites", "Object Has Properties", [
3004         [ 0x00, "No properties" ],
3005         [ 0xff, "One or more properties" ],
3006 ])
3007 ObjectID                        = uint32("object_id", "Object ID", BE)
3008 ObjectID.Display('BASE_HEX')
3009 ObjectIDCount                   = uint16("object_id_count", "Object ID Count")
3010 ObjectIDInfo                    = uint32("object_id_info", "Object Information")
3011 ObjectInfoReturnCount           = uint32("object_info_rtn_count", "Object Information Count")
3012 ObjectName                      = nstring8("object_name", "Object Name")
3013 ObjectNameLen                   = fw_string("object_name_len", "Object Name", 48)
3014 ObjectNameStringz               = stringz("object_name_stringz", "Object Name")
3015 ObjectNumber                    = uint32("object_number", "Object Number")
3016 ObjectSecurity                  = val_string8("object_security", "Object Security", [
3017         [ 0x00, "Object Read (Anyone) / Object Write (Anyone)" ],
3018         [ 0x01, "Object Read (Logged in) / Object Write (Anyone)" ],
3019         [ 0x02, "Object Read (Logged in as Object) / Object Write (Anyone)" ],
3020         [ 0x03, "Object Read (Supervisor) / Object Write (Anyone)" ],
3021         [ 0x04, "Object Read (Operating System Only) / Object Write (Anyone)" ],
3022         [ 0x10, "Object Read (Anyone) / Object Write (Logged in)" ],
3023         [ 0x11, "Object Read (Logged in) / Object Write (Logged in)" ],
3024         [ 0x12, "Object Read (Logged in as Object) / Object Write (Logged in)" ],
3025         [ 0x13, "Object Read (Supervisor) / Object Write (Logged in)" ],
3026         [ 0x14, "Object Read (Operating System Only) / Object Write (Logged in)" ],
3027         [ 0x20, "Object Read (Anyone) / Object Write (Logged in as Object)" ],
3028         [ 0x21, "Object Read (Logged in) / Object Write (Logged in as Object)" ],
3029         [ 0x22, "Object Read (Logged in as Object) / Object Write (Logged in as Object)" ],
3030         [ 0x23, "Object Read (Supervisor) / Object Write (Logged in as Object)" ],
3031         [ 0x24, "Object Read (Operating System Only) / Object Write (Logged in as Object)" ],
3032         [ 0x30, "Object Read (Anyone) / Object Write (Supervisor)" ],
3033         [ 0x31, "Object Read (Logged in) / Object Write (Supervisor)" ],
3034         [ 0x32, "Object Read (Logged in as Object) / Object Write (Supervisor)" ],
3035         [ 0x33, "Object Read (Supervisor) / Object Write (Supervisor)" ],
3036         [ 0x34, "Object Read (Operating System Only) / Object Write (Supervisor)" ],
3037         [ 0x40, "Object Read (Anyone) / Object Write (Operating System Only)" ],
3038         [ 0x41, "Object Read (Logged in) / Object Write (Operating System Only)" ],
3039         [ 0x42, "Object Read (Logged in as Object) / Object Write (Operating System Only)" ],
3040         [ 0x43, "Object Read (Supervisor) / Object Write (Operating System Only)" ],
3041         [ 0x44, "Object Read (Operating System Only) / Object Write (Operating System Only)" ],
3042 ])
3043 #
3044 # XXX - should this use the "server_vals[]" value_string array from
3045 # "packet-ipx.c"?
3046 #
3047 # XXX - should this list be merged with that list?  There are some
3048 # oddities, e.g. this list has 0x03f5 for "Microsoft SQL Server", but
3049 # the list from "packet-ipx.c" has 0xf503 for that - is that just
3050 # byte-order confusion?
3051 #
3052 ObjectType                      = val_string16("object_type", "Object Type", [
3053         [ 0x0000,       "Unknown" ],
3054         [ 0x0001,       "User" ],
3055         [ 0x0002,       "User group" ],
3056         [ 0x0003,       "Print queue" ],
3057         [ 0x0004,       "NetWare file server" ],
3058         [ 0x0005,       "Job server" ],
3059         [ 0x0006,       "Gateway" ],
3060         [ 0x0007,       "Print server" ],
3061         [ 0x0008,       "Archive queue" ],
3062         [ 0x0009,       "Archive server" ],
3063         [ 0x000a,       "Job queue" ],
3064         [ 0x000b,       "Administration" ],
3065         [ 0x0021,       "NAS SNA gateway" ],
3066         [ 0x0026,       "Remote bridge server" ],
3067         [ 0x0027,       "TCP/IP gateway" ],
3068         [ 0x0047,       "Novell Print Server" ],
3069         [ 0x004b,       "Btrieve Server" ],
3070         [ 0x004c,       "NetWare SQL Server" ],
3071         [ 0x0064,       "ARCserve" ],
3072         [ 0x0066,       "ARCserve 3.0" ],
3073         [ 0x0076,       "NetWare SQL" ],
3074         [ 0x00a0,       "Gupta SQL Base Server" ],
3075         [ 0x00a1,       "Powerchute" ],
3076         [ 0x0107,       "NetWare Remote Console" ],
3077         [ 0x01cb,       "Shiva NetModem/E" ],
3078         [ 0x01cc,       "Shiva LanRover/E" ],
3079         [ 0x01cd,       "Shiva LanRover/T" ],
3080         [ 0x01d8,       "Castelle FAXPress Server" ],
3081         [ 0x01da,       "Castelle Print Server" ],
3082         [ 0x01dc,       "Castelle Fax Server" ],
3083         [ 0x0200,       "Novell SQL Server" ],
3084         [ 0x023a,       "NetWare Lanalyzer Agent" ],
3085         [ 0x023c,       "DOS Target Service Agent" ],
3086         [ 0x023f,       "NetWare Server Target Service Agent" ],
3087         [ 0x024f,       "Appletalk Remote Access Service" ],
3088         [ 0x0263,       "NetWare Management Agent" ],
3089         [ 0x0264,       "Global MHS" ],
3090         [ 0x0265,       "SNMP" ],
3091         [ 0x026a,       "NetWare Management/NMS Console" ],
3092         [ 0x026b,       "NetWare Time Synchronization" ],
3093         [ 0x0273,       "Nest Device" ],
3094         [ 0x0274,       "GroupWise Message Multiple Servers" ],
3095         [ 0x0278,       "NDS Replica Server" ],
3096         [ 0x0282,       "NDPS Service Registry Service" ],
3097         [ 0x028a,       "MPR/IPX Address Mapping Gateway" ],
3098         [ 0x028b,       "ManageWise" ],
3099         [ 0x0293,       "NetWare 6" ],
3100         [ 0x030c,       "HP JetDirect" ],
3101         [ 0x0328,       "Watcom SQL Server" ],
3102         [ 0x0355,       "Backup Exec" ],
3103         [ 0x039b,       "Lotus Notes" ],
3104         [ 0x03e1,       "Univel Server" ],
3105         [ 0x03f5,       "Microsoft SQL Server" ],
3106         [ 0x055e,       "Lexmark Print Server" ],
3107         [ 0x0640,       "Microsoft Gateway Services for NetWare" ],
3108         [ 0x064e,       "Microsoft Internet Information Server" ],
3109         [ 0x077b,       "Advantage Database Server" ],
3110         [ 0x07a7,       "Backup Exec Job Queue" ],
3111         [ 0x07a8,       "Backup Exec Job Manager" ],
3112         [ 0x07a9,       "Backup Exec Job Service" ],
3113         [ 0x5555,       "Site Lock" ],
3114         [ 0x8202,       "NDPS Broker" ],
3115 ])
3116 OCRetFlags                      = val_string8("o_c_ret_flags", "Open Create Return Flags", [
3117         [ 0x00, "No CallBack has been registered (No Op-Lock)" ],
3118         [ 0x01, "Request has been registered for CallBack (Op-Lock)" ],
3119 ])
3120 OldestDeletedFileAgeInTicks     = uint32("oldest_deleted_file_age_in_ticks", "Oldest Deleted File Age in Ticks")
3121 OldFileName                     = bytes("old_file_name", "Old File Name", 15)
3122 OldFileSize                     = uint32("old_file_size", "Old File Size")
3123 OpenCount                       = uint16("open_count", "Open Count")
3124 OpenCreateAction                = bitfield8("open_create_action", "Open Create Action", [
3125         bf_boolean8(0x01, "open_create_action_opened", "Opened"),
3126         bf_boolean8(0x02, "open_create_action_created", "Created"),
3127         bf_boolean8(0x04, "open_create_action_replaced", "Replaced"),
3128         bf_boolean8(0x08, "open_create_action_compressed", "Compressed"),
3129         bf_boolean8(0x80, "open_create_action_read_only", "Read Only"),
3130 ])
3131 OpenCreateMode                  = bitfield8("open_create_mode", "Open Create Mode", [
3132         bf_boolean8(0x01, "open_create_mode_open", "Open existing file (file must exist)"),
3133         bf_boolean8(0x02, "open_create_mode_replace", "Replace existing file"),
3134         bf_boolean8(0x08, "open_create_mode_create", "Create new file or subdirectory (file or subdirectory cannot exist)"),
3135         bf_boolean8(0x80, "open_create_mode_oplock", "Open Callback (Op-Lock)"),
3136 ])
3137 OpenForReadCount                = uint16("open_for_read_count", "Open For Read Count")
3138 OpenForWriteCount               = uint16("open_for_write_count", "Open For Write Count")
3139 OpenRights                      = bitfield8("open_rights", "Open Rights", [
3140         bf_boolean8(0x01, "open_rights_read_only", "Read Only"),
3141         bf_boolean8(0x02, "open_rights_write_only", "Write Only"),
3142         bf_boolean8(0x04, "open_rights_deny_read", "Deny Read"),
3143         bf_boolean8(0x08, "open_rights_deny_write", "Deny Write"),
3144         bf_boolean8(0x10, "open_rights_compat", "Compatibility"),
3145         bf_boolean8(0x40, "open_rights_write_thru", "Write Through"),
3146 ])
3147 OptionNumber                    = uint8("option_number", "Option Number")
3148 originalSize                    = uint32("original_size", "Original Size")
3149 OSLanguageID                    = uint8("os_language_id", "OS Language ID")
3150 OSMajorVersion                  = uint8("os_major_version", "OS Major Version")
3151 OSMinorVersion                  = uint8("os_minor_version", "OS Minor Version")
3152 OSRevision                      = uint8("os_revision", "OS Revision")
3153 OtherFileForkSize               = uint32("other_file_fork_size", "Other File Fork Size")
3154 OtherFileForkFAT                = uint32("other_file_fork_fat", "Other File Fork FAT Entry")
3155 OutgoingPacketDiscardedNoTurboBuffer = uint16("outgoing_packet_discarded_no_turbo_buffer", "Outgoing Packet Discarded No Turbo Buffer")
3156
3157 PacketsDiscardedByHopCount      = uint16("packets_discarded_by_hop_count", "Packets Discarded By Hop Count")
3158 PacketsDiscardedUnknownNet      = uint16("packets_discarded_unknown_net", "Packets Discarded Unknown Net")
3159 PacketsFromInvalidConnection    = uint16("packets_from_invalid_connection", "Packets From Invalid Connection")
3160 PacketsReceivedDuringProcessing = uint16("packets_received_during_processing", "Packets Received During Processing")
3161 PacketsWithBadRequestType       = uint16("packets_with_bad_request_type", "Packets With Bad Request Type")
3162 PacketsWithBadSequenceNumber    = uint16("packets_with_bad_sequence_number", "Packets With Bad Sequence Number")
3163 PageTableOwnerFlag              = uint32("page_table_owner_flag", "Page Table Owner")
3164 ParentID                        = uint32("parent_id", "Parent ID")
3165 ParentID.Display("BASE_HEX")
3166 ParentBaseID                    = uint32("parent_base_id", "Parent Base ID")
3167 ParentBaseID.Display("BASE_HEX")
3168 ParentDirectoryBase             = uint32("parent_directory_base", "Parent Directory Base")
3169 ParentDOSDirectoryBase          = uint32("parent_dos_directory_base", "Parent DOS Directory Base")
3170 ParentObjectNumber              = uint32("parent_object_number", "Parent Object Number")
3171 ParentObjectNumber.Display("BASE_HEX")
3172 Password                        = nstring8("password", "Password")
3173 PathBase                        = uint8("path_base", "Path Base")
3174 PathComponentCount              = uint16("path_component_count", "Path Component Count")
3175 PathComponentSize               = uint16("path_component_size", "Path Component Size")
3176 PathCookieFlags                 = val_string16("path_cookie_flags", "Path Cookie Flags", [
3177         [ 0x0000, "Last component is Not a File Name" ],
3178         [ 0x0001, "Last component is a File Name" ],
3179 ])
3180 PathCount                       = uint8("path_count", "Path Count")
3181 Path                            = nstring8("path", "Path")
3182 PathAndName                     = stringz("path_and_name", "Path and Name")
3183 PendingIOCommands               = uint16("pending_io_commands", "Pending IO Commands")
3184 PhysicalDiskNumber              = uint8("physical_disk_number", "Physical Disk Number")
3185 PhysicalDriveCount              = uint8("physical_drive_count", "Physical Drive Count")
3186 PhysicalLockThreshold           = uint8("physical_lock_threshold", "Physical Lock Threshold")
3187 PingVersion                     = uint16("ping_version", "Ping Version")
3188 PositiveAcknowledgesSent        = uint16("positive_acknowledges_sent", "Positive Acknowledges Sent")
3189 PreCompressedSectors            = uint32("pre_compressed_sectors", "Precompressed Sectors")
3190 PreviousRecord                  = uint32("previous_record", "Previous Record")
3191 PrimaryEntry                    = uint32("primary_entry", "Primary Entry")
3192 PrintFlags                      = bitfield8("print_flags", "Print Flags", [
3193         bf_boolean8(0x08, "print_flags_ff", "Suppress Form Feeds"),
3194         bf_boolean8(0x10, "print_flags_cr", "Create"),
3195         bf_boolean8(0x20, "print_flags_del_spool", "Delete Spool File after Printing"),
3196         bf_boolean8(0x40, "print_flags_exp_tabs", "Expand Tabs in the File"),
3197         bf_boolean8(0x80, "print_flags_banner", "Print Banner Page"),
3198 ])
3199 PrinterHalted                   = val_string8("printer_halted", "Printer Halted", [
3200         [ 0x00, "Printer is not Halted" ],
3201         [ 0xff, "Printer is Halted" ],
3202 ])
3203 PrinterOffLine                  = val_string8( "printer_offline", "Printer Off-Line", [
3204         [ 0x00, "Printer is On-Line" ],
3205         [ 0xff, "Printer is Off-Line" ],
3206 ])
3207 PrintServerVersion              = uint8("print_server_version", "Print Server Version")
3208 Priority                        = uint32("priority", "Priority")
3209 Privileges                      = uint32("privileges", "Login Privileges")
3210 ProcessorType                   = val_string8("processor_type", "Processor Type", [
3211         [ 0x00, "Motorola 68000" ],
3212         [ 0x01, "Intel 8088 or 8086" ],
3213         [ 0x02, "Intel 80286" ],
3214 ])
3215 ProDOSInfo                      = bytes("pro_dos_info", "Pro DOS Info", 6)
3216 ProductMajorVersion             = uint16("product_major_version", "Product Major Version")
3217 ProductMinorVersion             = uint16("product_minor_version", "Product Minor Version")
3218 ProductRevisionVersion          = uint8("product_revision_version", "Product Revision Version")
3219 projectedCompSize               = uint32("projected_comp_size", "Projected Compression Size")
3220 PropertyHasMoreSegments         = val_string8("property_has_more_segments",
3221         "Property Has More Segments", [
3222         [ 0x00, "Is last segment" ],
3223         [ 0xff, "More segments are available" ],
3224 ])
3225 PropertyName                    = nstring8("property_name", "Property Name")
3226 PropertyName16                  = fw_string("property_name_16", "Property Name", 16)
3227 PropertyData                    = bytes("property_data", "Property Data", 128)
3228 PropertySegment                 = uint8("property_segment", "Property Segment")
3229 PropertyType                    = val_string8("property_type", "Property Type", [
3230         [ 0x00, "Display Static property" ],
3231         [ 0x01, "Display Dynamic property" ],
3232         [ 0x02, "Set Static property" ],
3233         [ 0x03, "Set Dynamic property" ],
3234 ])
3235 PropertyValue                   = fw_string("property_value", "Property Value", 128)
3236 ProposedMaxSize                 = uint16("proposed_max_size", "Proposed Max Size")
3237 protocolFlags                   = uint32("protocol_flags", "Protocol Flags")
3238 protocolFlags.Display("BASE_HEX")
3239 PurgeableBlocks                 = uint32("purgeable_blocks", "Purgeable Blocks")
3240 PurgeCcode                      = uint32("purge_c_code", "Purge Completion Code")
3241 PurgeCount                      = uint32("purge_count", "Purge Count")
3242 PurgeFlags                      = val_string16("purge_flags", "Purge Flags", [
3243         [ 0x0000, "Do not Purge All" ],
3244         [ 0x0001, "Purge All" ],
3245         [ 0xffff, "Do not Purge All" ],
3246 ])
3247 PurgeList                       = uint32("purge_list", "Purge List")
3248 PhysicalDiskChannel             = uint8("physical_disk_channel", "Physical Disk Channel")
3249 PhysicalDriveType               = val_string8("physical_drive_type", "Physical Drive Type", [
3250         [ 0x01, "XT" ],
3251         [ 0x02, "AT" ],
3252         [ 0x03, "SCSI" ],
3253         [ 0x04, "Disk Coprocessor" ],
3254         [ 0x05, "PS/2 with MFM Controller" ],
3255         [ 0x06, "PS/2 with ESDI Controller" ],
3256         [ 0x07, "Convergent Technology SBIC" ],
3257 ])
3258 PhysicalReadErrors              = uint16("physical_read_errors", "Physical Read Errors")
3259 PhysicalReadRequests            = uint32("physical_read_requests", "Physical Read Requests")
3260 PhysicalWriteErrors             = uint16("physical_write_errors", "Physical Write Errors")
3261 PhysicalWriteRequests           = uint32("physical_write_requests", "Physical Write Requests")
3262 PrintToFileFlag                 = boolean8("print_to_file_flag", "Print to File Flag")
3263
3264 QueueID                         = uint32("queue_id", "Queue ID")
3265 QueueID.Display("BASE_HEX")
3266 QueueName                       = nstring8("queue_name", "Queue Name")
3267 QueueStartPosition              = uint32("queue_start_position", "Queue Start Position")
3268 QueueStatus                     = bitfield8("queue_status", "Queue Status", [
3269         bf_boolean8(0x01, "queue_status_new_jobs", "Operator does not want to add jobs to the queue"),
3270         bf_boolean8(0x02, "queue_status_pserver", "Operator does not want additional servers attaching"),
3271         bf_boolean8(0x04, "queue_status_svc_jobs", "Operator does not want servers to service jobs"),
3272 ])
3273 QueueType                       = uint16("queue_type", "Queue Type")
3274 QueueingVersion                 = uint8("qms_version", "QMS Version")
3275
3276 ReadBeyondWrite                 = uint16("read_beyond_write", "Read Beyond Write")
3277 RecordLockCount                 = uint16("rec_lock_count", "Record Lock Count")
3278 RecordStart                     = uint32("record_start", "Record Start")
3279 RecordEnd                       = uint32("record_end", "Record End")
3280 RecordInUseFlag                 = val_string16("record_in_use", "Record in Use", [
3281         [ 0x0000, "Record In Use" ],
3282         [ 0xffff, "Record Not In Use" ],
3283 ])
3284 RedirectedPrinter               = uint8( "redirected_printer", "Redirected Printer" )
3285 ReferenceCount                  = uint32("reference_count", "Reference Count")
3286 RelationsCount                  = uint16("relations_count", "Relations Count")
3287 ReMirrorCurrentOffset           = uint32("re_mirror_current_offset", "ReMirror Current Offset")
3288 ReMirrorDriveNumber             = uint8("re_mirror_drive_number", "ReMirror Drive Number")
3289 RemoteMaxPacketSize             = uint32("remote_max_packet_size", "Remote Max Packet Size")
3290 RemoteTargetID                  = uint32("remote_target_id", "Remote Target ID")
3291 RemoteTargetID.Display("BASE_HEX")
3292 RemovableFlag                   = uint16("removable_flag", "Removable Flag")
3293 RemoveOpenRights                = bitfield8("remove_open_rights", "Remove Open Rights", [
3294         bf_boolean8(0x01, "remove_open_rights_ro", "Read Only"),
3295         bf_boolean8(0x02, "remove_open_rights_wo", "Write Only"),
3296         bf_boolean8(0x04, "remove_open_rights_dr", "Deny Read"),
3297         bf_boolean8(0x08, "remove_open_rights_dw", "Deny Write"),
3298         bf_boolean8(0x10, "remove_open_rights_comp", "Compatibility"),
3299         bf_boolean8(0x40, "remove_open_rights_write_thru", "Write Through"),
3300 ])
3301 RenameFlag                      = bitfield8("rename_flag", "Rename Flag", [
3302         bf_boolean8(0x01, "rename_flag_ren", "Rename to Myself allows file to be renamed to it's original name"),
3303         bf_boolean8(0x02, "rename_flag_comp", "Compatability allows files that are marked read only to be opened with read/write access"),
3304         bf_boolean8(0x04, "rename_flag_no", "Name Only renames only the specified name space entry name"),
3305 ])
3306 RepliesCancelled                = uint16("replies_cancelled", "Replies Cancelled")
3307 ReplyBuffer                     = nstring8("reply_buffer", "Reply Buffer")
3308 ReplyBufferSize                 = uint32("reply_buffer_size", "Reply Buffer Size")
3309 ReplyQueueJobNumbers            = uint32("reply_queue_job_numbers", "Reply Queue Job Numbers")
3310 RequestBitMap                   = bitfield16("request_bit_map", "Request Bit Map", [
3311         bf_boolean16(0x0001, "request_bit_map_ret_afp_ent", "AFP Entry ID"),
3312         bf_boolean16(0x0002, "request_bit_map_ret_data_fork", "Data Fork Length"),
3313         bf_boolean16(0x0004, "request_bit_map_ret_res_fork", "Resource Fork Length"),
3314         bf_boolean16(0x0008, "request_bit_map_ret_num_off", "Number of Offspring"),
3315         bf_boolean16(0x0010, "request_bit_map_ret_owner", "Owner ID"),
3316         bf_boolean16(0x0020, "request_bit_map_ret_short", "Short Name"),
3317         bf_boolean16(0x0040, "request_bit_map_ret_acc_priv", "Access Privileges"),
3318         bf_boolean16(0x0100, "request_bit_map_ratt", "Return Attributes"),
3319         bf_boolean16(0x0200, "request_bit_map_ret_afp_parent", "AFP Parent Entry ID"),
3320         bf_boolean16(0x0400, "request_bit_map_ret_cr_date", "Creation Date"),
3321         bf_boolean16(0x0800, "request_bit_map_ret_acc_date", "Access Date"),
3322         bf_boolean16(0x1000, "request_bit_map_ret_mod_date", "Modify Date&Time"),
3323         bf_boolean16(0x2000, "request_bit_map_ret_bak_date", "Backup Date&Time"),
3324         bf_boolean16(0x4000, "request_bit_map_ret_finder", "Finder Info"),
3325         bf_boolean16(0x8000, "request_bit_map_ret_long_nm", "Long Name"),
3326 ])
3327 ResourceForkLen                 = uint32("resource_fork_len", "Resource Fork Len")
3328 RequestCode                     = val_string8("request_code", "Request Code", [
3329         [ 0x00, "Change Logged in to Temporary Authenticated" ],
3330         [ 0x01, "Change Temporary Authenticated to Logged in" ],
3331 ])
3332 RequestData                     = nstring8("request_data", "Request Data")
3333 RequestsReprocessed             = uint16("requests_reprocessed", "Requests Reprocessed")
3334 Reserved                        = uint8( "reserved", "Reserved" )
3335 Reserved2                       = bytes("reserved2", "Reserved", 2)
3336 Reserved3                       = bytes("reserved3", "Reserved", 3)
3337 Reserved4                       = bytes("reserved4", "Reserved", 4)
3338 Reserved6                       = bytes("reserved6", "Reserved", 6)
3339 Reserved8                       = bytes("reserved8", "Reserved", 8)
3340 Reserved10                      = bytes("reserved10", "Reserved", 10)
3341 Reserved12                      = bytes("reserved12", "Reserved", 12)
3342 Reserved16                      = bytes("reserved16", "Reserved", 16)
3343 Reserved20                      = bytes("reserved20", "Reserved", 20)
3344 Reserved28                      = bytes("reserved28", "Reserved", 28)
3345 Reserved36                      = bytes("reserved36", "Reserved", 36)
3346 Reserved44                      = bytes("reserved44", "Reserved", 44)
3347 Reserved48                      = bytes("reserved48", "Reserved", 48)
3348 Reserved51                      = bytes("reserved51", "Reserved", 51)
3349 Reserved56                      = bytes("reserved56", "Reserved", 56)
3350 Reserved64                      = bytes("reserved64", "Reserved", 64)
3351 Reserved120                     = bytes("reserved120", "Reserved", 120)
3352 ReservedOrDirectoryNumber       = uint32("reserved_or_directory_number", "Reserved or Directory Number (see EAFlags)")
3353 ResourceCount                   = uint32("resource_count", "Resource Count")
3354 ResourceForkSize                = uint32("resource_fork_size", "Resource Fork Size")
3355 ResourceName                    = stringz("resource_name", "Resource Name")
3356 ResourceSignature               = fw_string("resource_sig", "Resource Signature", 4)
3357 RestoreTime                     = uint32("restore_time", "Restore Time")
3358 Restriction                     = uint32("restriction", "Disk Space Restriction")
3359 RestrictionsEnforced            = val_string8("restrictions_enforced", "Disk Restrictions Enforce Flag", [
3360         [ 0x00, "Enforced" ],
3361         [ 0xff, "Not Enforced" ],
3362 ])
3363 ReturnInfoCount                 = uint32("return_info_count", "Return Information Count")
3364 ReturnInfoMask                  = bitfield16("ret_info_mask", "Return Information", [
3365         bf_boolean16(0x0001, "ret_info_mask_fname", "Return File Name Information"),
3366         bf_boolean16(0x0002, "ret_info_mask_alloc", "Return Allocation Space Information"),
3367         bf_boolean16(0x0004, "ret_info_mask_attr", "Return Attribute Information"),
3368         bf_boolean16(0x0008, "ret_info_mask_size", "Return Size Information"),
3369         bf_boolean16(0x0010, "ret_info_mask_tspace", "Return Total Space Information"),
3370         bf_boolean16(0x0020, "ret_info_mask_eattr", "Return Extended Attributes Information"),
3371         bf_boolean16(0x0040, "ret_info_mask_arch", "Return Archive Information"),
3372         bf_boolean16(0x0080, "ret_info_mask_mod", "Return Modify Information"),
3373         bf_boolean16(0x0100, "ret_info_mask_create", "Return Creation Information"),
3374         bf_boolean16(0x0200, "ret_info_mask_ns", "Return Name Space Information"),
3375         bf_boolean16(0x0400, "ret_info_mask_dir", "Return Directory Information"),
3376         bf_boolean16(0x0800, "ret_info_mask_rights", "Return Rights Information"),
3377         bf_boolean16(0x1000, "ret_info_mask_id", "Return ID Information"),
3378         bf_boolean16(0x2000, "ret_info_mask_ns_attr", "Return Name Space Attributes Information"),
3379         bf_boolean16(0x4000, "ret_info_mask_actual", "Return Actual Information"),
3380         bf_boolean16(0x8000, "ret_info_mask_logical", "Return Logical Information"),
3381 ])
3382 ReturnedListCount               = uint32("returned_list_count", "Returned List Count")
3383 Revision                        = uint32("revision", "Revision")
3384 RevisionNumber                  = uint8("revision_number", "Revision")
3385 RevQueryFlag                    = val_string8("rev_query_flag", "Revoke Rights Query Flag", [
3386         [ 0x00, "Do not query the locks engine for access rights" ],
3387         [ 0x01, "Query the locks engine and return the access rights" ],
3388 ])
3389 RightsGrantMask                 = bitfield8("rights_grant_mask", "Grant Rights", [
3390         bf_boolean8(0x01, "rights_grant_mask_read", "Read"),
3391         bf_boolean8(0x02, "rights_grant_mask_write", "Write"),
3392         bf_boolean8(0x04, "rights_grant_mask_open", "Open"),
3393         bf_boolean8(0x08, "rights_grant_mask_create", "Create"),
3394         bf_boolean8(0x10, "rights_grant_mask_del", "Delete"),
3395         bf_boolean8(0x20, "rights_grant_mask_parent", "Parental"),
3396         bf_boolean8(0x40, "rights_grant_mask_search", "Search"),
3397         bf_boolean8(0x80, "rights_grant_mask_mod", "Modify"),
3398 ])
3399 RightsRevokeMask                = bitfield8("rights_revoke_mask", "Revoke Rights", [
3400         bf_boolean8(0x01, "rights_revoke_mask_read", "Read"),
3401         bf_boolean8(0x02, "rights_revoke_mask_write", "Write"),
3402         bf_boolean8(0x04, "rights_revoke_mask_open", "Open"),
3403         bf_boolean8(0x08, "rights_revoke_mask_create", "Create"),
3404         bf_boolean8(0x10, "rights_revoke_mask_del", "Delete"),
3405         bf_boolean8(0x20, "rights_revoke_mask_parent", "Parental"),
3406         bf_boolean8(0x40, "rights_revoke_mask_search", "Search"),
3407         bf_boolean8(0x80, "rights_revoke_mask_mod", "Modify"),
3408 ])
3409 RIPSocketNumber                 = uint16("rip_socket_num", "RIP Socket Number")
3410 RIPSocketNumber.Display("BASE_HEX")
3411 RouterDownFlag                  = boolean8("router_dn_flag", "Router Down Flag")
3412 RPCccode                        = val_string16("rpc_c_code", "RPC Completion Code", [
3413         [ 0x0000, "Successful" ],
3414 ])
3415 RTagNumber                      = uint32("r_tag_num", "Resource Tag Number")
3416 RTagNumber.Display("BASE_HEX")
3417 RpyNearestSrvFlag               = boolean8("rpy_nearest_srv_flag", "Reply to Nearest Server Flag")
3418
3419 SalvageableFileEntryNumber      = uint32("salvageable_file_entry_number", "Salvageable File Entry Number")
3420 SalvageableFileEntryNumber.Display("BASE_HEX")
3421 SAPSocketNumber                 = uint16("sap_socket_number", "SAP Socket Number")
3422 SAPSocketNumber.Display("BASE_HEX")
3423 ScanItems                       = uint32("scan_items", "Number of Items returned from Scan")
3424 SearchAttributes                = bitfield8("sattr", "Search Attributes", [
3425         bf_boolean8(0x01, "sattr_ronly", "Read-Only Files Allowed"),
3426         bf_boolean8(0x02, "sattr_hid", "Hidden Files Allowed"),
3427         bf_boolean8(0x04, "sattr_sys", "System Files Allowed"),
3428         bf_boolean8(0x08, "sattr_exonly", "Execute-Only Files Allowed"),
3429         bf_boolean8(0x10, "sattr_sub", "Subdirectories Only"),
3430         bf_boolean8(0x20, "sattr_archive", "Archive"),
3431         bf_boolean8(0x40, "sattr_execute_confirm", "Execute Confirm"),
3432         bf_boolean8(0x80, "sattr_shareable", "Shareable"),
3433 ])
3434 SearchAttributesLow             = bitfield16("search_att_low", "Search Attributes", [
3435         bf_boolean16(0x0001, "search_att_read_only", "Read-Only"),
3436         bf_boolean16(0x0002, "search_att_hidden", "Hidden Files Allowed"),
3437         bf_boolean16(0x0004, "search_att_system", "System"),
3438         bf_boolean16(0x0008, "search_att_execute_only", "Execute-Only"),
3439         bf_boolean16(0x0010, "search_att_sub", "Subdirectories Only"),
3440         bf_boolean16(0x0020, "search_att_archive", "Archive"),
3441         bf_boolean16(0x0040, "search_att_execute_confirm", "Execute Confirm"),
3442         bf_boolean16(0x0080, "search_att_shareable", "Shareable"),
3443         bf_boolean16(0x8000, "search_attr_all_files", "All Files and Directories"),
3444 ])
3445 SearchBitMap                            = bitfield8("search_bit_map", "Search Bit Map", [
3446         bf_boolean8(0x01, "search_bit_map_hidden", "Hidden"),
3447         bf_boolean8(0x02, "search_bit_map_sys", "System"),
3448         bf_boolean8(0x04, "search_bit_map_sub", "Subdirectory"),
3449         bf_boolean8(0x08, "search_bit_map_files", "Files"),
3450 ])
3451 SearchConnNumber                        = uint32("search_conn_number", "Search Connection Number")
3452 SearchInstance                          = uint32("search_instance", "Search Instance")
3453 SearchNumber                            = uint32("search_number", "Search Number")
3454 SearchPattern                           = nstring8("search_pattern", "Search Pattern")
3455 SearchSequence                          = bytes("search_sequence", "Search Sequence", 9)
3456 SearchSequenceWord                      = uint16("search_sequence_word", "Search Sequence", BE)
3457 Second                                  = uint8("s_second", "Seconds")
3458 SecondsRelativeToTheYear2000            = uint32("sec_rel_to_y2k", "Seconds Relative to the Year 2000")
3459 SecretStoreVerb                         = val_string8("ss_verb", "Secret Store Verb",[
3460         [ 0x00, "Query Server" ],
3461         [ 0x01, "Read App Secrets" ],
3462         [ 0x02, "Write App Secrets" ],
3463         [ 0x03, "Add Secret ID" ],
3464         [ 0x04, "Remove Secret ID" ],
3465         [ 0x05, "Remove SecretStore" ],
3466         [ 0x06, "Enumerate Secret IDs" ],
3467         [ 0x07, "Unlock Store" ],
3468         [ 0x08, "Set Master Password" ],
3469         [ 0x09, "Get Service Information" ],
3470 ])
3471 SecurityEquivalentList                  = fw_string("security_equiv_list", "Security Equivalent List", 128)
3472 SecurityFlag                            = bitfield8("security_flag", "Security Flag", [
3473         bf_boolean8(0x01, "checksuming", "Checksumming"),
3474         bf_boolean8(0x02, "signature", "Signature"),
3475         bf_boolean8(0x04, "complete_signatures", "Complete Signatures"),
3476         bf_boolean8(0x08, "encryption", "Encryption"),
3477         bf_boolean8(0x80, "large_internet_packets", "Large Internet Packets (LIP) Disabled"),
3478 ])
3479 SecurityRestrictionVersion              = uint8("security_restriction_version", "Security Restriction Version")
3480 SectorsPerBlock                         = uint8("sectors_per_block", "Sectors Per Block")
3481 SectorsPerCluster                       = uint16("sectors_per_cluster", "Sectors Per Cluster" )
3482 SectorsPerClusterLong                   = uint32("sectors_per_cluster_long", "Sectors Per Cluster" )
3483 SectorsPerTrack                         = uint8("sectors_per_track", "Sectors Per Track")
3484 SectorSize                              = uint32("sector_size", "Sector Size")
3485 SemaphoreHandle                         = uint32("semaphore_handle", "Semaphore Handle")
3486 SemaphoreName                           = nstring8("semaphore_name", "Semaphore Name")
3487 SemaphoreNameLen                        = uint8("semaphore_name_len", "Semaphore Name Len")
3488 SemaphoreOpenCount                      = uint8("semaphore_open_count", "Semaphore Open Count")
3489 SemaphoreShareCount                     = uint8("semaphore_share_count", "Semaphore Share Count")
3490 SemaphoreTimeOut                        = uint16("semaphore_time_out", "Semaphore Time Out")
3491 SemaphoreValue                          = uint16("semaphore_value", "Semaphore Value")
3492 SendStatus                              = val_string8("send_status", "Send Status", [
3493         [ 0x00, "Successful" ],
3494         [ 0x01, "Illegal Station Number" ],
3495         [ 0x02, "Client Not Logged In" ],
3496         [ 0x03, "Client Not Accepting Messages" ],
3497         [ 0x04, "Client Already has a Message" ],
3498         [ 0x96, "No Alloc Space for the Message" ],
3499         [ 0xfd, "Bad Station Number" ],
3500         [ 0xff, "Failure" ],
3501 ])
3502 SequenceByte                    = uint8("sequence_byte", "Sequence")
3503 SequenceNumber                  = uint32("sequence_number", "Sequence Number")
3504 SequenceNumber.Display("BASE_HEX")
3505 ServerAddress                   = bytes("server_address", "Server Address", 12)
3506 ServerAppNumber                 = uint16("server_app_num", "Server App Number")
3507 #ServerIDList                   = uint32("server_id_list", "Server ID List")
3508 ServerID                        = uint32("server_id_number", "Server ID", BE )
3509 ServerID.Display("BASE_HEX")
3510 ServerInfoFlags                 = val_string16("server_info_flags", "Server Information Flags", [
3511         [ 0x0000, "This server is not a member of a Cluster" ],
3512         [ 0x0001, "This server is a member of a Cluster" ],
3513 ])
3514 serverListFlags                 = uint32("server_list_flags", "Server List Flags")
3515 ServerName                      = fw_string("server_name", "Server Name", 48)
3516 serverName50                    = fw_string("server_name50", "Server Name", 50)
3517 ServerNameLen                   = nstring8("server_name_len", "Server Name")
3518 ServerNameStringz               = stringz("server_name_stringz", "Server Name")
3519 ServerNetworkAddress            = bytes("server_network_address", "Server Network Address", 10)
3520 ServerNode                      = bytes("server_node", "Server Node", 6)
3521 ServerSerialNumber              = uint32("server_serial_number", "Server Serial Number")
3522 ServerStation                   = uint8("server_station", "Server Station")
3523 ServerStationLong               = uint32("server_station_long", "Server Station")
3524 ServerStationList               = uint8("server_station_list", "Server Station List")
3525 ServerStatusRecord              = fw_string("server_status_record", "Server Status Record", 64)
3526 ServerTaskNumber                = uint8("server_task_number", "Server Task Number")
3527 ServerTaskNumberLong            = uint32("server_task_number_long", "Server Task Number")
3528 ServerType                      = uint16("server_type", "Server Type")
3529 ServerType.Display("BASE_HEX")
3530 ServerUtilization               = uint32("server_utilization", "Server Utilization")
3531 ServerUtilizationPercentage     = uint8("server_utilization_percentage", "Server Utilization Percentage")
3532 ServiceType                     = val_string16("Service_type", "Service Type", [
3533         [ 0x0000,       "Unknown" ],
3534         [ 0x0001,       "User" ],
3535         [ 0x0002,       "User group" ],
3536         [ 0x0003,       "Print queue" ],
3537         [ 0x0004,       "NetWare file server" ],
3538         [ 0x0005,       "Job server" ],
3539         [ 0x0006,       "Gateway" ],
3540         [ 0x0007,       "Print server" ],
3541         [ 0x0008,       "Archive queue" ],
3542         [ 0x0009,       "Archive server" ],
3543         [ 0x000a,       "Job queue" ],
3544         [ 0x000b,       "Administration" ],
3545         [ 0x0021,       "NAS SNA gateway" ],
3546         [ 0x0026,       "Remote bridge server" ],
3547         [ 0x0027,       "TCP/IP gateway" ],
3548 ])
3549 SetCmdCategory                  = val_string8("set_cmd_category", "Set Command Category", [
3550         [ 0x00, "Communications" ],
3551         [ 0x01, "Memory" ],
3552         [ 0x02, "File Cache" ],
3553         [ 0x03, "Directory Cache" ],
3554         [ 0x04, "File System" ],
3555         [ 0x05, "Locks" ],
3556         [ 0x06, "Transaction Tracking" ],
3557         [ 0x07, "Disk" ],
3558         [ 0x08, "Time" ],
3559         [ 0x09, "NCP" ],
3560         [ 0x0a, "Miscellaneous" ],
3561         [ 0x0b, "Error Handling" ],
3562         [ 0x0c, "Directory Services" ],
3563         [ 0x0d, "MultiProcessor" ],
3564         [ 0x0e, "Service Location Protocol" ],
3565         [ 0x0f, "Licensing Services" ],
3566 ])
3567 SetCmdFlags                             = bitfield8("set_cmd_flags", "Set Command Flags", [
3568         bf_boolean8(0x01, "cmd_flags_startup_only", "Startup.ncf Only"),
3569         bf_boolean8(0x02, "cmd_flags_hidden", "Hidden"),
3570         bf_boolean8(0x04, "cmd_flags_advanced", "Advanced"),
3571         bf_boolean8(0x08, "cmd_flags_later", "Restart Server Required to Take Effect"),
3572         bf_boolean8(0x80, "cmd_flags_secure", "Console Secured"),
3573 ])
3574 SetCmdName                      = stringz("set_cmd_name", "Set Command Name")
3575 SetCmdType                      = val_string8("set_cmd_type", "Set Command Type", [
3576         [ 0x00, "Numeric Value" ],
3577         [ 0x01, "Boolean Value" ],
3578         [ 0x02, "Ticks Value" ],
3579         [ 0x04, "Time Value" ],
3580         [ 0x05, "String Value" ],
3581         [ 0x06, "Trigger Value" ],
3582         [ 0x07, "Numeric Value" ],
3583 ])
3584 SetCmdValueNum                  = uint32("set_cmd_value_num", "Set Command Value")
3585 SetCmdValueString               = stringz("set_cmd_value_string", "Set Command Value")
3586 SetParmName                     = stringz("set_parm_name", "Set Parameter Name")
3587 SFTErrorTable                   = bytes("sft_error_table", "SFT Error Table", 60)
3588 SFTSupportLevel                 = val_string8("sft_support_level", "SFT Support Level", [
3589         [ 0x01, "Server Offers Hot Disk Error Fixing" ],
3590         [ 0x02, "Server Offers Disk Mirroring and Transaction Tracking" ],
3591         [ 0x03, "Server Offers Physical Server Mirroring" ],
3592 ])
3593 ShareableLockCount              = uint16("shareable_lock_count", "Shareable Lock Count")
3594 SharedMemoryAddresses           = bytes("shared_memory_addresses", "Shared Memory Addresses", 10)
3595 ShortName                       = fw_string("short_name", "Short Name", 12)
3596 ShortStkName                    = fw_string("short_stack_name", "Short Stack Name", 16)
3597 SiblingCount                    = uint32("sibling_count", "Sibling Count")
3598 SMIDs                           = uint32("smids", "Storage Media ID's")
3599 SoftwareDescription             = fw_string("software_description", "Software Description", 65)
3600 SoftwareDriverType              = uint8("software_driver_type", "Software Driver Type")
3601 SoftwareMajorVersionNumber      = uint8("software_major_version_number", "Software Major Version Number")
3602 SoftwareMinorVersionNumber      = uint8("software_minor_version_number", "Software Minor Version Number")
3603 SourceDirHandle                 = uint8("source_dir_handle", "Source Directory Handle")
3604 sourceOriginateTime             = bytes("source_originate_time", "Source Originate Time", 8)
3605 sourceOriginateTime.Display("BASE_HEX")
3606 SourcePath                      = nstring8("source_path", "Source Path")
3607 SourcePathComponentCount        = uint8("source_component_count", "Source Path Component Count")
3608 sourceReturnTime                = bytes("source_return_time", "Source Return Time", 8)
3609 sourceReturnTime.Display("BASE_HEX")
3610 SpaceUsed                       = uint32("space_used", "Space Used")
3611 SpaceMigrated                   = uint32("space_migrated", "Space Migrated")
3612 SrcNameSpace                    = val_string8("src_name_space", "Source Name Space", [
3613         [ 0x00, "DOS Name Space" ],
3614         [ 0x01, "MAC Name Space" ],
3615         [ 0x02, "NFS Name Space" ],
3616         [ 0x04, "Long Name Space" ],
3617 ])
3618 SupModID                        = uint32("sup_mod_id", "Sup Mod ID")
3619 StackCount                      = uint32("stack_count", "Stack Count")
3620 StackFullNameStr                = nstring8("stack_full_name_str", "Stack Full Name")
3621 StackMajorVN                    = uint8("stack_major_vn", "Stack Major Version Number")
3622 StackMinorVN                    = uint8("stack_minor_vn", "Stack Minor Version Number")
3623 StackNumber                     = uint32("stack_number", "Stack Number")
3624 StartConnNumber                 = uint32("start_conn_num", "Starting Connection Number")
3625 StartingBlock                   = uint16("starting_block", "Starting Block")
3626 StartingNumber                  = uint32("starting_number", "Starting Number")
3627 StartingSearchNumber            = uint16("start_search_number", "Start Search Number")
3628 StartNumber                     = uint32("start_number", "Start Number")
3629 startNumberFlag                 = uint16("start_number_flag", "Start Number Flag")
3630 StartVolumeNumber               = uint32("start_volume_number", "Starting Volume Number")
3631 StationList                     = uint32("station_list", "Station List")
3632 StationNumber                   = bytes("station_number", "Station Number", 3)
3633 StatMajorVersion                = uint8("stat_major_version", "Statistics Table Major Version")
3634 StatMinorVersion                = uint8("stat_minor_version", "Statistics Table Minor Version")
3635 Status                          = bitfield16("status", "Status", [
3636         bf_boolean16(0x0001, "user_info_logged_in", "Logged In"),
3637         bf_boolean16(0x0002, "user_info_being_abort", "Being Aborted"),
3638         bf_boolean16(0x0004, "user_info_audited", "Audited"),
3639         bf_boolean16(0x0008, "user_info_need_sec", "Needs Security Change"),
3640         bf_boolean16(0x0010, "user_info_mac_station", "MAC Station"),
3641         bf_boolean16(0x0020, "user_info_temp_authen", "Temporary Authenticated"),
3642         bf_boolean16(0x0040, "user_info_audit_conn", "Audit Connection Recorded"),
3643         bf_boolean16(0x0080, "user_info_dsaudit_conn", "DS Audit Connection Recorded"),
3644         bf_boolean16(0x0100, "user_info_logout", "Logout in Progress"),
3645         bf_boolean16(0x0200, "user_info_int_login", "Internal Login"),
3646         bf_boolean16(0x0400, "user_info_bindery", "Bindery Connection"),
3647 ])
3648 StatusFlagBits                  = bitfield32("status_flag_bits", "Status Flag", [
3649         bf_boolean32(0x00000001, "status_flag_bits_suballoc", "Sub Allocation"),
3650         bf_boolean32(0x00000002, "status_flag_bits_comp", "Compression"),
3651         bf_boolean32(0x00000004, "status_flag_bits_migrate", "Migration"),
3652         bf_boolean32(0x00000008, "status_flag_bits_audit", "Audit"),
3653         bf_boolean32(0x00000010, "status_flag_bits_ro", "Read Only"),
3654         bf_boolean32(0x00000020, "status_flag_bits_im_purge", "Immediate Purge"),
3655         bf_boolean32(0x80000000, "status_flag_bits_nss", "NSS Volume"),
3656 ])
3657 SubAllocClusters                = uint32("sub_alloc_clusters", "Sub Alloc Clusters")
3658 SubAllocFreeableClusters        = uint32("sub_alloc_freeable_clusters", "Sub Alloc Freeable Clusters")
3659 Subdirectory                    = uint32("sub_directory", "Subdirectory")
3660 Subdirectory.Display("BASE_HEX")
3661 SuggestedFileSize               = uint32("suggested_file_size", "Suggested File Size")
3662 SupportModuleID                 = uint32("support_module_id", "Support Module ID")
3663 SynchName                       = nstring8("synch_name", "Synch Name")
3664 SystemIntervalMarker            = uint32("system_interval_marker", "System Interval Marker")
3665
3666 TabSize                         = uint8( "tab_size", "Tab Size" )
3667 TargetClientList                = uint8("target_client_list", "Target Client List")
3668 TargetConnectionNumber          = uint16("target_connection_number", "Target Connection Number")
3669 TargetDirectoryBase             = uint32("target_directory_base", "Target Directory Base")
3670 TargetDirHandle                 = uint8("target_dir_handle", "Target Directory Handle")
3671 TargetEntryID                   = uint32("target_entry_id", "Target Entry ID")
3672 TargetEntryID.Display("BASE_HEX")
3673 TargetExecutionTime             = bytes("target_execution_time", "Target Execution Time", 6)
3674 TargetFileHandle                = bytes("target_file_handle", "Target File Handle", 6)
3675 TargetFileOffset                = uint32("target_file_offset", "Target File Offset")
3676 TargetMessage                   = nstring8("target_message", "Message")
3677 TargetPrinter                   = uint8( "target_ptr", "Target Printer" )
3678 targetReceiveTime               = bytes("target_receive_time", "Target Receive Time", 8)
3679 targetReceiveTime.Display("BASE_HEX")
3680 TargetServerIDNumber            = uint32("target_server_id_number", "Target Server ID Number", BE )
3681 TargetServerIDNumber.Display("BASE_HEX")
3682 targetTransmitTime              = bytes("target_transmit_time", "Target Transmit Time", 8)
3683 targetTransmitTime.Display("BASE_HEX")
3684 TaskNumByte                     = uint8("task_num_byte", "Task Number")
3685 TaskNumber                      = uint32("task_number", "Task Number")
3686 TaskNumberWord                  = uint16("task_number_word", "Task Number")
3687 TextJobDescription              = fw_string("text_job_description", "Text Job Description", 50)
3688 ThrashingCount                  = uint16("thrashing_count", "Thrashing Count")
3689 TimeoutLimit                    = uint16("timeout_limit", "Timeout Limit")
3690 TimesyncStatus                  = bitfield32("timesync_status_flags", "Timesync Status", [
3691         bf_boolean32(0x00000001, "timesync_status_sync", "Time is Synchronized"),
3692         bf_boolean32(0x00000002, "timesync_status_net_sync", "Time is Synchronized to the Network"),
3693         bf_boolean32(0x00000004, "timesync_status_active", "Time Synchronization is Active"),
3694         bf_boolean32(0x00000008, "timesync_status_external", "External Time Synchronization Active"),
3695         bf_val_str32(0x00000700, "timesync_status_server_type", "Time Server Type", [
3696                 [ 0x01, "Client Time Server" ],
3697                 [ 0x02, "Secondary Time Server" ],
3698                 [ 0x03, "Primary Time Server" ],
3699                 [ 0x04, "Reference Time Server" ],
3700                 [ 0x05, "Single Reference Time Server" ],
3701         ]),
3702         bf_boolean32(0x000f0000, "timesync_status_ext_sync", "External Clock Status"),
3703 ])
3704 TimeToNet                       = uint16("time_to_net", "Time To Net")
3705 TotalBlocks                     = uint32("total_blocks", "Total Blocks")
3706 TotalBlocksToDecompress         = uint32("total_blks_to_dcompress", "Total Blocks To Decompress")
3707 TotalBytesRead                  = bytes("user_info_ttl_bytes_rd", "Total Bytes Read", 6)
3708 TotalBytesWritten               = bytes("user_info_ttl_bytes_wrt", "Total Bytes Written", 6)
3709 TotalCacheWrites                = uint32("total_cache_writes", "Total Cache Writes")
3710 TotalChangedFATs                = uint32("total_changed_fats", "Total Changed FAT Entries")
3711 TotalCommonCnts                 = uint32("total_common_cnts", "Total Common Counts")
3712 TotalCntBlocks                  = uint32("total_cnt_blocks", "Total Count Blocks")
3713 TotalDataStreamDiskSpaceAlloc   = uint32("total_stream_size_struct_space_alloc", "Total Data Stream Disk Space Alloc")
3714 TotalDirectorySlots             = uint16("total_directory_slots", "Total Directory Slots")
3715 TotalDirectoryEntries           = uint32("total_dir_entries", "Total Directory Entries")
3716 TotalDynamicSpace               = uint32("total_dynamic_space", "Total Dynamic Space")
3717 TotalExtendedDirectoryExtants   = uint32("total_extended_directory_extants", "Total Extended Directory Extants")
3718 TotalFileServicePackets         = uint32("total_file_service_packets", "Total File Service Packets")
3719 TotalFilesOpened                = uint32("total_files_opened", "Total Files Opened")
3720 TotalLFSCounters                = uint32("total_lfs_counters", "Total LFS Counters")
3721 TotalOffspring                  = uint16("total_offspring", "Total Offspring")
3722 TotalOtherPackets               = uint32("total_other_packets", "Total Other Packets")
3723 TotalQueueJobs                  = uint32("total_queue_jobs", "Total Queue Jobs")
3724 TotalReadRequests               = uint32("total_read_requests", "Total Read Requests")
3725 TotalRequest                    = uint32("total_request", "Total Requests")
3726 TotalRequestPackets             = uint32("total_request_packets", "Total Request Packets")
3727 TotalRoutedPackets              = uint32("total_routed_packets", "Total Routed Packets")
3728 TotalRxPkts                     = uint32("total_rx_pkts", "Total Receive Packets")
3729 TotalServerMemory               = uint16("total_server_memory", "Total Server Memory", BE)
3730 TotalTransactionsBackedOut      = uint32("total_trans_backed_out", "Total Transactions Backed Out")
3731 TotalTransactionsPerformed      = uint32("total_trans_performed", "Total Transactions Performed")
3732 TotalTxPkts                     = uint32("total_tx_pkts", "Total Transmit Packets")
3733 TotalUnfilledBackoutRequests    = uint16("total_unfilled_backout_requests", "Total Unfilled Backout Requests")
3734 TotalVolumeClusters             = uint16("total_volume_clusters", "Total Volume Clusters")
3735 TotalWriteRequests              = uint32("total_write_requests", "Total Write Requests")
3736 TotalWriteTransactionsPerformed = uint32("total_write_trans_performed", "Total Write Transactions Performed")
3737 TrackOnFlag                     = boolean8("track_on_flag", "Track On Flag")
3738 TransactionDiskSpace            = uint16("transaction_disk_space", "Transaction Disk Space")
3739 TransactionFATAllocations       = uint32("transaction_fat_allocations", "Transaction FAT Allocations")
3740 TransactionFileSizeChanges      = uint32("transaction_file_size_changes", "Transaction File Size Changes")
3741 TransactionFilesTruncated       = uint32("transaction_files_truncated", "Transaction Files Truncated")
3742 TransactionNumber               = uint32("transaction_number", "Transaction Number")
3743 TransactionTrackingEnabled      = uint8("transaction_tracking_enabled", "Transaction Tracking Enabled")
3744 TransactionTrackingFlag         = uint16("tts_flag", "Transaction Tracking Flag")
3745 TransactionTrackingSupported    = uint8("transaction_tracking_supported", "Transaction Tracking Supported")
3746 TransactionVolumeNumber         = uint16("transaction_volume_number", "Transaction Volume Number")
3747 TransportType                   = val_string8("transport_type", "Communications Type", [
3748         [ 0x01, "Internet Packet Exchange (IPX)" ],
3749         [ 0x05, "User Datagram Protocol (UDP)" ],
3750         [ 0x06, "Transmission Control Protocol (TCP)" ],
3751 ])
3752 TreeLength                      = uint32("tree_length", "Tree Length")
3753 TreeName                        = nstring32("tree_name", "Tree Name")
3754 TreeName.NWUnicode()
3755 TrusteeRights                   = bitfield16("trustee_rights_low", "Trustee Rights", [
3756         bf_boolean16(0x0001, "trustee_rights_read", "Read"),
3757         bf_boolean16(0x0002, "trustee_rights_write", "Write"),
3758         bf_boolean16(0x0004, "trustee_rights_open", "Open"),
3759         bf_boolean16(0x0008, "trustee_rights_create", "Create"),
3760         bf_boolean16(0x0010, "trustee_rights_del", "Delete"),
3761         bf_boolean16(0x0020, "trustee_rights_parent", "Parental"),
3762         bf_boolean16(0x0040, "trustee_rights_search", "Search"),
3763         bf_boolean16(0x0080, "trustee_rights_modify", "Modify"),
3764         bf_boolean16(0x0100, "trustee_rights_super", "Supervisor"),
3765 ])
3766 TTSLevel                        = uint8("tts_level", "TTS Level")
3767 TrusteeSetNumber                = uint8("trustee_set_number", "Trustee Set Number")
3768 TrusteeID                       = uint32("trustee_id_set", "Trustee ID")
3769 TrusteeID.Display("BASE_HEX")
3770 ttlCompBlks                     = uint32("ttl_comp_blks", "Total Compression Blocks")
3771 TtlDSDskSpaceAlloc              = uint32("ttl_ds_disk_space_alloc", "Total Streams Space Allocated")
3772 TtlEAs                          = uint32("ttl_eas", "Total EA's")
3773 TtlEAsDataSize                  = uint32("ttl_eas_data_size", "Total EA's Data Size")
3774 TtlEAsKeySize                   = uint32("ttl_eas_key_size", "Total EA's Key Size")
3775 ttlIntermediateBlks             = uint32("ttl_inter_blks", "Total Intermediate Blocks")
3776 TtlMigratedSize                 = uint32("ttl_migrated_size", "Total Migrated Size")
3777 TtlNumOfRTags                   = uint32("ttl_num_of_r_tags", "Total Number of Resource Tags")
3778 TtlNumOfSetCmds                 = uint32("ttl_num_of_set_cmds", "Total Number of Set Commands")
3779 TtlValuesLength                 = uint32("ttl_values_length", "Total Values Length")
3780 TtlWriteDataSize                = uint32("ttl_write_data_size", "Total Write Data Size")
3781 TurboUsedForFileService         = uint16("turbo_used_for_file_service", "Turbo Used For File Service")
3782
3783 UnclaimedPkts                   = uint32("un_claimed_packets", "Unclaimed Packets")
3784 UnCompressableDataStreamsCount  = uint32("un_compressable_data_streams_count", "Uncompressable Data Streams Count")
3785 Undefined8                      = bytes("undefined_8", "Undefined", 8)
3786 Undefined28                     = bytes("undefined_28", "Undefined", 28)
3787 UndefinedWord                   = uint16("undefined_word", "Undefined")
3788 UniqueID                        = uint8("unique_id", "Unique ID")
3789 UnknownByte                     = uint8("unknown_byte", "Unknown Byte")
3790 Unused                          = uint8("un_used", "Unused")
3791 UnusedBlocks                    = uint32("unused_blocks", "Unused Blocks")
3792 UnUsedDirectoryEntries          = uint32("un_used_directory_entries", "Unused Directory Entries")
3793 UnusedDiskBlocks                = uint32("unused_disk_blocks", "Unused Disk Blocks")
3794 UnUsedExtendedDirectoryExtants  = uint32("un_used_extended_directory_extants", "Unused Extended Directory Extants")
3795 UpdateDate                      = uint16("update_date", "Update Date")
3796 UpdateDate.NWDate()
3797 UpdateID                        = uint32("update_id", "Update ID", BE)
3798 UpdateID.Display("BASE_HEX")
3799 UpdateTime                      = uint16("update_time", "Update Time")
3800 UpdateTime.NWTime()
3801 UseCount                        = val_string16("user_info_use_count", "Use Count", [
3802         [ 0x0000, "Connection is not in use" ],
3803         [ 0x0001, "Connection is in use" ],
3804 ])
3805 UsedBlocks                      = uint32("used_blocks", "Used Blocks")
3806 UserID                          = uint32("user_id", "User ID", BE)
3807 UserID.Display("BASE_HEX")
3808 UserLoginAllowed                = val_string8("user_login_allowed", "Login Status", [
3809         [ 0x00, "Client Login Disabled" ],
3810         [ 0x01, "Client Login Enabled" ],
3811 ])
3812
3813 UserName                        = nstring8("user_name", "User Name")
3814 UserName16                      = fw_string("user_name_16", "User Name", 16)
3815 UserName48                      = fw_string("user_name_48", "User Name", 48)
3816 UserType                        = uint16("user_type", "User Type")
3817 UTCTimeInSeconds                = uint32("uts_time_in_seconds", "UTC Time in Seconds")
3818
3819 ValueAvailable                  = val_string8("value_available", "Value Available", [
3820         [ 0x00, "Has No Value" ],
3821         [ 0xff, "Has Value" ],
3822 ])
3823 VAPVersion                      = uint8("vap_version", "VAP Version")
3824 VariableBitMask                 = uint32("variable_bit_mask", "Variable Bit Mask")
3825 VariableBitsDefined             = uint16("variable_bits_defined", "Variable Bits Defined")
3826 VConsoleRevision                = uint8("vconsole_rev", "Console Revision")
3827 VConsoleVersion                 = uint8("vconsole_ver", "Console Version")
3828 Verb                            = uint32("verb", "Verb")
3829 VerbData                        = uint8("verb_data", "Verb Data")
3830 version                         = uint32("version", "Version")
3831 VersionNumber                   = uint8("version_number", "Version")
3832 VertLocation                    = uint16("vert_location", "Vertical Location")
3833 VirtualConsoleVersion           = uint8("virtual_console_version", "Virtual Console Version")
3834 VolumeID                        = uint32("volume_id", "Volume ID")
3835 VolumeID.Display("BASE_HEX")
3836 VolInfoReplyLen                 = uint16("vol_info_reply_len", "Volume Information Reply Length")
3837 VolumeCachedFlag                = val_string8("volume_cached_flag", "Volume Cached Flag", [
3838         [ 0x00, "Volume is Not Cached" ],
3839         [ 0xff, "Volume is Cached" ],
3840 ])
3841 VolumeDataStreams               = uint8("volume_data_streams", "Volume Data Streams")
3842 VolumeHashedFlag                = val_string8("volume_hashed_flag", "Volume Hashed Flag", [
3843         [ 0x00, "Volume is Not Hashed" ],
3844         [ 0xff, "Volume is Hashed" ],
3845 ])
3846 VolumeLastModifiedDate          = uint16("volume_last_modified_date", "Volume Last Modified Date")
3847 VolumeLastModifiedDate.NWDate()
3848 VolumeLastModifiedTime          = uint16("volume_last_modified_time", "Volume Last Modified Time")
3849 VolumeLastModifiedTime.NWTime()
3850 VolumeMountedFlag               = val_string8("volume_mounted_flag", "Volume Mounted Flag", [
3851         [ 0x00, "Volume is Not Mounted" ],
3852         [ 0xff, "Volume is Mounted" ],
3853 ])
3854 VolumeName                      = fw_string("volume_name", "Volume Name", 16)
3855 VolumeNameLen                   = nstring8("volume_name_len", "Volume Name")
3856 VolumeNameSpaces                = uint8("volume_name_spaces", "Volume Name Spaces")
3857 VolumeNameStringz               = stringz("volume_name_stringz", "Volume Name")
3858 VolumeNumber                    = uint8("volume_number", "Volume Number")
3859 VolumeNumberLong                = uint32("volume_number_long", "Volume Number")
3860 VolumeRemovableFlag             = val_string8("volume_removable_flag", "Volume Removable Flag", [
3861         [ 0x00, "Disk Cannot be Removed from Server" ],
3862         [ 0xff, "Disk Can be Removed from Server" ],
3863 ])
3864 VolumeRequestFlags              = val_string16("volume_request_flags", "Volume Request Flags", [
3865         [ 0x0000, "Return name with volume number" ],
3866         [ 0x0001, "Do not return name with volume number" ],
3867 ])
3868 VolumeSizeInClusters            = uint32("volume_size_in_clusters", "Volume Size in Clusters")
3869 VolumesSupportedMax             = uint16("volumes_supported_max", "Volumes Supported Max")
3870 VolumeType                      = val_string16("volume_type", "Volume Type", [
3871         [ 0x0000, "NetWare 386" ],
3872         [ 0x0001, "NetWare 286" ],
3873         [ 0x0002, "NetWare 386 Version 30" ],
3874         [ 0x0003, "NetWare 386 Version 31" ],
3875 ])
3876 WastedServerMemory              = uint16("wasted_server_memory", "Wasted Server Memory", BE)
3877 WaitTime                        = uint32("wait_time", "Wait Time")
3878
3879 Year                            = val_string8("year", "Year",[
3880         [ 0x50, "1980" ],
3881         [ 0x51, "1981" ],
3882         [ 0x52, "1982" ],
3883         [ 0x53, "1983" ],
3884         [ 0x54, "1984" ],
3885         [ 0x55, "1985" ],
3886         [ 0x56, "1986" ],
3887         [ 0x57, "1987" ],
3888         [ 0x58, "1988" ],
3889         [ 0x59, "1989" ],
3890         [ 0x5a, "1990" ],
3891         [ 0x5b, "1991" ],
3892         [ 0x5c, "1992" ],
3893         [ 0x5d, "1993" ],
3894         [ 0x5e, "1994" ],
3895         [ 0x5f, "1995" ],
3896         [ 0x60, "1996" ],
3897         [ 0x61, "1997" ],
3898         [ 0x62, "1998" ],
3899         [ 0x63, "1999" ],
3900         [ 0x64, "2000" ],
3901         [ 0x65, "2001" ],
3902         [ 0x66, "2002" ],
3903         [ 0x67, "2003" ],
3904         [ 0x68, "2004" ],
3905         [ 0x69, "2005" ],
3906         [ 0x6a, "2006" ],
3907         [ 0x6b, "2007" ],
3908         [ 0x6c, "2008" ],
3909         [ 0x6d, "2009" ],
3910         [ 0x6e, "2010" ],
3911         [ 0x6f, "2011" ],
3912         [ 0x70, "2012" ],
3913         [ 0x71, "2013" ],
3914         [ 0x72, "2014" ],
3915         [ 0x73, "2015" ],
3916         [ 0x74, "2016" ],
3917         [ 0x75, "2017" ],
3918         [ 0x76, "2018" ],
3919         [ 0x77, "2019" ],
3920         [ 0x78, "2020" ],
3921         [ 0x79, "2021" ],
3922         [ 0x7a, "2022" ],
3923         [ 0x7b, "2023" ],
3924         [ 0x7c, "2024" ],
3925         [ 0x7d, "2025" ],
3926         [ 0x7e, "2026" ],
3927         [ 0x7f, "2027" ],
3928         [ 0xc0, "1984" ],
3929         [ 0xc1, "1985" ],
3930         [ 0xc2, "1986" ],
3931         [ 0xc3, "1987" ],
3932         [ 0xc4, "1988" ],
3933         [ 0xc5, "1989" ],
3934         [ 0xc6, "1990" ],
3935         [ 0xc7, "1991" ],
3936         [ 0xc8, "1992" ],
3937         [ 0xc9, "1993" ],
3938         [ 0xca, "1994" ],
3939         [ 0xcb, "1995" ],
3940         [ 0xcc, "1996" ],
3941         [ 0xcd, "1997" ],
3942         [ 0xce, "1998" ],
3943         [ 0xcf, "1999" ],
3944         [ 0xd0, "2000" ],
3945         [ 0xd1, "2001" ],
3946         [ 0xd2, "2002" ],
3947         [ 0xd3, "2003" ],
3948         [ 0xd4, "2004" ],
3949         [ 0xd5, "2005" ],
3950         [ 0xd6, "2006" ],
3951         [ 0xd7, "2007" ],
3952         [ 0xd8, "2008" ],
3953         [ 0xd9, "2009" ],
3954         [ 0xda, "2010" ],
3955         [ 0xdb, "2011" ],
3956         [ 0xdc, "2012" ],
3957         [ 0xdd, "2013" ],
3958         [ 0xde, "2014" ],
3959         [ 0xdf, "2015" ],
3960 ])
3961 ##############################################################################
3962 # Structs
3963 ##############################################################################
3964
3965
3966 acctngInfo                      = struct("acctng_info_struct", [
3967         HoldTime,
3968         HoldAmount,
3969         ChargeAmount,
3970         HeldConnectTimeInMinutes,
3971         HeldRequests,
3972         HeldBytesRead,
3973         HeldBytesWritten,
3974 ],"Accounting Information")
3975 AFP10Struct                       = struct("afp_10_struct", [
3976         AFPEntryID,
3977         ParentID,
3978         AttributesDef16,
3979         DataForkLen,
3980         ResourceForkLen,
3981         TotalOffspring,
3982         CreationDate,
3983         LastAccessedDate,
3984         ModifiedDate,
3985         ModifiedTime,
3986         ArchivedDate,
3987         ArchivedTime,
3988         CreatorID,
3989         Reserved4,
3990         FinderAttr,
3991         HorizLocation,
3992         VertLocation,
3993         FileDirWindow,
3994         Reserved16,
3995         LongName,
3996         CreatorID,
3997         ShortName,
3998         AccessPrivileges,
3999 ], "AFP Information" )
4000 AFP20Struct                       = struct("afp_20_struct", [
4001         AFPEntryID,
4002         ParentID,
4003         AttributesDef16,
4004         DataForkLen,
4005         ResourceForkLen,
4006         TotalOffspring,
4007         CreationDate,
4008         LastAccessedDate,
4009         ModifiedDate,
4010         ModifiedTime,
4011         ArchivedDate,
4012         ArchivedTime,
4013         CreatorID,
4014         Reserved4,
4015         FinderAttr,
4016         HorizLocation,
4017         VertLocation,
4018         FileDirWindow,
4019         Reserved16,
4020         LongName,
4021         CreatorID,
4022         ShortName,
4023         AccessPrivileges,
4024         Reserved,
4025         ProDOSInfo,
4026 ], "AFP Information" )
4027 ArchiveDateStruct               = struct("archive_date_struct", [
4028         ArchivedDate,
4029 ])
4030 ArchiveIdStruct                 = struct("archive_id_struct", [
4031         ArchiverID,
4032 ])
4033 ArchiveInfoStruct               = struct("archive_info_struct", [
4034         ArchivedTime,
4035         ArchivedDate,
4036         ArchiverID,
4037 ], "Archive Information")
4038 ArchiveTimeStruct               = struct("archive_time_struct", [
4039         ArchivedTime,
4040 ])
4041 AttributesStruct                = struct("attributes_struct", [
4042         AttributesDef32,
4043         FlagsDef,
4044 ], "Attributes")
4045 authInfo                        = struct("auth_info_struct", [
4046         Status,
4047         Reserved2,
4048         Privileges,
4049 ])
4050 BoardNameStruct                 = struct("board_name_struct", [
4051         DriverBoardName,
4052         DriverShortName,
4053         DriverLogicalName,
4054 ], "Board Name")
4055 CacheInfo                       = struct("cache_info", [
4056         uint32("max_byte_cnt", "Maximum Byte Count"),
4057         uint32("min_num_of_cache_buff", "Minimum Number Of Cache Buffers"),
4058         uint32("min_cache_report_thresh", "Minimum Cache Report Threshold"),
4059         uint32("alloc_waiting", "Allocate Waiting Count"),
4060         uint32("ndirty_blocks", "Number of Dirty Blocks"),
4061         uint32("cache_dirty_wait_time", "Cache Dirty Wait Time"),
4062         uint32("cache_max_concur_writes", "Cache Maximum Concurrent Writes"),
4063         uint32("max_dirty_time", "Maximum Dirty Time"),
4064         uint32("num_dir_cache_buff", "Number Of Directory Cache Buffers"),
4065         uint32("cache_byte_to_block", "Cache Byte To Block Shift Factor"),
4066 ], "Cache Information")
4067 CommonLanStruc                  = struct("common_lan_struct", [
4068         boolean8("not_supported_mask", "Bit Counter Supported"),
4069         Reserved3,
4070         uint32("total_tx_packet_count", "Total Transmit Packet Count"),
4071         uint32("total_rx_packet_count", "Total Receive Packet Count"),
4072         uint32("no_ecb_available_count", "No ECB Available Count"),
4073         uint32("packet_tx_too_big_count", "Transmit Packet Too Big Count"),
4074         uint32("packet_tx_too_small_count", "Transmit Packet Too Small Count"),
4075         uint32("packet_rx_overflow_count", "Receive Packet Overflow Count"),
4076         uint32("packet_rx_too_big_count", "Receive Packet Too Big Count"),
4077         uint32("packet_rs_too_small_count", "Receive Packet Too Small Count"),
4078         uint32("packet_tx_misc_error_count", "Transmit Packet Misc Error Count"),
4079         uint32("packet_rx_misc_error_count", "Receive Packet Misc Error Count"),
4080         uint32("retry_tx_count", "Transmit Retry Count"),
4081         uint32("checksum_error_count", "Checksum Error Count"),
4082         uint32("hardware_rx_mismatch_count", "Hardware Receive Mismatch Count"),
4083 ], "Common LAN Information")
4084 CompDeCompStat                  = struct("comp_d_comp_stat", [
4085         uint32("cmphitickhigh", "Compress High Tick"),
4086         uint32("cmphitickcnt", "Compress High Tick Count"),
4087         uint32("cmpbyteincount", "Compress Byte In Count"),
4088         uint32("cmpbyteoutcnt", "Compress Byte Out Count"),
4089         uint32("cmphibyteincnt", "Compress High Byte In Count"),
4090         uint32("cmphibyteoutcnt", "Compress High Byte Out Count"),
4091         uint32("decphitickhigh", "DeCompress High Tick"),
4092         uint32("decphitickcnt", "DeCompress High Tick Count"),
4093         uint32("decpbyteincount", "DeCompress Byte In Count"),
4094         uint32("decpbyteoutcnt", "DeCompress Byte Out Count"),
4095         uint32("decphibyteincnt", "DeCompress High Byte In Count"),
4096         uint32("decphibyteoutcnt", "DeCompress High Byte Out Count"),
4097 ], "Compression/Decompression Information")
4098 ConnFileStruct                  = struct("conn_file_struct", [
4099         ConnectionNumberWord,
4100         TaskNumByte,
4101         LockType,
4102         AccessControl,
4103         LockFlag,
4104 ], "File Connection Information")
4105 ConnStruct                      = struct("conn_struct", [
4106         TaskNumByte,
4107         LockType,
4108         AccessControl,
4109         LockFlag,
4110         VolumeNumber,
4111         DirectoryEntryNumberWord,
4112         FileName14,
4113 ], "Connection Information")
4114 ConnTaskStruct                  = struct("conn_task_struct", [
4115         ConnectionNumberByte,
4116         TaskNumByte,
4117 ], "Task Information")
4118 Counters                        = struct("counters_struct", [
4119         uint32("read_exist_blck", "Read Existing Block Count"),
4120         uint32("read_exist_write_wait", "Read Existing Write Wait Count"),
4121         uint32("read_exist_part_read", "Read Existing Partial Read Count"),
4122         uint32("read_exist_read_err", "Read Existing Read Error Count"),
4123         uint32("wrt_blck_cnt", "Write Block Count"),
4124         uint32("wrt_entire_blck", "Write Entire Block Count"),
4125         uint32("internl_dsk_get", "Internal Disk Get Count"),
4126         uint32("internl_dsk_get_need_to_alloc", "Internal Disk Get Need To Allocate Count"),
4127         uint32("internl_dsk_get_someone_beat", "Internal Disk Get Someone Beat My Count"),
4128         uint32("internl_dsk_get_part_read", "Internal Disk Get Partial Read Count"),
4129         uint32("internl_dsk_get_read_err", "Internal Disk Get Read Error Count"),
4130         uint32("async_internl_dsk_get", "Async Internal Disk Get Count"),
4131         uint32("async_internl_dsk_get_need_to_alloc", "Async Internal Disk Get Need To Alloc"),
4132         uint32("async_internl_dsk_get_someone_beat", "Async Internal Disk Get Someone Beat Me"),
4133         uint32("err_doing_async_read", "Error Doing Async Read Count"),
4134         uint32("internl_dsk_get_no_read", "Internal Disk Get No Read Count"),
4135         uint32("internl_dsk_get_no_read_alloc", "Internal Disk Get No Read Allocate Count"),
4136         uint32("internl_dsk_get_no_read_someone_beat", "Internal Disk Get No Read Someone Beat Me Count"),
4137         uint32("internl_dsk_write", "Internal Disk Write Count"),
4138         uint32("internl_dsk_write_alloc", "Internal Disk Write Allocate Count"),
4139         uint32("internl_dsk_write_someone_beat", "Internal Disk Write Someone Beat Me Count"),
4140         uint32("write_err", "Write Error Count"),
4141         uint32("wait_on_sema", "Wait On Semaphore Count"),
4142         uint32("alloc_blck_i_had_to_wait_for", "Allocate Block I Had To Wait For Someone Count"),
4143         uint32("alloc_blck", "Allocate Block Count"),
4144         uint32("alloc_blck_i_had_to_wait", "Allocate Block I Had To Wait Count"),
4145 ], "Disk Counter Information")
4146 CPUInformation                  = struct("cpu_information", [
4147         PageTableOwnerFlag,
4148         CPUType,
4149         Reserved3,
4150         CoprocessorFlag,
4151         BusType,
4152         Reserved3,
4153         IOEngineFlag,
4154         Reserved3,
4155         FSEngineFlag,
4156         Reserved3,
4157         NonDedFlag,
4158         Reserved3,
4159         CPUString,
4160         CoProcessorString,
4161         BusString,
4162 ], "CPU Information")
4163 CreationDateStruct              = struct("creation_date_struct", [
4164         CreationDate,
4165 ])
4166 CreationInfoStruct              = struct("creation_info_struct", [
4167         CreationTime,
4168         CreationDate,
4169         CreatorID,
4170 ], "Creation Information")
4171 CreationTimeStruct              = struct("creation_time_struct", [
4172         CreationTime,
4173 ])
4174 CustomCntsInfo                  = struct("custom_cnts_info", [
4175         CustomVariableValue,
4176         CustomString,
4177 ], "Custom Counters" )
4178 DataStreamInfo                  = struct("data_stream_info", [
4179         AssociatedNameSpace,
4180         DataStreamName
4181 ])
4182 DataStreamSizeStruct            = struct("data_stream_size_struct", [
4183         DataStreamSize,
4184 ])
4185 DirCacheInfo                    = struct("dir_cache_info", [
4186         uint32("min_time_since_file_delete", "Minimum Time Since File Delete"),
4187         uint32("abs_min_time_since_file_delete", "Absolute Minimum Time Since File Delete"),
4188         uint32("min_num_of_dir_cache_buff", "Minimum Number Of Directory Cache Buffers"),
4189         uint32("max_num_of_dir_cache_buff", "Maximum Number Of Directory Cache Buffers"),
4190         uint32("num_of_dir_cache_buff", "Number Of Directory Cache Buffers"),
4191         uint32("dc_min_non_ref_time", "DC Minimum Non-Referenced Time"),
4192         uint32("dc_wait_time_before_new_buff", "DC Wait Time Before New Buffer"),
4193         uint32("dc_max_concurrent_writes", "DC Maximum Concurrent Writes"),
4194         uint32("dc_dirty_wait_time", "DC Dirty Wait Time"),
4195         uint32("dc_double_read_flag", "DC Double Read Flag"),
4196         uint32("map_hash_node_count", "Map Hash Node Count"),
4197         uint32("space_restriction_node_count", "Space Restriction Node Count"),
4198         uint32("trustee_list_node_count", "Trustee List Node Count"),
4199         uint32("percent_of_vol_used_by_dirs", "Percent Of Volume Used By Directories"),
4200 ], "Directory Cache Information")
4201 DirEntryStruct                  = struct("dir_entry_struct", [
4202         DirectoryEntryNumber,
4203         DOSDirectoryEntryNumber,
4204         VolumeNumberLong,
4205 ], "Directory Entry Information")
4206 DirectoryInstance               = struct("directory_instance", [
4207         SearchSequenceWord,
4208         DirectoryID,
4209         DirectoryName14,
4210         DirectoryAttributes,
4211         DirectoryAccessRights,
4212         endian(CreationDate, BE),
4213         endian(AccessDate, BE),
4214         CreatorID,
4215         Reserved2,
4216         DirectoryStamp,
4217 ], "Directory Information")
4218 DMInfoLevel0                    = struct("dm_info_level_0", [
4219         uint32("io_flag", "IO Flag"),
4220         uint32("sm_info_size", "Storage Module Information Size"),
4221         uint32("avail_space", "Available Space"),
4222         uint32("used_space", "Used Space"),
4223         stringz("s_module_name", "Storage Module Name"),
4224         uint8("s_m_info", "Storage Media Information"),
4225 ])
4226 DMInfoLevel1                    = struct("dm_info_level_1", [
4227         NumberOfSMs,
4228         SMIDs,
4229 ])
4230 DMInfoLevel2                    = struct("dm_info_level_2", [
4231         Name,
4232 ])
4233 DOSDirectoryEntryStruct         = struct("dos_directory_entry_struct", [
4234         AttributesDef32,
4235         UniqueID,
4236         PurgeFlags,
4237         DestNameSpace,
4238         DirectoryNameLen,
4239         DirectoryName,
4240         CreationTime,
4241         CreationDate,
4242         CreatorID,
4243         ArchivedTime,
4244         ArchivedDate,
4245         ArchiverID,
4246         UpdateTime,
4247         UpdateDate,
4248         NextTrusteeEntry,
4249         Reserved48,
4250         InheritedRightsMask,
4251 ], "DOS Directory Information")
4252 DOSFileEntryStruct              = struct("dos_file_entry_struct", [
4253         AttributesDef32,
4254         UniqueID,
4255         PurgeFlags,
4256         DestNameSpace,
4257         NameLen,
4258         Name12,
4259         CreationTime,
4260         CreationDate,
4261         CreatorID,
4262         ArchivedTime,
4263         ArchivedDate,
4264         ArchiverID,
4265         UpdateTime,
4266         UpdateDate,
4267         UpdateID,
4268         FileSize,
4269         DataForkFirstFAT,
4270         NextTrusteeEntry,
4271         Reserved36,
4272         InheritedRightsMask,
4273         LastAccessedDate,
4274         Reserved28,
4275         PrimaryEntry,
4276         NameList,
4277 ], "DOS File Information")
4278 DSSpaceAllocateStruct           = struct("ds_space_alloc_struct", [
4279         DataStreamSpaceAlloc,
4280 ])
4281 DynMemStruct                    = struct("dyn_mem_struct", [
4282         uint32("dyn_mem_struct_total", "Total Dynamic Space" ),
4283         uint32("dyn_mem_struct_max", "Max Used Dynamic Space" ),
4284         uint32("dyn_mem_struct_cur", "Current Used Dynamic Space" ),
4285 ], "Dynamic Memory Information")
4286 EAInfoStruct                    = struct("ea_info_struct", [
4287         EADataSize,
4288         EACount,
4289         EAKeySize,
4290 ], "Extended Attribute Information")
4291 ExtraCacheCntrs                 = struct("extra_cache_cntrs", [
4292         uint32("internl_dsk_get_no_wait", "Internal Disk Get No Wait Count"),
4293         uint32("internl_dsk_get_no_wait_need", "Internal Disk Get No Wait Need To Allocate Count"),
4294         uint32("internl_dsk_get_no_wait_no_blk", "Internal Disk Get No Wait No Block Count"),
4295         uint32("id_get_no_read_no_wait", "ID Get No Read No Wait Count"),
4296         uint32("id_get_no_read_no_wait_sema", "ID Get No Read No Wait Semaphored Count"),
4297         uint32("id_get_no_read_no_wait_buffer", "ID Get No Read No Wait No Buffer Count"),
4298         uint32("id_get_no_read_no_wait_alloc", "ID Get No Read No Wait Allocate Count"),
4299         uint32("id_get_no_read_no_wait_no_alloc", "ID Get No Read No Wait No Alloc Count"),
4300         uint32("id_get_no_read_no_wait_no_alloc_sema", "ID Get No Read No Wait No Alloc Semaphored Count"),
4301         uint32("id_get_no_read_no_wait_no_alloc_alloc", "ID Get No Read No Wait No Alloc Allocate Count"),
4302 ], "Extra Cache Counters Information")
4303
4304
4305 ReferenceIDStruct               = struct("ref_id_struct", [
4306         CurrentReferenceID,
4307 ])
4308 NSAttributeStruct               = struct("ns_attrib_struct", [
4309         AttributesDef32,
4310 ])
4311 DStreamActual                   = struct("d_stream_actual", [
4312         Reserved12,
4313         # Need to look into how to format this correctly
4314 ])
4315 DStreamLogical                  = struct("d_string_logical", [
4316         Reserved12,
4317         # Need to look into how to format this correctly
4318 ])
4319 LastUpdatedInSecondsStruct      = struct("last_update_in_seconds_struct", [
4320         SecondsRelativeToTheYear2000,
4321 ])
4322 DOSNameStruct                   = struct("dos_name_struct", [
4323         FileName,
4324 ], "DOS File Name")
4325 FlushTimeStruct                 = struct("flush_time_struct", [
4326         FlushTime,
4327 ])
4328 ParentBaseIDStruct              = struct("parent_base_id_struct", [
4329         ParentBaseID,
4330 ])
4331 MacFinderInfoStruct             = struct("mac_finder_info_struct", [
4332         MacFinderInfo,
4333 ])
4334 SiblingCountStruct              = struct("sibling_count_struct", [
4335         SiblingCount,
4336 ])
4337 EffectiveRightsStruct           = struct("eff_rights_struct", [
4338         EffectiveRights,
4339         Reserved3,
4340 ])
4341 MacTimeStruct                   = struct("mac_time_struct", [
4342         MACCreateDate,
4343         MACCreateTime,
4344         MACBackupDate,
4345         MACBackupTime,
4346 ])
4347 LastAccessedTimeStruct          = struct("last_access_time_struct", [
4348         LastAccessedTime,
4349 ])
4350
4351
4352
4353 FileAttributesStruct            = struct("file_attributes_struct", [
4354         AttributesDef32,
4355 ])
4356 FileInfoStruct                  = struct("file_info_struct", [
4357         ParentID,
4358         DirectoryEntryNumber,
4359         TotalBlocksToDecompress,
4360         CurrentBlockBeingDecompressed,
4361 ], "File Information")
4362 FileInstance                    = struct("file_instance", [
4363         SearchSequenceWord,
4364         DirectoryID,
4365         FileName14,
4366         AttributesDef,
4367         FileMode,
4368         FileSize,
4369         endian(CreationDate, BE),
4370         endian(AccessDate, BE),
4371         endian(UpdateDate, BE),
4372         endian(UpdateTime, BE),
4373 ], "File Instance")
4374 FileNameStruct                  = struct("file_name_struct", [
4375         FileName,
4376 ], "File Name")
4377 FileServerCounters              = struct("file_server_counters", [
4378         uint16("too_many_hops", "Too Many Hops"),
4379         uint16("unknown_network", "Unknown Network"),
4380         uint16("no_space_for_service", "No Space For Service"),
4381         uint16("no_receive_buff", "No Receive Buffers"),
4382         uint16("not_my_network", "Not My Network"),
4383         uint32("netbios_progated", "NetBIOS Propagated Count"),
4384         uint32("ttl_pckts_srvcd", "Total Packets Serviced"),
4385         uint32("ttl_pckts_routed", "Total Packets Routed"),
4386 ], "File Server Counters")
4387 FileSystemInfo                  = struct("file_system_info", [
4388         uint32("fat_moved", "Number of times the OS has move the location of FAT"),
4389         uint32("fat_write_err", "Number of write errors in both original and mirrored copies of FAT"),
4390         uint32("someone_else_did_it_0", "Someone Else Did It Count 0"),
4391         uint32("someone_else_did_it_1", "Someone Else Did It Count 1"),
4392         uint32("someone_else_did_it_2", "Someone Else Did It Count 2"),
4393         uint32("i_ran_out_someone_else_did_it_0", "I Ran Out Someone Else Did It Count 0"),
4394         uint32("i_ran_out_someone_else_did_it_1", "I Ran Out Someone Else Did It Count 1"),
4395         uint32("i_ran_out_someone_else_did_it_2", "I Ran Out Someone Else Did It Count 2"),
4396         uint32("turbo_fat_build_failed", "Turbo FAT Build Failed Count"),
4397         uint32("extra_use_count_node_count", "Errors allocating a use count node for TTS"),
4398         uint32("extra_extra_use_count_node_count", "Errors allocating an additional use count node for TTS"),
4399         uint32("error_read_last_fat", "Error Reading Last FAT Count"),
4400         uint32("someone_else_using_this_file", "Someone Else Using This File Count"),
4401 ], "File System Information")
4402 GenericInfoDef                  = struct("generic_info_def", [
4403         fw_string("generic_label", "Label", 64),
4404         uint32("generic_ident_type", "Identification Type"),
4405         uint32("generic_ident_time", "Identification Time"),
4406         uint32("generic_media_type", "Media Type"),
4407         uint32("generic_cartridge_type", "Cartridge Type"),
4408         uint32("generic_unit_size", "Unit Size"),
4409         uint32("generic_block_size", "Block Size"),
4410         uint32("generic_capacity", "Capacity"),
4411         uint32("generic_pref_unit_size", "Preferred Unit Size"),
4412         fw_string("generic_name", "Name",64),
4413         uint32("generic_type", "Type"),
4414         uint32("generic_status", "Status"),
4415         uint32("generic_func_mask", "Function Mask"),
4416         uint32("generic_ctl_mask", "Control Mask"),
4417         uint32("generic_parent_count", "Parent Count"),
4418         uint32("generic_sib_count", "Sibling Count"),
4419         uint32("generic_child_count", "Child Count"),
4420         uint32("generic_spec_info_sz", "Specific Information Size"),
4421         uint32("generic_object_uniq_id", "Unique Object ID"),
4422         uint32("generic_media_slot", "Media Slot"),
4423 ], "Generic Information")
4424 HandleInfoLevel0                = struct("handle_info_level_0", [
4425 #        DataStream,
4426 ])
4427 HandleInfoLevel1                = struct("handle_info_level_1", [
4428         DataStream,
4429 ])
4430 HandleInfoLevel2                = struct("handle_info_level_2", [
4431         DOSDirectoryBase,
4432         NameSpace,
4433         DataStream,
4434 ])
4435 HandleInfoLevel3                = struct("handle_info_level_3", [
4436         DOSDirectoryBase,
4437         NameSpace,
4438 ])
4439 HandleInfoLevel4                = struct("handle_info_level_4", [
4440         DOSDirectoryBase,
4441         NameSpace,
4442         ParentDirectoryBase,
4443         ParentDOSDirectoryBase,
4444 ])
4445 HandleInfoLevel5                = struct("handle_info_level_5", [
4446         DOSDirectoryBase,
4447         NameSpace,
4448         DataStream,
4449         ParentDirectoryBase,
4450         ParentDOSDirectoryBase,
4451 ])
4452 IPXInformation                  = struct("ipx_information", [
4453         uint32("ipx_send_pkt", "IPX Send Packet Count"),
4454         uint16("ipx_malform_pkt", "IPX Malformed Packet Count"),
4455         uint32("ipx_get_ecb_req", "IPX Get ECB Request Count"),
4456         uint32("ipx_get_ecb_fail", "IPX Get ECB Fail Count"),
4457         uint32("ipx_aes_event", "IPX AES Event Count"),
4458         uint16("ipx_postponed_aes", "IPX Postponed AES Count"),
4459         uint16("ipx_max_conf_sock", "IPX Max Configured Socket Count"),
4460         uint16("ipx_max_open_sock", "IPX Max Open Socket Count"),
4461         uint16("ipx_open_sock_fail", "IPX Open Socket Fail Count"),
4462         uint32("ipx_listen_ecb", "IPX Listen ECB Count"),
4463         uint16("ipx_ecb_cancel_fail", "IPX ECB Cancel Fail Count"),
4464         uint16("ipx_get_lcl_targ_fail", "IPX Get Local Target Fail Count"),
4465 ], "IPX Information")
4466 JobEntryTime                    = struct("job_entry_time", [
4467         Year,
4468         Month,
4469         Day,
4470         Hour,
4471         Minute,
4472         Second,
4473 ], "Job Entry Time")
4474 JobStruct3x                       = struct("job_struct_3x", [
4475     RecordInUseFlag,
4476     PreviousRecord,
4477     NextRecord,
4478         ClientStationLong,
4479         ClientTaskNumberLong,
4480         ClientIDNumber,
4481         TargetServerIDNumber,
4482         TargetExecutionTime,
4483         JobEntryTime,
4484         JobNumberLong,
4485         JobType,
4486         JobPositionWord,
4487         JobControlFlagsWord,
4488         JobFileName,
4489         JobFileHandleLong,
4490         ServerStationLong,
4491         ServerTaskNumberLong,
4492         ServerID,
4493         TextJobDescription,
4494         ClientRecordArea,
4495 ], "Job Information")
4496 JobStruct                       = struct("job_struct", [
4497         ClientStation,
4498         ClientTaskNumber,
4499         ClientIDNumber,
4500         TargetServerIDNumber,
4501         TargetExecutionTime,
4502         JobEntryTime,
4503         JobNumber,
4504         JobType,
4505         JobPosition,
4506         JobControlFlags,
4507         JobFileName,
4508         JobFileHandle,
4509         ServerStation,
4510         ServerTaskNumber,
4511         ServerID,
4512         TextJobDescription,
4513         ClientRecordArea,
4514 ], "Job Information")
4515 JobStructNew                    = struct("job_struct_new", [
4516         RecordInUseFlag,
4517         PreviousRecord,
4518         NextRecord,
4519         ClientStationLong,
4520         ClientTaskNumberLong,
4521         ClientIDNumber,
4522         TargetServerIDNumber,
4523         TargetExecutionTime,
4524         JobEntryTime,
4525         JobNumberLong,
4526         JobType,
4527         JobPositionWord,
4528         JobControlFlagsWord,
4529         JobFileName,
4530         JobFileHandleLong,
4531         ServerStationLong,
4532         ServerTaskNumberLong,
4533         ServerID,
4534 ], "Job Information")
4535 KnownRoutes                     = struct("known_routes", [
4536         NetIDNumber,
4537         HopsToNet,
4538         NetStatus,
4539         TimeToNet,
4540 ], "Known Routes")
4541 KnownServStruc                  = struct("known_server_struct", [
4542         ServerAddress,
4543         HopsToNet,
4544         ServerNameStringz,
4545 ], "Known Servers")
4546 LANConfigInfo                   = struct("lan_cfg_info", [
4547         LANdriverCFG_MajorVersion,
4548         LANdriverCFG_MinorVersion,
4549         LANdriverNodeAddress,
4550         Reserved,
4551         LANdriverModeFlags,
4552         LANdriverBoardNumber,
4553         LANdriverBoardInstance,
4554         LANdriverMaximumSize,
4555         LANdriverMaxRecvSize,
4556         LANdriverRecvSize,
4557         LANdriverCardID,
4558         LANdriverMediaID,
4559         LANdriverTransportTime,
4560         LANdriverSrcRouting,
4561         LANdriverLineSpeed,
4562         LANdriverReserved,
4563         LANdriverMajorVersion,
4564         LANdriverMinorVersion,
4565         LANdriverFlags,
4566         LANdriverSendRetries,
4567         LANdriverLink,
4568         LANdriverSharingFlags,
4569         LANdriverSlot,
4570         LANdriverIOPortsAndRanges1,
4571         LANdriverIOPortsAndRanges2,
4572         LANdriverIOPortsAndRanges3,
4573         LANdriverIOPortsAndRanges4,
4574         LANdriverMemoryDecode0,
4575         LANdriverMemoryLength0,
4576         LANdriverMemoryDecode1,
4577         LANdriverMemoryLength1,
4578         LANdriverInterrupt1,
4579         LANdriverInterrupt2,
4580         LANdriverDMAUsage1,
4581         LANdriverDMAUsage2,
4582         LANdriverLogicalName,
4583         LANdriverIOReserved,
4584         LANdriverCardName,
4585 ], "LAN Configuration Information")
4586 LastAccessStruct                = struct("last_access_struct", [
4587         LastAccessedDate,
4588 ])
4589 lockInfo                        = struct("lock_info_struct", [
4590         LogicalLockThreshold,
4591         PhysicalLockThreshold,
4592         FileLockCount,
4593         RecordLockCount,
4594 ], "Lock Information")
4595 LockStruct                      = struct("lock_struct", [
4596         TaskNumByte,
4597         LockType,
4598         RecordStart,
4599         RecordEnd,
4600 ], "Locks")
4601 LoginTime                       = struct("login_time", [
4602         Year,
4603         Month,
4604         Day,
4605         Hour,
4606         Minute,
4607         Second,
4608         DayOfWeek,
4609 ], "Login Time")
4610 LogLockStruct                   = struct("log_lock_struct", [
4611         TaskNumByte,
4612         LockStatus,
4613         LockName,
4614 ], "Logical Locks")
4615 LogRecStruct                    = struct("log_rec_struct", [
4616         ConnectionNumberWord,
4617         TaskNumByte,
4618         LockStatus,
4619 ], "Logical Record Locks")
4620 LSLInformation                  = struct("lsl_information", [
4621         uint32("rx_buffers", "Receive Buffers"),
4622         uint32("rx_buffers_75", "Receive Buffers Warning Level"),
4623         uint32("rx_buffers_checked_out", "Receive Buffers Checked Out Count"),
4624         uint32("rx_buffer_size", "Receive Buffer Size"),
4625         uint32("max_phy_packet_size", "Maximum Physical Packet Size"),
4626         uint32("last_time_rx_buff_was_alloc", "Last Time a Receive Buffer was Allocated"),
4627         uint32("max_num_of_protocols", "Maximum Number of Protocols"),
4628         uint32("max_num_of_media_types", "Maximum Number of Media Types"),
4629         uint32("total_tx_packets", "Total Transmit Packets"),
4630         uint32("get_ecb_buf", "Get ECB Buffers"),
4631         uint32("get_ecb_fails", "Get ECB Failures"),
4632         uint32("aes_event_count", "AES Event Count"),
4633         uint32("post_poned_events", "Postponed Events"),
4634         uint32("ecb_cxl_fails", "ECB Cancel Failures"),
4635         uint32("valid_bfrs_reused", "Valid Buffers Reused"),
4636         uint32("enqueued_send_cnt", "Enqueued Send Count"),
4637         uint32("total_rx_packets", "Total Receive Packets"),
4638         uint32("unclaimed_packets", "Unclaimed Packets"),
4639         uint8("stat_table_major_version", "Statistics Table Major Version"),
4640         uint8("stat_table_minor_version", "Statistics Table Minor Version"),
4641 ], "LSL Information")
4642 MaximumSpaceStruct              = struct("max_space_struct", [
4643         MaxSpace,
4644 ])
4645 MemoryCounters                  = struct("memory_counters", [
4646         uint32("orig_num_cache_buff", "Original Number Of Cache Buffers"),
4647         uint32("curr_num_cache_buff", "Current Number Of Cache Buffers"),
4648         uint32("cache_dirty_block_thresh", "Cache Dirty Block Threshold"),
4649         uint32("wait_node", "Wait Node Count"),
4650         uint32("wait_node_alloc_fail", "Wait Node Alloc Failure Count"),
4651         uint32("move_cache_node", "Move Cache Node Count"),
4652         uint32("move_cache_node_from_avai", "Move Cache Node From Avail Count"),
4653         uint32("accel_cache_node_write", "Accelerate Cache Node Write Count"),
4654         uint32("rem_cache_node", "Remove Cache Node Count"),
4655         uint32("rem_cache_node_from_avail", "Remove Cache Node From Avail Count"),
4656 ], "Memory Counters")
4657 MLIDBoardInfo                   = struct("mlid_board_info", [
4658         uint32("protocol_board_num", "Protocol Board Number"),
4659         uint16("protocol_number", "Protocol Number"),
4660         bytes("protocol_id", "Protocol ID", 6),
4661         nstring8("protocol_name", "Protocol Name"),
4662 ], "MLID Board Information")
4663 ModifyInfoStruct                = struct("modify_info_struct", [
4664         ModifiedTime,
4665         ModifiedDate,
4666         ModifierID,
4667         LastAccessedDate,
4668 ], "Modification Information")
4669 nameInfo                        = struct("name_info_struct", [
4670         ObjectType,
4671         nstring8("login_name", "Login Name"),
4672 ], "Name Information")
4673 NCPNetworkAddress               = struct("ncp_network_address_struct", [
4674         TransportType,
4675         Reserved3,
4676         NetAddress,
4677 ], "Network Address")
4678
4679 netAddr                         = struct("net_addr_struct", [
4680         TransportType,
4681         nbytes32("transport_addr", "Transport Address"),
4682 ], "Network Address")
4683
4684 NetWareInformationStruct        = struct("netware_information_struct", [
4685         DataStreamSpaceAlloc,           # (Data Stream Alloc Bit)
4686         AttributesDef32,                # (Attributes Bit)
4687         FlagsDef,
4688         DataStreamSize,                 # (Data Stream Size Bit)
4689         TotalDataStreamDiskSpaceAlloc,  # (Total Stream Size Bit)
4690         NumberOfDataStreams,
4691         CreationTime,                   # (Creation Bit)
4692         CreationDate,
4693         CreatorID,
4694         ModifiedTime,                   # (Modify Bit)
4695         ModifiedDate,
4696         ModifierID,
4697         LastAccessedDate,
4698         ArchivedTime,                   # (Archive Bit)
4699         ArchivedDate,
4700         ArchiverID,
4701         InheritedRightsMask,            # (Rights Bit)
4702         DirectoryEntryNumber,           # (Directory Entry Bit)
4703         DOSDirectoryEntryNumber,
4704         VolumeNumberLong,
4705         EADataSize,                     # (Extended Attribute Bit)
4706         EACount,
4707         EAKeySize,
4708         CreatorNameSpaceNumber,         # (Name Space Bit)
4709         Reserved3,
4710 ], "NetWare Information")
4711 NLMInformation                  = struct("nlm_information", [
4712         IdentificationNumber,
4713         NLMFlags,
4714         Reserved3,
4715         NLMType,
4716         Reserved3,
4717         ParentID,
4718         MajorVersion,
4719         MinorVersion,
4720         Revision,
4721         Year,
4722         Reserved3,
4723         Month,
4724         Reserved3,
4725         Day,
4726         Reserved3,
4727         AllocAvailByte,
4728         AllocFreeCount,
4729         LastGarbCollect,
4730         MessageLanguage,
4731         NumberOfReferencedPublics,
4732 ], "NLM Information")
4733 NSInfoStruct                    = struct("ns_info_struct", [
4734         NameSpace,
4735         Reserved3,
4736 ])
4737 NWAuditStatus                   = struct("nw_audit_status", [
4738         AuditVersionDate,
4739         AuditFileVersionDate,
4740         val_string16("audit_enable_flag", "Auditing Enabled Flag", [
4741                 [ 0x0000, "Auditing Disabled" ],
4742                 [ 0x0100, "Auditing Enabled" ],
4743         ]),
4744         Reserved2,
4745         uint32("audit_file_size", "Audit File Size"),
4746         uint32("modified_counter", "Modified Counter"),
4747         uint32("audit_file_max_size", "Audit File Maximum Size"),
4748         uint32("audit_file_size_threshold", "Audit File Size Threshold"),
4749         uint32("audit_record_count", "Audit Record Count"),
4750         uint32("auditing_flags", "Auditing Flags"),
4751 ], "NetWare Audit Status")
4752 ObjectSecurityStruct            = struct("object_security_struct", [
4753         ObjectSecurity,
4754 ])
4755 ObjectFlagsStruct               = struct("object_flags_struct", [
4756         ObjectFlags,
4757 ])
4758 ObjectTypeStruct                = struct("object_type_struct", [
4759         ObjectType,
4760         Reserved2,
4761 ])
4762 ObjectNameStruct                = struct("object_name_struct", [
4763         ObjectNameStringz,
4764 ])
4765 ObjectIDStruct                  = struct("object_id_struct", [
4766         ObjectID,
4767         Restriction,
4768 ])
4769 OpnFilesStruct                  = struct("opn_files_struct", [
4770         TaskNumberWord,
4771         LockType,
4772         AccessControl,
4773         LockFlag,
4774         VolumeNumber,
4775         DOSParentDirectoryEntry,
4776         DOSDirectoryEntry,
4777         ForkCount,
4778         NameSpace,
4779         FileName,
4780 ], "Open Files Information")
4781 OwnerIDStruct                   = struct("owner_id_struct", [
4782         CreatorID,
4783 ])
4784 PacketBurstInformation          = struct("packet_burst_information", [
4785         uint32("big_invalid_slot", "Big Invalid Slot Count"),
4786         uint32("big_forged_packet", "Big Forged Packet Count"),
4787         uint32("big_invalid_packet", "Big Invalid Packet Count"),
4788         uint32("big_still_transmitting", "Big Still Transmitting Count"),
4789         uint32("still_doing_the_last_req", "Still Doing The Last Request Count"),
4790         uint32("invalid_control_req", "Invalid Control Request Count"),
4791         uint32("control_invalid_message_number", "Control Invalid Message Number Count"),
4792         uint32("control_being_torn_down", "Control Being Torn Down Count"),
4793         uint32("big_repeat_the_file_read", "Big Repeat the File Read Count"),
4794         uint32("big_send_extra_cc_count", "Big Send Extra CC Count"),
4795         uint32("big_return_abort_mess", "Big Return Abort Message Count"),
4796         uint32("big_read_invalid_mess", "Big Read Invalid Message Number Count"),
4797         uint32("big_read_do_it_over", "Big Read Do It Over Count"),
4798         uint32("big_read_being_torn_down", "Big Read Being Torn Down Count"),
4799         uint32("previous_control_packet", "Previous Control Packet Count"),
4800         uint32("send_hold_off_message", "Send Hold Off Message Count"),
4801         uint32("big_read_no_data_avail", "Big Read No Data Available Count"),
4802         uint32("big_read_trying_to_read", "Big Read Trying To Read Too Much Count"),
4803         uint32("async_read_error", "Async Read Error Count"),
4804         uint32("big_read_phy_read_err", "Big Read Physical Read Error Count"),
4805         uint32("ctl_bad_ack_frag_list", "Control Bad ACK Fragment List Count"),
4806         uint32("ctl_no_data_read", "Control No Data Read Count"),
4807         uint32("write_dup_req", "Write Duplicate Request Count"),
4808         uint32("shouldnt_be_ack_here", "Shouldn't Be ACKing Here Count"),
4809         uint32("write_incon_packet_len", "Write Inconsistent Packet Lengths Count"),
4810         uint32("first_packet_isnt_a_write", "First Packet Isn't A Write Count"),
4811         uint32("write_trash_dup_req", "Write Trashed Duplicate Request Count"),
4812         uint32("big_write_inv_message_num", "Big Write Invalid Message Number Count"),
4813         uint32("big_write_being_torn_down", "Big Write Being Torn Down Count"),
4814         uint32("big_write_being_abort", "Big Write Being Aborted Count"),
4815         uint32("zero_ack_frag", "Zero ACK Fragment Count"),
4816         uint32("write_curr_trans", "Write Currently Transmitting Count"),
4817         uint32("try_to_write_too_much", "Trying To Write Too Much Count"),
4818         uint32("write_out_of_mem_for_ctl_nodes", "Write Out Of Memory For Control Nodes Count"),
4819         uint32("write_didnt_need_this_frag", "Write Didn't Need This Fragment Count"),
4820         uint32("write_too_many_buf_check", "Write Too Many Buffers Checked Out Count"),
4821         uint32("write_timeout", "Write Time Out Count"),
4822         uint32("write_got_an_ack0", "Write Got An ACK Count 0"),
4823         uint32("write_got_an_ack1", "Write Got An ACK Count 1"),
4824         uint32("poll_abort_conn", "Poller Aborted The Connnection Count"),
4825         uint32("may_had_out_of_order", "Maybe Had Out Of Order Writes Count"),
4826         uint32("had_an_out_of_order", "Had An Out Of Order Write Count"),
4827         uint32("moved_the_ack_bit_dn", "Moved The ACK Bit Down Count"),
4828         uint32("bumped_out_of_order", "Bumped Out Of Order Write Count"),
4829         uint32("poll_rem_old_out_of_order", "Poller Removed Old Out Of Order Count"),
4830         uint32("write_didnt_need_but_req_ack", "Write Didn't Need But Requested ACK Count"),
4831         uint32("write_trash_packet", "Write Trashed Packet Count"),
4832         uint32("too_many_ack_frag", "Too Many ACK Fragments Count"),
4833         uint32("saved_an_out_of_order_packet", "Saved An Out Of Order Packet Count"),
4834         uint32("conn_being_aborted", "Connection Being Aborted Count"),
4835 ], "Packet Burst Information")
4836
4837 PadDSSpaceAllocate              = struct("pad_ds_space_alloc", [
4838     Reserved4,
4839 ])
4840 PadAttributes                   = struct("pad_attributes", [
4841     Reserved6,
4842 ])
4843 PadDataStreamSize               = struct("pad_data_stream_size", [
4844     Reserved4,
4845 ])
4846 PadTotalStreamSize              = struct("pad_total_stream_size", [
4847     Reserved6,
4848 ])
4849 PadCreationInfo                 = struct("pad_creation_info", [
4850     Reserved8,
4851 ])
4852 PadModifyInfo                   = struct("pad_modify_info", [
4853     Reserved10,
4854 ])
4855 PadArchiveInfo                  = struct("pad_archive_info", [
4856     Reserved8,
4857 ])
4858 PadRightsInfo                   = struct("pad_rights_info", [
4859     Reserved2,
4860 ])
4861 PadDirEntry                     = struct("pad_dir_entry", [
4862     Reserved12,
4863 ])
4864 PadEAInfo                       = struct("pad_ea_info", [
4865     Reserved12,
4866 ])
4867 PadNSInfo                       = struct("pad_ns_info", [
4868     Reserved4,
4869 ])
4870 PhyLockStruct                   = struct("phy_lock_struct", [
4871         LoggedCount,
4872         ShareableLockCount,
4873         RecordStart,
4874         RecordEnd,
4875         LogicalConnectionNumber,
4876         TaskNumByte,
4877         LockType,
4878 ], "Physical Locks")
4879 printInfo                       = struct("print_info_struct", [
4880         PrintFlags,
4881         TabSize,
4882         Copies,
4883         PrintToFileFlag,
4884         BannerName,
4885         TargetPrinter,
4886         FormType,
4887 ], "Print Information")
4888 RightsInfoStruct                = struct("rights_info_struct", [
4889         InheritedRightsMask,
4890 ])
4891 RoutersInfo                     = struct("routers_info", [
4892         bytes("node", "Node", 6),
4893         ConnectedLAN,
4894         uint16("route_hops", "Hop Count"),
4895         uint16("route_time", "Route Time"),
4896 ], "Router Information")
4897 RTagStructure                   = struct("r_tag_struct", [
4898         RTagNumber,
4899         ResourceSignature,
4900         ResourceCount,
4901         ResourceName,
4902 ], "Resource Tag")
4903 ScanInfoFileName                = struct("scan_info_file_name", [
4904         SalvageableFileEntryNumber,
4905         FileName,
4906 ])
4907 ScanInfoFileNoName              = struct("scan_info_file_no_name", [
4908         SalvageableFileEntryNumber,
4909 ])
4910 Segments                        = struct("segments", [
4911         uint32("volume_segment_dev_num", "Volume Segment Device Number"),
4912         uint32("volume_segment_offset", "Volume Segment Offset"),
4913         uint32("volume_segment_size", "Volume Segment Size"),
4914 ], "Volume Segment Information")
4915 SemaInfoStruct                  = struct("sema_info_struct", [
4916         LogicalConnectionNumber,
4917         TaskNumByte,
4918 ])
4919 SemaStruct                      = struct("sema_struct", [
4920         OpenCount,
4921         SemaphoreValue,
4922         TaskNumByte,
4923         SemaphoreName,
4924 ], "Semaphore Information")
4925 ServerInfo                      = struct("server_info", [
4926         uint32("reply_canceled", "Reply Canceled Count"),
4927         uint32("write_held_off", "Write Held Off Count"),
4928         uint32("write_held_off_with_dup", "Write Held Off With Duplicate Request"),
4929         uint32("invalid_req_type", "Invalid Request Type Count"),
4930         uint32("being_aborted", "Being Aborted Count"),
4931         uint32("already_doing_realloc", "Already Doing Re-Allocate Count"),
4932         uint32("dealloc_invalid_slot", "De-Allocate Invalid Slot Count"),
4933         uint32("dealloc_being_proc", "De-Allocate Being Processed Count"),
4934         uint32("dealloc_forged_packet", "De-Allocate Forged Packet Count"),
4935         uint32("dealloc_still_transmit", "De-Allocate Still Transmitting Count"),
4936         uint32("start_station_error", "Start Station Error Count"),
4937         uint32("invalid_slot", "Invalid Slot Count"),
4938         uint32("being_processed", "Being Processed Count"),
4939         uint32("forged_packet", "Forged Packet Count"),
4940         uint32("still_transmitting", "Still Transmitting Count"),
4941         uint32("reexecute_request", "Re-Execute Request Count"),
4942         uint32("invalid_sequence_number", "Invalid Sequence Number Count"),
4943         uint32("dup_is_being_sent", "Duplicate Is Being Sent Already Count"),
4944         uint32("sent_pos_ack", "Sent Positive Acknowledge Count"),
4945         uint32("sent_a_dup_reply", "Sent A Duplicate Reply Count"),
4946         uint32("no_mem_for_station", "No Memory For Station Control Count"),
4947         uint32("no_avail_conns", "No Available Connections Count"),
4948         uint32("realloc_slot", "Re-Allocate Slot Count"),
4949         uint32("realloc_slot_came_too_soon", "Re-Allocate Slot Came Too Soon Count"),
4950 ], "Server Information")
4951 ServersSrcInfo                  = struct("servers_src_info", [
4952         ServerNode,
4953         ConnectedLAN,
4954         HopsToNet,
4955 ], "Source Server Information")
4956 SpaceStruct                     = struct("space_struct", [
4957         Level,
4958         MaxSpace,
4959         CurrentSpace,
4960 ], "Space Information")
4961 SPXInformation                  = struct("spx_information", [
4962         uint16("spx_max_conn", "SPX Max Connections Count"),
4963         uint16("spx_max_used_conn", "SPX Max Used Connections"),
4964         uint16("spx_est_conn_req", "SPX Establish Connection Requests"),
4965         uint16("spx_est_conn_fail", "SPX Establish Connection Fail"),
4966         uint16("spx_listen_con_req", "SPX Listen Connect Request"),
4967         uint16("spx_listen_con_fail", "SPX Listen Connect Fail"),
4968         uint32("spx_send", "SPX Send Count"),
4969         uint32("spx_window_choke", "SPX Window Choke Count"),
4970         uint16("spx_bad_send", "SPX Bad Send Count"),
4971         uint16("spx_send_fail", "SPX Send Fail Count"),
4972         uint16("spx_abort_conn", "SPX Aborted Connection"),
4973         uint32("spx_listen_pkt", "SPX Listen Packet Count"),
4974         uint16("spx_bad_listen", "SPX Bad Listen Count"),
4975         uint32("spx_incoming_pkt", "SPX Incoming Packet Count"),
4976         uint16("spx_bad_in_pkt", "SPX Bad In Packet Count"),
4977         uint16("spx_supp_pkt", "SPX Suppressed Packet Count"),
4978         uint16("spx_no_ses_listen", "SPX No Session Listen ECB Count"),
4979         uint16("spx_watch_dog", "SPX Watch Dog Destination Session Count"),
4980 ], "SPX Information")
4981 StackInfo                       = struct("stack_info", [
4982         StackNumber,
4983         fw_string("stack_short_name", "Stack Short Name", 16),
4984 ], "Stack Information")
4985 statsInfo                       = struct("stats_info_struct", [
4986         TotalBytesRead,
4987         TotalBytesWritten,
4988         TotalRequest,
4989 ], "Statistics")
4990 theTimeStruct                   = struct("the_time_struct", [
4991         UTCTimeInSeconds,
4992         FractionalSeconds,
4993         TimesyncStatus,
4994 ])
4995 timeInfo                        = struct("time_info", [
4996         Year,
4997         Month,
4998         Day,
4999         Hour,
5000         Minute,
5001         Second,
5002         DayOfWeek,
5003         uint32("login_expiration_time", "Login Expiration Time"),
5004 ])
5005 TotalStreamSizeStruct           = struct("total_stream_size_struct", [
5006         TotalDataStreamDiskSpaceAlloc,
5007         NumberOfDataStreams,
5008 ])
5009 TrendCounters                   = struct("trend_counters", [
5010         uint32("num_of_cache_checks", "Number Of Cache Checks"),
5011         uint32("num_of_cache_hits", "Number Of Cache Hits"),
5012         uint32("num_of_dirty_cache_checks", "Number Of Dirty Cache Checks"),
5013         uint32("num_of_cache_dirty_checks", "Number Of Cache Dirty Checks"),
5014         uint32("cache_used_while_check", "Cache Used While Checking"),
5015         uint32("wait_till_dirty_blcks_dec", "Wait Till Dirty Blocks Decrease Count"),
5016         uint32("alloc_blck_frm_avail", "Allocate Block From Available Count"),
5017         uint32("alloc_blck_frm_lru", "Allocate Block From LRU Count"),
5018         uint32("alloc_blck_already_wait", "Allocate Block Already Waiting"),
5019         uint32("lru_sit_time", "LRU Sitting Time"),
5020         uint32("num_of_cache_check_no_wait", "Number Of Cache Check No Wait"),
5021         uint32("num_of_cache_hits_no_wait", "Number Of Cache Hits No Wait"),
5022 ], "Trend Counters")
5023 TrusteeStruct                   = struct("trustee_struct", [
5024         ObjectID,
5025         AccessRightsMaskWord,
5026 ])
5027 UpdateDateStruct                = struct("update_date_struct", [
5028         UpdateDate,
5029 ])
5030 UpdateIDStruct                  = struct("update_id_struct", [
5031         UpdateID,
5032 ])
5033 UpdateTimeStruct                = struct("update_time_struct", [
5034         UpdateTime,
5035 ])
5036 UserInformation                 = struct("user_info", [
5037         ConnectionNumber,
5038         UseCount,
5039         Reserved2,
5040         ConnectionServiceType,
5041         Year,
5042         Month,
5043         Day,
5044         Hour,
5045         Minute,
5046         Second,
5047         DayOfWeek,
5048         Status,
5049         Reserved2,
5050         ExpirationTime,
5051         ObjectType,
5052         Reserved2,
5053         TransactionTrackingFlag,
5054         LogicalLockThreshold,
5055         FileWriteFlags,
5056         FileWriteState,
5057         Reserved,
5058         FileLockCount,
5059         RecordLockCount,
5060         TotalBytesRead,
5061         TotalBytesWritten,
5062         TotalRequest,
5063         HeldRequests,
5064         HeldBytesRead,
5065         HeldBytesWritten,
5066 ], "User Information")
5067 VolInfoStructure                = struct("vol_info_struct", [
5068         VolumeType,
5069         Reserved2,
5070         StatusFlagBits,
5071         SectorSize,
5072         SectorsPerClusterLong,
5073         VolumeSizeInClusters,
5074         FreedClusters,
5075         SubAllocFreeableClusters,
5076         FreeableLimboSectors,
5077         NonFreeableLimboSectors,
5078         NonFreeableAvailableSubAllocSectors,
5079         NotUsableSubAllocSectors,
5080         SubAllocClusters,
5081         DataStreamsCount,
5082         LimboDataStreamsCount,
5083         OldestDeletedFileAgeInTicks,
5084         CompressedDataStreamsCount,
5085         CompressedLimboDataStreamsCount,
5086         UnCompressableDataStreamsCount,
5087         PreCompressedSectors,
5088         CompressedSectors,
5089         MigratedFiles,
5090         MigratedSectors,
5091         ClustersUsedByFAT,
5092         ClustersUsedByDirectories,
5093         ClustersUsedByExtendedDirectories,
5094         TotalDirectoryEntries,
5095         UnUsedDirectoryEntries,
5096         TotalExtendedDirectoryExtants,
5097         UnUsedExtendedDirectoryExtants,
5098         ExtendedAttributesDefined,
5099         ExtendedAttributeExtantsUsed,
5100         DirectoryServicesObjectID,
5101         VolumeLastModifiedTime,
5102         VolumeLastModifiedDate,
5103 ], "Volume Information")
5104 VolInfo2Struct                  = struct("vol_info_struct_2", [
5105         uint32("volume_active_count", "Volume Active Count"),
5106         uint32("volume_use_count", "Volume Use Count"),
5107         uint32("mac_root_ids", "MAC Root IDs"),
5108         VolumeLastModifiedTime,
5109         VolumeLastModifiedDate,
5110         uint32("volume_reference_count", "Volume Reference Count"),
5111         uint32("compression_lower_limit", "Compression Lower Limit"),
5112         uint32("outstanding_ios", "Outstanding IOs"),
5113         uint32("outstanding_compression_ios", "Outstanding Compression IOs"),
5114         uint32("compression_ios_limit", "Compression IOs Limit"),
5115 ], "Extended Volume Information")
5116 VolumeStruct                    = struct("volume_struct", [
5117         VolumeNumberLong,
5118         VolumeNameLen,
5119 ])
5120
5121
5122 ##############################################################################
5123 # NCP Groups
5124 ##############################################################################
5125 def define_groups():
5126         groups['accounting']    = "Accounting"
5127         groups['afp']           = "AFP"
5128         groups['auditing']      = "Auditing"
5129         groups['bindery']       = "Bindery"
5130         groups['comm']          = "Communication"
5131         groups['connection']    = "Connection"
5132         groups['directory']     = "Directory"
5133         groups['extended']      = "Extended Attribute"
5134         groups['file']          = "File"
5135         groups['fileserver']    = "File Server"
5136         groups['message']       = "Message"
5137         groups['migration']     = "Data Migration"
5138         groups['misc']          = "Miscellaneous"
5139         groups['name']          = "Name Space"
5140         groups['nds']           = "NetWare Directory"
5141         groups['print']         = "Print"
5142         groups['queue']         = "Queue"
5143         groups['sync']          = "Synchronization"
5144         groups['tts']           = "Transaction Tracking"
5145         groups['qms']           = "Queue Management System (QMS)"
5146         groups['stats']         = "Server Statistics"
5147         groups['nmas']          = "Novell Modular Authentication Service"
5148         groups['sss']           = "SecretStore Services"
5149         groups['unknown']       = "Unknown"
5150
5151 ##############################################################################
5152 # NCP Errors
5153 ##############################################################################
5154 def define_errors():
5155         errors[0x0000] = "Ok"
5156         errors[0x0001] = "Transaction tracking is available"
5157         errors[0x0002] = "Ok. The data has been written"
5158         errors[0x0003] = "Calling Station is a Manager"
5159
5160         errors[0x0100] = "One or more of the Connection Numbers in the send list are invalid"
5161         errors[0x0101] = "Invalid space limit"
5162         errors[0x0102] = "Insufficient disk space"
5163         errors[0x0103] = "Queue server cannot add jobs"
5164         errors[0x0104] = "Out of disk space"
5165         errors[0x0105] = "Semaphore overflow"
5166         errors[0x0106] = "Invalid Parameter"
5167         errors[0x0107] = "Invalid Number of Minutes to Delay"
5168         errors[0x0108] = "Invalid Start or Network Number"
5169         errors[0x0109] = "Cannot Obtain License"
5170
5171         errors[0x0200] = "One or more clients in the send list are not logged in"
5172         errors[0x0201] = "Queue server cannot attach"
5173
5174         errors[0x0300] = "One or more clients in the send list are not accepting messages"
5175
5176         errors[0x0400] = "Client already has message"
5177         errors[0x0401] = "Queue server cannot service job"
5178
5179         errors[0x7300] = "Revoke Handle Rights Not Found"
5180         errors[0x7900] = "Invalid Parameter in Request Packet"
5181         errors[0x7901] = "Nothing being Compressed"
5182         errors[0x7a00] = "Connection Already Temporary"
5183         errors[0x7b00] = "Connection Already Logged in"
5184         errors[0x7c00] = "Connection Not Authenticated"
5185
5186         errors[0x7e00] = "NCP failed boundary check"
5187         errors[0x7e01] = "Invalid Length"
5188
5189         errors[0x7f00] = "Lock Waiting"
5190         errors[0x8000] = "Lock fail"
5191         errors[0x8001] = "File in Use"
5192
5193         errors[0x8100] = "A file handle could not be allocated by the file server"
5194         errors[0x8101] = "Out of File Handles"
5195
5196         errors[0x8200] = "Unauthorized to open the file"
5197         errors[0x8300] = "Unable to read/write the volume. Possible bad sector on the file server"
5198         errors[0x8301] = "Hard I/O Error"
5199
5200         errors[0x8400] = "Unauthorized to create the directory"
5201         errors[0x8401] = "Unauthorized to create the file"
5202
5203         errors[0x8500] = "Unauthorized to delete the specified file"
5204         errors[0x8501] = "Unauthorized to overwrite an existing file in this directory"
5205
5206         errors[0x8700] = "An unexpected character was encountered in the filename"
5207         errors[0x8701] = "Create Filename Error"
5208
5209         errors[0x8800] = "Invalid file handle"
5210         errors[0x8900] = "Unauthorized to search this file/directory"
5211         errors[0x8a00] = "Unauthorized to delete this file/directory"
5212         errors[0x8b00] = "Unauthorized to rename a file in this directory"
5213
5214         errors[0x8c00] = "No set privileges"
5215         errors[0x8c01] = "Unauthorized to modify a file in this directory"
5216         errors[0x8c02] = "Unauthorized to change the restriction on this volume"
5217
5218         errors[0x8d00] = "Some of the affected files are in use by another client"
5219         errors[0x8d01] = "The affected file is in use"
5220
5221         errors[0x8e00] = "All of the affected files are in use by another client"
5222         errors[0x8f00] = "Some of the affected files are read-only"
5223
5224         errors[0x9000] = "An attempt to modify a read-only volume occurred"
5225         errors[0x9001] = "All of the affected files are read-only"
5226         errors[0x9002] = "Read Only Access to Volume"
5227
5228         errors[0x9100] = "Some of the affected files already exist"
5229         errors[0x9101] = "Some Names Exist"
5230
5231         errors[0x9200] = "Directory with the new name already exists"
5232         errors[0x9201] = "All of the affected files already exist"
5233
5234         errors[0x9300] = "Unauthorized to read from this file"
5235         errors[0x9400] = "Unauthorized to write to this file"
5236         errors[0x9500] = "The affected file is detached"
5237
5238         errors[0x9600] = "The file server has run out of memory to service this request"
5239         errors[0x9601] = "No alloc space for message"
5240         errors[0x9602] = "Server Out of Space"
5241
5242         errors[0x9800] = "The affected volume is not mounted"
5243         errors[0x9801] = "The volume associated with Volume Number is not mounted"
5244         errors[0x9802] = "The resulting volume does not exist"
5245         errors[0x9803] = "The destination volume is not mounted"
5246         errors[0x9804] = "Disk Map Error"
5247
5248         errors[0x9900] = "The file server has run out of directory space on the affected volume"
5249         errors[0x9a00] = "Invalid request to rename the affected file to another volume"
5250
5251         errors[0x9b00] = "DirHandle is not associated with a valid directory path"
5252         errors[0x9b01] = "A resulting directory handle is not associated with a valid directory path"
5253         errors[0x9b02] = "The directory associated with DirHandle does not exist"
5254         errors[0x9b03] = "Bad directory handle"
5255
5256         errors[0x9c00] = "The resulting path is not valid"
5257         errors[0x9c01] = "The resulting file path is not valid"
5258         errors[0x9c02] = "The resulting directory path is not valid"
5259         errors[0x9c03] = "Invalid path"
5260
5261         errors[0x9d00] = "A directory handle was not available for allocation"
5262
5263         errors[0x9e00] = "The name of the directory does not conform to a legal name for this name space"
5264         errors[0x9e01] = "The new directory name does not conform to a legal name for this name space"
5265         errors[0x9e02] = "Bad File Name"
5266
5267         errors[0x9f00] = "The request attempted to delete a directory that is in use by another client"
5268
5269         errors[0xa000] = "The request attempted to delete a directory that is not empty"
5270         errors[0xa100] = "An unrecoverable error occured on the affected directory"
5271
5272         errors[0xa200] = "The request attempted to read from a file region that is physically locked"
5273         errors[0xa201] = "I/O Lock Error"
5274
5275         errors[0xa400] = "Invalid directory rename attempted"
5276         errors[0xa500] = "Invalid open create mode"
5277         errors[0xa600] = "Auditor Access has been Removed"
5278         errors[0xa700] = "Error Auditing Version"
5279
5280         errors[0xa800] = "Invalid Support Module ID"
5281         errors[0xa801] = "No Auditing Access Rights"
5282         errors[0xa802] = "No Access Rights"
5283
5284         errors[0xbe00] = "Invalid Data Stream"
5285         errors[0xbf00] = "Requests for this name space are not valid on this volume"
5286
5287         errors[0xc000] = "Unauthorized to retrieve accounting data"
5288
5289         errors[0xc100] = "The ACCOUNT_BALANCE property does not exist"
5290         errors[0xc101] = "No Account Balance"
5291
5292         errors[0xc200] = "The object has exceeded its credit limit"
5293         errors[0xc300] = "Too many holds have been placed against this account"
5294         errors[0xc400] = "The client account has been disabled"
5295
5296         errors[0xc500] = "Access to the account has been denied because of intruder detection"
5297         errors[0xc501] = "Login lockout"
5298         errors[0xc502] = "Server Login Locked"
5299
5300         errors[0xc600] = "The caller does not have operator priviliges"
5301         errors[0xc601] = "The client does not have operator priviliges"
5302
5303         errors[0xc800] = "Missing EA Key"
5304         errors[0xc900] = "EA Not Found"
5305         errors[0xca00] = "Invalid EA Handle Type"
5306         errors[0xcb00] = "EA No Key No Data"
5307         errors[0xcc00] = "EA Number Mismatch"
5308         errors[0xcd00] = "Extent Number Out of Range"
5309         errors[0xce00] = "EA Bad Directory Number"
5310         errors[0xcf00] = "Invalid EA Handle"
5311
5312         errors[0xd000] = "Queue error"
5313         errors[0xd001] = "EA Position Out of Range"
5314
5315         errors[0xd100] = "The queue does not exist"
5316         errors[0xd101] = "EA Access Denied"
5317
5318         errors[0xd200] = "A queue server is not associated with this queue"
5319         errors[0xd201] = "A queue server is not associated with the selected queue"
5320         errors[0xd202] = "No queue server"
5321         errors[0xd203] = "Data Page Odd Size"
5322
5323         errors[0xd300] = "No queue rights"
5324         errors[0xd301] = "EA Volume Not Mounted"
5325
5326         errors[0xd400] = "The queue is full and cannot accept another request"
5327         errors[0xd401] = "The queue associated with ObjectId is full and cannot accept another request"
5328         errors[0xd402] = "Bad Page Boundary"
5329
5330         errors[0xd500] = "A job does not exist in this queue"
5331         errors[0xd501] = "No queue job"
5332         errors[0xd502] = "The job associated with JobNumber does not exist in this queue"
5333         errors[0xd503] = "Inspect Failure"
5334         errors[0xd504] = "Unknown NCP Extension Number"
5335
5336         errors[0xd600] = "The file server does not allow unencrypted passwords"
5337         errors[0xd601] = "No job right"
5338         errors[0xd602] = "EA Already Claimed"
5339
5340         errors[0xd700] = "Bad account"
5341         errors[0xd701] = "The old and new password strings are identical"
5342         errors[0xd702] = "The job is currently being serviced"
5343         errors[0xd703] = "The queue is currently servicing a job"
5344         errors[0xd704] = "Queue servicing"
5345         errors[0xd705] = "Odd Buffer Size"
5346
5347         errors[0xd800] = "Queue not active"
5348         errors[0xd801] = "No Scorecards"
5349
5350         errors[0xd900] = "The file server cannot accept another connection as it has reached its limit"
5351         errors[0xd901] = "The client is not security equivalent to one of the objects in the Q_SERVERS group property of the target queue"
5352         errors[0xd902] = "Station is not a server"
5353         errors[0xd903] = "Bad EDS Signature"
5354         errors[0xd904] = "Attempt to log in using an account which has limits on the number of concurrent connections and that number has been reached."
5355     
5356         errors[0xda00] = "Attempted to login to the file server during a restricted time period"
5357         errors[0xda01] = "Queue halted"
5358         errors[0xda02] = "EA Space Limit"
5359
5360         errors[0xdb00] = "Attempted to login to the file server from an unauthorized workstation or network"
5361         errors[0xdb01] = "The queue cannot attach another queue server"
5362         errors[0xdb02] = "Maximum queue servers"
5363         errors[0xdb03] = "EA Key Corrupt"
5364
5365         errors[0xdc00] = "Account Expired"
5366         errors[0xdc01] = "EA Key Limit"
5367
5368         errors[0xdd00] = "Tally Corrupt"
5369         errors[0xde00] = "Attempted to login to the file server with an incorrect password"
5370         errors[0xdf00] = "Attempted to login to the file server with a password that has expired"
5371
5372         errors[0xe000] = "No Login Connections Available"
5373         errors[0xe700] = "No disk track"
5374         errors[0xe800] = "Write to group"
5375         errors[0xe900] = "The object is already a member of the group property"
5376
5377         errors[0xea00] = "No such member"
5378         errors[0xea01] = "The bindery object is not a member of the set"
5379         errors[0xea02] = "Non-existent member"
5380
5381         errors[0xeb00] = "The property is not a set property"
5382
5383         errors[0xec00] = "No such set"
5384         errors[0xec01] = "The set property does not exist"
5385
5386         errors[0xed00] = "Property exists"
5387         errors[0xed01] = "The property already exists"
5388         errors[0xed02] = "An attempt was made to create a bindery object property that already exists"
5389
5390         errors[0xee00] = "The object already exists"
5391         errors[0xee01] = "The bindery object already exists"
5392
5393         errors[0xef00] = "Illegal name"
5394         errors[0xef01] = "Illegal characters in ObjectName field"
5395         errors[0xef02] = "Invalid name"
5396
5397         errors[0xf000] = "A wildcard was detected in a field that does not support wildcards"
5398         errors[0xf001] = "An illegal wildcard was detected in ObjectName"
5399
5400         errors[0xf100] = "The client does not have the rights to access this bindery object"
5401         errors[0xf101] = "Bindery security"
5402         errors[0xf102] = "Invalid bindery security"
5403
5404         errors[0xf200] = "Unauthorized to read from this object"
5405         errors[0xf300] = "Unauthorized to rename this object"
5406
5407         errors[0xf400] = "Unauthorized to delete this object"
5408         errors[0xf401] = "No object delete privileges"
5409         errors[0xf402] = "Unauthorized to delete this queue"
5410
5411         errors[0xf500] = "Unauthorized to create this object"
5412         errors[0xf501] = "No object create"
5413
5414         errors[0xf600] = "No property delete"
5415         errors[0xf601] = "Unauthorized to delete the property of this object"
5416         errors[0xf602] = "Unauthorized to delete this property"
5417
5418         errors[0xf700] = "Unauthorized to create this property"
5419         errors[0xf701] = "No property create privilege"
5420
5421         errors[0xf800] = "Unauthorized to write to this property"
5422         errors[0xf900] = "Unauthorized to read this property"
5423         errors[0xfa00] = "Temporary remap error"
5424
5425         errors[0xfb00] = "No such property"
5426         errors[0xfb01] = "The file server does not support this request"
5427         errors[0xfb02] = "The specified property does not exist"
5428         errors[0xfb03] = "The PASSWORD property does not exist for this bindery object"
5429         errors[0xfb04] = "NDS NCP not available"
5430         errors[0xfb05] = "Bad Directory Handle"
5431         errors[0xfb06] = "Unknown Request"
5432         errors[0xfb07] = "Invalid Subfunction Request"
5433         errors[0xfb08] = "Attempt to use an invalid parameter (drive number, path, or flag value) during a set drive path call"
5434         errors[0xfb09] = "NMAS not running on this server, NCP NOT Supported"
5435         errors[0xfb0a] = "Station Not Logged In"
5436         errors[0xfb0b] = "Secret Store not running on this server, NCP Not supported"
5437
5438         errors[0xfc00] = "The message queue cannot accept another message"
5439         errors[0xfc01] = "The trustee associated with ObjectId does not exist"
5440         errors[0xfc02] = "The specified bindery object does not exist"
5441         errors[0xfc03] = "The bindery object associated with ObjectID does not exist"
5442         errors[0xfc04] = "A bindery object does not exist that matches"
5443         errors[0xfc05] = "The specified queue does not exist"
5444         errors[0xfc06] = "No such object"
5445         errors[0xfc07] = "The queue associated with ObjectID does not exist"
5446
5447         errors[0xfd00] = "Bad station number"
5448         errors[0xfd01] = "The connection associated with ConnectionNumber is not active"
5449         errors[0xfd02] = "Lock collision"
5450         errors[0xfd03] = "Transaction tracking is disabled"
5451
5452         errors[0xfe00] = "I/O failure"
5453         errors[0xfe01] = "The files containing the bindery on the file server are locked"
5454         errors[0xfe02] = "A file with the specified name already exists in this directory"
5455         errors[0xfe03] = "No more restrictions were found"
5456         errors[0xfe04] = "The file server was unable to lock the file within the specified time limit"
5457         errors[0xfe05] = "The file server was unable to lock all files within the specified time limit"
5458         errors[0xfe06] = "The bindery object associated with ObjectID is not a valid trustee"
5459         errors[0xfe07] = "Directory locked"
5460         errors[0xfe08] = "Bindery locked"
5461         errors[0xfe09] = "Invalid semaphore name length"
5462         errors[0xfe0a] = "The file server was unable to complete the operation within the specified time limit"
5463         errors[0xfe0b] = "Transaction restart"
5464         errors[0xfe0c] = "Bad packet"
5465         errors[0xfe0d] = "Timeout"
5466         errors[0xfe0e] = "User Not Found"
5467         errors[0xfe0f] = "Trustee Not Found"
5468
5469         errors[0xff00] = "Failure"
5470         errors[0xff01] = "Lock error"
5471         errors[0xff02] = "File not found"
5472         errors[0xff03] = "The file not found or cannot be unlocked"
5473         errors[0xff04] = "Record not found"
5474         errors[0xff05] = "The logical record was not found"
5475         errors[0xff06] = "The printer associated with Printer Number does not exist"
5476         errors[0xff07] = "No such printer"
5477         errors[0xff08] = "Unable to complete the request"
5478         errors[0xff09] = "Unauthorized to change privileges of this trustee"
5479         errors[0xff0a] = "No files matching the search criteria were found"
5480         errors[0xff0b] = "A file matching the search criteria was not found"
5481         errors[0xff0c] = "Verification failed"
5482         errors[0xff0d] = "Object associated with ObjectID is not a manager"
5483         errors[0xff0e] = "Invalid initial semaphore value"
5484         errors[0xff0f] = "The semaphore handle is not valid"
5485         errors[0xff10] = "SemaphoreHandle is not associated with a valid sempahore"
5486         errors[0xff11] = "Invalid semaphore handle"
5487         errors[0xff12] = "Transaction tracking is not available"
5488         errors[0xff13] = "The transaction has not yet been written to disk"
5489         errors[0xff14] = "Directory already exists"
5490         errors[0xff15] = "The file already exists and the deletion flag was not set"
5491         errors[0xff16] = "No matching files or directories were found"
5492         errors[0xff17] = "A file or directory matching the search criteria was not found"
5493         errors[0xff18] = "The file already exists"
5494         errors[0xff19] = "Failure, No files found"
5495         errors[0xff1a] = "Unlock Error"
5496         errors[0xff1b] = "I/O Bound Error"
5497         errors[0xff1c] = "Not Accepting Messages"
5498         errors[0xff1d] = "No More Salvageable Files in Directory"
5499         errors[0xff1e] = "Calling Station is Not a Manager"
5500         errors[0xff1f] = "Bindery Failure"
5501         errors[0xff20] = "NCP Extension Not Found"
5502
5503 ##############################################################################
5504 # Produce C code
5505 ##############################################################################
5506 def ExamineVars(vars, structs_hash, vars_hash):
5507         for var in vars:
5508                 if isinstance(var, struct):
5509                         structs_hash[var.HFName()] = var
5510                         struct_vars = var.Variables()
5511                         ExamineVars(struct_vars, structs_hash, vars_hash)
5512                 else:
5513                         vars_hash[repr(var)] = var
5514                         if isinstance(var, bitfield):
5515                                 sub_vars = var.SubVariables()
5516                                 ExamineVars(sub_vars, structs_hash, vars_hash)
5517
5518 def produce_code():
5519
5520         global errors
5521
5522         print "/*"
5523         print " * Generated automatically from %s" % (sys.argv[0])
5524         print " * Do not edit this file manually, as all changes will be lost."
5525         print " */\n"
5526
5527         print """
5528 /*
5529  * Portions Copyright (c) Gilbert Ramirez 2000-2002
5530  * Portions Copyright (c) Novell, Inc. 2000-2003
5531  *
5532  * This program is free software; you can redistribute it and/or
5533  * modify it under the terms of the GNU General Public License
5534  * as published by the Free Software Foundation; either version 2
5535  * of the License, or (at your option) any later version.
5536  *
5537  * This program is distributed in the hope that it will be useful,
5538  * but WITHOUT ANY WARRANTY; without even the implied warranty of
5539  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5540  * GNU General Public License for more details.
5541  *
5542  * You should have received a copy of the GNU General Public License
5543  * along with this program; if not, write to the Free Software
5544  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
5545  */
5546
5547 #ifdef HAVE_CONFIG_H
5548 # include "config.h"
5549 #endif
5550
5551 #include <string.h>
5552 #include <glib.h>
5553 #include <epan/packet.h>
5554 #include <epan/conversation.h>
5555 #include "ptvcursor.h"
5556 #include "packet-ncp-int.h"
5557 #include <epan/strutil.h>
5558 #include "reassemble.h"
5559
5560 /* Function declarations for functions used in proto_register_ncp2222() */
5561 static void ncp_init_protocol(void);
5562 static void ncp_postseq_cleanup(void);
5563
5564 /* Endianness macros */
5565 #define BE              0
5566 #define LE              1
5567 #define NO_ENDIANNESS   0
5568
5569 #define NO_LENGTH       -1
5570
5571 /* We use this int-pointer as a special flag in ptvc_record's */
5572 static int ptvc_struct_int_storage;
5573 #define PTVC_STRUCT     (&ptvc_struct_int_storage)
5574
5575 /* Values used in the count-variable ("var"/"repeat") logic. */"""
5576
5577
5578         if global_highest_var > -1:
5579                 print "#define NUM_REPEAT_VARS\t%d" % (global_highest_var + 1)
5580                 print "guint repeat_vars[NUM_REPEAT_VARS];",
5581         else:
5582                 print "#define NUM_REPEAT_VARS\t0"
5583                 print "guint *repeat_vars = NULL;",
5584
5585         print """
5586 #define NO_VAR          NUM_REPEAT_VARS
5587 #define NO_REPEAT       NUM_REPEAT_VARS
5588
5589 #define REQ_COND_SIZE_CONSTANT  0
5590 #define REQ_COND_SIZE_VARIABLE  1
5591 #define NO_REQ_COND_SIZE        0
5592
5593
5594 #define NTREE   0x00020000
5595 #define NDEPTH  0x00000002
5596 #define NREV    0x00000004
5597 #define NFLAGS  0x00000008
5598
5599
5600 static int hf_ncp_func = -1;
5601 static int hf_ncp_length = -1;
5602 static int hf_ncp_subfunc = -1;
5603 static int hf_ncp_fragment_handle = -1;
5604 static int hf_ncp_completion_code = -1;
5605 static int hf_ncp_connection_status = -1;
5606 static int hf_ncp_req_frame_num = -1;
5607 static int hf_ncp_req_frame_time = -1;
5608 static int hf_ncp_fragment_size = -1;
5609 static int hf_ncp_message_size = -1;
5610 static int hf_ncp_nds_flag = -1;
5611 static int hf_ncp_nds_verb = -1;
5612 static int hf_ping_version = -1;
5613 static int hf_nds_version = -1;
5614 static int hf_nds_flags = -1;
5615 static int hf_nds_reply_depth = -1;
5616 static int hf_nds_reply_rev = -1;
5617 static int hf_nds_reply_flags = -1;
5618 static int hf_nds_p1type = -1;
5619 static int hf_nds_uint32value = -1;
5620 static int hf_nds_bit1 = -1;
5621 static int hf_nds_bit2 = -1;
5622 static int hf_nds_bit3 = -1;
5623 static int hf_nds_bit4 = -1;
5624 static int hf_nds_bit5 = -1;
5625 static int hf_nds_bit6 = -1;
5626 static int hf_nds_bit7 = -1;
5627 static int hf_nds_bit8 = -1;
5628 static int hf_nds_bit9 = -1;
5629 static int hf_nds_bit10 = -1;
5630 static int hf_nds_bit11 = -1;
5631 static int hf_nds_bit12 = -1;
5632 static int hf_nds_bit13 = -1;
5633 static int hf_nds_bit14 = -1;
5634 static int hf_nds_bit15 = -1;
5635 static int hf_nds_bit16 = -1;
5636 static int hf_bit1outflags = -1;
5637 static int hf_bit2outflags = -1;
5638 static int hf_bit3outflags = -1;
5639 static int hf_bit4outflags = -1;
5640 static int hf_bit5outflags = -1;
5641 static int hf_bit6outflags = -1;
5642 static int hf_bit7outflags = -1;
5643 static int hf_bit8outflags = -1;
5644 static int hf_bit9outflags = -1;
5645 static int hf_bit10outflags = -1;
5646 static int hf_bit11outflags = -1;
5647 static int hf_bit12outflags = -1;
5648 static int hf_bit13outflags = -1;
5649 static int hf_bit14outflags = -1;
5650 static int hf_bit15outflags = -1;
5651 static int hf_bit16outflags = -1;
5652 static int hf_bit1nflags = -1;
5653 static int hf_bit2nflags = -1;
5654 static int hf_bit3nflags = -1;
5655 static int hf_bit4nflags = -1;
5656 static int hf_bit5nflags = -1;
5657 static int hf_bit6nflags = -1;
5658 static int hf_bit7nflags = -1;
5659 static int hf_bit8nflags = -1;
5660 static int hf_bit9nflags = -1;
5661 static int hf_bit10nflags = -1;
5662 static int hf_bit11nflags = -1;
5663 static int hf_bit12nflags = -1;
5664 static int hf_bit13nflags = -1;
5665 static int hf_bit14nflags = -1;
5666 static int hf_bit15nflags = -1;
5667 static int hf_bit16nflags = -1;
5668 static int hf_bit1rflags = -1;
5669 static int hf_bit2rflags = -1;
5670 static int hf_bit3rflags = -1;
5671 static int hf_bit4rflags = -1;
5672 static int hf_bit5rflags = -1;
5673 static int hf_bit6rflags = -1;
5674 static int hf_bit7rflags = -1;
5675 static int hf_bit8rflags = -1;
5676 static int hf_bit9rflags = -1;
5677 static int hf_bit10rflags = -1;
5678 static int hf_bit11rflags = -1;
5679 static int hf_bit12rflags = -1;
5680 static int hf_bit13rflags = -1;
5681 static int hf_bit14rflags = -1;
5682 static int hf_bit15rflags = -1;
5683 static int hf_bit16rflags = -1;
5684 static int hf_bit1cflags = -1;
5685 static int hf_bit2cflags = -1;
5686 static int hf_bit3cflags = -1;
5687 static int hf_bit4cflags = -1;
5688 static int hf_bit5cflags = -1;
5689 static int hf_bit6cflags = -1;
5690 static int hf_bit7cflags = -1;
5691 static int hf_bit8cflags = -1;
5692 static int hf_bit9cflags = -1;
5693 static int hf_bit10cflags = -1;
5694 static int hf_bit11cflags = -1;
5695 static int hf_bit12cflags = -1;
5696 static int hf_bit13cflags = -1;
5697 static int hf_bit14cflags = -1;
5698 static int hf_bit15cflags = -1;
5699 static int hf_bit16cflags = -1;
5700 static int hf_bit1acflags = -1;
5701 static int hf_bit2acflags = -1;
5702 static int hf_bit3acflags = -1;
5703 static int hf_bit4acflags = -1;
5704 static int hf_bit5acflags = -1;
5705 static int hf_bit6acflags = -1;
5706 static int hf_bit7acflags = -1;
5707 static int hf_bit8acflags = -1;
5708 static int hf_bit9acflags = -1;
5709 static int hf_bit10acflags = -1;
5710 static int hf_bit11acflags = -1;
5711 static int hf_bit12acflags = -1;
5712 static int hf_bit13acflags = -1;
5713 static int hf_bit14acflags = -1;
5714 static int hf_bit15acflags = -1;
5715 static int hf_bit16acflags = -1;
5716 static int hf_bit1vflags = -1;
5717 static int hf_bit2vflags = -1;
5718 static int hf_bit3vflags = -1;
5719 static int hf_bit4vflags = -1;
5720 static int hf_bit5vflags = -1;
5721 static int hf_bit6vflags = -1;
5722 static int hf_bit7vflags = -1;
5723 static int hf_bit8vflags = -1;
5724 static int hf_bit9vflags = -1;
5725 static int hf_bit10vflags = -1;
5726 static int hf_bit11vflags = -1;
5727 static int hf_bit12vflags = -1;
5728 static int hf_bit13vflags = -1;
5729 static int hf_bit14vflags = -1;
5730 static int hf_bit15vflags = -1;
5731 static int hf_bit16vflags = -1;
5732 static int hf_bit1eflags = -1;
5733 static int hf_bit2eflags = -1;
5734 static int hf_bit3eflags = -1;
5735 static int hf_bit4eflags = -1;
5736 static int hf_bit5eflags = -1;
5737 static int hf_bit6eflags = -1;
5738 static int hf_bit7eflags = -1;
5739 static int hf_bit8eflags = -1;
5740 static int hf_bit9eflags = -1;
5741 static int hf_bit10eflags = -1;
5742 static int hf_bit11eflags = -1;
5743 static int hf_bit12eflags = -1;
5744 static int hf_bit13eflags = -1;
5745 static int hf_bit14eflags = -1;
5746 static int hf_bit15eflags = -1;
5747 static int hf_bit16eflags = -1;
5748 static int hf_bit1infoflagsl = -1;
5749 static int hf_bit2infoflagsl = -1;
5750 static int hf_bit3infoflagsl = -1;
5751 static int hf_bit4infoflagsl = -1;
5752 static int hf_bit5infoflagsl = -1;
5753 static int hf_bit6infoflagsl = -1;
5754 static int hf_bit7infoflagsl = -1;
5755 static int hf_bit8infoflagsl = -1;
5756 static int hf_bit9infoflagsl = -1;
5757 static int hf_bit10infoflagsl = -1;
5758 static int hf_bit11infoflagsl = -1;
5759 static int hf_bit12infoflagsl = -1;
5760 static int hf_bit13infoflagsl = -1;
5761 static int hf_bit14infoflagsl = -1;
5762 static int hf_bit15infoflagsl = -1;
5763 static int hf_bit16infoflagsl = -1;
5764 static int hf_bit1infoflagsh = -1;
5765 static int hf_bit2infoflagsh = -1;
5766 static int hf_bit3infoflagsh = -1;
5767 static int hf_bit4infoflagsh = -1;
5768 static int hf_bit5infoflagsh = -1;
5769 static int hf_bit6infoflagsh = -1;
5770 static int hf_bit7infoflagsh = -1;
5771 static int hf_bit8infoflagsh = -1;
5772 static int hf_bit9infoflagsh = -1;
5773 static int hf_bit10infoflagsh = -1;
5774 static int hf_bit11infoflagsh = -1;
5775 static int hf_bit12infoflagsh = -1;
5776 static int hf_bit13infoflagsh = -1;
5777 static int hf_bit14infoflagsh = -1;
5778 static int hf_bit15infoflagsh = -1;
5779 static int hf_bit16infoflagsh = -1;
5780 static int hf_bit1lflags = -1;
5781 static int hf_bit2lflags = -1;
5782 static int hf_bit3lflags = -1;
5783 static int hf_bit4lflags = -1;
5784 static int hf_bit5lflags = -1;
5785 static int hf_bit6lflags = -1;
5786 static int hf_bit7lflags = -1;
5787 static int hf_bit8lflags = -1;
5788 static int hf_bit9lflags = -1;
5789 static int hf_bit10lflags = -1;
5790 static int hf_bit11lflags = -1;
5791 static int hf_bit12lflags = -1;
5792 static int hf_bit13lflags = -1;
5793 static int hf_bit14lflags = -1;
5794 static int hf_bit15lflags = -1;
5795 static int hf_bit16lflags = -1;
5796 static int hf_bit1l1flagsl = -1;
5797 static int hf_bit2l1flagsl = -1;
5798 static int hf_bit3l1flagsl = -1;
5799 static int hf_bit4l1flagsl = -1;
5800 static int hf_bit5l1flagsl = -1;
5801 static int hf_bit6l1flagsl = -1;
5802 static int hf_bit7l1flagsl = -1;
5803 static int hf_bit8l1flagsl = -1;
5804 static int hf_bit9l1flagsl = -1;
5805 static int hf_bit10l1flagsl = -1;
5806 static int hf_bit11l1flagsl = -1;
5807 static int hf_bit12l1flagsl = -1;
5808 static int hf_bit13l1flagsl = -1;
5809 static int hf_bit14l1flagsl = -1;
5810 static int hf_bit15l1flagsl = -1;
5811 static int hf_bit16l1flagsl = -1;
5812 static int hf_bit1l1flagsh = -1;
5813 static int hf_bit2l1flagsh = -1;
5814 static int hf_bit3l1flagsh = -1;
5815 static int hf_bit4l1flagsh = -1;
5816 static int hf_bit5l1flagsh = -1;
5817 static int hf_bit6l1flagsh = -1;
5818 static int hf_bit7l1flagsh = -1;
5819 static int hf_bit8l1flagsh = -1;
5820 static int hf_bit9l1flagsh = -1;
5821 static int hf_bit10l1flagsh = -1;
5822 static int hf_bit11l1flagsh = -1;
5823 static int hf_bit12l1flagsh = -1;
5824 static int hf_bit13l1flagsh = -1;
5825 static int hf_bit14l1flagsh = -1;
5826 static int hf_bit15l1flagsh = -1;
5827 static int hf_bit16l1flagsh = -1;
5828 static int hf_nds_tree_name = -1;
5829 static int hf_nds_reply_error = -1;
5830 static int hf_nds_net = -1;
5831 static int hf_nds_node = -1;
5832 static int hf_nds_socket = -1;
5833 static int hf_add_ref_ip = -1;
5834 static int hf_add_ref_udp = -1;
5835 static int hf_add_ref_tcp = -1;
5836 static int hf_referral_record = -1;
5837 static int hf_referral_addcount = -1;
5838 static int hf_nds_port = -1;
5839 static int hf_mv_string = -1;
5840 static int hf_nds_syntax = -1;
5841 static int hf_value_string = -1;
5842 static int hf_nds_buffer_size = -1;
5843 static int hf_nds_ver = -1;
5844 static int hf_nds_nflags = -1;
5845 static int hf_nds_scope = -1;
5846 static int hf_nds_name = -1;
5847 static int hf_nds_comm_trans = -1;
5848 static int hf_nds_tree_trans = -1;
5849 static int hf_nds_iteration = -1;
5850 static int hf_nds_eid = -1;
5851 static int hf_nds_info_type = -1;
5852 static int hf_nds_all_attr = -1;
5853 static int hf_nds_req_flags = -1;
5854 static int hf_nds_attr = -1;
5855 static int hf_nds_crc = -1;
5856 static int hf_nds_referrals = -1;
5857 static int hf_nds_result_flags = -1;
5858 static int hf_nds_tag_string = -1;
5859 static int hf_value_bytes = -1;
5860 static int hf_replica_type = -1;
5861 static int hf_replica_state = -1;
5862 static int hf_replica_number = -1;
5863 static int hf_min_nds_ver = -1;
5864 static int hf_nds_ver_include = -1;
5865 static int hf_nds_ver_exclude = -1;
5866 static int hf_nds_es = -1;
5867 static int hf_es_type = -1;
5868 static int hf_delim_string = -1;
5869 static int hf_rdn_string = -1;
5870 static int hf_nds_revent = -1;
5871 static int hf_nds_rnum = -1;
5872 static int hf_nds_name_type = -1;
5873 static int hf_nds_rflags = -1;
5874 static int hf_nds_eflags = -1;
5875 static int hf_nds_depth = -1;
5876 static int hf_nds_class_def_type = -1;
5877 static int hf_nds_classes = -1;
5878 static int hf_nds_return_all_classes = -1;
5879 static int hf_nds_stream_flags = -1;
5880 static int hf_nds_stream_name = -1;
5881 static int hf_nds_file_handle = -1;
5882 static int hf_nds_file_size = -1;
5883 static int hf_nds_dn_output_type = -1;
5884 static int hf_nds_nested_output_type = -1;
5885 static int hf_nds_output_delimiter = -1;
5886 static int hf_nds_output_entry_specifier = -1;
5887 static int hf_es_value = -1;
5888 static int hf_es_rdn_count = -1;
5889 static int hf_nds_replica_num = -1;
5890 static int hf_nds_event_num = -1;
5891 static int hf_es_seconds = -1;
5892 static int hf_nds_compare_results = -1;
5893 static int hf_nds_parent = -1;
5894 static int hf_nds_name_filter = -1;
5895 static int hf_nds_class_filter = -1;
5896 static int hf_nds_time_filter = -1;
5897 static int hf_nds_partition_root_id = -1;
5898 static int hf_nds_replicas = -1;
5899 static int hf_nds_purge = -1;
5900 static int hf_nds_local_partition = -1;
5901 static int hf_partition_busy = -1;
5902 static int hf_nds_number_of_changes = -1;
5903 static int hf_sub_count = -1;
5904 static int hf_nds_revision = -1;
5905 static int hf_nds_base_class = -1;
5906 static int hf_nds_relative_dn = -1;
5907 static int hf_nds_root_dn = -1;
5908 static int hf_nds_parent_dn = -1;
5909 static int hf_deref_base = -1;
5910 static int hf_nds_entry_info = -1;
5911 static int hf_nds_base = -1;
5912 static int hf_nds_privileges = -1;
5913 static int hf_nds_vflags = -1;
5914 static int hf_nds_value_len = -1;
5915 static int hf_nds_cflags = -1;
5916 static int hf_nds_acflags = -1;
5917 static int hf_nds_asn1 = -1;
5918 static int hf_nds_upper = -1;
5919 static int hf_nds_lower = -1;
5920 static int hf_nds_trustee_dn = -1;
5921 static int hf_nds_attribute_dn = -1;
5922 static int hf_nds_acl_add = -1;
5923 static int hf_nds_acl_del = -1;
5924 static int hf_nds_att_add = -1;
5925 static int hf_nds_att_del = -1;
5926 static int hf_nds_keep = -1;
5927 static int hf_nds_new_rdn = -1;
5928 static int hf_nds_time_delay = -1;
5929 static int hf_nds_root_name = -1;
5930 static int hf_nds_new_part_id = -1;
5931 static int hf_nds_child_part_id = -1;
5932 static int hf_nds_master_part_id = -1;
5933 static int hf_nds_target_name = -1;
5934 static int hf_nds_super = -1;
5935 static int hf_bit1pingflags2 = -1;
5936 static int hf_bit2pingflags2 = -1;
5937 static int hf_bit3pingflags2 = -1;
5938 static int hf_bit4pingflags2 = -1;
5939 static int hf_bit5pingflags2 = -1;
5940 static int hf_bit6pingflags2 = -1;
5941 static int hf_bit7pingflags2 = -1;
5942 static int hf_bit8pingflags2 = -1;
5943 static int hf_bit9pingflags2 = -1;
5944 static int hf_bit10pingflags2 = -1;
5945 static int hf_bit11pingflags2 = -1;
5946 static int hf_bit12pingflags2 = -1;
5947 static int hf_bit13pingflags2 = -1;
5948 static int hf_bit14pingflags2 = -1;
5949 static int hf_bit15pingflags2 = -1;
5950 static int hf_bit16pingflags2 = -1;
5951 static int hf_bit1pingflags1 = -1;
5952 static int hf_bit2pingflags1 = -1;
5953 static int hf_bit3pingflags1 = -1;
5954 static int hf_bit4pingflags1 = -1;
5955 static int hf_bit5pingflags1 = -1;
5956 static int hf_bit6pingflags1 = -1;
5957 static int hf_bit7pingflags1 = -1;
5958 static int hf_bit8pingflags1 = -1;
5959 static int hf_bit9pingflags1 = -1;
5960 static int hf_bit10pingflags1 = -1;
5961 static int hf_bit11pingflags1 = -1;
5962 static int hf_bit12pingflags1 = -1;
5963 static int hf_bit13pingflags1 = -1;
5964 static int hf_bit14pingflags1 = -1;
5965 static int hf_bit15pingflags1 = -1;
5966 static int hf_bit16pingflags1 = -1;
5967 static int hf_bit1pingpflags1 = -1;
5968 static int hf_bit2pingpflags1 = -1;
5969 static int hf_bit3pingpflags1 = -1;
5970 static int hf_bit4pingpflags1 = -1;
5971 static int hf_bit5pingpflags1 = -1;
5972 static int hf_bit6pingpflags1 = -1;
5973 static int hf_bit7pingpflags1 = -1;
5974 static int hf_bit8pingpflags1 = -1;
5975 static int hf_bit9pingpflags1 = -1;
5976 static int hf_bit10pingpflags1 = -1;
5977 static int hf_bit11pingpflags1 = -1;
5978 static int hf_bit12pingpflags1 = -1;
5979 static int hf_bit13pingpflags1 = -1;
5980 static int hf_bit14pingpflags1 = -1;
5981 static int hf_bit15pingpflags1 = -1;
5982 static int hf_bit16pingpflags1 = -1;
5983 static int hf_bit1pingvflags1 = -1;
5984 static int hf_bit2pingvflags1 = -1;
5985 static int hf_bit3pingvflags1 = -1;
5986 static int hf_bit4pingvflags1 = -1;
5987 static int hf_bit5pingvflags1 = -1;
5988 static int hf_bit6pingvflags1 = -1;
5989 static int hf_bit7pingvflags1 = -1;
5990 static int hf_bit8pingvflags1 = -1;
5991 static int hf_bit9pingvflags1 = -1;
5992 static int hf_bit10pingvflags1 = -1;
5993 static int hf_bit11pingvflags1 = -1;
5994 static int hf_bit12pingvflags1 = -1;
5995 static int hf_bit13pingvflags1 = -1;
5996 static int hf_bit14pingvflags1 = -1;
5997 static int hf_bit15pingvflags1 = -1;
5998 static int hf_bit16pingvflags1 = -1;
5999 static int hf_nds_letter_ver = -1;
6000 static int hf_nds_os_ver = -1;
6001 static int hf_nds_lic_flags = -1;
6002 static int hf_nds_ds_time = -1;
6003 static int hf_nds_ping_version = -1;
6004 static int hf_nds_search_scope = -1;
6005 static int hf_nds_num_objects = -1;
6006 static int hf_bit1siflags = -1;
6007 static int hf_bit2siflags = -1;
6008 static int hf_bit3siflags = -1;
6009 static int hf_bit4siflags = -1;
6010 static int hf_bit5siflags = -1;
6011 static int hf_bit6siflags = -1;
6012 static int hf_bit7siflags = -1;
6013 static int hf_bit8siflags = -1;
6014 static int hf_bit9siflags = -1;
6015 static int hf_bit10siflags = -1;
6016 static int hf_bit11siflags = -1;
6017 static int hf_bit12siflags = -1;
6018 static int hf_bit13siflags = -1;
6019 static int hf_bit14siflags = -1;
6020 static int hf_bit15siflags = -1;
6021 static int hf_bit16siflags = -1;
6022 static int hf_nds_segments = -1;
6023 static int hf_nds_segment = -1;
6024 static int hf_nds_segment_overlap = -1;
6025 static int hf_nds_segment_overlap_conflict = -1;
6026 static int hf_nds_segment_multiple_tails = -1;
6027 static int hf_nds_segment_too_long_segment = -1;
6028 static int hf_nds_segment_error = -1;
6029
6030
6031         """
6032
6033         # Look at all packet types in the packets collection, and cull information
6034         # from them.
6035         errors_used_list = []
6036         errors_used_hash = {}
6037         groups_used_list = []
6038         groups_used_hash = {}
6039         variables_used_hash = {}
6040         structs_used_hash = {}
6041
6042         for pkt in packets:
6043                 # Determine which error codes are used.
6044                 codes = pkt.CompletionCodes()
6045                 for code in codes.Records():
6046                         if not errors_used_hash.has_key(code):
6047                                 errors_used_hash[code] = len(errors_used_list)
6048                                 errors_used_list.append(code)
6049
6050                 # Determine which groups are used.
6051                 group = pkt.Group()
6052                 if not groups_used_hash.has_key(group):
6053                         groups_used_hash[group] = len(groups_used_list)
6054                         groups_used_list.append(group)
6055
6056                 # Determine which variables are used.
6057                 vars = pkt.Variables()
6058                 ExamineVars(vars, structs_used_hash, variables_used_hash)
6059
6060
6061         # Print the hf variable declarations
6062         sorted_vars = variables_used_hash.values()
6063         sorted_vars.sort()
6064         for var in sorted_vars:
6065                 print "static int " + var.HFName() + " = -1;"
6066
6067
6068         # Print the value_string's
6069         for var in sorted_vars:
6070                 if isinstance(var, val_string):
6071                         print ""
6072                         print var.Code()
6073
6074         # Determine which error codes are not used
6075         errors_not_used = {}
6076         # Copy the keys from the error list...
6077         for code in errors.keys():
6078                 errors_not_used[code] = 1
6079         # ... and remove the ones that *were* used.
6080         for code in errors_used_list:
6081                 del errors_not_used[code]
6082
6083         # Print a remark showing errors not used
6084         list_errors_not_used = errors_not_used.keys()
6085         list_errors_not_used.sort()
6086         for code in list_errors_not_used:
6087                 print "/* Error 0x%04x not used: %s */" % (code, errors[code])
6088         print "\n"
6089
6090         # Print the errors table
6091         print "/* Error strings. */"
6092         print "static const char *ncp_errors[] = {"
6093         for code in errors_used_list:
6094                 print '\t/* %02d (0x%04x) */ "%s",' % (errors_used_hash[code], code, errors[code])
6095         print "};\n"
6096
6097
6098
6099
6100         # Determine which groups are not used
6101         groups_not_used = {}
6102         # Copy the keys from the group list...
6103         for group in groups.keys():
6104                 groups_not_used[group] = 1
6105         # ... and remove the ones that *were* used.
6106         for group in groups_used_list:
6107                 del groups_not_used[group]
6108
6109         # Print a remark showing groups not used
6110         list_groups_not_used = groups_not_used.keys()
6111         list_groups_not_used.sort()
6112         for group in list_groups_not_used:
6113                 print "/* Group not used: %s = %s */" % (group, groups[group])
6114         print "\n"
6115
6116         # Print the groups table
6117         print "/* Group strings. */"
6118         print "static const char *ncp_groups[] = {"
6119         for group in groups_used_list:
6120                 print '\t/* %02d (%s) */ "%s",' % (groups_used_hash[group], group, groups[group])
6121         print "};\n"
6122
6123         # Print the group macros
6124         for group in groups_used_list:
6125                 name = string.upper(group)
6126                 print "#define NCP_GROUP_%s\t%d" % (name, groups_used_hash[group])
6127         print "\n"
6128
6129
6130         # Print the conditional_records for all Request Conditions.
6131         num = 0
6132         print "/* Request-Condition dfilter records. The NULL pointer"
6133         print "   is replaced by a pointer to the created dfilter_t. */"
6134         if len(global_req_cond) == 0:
6135                 print "static conditional_record req_conds = NULL;"
6136         else:
6137                 print "static conditional_record req_conds[] = {"
6138                 for req_cond in global_req_cond.keys():
6139                         print "\t{ \"%s\", NULL }," % (req_cond,)
6140                         global_req_cond[req_cond] = num
6141                         num = num + 1
6142                 print "};"
6143         print "#define NUM_REQ_CONDS %d" % (num,)
6144         print "#define NO_REQ_COND   NUM_REQ_CONDS\n\n"
6145
6146
6147
6148         # Print PTVC's for bitfields
6149         ett_list = []
6150         print "/* PTVC records for bit-fields. */"
6151         for var in sorted_vars:
6152                 if isinstance(var, bitfield):
6153                         sub_vars_ptvc = var.SubVariablesPTVC()
6154                         print "/* %s */" % (sub_vars_ptvc.Name())
6155                         print sub_vars_ptvc.Code()
6156                         ett_list.append(sub_vars_ptvc.ETTName())
6157
6158
6159         # Print the PTVC's for structures
6160         print "/* PTVC records for structs. */"
6161         # Sort them
6162         svhash = {}
6163         for svar in structs_used_hash.values():
6164                 svhash[svar.HFName()] = svar
6165                 if svar.descr:
6166                         ett_list.append(svar.ETTName())
6167
6168         struct_vars = svhash.keys()
6169         struct_vars.sort()
6170         for varname in struct_vars:
6171                 var = svhash[varname]
6172                 print var.Code()
6173
6174         ett_list.sort()
6175
6176         # Print regular PTVC's
6177         print "/* PTVC records. These are re-used to save space. */"
6178         for ptvc in ptvc_lists.Members():
6179                 if not ptvc.Null() and not ptvc.Empty():
6180                         print ptvc.Code()
6181
6182         # Print error_equivalency tables
6183         print "/* Error-Equivalency Tables. These are re-used to save space. */"
6184         for compcodes in compcode_lists.Members():
6185                 errors = compcodes.Records()
6186                 # Make sure the record for error = 0x00 comes last.
6187                 print "static const error_equivalency %s[] = {" % (compcodes.Name())
6188                 for error in errors:
6189                         error_in_packet = error >> 8;
6190                         ncp_error_index = errors_used_hash[error]
6191                         print "\t{ 0x%02x, %d }, /* 0x%04x */" % (error_in_packet,
6192                                 ncp_error_index, error)
6193                 print "\t{ 0x00, -1 }\n};\n"
6194
6195
6196
6197         # Print integer arrays for all ncp_records that need
6198         # a list of req_cond_indexes. Do it "uniquely" to save space;
6199         # if multiple packets share the same set of req_cond's,
6200         # then they'll share the same integer array
6201         print "/* Request Condition Indexes */"
6202         # First, make them unique
6203         req_cond_collection = UniqueCollection("req_cond_collection")
6204         for pkt in packets:
6205                 req_conds = pkt.CalculateReqConds()
6206                 if req_conds:
6207                         unique_list = req_cond_collection.Add(req_conds)
6208                         pkt.SetReqConds(unique_list)
6209                 else:
6210                         pkt.SetReqConds(None)
6211
6212         # Print them
6213         for req_cond in req_cond_collection.Members():
6214                 print "static const int %s[] = {" % (req_cond.Name(),)
6215                 print "\t",
6216                 vals = []
6217                 for text in req_cond.Records():
6218                         vals.append(global_req_cond[text])
6219                 vals.sort()
6220                 for val in vals:
6221                         print "%s, " % (val,),
6222
6223                 print "-1 };"
6224                 print ""
6225
6226
6227
6228         # Functions without length parameter
6229         funcs_without_length = {}
6230
6231         # Print info string structures
6232         print "/* Info Strings */"
6233         for pkt in packets:
6234                 if pkt.req_info_str:
6235                         name = pkt.InfoStrName() + "_req"
6236                         var = pkt.req_info_str[0]
6237                         print "static const info_string_t %s = {" % (name,)
6238                         print "\t&%s," % (var.HFName(),)
6239                         print '\t"%s",' % (pkt.req_info_str[1],)
6240                         print '\t"%s"' % (pkt.req_info_str[2],)
6241                         print "};\n"
6242
6243
6244
6245         # Print ncp_record packet records
6246         print "#define SUBFUNC_WITH_LENGTH      0x02"
6247         print "#define SUBFUNC_NO_LENGTH        0x01"
6248         print "#define NO_SUBFUNC               0x00"
6249
6250         print "/* ncp_record structs for packets */"
6251         print "static const ncp_record ncp_packets[] = {"
6252         for pkt in packets:
6253                 if pkt.HasSubFunction():
6254                         func = pkt.FunctionCode('high')
6255                         if pkt.HasLength():
6256                                 subfunc_string = "SUBFUNC_WITH_LENGTH"
6257                                 # Ensure that the function either has a length param or not
6258                                 if funcs_without_length.has_key(func):
6259                                         sys.exit("Function 0x%04x sometimes has length param, sometimes not." \
6260                                                 % (pkt.FunctionCode(),))
6261                         else:
6262                                 subfunc_string = "SUBFUNC_NO_LENGTH"
6263                                 funcs_without_length[func] = 1
6264                 else:
6265                         subfunc_string = "NO_SUBFUNC"
6266                 print '\t{ 0x%02x, 0x%02x, %s, "%s",' % (pkt.FunctionCode('high'),
6267                         pkt.FunctionCode('low'), subfunc_string, pkt.Description()),
6268
6269                 print '\t%d /* %s */,' % (groups_used_hash[pkt.Group()], pkt.Group())
6270
6271                 ptvc = pkt.PTVCRequest()
6272                 if not ptvc.Null() and not ptvc.Empty():
6273                         ptvc_request = ptvc.Name()
6274                 else:
6275                         ptvc_request = 'NULL'
6276
6277                 ptvc = pkt.PTVCReply()
6278                 if not ptvc.Null() and not ptvc.Empty():
6279                         ptvc_reply = ptvc.Name()
6280                 else:
6281                         ptvc_reply = 'NULL'
6282
6283                 errors = pkt.CompletionCodes()
6284
6285                 req_conds_obj = pkt.GetReqConds()
6286                 if req_conds_obj:
6287                         req_conds = req_conds_obj.Name()
6288                 else:
6289                         req_conds = "NULL"
6290
6291                 if not req_conds_obj:
6292                         req_cond_size = "NO_REQ_COND_SIZE"
6293                 else:
6294                         req_cond_size = pkt.ReqCondSize()
6295                         if req_cond_size == None:
6296                                 msg.write("NCP packet %s nees a ReqCondSize*() call\n" \
6297                                         % (pkt.CName(),))
6298                                 sys.exit(1)
6299
6300                 if pkt.req_info_str:
6301                         req_info_str = "&" + pkt.InfoStrName() + "_req"
6302                 else:
6303                         req_info_str = "NULL"
6304
6305                 print '\t\t%s, %s, %s, %s, %s, %s },\n' % \
6306                         (ptvc_request, ptvc_reply, errors.Name(), req_conds,
6307                         req_cond_size, req_info_str)
6308
6309         print '\t{ 0, 0, 0, NULL, 0, NULL, NULL, NULL, NULL, NO_REQ_COND_SIZE, NULL }'
6310         print "};\n"
6311
6312         print "/* ncp funcs that require a subfunc */"
6313         print "static const guint8 ncp_func_requires_subfunc[] = {"
6314         hi_seen = {}
6315         for pkt in packets:
6316                 if pkt.HasSubFunction():
6317                         hi_func = pkt.FunctionCode('high')
6318                         if not hi_seen.has_key(hi_func):
6319                                 print "\t0x%02x," % (hi_func)
6320                                 hi_seen[hi_func] = 1
6321         print "\t0"
6322         print "};\n"
6323
6324
6325         print "/* ncp funcs that have no length parameter */"
6326         print "static const guint8 ncp_func_has_no_length_parameter[] = {"
6327         funcs = funcs_without_length.keys()
6328         funcs.sort()
6329         for func in funcs:
6330                 print "\t0x%02x," % (func,)
6331         print "\t0"
6332         print "};\n"
6333
6334         # final_registration_ncp2222()
6335         print """
6336 void
6337 final_registration_ncp2222(void)
6338 {
6339         int i;
6340         """
6341
6342         # Create dfilter_t's for conditional_record's
6343         print """
6344         for (i = 0; i < NUM_REQ_CONDS; i++) {
6345                 if (!dfilter_compile((const gchar*)req_conds[i].dfilter_text,
6346                         &req_conds[i].dfilter)) {
6347                         g_message("NCP dissector failed to compiler dfilter: %s\\n",
6348                         req_conds[i].dfilter_text);
6349                         g_assert_not_reached();
6350                 }
6351         }
6352 }
6353         """
6354
6355         # proto_register_ncp2222()
6356         print """
6357 static const value_string ncp_nds_verb_vals[] = {
6358         { 1, "Resolve Name" },
6359         { 2, "Read Entry Information" },
6360         { 3, "Read" },
6361         { 4, "Compare" },
6362         { 5, "List" },
6363         { 6, "Search Entries" },
6364         { 7, "Add Entry" },
6365         { 8, "Remove Entry" },
6366         { 9, "Modify Entry" },
6367         { 10, "Modify RDN" },
6368         { 11, "Create Attribute" },
6369         { 12, "Read Attribute Definition" },
6370         { 13, "Remove Attribute Definition" },
6371         { 14, "Define Class" },
6372         { 15, "Read Class Definition" },
6373         { 16, "Modify Class Definition" },
6374         { 17, "Remove Class Definition" },
6375         { 18, "List Containable Classes" },
6376         { 19, "Get Effective Rights" },
6377         { 20, "Add Partition" },
6378         { 21, "Remove Partition" },
6379         { 22, "List Partitions" },
6380         { 23, "Split Partition" },
6381         { 24, "Join Partitions" },
6382         { 25, "Add Replica" },
6383         { 26, "Remove Replica" },
6384         { 27, "Open Stream" },
6385         { 28, "Search Filter" },
6386         { 29, "Create Subordinate Reference" },
6387         { 30, "Link Replica" },
6388         { 31, "Change Replica Type" },
6389         { 32, "Start Update Schema" },
6390         { 33, "End Update Schema" },
6391         { 34, "Update Schema" },
6392         { 35, "Start Update Replica" },
6393         { 36, "End Update Replica" },
6394         { 37, "Update Replica" },
6395         { 38, "Synchronize Partition" },
6396         { 39, "Synchronize Schema" },
6397         { 40, "Read Syntaxes" },
6398         { 41, "Get Replica Root ID" },
6399         { 42, "Begin Move Entry" },
6400         { 43, "Finish Move Entry" },
6401         { 44, "Release Moved Entry" },
6402         { 45, "Backup Entry" },
6403         { 46, "Restore Entry" },
6404         { 47, "Save DIB" },
6405         { 48, "Control" },
6406         { 49, "Remove Backlink" },
6407         { 50, "Close Iteration" },
6408         { 51, "Unused" },
6409         { 52, "Audit Skulking" },
6410         { 53, "Get Server Address" },
6411         { 54, "Set Keys" },
6412         { 55, "Change Password" },
6413         { 56, "Verify Password" },
6414         { 57, "Begin Login" },
6415         { 58, "Finish Login" },
6416         { 59, "Begin Authentication" },
6417         { 60, "Finish Authentication" },
6418         { 61, "Logout" },
6419         { 62, "Repair Ring" },
6420         { 63, "Repair Timestamps" },
6421         { 64, "Create Back Link" },
6422         { 65, "Delete External Reference" },
6423         { 66, "Rename External Reference" },
6424         { 67, "Create Directory Entry" },
6425         { 68, "Remove Directory Entry" },
6426         { 69, "Designate New Master" },
6427         { 70, "Change Tree Name" },
6428         { 71, "Partition Entry Count" },
6429         { 72, "Check Login Restrictions" },
6430         { 73, "Start Join" },
6431         { 74, "Low Level Split" },
6432         { 75, "Low Level Join" },
6433         { 76, "Abort Low Level Join" },
6434         { 77, "Get All Servers" },
6435         { 255, "EDirectory Call" },
6436         { 0,  NULL }
6437 };
6438
6439 void
6440 proto_register_ncp2222(void)
6441 {
6442
6443         static hf_register_info hf[] = {
6444         { &hf_ncp_func,
6445         { "Function", "ncp.func", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6446
6447         { &hf_ncp_length,
6448         { "Packet Length", "ncp.length", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
6449
6450         { &hf_ncp_subfunc,
6451         { "SubFunction", "ncp.subfunc", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6452
6453         { &hf_ncp_completion_code,
6454         { "Completion Code", "ncp.completion_code", FT_UINT8, BASE_HEX, NULL, 0x0, "", HFILL }},
6455
6456         { &hf_ncp_fragment_handle,
6457         { "NDS Fragment Handle", "ncp.ndsfrag", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6458
6459         { &hf_ncp_fragment_size,
6460         { "NDS Fragment Size", "ncp.ndsfragsize", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6461
6462         { &hf_ncp_message_size,
6463         { "Message Size", "ncp.ndsmessagesize", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6464
6465         { &hf_ncp_nds_flag,
6466         { "Flags", "ncp.ndsflag", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6467
6468         { &hf_ncp_nds_verb,
6469         { "NDS Verb", "ncp.ndsverb", FT_UINT8, BASE_HEX, VALS(ncp_nds_verb_vals), 0x0, "", HFILL }},
6470
6471         { &hf_ping_version,
6472         { "NDS Version", "ncp.ping_version", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
6473
6474         { &hf_nds_version,
6475         { "NDS Version", "ncp.nds_version", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6476
6477         { &hf_nds_tree_name,
6478         { "Tree Name", "ncp.nds_tree_name", FT_STRING, BASE_DEC, NULL, 0x0, "", HFILL }},
6479
6480         /*
6481          * XXX - the page at
6482          *
6483          *      http://www.odyssea.com/whats_new/tcpipnet/tcpipnet.html
6484          *
6485          * says of the connection status "The Connection Code field may
6486          * contain values that indicate the status of the client host to
6487          * server connection.  A value of 1 in the fourth bit of this data
6488          * byte indicates that the server is unavailable (server was
6489          * downed).
6490          *
6491          * The page at
6492          *
6493          *      http://www.unm.edu/~network/presentations/course/appendix/appendix_f/tsld088.htm
6494          *
6495          * says that bit 0 is "bad service", bit 2 is "no connection
6496          * available", bit 4 is "service down", and bit 6 is "server
6497          * has a broadcast message waiting for the client".
6498          *
6499          * Should it be displayed in hex, and should those bits (and any
6500          * other bits with significance) be displayed as bitfields
6501          * underneath it?
6502          */
6503         { &hf_ncp_connection_status,
6504         { "Connection Status", "ncp.connection_status", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }},
6505
6506         { &hf_ncp_req_frame_num,
6507         { "Response to Request in Frame Number", "ncp.req_frame_num", FT_FRAMENUM, BASE_NONE,
6508                 NULL, 0x0, "", HFILL }},
6509
6510         { &hf_ncp_req_frame_time,
6511         { "Time from Request", "ncp.time", FT_RELATIVE_TIME, BASE_NONE,
6512                 NULL, 0x0, "Time between request and response in seconds", HFILL }},
6513
6514         { &hf_nds_flags,
6515         { "NDS Return Flags", "ncp.nds_flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6516
6517
6518         { &hf_nds_reply_depth,
6519         { "Distance from Root", "ncp.ndsdepth", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6520
6521         { &hf_nds_reply_rev,
6522         { "NDS Revision", "ncp.ndsrev", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6523
6524         { &hf_nds_reply_flags,
6525         { "Flags", "ncp.ndsflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
6526
6527         { &hf_nds_p1type,
6528         { "NDS Parameter Type", "ncp.p1type", FT_UINT8, BASE_DEC, NULL, 0x0, "", HFILL }},
6529
6530         { &hf_nds_uint32value,
6531         { "NDS Value", "ncp.uint32value", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
6532
6533         { &hf_nds_bit1,
6534         { "Typeless", "ncp.nds_bit1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6535
6536         { &hf_nds_bit2,
6537         { "All Containers", "ncp.nds_bit2", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6538
6539         { &hf_nds_bit3,
6540         { "Slashed", "ncp.nds_bit3", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6541
6542         { &hf_nds_bit4,
6543         { "Dotted", "ncp.nds_bit4", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6544
6545         { &hf_nds_bit5,
6546         { "Tuned", "ncp.nds_bit5", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6547
6548         { &hf_nds_bit6,
6549         { "Not Defined", "ncp.nds_bit6", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6550
6551         { &hf_nds_bit7,
6552         { "Not Defined", "ncp.nds_bit7", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6553
6554         { &hf_nds_bit8,
6555         { "Not Defined", "ncp.nds_bit8", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6556
6557         { &hf_nds_bit9,
6558         { "Not Defined", "ncp.nds_bit9", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6559
6560         { &hf_nds_bit10,
6561         { "Not Defined", "ncp.nds_bit10", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6562
6563         { &hf_nds_bit11,
6564         { "Not Defined", "ncp.nds_bit11", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6565
6566         { &hf_nds_bit12,
6567         { "Not Defined", "ncp.nds_bit12", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6568
6569         { &hf_nds_bit13,
6570         { "Not Defined", "ncp.nds_bit13", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6571
6572         { &hf_nds_bit14,
6573         { "Not Defined", "ncp.nds_bit14", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6574
6575         { &hf_nds_bit15,
6576         { "Not Defined", "ncp.nds_bit15", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6577
6578         { &hf_nds_bit16,
6579         { "Not Defined", "ncp.nds_bit16", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6580
6581         { &hf_bit1outflags,
6582         { "Output Flags", "ncp.bit1outflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6583
6584         { &hf_bit2outflags,
6585         { "Entry ID", "ncp.bit2outflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6586
6587         { &hf_bit3outflags,
6588         { "Replica State", "ncp.bit3outflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6589
6590         { &hf_bit4outflags,
6591         { "Modification Timestamp", "ncp.bit4outflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6592
6593         { &hf_bit5outflags,
6594         { "Purge Time", "ncp.bit5outflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6595
6596         { &hf_bit6outflags,
6597         { "Local Partition ID", "ncp.bit6outflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6598
6599         { &hf_bit7outflags,
6600         { "Distinguished Name", "ncp.bit7outflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6601
6602         { &hf_bit8outflags,
6603         { "Replica Type", "ncp.bit8outflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6604
6605         { &hf_bit9outflags,
6606         { "Partition Busy", "ncp.bit9outflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6607
6608         { &hf_bit10outflags,
6609         { "Not Defined", "ncp.bit10outflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6610
6611         { &hf_bit11outflags,
6612         { "Not Defined", "ncp.bit11outflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6613
6614         { &hf_bit12outflags,
6615         { "Not Defined", "ncp.bit12outflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6616
6617         { &hf_bit13outflags,
6618         { "Not Defined", "ncp.bit13outflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6619
6620         { &hf_bit14outflags,
6621         { "Not Defined", "ncp.bit14outflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6622
6623         { &hf_bit15outflags,
6624         { "Not Defined", "ncp.bit15outflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6625
6626         { &hf_bit16outflags,
6627         { "Not Defined", "ncp.bit16outflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6628
6629         { &hf_bit1nflags,
6630         { "Entry ID", "ncp.bit1nflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6631
6632         { &hf_bit2nflags,
6633         { "Readable", "ncp.bit2nflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6634
6635         { &hf_bit3nflags,
6636         { "Writeable", "ncp.bit3nflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6637
6638         { &hf_bit4nflags,
6639         { "Master", "ncp.bit4nflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6640
6641         { &hf_bit5nflags,
6642         { "Create ID", "ncp.bit5nflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6643
6644         { &hf_bit6nflags,
6645         { "Walk Tree", "ncp.bit6nflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6646
6647         { &hf_bit7nflags,
6648         { "Dereference Alias", "ncp.bit7nflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6649
6650         { &hf_bit8nflags,
6651         { "Not Defined", "ncp.bit8nflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6652
6653         { &hf_bit9nflags,
6654         { "Not Defined", "ncp.bit9nflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6655
6656         { &hf_bit10nflags,
6657         { "Not Defined", "ncp.bit10nflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6658
6659         { &hf_bit11nflags,
6660         { "Not Defined", "ncp.bit11nflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6661
6662         { &hf_bit12nflags,
6663         { "Not Defined", "ncp.bit12nflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6664
6665         { &hf_bit13nflags,
6666         { "Not Defined", "ncp.bit13nflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6667
6668         { &hf_bit14nflags,
6669         { "Prefer Referrals", "ncp.bit14nflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6670
6671         { &hf_bit15nflags,
6672         { "Prefer Only Referrals", "ncp.bit15nflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6673
6674         { &hf_bit16nflags,
6675         { "Not Defined", "ncp.bit16nflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6676
6677         { &hf_bit1rflags,
6678         { "Typeless", "ncp.bit1rflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6679
6680         { &hf_bit2rflags,
6681         { "Slashed", "ncp.bit2rflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6682
6683         { &hf_bit3rflags,
6684         { "Dotted", "ncp.bit3rflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6685
6686         { &hf_bit4rflags,
6687         { "Tuned", "ncp.bit4rflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6688
6689         { &hf_bit5rflags,
6690         { "Not Defined", "ncp.bit5rflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6691
6692         { &hf_bit6rflags,
6693         { "Not Defined", "ncp.bit6rflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6694
6695         { &hf_bit7rflags,
6696         { "Not Defined", "ncp.bit7rflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6697
6698         { &hf_bit8rflags,
6699         { "Not Defined", "ncp.bit8rflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6700
6701         { &hf_bit9rflags,
6702         { "Not Defined", "ncp.bit9rflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6703
6704         { &hf_bit10rflags,
6705         { "Not Defined", "ncp.bit10rflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6706
6707         { &hf_bit11rflags,
6708         { "Not Defined", "ncp.bit11rflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6709
6710         { &hf_bit12rflags,
6711         { "Not Defined", "ncp.bit12rflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6712
6713         { &hf_bit13rflags,
6714         { "Not Defined", "ncp.bit13rflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6715
6716         { &hf_bit14rflags,
6717         { "Not Defined", "ncp.bit14rflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6718
6719         { &hf_bit15rflags,
6720         { "Not Defined", "ncp.bit15rflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6721
6722         { &hf_bit16rflags,
6723         { "Not Defined", "ncp.bit16rflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6724
6725         { &hf_bit1eflags,
6726         { "Alias Entry", "ncp.bit1eflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6727
6728         { &hf_bit2eflags,
6729         { "Partition Root", "ncp.bit2eflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6730
6731         { &hf_bit3eflags,
6732         { "Container Entry", "ncp.bit3eflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6733
6734         { &hf_bit4eflags,
6735         { "Container Alias", "ncp.bit4eflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6736
6737         { &hf_bit5eflags,
6738         { "Matches List Filter", "ncp.bit5eflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6739
6740         { &hf_bit6eflags,
6741         { "Reference Entry", "ncp.bit6eflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6742
6743         { &hf_bit7eflags,
6744         { "40x Reference Entry", "ncp.bit7eflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6745
6746         { &hf_bit8eflags,
6747         { "Back Linked", "ncp.bit8eflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6748
6749         { &hf_bit9eflags,
6750         { "New Entry", "ncp.bit9eflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6751
6752         { &hf_bit10eflags,
6753         { "Temporary Reference", "ncp.bit10eflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6754
6755         { &hf_bit11eflags,
6756         { "Audited", "ncp.bit11eflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6757
6758         { &hf_bit12eflags,
6759         { "Entry Not Present", "ncp.bit12eflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6760
6761         { &hf_bit13eflags,
6762         { "Entry Verify CTS", "ncp.bit13eflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6763
6764         { &hf_bit14eflags,
6765         { "Entry Damaged", "ncp.bit14eflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6766
6767         { &hf_bit15eflags,
6768         { "Not Defined", "ncp.bit15rflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6769
6770         { &hf_bit16eflags,
6771         { "Not Defined", "ncp.bit16rflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6772
6773         { &hf_bit1infoflagsl,
6774         { "Output Flags", "ncp.bit1infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6775
6776         { &hf_bit2infoflagsl,
6777         { "Entry ID", "ncp.bit2infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6778
6779         { &hf_bit3infoflagsl,
6780         { "Entry Flags", "ncp.bit3infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6781
6782         { &hf_bit4infoflagsl,
6783         { "Subordinate Count", "ncp.bit4infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6784
6785         { &hf_bit5infoflagsl,
6786         { "Modification Time", "ncp.bit5infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6787
6788         { &hf_bit6infoflagsl,
6789         { "Modification Timestamp", "ncp.bit6infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6790
6791         { &hf_bit7infoflagsl,
6792         { "Creation Timestamp", "ncp.bit7infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6793
6794         { &hf_bit8infoflagsl,
6795         { "Partition Root ID", "ncp.bit8infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6796
6797         { &hf_bit9infoflagsl,
6798         { "Parent ID", "ncp.bit9infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6799
6800         { &hf_bit10infoflagsl,
6801         { "Revision Count", "ncp.bit10infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6802
6803         { &hf_bit11infoflagsl,
6804         { "Replica Type", "ncp.bit11infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6805
6806         { &hf_bit12infoflagsl,
6807         { "Base Class", "ncp.bit12infoflagsl", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6808
6809         { &hf_bit13infoflagsl,
6810         { "Relative Distinguished Name", "ncp.bit13infoflagsl", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6811
6812         { &hf_bit14infoflagsl,
6813         { "Distinguished Name", "ncp.bit14infoflagsl", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6814
6815         { &hf_bit15infoflagsl,
6816         { "Root Distinguished Name", "ncp.bit15infoflagsl", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6817
6818         { &hf_bit16infoflagsl,
6819         { "Parent Distinguished Name", "ncp.bit16infoflagsl", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6820
6821         { &hf_bit1infoflagsh,
6822         { "Purge Time", "ncp.bit1infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6823
6824         { &hf_bit2infoflagsh,
6825         { "Dereference Base Class", "ncp.bit2infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6826
6827         { &hf_bit3infoflagsh,
6828         { "Not Defined", "ncp.bit3infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6829
6830         { &hf_bit4infoflagsh,
6831         { "Not Defined", "ncp.bit4infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6832
6833         { &hf_bit5infoflagsh,
6834         { "Not Defined", "ncp.bit5infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6835
6836         { &hf_bit6infoflagsh,
6837         { "Not Defined", "ncp.bit6infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6838
6839         { &hf_bit7infoflagsh,
6840         { "Not Defined", "ncp.bit7infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6841
6842         { &hf_bit8infoflagsh,
6843         { "Not Defined", "ncp.bit8infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6844
6845         { &hf_bit9infoflagsh,
6846         { "Not Defined", "ncp.bit9infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6847
6848         { &hf_bit10infoflagsh,
6849         { "Not Defined", "ncp.bit10infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6850
6851         { &hf_bit11infoflagsh,
6852         { "Not Defined", "ncp.bit11infoflagsh", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6853
6854         { &hf_bit12infoflagsh,
6855         { "Not Defined", "ncp.bit12infoflagshs", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6856
6857         { &hf_bit13infoflagsh,
6858         { "Not Defined", "ncp.bit13infoflagsh", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6859
6860         { &hf_bit14infoflagsh,
6861         { "Not Defined", "ncp.bit14infoflagsh", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6862
6863         { &hf_bit15infoflagsh,
6864         { "Not Defined", "ncp.bit15infoflagsh", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6865
6866         { &hf_bit16infoflagsh,
6867         { "Not Defined", "ncp.bit16infoflagsh", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6868
6869         { &hf_bit1lflags,
6870         { "List Typeless", "ncp.bit1lflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6871
6872         { &hf_bit2lflags,
6873         { "List Containers", "ncp.bit2lflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6874
6875         { &hf_bit3lflags,
6876         { "List Slashed", "ncp.bit3lflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6877
6878         { &hf_bit4lflags,
6879         { "List Dotted", "ncp.bit4lflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6880
6881         { &hf_bit5lflags,
6882         { "Dereference Alias", "ncp.bit5lflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6883
6884         { &hf_bit6lflags,
6885         { "List All Containers", "ncp.bit6lflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6886
6887         { &hf_bit7lflags,
6888         { "List Obsolete", "ncp.bit7lflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6889
6890         { &hf_bit8lflags,
6891         { "List Tuned Output", "ncp.bit8lflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6892
6893         { &hf_bit9lflags,
6894         { "List External Reference", "ncp.bit9lflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6895
6896         { &hf_bit10lflags,
6897         { "Not Defined", "ncp.bit10lflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6898
6899         { &hf_bit11lflags,
6900         { "Not Defined", "ncp.bit11lflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6901
6902         { &hf_bit12lflags,
6903         { "Not Defined", "ncp.bit12lflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6904
6905         { &hf_bit13lflags,
6906         { "Not Defined", "ncp.bit13lflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6907
6908         { &hf_bit14lflags,
6909         { "Not Defined", "ncp.bit14lflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6910
6911         { &hf_bit15lflags,
6912         { "Not Defined", "ncp.bit15lflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6913
6914         { &hf_bit16lflags,
6915         { "Not Defined", "ncp.bit16lflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6916
6917         { &hf_bit1l1flagsl,
6918         { "Output Flags", "ncp.bit1l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6919
6920         { &hf_bit2l1flagsl,
6921         { "Entry ID", "ncp.bit2l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6922
6923         { &hf_bit3l1flagsl,
6924         { "Replica State", "ncp.bit3l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6925
6926         { &hf_bit4l1flagsl,
6927         { "Modification Timestamp", "ncp.bit4l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6928
6929         { &hf_bit5l1flagsl,
6930         { "Purge Time", "ncp.bit5l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6931
6932         { &hf_bit6l1flagsl,
6933         { "Local Partition ID", "ncp.bit6l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6934
6935         { &hf_bit7l1flagsl,
6936         { "Distinguished Name", "ncp.bit7l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6937
6938         { &hf_bit8l1flagsl,
6939         { "Replica Type", "ncp.bit8l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6940
6941         { &hf_bit9l1flagsl,
6942         { "Partition Busy", "ncp.bit9l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6943
6944         { &hf_bit10l1flagsl,
6945         { "Not Defined", "ncp.bit10l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6946
6947         { &hf_bit11l1flagsl,
6948         { "Not Defined", "ncp.bit11l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6949
6950         { &hf_bit12l1flagsl,
6951         { "Not Defined", "ncp.bit12l1flagsl", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
6952
6953         { &hf_bit13l1flagsl,
6954         { "Not Defined", "ncp.bit13l1flagsl", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
6955
6956         { &hf_bit14l1flagsl,
6957         { "Not Defined", "ncp.bit14l1flagsl", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
6958
6959         { &hf_bit15l1flagsl,
6960         { "Not Defined", "ncp.bit15l1flagsl", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
6961
6962         { &hf_bit16l1flagsl,
6963         { "Not Defined", "ncp.bit16l1flagsl", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
6964
6965         { &hf_bit1l1flagsh,
6966         { "Not Defined", "ncp.bit1l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
6967
6968         { &hf_bit2l1flagsh,
6969         { "Not Defined", "ncp.bit2l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
6970
6971         { &hf_bit3l1flagsh,
6972         { "Not Defined", "ncp.bit3l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
6973
6974         { &hf_bit4l1flagsh,
6975         { "Not Defined", "ncp.bit4l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
6976
6977         { &hf_bit5l1flagsh,
6978         { "Not Defined", "ncp.bit5l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
6979
6980         { &hf_bit6l1flagsh,
6981         { "Not Defined", "ncp.bit6l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
6982
6983         { &hf_bit7l1flagsh,
6984         { "Not Defined", "ncp.bit7l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
6985
6986         { &hf_bit8l1flagsh,
6987         { "Not Defined", "ncp.bit8l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
6988
6989         { &hf_bit9l1flagsh,
6990         { "Not Defined", "ncp.bit9l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
6991
6992         { &hf_bit10l1flagsh,
6993         { "Not Defined", "ncp.bit10l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
6994
6995         { &hf_bit11l1flagsh,
6996         { "Not Defined", "ncp.bit11l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
6997
6998         { &hf_bit12l1flagsh,
6999         { "Not Defined", "ncp.bit12l1flagsh", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7000
7001         { &hf_bit13l1flagsh,
7002         { "Not Defined", "ncp.bit13l1flagsh", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7003
7004         { &hf_bit14l1flagsh,
7005         { "Not Defined", "ncp.bit14l1flagsh", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7006
7007         { &hf_bit15l1flagsh,
7008         { "Not Defined", "ncp.bit15l1flagsh", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7009
7010         { &hf_bit16l1flagsh,
7011         { "Not Defined", "ncp.bit16l1flagsh", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7012
7013         { &hf_bit1vflags,
7014         { "Naming", "ncp.bit1vflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7015
7016         { &hf_bit2vflags,
7017         { "Base Class", "ncp.bit2vflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7018
7019         { &hf_bit3vflags,
7020         { "Present", "ncp.bit3vflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7021
7022         { &hf_bit4vflags,
7023         { "Value Damaged", "ncp.bit4vflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7024
7025         { &hf_bit5vflags,
7026         { "Not Defined", "ncp.bit5vflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7027
7028         { &hf_bit6vflags,
7029         { "Not Defined", "ncp.bit6vflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7030
7031         { &hf_bit7vflags,
7032         { "Not Defined", "ncp.bit7vflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7033
7034         { &hf_bit8vflags,
7035         { "Not Defined", "ncp.bit8vflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7036
7037         { &hf_bit9vflags,
7038         { "Not Defined", "ncp.bit9vflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7039
7040         { &hf_bit10vflags,
7041         { "Not Defined", "ncp.bit10vflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7042
7043         { &hf_bit11vflags,
7044         { "Not Defined", "ncp.bit11vflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7045
7046         { &hf_bit12vflags,
7047         { "Not Defined", "ncp.bit12vflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7048
7049         { &hf_bit13vflags,
7050         { "Not Defined", "ncp.bit13vflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7051
7052         { &hf_bit14vflags,
7053         { "Not Defined", "ncp.bit14vflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7054
7055         { &hf_bit15vflags,
7056         { "Not Defined", "ncp.bit15vflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7057
7058         { &hf_bit16vflags,
7059         { "Not Defined", "ncp.bit16vflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7060
7061         { &hf_bit1cflags,
7062         { "Ambiguous Containment", "ncp.bit1cflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7063
7064         { &hf_bit2cflags,
7065         { "Ambiguous Naming", "ncp.bit2cflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7066
7067         { &hf_bit3cflags,
7068         { "Class Definition Cannot be Removed", "ncp.bit3cflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7069
7070         { &hf_bit4cflags,
7071         { "Effective Class", "ncp.bit4cflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7072
7073         { &hf_bit5cflags,
7074         { "Container Class", "ncp.bit5cflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7075
7076         { &hf_bit6cflags,
7077         { "Not Defined", "ncp.bit6cflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7078
7079         { &hf_bit7cflags,
7080         { "Not Defined", "ncp.bit7cflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7081
7082         { &hf_bit8cflags,
7083         { "Not Defined", "ncp.bit8cflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7084
7085         { &hf_bit9cflags,
7086         { "Not Defined", "ncp.bit9cflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7087
7088         { &hf_bit10cflags,
7089         { "Not Defined", "ncp.bit10cflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7090
7091         { &hf_bit11cflags,
7092         { "Not Defined", "ncp.bit11cflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7093
7094         { &hf_bit12cflags,
7095         { "Not Defined", "ncp.bit12cflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7096
7097         { &hf_bit13cflags,
7098         { "Not Defined", "ncp.bit13cflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7099
7100         { &hf_bit14cflags,
7101         { "Not Defined", "ncp.bit14cflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7102
7103         { &hf_bit15cflags,
7104         { "Not Defined", "ncp.bit15cflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7105
7106         { &hf_bit16cflags,
7107         { "Not Defined", "ncp.bit16cflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7108
7109         { &hf_bit1acflags,
7110         { "Single Valued", "ncp.bit1acflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7111
7112         { &hf_bit2acflags,
7113         { "Sized", "ncp.bit2acflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7114
7115         { &hf_bit3acflags,
7116         { "Non-Removable", "ncp.bit3acflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7117
7118         { &hf_bit4acflags,
7119         { "Read Only", "ncp.bit4acflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7120
7121         { &hf_bit5acflags,
7122         { "Hidden", "ncp.bit5acflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7123
7124         { &hf_bit6acflags,
7125         { "String", "ncp.bit6acflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7126
7127         { &hf_bit7acflags,
7128         { "Synchronize Immediate", "ncp.bit7acflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7129
7130         { &hf_bit8acflags,
7131         { "Public Read", "ncp.bit8acflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7132
7133         { &hf_bit9acflags,
7134         { "Server Read", "ncp.bit9acflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7135
7136         { &hf_bit10acflags,
7137         { "Write Managed", "ncp.bit10acflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7138
7139         { &hf_bit11acflags,
7140         { "Per Replica", "ncp.bit11acflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7141
7142         { &hf_bit12acflags,
7143         { "Never Schedule Synchronization", "ncp.bit12acflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7144
7145         { &hf_bit13acflags,
7146         { "Operational", "ncp.bit13acflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7147
7148         { &hf_bit14acflags,
7149         { "Not Defined", "ncp.bit14acflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7150
7151         { &hf_bit15acflags,
7152         { "Not Defined", "ncp.bit15acflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7153
7154         { &hf_bit16acflags,
7155         { "Not Defined", "ncp.bit16acflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7156
7157
7158         { &hf_nds_reply_error,
7159         { "NDS Error", "ncp.ndsreplyerror", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7160
7161         { &hf_nds_net,
7162         { "Network","ncp.ndsnet", FT_IPXNET, BASE_NONE, NULL, 0x0, "", HFILL }},
7163
7164         { &hf_nds_node,
7165         { "Node",       "ncp.ndsnode", FT_ETHER, BASE_NONE, NULL, 0x0, "", HFILL }},
7166
7167         { &hf_nds_socket,
7168         { "Socket",     "ncp.ndssocket", FT_UINT16, BASE_HEX, NULL, 0x0, "", HFILL }},
7169
7170         { &hf_add_ref_ip,
7171         { "Address Referral", "ncp.ipref", FT_IPv4, BASE_DEC, NULL, 0x0, "", HFILL }},
7172
7173         { &hf_add_ref_udp,
7174         { "Address Referral", "ncp.udpref", FT_IPv4, BASE_DEC, NULL, 0x0, "", HFILL }},
7175
7176         { &hf_add_ref_tcp,
7177         { "Address Referral", "ncp.tcpref", FT_IPv4, BASE_DEC, NULL, 0x0, "", HFILL }},
7178
7179         { &hf_referral_record,
7180         { "Referral Record", "ncp.ref_rec", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7181
7182         { &hf_referral_addcount,
7183         { "Address Count", "ncp.ref_addcount", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7184
7185         { &hf_nds_port,
7186         { "Port", "ncp.ndsport", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7187
7188         { &hf_mv_string,
7189         { "Attribute Name ", "ncp.mv_string", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7190
7191         { &hf_nds_syntax,
7192         { "Attribute Syntax ", "ncp.nds_syntax", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7193
7194         { &hf_value_string,
7195         { "Value ", "ncp.value_string", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7196
7197     { &hf_nds_stream_name,
7198         { "Stream Name ", "ncp.nds_stream_name", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7199
7200         { &hf_nds_buffer_size,
7201         { "NDS Reply Buffer Size", "ncp.nds_reply_buf", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7202
7203         { &hf_nds_ver,
7204         { "NDS Version", "ncp.nds_ver", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7205
7206         { &hf_nds_nflags,
7207         { "Flags", "ncp.nds_nflags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7208
7209     { &hf_nds_rflags,
7210         { "Request Flags", "ncp.nds_rflags", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7211
7212     { &hf_nds_eflags,
7213         { "Entry Flags", "ncp.nds_eflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7214
7215         { &hf_nds_scope,
7216         { "Scope", "ncp.nds_scope", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7217
7218         { &hf_nds_name,
7219         { "Name", "ncp.nds_name", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7220
7221     { &hf_nds_name_type,
7222         { "Name Type", "ncp.nds_name_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7223
7224         { &hf_nds_comm_trans,
7225         { "Communications Transport", "ncp.nds_comm_trans", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7226
7227         { &hf_nds_tree_trans,
7228         { "Tree Walker Transport", "ncp.nds_tree_trans", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7229
7230         { &hf_nds_iteration,
7231         { "Iteration Handle", "ncp.nds_iteration", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7232
7233     { &hf_nds_file_handle,
7234         { "File Handle", "ncp.nds_file_handle", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7235
7236     { &hf_nds_file_size,
7237         { "File Size", "ncp.nds_file_size", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7238
7239         { &hf_nds_eid,
7240         { "NDS EID", "ncp.nds_eid", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7241
7242     { &hf_nds_depth,
7243         { "Distance object is from Root", "ncp.nds_depth", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7244
7245         { &hf_nds_info_type,
7246         { "Info Type", "ncp.nds_info_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7247
7248     { &hf_nds_class_def_type,
7249         { "Class Definition Type", "ncp.nds_class_def_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7250
7251         { &hf_nds_all_attr,
7252         { "All Attributes", "ncp.nds_all_attr", FT_UINT32, BASE_DEC, NULL, 0x0, "Return all Attributes?", HFILL }},
7253
7254     { &hf_nds_return_all_classes,
7255         { "All Classes", "ncp.nds_return_all_classes", FT_STRING, BASE_NONE, NULL, 0x0, "Return all Classes?", HFILL }},
7256
7257         { &hf_nds_req_flags,
7258         { "Request Flags", "ncp.nds_req_flags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7259
7260         { &hf_nds_attr,
7261         { "Attributes", "ncp.nds_attributes", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7262
7263     { &hf_nds_classes,
7264         { "Classes", "ncp.nds_classes", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7265
7266         { &hf_nds_crc,
7267         { "CRC", "ncp.nds_crc", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7268
7269         { &hf_nds_referrals,
7270         { "Referrals", "ncp.nds_referrals", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7271
7272         { &hf_nds_result_flags,
7273         { "Result Flags", "ncp.nds_result_flags", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7274
7275     { &hf_nds_stream_flags,
7276         { "Streams Flags", "ncp.nds_stream_flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7277
7278         { &hf_nds_tag_string,
7279         { "Tags", "ncp.nds_tags", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7280
7281         { &hf_value_bytes,
7282         { "Bytes", "ncp.value_bytes", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }},
7283
7284         { &hf_replica_type,
7285         { "Replica Type", "ncp.rtype", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7286
7287         { &hf_replica_state,
7288         { "Replica State", "ncp.rstate", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7289
7290     { &hf_nds_rnum,
7291         { "Replica Number", "ncp.rnum", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7292
7293         { &hf_nds_revent,
7294         { "Event", "ncp.revent", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7295
7296         { &hf_replica_number,
7297         { "Replica Number", "ncp.rnum", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7298
7299         { &hf_min_nds_ver,
7300         { "Minimum NDS Version", "ncp.min_nds_version", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7301
7302         { &hf_nds_ver_include,
7303         { "Include NDS Version", "ncp.inc_nds_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7304
7305         { &hf_nds_ver_exclude,
7306         { "Exclude NDS Version", "ncp.exc_nds_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7307
7308         { &hf_nds_es,
7309         { "Input Entry Specifier", "ncp.nds_es", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7310
7311         { &hf_es_type,
7312         { "Entry Specifier Type", "ncp.nds_es_type", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7313
7314         { &hf_rdn_string,
7315         { "RDN", "ncp.nds_rdn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7316
7317         { &hf_delim_string,
7318         { "Delimeter", "ncp.nds_delim", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7319
7320     { &hf_nds_dn_output_type,
7321         { "Output Entry Specifier Type", "ncp.nds_out_es_type", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7322
7323     { &hf_nds_nested_output_type,
7324         { "Nested Output Entry Specifier Type", "ncp.nds_nested_out_es", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7325
7326     { &hf_nds_output_delimiter,
7327         { "Output Delimiter", "ncp.nds_out_delimiter", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7328
7329     { &hf_nds_output_entry_specifier,
7330         { "Output Entry Specifier", "ncp.nds_out_es", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7331
7332     { &hf_es_value,
7333         { "Entry Specifier Value", "ncp.nds_es_value", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7334
7335     { &hf_es_rdn_count,
7336         { "RDN Count", "ncp.nds_es_rdn_count", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7337
7338     { &hf_nds_replica_num,
7339         { "Replica Number", "ncp.nds_replica_num", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7340
7341     { &hf_es_seconds,
7342         { "Seconds", "ncp.nds_es_seconds", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7343
7344     { &hf_nds_event_num,
7345         { "Event Number", "ncp.nds_event_num", FT_UINT16, BASE_DEC, NULL, 0x0, "", HFILL }},
7346
7347     { &hf_nds_compare_results,
7348         { "Compare Results", "ncp.nds_compare_results", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7349
7350     { &hf_nds_parent,
7351         { "Parent ID", "ncp.nds_parent", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7352
7353     { &hf_nds_name_filter,
7354         { "Name Filter", "ncp.nds_name_filter", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7355
7356     { &hf_nds_class_filter,
7357         { "Class Filter", "ncp.nds_class_filter", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7358
7359     { &hf_nds_time_filter,
7360         { "Time Filter", "ncp.nds_time_filter", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7361
7362     { &hf_nds_partition_root_id,
7363         { "Partition Root ID", "ncp.nds_partition_root_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7364
7365     { &hf_nds_replicas,
7366         { "Replicas", "ncp.nds_replicas", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7367
7368     { &hf_nds_purge,
7369         { "Purge Time", "ncp.nds_purge", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7370
7371     { &hf_nds_local_partition,
7372         { "Local Partition ID", "ncp.nds_local_partition", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7373
7374     { &hf_partition_busy,
7375     { "Partition Busy", "ncp.nds_partition_busy", FT_BOOLEAN, 16, NULL, 0x0, "", HFILL }},
7376
7377     { &hf_nds_number_of_changes,
7378         { "Number of Attribute Changes", "ncp.nds_number_of_changes", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7379
7380     { &hf_sub_count,
7381         { "Subordinate Count", "ncp.sub_count", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7382
7383     { &hf_nds_revision,
7384         { "Revision Count", "ncp.nds_rev_count", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7385
7386     { &hf_nds_base_class,
7387         { "Base Class", "ncp.nds_base_class", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7388
7389     { &hf_nds_relative_dn,
7390         { "Relative Distinguished Name", "ncp.nds_relative_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7391
7392     { &hf_nds_root_dn,
7393         { "Root Distinguished Name", "ncp.nds_root_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7394
7395     { &hf_nds_parent_dn,
7396         { "Parent Distinguished Name", "ncp.nds_parent_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7397
7398     { &hf_deref_base,
7399     { "Dereference Base Class", "ncp.nds_deref_base", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7400
7401     { &hf_nds_base,
7402     { "Base Class", "ncp.nds_base", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7403
7404     { &hf_nds_super,
7405     { "Super Class", "ncp.nds_super", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7406
7407     { &hf_nds_entry_info,
7408     { "Entry Information", "ncp.nds_entry_info", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7409
7410     { &hf_nds_privileges,
7411     { "Privileges", "ncp.nds_privileges", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7412
7413     { &hf_nds_vflags,
7414     { "Value Flags", "ncp.nds_vflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7415
7416     { &hf_nds_value_len,
7417     { "Value Length", "ncp.nds_vlength", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7418
7419     { &hf_nds_cflags,
7420     { "Class Flags", "ncp.nds_cflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7421
7422     { &hf_nds_asn1,
7423         { "ASN.1 ID", "ncp.nds_asn1", FT_BYTES, BASE_HEX, NULL, 0x0, "", HFILL }},
7424
7425     { &hf_nds_acflags,
7426     { "Attribute Constraint Flags", "ncp.nds_acflags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7427
7428     { &hf_nds_upper,
7429     { "Upper Limit Value", "ncp.nds_upper", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7430
7431     { &hf_nds_lower,
7432     { "Lower Limit Value", "ncp.nds_lower", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7433
7434     { &hf_nds_trustee_dn,
7435         { "Trustee Distinguished Name", "ncp.nds_trustee_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7436
7437     { &hf_nds_attribute_dn,
7438         { "Attribute Name", "ncp.nds_attribute_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7439
7440     { &hf_nds_acl_add,
7441         { "Access Control Lists to Add", "ncp.nds_acl_add", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7442
7443     { &hf_nds_acl_del,
7444         { "Access Control Lists to Delete", "ncp.nds_acl_del", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7445
7446     { &hf_nds_att_add,
7447         { "Attribute to Add", "ncp.nds_att_add", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7448
7449     { &hf_nds_att_del,
7450         { "Attribute to Delete", "ncp.nds_att_del", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7451
7452     { &hf_nds_keep,
7453     { "Delete Original RDN", "ncp.nds_keep", FT_BOOLEAN, 32, NULL, 0x0, "", HFILL }},
7454
7455     { &hf_nds_new_rdn,
7456         { "New Relative Distinguished Name", "ncp.nds_new_rdn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7457
7458     { &hf_nds_time_delay,
7459         { "Time Delay", "ncp.nds_time_delay", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7460
7461     { &hf_nds_root_name,
7462         { "Root Most Object Name", "ncp.nds_root_name", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7463
7464     { &hf_nds_new_part_id,
7465         { "New Partition Root ID", "ncp.nds_new_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7466
7467     { &hf_nds_child_part_id,
7468         { "Child Partition Root ID", "ncp.nds_child_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7469
7470     { &hf_nds_master_part_id,
7471         { "Master Partition Root ID", "ncp.nds_master_part_id", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7472
7473     { &hf_nds_target_name,
7474         { "Target Server Name", "ncp.nds_target_dn", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7475
7476
7477         { &hf_bit1pingflags1,
7478         { "Supported Fields", "ncp.bit1pingflags1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7479
7480         { &hf_bit2pingflags1,
7481         { "Depth", "ncp.bit2pingflags1", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7482
7483         { &hf_bit3pingflags1,
7484         { "Revision", "ncp.bit3pingflags1", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7485
7486         { &hf_bit4pingflags1,
7487         { "Flags", "ncp.bit4pingflags1", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7488
7489         { &hf_bit5pingflags1,
7490         { "Verification Flags", "ncp.bit5pingflags1", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7491
7492         { &hf_bit6pingflags1,
7493         { "Letter Version", "ncp.bit6pingflags1", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7494
7495         { &hf_bit7pingflags1,
7496         { "OS Version", "ncp.bit7pingflags1", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7497
7498         { &hf_bit8pingflags1,
7499         { "License Flags", "ncp.bit8pingflags1", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7500
7501         { &hf_bit9pingflags1,
7502         { "DS Time", "ncp.bit9pingflags1", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7503
7504         { &hf_bit10pingflags1,
7505         { "Not Defined", "ncp.bit10pingflags1", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7506
7507         { &hf_bit11pingflags1,
7508         { "Not Defined", "ncp.bit11pingflags1", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7509
7510         { &hf_bit12pingflags1,
7511         { "Not Defined", "ncp.bit12pingflags1", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7512
7513         { &hf_bit13pingflags1,
7514         { "Not Defined", "ncp.bit13pingflags1", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7515
7516         { &hf_bit14pingflags1,
7517         { "Not Defined", "ncp.bit14pingflags1", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7518
7519         { &hf_bit15pingflags1,
7520         { "Not Defined", "ncp.bit15pingflags1", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7521
7522         { &hf_bit16pingflags1,
7523         { "Not Defined", "ncp.bit16pingflags1", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7524
7525         { &hf_bit1pingflags2,
7526         { "Sap Name", "ncp.bit1pingflags2", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7527
7528         { &hf_bit2pingflags2,
7529         { "Tree Name", "ncp.bit2pingflags2", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7530
7531         { &hf_bit3pingflags2,
7532         { "OS Name", "ncp.bit3pingflags2", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7533
7534         { &hf_bit4pingflags2,
7535         { "Hardware Name", "ncp.bit4pingflags2", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7536
7537         { &hf_bit5pingflags2,
7538         { "Vendor Name", "ncp.bit5pingflags2", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7539
7540         { &hf_bit6pingflags2,
7541         { "Not Defined", "ncp.bit6pingflags2", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7542
7543         { &hf_bit7pingflags2,
7544         { "Not Defined", "ncp.bit7pingflags2", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7545
7546         { &hf_bit8pingflags2,
7547         { "Not Defined", "ncp.bit8pingflags2", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7548
7549         { &hf_bit9pingflags2,
7550         { "Not Defined", "ncp.bit9pingflags2", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7551
7552         { &hf_bit10pingflags2,
7553         { "Not Defined", "ncp.bit10pingflags2", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7554
7555         { &hf_bit11pingflags2,
7556         { "Not Defined", "ncp.bit11pingflags2", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7557
7558         { &hf_bit12pingflags2,
7559         { "Not Defined", "ncp.bit12pingflags2", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7560
7561         { &hf_bit13pingflags2,
7562         { "Not Defined", "ncp.bit13pingflags2", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7563
7564         { &hf_bit14pingflags2,
7565         { "Not Defined", "ncp.bit14pingflags2", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7566
7567         { &hf_bit15pingflags2,
7568         { "Not Defined", "ncp.bit15pingflags2", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7569
7570         { &hf_bit16pingflags2,
7571         { "Not Defined", "ncp.bit16pingflags2", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7572
7573         { &hf_bit1pingpflags1,
7574         { "Root Most Master Replica", "ncp.bit1pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7575
7576         { &hf_bit2pingpflags1,
7577         { "Time Synchronized", "ncp.bit2pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7578
7579         { &hf_bit3pingpflags1,
7580         { "Not Defined", "ncp.bit3pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7581
7582         { &hf_bit4pingpflags1,
7583         { "Not Defined", "ncp.bit4pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7584
7585         { &hf_bit5pingpflags1,
7586         { "Not Defined", "ncp.bit5pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7587
7588         { &hf_bit6pingpflags1,
7589         { "Not Defined", "ncp.bit6pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7590
7591         { &hf_bit7pingpflags1,
7592         { "Not Defined", "ncp.bit7pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7593
7594         { &hf_bit8pingpflags1,
7595         { "Not Defined", "ncp.bit8pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7596
7597         { &hf_bit9pingpflags1,
7598         { "Not Defined", "ncp.bit9pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7599
7600         { &hf_bit10pingpflags1,
7601         { "Not Defined", "ncp.bit10pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7602
7603         { &hf_bit11pingpflags1,
7604         { "Not Defined", "ncp.bit11pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7605
7606         { &hf_bit12pingpflags1,
7607         { "Not Defined", "ncp.bit12pingpflags1", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7608
7609         { &hf_bit13pingpflags1,
7610         { "Not Defined", "ncp.bit13pingpflags1", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7611
7612         { &hf_bit14pingpflags1,
7613         { "Not Defined", "ncp.bit14pingpflags1", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7614
7615         { &hf_bit15pingpflags1,
7616         { "Not Defined", "ncp.bit15pingpflags1", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7617
7618         { &hf_bit16pingpflags1,
7619         { "Not Defined", "ncp.bit16pingpflags1", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7620
7621         { &hf_bit1pingvflags1,
7622         { "Checksum", "ncp.bit1pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7623
7624         { &hf_bit2pingvflags1,
7625         { "CRC32", "ncp.bit2pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7626
7627         { &hf_bit3pingvflags1,
7628         { "Not Defined", "ncp.bit3pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7629
7630         { &hf_bit4pingvflags1,
7631         { "Not Defined", "ncp.bit4pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7632
7633         { &hf_bit5pingvflags1,
7634         { "Not Defined", "ncp.bit5pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7635
7636         { &hf_bit6pingvflags1,
7637         { "Not Defined", "ncp.bit6pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7638
7639         { &hf_bit7pingvflags1,
7640         { "Not Defined", "ncp.bit7pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7641
7642         { &hf_bit8pingvflags1,
7643         { "Not Defined", "ncp.bit8pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7644
7645         { &hf_bit9pingvflags1,
7646         { "Not Defined", "ncp.bit9pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7647
7648         { &hf_bit10pingvflags1,
7649         { "Not Defined", "ncp.bit10pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7650
7651         { &hf_bit11pingvflags1,
7652         { "Not Defined", "ncp.bit11pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7653
7654         { &hf_bit12pingvflags1,
7655         { "Not Defined", "ncp.bit12pingvflags1", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7656
7657         { &hf_bit13pingvflags1,
7658         { "Not Defined", "ncp.bit13pingvflags1", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7659
7660         { &hf_bit14pingvflags1,
7661         { "Not Defined", "ncp.bit14pingvflags1", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7662
7663         { &hf_bit15pingvflags1,
7664         { "Not Defined", "ncp.bit15pingvflags1", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7665
7666         { &hf_bit16pingvflags1,
7667         { "Not Defined", "ncp.bit16pingvflags1", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7668
7669     { &hf_nds_letter_ver,
7670         { "Letter Version", "ncp.nds_letter_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7671
7672     { &hf_nds_os_ver,
7673         { "OS Version", "ncp.nds_os_ver", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7674
7675     { &hf_nds_lic_flags,
7676         { "License Flags", "ncp.nds_lic_flags", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7677
7678     { &hf_nds_ds_time,
7679         { "DS Time", "ncp.nds_ds_time", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7680
7681     { &hf_nds_ping_version,
7682         { "Ping Version", "ncp.nds_ping_version", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
7683
7684     { &hf_nds_search_scope,
7685         { "Search Scope", "ncp.nds_search_scope", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
7686
7687     { &hf_nds_num_objects,
7688         { "Number of Objects to Search", "ncp.nds_num_objects", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
7689
7690
7691         { &hf_bit1siflags,
7692         { "Names", "ncp.bit1siflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
7693
7694         { &hf_bit2siflags,
7695         { "Names and Values", "ncp.bit2siflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
7696
7697         { &hf_bit3siflags,
7698         { "Effective Privileges", "ncp.bit3siflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
7699
7700         { &hf_bit4siflags,
7701         { "Value Info", "ncp.bit4siflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
7702
7703         { &hf_bit5siflags,
7704         { "Abbreviated Value", "ncp.bit5siflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
7705
7706         { &hf_bit6siflags,
7707         { "Not Defined", "ncp.bit6siflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
7708
7709         { &hf_bit7siflags,
7710         { "Not Defined", "ncp.bit7siflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
7711
7712         { &hf_bit8siflags,
7713         { "Not Defined", "ncp.bit8siflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
7714
7715         { &hf_bit9siflags,
7716         { "Expanded Class", "ncp.bit9siflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
7717
7718         { &hf_bit10siflags,
7719         { "Not Defined", "ncp.bit10siflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
7720
7721         { &hf_bit11siflags,
7722         { "Not Defined", "ncp.bit11siflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
7723
7724         { &hf_bit12siflags,
7725         { "Not Defined", "ncp.bit12siflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
7726
7727         { &hf_bit13siflags,
7728         { "Not Defined", "ncp.bit13siflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
7729
7730         { &hf_bit14siflags,
7731         { "Not Defined", "ncp.bit14siflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
7732
7733         { &hf_bit15siflags,
7734         { "Not Defined", "ncp.bit15siflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
7735
7736         { &hf_bit16siflags,
7737         { "Not Defined", "ncp.bit16siflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
7738
7739         { &hf_nds_segment_overlap,
7740           { "Segment overlap",  "nds.segment.overlap", FT_BOOLEAN, BASE_NONE,
7741                 NULL, 0x0, "Segment overlaps with other segments", HFILL }},
7742     
7743         { &hf_nds_segment_overlap_conflict,
7744           { "Conflicting data in segment overlap", "nds.segment.overlap.conflict",
7745         FT_BOOLEAN, BASE_NONE,
7746                 NULL, 0x0, "Overlapping segments contained conflicting data", HFILL }},
7747     
7748         { &hf_nds_segment_multiple_tails,
7749           { "Multiple tail segments found", "nds.segment.multipletails",
7750         FT_BOOLEAN, BASE_NONE,
7751                 NULL, 0x0, "Several tails were found when desegmenting the packet", HFILL }},
7752     
7753         { &hf_nds_segment_too_long_segment,
7754           { "Segment too long", "nds.segment.toolongsegment", FT_BOOLEAN, BASE_NONE,
7755                 NULL, 0x0, "Segment contained data past end of packet", HFILL }},
7756     
7757         { &hf_nds_segment_error,
7758           {"Desegmentation error",      "nds.segment.error", FT_FRAMENUM, BASE_NONE,
7759                 NULL, 0x0, "Desegmentation error due to illegal segments", HFILL }},
7760     
7761         { &hf_nds_segment,
7762           { "NDS Fragment",             "nds.fragment", FT_FRAMENUM, BASE_NONE,
7763                 NULL, 0x0, "NDPS Fragment", HFILL }},
7764     
7765         { &hf_nds_segments,
7766           { "NDS Fragments",    "nds.fragments", FT_NONE, BASE_NONE,
7767                 NULL, 0x0, "NDPS Fragments", HFILL }},
7768
7769
7770
7771  """
7772         # Print the registration code for the hf variables
7773         for var in sorted_vars:
7774                 print "\t{ &%s," % (var.HFName())
7775                 print "\t{ \"%s\", \"%s\", %s, %s, %s, 0x%x, \"\", HFILL }},\n" % \
7776                         (var.Description(), var.DFilter(),
7777                         var.EtherealFType(), var.Display(), var.ValuesName(),
7778                         var.Mask())
7779
7780         print "\t};\n"
7781
7782         if ett_list:
7783                 print "\tstatic gint *ett[] = {"
7784
7785                 for ett in ett_list:
7786                         print "\t\t&%s," % (ett,)
7787
7788                 print "\t};\n"
7789
7790         print """
7791         proto_register_field_array(proto_ncp, hf, array_length(hf));
7792         """
7793
7794         if ett_list:
7795                 print """
7796         proto_register_subtree_array(ett, array_length(ett));
7797                 """
7798
7799         print """
7800         register_init_routine(&ncp_init_protocol);
7801         register_postseq_cleanup_routine(&ncp_postseq_cleanup);
7802         register_final_registration_routine(final_registration_ncp2222);
7803         """
7804
7805
7806         # End of proto_register_ncp2222()
7807         print "}"
7808         print ""
7809         print '#include "packet-ncp2222.inc"'
7810
7811 def usage():
7812         print "Usage: ncp2222.py -o output_file"
7813         sys.exit(1)
7814
7815 def main():
7816         global compcode_lists
7817         global ptvc_lists
7818         global msg
7819
7820         optstring = "o:"
7821         out_filename = None
7822
7823         try:
7824                 opts, args = getopt.getopt(sys.argv[1:], optstring)
7825         except getopt.error:
7826                 usage()
7827
7828         for opt, arg in opts:
7829                 if opt == "-o":
7830                         out_filename = arg
7831                 else:
7832                         usage()
7833
7834         if len(args) != 0:
7835                 usage()
7836
7837         if not out_filename:
7838                 usage()
7839
7840         # Create the output file
7841         try:
7842                 out_file = open(out_filename, "w")
7843         except IOError, err:
7844                 sys.exit("Could not open %s for writing: %s" % (out_filename,
7845                         err))
7846
7847         # Set msg to current stdout
7848         msg = sys.stdout
7849
7850         # Set stdout to the output file
7851         sys.stdout = out_file
7852
7853         msg.write("Processing NCP definitions...\n")
7854         # Run the code, and if we catch any exception,
7855         # erase the output file.
7856         try:
7857                 compcode_lists  = UniqueCollection('Completion Code Lists')
7858                 ptvc_lists      = UniqueCollection('PTVC Lists')
7859
7860                 define_errors()
7861                 define_groups()
7862
7863                 define_ncp2222()
7864
7865                 msg.write("Defined %d NCP types.\n" % (len(packets),))
7866                 produce_code()
7867         except:
7868                 traceback.print_exc(20, msg)
7869                 try:
7870                         out_file.close()
7871                 except IOError, err:
7872                         msg.write("Could not close %s: %s\n" % (out_filename, err))
7873
7874                 try:
7875                         if os.path.exists(out_filename):
7876                                 os.remove(out_filename)
7877                 except OSError, err:
7878                         msg.write("Could not remove %s: %s\n" % (out_filename, err))
7879
7880                 sys.exit(1)
7881
7882
7883
7884 def define_ncp2222():
7885         ##############################################################################
7886         # NCP Packets. Here I list functions and subfunctions in hexadecimal like the
7887         # NCP book (and I believe LanAlyzer does this too).
7888         # However, Novell lists these in decimal in their on-line documentation.
7889         ##############################################################################
7890         # 2222/01
7891         pkt = NCP(0x01, "File Set Lock", 'file')
7892         pkt.Request(7)
7893         pkt.Reply(8)
7894         pkt.CompletionCodes([0x0000])
7895         # 2222/02
7896         pkt = NCP(0x02, "File Release Lock", 'file')
7897         pkt.Request(7)
7898         pkt.Reply(8)
7899         pkt.CompletionCodes([0x0000, 0xff00])
7900         # 2222/03
7901         pkt = NCP(0x03, "Log File Exclusive", 'file')
7902         pkt.Request( (12, 267), [
7903                 rec( 7, 1, DirHandle ),
7904                 rec( 8, 1, LockFlag ),
7905                 rec( 9, 2, TimeoutLimit, BE ),
7906                 rec( 11, (1, 256), FilePath ),
7907         ])
7908         pkt.Reply(8)
7909         pkt.CompletionCodes([0x0000, 0x8200, 0x9600, 0xfe0d, 0xff01])
7910         # 2222/04
7911         pkt = NCP(0x04, "Lock File Set", 'file')
7912         pkt.Request( 9, [
7913                 rec( 7, 2, TimeoutLimit ),
7914         ])
7915         pkt.Reply(8)
7916         pkt.CompletionCodes([0x0000, 0xfe0d, 0xff01])
7917         ## 2222/05
7918         pkt = NCP(0x05, "Release File", 'file')
7919         pkt.Request( (9, 264), [
7920                 rec( 7, 1, DirHandle ),
7921                 rec( 8, (1, 256), FilePath ),
7922         ])
7923         pkt.Reply(8)
7924         pkt.CompletionCodes([0x0000, 0x9b00, 0x9c03, 0xff1a])
7925         # 2222/06
7926         pkt = NCP(0x06, "Release File Set", 'file')
7927         pkt.Request( 8, [
7928                 rec( 7, 1, LockFlag ),
7929         ])
7930         pkt.Reply(8)
7931         pkt.CompletionCodes([0x0000])
7932         # 2222/07
7933         pkt = NCP(0x07, "Clear File", 'file')
7934         pkt.Request( (9, 264), [
7935                 rec( 7, 1, DirHandle ),
7936                 rec( 8, (1, 256), FilePath ),
7937         ])
7938         pkt.Reply(8)
7939         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03,
7940                 0xa100, 0xfd00, 0xff1a])
7941         # 2222/08
7942         pkt = NCP(0x08, "Clear File Set", 'file')
7943         pkt.Request( 8, [
7944                 rec( 7, 1, LockFlag ),
7945         ])
7946         pkt.Reply(8)
7947         pkt.CompletionCodes([0x0000])
7948         # 2222/09
7949         pkt = NCP(0x09, "Log Logical Record", 'file')
7950         pkt.Request( (11, 138), [
7951                 rec( 7, 1, LockFlag ),
7952                 rec( 8, 2, TimeoutLimit, BE ),
7953                 rec( 10, (1, 128), LogicalRecordName ),
7954         ], info_str=(LogicalRecordName, "Log Logical Record: %s", ", %s"))
7955         pkt.Reply(8)
7956         pkt.CompletionCodes([0x0000, 0x9600, 0xfe0d, 0xff1a])
7957         # 2222/0A, 10
7958         pkt = NCP(0x0A, "Lock Logical Record Set", 'file')
7959         pkt.Request( 10, [
7960                 rec( 7, 1, LockFlag ),
7961                 rec( 8, 2, TimeoutLimit ),
7962         ])
7963         pkt.Reply(8)
7964         pkt.CompletionCodes([0x0000, 0xfe0d, 0xff1a])
7965         # 2222/0B, 11
7966         pkt = NCP(0x0B, "Clear Logical Record", 'file')
7967         pkt.Request( (8, 135), [
7968                 rec( 7, (1, 128), LogicalRecordName ),
7969         ], info_str=(LogicalRecordName, "Clear Logical Record: %s", ", %s"))
7970         pkt.Reply(8)
7971         pkt.CompletionCodes([0x0000, 0xff1a])
7972         # 2222/0C, 12
7973         pkt = NCP(0x0C, "Release Logical Record", 'file')
7974         pkt.Request( (8, 135), [
7975                 rec( 7, (1, 128), LogicalRecordName ),
7976         ], info_str=(LogicalRecordName, "Release Logical Record: %s", ", %s"))
7977         pkt.Reply(8)
7978         pkt.CompletionCodes([0x0000, 0xff1a])
7979         # 2222/0D, 13
7980         pkt = NCP(0x0D, "Release Logical Record Set", 'file')
7981         pkt.Request( 8, [
7982                 rec( 7, 1, LockFlag ),
7983         ])
7984         pkt.Reply(8)
7985         pkt.CompletionCodes([0x0000])
7986         # 2222/0E, 14
7987         pkt = NCP(0x0E, "Clear Logical Record Set", 'file')
7988         pkt.Request( 8, [
7989                 rec( 7, 1, LockFlag ),
7990         ])
7991         pkt.Reply(8)
7992         pkt.CompletionCodes([0x0000])
7993         # 2222/1100, 17/00
7994         pkt = NCP(0x1100, "Write to Spool File", 'qms')
7995         pkt.Request( (11, 16), [
7996                 rec( 10, ( 1, 6 ), Data ),
7997         ], info_str=(Data, "Write to Spool File: %s", ", %s"))
7998         pkt.Reply(8)
7999         pkt.CompletionCodes([0x0000, 0x0104, 0x8000, 0x8101, 0x8701, 0x8800,
8000                              0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9400, 0x9500,
8001                              0x9600, 0x9804, 0x9900, 0xa100, 0xa201, 0xff19])
8002         # 2222/1101, 17/01
8003         pkt = NCP(0x1101, "Close Spool File", 'qms')
8004         pkt.Request( 11, [
8005                 rec( 10, 1, AbortQueueFlag ),
8006         ])
8007         pkt.Reply(8)
8008         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8701, 0x8800, 0x8d00,
8009                              0x8e00, 0x8f00, 0x9001, 0x9300, 0x9400, 0x9500,
8010                              0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03, 0x9d00,
8011                              0xa100, 0xd000, 0xd100, 0xd202, 0xd300, 0xd400,
8012                              0xda01, 0xe800, 0xea00, 0xeb00, 0xec00, 0xfc06,
8013                              0xfd00, 0xfe07, 0xff06])
8014         # 2222/1102, 17/02
8015         pkt = NCP(0x1102, "Set Spool File Flags", 'qms')
8016         pkt.Request( 30, [
8017                 rec( 10, 1, PrintFlags ),
8018                 rec( 11, 1, TabSize ),
8019                 rec( 12, 1, TargetPrinter ),
8020                 rec( 13, 1, Copies ),
8021                 rec( 14, 1, FormType ),
8022                 rec( 15, 1, Reserved ),
8023                 rec( 16, 14, BannerName ),
8024         ])
8025         pkt.Reply(8)
8026         pkt.CompletionCodes([0x0000, 0x9600, 0xd202, 0xd300, 0xe800, 0xea00,
8027                              0xeb00, 0xec00, 0xfc06, 0xfe07, 0xff06])
8028
8029         # 2222/1103, 17/03
8030         pkt = NCP(0x1103, "Spool A Disk File", 'qms')
8031         pkt.Request( (12, 23), [
8032                 rec( 10, 1, DirHandle ),
8033                 rec( 11, (1, 12), Data ),
8034         ], info_str=(Data, "Spool a Disk File: %s", ", %s"))
8035         pkt.Reply(8)
8036         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8701, 0x8800, 0x8d00,
8037                              0x8e00, 0x8f00, 0x9001, 0x9300, 0x9400, 0x9500,
8038                              0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03, 0x9d00,
8039                              0xa100, 0xd000, 0xd100, 0xd202, 0xd300, 0xd400,
8040                              0xda01, 0xe800, 0xea00, 0xeb00, 0xec00, 0xfc06,
8041                              0xfd00, 0xfe07, 0xff06])
8042
8043         # 2222/1106, 17/06
8044         pkt = NCP(0x1106, "Get Printer Status", 'qms')
8045         pkt.Request( 11, [
8046                 rec( 10, 1, TargetPrinter ),
8047         ])
8048         pkt.Reply(12, [
8049                 rec( 8, 1, PrinterHalted ),
8050                 rec( 9, 1, PrinterOffLine ),
8051                 rec( 10, 1, CurrentFormType ),
8052                 rec( 11, 1, RedirectedPrinter ),
8053         ])
8054         pkt.CompletionCodes([0x0000, 0x9600, 0xfb05, 0xfd00, 0xff06])
8055
8056         # 2222/1109, 17/09
8057         pkt = NCP(0x1109, "Create Spool File", 'qms')
8058         pkt.Request( (12, 23), [
8059                 rec( 10, 1, DirHandle ),
8060                 rec( 11, (1, 12), Data ),
8061         ], info_str=(Data, "Create Spool File: %s", ", %s"))
8062         pkt.Reply(8)
8063         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8400, 0x8701, 0x8d00,
8064                              0x8f00, 0x9001, 0x9400, 0x9600, 0x9804, 0x9900,
8065                              0x9b03, 0x9c03, 0xa100, 0xd000, 0xd100, 0xd202,
8066                              0xd300, 0xd400, 0xda01, 0xe800, 0xea00, 0xeb00,
8067                              0xec00, 0xfc06, 0xfd00, 0xfe07, 0xff06])
8068
8069         # 2222/110A, 17/10
8070         pkt = NCP(0x110A, "Get Printer's Queue", 'qms')
8071         pkt.Request( 11, [
8072                 rec( 10, 1, TargetPrinter ),
8073         ])
8074         pkt.Reply( 12, [
8075                 rec( 8, 4, ObjectID, BE ),
8076         ])
8077         pkt.CompletionCodes([0x0000, 0x9600, 0xff06])
8078
8079         # 2222/12, 18
8080         pkt = NCP(0x12, "Get Volume Info with Number", 'file')
8081         pkt.Request( 8, [
8082                 rec( 7, 1, VolumeNumber )
8083         ],info_str=(VolumeNumber, "Get Volume Information for Volume %d", ", %d"))
8084         pkt.Reply( 36, [
8085                 rec( 8, 2, SectorsPerCluster, BE ),
8086                 rec( 10, 2, TotalVolumeClusters, BE ),
8087                 rec( 12, 2, AvailableClusters, BE ),
8088                 rec( 14, 2, TotalDirectorySlots, BE ),
8089                 rec( 16, 2, AvailableDirectorySlots, BE ),
8090                 rec( 18, 16, VolumeName ),
8091                 rec( 34, 2, RemovableFlag, BE ),
8092         ])
8093         pkt.CompletionCodes([0x0000, 0x9804])
8094
8095         # 2222/13, 19
8096         pkt = NCP(0x13, "Get Station Number", 'connection')
8097         pkt.Request(7)
8098         pkt.Reply(11, [
8099                 rec( 8, 3, StationNumber )
8100         ])
8101         pkt.CompletionCodes([0x0000, 0xff00])
8102
8103         # 2222/14, 20
8104         pkt = NCP(0x14, "Get File Server Date And Time", 'fileserver')
8105         pkt.Request(7)
8106         pkt.Reply(15, [
8107                 rec( 8, 1, Year ),
8108                 rec( 9, 1, Month ),
8109                 rec( 10, 1, Day ),
8110                 rec( 11, 1, Hour ),
8111                 rec( 12, 1, Minute ),
8112                 rec( 13, 1, Second ),
8113                 rec( 14, 1, DayOfWeek ),
8114         ])
8115         pkt.CompletionCodes([0x0000])
8116
8117         # 2222/1500, 21/00
8118         pkt = NCP(0x1500, "Send Broadcast Message", 'message')
8119         pkt.Request((13, 70), [
8120                 rec( 10, 1, ClientListLen, var="x" ),
8121                 rec( 11, 1, TargetClientList, repeat="x" ),
8122                 rec( 12, (1, 58), TargetMessage ),
8123         ], info_str=(TargetMessage, "Send Broadcast Message: %s", ", %s"))
8124         pkt.Reply(10, [
8125                 rec( 8, 1, ClientListLen, var="x" ),
8126                 rec( 9, 1, SendStatus, repeat="x" )
8127         ])
8128         pkt.CompletionCodes([0x0000, 0xfd00])
8129
8130         # 2222/1501, 21/01
8131         pkt = NCP(0x1501, "Get Broadcast Message", 'message')
8132         pkt.Request(10)
8133         pkt.Reply((9,66), [
8134                 rec( 8, (1, 58), TargetMessage )
8135         ])
8136         pkt.CompletionCodes([0x0000, 0xfd00])
8137
8138         # 2222/1502, 21/02
8139         pkt = NCP(0x1502, "Disable Broadcasts", 'message')
8140         pkt.Request(10)
8141         pkt.Reply(8)
8142         pkt.CompletionCodes([0x0000, 0xfb0a])
8143
8144         # 2222/1503, 21/03
8145         pkt = NCP(0x1503, "Enable Broadcasts", 'message')
8146         pkt.Request(10)
8147         pkt.Reply(8)
8148         pkt.CompletionCodes([0x0000])
8149
8150         # 2222/1509, 21/09
8151         pkt = NCP(0x1509, "Broadcast To Console", 'message')
8152         pkt.Request((11, 68), [
8153                 rec( 10, (1, 58), TargetMessage )
8154         ], info_str=(TargetMessage, "Broadcast to Console: %s", ", %s"))
8155         pkt.Reply(8)
8156         pkt.CompletionCodes([0x0000])
8157         # 2222/150A, 21/10
8158         pkt = NCP(0x150A, "Send Broadcast Message", 'message')
8159         pkt.Request((17, 74), [
8160                 rec( 10, 2, ClientListCount, LE, var="x" ),
8161                 rec( 12, 4, ClientList, LE, repeat="x" ),
8162                 rec( 16, (1, 58), TargetMessage ),
8163         ], info_str=(TargetMessage, "Send Broadcast Message: %s", ", %s"))
8164         pkt.Reply(14, [
8165                 rec( 8, 2, ClientListCount, LE, var="x" ),
8166                 rec( 10, 4, ClientCompFlag, LE, repeat="x" ),
8167         ])
8168         pkt.CompletionCodes([0x0000, 0xfd00])
8169
8170         # 2222/150B, 21/11
8171         pkt = NCP(0x150B, "Get Broadcast Message", 'message')
8172         pkt.Request(10)
8173         pkt.Reply((9,66), [
8174                 rec( 8, (1, 58), TargetMessage )
8175         ])
8176         pkt.CompletionCodes([0x0000, 0xfd00])
8177
8178         # 2222/150C, 21/12
8179         pkt = NCP(0x150C, "Connection Message Control", 'message')
8180         pkt.Request(22, [
8181                 rec( 10, 1, ConnectionControlBits ),
8182                 rec( 11, 3, Reserved3 ),
8183                 rec( 14, 4, ConnectionListCount, LE, var="x" ),
8184                 rec( 18, 4, ConnectionList, LE, repeat="x" ),
8185         ])
8186         pkt.Reply(8)
8187         pkt.CompletionCodes([0x0000, 0xff00])
8188
8189         # 2222/1600, 22/0
8190         pkt = NCP(0x1600, "Set Directory Handle", 'fileserver')
8191         pkt.Request((13,267), [
8192                 rec( 10, 1, TargetDirHandle ),
8193                 rec( 11, 1, DirHandle ),
8194                 rec( 12, (1, 255), Path ),
8195         ], info_str=(Path, "Set Directory Handle to: %s", ", %s"))
8196         pkt.Reply(8)
8197         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8198                              0xfd00, 0xff00])
8199
8200
8201         # 2222/1601, 22/1
8202         pkt = NCP(0x1601, "Get Directory Path", 'fileserver')
8203         pkt.Request(11, [
8204                 rec( 10, 1, DirHandle ),
8205         ],info_str=(DirHandle, "Get Directory Path for Directory Handle %d", ", %d"))
8206         pkt.Reply((9,263), [
8207                 rec( 8, (1,255), Path ),
8208         ])
8209         pkt.CompletionCodes([0x0000, 0x9600, 0x9b00, 0x9c00, 0xa100])
8210
8211         # 2222/1602, 22/2
8212         pkt = NCP(0x1602, "Scan Directory Information", 'fileserver')
8213         pkt.Request((14,268), [
8214                 rec( 10, 1, DirHandle ),
8215                 rec( 11, 2, StartingSearchNumber, BE ),
8216                 rec( 13, (1, 255), Path ),
8217         ], info_str=(Path, "Scan Directory Information: %s", ", %s"))
8218         pkt.Reply(36, [
8219                 rec( 8, 16, DirectoryPath ),
8220                 rec( 24, 2, CreationDate, BE ),
8221                 rec( 26, 2, CreationTime, BE ),
8222                 rec( 28, 4, CreatorID, BE ),
8223                 rec( 32, 1, AccessRightsMask ),
8224                 rec( 33, 1, Reserved ),
8225                 rec( 34, 2, NextSearchNumber, BE ),
8226         ])
8227         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8228                              0xfd00, 0xff00])
8229
8230         # 2222/1603, 22/3
8231         pkt = NCP(0x1603, "Get Effective Directory Rights", 'fileserver')
8232         pkt.Request((14,268), [
8233                 rec( 10, 1, DirHandle ),
8234                 rec( 11, 2, StartingSearchNumber ),
8235                 rec( 13, (1, 255), Path ),
8236         ], info_str=(Path, "Get Effective Directory Rights: %s", ", %s"))
8237         pkt.Reply(9, [
8238                 rec( 8, 1, AccessRightsMask ),
8239         ])
8240         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8241                              0xfd00, 0xff00])
8242
8243         # 2222/1604, 22/4
8244         pkt = NCP(0x1604, "Modify Maximum Rights Mask", 'fileserver')
8245         pkt.Request((14,268), [
8246                 rec( 10, 1, DirHandle ),
8247                 rec( 11, 1, RightsGrantMask ),
8248                 rec( 12, 1, RightsRevokeMask ),
8249                 rec( 13, (1, 255), Path ),
8250         ], info_str=(Path, "Modify Maximum Rights Mask: %s", ", %s"))
8251         pkt.Reply(8)
8252         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100, 0xfa00,
8253                              0xfd00, 0xff00])
8254
8255         # 2222/1605, 22/5
8256         pkt = NCP(0x1605, "Get Volume Number", 'fileserver')
8257         pkt.Request((11, 265), [
8258                 rec( 10, (1,255), VolumeNameLen ),
8259         ], info_str=(VolumeNameLen, "Get Volume Number for: %s", ", %s"))
8260         pkt.Reply(9, [
8261                 rec( 8, 1, VolumeNumber ),
8262         ])
8263         pkt.CompletionCodes([0x0000, 0x9600, 0x9804])
8264
8265         # 2222/1606, 22/6
8266         pkt = NCP(0x1606, "Get Volume Name", 'fileserver')
8267         pkt.Request(11, [
8268                 rec( 10, 1, VolumeNumber ),
8269         ],info_str=(VolumeNumber, "Get Name for Volume %d", ", %d"))
8270         pkt.Reply((9, 263), [
8271                 rec( 8, (1,255), VolumeNameLen ),
8272         ])
8273         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0xff00])
8274
8275         # 2222/160A, 22/10
8276         pkt = NCP(0x160A, "Create Directory", 'fileserver')
8277         pkt.Request((13,267), [
8278                 rec( 10, 1, DirHandle ),
8279                 rec( 11, 1, AccessRightsMask ),
8280                 rec( 12, (1, 255), Path ),
8281         ], info_str=(Path, "Create Directory: %s", ", %s"))
8282         pkt.Reply(8)
8283         pkt.CompletionCodes([0x0000, 0x8400, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8284                              0x9e00, 0xa100, 0xfd00, 0xff00])
8285
8286         # 2222/160B, 22/11
8287         pkt = NCP(0x160B, "Delete Directory", 'fileserver')
8288         pkt.Request((13,267), [
8289                 rec( 10, 1, DirHandle ),
8290                 rec( 11, 1, Reserved ),
8291                 rec( 12, (1, 255), Path ),
8292         ], info_str=(Path, "Delete Directory: %s", ", %s"))
8293         pkt.Reply(8)
8294         pkt.CompletionCodes([0x0000, 0x8a00, 0x9600, 0x9804, 0x9b03, 0x9c03,
8295                              0x9f00, 0xa000, 0xa100, 0xfd00, 0xff00])
8296
8297         # 2222/160C, 22/12
8298         pkt = NCP(0x160C, "Scan Directory for Trustees", 'fileserver')
8299         pkt.Request((13,267), [
8300                 rec( 10, 1, DirHandle ),
8301                 rec( 11, 1, TrusteeSetNumber ),
8302                 rec( 12, (1, 255), Path ),
8303         ], info_str=(Path, "Scan Directory for Trustees: %s", ", %s"))
8304         pkt.Reply(57, [
8305                 rec( 8, 16, DirectoryPath ),
8306                 rec( 24, 2, CreationDate, BE ),
8307                 rec( 26, 2, CreationTime, BE ),
8308                 rec( 28, 4, CreatorID ),
8309                 rec( 32, 4, TrusteeID, BE ),
8310                 rec( 36, 4, TrusteeID, BE ),
8311                 rec( 40, 4, TrusteeID, BE ),
8312                 rec( 44, 4, TrusteeID, BE ),
8313                 rec( 48, 4, TrusteeID, BE ),
8314                 rec( 52, 1, AccessRightsMask ),
8315                 rec( 53, 1, AccessRightsMask ),
8316                 rec( 54, 1, AccessRightsMask ),
8317                 rec( 55, 1, AccessRightsMask ),
8318                 rec( 56, 1, AccessRightsMask ),
8319         ])
8320         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c03,
8321                              0xa100, 0xfd00, 0xff00])
8322
8323         # 2222/160D, 22/13
8324         pkt = NCP(0x160D, "Add Trustee to Directory", 'fileserver')
8325         pkt.Request((17,271), [
8326                 rec( 10, 1, DirHandle ),
8327                 rec( 11, 4, TrusteeID, BE ),
8328                 rec( 15, 1, AccessRightsMask ),
8329                 rec( 16, (1, 255), Path ),
8330         ], info_str=(Path, "Add Trustee to Directory: %s", ", %s"))
8331         pkt.Reply(8)
8332         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8333                              0xa100, 0xfc06, 0xfd00, 0xff00])
8334
8335         # 2222/160E, 22/14
8336         pkt = NCP(0x160E, "Delete Trustee from Directory", 'fileserver')
8337         pkt.Request((17,271), [
8338                 rec( 10, 1, DirHandle ),
8339                 rec( 11, 4, TrusteeID, BE ),
8340                 rec( 15, 1, Reserved ),
8341                 rec( 16, (1, 255), Path ),
8342         ], info_str=(Path, "Delete Trustee from Directory: %s", ", %s"))
8343         pkt.Reply(8)
8344         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9900, 0x9b03, 0x9c03,
8345                              0xa100, 0xfc06, 0xfd00, 0xfe07, 0xff00])
8346
8347         # 2222/160F, 22/15
8348         pkt = NCP(0x160F, "Rename Directory", 'fileserver')
8349         pkt.Request((13, 521), [
8350                 rec( 10, 1, DirHandle ),
8351                 rec( 11, (1, 255), Path ),
8352                 rec( -1, (1, 255), NewPath ),
8353         ], info_str=(Path, "Rename Directory: %s", ", %s"))
8354         pkt.Reply(8)
8355         pkt.CompletionCodes([0x0000, 0x8b00, 0x9200, 0x9600, 0x9804, 0x9b03, 0x9c03,
8356                              0x9e00, 0xa100, 0xef00, 0xfd00, 0xff00])
8357
8358         # 2222/1610, 22/16
8359         pkt = NCP(0x1610, "Purge Erased Files", 'file')
8360         pkt.Request(10)
8361         pkt.Reply(8)
8362         pkt.CompletionCodes([0x0000, 0x8100, 0x9600, 0x9804, 0xa100, 0xff00])
8363
8364         # 2222/1611, 22/17
8365         pkt = NCP(0x1611, "Recover Erased File", 'fileserver')
8366         pkt.Request(11, [
8367                 rec( 10, 1, DirHandle ),
8368         ],info_str=(DirHandle, "Recover Erased File from Directory Handle %d", ", %d"))
8369         pkt.Reply(38, [
8370                 rec( 8, 15, OldFileName ),
8371                 rec( 23, 15, NewFileName ),
8372         ])
8373         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03,
8374                              0xa100, 0xfd00, 0xff00])
8375         # 2222/1612, 22/18
8376         pkt = NCP(0x1612, "Alloc Permanent Directory Handle", 'fileserver')
8377         pkt.Request((13, 267), [
8378                 rec( 10, 1, DirHandle ),
8379                 rec( 11, 1, DirHandleName ),
8380                 rec( 12, (1,255), Path ),
8381         ], info_str=(Path, "Allocate Permanent Directory Handle: %s", ", %s"))
8382         pkt.Reply(10, [
8383                 rec( 8, 1, DirHandle ),
8384                 rec( 9, 1, AccessRightsMask ),
8385         ])
8386         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8387                              0xa100, 0xfd00, 0xff00])
8388         # 2222/1613, 22/19
8389         pkt = NCP(0x1613, "Alloc Temporary Directory Handle", 'fileserver')
8390         pkt.Request((13, 267), [
8391                 rec( 10, 1, DirHandle ),
8392                 rec( 11, 1, DirHandleName ),
8393                 rec( 12, (1,255), Path ),
8394         ], info_str=(Path, "Allocate Temporary Directory Handle: %s", ", %s"))
8395         pkt.Reply(10, [
8396                 rec( 8, 1, DirHandle ),
8397                 rec( 9, 1, AccessRightsMask ),
8398         ])
8399         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8400                              0xa100, 0xfd00, 0xff00])
8401         # 2222/1614, 22/20
8402         pkt = NCP(0x1614, "Deallocate Directory Handle", 'fileserver')
8403         pkt.Request(11, [
8404                 rec( 10, 1, DirHandle ),
8405         ],info_str=(DirHandle, "Deallocate Directory Handle %d", ", %d"))
8406         pkt.Reply(8)
8407         pkt.CompletionCodes([0x0000, 0x9b03])
8408         # 2222/1615, 22/21
8409         pkt = NCP(0x1615, "Get Volume Info with Handle", 'file')
8410         pkt.Request( 11, [
8411                 rec( 10, 1, DirHandle )
8412         ],info_str=(DirHandle, "Get Volume Information with Handle %d", ", %d"))
8413         pkt.Reply( 36, [
8414                 rec( 8, 2, SectorsPerCluster, BE ),
8415                 rec( 10, 2, TotalVolumeClusters, BE ),
8416                 rec( 12, 2, AvailableClusters, BE ),
8417                 rec( 14, 2, TotalDirectorySlots, BE ),
8418                 rec( 16, 2, AvailableDirectorySlots, BE ),
8419                 rec( 18, 16, VolumeName ),
8420                 rec( 34, 2, RemovableFlag, BE ),
8421         ])
8422         pkt.CompletionCodes([0x0000, 0xff00])
8423         # 2222/1616, 22/22
8424         pkt = NCP(0x1616, "Alloc Special Temporary Directory Handle", 'fileserver')
8425         pkt.Request((13, 267), [
8426                 rec( 10, 1, DirHandle ),
8427                 rec( 11, 1, DirHandleName ),
8428                 rec( 12, (1,255), Path ),
8429         ], info_str=(Path, "Allocate Special Temporary Directory Handle: %s", ", %s"))
8430         pkt.Reply(10, [
8431                 rec( 8, 1, DirHandle ),
8432                 rec( 9, 1, AccessRightsMask ),
8433         ])
8434         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9900, 0x9c03, 0x9d00,
8435                              0xa100, 0xfd00, 0xff00])
8436         # 2222/1617, 22/23
8437         pkt = NCP(0x1617, "Extract a Base Handle", 'fileserver')
8438         pkt.Request(11, [
8439                 rec( 10, 1, DirHandle ),
8440         ],info_str=(DirHandle, "Extract a Base Handle from Directory Handle %d", ", %d"))
8441         pkt.Reply(22, [
8442                 rec( 8, 10, ServerNetworkAddress ),
8443                 rec( 18, 4, DirHandleLong ),
8444         ])
8445         pkt.CompletionCodes([0x0000, 0x9600, 0x9b03])
8446         # 2222/1618, 22/24
8447         pkt = NCP(0x1618, "Restore an Extracted Base Handle", 'fileserver')
8448         pkt.Request(24, [
8449                 rec( 10, 10, ServerNetworkAddress ),
8450                 rec( 20, 4, DirHandleLong ),
8451         ])
8452         pkt.Reply(10, [
8453                 rec( 8, 1, DirHandle ),
8454                 rec( 9, 1, AccessRightsMask ),
8455         ])
8456         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c00, 0x9d00, 0xa100,
8457                              0xfd00, 0xff00])
8458         # 2222/1619, 22/25
8459         pkt = NCP(0x1619, "Set Directory Information", 'fileserver')
8460         pkt.Request((21, 275), [
8461                 rec( 10, 1, DirHandle ),
8462                 rec( 11, 2, CreationDate ),
8463                 rec( 13, 2, CreationTime ),
8464                 rec( 15, 4, CreatorID, BE ),
8465                 rec( 19, 1, AccessRightsMask ),
8466                 rec( 20, (1,255), Path ),
8467         ], info_str=(Path, "Set Directory Information: %s", ", %s"))
8468         pkt.Reply(8)
8469         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9804, 0x9b03, 0x9c00, 0xa100,
8470                              0xff16])
8471         # 2222/161A, 22/26
8472         pkt = NCP(0x161A, "Get Path Name of a Volume-Directory Number Pair", 'fileserver')
8473         pkt.Request(13, [
8474                 rec( 10, 1, VolumeNumber ),
8475                 rec( 11, 2, DirectoryEntryNumberWord ),
8476         ])
8477         pkt.Reply((9,263), [
8478                 rec( 8, (1,255), Path ),
8479                 ])
8480         pkt.CompletionCodes([0x0000, 0x9804, 0x9c00, 0xa100])
8481         # 2222/161B, 22/27
8482         pkt = NCP(0x161B, "Scan Salvageable Files", 'fileserver')
8483         pkt.Request(15, [
8484                 rec( 10, 1, DirHandle ),
8485                 rec( 11, 4, SequenceNumber ),
8486         ])
8487         pkt.Reply(140, [
8488                 rec( 8, 4, SequenceNumber ),
8489                 rec( 12, 2, Subdirectory ),
8490                 rec( 14, 2, Reserved2 ),
8491                 rec( 16, 4, AttributesDef32 ),
8492                 rec( 20, 1, UniqueID ),
8493                 rec( 21, 1, FlagsDef ),
8494                 rec( 22, 1, DestNameSpace ),
8495                 rec( 23, 1, FileNameLen ),
8496                 rec( 24, 12, FileName12 ),
8497                 rec( 36, 2, CreationTime ),
8498                 rec( 38, 2, CreationDate ),
8499                 rec( 40, 4, CreatorID, BE ),
8500                 rec( 44, 2, ArchivedTime ),
8501                 rec( 46, 2, ArchivedDate ),
8502                 rec( 48, 4, ArchiverID, BE ),
8503                 rec( 52, 2, UpdateTime ),
8504                 rec( 54, 2, UpdateDate ),
8505                 rec( 56, 4, UpdateID, BE ),
8506                 rec( 60, 4, FileSize, BE ),
8507                 rec( 64, 44, Reserved44 ),
8508                 rec( 108, 2, InheritedRightsMask ),
8509                 rec( 110, 2, LastAccessedDate ),
8510                 rec( 112, 4, DeletedFileTime ),
8511                 rec( 116, 2, DeletedTime ),
8512                 rec( 118, 2, DeletedDate ),
8513                 rec( 120, 4, DeletedID, BE ),
8514                 rec( 124, 16, Reserved16 ),
8515         ])
8516         pkt.CompletionCodes([0x0000, 0xfb01, 0xff1d])
8517         # 2222/161C, 22/28
8518         pkt = NCP(0x161C, "Recover Salvageable File", 'fileserver')
8519         pkt.Request((17,525), [
8520                 rec( 10, 1, DirHandle ),
8521                 rec( 11, 4, SequenceNumber ),
8522                 rec( 15, (1, 255), FileName ),
8523                 rec( -1, (1, 255), NewFileNameLen ),
8524         ], info_str=(FileName, "Recover File: %s", ", %s"))
8525         pkt.Reply(8)
8526         pkt.CompletionCodes([0x0000, 0x8401, 0x9c03, 0xfe02])
8527         # 2222/161D, 22/29
8528         pkt = NCP(0x161D, "Purge Salvageable File", 'fileserver')
8529         pkt.Request(15, [
8530                 rec( 10, 1, DirHandle ),
8531                 rec( 11, 4, SequenceNumber ),
8532         ])
8533         pkt.Reply(8)
8534         pkt.CompletionCodes([0x0000, 0x8500, 0x9c03])
8535         # 2222/161E, 22/30
8536         pkt = NCP(0x161E, "Scan a Directory", 'fileserver')
8537         pkt.Request((17, 271), [
8538                 rec( 10, 1, DirHandle ),
8539                 rec( 11, 1, DOSFileAttributes ),
8540                 rec( 12, 4, SequenceNumber ),
8541                 rec( 16, (1, 255), SearchPattern ),
8542         ], info_str=(SearchPattern, "Scan a Directory: %s", ", %s"))
8543         pkt.Reply(140, [
8544                 rec( 8, 4, SequenceNumber ),
8545                 rec( 12, 4, Subdirectory ),
8546                 rec( 16, 4, AttributesDef32 ),
8547                 rec( 20, 1, UniqueID, LE ),
8548                 rec( 21, 1, PurgeFlags ),
8549                 rec( 22, 1, DestNameSpace ),
8550                 rec( 23, 1, NameLen ),
8551                 rec( 24, 12, Name12 ),
8552                 rec( 36, 2, CreationTime ),
8553                 rec( 38, 2, CreationDate ),
8554                 rec( 40, 4, CreatorID, BE ),
8555                 rec( 44, 2, ArchivedTime ),
8556                 rec( 46, 2, ArchivedDate ),
8557                 rec( 48, 4, ArchiverID, BE ),
8558                 rec( 52, 2, UpdateTime ),
8559                 rec( 54, 2, UpdateDate ),
8560                 rec( 56, 4, UpdateID, BE ),
8561                 rec( 60, 4, FileSize, BE ),
8562                 rec( 64, 44, Reserved44 ),
8563                 rec( 108, 2, InheritedRightsMask ),
8564                 rec( 110, 2, LastAccessedDate ),
8565                 rec( 112, 28, Reserved28 ),
8566         ])
8567         pkt.CompletionCodes([0x0000, 0x8500, 0x9c03])
8568         # 2222/161F, 22/31
8569         pkt = NCP(0x161F, "Get Directory Entry", 'fileserver')
8570         pkt.Request(11, [
8571                 rec( 10, 1, DirHandle ),
8572         ])
8573         pkt.Reply(136, [
8574                 rec( 8, 4, Subdirectory ),
8575                 rec( 12, 4, AttributesDef32 ),
8576                 rec( 16, 1, UniqueID, LE ),
8577                 rec( 17, 1, PurgeFlags ),
8578                 rec( 18, 1, DestNameSpace ),
8579                 rec( 19, 1, NameLen ),
8580                 rec( 20, 12, Name12 ),
8581                 rec( 32, 2, CreationTime ),
8582                 rec( 34, 2, CreationDate ),
8583                 rec( 36, 4, CreatorID, BE ),
8584                 rec( 40, 2, ArchivedTime ),
8585                 rec( 42, 2, ArchivedDate ),
8586                 rec( 44, 4, ArchiverID, BE ),
8587                 rec( 48, 2, UpdateTime ),
8588                 rec( 50, 2, UpdateDate ),
8589                 rec( 52, 4, NextTrusteeEntry, BE ),
8590                 rec( 56, 48, Reserved48 ),
8591                 rec( 104, 2, MaximumSpace ),
8592                 rec( 106, 2, InheritedRightsMask ),
8593                 rec( 108, 28, Undefined28 ),
8594         ])
8595         pkt.CompletionCodes([0x0000, 0x8900, 0xbf00, 0xfb00])
8596         # 2222/1620, 22/32
8597         pkt = NCP(0x1620, "Scan Volume's User Disk Restrictions", 'fileserver')
8598         pkt.Request(15, [
8599                 rec( 10, 1, VolumeNumber ),
8600                 rec( 11, 4, SequenceNumber ),
8601         ])
8602         pkt.Reply(17, [
8603                 rec( 8, 1, NumberOfEntries, var="x" ),
8604                 rec( 9, 8, ObjectIDStruct, repeat="x" ),
8605         ])
8606         pkt.CompletionCodes([0x0000, 0x9800])
8607         # 2222/1621, 22/33
8608         pkt = NCP(0x1621, "Add User Disk Space Restriction", 'fileserver')
8609         pkt.Request(19, [
8610                 rec( 10, 1, VolumeNumber ),
8611                 rec( 11, 4, ObjectID ),
8612                 rec( 15, 4, DiskSpaceLimit ),
8613         ])
8614         pkt.Reply(8)
8615         pkt.CompletionCodes([0x0000, 0x8c00, 0x9600, 0x9800])
8616         # 2222/1622, 22/34
8617         pkt = NCP(0x1622, "Remove User Disk Space Restrictions", 'fileserver')
8618         pkt.Request(15, [
8619                 rec( 10, 1, VolumeNumber ),
8620                 rec( 11, 4, ObjectID ),
8621         ])
8622         pkt.Reply(8)
8623         pkt.CompletionCodes([0x0000, 0x8c00, 0xfe0e])
8624         # 2222/1623, 22/35
8625         pkt = NCP(0x1623, "Get Directory Disk Space Restriction", 'fileserver')
8626         pkt.Request(11, [
8627                 rec( 10, 1, DirHandle ),
8628         ])
8629         pkt.Reply(18, [
8630                 rec( 8, 1, NumberOfEntries ),
8631                 rec( 9, 1, Level ),
8632                 rec( 10, 4, MaxSpace ),
8633                 rec( 14, 4, CurrentSpace ),
8634         ])
8635         pkt.CompletionCodes([0x0000])
8636         # 2222/1624, 22/36
8637         pkt = NCP(0x1624, "Set Directory Disk Space Restriction", 'fileserver')
8638         pkt.Request(15, [
8639                 rec( 10, 1, DirHandle ),
8640                 rec( 11, 4, DiskSpaceLimit ),
8641         ])
8642         pkt.Reply(8)
8643         pkt.CompletionCodes([0x0000, 0x0101, 0x8c00, 0xbf00])
8644         # 2222/1625, 22/37
8645         pkt = NCP(0x1625, "Set Directory Entry Information", 'fileserver')
8646         pkt.Request(NO_LENGTH_CHECK, [
8647                 #
8648                 # XXX - this didn't match what was in the spec for 22/37
8649                 # on the Novell Web site.
8650                 #
8651                 rec( 10, 1, DirHandle ),
8652                 rec( 11, 1, SearchAttributes ),
8653                 rec( 12, 4, SequenceNumber ),
8654                 rec( 16, 2, ChangeBits ),
8655                 rec( 18, 2, Reserved2 ),
8656                 rec( 20, 4, Subdirectory ),
8657                 srec(DOSDirectoryEntryStruct, req_cond="ncp.search_att_sub == TRUE"),
8658                 srec(DOSFileEntryStruct, req_cond="ncp.search_att_sub == FALSE"),
8659         ])
8660         pkt.Reply(8)
8661         pkt.ReqCondSizeConstant()
8662         pkt.CompletionCodes([0x0000, 0x0106, 0x8c00, 0xbf00])
8663         # 2222/1626, 22/38
8664         pkt = NCP(0x1626, "Scan File or Directory for Extended Trustees", 'fileserver')
8665         pkt.Request((13,267), [
8666                 rec( 10, 1, DirHandle ),
8667                 rec( 11, 1, SequenceByte ),
8668                 rec( 12, (1, 255), Path ),
8669         ], info_str=(Path, "Scan for Extended Trustees: %s", ", %s"))
8670         pkt.Reply(91, [
8671                 rec( 8, 1, NumberOfEntries, var="x" ),
8672                 rec( 9, 4, ObjectID ),
8673                 rec( 13, 4, ObjectID ),
8674                 rec( 17, 4, ObjectID ),
8675                 rec( 21, 4, ObjectID ),
8676                 rec( 25, 4, ObjectID ),
8677                 rec( 29, 4, ObjectID ),
8678                 rec( 33, 4, ObjectID ),
8679                 rec( 37, 4, ObjectID ),
8680                 rec( 41, 4, ObjectID ),
8681                 rec( 45, 4, ObjectID ),
8682                 rec( 49, 4, ObjectID ),
8683                 rec( 53, 4, ObjectID ),
8684                 rec( 57, 4, ObjectID ),
8685                 rec( 61, 4, ObjectID ),
8686                 rec( 65, 4, ObjectID ),
8687                 rec( 69, 4, ObjectID ),
8688                 rec( 73, 4, ObjectID ),
8689                 rec( 77, 4, ObjectID ),
8690                 rec( 81, 4, ObjectID ),
8691                 rec( 85, 4, ObjectID ),
8692                 rec( 89, 2, AccessRightsMaskWord, repeat="x" ),
8693         ])
8694         pkt.CompletionCodes([0x0000, 0x9800, 0x9b00, 0x9c00])
8695         # 2222/1627, 22/39
8696         pkt = NCP(0x1627, "Add Extended Trustee to Directory or File", 'fileserver')
8697         pkt.Request((18,272), [
8698                 rec( 10, 1, DirHandle ),
8699                 rec( 11, 4, ObjectID, BE ),
8700                 rec( 15, 2, TrusteeRights ),
8701                 rec( 17, (1, 255), Path ),
8702         ], info_str=(Path, "Add Extended Trustee: %s", ", %s"))
8703         pkt.Reply(8)
8704         pkt.CompletionCodes([0x0000, 0x9000])
8705         # 2222/1628, 22/40
8706         pkt = NCP(0x1628, "Scan Directory Disk Space", 'fileserver')
8707         pkt.Request((17,271), [
8708                 rec( 10, 1, DirHandle ),
8709                 rec( 11, 1, SearchAttributes ),
8710                 rec( 12, 4, SequenceNumber ),
8711                 rec( 16, (1, 255), SearchPattern ),
8712         ], info_str=(SearchPattern, "Scan Directory Disk Space: %s", ", %s"))
8713         pkt.Reply((148), [
8714                 rec( 8, 4, SequenceNumber ),
8715                 rec( 12, 4, Subdirectory ),
8716                 rec( 16, 4, AttributesDef32 ),
8717                 rec( 20, 1, UniqueID ),
8718                 rec( 21, 1, PurgeFlags ),
8719                 rec( 22, 1, DestNameSpace ),
8720                 rec( 23, 1, NameLen ),
8721                 rec( 24, 12, Name12 ),
8722                 rec( 36, 2, CreationTime ),
8723                 rec( 38, 2, CreationDate ),
8724                 rec( 40, 4, CreatorID, BE ),
8725                 rec( 44, 2, ArchivedTime ),
8726                 rec( 46, 2, ArchivedDate ),
8727                 rec( 48, 4, ArchiverID, BE ),
8728                 rec( 52, 2, UpdateTime ),
8729                 rec( 54, 2, UpdateDate ),
8730                 rec( 56, 4, UpdateID, BE ),
8731                 rec( 60, 4, DataForkSize, BE ),
8732                 rec( 64, 4, DataForkFirstFAT, BE ),
8733                 rec( 68, 4, NextTrusteeEntry, BE ),
8734                 rec( 72, 36, Reserved36 ),
8735                 rec( 108, 2, InheritedRightsMask ),
8736                 rec( 110, 2, LastAccessedDate ),
8737                 rec( 112, 4, DeletedFileTime ),
8738                 rec( 116, 2, DeletedTime ),
8739                 rec( 118, 2, DeletedDate ),
8740                 rec( 120, 4, DeletedID, BE ),
8741                 rec( 124, 8, Undefined8 ),
8742                 rec( 132, 4, PrimaryEntry, LE ),
8743                 rec( 136, 4, NameList, LE ),
8744                 rec( 140, 4, OtherFileForkSize, BE ),
8745                 rec( 144, 4, OtherFileForkFAT, BE ),
8746         ])
8747         pkt.CompletionCodes([0x0000, 0x8900, 0x9c03, 0xfb01, 0xff00])
8748         # 2222/1629, 22/41
8749         pkt = NCP(0x1629, "Get Object Disk Usage and Restrictions", 'fileserver')
8750         pkt.Request(15, [
8751                 rec( 10, 1, VolumeNumber ),
8752                 rec( 11, 4, ObjectID, BE ),
8753         ])
8754         pkt.Reply(16, [
8755                 rec( 8, 4, Restriction ),
8756                 rec( 12, 4, InUse ),
8757         ])
8758         pkt.CompletionCodes([0x0000, 0x9802])
8759         # 2222/162A, 22/42
8760         pkt = NCP(0x162A, "Get Effective Rights for Directory Entry", 'fileserver')
8761         pkt.Request((12,266), [
8762                 rec( 10, 1, DirHandle ),
8763                 rec( 11, (1, 255), Path ),
8764         ], info_str=(Path, "Get Effective Rights: %s", ", %s"))
8765         pkt.Reply(10, [
8766                 rec( 8, 2, AccessRightsMaskWord ),
8767         ])
8768         pkt.CompletionCodes([0x0000, 0x9804, 0x9c03])
8769         # 2222/162B, 22/43
8770         pkt = NCP(0x162B, "Remove Extended Trustee from Dir or File", 'fileserver')
8771         pkt.Request((17,271), [
8772                 rec( 10, 1, DirHandle ),
8773                 rec( 11, 4, ObjectID, BE ),
8774                 rec( 15, 1, Unused ),
8775                 rec( 16, (1, 255), Path ),
8776         ], info_str=(Path, "Remove Extended Trustee from %s", ", %s"))
8777         pkt.Reply(8)
8778         pkt.CompletionCodes([0x0000, 0x9002, 0x9c03, 0xfe0f, 0xff09])
8779         # 2222/162C, 22/44
8780         pkt = NCP(0x162C, "Get Volume and Purge Information", 'file')
8781         pkt.Request( 11, [
8782                 rec( 10, 1, VolumeNumber )
8783         ],info_str=(VolumeNumber, "Get Volume and Purge Information for Volume %d", ", %d"))
8784         pkt.Reply( (38,53), [
8785                 rec( 8, 4, TotalBlocks ),
8786                 rec( 12, 4, FreeBlocks ),
8787                 rec( 16, 4, PurgeableBlocks ),
8788                 rec( 20, 4, NotYetPurgeableBlocks ),
8789                 rec( 24, 4, TotalDirectoryEntries ),
8790                 rec( 28, 4, AvailableDirEntries ),
8791                 rec( 32, 4, Reserved4 ),
8792                 rec( 36, 1, SectorsPerBlock ),
8793                 rec( 37, (1,16), VolumeNameLen ),
8794         ])
8795         pkt.CompletionCodes([0x0000])
8796         # 2222/162D, 22/45
8797         pkt = NCP(0x162D, "Get Directory Information", 'file')
8798         pkt.Request( 11, [
8799                 rec( 10, 1, DirHandle )
8800         ])
8801         pkt.Reply( (30, 45), [
8802                 rec( 8, 4, TotalBlocks ),
8803                 rec( 12, 4, AvailableBlocks ),
8804                 rec( 16, 4, TotalDirectoryEntries ),
8805                 rec( 20, 4, AvailableDirEntries ),
8806                 rec( 24, 4, Reserved4 ),
8807                 rec( 28, 1, SectorsPerBlock ),
8808                 rec( 29, (1,16), VolumeNameLen ),
8809         ])
8810         pkt.CompletionCodes([0x0000, 0x9b03])
8811         # 2222/162E, 22/46
8812         pkt = NCP(0x162E, "Rename Or Move", 'file')
8813         pkt.Request( (17,525), [
8814                 rec( 10, 1, SourceDirHandle ),
8815                 rec( 11, 1, SearchAttributes ),
8816                 rec( 12, 1, SourcePathComponentCount ),
8817                 rec( 13, (1,255), SourcePath ),
8818                 rec( -1, 1, DestDirHandle ),
8819                 rec( -1, 1, DestPathComponentCount ),
8820                 rec( -1, (1,255), DestPath ),
8821         ], info_str=(SourcePath, "Rename or Move: %s", ", %s"))
8822         pkt.Reply(8)
8823         pkt.CompletionCodes([0x0000, 0x0102, 0x8701, 0x8b00, 0x8d00, 0x8e00,
8824                              0x8f00, 0x9001, 0x9101, 0x9201, 0x9a00, 0x9b03,
8825                              0x9c03, 0xa400, 0xff17])
8826         # 2222/162F, 22/47
8827         pkt = NCP(0x162F, "Get Name Space Information", 'file')
8828         pkt.Request( 11, [
8829                 rec( 10, 1, VolumeNumber )
8830         ],info_str=(VolumeNumber, "Get Name Space Information for Volume %d", ", %d"))
8831         pkt.Reply( (15,523), [
8832                 #
8833                 # XXX - why does this not display anything at all
8834                 # if the stuff after the first IndexNumber is
8835                 # un-commented?  That stuff really is there....
8836                 #
8837                 rec( 8, 1, DefinedNameSpaces, var="v" ),
8838                 rec( 9, (1,255), NameSpaceName, repeat="v" ),
8839                 rec( -1, 1, DefinedDataStreams, var="w" ),
8840                 rec( -1, (2,256), DataStreamInfo, repeat="w" ),
8841                 rec( -1, 1, LoadedNameSpaces, var="x" ),
8842                 rec( -1, 1, IndexNumber, repeat="x" ),
8843 #               rec( -1, 1, VolumeNameSpaces, var="y" ),
8844 #               rec( -1, 1, IndexNumber, repeat="y" ),
8845 #               rec( -1, 1, VolumeDataStreams, var="z" ),
8846 #               rec( -1, 1, IndexNumber, repeat="z" ),
8847         ])
8848         pkt.CompletionCodes([0x0000, 0x9802, 0xff00])
8849         # 2222/1630, 22/48
8850         pkt = NCP(0x1630, "Get Name Space Directory Entry", 'file')
8851         pkt.Request( 16, [
8852                 rec( 10, 1, VolumeNumber ),
8853                 rec( 11, 4, DOSSequence ),
8854                 rec( 15, 1, SrcNameSpace ),
8855         ])
8856         pkt.Reply( 112, [
8857                 rec( 8, 4, SequenceNumber ),
8858                 rec( 12, 4, Subdirectory ),
8859                 rec( 16, 4, AttributesDef32 ),
8860                 rec( 20, 1, UniqueID ),
8861                 rec( 21, 1, Flags ),
8862                 rec( 22, 1, SrcNameSpace ),
8863                 rec( 23, 1, NameLength ),
8864                 rec( 24, 12, Name12 ),
8865                 rec( 36, 2, CreationTime ),
8866                 rec( 38, 2, CreationDate ),
8867                 rec( 40, 4, CreatorID, BE ),
8868                 rec( 44, 2, ArchivedTime ),
8869                 rec( 46, 2, ArchivedDate ),
8870                 rec( 48, 4, ArchiverID ),
8871                 rec( 52, 2, UpdateTime ),
8872                 rec( 54, 2, UpdateDate ),
8873                 rec( 56, 4, UpdateID ),
8874                 rec( 60, 4, FileSize ),
8875                 rec( 64, 44, Reserved44 ),
8876                 rec( 108, 2, InheritedRightsMask ),
8877                 rec( 110, 2, LastAccessedDate ),
8878         ])
8879         pkt.CompletionCodes([0x0000, 0x8900, 0x9802, 0xbf00])
8880         # 2222/1631, 22/49
8881         pkt = NCP(0x1631, "Open Data Stream", 'file')
8882         pkt.Request( (15,269), [
8883                 rec( 10, 1, DataStream ),
8884                 rec( 11, 1, DirHandle ),
8885                 rec( 12, 1, AttributesDef ),
8886                 rec( 13, 1, OpenRights ),
8887                 rec( 14, (1, 255), FileName ),
8888         ], info_str=(FileName, "Open Data Stream: %s", ", %s"))
8889         pkt.Reply( 12, [
8890                 rec( 8, 4, CCFileHandle, BE ),
8891         ])
8892         pkt.CompletionCodes([0x0000, 0x8000, 0x8200, 0x9002, 0xbe00, 0xff00])
8893         # 2222/1632, 22/50
8894         pkt = NCP(0x1632, "Get Object Effective Rights for Directory Entry", 'file')
8895         pkt.Request( (16,270), [
8896                 rec( 10, 4, ObjectID, BE ),
8897                 rec( 14, 1, DirHandle ),
8898                 rec( 15, (1, 255), Path ),
8899         ], info_str=(Path, "Get Object Effective Rights: %s", ", %s"))
8900         pkt.Reply( 10, [
8901                 rec( 8, 2, TrusteeRights ),
8902         ])
8903         pkt.CompletionCodes([0x0000, 0x7e01, 0x9b00, 0x9c03])
8904         # 2222/1633, 22/51
8905         pkt = NCP(0x1633, "Get Extended Volume Information", 'file')
8906         pkt.Request( 11, [
8907                 rec( 10, 1, VolumeNumber ),
8908         ],info_str=(VolumeNumber, "Get Extended Volume Information for Volume %d", ", %d"))
8909         pkt.Reply( (139,266), [
8910                 rec( 8, 2, VolInfoReplyLen ),
8911                 rec( 10, 128, VolInfoStructure),
8912                 rec( 138, (1,128), VolumeNameLen ),
8913         ])
8914         pkt.CompletionCodes([0x0000, 0x7e01, 0x9804, 0xfb08, 0xff00])
8915         # 2222/1634, 22/52
8916         pkt = NCP(0x1634, "Get Mount Volume List", 'file')
8917         pkt.Request( 22, [
8918                 rec( 10, 4, StartVolumeNumber ),
8919                 rec( 14, 4, VolumeRequestFlags, LE ),
8920                 rec( 18, 4, SrcNameSpace ),
8921         ])
8922         pkt.Reply( 34, [
8923                 rec( 8, 4, ItemsInPacket, var="x" ),
8924                 rec( 12, 4, NextVolumeNumber ),
8925                 rec( 16, 18, VolumeStruct, repeat="x"),
8926         ])
8927         pkt.CompletionCodes([0x0000])
8928         # 2222/1700, 23/00
8929         pkt = NCP(0x1700, "Login User", 'file')
8930         pkt.Request( (12, 58), [
8931                 rec( 10, (1,16), UserName ),
8932                 rec( -1, (1,32), Password ),
8933         ], info_str=(UserName, "Login User: %s", ", %s"))
8934         pkt.Reply(8)
8935         pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc501, 0xd700,
8936                              0xd900, 0xda00, 0xdb00, 0xde00, 0xdf00, 0xe800,
8937                              0xec00, 0xed00, 0xef00, 0xf001, 0xf100, 0xf200,
8938                              0xf600, 0xfb00, 0xfc06, 0xfe07, 0xff00])
8939         # 2222/1701, 23/01
8940         pkt = NCP(0x1701, "Change User Password", 'file')
8941         pkt.Request( (13, 90), [
8942                 rec( 10, (1,16), UserName ),
8943                 rec( -1, (1,32), Password ),
8944                 rec( -1, (1,32), NewPassword ),
8945         ], info_str=(UserName, "Change Password for User: %s", ", %s"))
8946         pkt.Reply(8)
8947         pkt.CompletionCodes([0x0000, 0x9600, 0xd600, 0xf001, 0xf101, 0xf501,
8948                              0xfc06, 0xfe07, 0xff00])
8949         # 2222/1702, 23/02
8950         pkt = NCP(0x1702, "Get User Connection List", 'file')
8951         pkt.Request( (11, 26), [
8952                 rec( 10, (1,16), UserName ),
8953         ], info_str=(UserName, "Get User Connection: %s", ", %s"))
8954         pkt.Reply( (9, 136), [
8955                 rec( 8, (1, 128), ConnectionNumberList ),
8956         ])
8957         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
8958         # 2222/1703, 23/03
8959         pkt = NCP(0x1703, "Get User Number", 'file')
8960         pkt.Request( (11, 26), [
8961                 rec( 10, (1,16), UserName ),
8962         ], info_str=(UserName, "Get User Number: %s", ", %s"))
8963         pkt.Reply( 12, [
8964                 rec( 8, 4, ObjectID, BE ),
8965         ])
8966         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
8967         # 2222/1705, 23/05
8968         pkt = NCP(0x1705, "Get Station's Logged Info", 'file')
8969         pkt.Request( 11, [
8970                 rec( 10, 1, TargetConnectionNumber ),
8971         ],info_str=(TargetConnectionNumber, "Get Station's Logged Information on Connection %d", ", %d"))
8972         pkt.Reply( 266, [
8973                 rec( 8, 16, UserName16 ),
8974                 rec( 24, 7, LoginTime ),
8975                 rec( 31, 39, FullName ),
8976                 rec( 70, 4, UserID, BE ),
8977                 rec( 74, 128, SecurityEquivalentList ),
8978                 rec( 202, 64, Reserved64 ),
8979         ])
8980         pkt.CompletionCodes([0x0000, 0x9602, 0xfc06, 0xfd00, 0xfe07, 0xff00])
8981         # 2222/1707, 23/07
8982         pkt = NCP(0x1707, "Get Group Number", 'file')
8983         pkt.Request( 14, [
8984                 rec( 10, 4, ObjectID, BE ),
8985         ])
8986         pkt.Reply( 62, [
8987                 rec( 8, 4, ObjectID, BE ),
8988                 rec( 12, 2, ObjectType, BE ),
8989                 rec( 14, 48, ObjectNameLen ),
8990         ])
8991         pkt.CompletionCodes([0x0000, 0x9602, 0xf101, 0xfc06, 0xfe07, 0xff00])
8992         # 2222/170C, 23/12
8993         pkt = NCP(0x170C, "Verify Serialization", 'file')
8994         pkt.Request( 14, [
8995                 rec( 10, 4, ServerSerialNumber ),
8996         ])
8997         pkt.Reply(8)
8998         pkt.CompletionCodes([0x0000, 0xff00])
8999         # 2222/170D, 23/13
9000         pkt = NCP(0x170D, "Log Network Message", 'file')
9001         pkt.Request( (11, 68), [
9002                 rec( 10, (1, 58), TargetMessage ),
9003         ], info_str=(TargetMessage, "Log Network Message: %s", ", %s"))
9004         pkt.Reply(8)
9005         pkt.CompletionCodes([0x0000, 0x8000, 0x8100, 0x8800, 0x8d00, 0x8e00, 0x8f00,
9006                              0x9001, 0x9400, 0x9600, 0x9804, 0x9900, 0x9b00, 0xa100,
9007                              0xa201, 0xff00])
9008         # 2222/170E, 23/14
9009         pkt = NCP(0x170E, "Get Disk Utilization", 'file')
9010         pkt.Request( 15, [
9011                 rec( 10, 1, VolumeNumber ),
9012                 rec( 11, 4, TrusteeID, BE ),
9013         ])
9014         pkt.Reply( 19, [
9015                 rec( 8, 1, VolumeNumber ),
9016                 rec( 9, 4, TrusteeID, BE ),
9017                 rec( 13, 2, DirectoryCount, BE ),
9018                 rec( 15, 2, FileCount, BE ),
9019                 rec( 17, 2, ClusterCount, BE ),
9020         ])
9021         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0xa100, 0xf200])
9022         # 2222/170F, 23/15
9023         pkt = NCP(0x170F, "Scan File Information", 'file')
9024         pkt.Request((15,269), [
9025                 rec( 10, 2, LastSearchIndex ),
9026                 rec( 12, 1, DirHandle ),
9027                 rec( 13, 1, SearchAttributes ),
9028                 rec( 14, (1, 255), FileName ),
9029         ], info_str=(FileName, "Scan File Information: %s", ", %s"))
9030         pkt.Reply( 102, [
9031                 rec( 8, 2, NextSearchIndex ),
9032                 rec( 10, 14, FileName14 ),
9033                 rec( 24, 2, AttributesDef16 ),
9034                 rec( 26, 4, FileSize, BE ),
9035                 rec( 30, 2, CreationDate, BE ),
9036                 rec( 32, 2, LastAccessedDate, BE ),
9037                 rec( 34, 2, ModifiedDate, BE ),
9038                 rec( 36, 2, ModifiedTime, BE ),
9039                 rec( 38, 4, CreatorID, BE ),
9040                 rec( 42, 2, ArchivedDate, BE ),
9041                 rec( 44, 2, ArchivedTime, BE ),
9042                 rec( 46, 56, Reserved56 ),
9043         ])
9044         pkt.CompletionCodes([0x0000, 0x8800, 0x8900, 0x9300, 0x9400, 0x9804, 0x9b00, 0x9c00,
9045                              0xa100, 0xfd00, 0xff17])
9046         # 2222/1710, 23/16
9047         pkt = NCP(0x1710, "Set File Information", 'file')
9048         pkt.Request((91,345), [
9049                 rec( 10, 2, AttributesDef16 ),
9050                 rec( 12, 4, FileSize, BE ),
9051                 rec( 16, 2, CreationDate, BE ),
9052                 rec( 18, 2, LastAccessedDate, BE ),
9053                 rec( 20, 2, ModifiedDate, BE ),
9054                 rec( 22, 2, ModifiedTime, BE ),
9055                 rec( 24, 4, CreatorID, BE ),
9056                 rec( 28, 2, ArchivedDate, BE ),
9057                 rec( 30, 2, ArchivedTime, BE ),
9058                 rec( 32, 56, Reserved56 ),
9059                 rec( 88, 1, DirHandle ),
9060                 rec( 89, 1, SearchAttributes ),
9061                 rec( 90, (1, 255), FileName ),
9062         ], info_str=(FileName, "Set Information for File: %s", ", %s"))
9063         pkt.Reply(8)
9064         pkt.CompletionCodes([0x0000, 0x8800, 0x8c00, 0x8e00, 0x9400, 0x9600, 0x9804,
9065                              0x9b03, 0x9c00, 0xa100, 0xa201, 0xfc06, 0xfd00, 0xfe07,
9066                              0xff17])
9067         # 2222/1711, 23/17
9068         pkt = NCP(0x1711, "Get File Server Information", 'fileserver')
9069         pkt.Request(10)
9070         pkt.Reply(136, [
9071                 rec( 8, 48, ServerName ),
9072                 rec( 56, 1, OSMajorVersion ),
9073                 rec( 57, 1, OSMinorVersion ),
9074                 rec( 58, 2, ConnectionsSupportedMax, BE ),
9075                 rec( 60, 2, ConnectionsInUse, BE ),
9076                 rec( 62, 2, VolumesSupportedMax, BE ),
9077                 rec( 64, 1, OSRevision ),
9078                 rec( 65, 1, SFTSupportLevel ),
9079                 rec( 66, 1, TTSLevel ),
9080                 rec( 67, 2, ConnectionsMaxUsed, BE ),
9081                 rec( 69, 1, AccountVersion ),
9082                 rec( 70, 1, VAPVersion ),
9083                 rec( 71, 1, QueueingVersion ),
9084                 rec( 72, 1, PrintServerVersion ),
9085                 rec( 73, 1, VirtualConsoleVersion ),
9086                 rec( 74, 1, SecurityRestrictionVersion ),
9087                 rec( 75, 1, InternetBridgeVersion ),
9088                 rec( 76, 1, MixedModePathFlag ),
9089                 rec( 77, 1, LocalLoginInfoCcode ),
9090                 rec( 78, 2, ProductMajorVersion, BE ),
9091                 rec( 80, 2, ProductMinorVersion, BE ),
9092                 rec( 82, 2, ProductRevisionVersion, BE ),
9093                 rec( 84, 1, OSLanguageID, LE ),
9094                 rec( 85, 51, Reserved51 ),
9095         ])
9096         pkt.CompletionCodes([0x0000, 0x9600])
9097         # 2222/1712, 23/18
9098         pkt = NCP(0x1712, "Get Network Serial Number", 'fileserver')
9099         pkt.Request(10)
9100         pkt.Reply(14, [
9101                 rec( 8, 4, ServerSerialNumber ),
9102                 rec( 12, 2, ApplicationNumber ),
9103         ])
9104         pkt.CompletionCodes([0x0000, 0x9600])
9105         # 2222/1713, 23/19
9106         pkt = NCP(0x1713, "Get Internet Address", 'fileserver')
9107         pkt.Request(11, [
9108                 rec( 10, 1, TargetConnectionNumber ),
9109         ],info_str=(TargetConnectionNumber, "Get Internet Address for Connection %d", ", %d"))
9110         pkt.Reply(20, [
9111                 rec( 8, 4, NetworkAddress, BE ),
9112                 rec( 12, 6, NetworkNodeAddress ),
9113                 rec( 18, 2, NetworkSocket, BE ),
9114         ])
9115         pkt.CompletionCodes([0x0000, 0xff00])
9116         # 2222/1714, 23/20
9117         pkt = NCP(0x1714, "Login Object", 'bindery')
9118         pkt.Request( (14, 60), [
9119                 rec( 10, 2, ObjectType, BE ),
9120                 rec( 12, (1,16), ClientName ),
9121                 rec( -1, (1,32), Password ),
9122         ], info_str=(UserName, "Login Object: %s", ", %s"))
9123         pkt.Reply(8)
9124         pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc501, 0xd600, 0xd700,
9125                              0xd900, 0xda00, 0xdb00, 0xde00, 0xdf00, 0xe800, 0xec00,
9126                              0xed00, 0xef00, 0xf001, 0xf100, 0xf200, 0xf600, 0xfb00,
9127                              0xfc06, 0xfe07, 0xff00])
9128         # 2222/1715, 23/21
9129         pkt = NCP(0x1715, "Get Object Connection List", 'bindery')
9130         pkt.Request( (13, 28), [
9131                 rec( 10, 2, ObjectType, BE ),
9132                 rec( 12, (1,16), ObjectName ),
9133         ], info_str=(UserName, "Get Object Connection List: %s", ", %s"))
9134         pkt.Reply( (9, 136), [
9135                 rec( 8, (1, 128), ConnectionNumberList ),
9136         ])
9137         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9138         # 2222/1716, 23/22
9139         pkt = NCP(0x1716, "Get Station's Logged Info", 'bindery')
9140         pkt.Request( 11, [
9141                 rec( 10, 1, TargetConnectionNumber ),
9142         ])
9143         pkt.Reply( 70, [
9144                 rec( 8, 4, UserID, BE ),
9145                 rec( 12, 2, ObjectType, BE ),
9146                 rec( 14, 48, ObjectNameLen ),
9147                 rec( 62, 7, LoginTime ),
9148                 rec( 69, 1, Reserved ),
9149         ])
9150         pkt.CompletionCodes([0x0000, 0x9602, 0xfb0a, 0xfc06, 0xfd00, 0xfe07, 0xff00])
9151         # 2222/1717, 23/23
9152         pkt = NCP(0x1717, "Get Login Key", 'bindery')
9153         pkt.Request(10)
9154         pkt.Reply( 16, [
9155                 rec( 8, 8, LoginKey ),
9156         ])
9157         pkt.CompletionCodes([0x0000, 0x9602])
9158         # 2222/1718, 23/24
9159         pkt = NCP(0x1718, "Keyed Object Login", 'bindery')
9160         pkt.Request( (21, 68), [
9161                 rec( 10, 8, LoginKey ),
9162                 rec( 18, 2, ObjectType, BE ),
9163                 rec( 20, (1,48), ObjectName ),
9164         ], info_str=(ObjectName, "Keyed Object Login: %s", ", %s"))
9165         pkt.Reply(8)
9166         pkt.CompletionCodes([0x0000, 0x9602, 0xc101, 0xc200, 0xc500, 0xd904, 0xda00,
9167                              0xdb00, 0xdc00, 0xde00, 0xff00])
9168         # 2222/171A, 23/26
9169         #
9170         # XXX - for NCP-over-IP, the NetworkAddress field appears to be
9171         # an IP address, rather than an IPX network address, and should
9172         # be dissected as an FT_IPv4 value; the NetworkNodeAddress and
9173         # NetworkSocket are 0.
9174         #
9175         # For NCP-over-IPX, it should probably be dissected as an
9176         # FT_IPXNET value.
9177         #
9178         pkt = NCP(0x171A, "Get Internet Address", 'fileserver')
9179         pkt.Request(11, [
9180                 rec( 10, 1, TargetConnectionNumber ),
9181         ])
9182         pkt.Reply(21, [
9183                 rec( 8, 4, NetworkAddress, BE ),
9184                 rec( 12, 6, NetworkNodeAddress ),
9185                 rec( 18, 2, NetworkSocket, BE ),
9186                 rec( 20, 1, ConnectionType ),
9187         ])
9188         pkt.CompletionCodes([0x0000])
9189         # 2222/171B, 23/27
9190         pkt = NCP(0x171B, "Get Object Connection List", 'bindery')
9191         pkt.Request( (17,64), [
9192                 rec( 10, 4, SearchConnNumber ),
9193                 rec( 14, 2, ObjectType, BE ),
9194                 rec( 16, (1,48), ObjectName ),
9195         ], info_str=(ObjectName, "Get Object Connection List: %s", ", %s"))
9196         pkt.Reply( (10,137), [
9197                 rec( 8, 1, ConnListLen, var="x" ),
9198                 rec( 9, (1,128), ConnectionNumberList, repeat="x" ),
9199         ])
9200         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9201         # 2222/171C, 23/28
9202         pkt = NCP(0x171C, "Get Station's Logged Info", 'connection')
9203         pkt.Request( 14, [
9204                 rec( 10, 4, TargetConnectionNumber ),
9205         ])
9206         pkt.Reply( 70, [
9207                 rec( 8, 4, UserID, BE ),
9208                 rec( 12, 2, ObjectType, BE ),
9209                 rec( 14, 48, ObjectNameLen ),
9210                 rec( 62, 7, LoginTime ),
9211                 rec( 69, 1, Reserved ),
9212         ])
9213         pkt.CompletionCodes([0x0000, 0x9602, 0xfb02, 0xfc06, 0xfd00, 0xfe07, 0xff00])
9214         # 2222/171D, 23/29
9215         pkt = NCP(0x171D, "Change Connection State", 'connection')
9216         pkt.Request( 11, [
9217                 rec( 10, 1, RequestCode ),
9218         ])
9219         pkt.Reply(8)
9220         pkt.CompletionCodes([0x0000, 0x0109, 0x7a00, 0x7b00, 0x7c00, 0xe000, 0xfb06, 0xfd00])
9221         # 2222/171E, 23/30
9222         pkt = NCP(0x171E, "Set Watchdog Delay Interval", 'connection')
9223         pkt.Request( 14, [
9224                 rec( 10, 4, NumberOfMinutesToDelay ),
9225         ])
9226         pkt.Reply(8)
9227         pkt.CompletionCodes([0x0000, 0x0107])
9228         # 2222/171F, 23/31
9229         pkt = NCP(0x171F, "Get Connection List From Object", 'bindery')
9230         pkt.Request( 18, [
9231                 rec( 10, 4, ObjectID, BE ),
9232                 rec( 14, 4, ConnectionNumber ),
9233         ])
9234         pkt.Reply( (9, 136), [
9235                 rec( 8, (1, 128), ConnectionNumberList ),
9236         ])
9237         pkt.CompletionCodes([0x0000, 0x9600, 0xf001, 0xfc06, 0xfe07, 0xff00])
9238         # 2222/1720, 23/32
9239         pkt = NCP(0x1720, "Scan Bindery Object (List)", 'bindery')
9240         pkt.Request((23,70), [
9241                 rec( 10, 4, NextObjectID, BE ),
9242                 rec( 14, 4, ObjectType, BE ),
9243                 rec( 18, 4, InfoFlags ),
9244                 rec( 22, (1,48), ObjectName ),
9245         ], info_str=(ObjectName, "Scan Bindery Object: %s", ", %s"))
9246         pkt.Reply(NO_LENGTH_CHECK, [
9247                 rec( 8, 4, ObjectInfoReturnCount ),
9248                 rec( 12, 4, NextObjectID, BE ),
9249                 rec( 16, 4, ObjectIDInfo ),
9250                 srec(ObjectTypeStruct, req_cond="ncp.info_flags_type == TRUE"),
9251                 srec(ObjectSecurityStruct, req_cond="ncp.info_flags_security == TRUE"),
9252                 srec(ObjectFlagsStruct, req_cond="ncp.info_flags_flags == TRUE"),
9253                 srec(ObjectNameStruct, req_cond="ncp.info_flags_name == TRUE"),
9254         ])
9255         pkt.ReqCondSizeVariable()
9256         pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xfc02, 0xfe01, 0xff00])
9257         # 2222/1721, 23/33
9258         pkt = NCP(0x1721, "Generate GUIDs", 'nds')
9259         pkt.Request( 14, [
9260                 rec( 10, 4, ReturnInfoCount ),
9261         ])
9262         pkt.Reply(28, [
9263                 rec( 8, 4, ReturnInfoCount, var="x" ),
9264                 rec( 12, 16, GUID, repeat="x" ),
9265         ])
9266         pkt.CompletionCodes([0x0000])
9267         # 2222/1732, 23/50
9268         pkt = NCP(0x1732, "Create Bindery Object", 'bindery')
9269         pkt.Request( (15,62), [
9270                 rec( 10, 1, ObjectFlags ),
9271                 rec( 11, 1, ObjectSecurity ),
9272                 rec( 12, 2, ObjectType, BE ),
9273                 rec( 14, (1,48), ObjectName ),
9274         ], info_str=(ObjectName, "Create Bindery Object: %s", ", %s"))
9275         pkt.Reply(8)
9276         pkt.CompletionCodes([0x0000, 0x9600, 0xe700, 0xee00, 0xef00, 0xf101, 0xf501,
9277                              0xfc06, 0xfe07, 0xff00])
9278         # 2222/1733, 23/51
9279         pkt = NCP(0x1733, "Delete Bindery Object", 'bindery')
9280         pkt.Request( (13,60), [
9281                 rec( 10, 2, ObjectType, BE ),
9282                 rec( 12, (1,48), ObjectName ),
9283         ], info_str=(ObjectName, "Delete Bindery Object: %s", ", %s"))
9284         pkt.Reply(8)
9285         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf200, 0xf400, 0xf600, 0xfb00,
9286                              0xfc06, 0xfe07, 0xff00])
9287         # 2222/1734, 23/52
9288         pkt = NCP(0x1734, "Rename Bindery Object", 'bindery')
9289         pkt.Request( (14,108), [
9290                 rec( 10, 2, ObjectType, BE ),
9291                 rec( 12, (1,48), ObjectName ),
9292                 rec( -1, (1,48), NewObjectName ),
9293         ], info_str=(ObjectName, "Rename Bindery Object: %s", ", %s"))
9294         pkt.Reply(8)
9295         pkt.CompletionCodes([0x0000, 0x9600, 0xee00, 0xf000, 0xf300, 0xfc06, 0xfe07, 0xff00])
9296         # 2222/1735, 23/53
9297         pkt = NCP(0x1735, "Get Bindery Object ID", 'bindery')
9298         pkt.Request((13,60), [
9299                 rec( 10, 2, ObjectType, BE ),
9300                 rec( 12, (1,48), ObjectName ),
9301         ], info_str=(ObjectName, "Get Bindery Object: %s", ", %s"))
9302         pkt.Reply(62, [
9303                 rec( 8, 4, ObjectID, BE ),
9304                 rec( 12, 2, ObjectType, BE ),
9305                 rec( 14, 48, ObjectNameLen ),
9306         ])
9307         pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xf000, 0xfc02, 0xfe01, 0xff00])
9308         # 2222/1736, 23/54
9309         pkt = NCP(0x1736, "Get Bindery Object Name", 'bindery')
9310         pkt.Request( 14, [
9311                 rec( 10, 4, ObjectID, BE ),
9312         ])
9313         pkt.Reply( 62, [
9314                 rec( 8, 4, ObjectID, BE ),
9315                 rec( 12, 2, ObjectType, BE ),
9316                 rec( 14, 48, ObjectNameLen ),
9317         ])
9318         pkt.CompletionCodes([0x0000, 0x9600, 0xf101, 0xfc02, 0xfe01, 0xff00])
9319         # 2222/1737, 23/55
9320         pkt = NCP(0x1737, "Scan Bindery Object", 'bindery')
9321         pkt.Request((17,64), [
9322                 rec( 10, 4, ObjectID, BE ),
9323                 rec( 14, 2, ObjectType, BE ),
9324                 rec( 16, (1,48), ObjectName ),
9325         ], info_str=(ObjectName, "Scan Bindery Object: %s", ", %s"))
9326         pkt.Reply(65, [
9327                 rec( 8, 4, ObjectID, BE ),
9328                 rec( 12, 2, ObjectType, BE ),
9329                 rec( 14, 48, ObjectNameLen ),
9330                 rec( 62, 1, ObjectFlags ),
9331                 rec( 63, 1, ObjectSecurity ),
9332                 rec( 64, 1, ObjectHasProperties ),
9333         ])
9334         pkt.CompletionCodes([0x0000, 0x9600, 0xef01, 0xfc02,
9335                              0xfe01, 0xff00])
9336         # 2222/1738, 23/56
9337         pkt = NCP(0x1738, "Change Bindery Object Security", 'bindery')
9338         pkt.Request((14,61), [
9339                 rec( 10, 1, ObjectSecurity ),
9340                 rec( 11, 2, ObjectType, BE ),
9341                 rec( 13, (1,48), ObjectName ),
9342         ], info_str=(ObjectName, "Change Bindery Object Security: %s", ", %s"))
9343         pkt.Reply(8)
9344         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf501, 0xfc02, 0xfe01, 0xff00])
9345         # 2222/1739, 23/57
9346         pkt = NCP(0x1739, "Create Property", 'bindery')
9347         pkt.Request((16,78), [
9348                 rec( 10, 2, ObjectType, BE ),
9349                 rec( 12, (1,48), ObjectName ),
9350                 rec( -1, 1, PropertyType ),
9351                 rec( -1, 1, ObjectSecurity ),
9352                 rec( -1, (1,16), PropertyName ),
9353         ], info_str=(PropertyName, "Create Property: %s", ", %s"))
9354         pkt.Reply(8)
9355         pkt.CompletionCodes([0x0000, 0x9600, 0xed00, 0xef00, 0xf000, 0xf101,
9356                              0xf200, 0xf600, 0xf700, 0xfb00, 0xfc02, 0xfe01,
9357                              0xff00])
9358         # 2222/173A, 23/58
9359         pkt = NCP(0x173A, "Delete Property", 'bindery')
9360         pkt.Request((14,76), [
9361                 rec( 10, 2, ObjectType, BE ),
9362                 rec( 12, (1,48), ObjectName ),
9363                 rec( -1, (1,16), PropertyName ),
9364         ], info_str=(PropertyName, "Delete Property: %s", ", %s"))
9365         pkt.Reply(8)
9366         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf600, 0xfb00, 0xfc02,
9367                              0xfe01, 0xff00])
9368         # 2222/173B, 23/59
9369         pkt = NCP(0x173B, "Change Property Security", 'bindery')
9370         pkt.Request((15,77), [
9371                 rec( 10, 2, ObjectType, BE ),
9372                 rec( 12, (1,48), ObjectName ),
9373                 rec( -1, 1, ObjectSecurity ),
9374                 rec( -1, (1,16), PropertyName ),
9375         ], info_str=(PropertyName, "Change Property Security: %s", ", %s"))
9376         pkt.Reply(8)
9377         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf200, 0xf600, 0xfb00,
9378                              0xfc02, 0xfe01, 0xff00])
9379         # 2222/173C, 23/60
9380         pkt = NCP(0x173C, "Scan Property", 'bindery')
9381         pkt.Request((18,80), [
9382                 rec( 10, 2, ObjectType, BE ),
9383                 rec( 12, (1,48), ObjectName ),
9384                 rec( -1, 4, LastInstance, BE ),
9385                 rec( -1, (1,16), PropertyName ),
9386         ], info_str=(PropertyName, "Scan Property: %s", ", %s"))
9387         pkt.Reply( 32, [
9388                 rec( 8, 16, PropertyName16 ),
9389                 rec( 24, 1, ObjectFlags ),
9390                 rec( 25, 1, ObjectSecurity ),
9391                 rec( 26, 4, SearchInstance, BE ),
9392                 rec( 30, 1, ValueAvailable ),
9393                 rec( 31, 1, MoreProperties ),
9394         ])
9395         pkt.CompletionCodes([0x0000, 0x9600, 0xf000, 0xf101, 0xf200, 0xf600, 0xfb00,
9396                              0xfc02, 0xfe01, 0xff00])
9397         # 2222/173D, 23/61
9398         pkt = NCP(0x173D, "Read Property Value", 'bindery')
9399         pkt.Request((15,77), [
9400                 rec( 10, 2, ObjectType, BE ),
9401                 rec( 12, (1,48), ObjectName ),
9402                 rec( -1, 1, PropertySegment ),
9403                 rec( -1, (1,16), PropertyName ),
9404         ], info_str=(PropertyName, "Read Property Value: %s", ", %s"))
9405         pkt.Reply(138, [
9406                 rec( 8, 128, PropertyData ),
9407                 rec( 136, 1, PropertyHasMoreSegments ),
9408                 rec( 137, 1, PropertyType ),
9409         ])
9410         pkt.CompletionCodes([0x0000, 0x8800, 0x9300, 0x9600, 0xec01,
9411                              0xf000, 0xf100, 0xf900, 0xfb02, 0xfc02,
9412                              0xfe01, 0xff00])
9413         # 2222/173E, 23/62
9414         pkt = NCP(0x173E, "Write Property Value", 'bindery')
9415         pkt.Request((144,206), [
9416                 rec( 10, 2, ObjectType, BE ),
9417                 rec( 12, (1,48), ObjectName ),
9418                 rec( -1, 1, PropertySegment ),
9419                 rec( -1, 1, MoreFlag ),
9420                 rec( -1, (1,16), PropertyName ),
9421                 #
9422                 # XXX - don't show this if MoreFlag isn't set?
9423                 # In at least some packages where it's not set,
9424                 # PropertyValue appears to be garbage.
9425                 #
9426                 rec( -1, 128, PropertyValue ),
9427         ], info_str=(PropertyName, "Write Property Value: %s", ", %s"))
9428         pkt.Reply(8)
9429         pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xec01, 0xf000, 0xf800,
9430                              0xfb02, 0xfc03, 0xfe01, 0xff00 ])
9431         # 2222/173F, 23/63
9432         pkt = NCP(0x173F, "Verify Bindery Object Password", 'bindery')
9433         pkt.Request((14,92), [
9434                 rec( 10, 2, ObjectType, BE ),
9435                 rec( 12, (1,48), ObjectName ),
9436                 rec( -1, (1,32), Password ),
9437         ], info_str=(ObjectName, "Verify Bindery Object Password: %s", ", %s"))
9438         pkt.Reply(8)
9439         pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xec01, 0xf000, 0xf101,
9440                              0xfb02, 0xfc03, 0xfe01, 0xff00 ])
9441         # 2222/1740, 23/64
9442         pkt = NCP(0x1740, "Change Bindery Object Password", 'bindery')
9443         pkt.Request((15,124), [
9444                 rec( 10, 2, ObjectType, BE ),
9445                 rec( 12, (1,48), ObjectName ),
9446                 rec( -1, (1,32), Password ),
9447                 rec( -1, (1,32), NewPassword ),
9448         ], info_str=(ObjectName, "Change Bindery Object Password: %s", ", %s"))
9449         pkt.Reply(8)
9450         pkt.CompletionCodes([0x0000, 0x9600, 0xc501, 0xd701, 0xe800, 0xec01, 0xf001,
9451                              0xf100, 0xf800, 0xfb02, 0xfc03, 0xfe01, 0xff00])
9452         # 2222/1741, 23/65
9453         pkt = NCP(0x1741, "Add Bindery Object To Set", 'bindery')
9454         pkt.Request((17,126), [
9455                 rec( 10, 2, ObjectType, BE ),
9456                 rec( 12, (1,48), ObjectName ),
9457                 rec( -1, (1,16), PropertyName ),
9458                 rec( -1, 2, MemberType, BE ),
9459                 rec( -1, (1,48), MemberName ),
9460         ], info_str=(MemberName, "Add Bindery Object to Set: %s", ", %s"))
9461         pkt.Reply(8)
9462         pkt.CompletionCodes([0x0000, 0x9600, 0xe800, 0xe900, 0xea00, 0xeb00,
9463                              0xec01, 0xf000, 0xf800, 0xfb02, 0xfc03, 0xfe01,
9464                              0xff00])
9465         # 2222/1742, 23/66
9466         pkt = NCP(0x1742, "Delete Bindery Object From Set", 'bindery')
9467         pkt.Request((17,126), [
9468                 rec( 10, 2, ObjectType, BE ),
9469                 rec( 12, (1,48), ObjectName ),
9470                 rec( -1, (1,16), PropertyName ),
9471                 rec( -1, 2, MemberType, BE ),
9472                 rec( -1, (1,48), MemberName ),
9473         ], info_str=(MemberName, "Delete Bindery Object from Set: %s", ", %s"))
9474         pkt.Reply(8)
9475         pkt.CompletionCodes([0x0000, 0x9600, 0xeb00, 0xf000, 0xf800, 0xfb02,
9476                              0xfc03, 0xfe01, 0xff00])
9477         # 2222/1743, 23/67
9478         pkt = NCP(0x1743, "Is Bindery Object In Set", 'bindery')
9479         pkt.Request((17,126), [
9480                 rec( 10, 2, ObjectType, BE ),
9481                 rec( 12, (1,48), ObjectName ),
9482                 rec( -1, (1,16), PropertyName ),
9483                 rec( -1, 2, MemberType, BE ),
9484                 rec( -1, (1,48), MemberName ),
9485         ], info_str=(MemberName, "Is Bindery Object in Set: %s", ", %s"))
9486         pkt.Reply(8)
9487         pkt.CompletionCodes([0x0000, 0x9600, 0xea00, 0xeb00, 0xec01, 0xf000,
9488                              0xfb02, 0xfc03, 0xfe01, 0xff00])
9489         # 2222/1744, 23/68
9490         pkt = NCP(0x1744, "Close Bindery", 'bindery')
9491         pkt.Request(10)
9492         pkt.Reply(8)
9493         pkt.CompletionCodes([0x0000, 0xff00])
9494         # 2222/1745, 23/69
9495         pkt = NCP(0x1745, "Open Bindery", 'bindery')
9496         pkt.Request(10)
9497         pkt.Reply(8)
9498         pkt.CompletionCodes([0x0000, 0xff00])
9499         # 2222/1746, 23/70
9500         pkt = NCP(0x1746, "Get Bindery Access Level", 'bindery')
9501         pkt.Request(10)
9502         pkt.Reply(13, [
9503                 rec( 8, 1, ObjectSecurity ),
9504                 rec( 9, 4, LoggedObjectID, BE ),
9505         ])
9506         pkt.CompletionCodes([0x0000, 0x9600])
9507         # 2222/1747, 23/71
9508         pkt = NCP(0x1747, "Scan Bindery Object Trustee Paths", 'bindery')
9509         pkt.Request(17, [
9510                 rec( 10, 1, VolumeNumber ),
9511                 rec( 11, 2, LastSequenceNumber, BE ),
9512                 rec( 13, 4, ObjectID, BE ),
9513         ])
9514         pkt.Reply((16,270), [
9515                 rec( 8, 2, LastSequenceNumber, BE),
9516                 rec( 10, 4, ObjectID, BE ),
9517                 rec( 14, 1, ObjectSecurity ),
9518                 rec( 15, (1,255), Path ),
9519         ])
9520         pkt.CompletionCodes([0x0000, 0x9300, 0x9600, 0xa100, 0xf000, 0xf100,
9521                              0xf200, 0xfc02, 0xfe01, 0xff00])
9522         # 2222/1748, 23/72
9523         pkt = NCP(0x1748, "Get Bindery Object Access Level", 'bindery')
9524         pkt.Request(14, [
9525                 rec( 10, 4, ObjectID, BE ),
9526         ])
9527         pkt.Reply(9, [
9528                 rec( 8, 1, ObjectSecurity ),
9529         ])
9530         pkt.CompletionCodes([0x0000, 0x9600])
9531         # 2222/1749, 23/73
9532         pkt = NCP(0x1749, "Is Calling Station a Manager", 'bindery')
9533         pkt.Request(10)
9534         pkt.Reply(8)
9535         pkt.CompletionCodes([0x0003, 0xff1e])
9536         # 2222/174A, 23/74
9537         pkt = NCP(0x174A, "Keyed Verify Password", 'bindery')
9538         pkt.Request((21,68), [
9539                 rec( 10, 8, LoginKey ),
9540                 rec( 18, 2, ObjectType, BE ),
9541                 rec( 20, (1,48), ObjectName ),
9542         ], info_str=(ObjectName, "Keyed Verify Password: %s", ", %s"))
9543         pkt.Reply(8)
9544         pkt.CompletionCodes([0x0000, 0xc500, 0xfe01, 0xff0c])
9545         # 2222/174B, 23/75
9546         pkt = NCP(0x174B, "Keyed Change Password", 'bindery')
9547         pkt.Request((22,100), [
9548                 rec( 10, 8, LoginKey ),
9549                 rec( 18, 2, ObjectType, BE ),
9550                 rec( 20, (1,48), ObjectName ),
9551                 rec( -1, (1,32), Password ),
9552         ], info_str=(ObjectName, "Keyed Change Password: %s", ", %s"))
9553         pkt.Reply(8)
9554         pkt.CompletionCodes([0x0000, 0xc500, 0xfe01, 0xff0c])
9555         # 2222/174C, 23/76
9556         pkt = NCP(0x174C, "List Relations Of an Object", 'bindery')
9557         pkt.Request((18,80), [
9558                 rec( 10, 4, LastSeen, BE ),
9559                 rec( 14, 2, ObjectType, BE ),
9560                 rec( 16, (1,48), ObjectName ),
9561                 rec( -1, (1,16), PropertyName ),
9562         ], info_str=(ObjectName, "List Relations of an Object: %s", ", %s"))
9563         pkt.Reply(14, [
9564                 rec( 8, 2, RelationsCount, BE, var="x" ),
9565                 rec( 10, 4, ObjectID, BE, repeat="x" ),
9566         ])
9567         pkt.CompletionCodes([0x0000, 0xf000, 0xf200, 0xfe01, 0xff00])
9568         # 2222/1764, 23/100
9569         pkt = NCP(0x1764, "Create Queue", 'qms')
9570         pkt.Request((15,316), [
9571                 rec( 10, 2, QueueType, BE ),
9572                 rec( 12, (1,48), QueueName ),
9573                 rec( -1, 1, PathBase ),
9574                 rec( -1, (1,255), Path ),
9575         ], info_str=(QueueName, "Create Queue: %s", ", %s"))
9576         pkt.Reply(12, [
9577                 rec( 8, 4, QueueID ),
9578         ])
9579         pkt.CompletionCodes([0x0000, 0x9600, 0x9900, 0xd000, 0xd100,
9580                              0xd200, 0xd300, 0xd400, 0xd500, 0xd601,
9581                              0xd703, 0xd800, 0xd902, 0xda01, 0xdb02,
9582                              0xee00, 0xff00])
9583         # 2222/1765, 23/101
9584         pkt = NCP(0x1765, "Destroy Queue", 'qms')
9585         pkt.Request(14, [
9586                 rec( 10, 4, QueueID ),
9587         ])
9588         pkt.Reply(8)
9589         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9590                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9591                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9592         # 2222/1766, 23/102
9593         pkt = NCP(0x1766, "Read Queue Current Status", 'qms')
9594         pkt.Request(14, [
9595                 rec( 10, 4, QueueID ),
9596         ])
9597         pkt.Reply(20, [
9598                 rec( 8, 4, QueueID ),
9599                 rec( 12, 1, QueueStatus ),
9600                 rec( 13, 1, CurrentEntries ),
9601                 rec( 14, 1, CurrentServers, var="x" ),
9602                 rec( 15, 4, ServerID, repeat="x" ),
9603                 rec( 19, 1, ServerStationList, repeat="x" ),
9604         ])
9605         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9606                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9607                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9608         # 2222/1767, 23/103
9609         pkt = NCP(0x1767, "Set Queue Current Status", 'qms')
9610         pkt.Request(15, [
9611                 rec( 10, 4, QueueID ),
9612                 rec( 14, 1, QueueStatus ),
9613         ])
9614         pkt.Reply(8)
9615         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9616                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9617                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07,
9618                              0xff00])
9619         # 2222/1768, 23/104
9620         pkt = NCP(0x1768, "Create Queue Job And File", 'qms')
9621         pkt.Request(264, [
9622                 rec( 10, 4, QueueID ),
9623                 rec( 14, 250, JobStruct ),
9624         ])
9625         pkt.Reply(62, [
9626                 rec( 8, 1, ClientStation ),
9627                 rec( 9, 1, ClientTaskNumber ),
9628                 rec( 10, 4, ClientIDNumber, BE ),
9629                 rec( 14, 4, TargetServerIDNumber, BE ),
9630                 rec( 18, 6, TargetExecutionTime ),
9631                 rec( 24, 6, JobEntryTime ),
9632                 rec( 30, 2, JobNumber, BE ),
9633                 rec( 32, 2, JobType, BE ),
9634                 rec( 34, 1, JobPosition ),
9635                 rec( 35, 1, JobControlFlags ),
9636                 rec( 36, 14, JobFileName ),
9637                 rec( 50, 6, JobFileHandle ),
9638                 rec( 56, 1, ServerStation ),
9639                 rec( 57, 1, ServerTaskNumber ),
9640                 rec( 58, 4, ServerID, BE ),
9641         ])
9642         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9643                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9644                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07,
9645                              0xff00])
9646         # 2222/1769, 23/105
9647         pkt = NCP(0x1769, "Close File And Start Queue Job", 'qms')
9648         pkt.Request(16, [
9649                 rec( 10, 4, QueueID ),
9650                 rec( 14, 2, JobNumber, BE ),
9651         ])
9652         pkt.Reply(8)
9653         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9654                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9655                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9656         # 2222/176A, 23/106
9657         pkt = NCP(0x176A, "Remove Job From Queue", 'qms')
9658         pkt.Request(16, [
9659                 rec( 10, 4, QueueID ),
9660                 rec( 14, 2, JobNumber, BE ),
9661         ])
9662         pkt.Reply(8)
9663         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9664                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9665                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9666         # 2222/176B, 23/107
9667         pkt = NCP(0x176B, "Get Queue Job List", 'qms')
9668         pkt.Request(14, [
9669                 rec( 10, 4, QueueID ),
9670         ])
9671         pkt.Reply(12, [
9672                 rec( 8, 2, JobCount, BE, var="x" ),
9673                 rec( 10, 2, JobNumber, BE, repeat="x" ),
9674         ])
9675         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9676                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9677                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9678         # 2222/176C, 23/108
9679         pkt = NCP(0x176C, "Read Queue Job Entry", 'qms')
9680         pkt.Request(16, [
9681                 rec( 10, 4, QueueID ),
9682                 rec( 14, 2, JobNumber, BE ),
9683         ])
9684         pkt.Reply(258, [
9685             rec( 8, 250, JobStruct ),
9686         ])
9687         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9688                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9689                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9690         # 2222/176D, 23/109
9691         pkt = NCP(0x176D, "Change Queue Job Entry", 'qms')
9692         pkt.Request(260, [
9693             rec( 14, 250, JobStruct ),
9694         ])
9695         pkt.Reply(8)
9696         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9697                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9698                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9699         # 2222/176E, 23/110
9700         pkt = NCP(0x176E, "Change Queue Job Position", 'qms')
9701         pkt.Request(17, [
9702                 rec( 10, 4, QueueID ),
9703                 rec( 14, 2, JobNumber, BE ),
9704                 rec( 16, 1, NewPosition ),
9705         ])
9706         pkt.Reply(8)
9707         pkt.CompletionCodes([0x0000, 0x9600, 0xd000, 0xd100, 0xd500,
9708                              0xd601, 0xfe07, 0xff1f])
9709         # 2222/176F, 23/111
9710         pkt = NCP(0x176F, "Attach Queue Server To Queue", 'qms')
9711         pkt.Request(14, [
9712                 rec( 10, 4, QueueID ),
9713         ])
9714         pkt.Reply(8)
9715         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9716                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9717                              0xd800, 0xd902, 0xda01, 0xdb02, 0xea00,
9718                              0xfc06, 0xff00])
9719         # 2222/1770, 23/112
9720         pkt = NCP(0x1770, "Detach Queue Server From Queue", 'qms')
9721         pkt.Request(14, [
9722                 rec( 10, 4, QueueID ),
9723         ])
9724         pkt.Reply(8)
9725         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9726                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9727                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9728         # 2222/1771, 23/113
9729         pkt = NCP(0x1771, "Service Queue Job", 'qms')
9730         pkt.Request(16, [
9731                 rec( 10, 4, QueueID ),
9732                 rec( 14, 2, ServiceType, BE ),
9733         ])
9734         pkt.Reply(62, [
9735                 rec( 8, 1, ClientStation ),
9736                 rec( 9, 1, ClientTaskNumber ),
9737                 rec( 10, 4, ClientIDNumber, BE ),
9738                 rec( 14, 4, TargetServerIDNumber, BE ),
9739                 rec( 18, 6, TargetExecutionTime ),
9740                 rec( 24, 6, JobEntryTime ),
9741                 rec( 30, 2, JobNumber, BE ),
9742                 rec( 32, 2, JobType, BE ),
9743                 rec( 34, 1, JobPosition ),
9744                 rec( 35, 1, JobControlFlags ),
9745                 rec( 36, 14, JobFileName ),
9746                 rec( 50, 6, JobFileHandle ),
9747                 rec( 56, 1, ServerStation ),
9748                 rec( 57, 1, ServerTaskNumber ),
9749                 rec( 58, 4, ServerID, BE ),
9750         ])
9751         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9752                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9753                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9754         # 2222/1772, 23/114
9755         pkt = NCP(0x1772, "Finish Servicing Queue Job", 'qms')
9756         pkt.Request(20, [
9757                 rec( 10, 4, QueueID ),
9758                 rec( 14, 2, JobNumber, BE ),
9759                 rec( 16, 4, ChargeInformation, BE ),
9760         ])
9761         pkt.Reply(8)
9762         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9763                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9764                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9765         # 2222/1773, 23/115
9766         pkt = NCP(0x1773, "Abort Servicing Queue Job", 'qms')
9767         pkt.Request(16, [
9768                 rec( 10, 4, QueueID ),
9769                 rec( 14, 2, JobNumber, BE ),
9770         ])
9771         pkt.Reply(8)
9772         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9773                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9774                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9775         # 2222/1774, 23/116
9776         pkt = NCP(0x1774, "Change To Client Rights", 'qms')
9777         pkt.Request(16, [
9778                 rec( 10, 4, QueueID ),
9779                 rec( 14, 2, JobNumber, BE ),
9780         ])
9781         pkt.Reply(8)
9782         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9783                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9784                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9785         # 2222/1775, 23/117
9786         pkt = NCP(0x1775, "Restore Queue Server Rights", 'qms')
9787         pkt.Request(10)
9788         pkt.Reply(8)
9789         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9790                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9791                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9792         # 2222/1776, 23/118
9793         pkt = NCP(0x1776, "Read Queue Server Current Status", 'qms')
9794         pkt.Request(19, [
9795                 rec( 10, 4, QueueID ),
9796                 rec( 14, 4, ServerID, BE ),
9797                 rec( 18, 1, ServerStation ),
9798         ])
9799         pkt.Reply(72, [
9800                 rec( 8, 64, ServerStatusRecord ),
9801         ])
9802         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9803                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9804                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9805         # 2222/1777, 23/119
9806         pkt = NCP(0x1777, "Set Queue Server Current Status", 'qms')
9807         pkt.Request(78, [
9808                 rec( 10, 4, QueueID ),
9809                 rec( 14, 64, ServerStatusRecord ),
9810         ])
9811         pkt.Reply(8)
9812         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9813                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9814                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9815         # 2222/1778, 23/120
9816         pkt = NCP(0x1778, "Get Queue Job File Size", 'qms')
9817         pkt.Request(16, [
9818                 rec( 10, 4, QueueID ),
9819                 rec( 14, 2, JobNumber, BE ),
9820         ])
9821         pkt.Reply(20, [
9822                 rec( 8, 4, QueueID ),
9823                 rec( 12, 4, JobNumberLong ),
9824                 rec( 16, 4, FileSize, BE ),
9825         ])
9826         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9827                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9828                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9829         # 2222/1779, 23/121
9830         pkt = NCP(0x1779, "Create Queue Job And File", 'qms')
9831         pkt.Request(264, [
9832                 rec( 10, 4, QueueID ),
9833                 rec( 14, 250, JobStruct3x ),
9834         ])
9835         pkt.Reply(94, [
9836                 rec( 8, 86, JobStructNew ),
9837         ])
9838         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9839                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9840                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff00])
9841         # 2222/177A, 23/122
9842         pkt = NCP(0x177A, "Read Queue Job Entry", 'qms')
9843         pkt.Request(18, [
9844                 rec( 10, 4, QueueID ),
9845                 rec( 14, 4, JobNumberLong ),
9846         ])
9847         pkt.Reply(258, [
9848             rec( 8, 250, JobStruct3x ),
9849         ])
9850         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9851                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9852                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9853         # 2222/177B, 23/123
9854         pkt = NCP(0x177B, "Change Queue Job Entry", 'qms')
9855         pkt.Request(264, [
9856                 rec( 10, 4, QueueID ),
9857                 rec( 14, 250, JobStruct ),
9858         ])
9859         pkt.Reply(8)
9860         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9861                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9862                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff00])
9863         # 2222/177C, 23/124
9864         pkt = NCP(0x177C, "Service Queue Job", 'qms')
9865         pkt.Request(16, [
9866                 rec( 10, 4, QueueID ),
9867                 rec( 14, 2, ServiceType ),
9868         ])
9869         pkt.Reply(94, [
9870             rec( 8, 86, JobStructNew ),
9871         ])
9872         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9873                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9874                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9875         # 2222/177D, 23/125
9876         pkt = NCP(0x177D, "Read Queue Current Status", 'qms')
9877         pkt.Request(14, [
9878                 rec( 10, 4, QueueID ),
9879         ])
9880         pkt.Reply(32, [
9881                 rec( 8, 4, QueueID ),
9882                 rec( 12, 1, QueueStatus ),
9883                 rec( 13, 3, Reserved3 ),
9884                 rec( 16, 4, CurrentEntries ),
9885                 rec( 20, 4, CurrentServers, var="x" ),
9886                 rec( 24, 4, ServerID, repeat="x" ),
9887                 rec( 28, 4, ServerStationLong, LE, repeat="x" ),
9888         ])
9889         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9890                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9891                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9892         # 2222/177E, 23/126
9893         pkt = NCP(0x177E, "Set Queue Current Status", 'qms')
9894         pkt.Request(15, [
9895                 rec( 10, 4, QueueID ),
9896                 rec( 14, 1, QueueStatus ),
9897         ])
9898         pkt.Reply(8)
9899         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9900                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9901                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9902         # 2222/177F, 23/127
9903         pkt = NCP(0x177F, "Close File And Start Queue Job", 'qms')
9904         pkt.Request(18, [
9905                 rec( 10, 4, QueueID ),
9906                 rec( 14, 4, JobNumberLong ),
9907         ])
9908         pkt.Reply(8)
9909         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9910                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9911                              0xd800, 0xd902, 0xda01, 0xdb02, 0xfc07, 0xff00])
9912         # 2222/1780, 23/128
9913         pkt = NCP(0x1780, "Remove Job From Queue", 'qms')
9914         pkt.Request(18, [
9915                 rec( 10, 4, QueueID ),
9916                 rec( 14, 4, JobNumberLong ),
9917         ])
9918         pkt.Reply(8)
9919         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9920                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9921                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9922         # 2222/1781, 23/129
9923         pkt = NCP(0x1781, "Get Queue Job List", 'qms')
9924         pkt.Request(18, [
9925                 rec( 10, 4, QueueID ),
9926                 rec( 14, 4, JobNumberLong ),
9927         ])
9928         pkt.Reply(20, [
9929                 rec( 8, 4, TotalQueueJobs ),
9930                 rec( 12, 4, ReplyQueueJobNumbers, var="x" ),
9931                 rec( 16, 4, JobNumberLong, repeat="x" ),
9932         ])
9933         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9934                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9935                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9936         # 2222/1782, 23/130
9937         pkt = NCP(0x1782, "Change Job Priority", 'qms')
9938         pkt.Request(22, [
9939                 rec( 10, 4, QueueID ),
9940                 rec( 14, 4, JobNumberLong ),
9941                 rec( 18, 4, Priority ),
9942         ])
9943         pkt.Reply(8)
9944         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9945                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9946                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9947         # 2222/1783, 23/131
9948         pkt = NCP(0x1783, "Finish Servicing Queue Job", 'qms')
9949         pkt.Request(22, [
9950                 rec( 10, 4, QueueID ),
9951                 rec( 14, 4, JobNumberLong ),
9952                 rec( 18, 4, ChargeInformation ),
9953         ])
9954         pkt.Reply(8)
9955         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9956                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9957                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9958         # 2222/1784, 23/132
9959         pkt = NCP(0x1784, "Abort Servicing Queue Job", 'qms')
9960         pkt.Request(18, [
9961                 rec( 10, 4, QueueID ),
9962                 rec( 14, 4, JobNumberLong ),
9963         ])
9964         pkt.Reply(8)
9965         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9966                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9967                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9968         # 2222/1785, 23/133
9969         pkt = NCP(0x1785, "Change To Client Rights", 'qms')
9970         pkt.Request(18, [
9971                 rec( 10, 4, QueueID ),
9972                 rec( 14, 4, JobNumberLong ),
9973         ])
9974         pkt.Reply(8)
9975         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9976                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9977                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff18])
9978         # 2222/1786, 23/134
9979         pkt = NCP(0x1786, "Read Queue Server Current Status", 'qms')
9980         pkt.Request(22, [
9981                 rec( 10, 4, QueueID ),
9982                 rec( 14, 4, ServerID, BE ),
9983                 rec( 18, 4, ServerStation ),
9984         ])
9985         pkt.Reply(72, [
9986                 rec( 8, 64, ServerStatusRecord ),
9987         ])
9988         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
9989                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
9990                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
9991         # 2222/1787, 23/135
9992         pkt = NCP(0x1787, "Get Queue Job File Size", 'qms')
9993         pkt.Request(18, [
9994                 rec( 10, 4, QueueID ),
9995                 rec( 14, 4, JobNumberLong ),
9996         ])
9997         pkt.Reply(20, [
9998                 rec( 8, 4, QueueID ),
9999                 rec( 12, 4, JobNumberLong ),
10000                 rec( 16, 4, FileSize, BE ),
10001         ])
10002         pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
10003                              0xd300, 0xd400, 0xd500, 0xd601, 0xd703,
10004                              0xd800, 0xd902, 0xda01, 0xdb02, 0xff00])
10005         # 2222/1788, 23/136
10006         pkt = NCP(0x1788, "Move Queue Job From Src Q to Dst Q", 'qms')
10007         pkt.Request(22, [
10008                 rec( 10, 4, QueueID ),
10009                 rec( 14, 4, JobNumberLong ),
10010                 rec( 18, 4, DstQueueID ),
10011         ])
10012         pkt.Reply(12, [
10013                 rec( 8, 4, JobNumberLong ),
10014         ])
10015         pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
10016         # 2222/1789, 23/137
10017         pkt = NCP(0x1789, "Get Queue Jobs From Form List", 'qms')
10018         pkt.Request(24, [
10019                 rec( 10, 4, QueueID ),
10020                 rec( 14, 4, QueueStartPosition ),
10021                 rec( 18, 4, FormTypeCnt, var="x" ),
10022                 rec( 22, 2, FormType, repeat="x" ),
10023         ])
10024         pkt.Reply(20, [
10025                 rec( 8, 4, TotalQueueJobs ),
10026                 rec( 12, 4, JobCount, var="x" ),
10027                 rec( 16, 4, JobNumberLong, repeat="x" ),
10028         ])
10029         pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
10030         # 2222/178A, 23/138
10031         pkt = NCP(0x178A, "Service Queue Job By Form List", 'qms')
10032         pkt.Request(24, [
10033                 rec( 10, 4, QueueID ),
10034                 rec( 14, 4, QueueStartPosition ),
10035                 rec( 18, 4, FormTypeCnt, var= "x" ),
10036                 rec( 22, 2, FormType, repeat="x" ),
10037         ])
10038         pkt.Reply(94, [
10039            rec( 8, 86, JobStructNew ),
10040         ])
10041         pkt.CompletionCodes([0x0000, 0x7e01, 0xfc06])
10042         # 2222/1796, 23/150
10043         pkt = NCP(0x1796, "Get Current Account Status", 'accounting')
10044         pkt.Request((13,60), [
10045                 rec( 10, 2, ObjectType, BE ),
10046                 rec( 12, (1,48), ObjectName ),
10047         ], info_str=(ObjectName, "Get Current Account Status: %s", ", %s"))
10048         pkt.Reply(264, [
10049                 rec( 8, 4, AccountBalance, BE ),
10050                 rec( 12, 4, CreditLimit, BE ),
10051                 rec( 16, 120, Reserved120 ),
10052                 rec( 136, 4, HolderID, BE ),
10053                 rec( 140, 4, HoldAmount, BE ),
10054                 rec( 144, 4, HolderID, BE ),
10055                 rec( 148, 4, HoldAmount, BE ),
10056                 rec( 152, 4, HolderID, BE ),
10057                 rec( 156, 4, HoldAmount, BE ),
10058                 rec( 160, 4, HolderID, BE ),
10059                 rec( 164, 4, HoldAmount, BE ),
10060                 rec( 168, 4, HolderID, BE ),
10061                 rec( 172, 4, HoldAmount, BE ),
10062                 rec( 176, 4, HolderID, BE ),
10063                 rec( 180, 4, HoldAmount, BE ),
10064                 rec( 184, 4, HolderID, BE ),
10065                 rec( 188, 4, HoldAmount, BE ),
10066                 rec( 192, 4, HolderID, BE ),
10067                 rec( 196, 4, HoldAmount, BE ),
10068                 rec( 200, 4, HolderID, BE ),
10069                 rec( 204, 4, HoldAmount, BE ),
10070                 rec( 208, 4, HolderID, BE ),
10071                 rec( 212, 4, HoldAmount, BE ),
10072                 rec( 216, 4, HolderID, BE ),
10073                 rec( 220, 4, HoldAmount, BE ),
10074                 rec( 224, 4, HolderID, BE ),
10075                 rec( 228, 4, HoldAmount, BE ),
10076                 rec( 232, 4, HolderID, BE ),
10077                 rec( 236, 4, HoldAmount, BE ),
10078                 rec( 240, 4, HolderID, BE ),
10079                 rec( 244, 4, HoldAmount, BE ),
10080                 rec( 248, 4, HolderID, BE ),
10081                 rec( 252, 4, HoldAmount, BE ),
10082                 rec( 256, 4, HolderID, BE ),
10083                 rec( 260, 4, HoldAmount, BE ),
10084         ])
10085         pkt.CompletionCodes([0x0000, 0x9600, 0xc000, 0xc101, 0xc400, 0xe800,
10086                              0xea00, 0xeb00, 0xec00, 0xfc06, 0xfe07, 0xff00])
10087         # 2222/1797, 23/151
10088         pkt = NCP(0x1797, "Submit Account Charge", 'accounting')
10089         pkt.Request((26,327), [
10090                 rec( 10, 2, ServiceType, BE ),
10091                 rec( 12, 4, ChargeAmount, BE ),
10092                 rec( 16, 4, HoldCancelAmount, BE ),
10093                 rec( 20, 2, ObjectType, BE ),
10094                 rec( 22, 2, CommentType, BE ),
10095                 rec( 24, (1,48), ObjectName ),
10096                 rec( -1, (1,255), Comment ),
10097         ], info_str=(ObjectName, "Submit Account Charge: %s", ", %s"))
10098         pkt.Reply(8)
10099         pkt.CompletionCodes([0x0000, 0x0102, 0x8800, 0x9400, 0x9600, 0xa201,
10100                              0xc000, 0xc101, 0xc200, 0xc400, 0xe800, 0xea00,
10101                              0xeb00, 0xec00, 0xfe07, 0xff00])
10102         # 2222/1798, 23/152
10103         pkt = NCP(0x1798, "Submit Account Hold", 'accounting')
10104         pkt.Request((17,64), [
10105                 rec( 10, 4, HoldCancelAmount, BE ),
10106                 rec( 14, 2, ObjectType, BE ),
10107                 rec( 16, (1,48), ObjectName ),
10108         ], info_str=(ObjectName, "Submit Account Hold: %s", ", %s"))
10109         pkt.Reply(8)
10110         pkt.CompletionCodes([0x0000, 0x0102, 0x8800, 0x9400, 0x9600, 0xa201,
10111                              0xc000, 0xc101, 0xc200, 0xc400, 0xe800, 0xea00,
10112                              0xeb00, 0xec00, 0xfe07, 0xff00])
10113         # 2222/1799, 23/153
10114         pkt = NCP(0x1799, "Submit Account Note", 'accounting')
10115         pkt.Request((18,319), [
10116                 rec( 10, 2, ServiceType, BE ),
10117                 rec( 12, 2, ObjectType, BE ),
10118                 rec( 14, 2, CommentType, BE ),
10119                 rec( 16, (1,48), ObjectName ),
10120                 rec( -1, (1,255), Comment ),
10121         ], info_str=(ObjectName, "Submit Account Note: %s", ", %s"))
10122         pkt.Reply(8)
10123         pkt.CompletionCodes([0x0000, 0x0102, 0x9600, 0xc000, 0xc101, 0xc400,
10124                              0xe800, 0xea00, 0xeb00, 0xec00, 0xf000, 0xfc06,
10125                              0xff00])
10126         # 2222/17c8, 23/200
10127         pkt = NCP(0x17c8, "Check Console Privileges", 'stats')
10128         pkt.Request(10)
10129         pkt.Reply(8)
10130         pkt.CompletionCodes([0x0000, 0xc601])
10131         # 2222/17c9, 23/201
10132         pkt = NCP(0x17c9, "Get File Server Description Strings", 'stats')
10133         pkt.Request(10)
10134         pkt.Reply(520, [
10135                 rec( 8, 512, DescriptionStrings ),
10136         ])
10137         pkt.CompletionCodes([0x0000, 0x9600])
10138         # 2222/17CA, 23/202
10139         pkt = NCP(0x17CA, "Set File Server Date And Time", 'stats')
10140         pkt.Request(16, [
10141                 rec( 10, 1, Year ),
10142                 rec( 11, 1, Month ),
10143                 rec( 12, 1, Day ),
10144                 rec( 13, 1, Hour ),
10145                 rec( 14, 1, Minute ),
10146                 rec( 15, 1, Second ),
10147         ])
10148         pkt.Reply(8)
10149         pkt.CompletionCodes([0x0000, 0xc601])
10150         # 2222/17CB, 23/203
10151         pkt = NCP(0x17CB, "Disable File Server Login", 'stats')
10152         pkt.Request(10)
10153         pkt.Reply(8)
10154         pkt.CompletionCodes([0x0000, 0xc601])
10155         # 2222/17CC, 23/204
10156         pkt = NCP(0x17CC, "Enable File Server Login", 'stats')
10157         pkt.Request(10)
10158         pkt.Reply(8)
10159         pkt.CompletionCodes([0x0000, 0xc601])
10160         # 2222/17CD, 23/205
10161         pkt = NCP(0x17CD, "Get File Server Login Status", 'stats')
10162         pkt.Request(10)
10163         pkt.Reply(12, [
10164                 rec( 8, 4, UserLoginAllowed ),
10165         ])
10166         pkt.CompletionCodes([0x0000, 0x9600, 0xfb01])
10167         # 2222/17CF, 23/207
10168         pkt = NCP(0x17CF, "Disable Transaction Tracking", 'stats')
10169         pkt.Request(10)
10170         pkt.Reply(8)
10171         pkt.CompletionCodes([0x0000, 0xc601])
10172         # 2222/17D0, 23/208
10173         pkt = NCP(0x17D0, "Enable Transaction Tracking", 'stats')
10174         pkt.Request(10)
10175         pkt.Reply(8)
10176         pkt.CompletionCodes([0x0000, 0xc601])
10177         # 2222/17D1, 23/209
10178         pkt = NCP(0x17D1, "Send Console Broadcast", 'stats')
10179         pkt.Request((13,267), [
10180                 rec( 10, 1, NumberOfStations, var="x" ),
10181                 rec( 11, 1, StationList, repeat="x" ),
10182                 rec( 12, (1, 255), TargetMessage ),
10183         ], info_str=(TargetMessage, "Send Console Broadcast: %s", ", %s"))
10184         pkt.Reply(8)
10185         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10186         # 2222/17D2, 23/210
10187         pkt = NCP(0x17D2, "Clear Connection Number", 'stats')
10188         pkt.Request(11, [
10189                 rec( 10, 1, ConnectionNumber ),
10190         ],info_str=(ConnectionNumber, "Clear Connection Number %d", ", %d"))
10191         pkt.Reply(8)
10192         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10193         # 2222/17D3, 23/211
10194         pkt = NCP(0x17D3, "Down File Server", 'stats')
10195         pkt.Request(11, [
10196                 rec( 10, 1, ForceFlag ),
10197         ])
10198         pkt.Reply(8)
10199         pkt.CompletionCodes([0x0000, 0xc601, 0xff00])
10200         # 2222/17D4, 23/212
10201         pkt = NCP(0x17D4, "Get File System Statistics", 'stats')
10202         pkt.Request(10)
10203         pkt.Reply(50, [
10204                 rec( 8, 4, SystemIntervalMarker, BE ),
10205                 rec( 12, 2, ConfiguredMaxOpenFiles ),
10206                 rec( 14, 2, ActualMaxOpenFiles ),
10207                 rec( 16, 2, CurrentOpenFiles ),
10208                 rec( 18, 4, TotalFilesOpened ),
10209                 rec( 22, 4, TotalReadRequests ),
10210                 rec( 26, 4, TotalWriteRequests ),
10211                 rec( 30, 2, CurrentChangedFATs ),
10212                 rec( 32, 4, TotalChangedFATs ),
10213                 rec( 36, 2, FATWriteErrors ),
10214                 rec( 38, 2, FatalFATWriteErrors ),
10215                 rec( 40, 2, FATScanErrors ),
10216                 rec( 42, 2, ActualMaxIndexedFiles ),
10217                 rec( 44, 2, ActiveIndexedFiles ),
10218                 rec( 46, 2, AttachedIndexedFiles ),
10219                 rec( 48, 2, AvailableIndexedFiles ),
10220         ])
10221         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10222         # 2222/17D5, 23/213
10223         pkt = NCP(0x17D5, "Get Transaction Tracking Statistics", 'stats')
10224         pkt.Request((13,267), [
10225                 rec( 10, 2, LastRecordSeen ),
10226                 rec( 12, (1,255), SemaphoreName ),
10227         ])
10228         pkt.Reply(53, [
10229                 rec( 8, 4, SystemIntervalMarker, BE ),
10230                 rec( 12, 1, TransactionTrackingSupported ),
10231                 rec( 13, 1, TransactionTrackingEnabled ),
10232                 rec( 14, 2, TransactionVolumeNumber ),
10233                 rec( 16, 2, ConfiguredMaxSimultaneousTransactions ),
10234                 rec( 18, 2, ActualMaxSimultaneousTransactions ),
10235                 rec( 20, 2, CurrentTransactionCount ),
10236                 rec( 22, 4, TotalTransactionsPerformed ),
10237                 rec( 26, 4, TotalWriteTransactionsPerformed ),
10238                 rec( 30, 4, TotalTransactionsBackedOut ),
10239                 rec( 34, 2, TotalUnfilledBackoutRequests ),
10240                 rec( 36, 2, TransactionDiskSpace ),
10241                 rec( 38, 4, TransactionFATAllocations ),
10242                 rec( 42, 4, TransactionFileSizeChanges ),
10243                 rec( 46, 4, TransactionFilesTruncated ),
10244                 rec( 50, 1, NumberOfEntries, var="x" ),
10245                 rec( 51, 2, ConnTaskStruct, repeat="x" ),
10246         ])
10247         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10248         # 2222/17D6, 23/214
10249         pkt = NCP(0x17D6, "Read Disk Cache Statistics", 'stats')
10250         pkt.Request(10)
10251         pkt.Reply(86, [
10252                 rec( 8, 4, SystemIntervalMarker, BE ),
10253                 rec( 12, 2, CacheBufferCount ),
10254                 rec( 14, 2, CacheBufferSize ),
10255                 rec( 16, 2, DirtyCacheBuffers ),
10256                 rec( 18, 4, CacheReadRequests ),
10257                 rec( 22, 4, CacheWriteRequests ),
10258                 rec( 26, 4, CacheHits ),
10259                 rec( 30, 4, CacheMisses ),
10260                 rec( 34, 4, PhysicalReadRequests ),
10261                 rec( 38, 4, PhysicalWriteRequests ),
10262                 rec( 42, 2, PhysicalReadErrors ),
10263                 rec( 44, 2, PhysicalWriteErrors ),
10264                 rec( 46, 4, CacheGetRequests ),
10265                 rec( 50, 4, CacheFullWriteRequests ),
10266                 rec( 54, 4, CachePartialWriteRequests ),
10267                 rec( 58, 4, BackgroundDirtyWrites ),
10268                 rec( 62, 4, BackgroundAgedWrites ),
10269                 rec( 66, 4, TotalCacheWrites ),
10270                 rec( 70, 4, CacheAllocations ),
10271                 rec( 74, 2, ThrashingCount ),
10272                 rec( 76, 2, LRUBlockWasDirty ),
10273                 rec( 78, 2, ReadBeyondWrite ),
10274                 rec( 80, 2, FragmentWriteOccurred ),
10275                 rec( 82, 2, CacheHitOnUnavailableBlock ),
10276                 rec( 84, 2, CacheBlockScrapped ),
10277         ])
10278         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10279         # 2222/17D7, 23/215
10280         pkt = NCP(0x17D7, "Get Drive Mapping Table", 'stats')
10281         pkt.Request(10)
10282         pkt.Reply(184, [
10283                 rec( 8, 4, SystemIntervalMarker, BE ),
10284                 rec( 12, 1, SFTSupportLevel ),
10285                 rec( 13, 1, LogicalDriveCount ),
10286                 rec( 14, 1, PhysicalDriveCount ),
10287                 rec( 15, 1, DiskChannelTable ),
10288                 rec( 16, 4, Reserved4 ),
10289                 rec( 20, 2, PendingIOCommands, BE ),
10290                 rec( 22, 32, DriveMappingTable ),
10291                 rec( 54, 32, DriveMirrorTable ),
10292                 rec( 86, 32, DeadMirrorTable ),
10293                 rec( 118, 1, ReMirrorDriveNumber ),
10294                 rec( 119, 1, Filler ),
10295                 rec( 120, 4, ReMirrorCurrentOffset, BE ),
10296                 rec( 124, 60, SFTErrorTable ),
10297         ])
10298         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10299         # 2222/17D8, 23/216
10300         pkt = NCP(0x17D8, "Read Physical Disk Statistics", 'stats')
10301         pkt.Request(11, [
10302                 rec( 10, 1, PhysicalDiskNumber ),
10303         ])
10304         pkt.Reply(101, [
10305                 rec( 8, 4, SystemIntervalMarker, BE ),
10306                 rec( 12, 1, PhysicalDiskChannel ),
10307                 rec( 13, 1, DriveRemovableFlag ),
10308                 rec( 14, 1, PhysicalDriveType ),
10309                 rec( 15, 1, ControllerDriveNumber ),
10310                 rec( 16, 1, ControllerNumber ),
10311                 rec( 17, 1, ControllerType ),
10312                 rec( 18, 4, DriveSize ),
10313                 rec( 22, 2, DriveCylinders ),
10314                 rec( 24, 1, DriveHeads ),
10315                 rec( 25, 1, SectorsPerTrack ),
10316                 rec( 26, 64, DriveDefinitionString ),
10317                 rec( 90, 2, IOErrorCount ),
10318                 rec( 92, 4, HotFixTableStart ),
10319                 rec( 96, 2, HotFixTableSize ),
10320                 rec( 98, 2, HotFixBlocksAvailable ),
10321                 rec( 100, 1, HotFixDisabled ),
10322         ])
10323         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10324         # 2222/17D9, 23/217
10325         pkt = NCP(0x17D9, "Get Disk Channel Statistics", 'stats')
10326         pkt.Request(11, [
10327                 rec( 10, 1, DiskChannelNumber ),
10328         ])
10329         pkt.Reply(192, [
10330                 rec( 8, 4, SystemIntervalMarker, BE ),
10331                 rec( 12, 2, ChannelState, BE ),
10332                 rec( 14, 2, ChannelSynchronizationState, BE ),
10333                 rec( 16, 1, SoftwareDriverType ),
10334                 rec( 17, 1, SoftwareMajorVersionNumber ),
10335                 rec( 18, 1, SoftwareMinorVersionNumber ),
10336                 rec( 19, 65, SoftwareDescription ),
10337                 rec( 84, 8, IOAddressesUsed ),
10338                 rec( 92, 10, SharedMemoryAddresses ),
10339                 rec( 102, 4, InterruptNumbersUsed ),
10340                 rec( 106, 4, DMAChannelsUsed ),
10341                 rec( 110, 1, FlagBits ),
10342                 rec( 111, 1, Reserved ),
10343                 rec( 112, 80, ConfigurationDescription ),
10344         ])
10345         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10346         # 2222/17DB, 23/219
10347         pkt = NCP(0x17DB, "Get Connection's Open Files", 'file')
10348         pkt.Request(14, [
10349                 rec( 10, 2, ConnectionNumber ),
10350                 rec( 12, 2, LastRecordSeen, BE ),
10351         ])
10352         pkt.Reply(32, [
10353                 rec( 8, 2, NextRequestRecord ),
10354                 rec( 10, 1, NumberOfRecords, var="x" ),
10355                 rec( 11, 21, ConnStruct, repeat="x" ),
10356         ])
10357         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10358         # 2222/17DC, 23/220
10359         pkt = NCP(0x17DC, "Get Connection Using A File", 'file')
10360         pkt.Request((14,268), [
10361                 rec( 10, 2, LastRecordSeen, BE ),
10362                 rec( 12, 1, DirHandle ),
10363                 rec( 13, (1,255), Path ),
10364         ], info_str=(Path, "Get Connection Using File: %s", ", %s"))
10365         pkt.Reply(30, [
10366                 rec( 8, 2, UseCount, BE ),
10367                 rec( 10, 2, OpenCount, BE ),
10368                 rec( 12, 2, OpenForReadCount, BE ),
10369                 rec( 14, 2, OpenForWriteCount, BE ),
10370                 rec( 16, 2, DenyReadCount, BE ),
10371                 rec( 18, 2, DenyWriteCount, BE ),
10372                 rec( 20, 2, NextRequestRecord, BE ),
10373                 rec( 22, 1, Locked ),
10374                 rec( 23, 1, NumberOfRecords, var="x" ),
10375                 rec( 24, 6, ConnFileStruct, repeat="x" ),
10376         ])
10377         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10378         # 2222/17DD, 23/221
10379         pkt = NCP(0x17DD, "Get Physical Record Locks By Connection And File", 'file')
10380         pkt.Request(31, [
10381                 rec( 10, 2, TargetConnectionNumber ),
10382                 rec( 12, 2, LastRecordSeen, BE ),
10383                 rec( 14, 1, VolumeNumber ),
10384                 rec( 15, 2, DirectoryID ),
10385                 rec( 17, 14, FileName14 ),
10386         ], info_str=(FileName14, "Get Physical Record Locks by Connection and File: %s", ", %s"))
10387         pkt.Reply(22, [
10388                 rec( 8, 2, NextRequestRecord ),
10389                 rec( 10, 1, NumberOfLocks, var="x" ),
10390                 rec( 11, 1, Reserved ),
10391                 rec( 12, 10, LockStruct, repeat="x" ),
10392         ])
10393         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10394         # 2222/17DE, 23/222
10395         pkt = NCP(0x17DE, "Get Physical Record Locks By File", 'file')
10396         pkt.Request((14,268), [
10397                 rec( 10, 2, TargetConnectionNumber ),
10398                 rec( 12, 1, DirHandle ),
10399                 rec( 13, (1,255), Path ),
10400         ], info_str=(Path, "Get Physical Record Locks by File: %s", ", %s"))
10401         pkt.Reply(28, [
10402                 rec( 8, 2, NextRequestRecord ),
10403                 rec( 10, 1, NumberOfLocks, var="x" ),
10404                 rec( 11, 1, Reserved ),
10405                 rec( 12, 16, PhyLockStruct, repeat="x" ),
10406         ])
10407         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10408         # 2222/17DF, 23/223
10409         pkt = NCP(0x17DF, "Get Logical Records By Connection", 'file')
10410         pkt.Request(14, [
10411                 rec( 10, 2, TargetConnectionNumber ),
10412                 rec( 12, 2, LastRecordSeen, BE ),
10413         ])
10414         pkt.Reply((14,268), [
10415                 rec( 8, 2, NextRequestRecord ),
10416                 rec( 10, 1, NumberOfRecords, var="x" ),
10417                 rec( 11, (3, 257), LogLockStruct, repeat="x" ),
10418         ])
10419         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10420         # 2222/17E0, 23/224
10421         pkt = NCP(0x17E0, "Get Logical Record Information", 'file')
10422         pkt.Request((13,267), [
10423                 rec( 10, 2, LastRecordSeen ),
10424                 rec( 12, (1,255), LogicalRecordName ),
10425         ], info_str=(LogicalRecordName, "Get Logical Record Information: %s", ", %s"))
10426         pkt.Reply(20, [
10427                 rec( 8, 2, UseCount, BE ),
10428                 rec( 10, 2, ShareableLockCount, BE ),
10429                 rec( 12, 2, NextRequestRecord ),
10430                 rec( 14, 1, Locked ),
10431                 rec( 15, 1, NumberOfRecords, var="x" ),
10432                 rec( 16, 4, LogRecStruct, repeat="x" ),
10433         ])
10434         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10435         # 2222/17E1, 23/225
10436         pkt = NCP(0x17E1, "Get Connection's Semaphores", 'file')
10437         pkt.Request(14, [
10438                 rec( 10, 2, ConnectionNumber ),
10439                 rec( 12, 2, LastRecordSeen ),
10440         ])
10441         pkt.Reply((18,272), [
10442                 rec( 8, 2, NextRequestRecord ),
10443                 rec( 10, 2, NumberOfSemaphores, var="x" ),
10444                 rec( 12, (6,260), SemaStruct, repeat="x" ),
10445         ])
10446         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10447         # 2222/17E2, 23/226
10448         pkt = NCP(0x17E2, "Get Semaphore Information", 'file')
10449         pkt.Request((13,267), [
10450                 rec( 10, 2, LastRecordSeen ),
10451                 rec( 12, (1,255), SemaphoreName ),
10452         ], info_str=(SemaphoreName, "Get Semaphore Information: %s", ", %s"))
10453         pkt.Reply(17, [
10454                 rec( 8, 2, NextRequestRecord, BE ),
10455                 rec( 10, 2, OpenCount, BE ),
10456                 rec( 12, 1, SemaphoreValue ),
10457                 rec( 13, 1, NumberOfRecords, var="x" ),
10458                 rec( 14, 3, SemaInfoStruct, repeat="x" ),
10459         ])
10460         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10461         # 2222/17E3, 23/227
10462         pkt = NCP(0x17E3, "Get LAN Driver Configuration Information", 'stats')
10463         pkt.Request(11, [
10464                 rec( 10, 1, LANDriverNumber ),
10465         ])
10466         pkt.Reply(180, [
10467                 rec( 8, 4, NetworkAddress, BE ),
10468                 rec( 12, 6, HostAddress ),
10469                 rec( 18, 1, BoardInstalled ),
10470                 rec( 19, 1, OptionNumber ),
10471                 rec( 20, 160, ConfigurationText ),
10472         ])
10473         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10474         # 2222/17E5, 23/229
10475         pkt = NCP(0x17E5, "Get Connection Usage Statistics", 'stats')
10476         pkt.Request(12, [
10477                 rec( 10, 2, ConnectionNumber ),
10478         ])
10479         pkt.Reply(26, [
10480                 rec( 8, 2, NextRequestRecord ),
10481                 rec( 10, 6, BytesRead ),
10482                 rec( 16, 6, BytesWritten ),
10483                 rec( 22, 4, TotalRequestPackets ),
10484          ])
10485         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10486         # 2222/17E6, 23/230
10487         pkt = NCP(0x17E6, "Get Object's Remaining Disk Space", 'stats')
10488         pkt.Request(14, [
10489                 rec( 10, 4, ObjectID, BE ),
10490         ])
10491         pkt.Reply(21, [
10492                 rec( 8, 4, SystemIntervalMarker, BE ),
10493                 rec( 12, 4, ObjectID ),
10494                 rec( 16, 4, UnusedDiskBlocks, BE ),
10495                 rec( 20, 1, RestrictionsEnforced ),
10496          ])
10497         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10498         # 2222/17E7, 23/231
10499         pkt = NCP(0x17E7, "Get File Server LAN I/O Statistics", 'stats')
10500         pkt.Request(10)
10501         pkt.Reply(74, [
10502                 rec( 8, 4, SystemIntervalMarker, BE ),
10503                 rec( 12, 2, ConfiguredMaxRoutingBuffers ),
10504                 rec( 14, 2, ActualMaxUsedRoutingBuffers ),
10505                 rec( 16, 2, CurrentlyUsedRoutingBuffers ),
10506                 rec( 18, 4, TotalFileServicePackets ),
10507                 rec( 22, 2, TurboUsedForFileService ),
10508                 rec( 24, 2, PacketsFromInvalidConnection ),
10509                 rec( 26, 2, BadLogicalConnectionCount ),
10510                 rec( 28, 2, PacketsReceivedDuringProcessing ),
10511                 rec( 30, 2, RequestsReprocessed ),
10512                 rec( 32, 2, PacketsWithBadSequenceNumber ),
10513                 rec( 34, 2, DuplicateRepliesSent ),
10514                 rec( 36, 2, PositiveAcknowledgesSent ),
10515                 rec( 38, 2, PacketsWithBadRequestType ),
10516                 rec( 40, 2, AttachDuringProcessing ),
10517                 rec( 42, 2, AttachWhileProcessingAttach ),
10518                 rec( 44, 2, ForgedDetachedRequests ),
10519                 rec( 46, 2, DetachForBadConnectionNumber ),
10520                 rec( 48, 2, DetachDuringProcessing ),
10521                 rec( 50, 2, RepliesCancelled ),
10522                 rec( 52, 2, PacketsDiscardedByHopCount ),
10523                 rec( 54, 2, PacketsDiscardedUnknownNet ),
10524                 rec( 56, 2, IncomingPacketDiscardedNoDGroup ),
10525                 rec( 58, 2, OutgoingPacketDiscardedNoTurboBuffer ),
10526                 rec( 60, 2, IPXNotMyNetwork ),
10527                 rec( 62, 4, NetBIOSBroadcastWasPropogated ),
10528                 rec( 66, 4, TotalOtherPackets ),
10529                 rec( 70, 4, TotalRoutedPackets ),
10530          ])
10531         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10532         # 2222/17E8, 23/232
10533         pkt = NCP(0x17E8, "Get File Server Misc Information", 'stats')
10534         pkt.Request(10)
10535         pkt.Reply(40, [
10536                 rec( 8, 4, SystemIntervalMarker, BE ),
10537                 rec( 12, 1, ProcessorType ),
10538                 rec( 13, 1, Reserved ),
10539                 rec( 14, 1, NumberOfServiceProcesses ),
10540                 rec( 15, 1, ServerUtilizationPercentage ),
10541                 rec( 16, 2, ConfiguredMaxBinderyObjects ),
10542                 rec( 18, 2, ActualMaxBinderyObjects ),
10543                 rec( 20, 2, CurrentUsedBinderyObjects ),
10544                 rec( 22, 2, TotalServerMemory ),
10545                 rec( 24, 2, WastedServerMemory ),
10546                 rec( 26, 2, NumberOfDynamicMemoryAreas, var="x" ),
10547                 rec( 28, 12, DynMemStruct, repeat="x" ),
10548          ])
10549         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10550         # 2222/17E9, 23/233
10551         pkt = NCP(0x17E9, "Get Volume Information", 'stats')
10552         pkt.Request(11, [
10553                 rec( 10, 1, VolumeNumber ),
10554         ],info_str=(VolumeNumber, "Get Information on Volume %d", ", %d"))
10555         pkt.Reply(48, [
10556                 rec( 8, 4, SystemIntervalMarker, BE ),
10557                 rec( 12, 1, VolumeNumber ),
10558                 rec( 13, 1, LogicalDriveNumber ),
10559                 rec( 14, 2, BlockSize ),
10560                 rec( 16, 2, StartingBlock ),
10561                 rec( 18, 2, TotalBlocks ),
10562                 rec( 20, 2, FreeBlocks ),
10563                 rec( 22, 2, TotalDirectoryEntries ),
10564                 rec( 24, 2, FreeDirectoryEntries ),
10565                 rec( 26, 2, ActualMaxUsedDirectoryEntries ),
10566                 rec( 28, 1, VolumeHashedFlag ),
10567                 rec( 29, 1, VolumeCachedFlag ),
10568                 rec( 30, 1, VolumeRemovableFlag ),
10569                 rec( 31, 1, VolumeMountedFlag ),
10570                 rec( 32, 16, VolumeName ),
10571          ])
10572         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10573         # 2222/17EA, 23/234
10574         pkt = NCP(0x17EA, "Get Connection's Task Information", 'stats')
10575         pkt.Request(12, [
10576                 rec( 10, 2, ConnectionNumber ),
10577         ])
10578         pkt.Reply(18, [
10579                 rec( 8, 2, NextRequestRecord ),
10580                 rec( 10, 4, NumberOfAttributes, var="x" ),
10581                 rec( 14, 4, Attributes, repeat="x" ),
10582          ])
10583         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10584         # 2222/17EB, 23/235
10585         pkt = NCP(0x17EB, "Get Connection's Open Files", 'file')
10586         pkt.Request(14, [
10587                 rec( 10, 2, ConnectionNumber ),
10588                 rec( 12, 2, LastRecordSeen ),
10589         ])
10590         pkt.Reply((29,283), [
10591                 rec( 8, 2, NextRequestRecord ),
10592                 rec( 10, 2, NumberOfRecords, var="x" ),
10593                 rec( 12, (17, 271), OpnFilesStruct, repeat="x" ),
10594         ])
10595         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10596         # 2222/17EC, 23/236
10597         pkt = NCP(0x17EC, "Get Connection Using A File", 'file')
10598         pkt.Request(18, [
10599                 rec( 10, 1, DataStreamNumber ),
10600                 rec( 11, 1, VolumeNumber ),
10601                 rec( 12, 4, DirectoryBase, LE ),
10602                 rec( 16, 2, LastRecordSeen ),
10603         ])
10604         pkt.Reply(33, [
10605                 rec( 8, 2, NextRequestRecord ),
10606                 rec( 10, 2, UseCount ),
10607                 rec( 12, 2, OpenCount ),
10608                 rec( 14, 2, OpenForReadCount ),
10609                 rec( 16, 2, OpenForWriteCount ),
10610                 rec( 18, 2, DenyReadCount ),
10611                 rec( 20, 2, DenyWriteCount ),
10612                 rec( 22, 1, Locked ),
10613                 rec( 23, 1, ForkCount ),
10614                 rec( 24, 2, NumberOfRecords, var="x" ),
10615                 rec( 26, 7, ConnStruct, repeat="x" ),
10616         ])
10617         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xff00])
10618         # 2222/17ED, 23/237
10619         pkt = NCP(0x17ED, "Get Physical Record Locks By Connection And File", 'file')
10620         pkt.Request(20, [
10621                 rec( 10, 2, TargetConnectionNumber ),
10622                 rec( 12, 1, DataStreamNumber ),
10623                 rec( 13, 1, VolumeNumber ),
10624                 rec( 14, 4, DirectoryBase, LE ),
10625                 rec( 18, 2, LastRecordSeen ),
10626         ])
10627         pkt.Reply(23, [
10628                 rec( 8, 2, NextRequestRecord ),
10629                 rec( 10, 2, NumberOfLocks, var="x" ),
10630                 rec( 12, 11, LockStruct, repeat="x" ),
10631         ])
10632         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10633         # 2222/17EE, 23/238
10634         pkt = NCP(0x17EE, "Get Physical Record Locks By File", 'file')
10635         pkt.Request(18, [
10636                 rec( 10, 1, DataStreamNumber ),
10637                 rec( 11, 1, VolumeNumber ),
10638                 rec( 12, 4, DirectoryBase ),
10639                 rec( 16, 2, LastRecordSeen ),
10640         ])
10641         pkt.Reply(30, [
10642                 rec( 8, 2, NextRequestRecord ),
10643                 rec( 10, 2, NumberOfLocks, var="x" ),
10644                 rec( 12, 18, PhyLockStruct, repeat="x" ),
10645         ])
10646         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10647         # 2222/17EF, 23/239
10648         pkt = NCP(0x17EF, "Get Logical Records By Connection", 'file')
10649         pkt.Request(14, [
10650                 rec( 10, 2, TargetConnectionNumber ),
10651                 rec( 12, 2, LastRecordSeen ),
10652         ])
10653         pkt.Reply((16,270), [
10654                 rec( 8, 2, NextRequestRecord ),
10655                 rec( 10, 2, NumberOfRecords, var="x" ),
10656                 rec( 12, (4, 258), LogLockStruct, repeat="x" ),
10657         ])
10658         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10659         # 2222/17F0, 23/240
10660         pkt = NCP(0x17F0, "Get Logical Record Information (old)", 'file')
10661         pkt.Request((13,267), [
10662                 rec( 10, 2, LastRecordSeen ),
10663                 rec( 12, (1,255), LogicalRecordName ),
10664         ])
10665         pkt.Reply(22, [
10666                 rec( 8, 2, ShareableLockCount ),
10667                 rec( 10, 2, UseCount ),
10668                 rec( 12, 1, Locked ),
10669                 rec( 13, 2, NextRequestRecord ),
10670                 rec( 15, 2, NumberOfRecords, var="x" ),
10671                 rec( 17, 5, LogRecStruct, repeat="x" ),
10672         ])
10673         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10674         # 2222/17F1, 23/241
10675         pkt = NCP(0x17F1, "Get Connection's Semaphores", 'file')
10676         pkt.Request(14, [
10677                 rec( 10, 2, ConnectionNumber ),
10678                 rec( 12, 2, LastRecordSeen ),
10679         ])
10680         pkt.Reply((19,273), [
10681                 rec( 8, 2, NextRequestRecord ),
10682                 rec( 10, 2, NumberOfSemaphores, var="x" ),
10683                 rec( 12, (7, 261), SemaStruct, repeat="x" ),
10684         ])
10685         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10686         # 2222/17F2, 23/242
10687         pkt = NCP(0x17F2, "Get Semaphore Information", 'file')
10688         pkt.Request((13,267), [
10689                 rec( 10, 2, LastRecordSeen ),
10690                 rec( 12, (1,255), SemaphoreName ),
10691         ], info_str=(SemaphoreName, "Get Semaphore Information: %s", ", %s"))
10692         pkt.Reply(20, [
10693                 rec( 8, 2, NextRequestRecord ),
10694                 rec( 10, 2, OpenCount ),
10695                 rec( 12, 2, SemaphoreValue ),
10696                 rec( 14, 2, NumberOfRecords, var="x" ),
10697                 rec( 16, 4, SemaInfoStruct, repeat="x" ),
10698         ])
10699         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10700         # 2222/17F3, 23/243
10701         pkt = NCP(0x17F3, "Map Directory Number to Path", 'file')
10702         pkt.Request(16, [
10703                 rec( 10, 1, VolumeNumber ),
10704                 rec( 11, 4, DirectoryNumber ),
10705                 rec( 15, 1, NameSpace ),
10706         ])
10707         pkt.Reply((9,263), [
10708                 rec( 8, (1,255), Path ),
10709         ])
10710         pkt.CompletionCodes([0x0000, 0x9600, 0x9c00, 0xc601, 0xfd00, 0xff00])
10711         # 2222/17F4, 23/244
10712         pkt = NCP(0x17F4, "Convert Path to Dir Entry", 'file')
10713         pkt.Request((12,266), [
10714                 rec( 10, 1, DirHandle ),
10715                 rec( 11, (1,255), Path ),
10716         ], info_str=(Path, "Convert Path to Directory Entry: %s", ", %s"))
10717         pkt.Reply(13, [
10718                 rec( 8, 1, VolumeNumber ),
10719                 rec( 9, 4, DirectoryNumber ),
10720         ])
10721         pkt.CompletionCodes([0x0000, 0x9600, 0xc601, 0xfd00, 0xff00])
10722         # 2222/17FD, 23/253
10723         pkt = NCP(0x17FD, "Send Console Broadcast", 'stats')
10724         pkt.Request((16, 270), [
10725                 rec( 10, 1, NumberOfStations, var="x" ),
10726                 rec( 11, 4, StationList, repeat="x" ),
10727                 rec( 15, (1, 255), TargetMessage ),
10728         ], info_str=(TargetMessage, "Send Console Broadcast: %s", ", %s"))
10729         pkt.Reply(8)
10730         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10731         # 2222/17FE, 23/254
10732         pkt = NCP(0x17FE, "Clear Connection Number", 'stats')
10733         pkt.Request(14, [
10734                 rec( 10, 4, ConnectionNumber ),
10735         ])
10736         pkt.Reply(8)
10737         pkt.CompletionCodes([0x0000, 0xc601, 0xfd00])
10738         # 2222/18, 24
10739         pkt = NCP(0x18, "End of Job", 'connection')
10740         pkt.Request(7)
10741         pkt.Reply(8)
10742         pkt.CompletionCodes([0x0000])
10743         # 2222/19, 25
10744         pkt = NCP(0x19, "Logout", 'connection')
10745         pkt.Request(7)
10746         pkt.Reply(8)
10747         pkt.CompletionCodes([0x0000])
10748         # 2222/1A, 26
10749         pkt = NCP(0x1A, "Log Physical Record", 'file')
10750         pkt.Request(24, [
10751                 rec( 7, 1, LockFlag ),
10752                 rec( 8, 6, FileHandle ),
10753                 rec( 14, 4, LockAreasStartOffset, BE ),
10754                 rec( 18, 4, LockAreaLen, BE ),
10755                 rec( 22, 2, LockTimeout ),
10756         ])
10757         pkt.Reply(8)
10758         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
10759         # 2222/1B, 27
10760         pkt = NCP(0x1B, "Lock Physical Record Set", 'file')
10761         pkt.Request(10, [
10762                 rec( 7, 1, LockFlag ),
10763                 rec( 8, 2, LockTimeout ),
10764         ])
10765         pkt.Reply(8)
10766         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
10767         # 2222/1C, 28
10768         pkt = NCP(0x1C, "Release Physical Record", 'file')
10769         pkt.Request(22, [
10770                 rec( 7, 1, Reserved ),
10771                 rec( 8, 6, FileHandle ),
10772                 rec( 14, 4, LockAreasStartOffset ),
10773                 rec( 18, 4, LockAreaLen ),
10774         ])
10775         pkt.Reply(8)
10776         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10777         # 2222/1D, 29
10778         pkt = NCP(0x1D, "Release Physical Record Set", 'file')
10779         pkt.Request(8, [
10780                 rec( 7, 1, LockFlag ),
10781         ])
10782         pkt.Reply(8)
10783         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10784         # 2222/1E, 30   #Tested and fixed 6-14-02 GM
10785         pkt = NCP(0x1E, "Clear Physical Record", 'file')
10786         pkt.Request(22, [
10787                 rec( 7, 1, Reserved ),
10788                 rec( 8, 6, FileHandle ),
10789                 rec( 14, 4, LockAreasStartOffset, BE ),
10790                 rec( 18, 4, LockAreaLen, BE ),
10791         ])
10792         pkt.Reply(8)
10793         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10794         # 2222/1F, 31
10795         pkt = NCP(0x1F, "Clear Physical Record Set", 'file')
10796         pkt.Request(8, [
10797                 rec( 7, 1, LockFlag ),
10798         ])
10799         pkt.Reply(8)
10800         pkt.CompletionCodes([0x0000, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff03])
10801         # 2222/2000, 32/00
10802         pkt = NCP(0x2000, "Open Semaphore", 'file', has_length=0)
10803         pkt.Request(10, [
10804                 rec( 8, 1, InitialSemaphoreValue ),
10805                 rec( 9, 1, SemaphoreNameLen ),
10806         ])
10807         pkt.Reply(13, [
10808                   rec( 8, 4, SemaphoreHandle, BE ),
10809                   rec( 12, 1, SemaphoreOpenCount ),
10810         ])
10811         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10812         # 2222/2001, 32/01
10813         pkt = NCP(0x2001, "Examine Semaphore", 'file', has_length=0)
10814         pkt.Request(12, [
10815                 rec( 8, 4, SemaphoreHandle, BE ),
10816         ])
10817         pkt.Reply(10, [
10818                   rec( 8, 1, SemaphoreValue ),
10819                   rec( 9, 1, SemaphoreOpenCount ),
10820         ])
10821         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10822         # 2222/2002, 32/02
10823         pkt = NCP(0x2002, "Wait On Semaphore", 'file', has_length=0)
10824         pkt.Request(14, [
10825                 rec( 8, 4, SemaphoreHandle, BE ),
10826                 rec( 12, 2, SemaphoreTimeOut, BE ),
10827         ])
10828         pkt.Reply(8)
10829         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10830         # 2222/2003, 32/03
10831         pkt = NCP(0x2003, "Signal Semaphore", 'file', has_length=0)
10832         pkt.Request(12, [
10833                 rec( 8, 4, SemaphoreHandle, BE ),
10834         ])
10835         pkt.Reply(8)
10836         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10837         # 2222/2004, 32/04
10838         pkt = NCP(0x2004, "Close Semaphore", 'file', has_length=0)
10839         pkt.Request(12, [
10840                 rec( 8, 4, SemaphoreHandle, BE ),
10841         ])
10842         pkt.Reply(8)
10843         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
10844         # 2222/21, 33
10845         pkt = NCP(0x21, "Negotiate Buffer Size", 'connection')
10846         pkt.Request(9, [
10847                 rec( 7, 2, BufferSize, BE ),
10848         ])
10849         pkt.Reply(10, [
10850                 rec( 8, 2, BufferSize, BE ),
10851         ])
10852         pkt.CompletionCodes([0x0000])
10853         # 2222/2200, 34/00
10854         pkt = NCP(0x2200, "TTS Is Available", 'tts', has_length=0)
10855         pkt.Request(8)
10856         pkt.Reply(8)
10857         pkt.CompletionCodes([0x0001, 0xfd03, 0xff12])
10858         # 2222/2201, 34/01
10859         pkt = NCP(0x2201, "TTS Begin Transaction", 'tts', has_length=0)
10860         pkt.Request(8)
10861         pkt.Reply(8)
10862         pkt.CompletionCodes([0x0000])
10863         # 2222/2202, 34/02
10864         pkt = NCP(0x2202, "TTS End Transaction", 'tts', has_length=0)
10865         pkt.Request(8)
10866         pkt.Reply(12, [
10867                   rec( 8, 4, TransactionNumber, BE ),
10868         ])
10869         pkt.CompletionCodes([0x0000, 0xff01])
10870         # 2222/2203, 34/03
10871         pkt = NCP(0x2203, "TTS Abort Transaction", 'tts', has_length=0)
10872         pkt.Request(8)
10873         pkt.Reply(8)
10874         pkt.CompletionCodes([0x0000, 0xfd03, 0xfe0b, 0xff01])
10875         # 2222/2204, 34/04
10876         pkt = NCP(0x2204, "TTS Transaction Status", 'tts', has_length=0)
10877         pkt.Request(12, [
10878                   rec( 8, 4, TransactionNumber, BE ),
10879         ])
10880         pkt.Reply(8)
10881         pkt.CompletionCodes([0x0000])
10882         # 2222/2205, 34/05
10883         pkt = NCP(0x2205, "TTS Get Application Thresholds", 'tts', has_length=0)
10884         pkt.Request(8)
10885         pkt.Reply(10, [
10886                   rec( 8, 1, LogicalLockThreshold ),
10887                   rec( 9, 1, PhysicalLockThreshold ),
10888         ])
10889         pkt.CompletionCodes([0x0000])
10890         # 2222/2206, 34/06
10891         pkt = NCP(0x2206, "TTS Set Application Thresholds", 'tts', has_length=0)
10892         pkt.Request(10, [
10893                   rec( 8, 1, LogicalLockThreshold ),
10894                   rec( 9, 1, PhysicalLockThreshold ),
10895         ])
10896         pkt.Reply(8)
10897         pkt.CompletionCodes([0x0000, 0x9600])
10898         # 2222/2207, 34/07
10899         pkt = NCP(0x2207, "TTS Get Workstation Thresholds", 'tts', has_length=0)
10900         pkt.Request(10, [
10901                   rec( 8, 1, LogicalLockThreshold ),
10902                   rec( 9, 1, PhysicalLockThreshold ),
10903         ])
10904         pkt.Reply(8)
10905         pkt.CompletionCodes([0x0000])
10906         # 2222/2208, 34/08
10907         pkt = NCP(0x2208, "TTS Set Workstation Thresholds", 'tts', has_length=0)
10908         pkt.Request(10, [
10909                   rec( 8, 1, LogicalLockThreshold ),
10910                   rec( 9, 1, PhysicalLockThreshold ),
10911         ])
10912         pkt.Reply(8)
10913         pkt.CompletionCodes([0x0000])
10914         # 2222/2209, 34/09
10915         pkt = NCP(0x2209, "TTS Get Transaction Bits", 'tts', has_length=0)
10916         pkt.Request(8)
10917         pkt.Reply(9, [
10918                 rec( 8, 1, ControlFlags ),
10919         ])
10920         pkt.CompletionCodes([0x0000])
10921         # 2222/220A, 34/10
10922         pkt = NCP(0x220A, "TTS Set Transaction Bits", 'tts', has_length=0)
10923         pkt.Request(9, [
10924                 rec( 8, 1, ControlFlags ),
10925         ])
10926         pkt.Reply(8)
10927         pkt.CompletionCodes([0x0000])
10928         # 2222/2301, 35/01
10929         pkt = NCP(0x2301, "AFP Create Directory", 'afp')
10930         pkt.Request((49, 303), [
10931                 rec( 10, 1, VolumeNumber ),
10932                 rec( 11, 4, BaseDirectoryID ),
10933                 rec( 15, 1, Reserved ),
10934                 rec( 16, 4, CreatorID ),
10935                 rec( 20, 4, Reserved4 ),
10936                 rec( 24, 2, FinderAttr ),
10937                 rec( 26, 2, HorizLocation ),
10938                 rec( 28, 2, VertLocation ),
10939                 rec( 30, 2, FileDirWindow ),
10940                 rec( 32, 16, Reserved16 ),
10941                 rec( 48, (1,255), Path ),
10942         ], info_str=(Path, "AFP Create Directory: %s", ", %s"))
10943         pkt.Reply(12, [
10944                 rec( 8, 4, NewDirectoryID ),
10945         ])
10946         pkt.CompletionCodes([0x0000, 0x8301, 0x8400, 0x8800, 0x9300, 0x9600, 0x9804,
10947                              0x9900, 0x9c03, 0x9e02, 0xa100, 0xa201, 0xfd00, 0xff18])
10948         # 2222/2302, 35/02
10949         pkt = NCP(0x2302, "AFP Create File", 'afp')
10950         pkt.Request((49, 303), [
10951                 rec( 10, 1, VolumeNumber ),
10952                 rec( 11, 4, BaseDirectoryID ),
10953                 rec( 15, 1, DeleteExistingFileFlag ),
10954                 rec( 16, 4, CreatorID, BE ),
10955                 rec( 20, 4, Reserved4 ),
10956                 rec( 24, 2, FinderAttr ),
10957                 rec( 26, 2, HorizLocation, BE ),
10958                 rec( 28, 2, VertLocation, BE ),
10959                 rec( 30, 2, FileDirWindow, BE ),
10960                 rec( 32, 16, Reserved16 ),
10961                 rec( 48, (1,255), Path ),
10962         ], info_str=(Path, "AFP Create File: %s", ", %s"))
10963         pkt.Reply(12, [
10964                 rec( 8, 4, NewDirectoryID ),
10965         ])
10966         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8400, 0x8701, 0x8800,
10967                              0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9300, 0x9600, 0x9804,
10968                              0x9900, 0x9b03, 0x9c03, 0x9e02, 0xa100, 0xa201, 0xfd00,
10969                              0xff18])
10970         # 2222/2303, 35/03
10971         pkt = NCP(0x2303, "AFP Delete", 'afp')
10972         pkt.Request((16,270), [
10973                 rec( 10, 1, VolumeNumber ),
10974                 rec( 11, 4, BaseDirectoryID ),
10975                 rec( 15, (1,255), Path ),
10976         ], info_str=(Path, "AFP Delete: %s", ", %s"))
10977         pkt.Reply(8)
10978         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x8a00, 0x8d00, 0x8e00, 0x8f00,
10979                              0x9000, 0x9300, 0x9600, 0x9804, 0x9b03, 0x9c03, 0x9e02,
10980                              0xa000, 0xa100, 0xa201, 0xfd00, 0xff19])
10981         # 2222/2304, 35/04
10982         pkt = NCP(0x2304, "AFP Get Entry ID From Name", 'afp')
10983         pkt.Request((16,270), [
10984                 rec( 10, 1, VolumeNumber ),
10985                 rec( 11, 4, BaseDirectoryID ),
10986                 rec( 15, (1,255), Path ),
10987         ], info_str=(Path, "AFP Get Entry from Name: %s", ", %s"))
10988         pkt.Reply(12, [
10989                 rec( 8, 4, TargetEntryID, BE ),
10990         ])
10991         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
10992                              0xa100, 0xa201, 0xfd00, 0xff19])
10993         # 2222/2305, 35/05
10994         pkt = NCP(0x2305, "AFP Get File Information", 'afp')
10995         pkt.Request((18,272), [
10996                 rec( 10, 1, VolumeNumber ),
10997                 rec( 11, 4, BaseDirectoryID ),
10998                 rec( 15, 2, RequestBitMap, BE ),
10999                 rec( 17, (1,255), Path ),
11000         ], info_str=(Path, "AFP Get File Information: %s", ", %s"))
11001         pkt.Reply(121, [
11002                 rec( 8, 4, AFPEntryID, BE ),
11003                 rec( 12, 4, ParentID, BE ),
11004                 rec( 16, 2, AttributesDef16, LE ),
11005                 rec( 18, 4, DataForkLen, BE ),
11006                 rec( 22, 4, ResourceForkLen, BE ),
11007                 rec( 26, 2, TotalOffspring, BE  ),
11008                 rec( 28, 2, CreationDate, BE ),
11009                 rec( 30, 2, LastAccessedDate, BE ),
11010                 rec( 32, 2, ModifiedDate, BE ),
11011                 rec( 34, 2, ModifiedTime, BE ),
11012                 rec( 36, 2, ArchivedDate, BE ),
11013                 rec( 38, 2, ArchivedTime, BE ),
11014                 rec( 40, 4, CreatorID, BE ),
11015                 rec( 44, 4, Reserved4 ),
11016                 rec( 48, 2, FinderAttr ),
11017                 rec( 50, 2, HorizLocation ),
11018                 rec( 52, 2, VertLocation ),
11019                 rec( 54, 2, FileDirWindow ),
11020                 rec( 56, 16, Reserved16 ),
11021                 rec( 72, 32, LongName ),
11022                 rec( 104, 4, CreatorID, BE ),
11023                 rec( 108, 12, ShortName ),
11024                 rec( 120, 1, AccessPrivileges ),
11025         ])
11026         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
11027                              0xa100, 0xa201, 0xfd00, 0xff19])
11028         # 2222/2306, 35/06
11029         pkt = NCP(0x2306, "AFP Get Entry ID From NetWare Handle", 'afp')
11030         pkt.Request(16, [
11031                 rec( 10, 6, FileHandle ),
11032         ])
11033         pkt.Reply(14, [
11034                 rec( 8, 1, VolumeID ),
11035                 rec( 9, 4, TargetEntryID, BE ),
11036                 rec( 13, 1, ForkIndicator ),
11037         ])
11038         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0xa201])
11039         # 2222/2307, 35/07
11040         pkt = NCP(0x2307, "AFP Rename", 'afp')
11041         pkt.Request((21, 529), [
11042                 rec( 10, 1, VolumeNumber ),
11043                 rec( 11, 4, MacSourceBaseID, BE ),
11044                 rec( 15, 4, MacDestinationBaseID, BE ),
11045                 rec( 19, (1,255), Path ),
11046                 rec( -1, (1,255), NewFileNameLen ),
11047         ], info_str=(Path, "AFP Rename: %s", ", %s"))
11048         pkt.Reply(8)
11049         pkt.CompletionCodes([0x0000, 0x8301, 0x8401, 0x8800, 0x8b00, 0x8e00,
11050                              0x9001, 0x9201, 0x9300, 0x9600, 0x9804, 0x9900,
11051                              0x9c03, 0x9e00, 0xa100, 0xa201, 0xfd00, 0xff0a])
11052         # 2222/2308, 35/08
11053         pkt = NCP(0x2308, "AFP Open File Fork", 'afp')
11054         pkt.Request((18, 272), [
11055                 rec( 10, 1, VolumeNumber ),
11056                 rec( 11, 4, MacBaseDirectoryID ),
11057                 rec( 15, 1, ForkIndicator ),
11058                 rec( 16, 1, AccessMode ),
11059                 rec( 17, (1,255), Path ),
11060         ], info_str=(Path, "AFP Open File Fork: %s", ", %s"))
11061         pkt.Reply(22, [
11062                 rec( 8, 4, AFPEntryID, BE ),
11063                 rec( 12, 4, DataForkLen, BE ),
11064                 rec( 16, 6, NetWareAccessHandle ),
11065         ])
11066         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8800, 0x9300,
11067                              0x9400, 0x9600, 0x9804, 0x9900, 0x9c03, 0xa100,
11068                              0xa201, 0xfd00, 0xff16])
11069         # 2222/2309, 35/09
11070         pkt = NCP(0x2309, "AFP Set File Information", 'afp')
11071         pkt.Request((64, 318), [
11072                 rec( 10, 1, VolumeNumber ),
11073                 rec( 11, 4, MacBaseDirectoryID ),
11074                 rec( 15, 2, RequestBitMap, BE ),
11075                 rec( 17, 2, MacAttr, BE ),
11076                 rec( 19, 2, CreationDate, BE ),
11077                 rec( 21, 2, LastAccessedDate, BE ),
11078                 rec( 23, 2, ModifiedDate, BE ),
11079                 rec( 25, 2, ModifiedTime, BE ),
11080                 rec( 27, 2, ArchivedDate, BE ),
11081                 rec( 29, 2, ArchivedTime, BE ),
11082                 rec( 31, 4, CreatorID, BE ),
11083                 rec( 35, 4, Reserved4 ),
11084                 rec( 39, 2, FinderAttr ),
11085                 rec( 41, 2, HorizLocation ),
11086                 rec( 43, 2, VertLocation ),
11087                 rec( 45, 2, FileDirWindow ),
11088                 rec( 47, 16, Reserved16 ),
11089                 rec( 63, (1,255), Path ),
11090         ], info_str=(Path, "AFP Set File Information: %s", ", %s"))
11091         pkt.Reply(8)
11092         pkt.CompletionCodes([0x0000, 0x0104, 0x8301, 0x8800, 0x9300, 0x9400,
11093                              0x9500, 0x9600, 0x9804, 0x9c03, 0xa100, 0xa201,
11094                              0xfd00, 0xff16])
11095         # 2222/230A, 35/10
11096         pkt = NCP(0x230A, "AFP Scan File Information", 'afp')
11097         pkt.Request((26, 280), [
11098                 rec( 10, 1, VolumeNumber ),
11099                 rec( 11, 4, MacBaseDirectoryID ),
11100                 rec( 15, 4, MacLastSeenID, BE ),
11101                 rec( 19, 2, DesiredResponseCount, BE ),
11102                 rec( 21, 2, SearchBitMap, BE ),
11103                 rec( 23, 2, RequestBitMap, BE ),
11104                 rec( 25, (1,255), Path ),
11105         ], info_str=(Path, "AFP Scan File Information: %s", ", %s"))
11106         pkt.Reply(123, [
11107                 rec( 8, 2, ActualResponseCount, BE, var="x" ),
11108                 rec( 10, 113, AFP10Struct, repeat="x" ),
11109         ])
11110         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804,
11111                              0x9c03, 0xa100, 0xa201, 0xfd00, 0xff16])
11112         # 2222/230B, 35/11
11113         pkt = NCP(0x230B, "AFP Alloc Temporary Directory Handle", 'afp')
11114         pkt.Request((16,270), [
11115                 rec( 10, 1, VolumeNumber ),
11116                 rec( 11, 4, MacBaseDirectoryID ),
11117                 rec( 15, (1,255), Path ),
11118         ], info_str=(Path, "AFP Allocate Temporary Directory Handle: %s", ", %s"))
11119         pkt.Reply(10, [
11120                 rec( 8, 1, DirHandle ),
11121                 rec( 9, 1, AccessRightsMask ),
11122         ])
11123         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600,
11124                              0x9804, 0x9b03, 0x9c03, 0x9d00, 0xa100,
11125                              0xa201, 0xfd00, 0xff00])
11126         # 2222/230C, 35/12
11127         pkt = NCP(0x230C, "AFP Get Entry ID From Path Name", 'afp')
11128         pkt.Request((12,266), [
11129                 rec( 10, 1, DirHandle ),
11130                 rec( 11, (1,255), Path ),
11131         ], info_str=(Path, "AFP Get Entry ID from Path Name: %s", ", %s"))
11132         pkt.Reply(12, [
11133                 rec( 8, 4, AFPEntryID, BE ),
11134         ])
11135         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600,
11136                              0x9804, 0x9b03, 0x9c03, 0xa100, 0xa201,
11137                              0xfd00, 0xff00])
11138         # 2222/230D, 35/13
11139         pkt = NCP(0x230D, "AFP 2.0 Create Directory", 'afp')
11140         pkt.Request((55,309), [
11141                 rec( 10, 1, VolumeNumber ),
11142                 rec( 11, 4, BaseDirectoryID ),
11143                 rec( 15, 1, Reserved ),
11144                 rec( 16, 4, CreatorID, BE ),
11145                 rec( 20, 4, Reserved4 ),
11146                 rec( 24, 2, FinderAttr ),
11147                 rec( 26, 2, HorizLocation ),
11148                 rec( 28, 2, VertLocation ),
11149                 rec( 30, 2, FileDirWindow ),
11150                 rec( 32, 16, Reserved16 ),
11151                 rec( 48, 6, ProDOSInfo ),
11152                 rec( 54, (1,255), Path ),
11153         ], info_str=(Path, "AFP 2.0 Create Directory: %s", ", %s"))
11154         pkt.Reply(12, [
11155                 rec( 8, 4, NewDirectoryID ),
11156         ])
11157         pkt.CompletionCodes([0x0000, 0x8301, 0x8400, 0x8800, 0x9300,
11158                              0x9600, 0x9804, 0x9900, 0x9c03, 0x9e00,
11159                              0xa100, 0xa201, 0xfd00, 0xff00])
11160         # 2222/230E, 35/14
11161         pkt = NCP(0x230E, "AFP 2.0 Create File", 'afp')
11162         pkt.Request((55,309), [
11163                 rec( 10, 1, VolumeNumber ),
11164                 rec( 11, 4, BaseDirectoryID ),
11165                 rec( 15, 1, DeleteExistingFileFlag ),
11166                 rec( 16, 4, CreatorID, BE ),
11167                 rec( 20, 4, Reserved4 ),
11168                 rec( 24, 2, FinderAttr ),
11169                 rec( 26, 2, HorizLocation ),
11170                 rec( 28, 2, VertLocation ),
11171                 rec( 30, 2, FileDirWindow ),
11172                 rec( 32, 16, Reserved16 ),
11173                 rec( 48, 6, ProDOSInfo ),
11174                 rec( 54, (1,255), Path ),
11175         ], info_str=(Path, "AFP 2.0 Create File: %s", ", %s"))
11176         pkt.Reply(12, [
11177                 rec( 8, 4, NewDirectoryID ),
11178         ])
11179         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8301, 0x8400,
11180                              0x8701, 0x8800, 0x8a00, 0x8d00, 0x8e00,
11181                              0x8f00, 0x9001, 0x9300, 0x9600, 0x9804,
11182                              0x9900, 0x9b03, 0x9c03, 0x9e00, 0xa100,
11183                              0xa201, 0xfd00, 0xff00])
11184         # 2222/230F, 35/15
11185         pkt = NCP(0x230F, "AFP 2.0 Get File Or Directory Information", 'afp')
11186         pkt.Request((18,272), [
11187                 rec( 10, 1, VolumeNumber ),
11188                 rec( 11, 4, BaseDirectoryID ),
11189                 rec( 15, 2, RequestBitMap, BE ),
11190                 rec( 17, (1,255), Path ),
11191         ], info_str=(Path, "AFP 2.0 Get Information: %s", ", %s"))
11192         pkt.Reply(128, [
11193                 rec( 8, 4, AFPEntryID, BE ),
11194                 rec( 12, 4, ParentID, BE ),
11195                 rec( 16, 2, AttributesDef16 ),
11196                 rec( 18, 4, DataForkLen, BE ),
11197                 rec( 22, 4, ResourceForkLen, BE ),
11198                 rec( 26, 2, TotalOffspring, BE ),
11199                 rec( 28, 2, CreationDate, BE ),
11200                 rec( 30, 2, LastAccessedDate, BE ),
11201                 rec( 32, 2, ModifiedDate, BE ),
11202                 rec( 34, 2, ModifiedTime, BE ),
11203                 rec( 36, 2, ArchivedDate, BE ),
11204                 rec( 38, 2, ArchivedTime, BE ),
11205                 rec( 40, 4, CreatorID, BE ),
11206                 rec( 44, 4, Reserved4 ),
11207                 rec( 48, 2, FinderAttr ),
11208                 rec( 50, 2, HorizLocation ),
11209                 rec( 52, 2, VertLocation ),
11210                 rec( 54, 2, FileDirWindow ),
11211                 rec( 56, 16, Reserved16 ),
11212                 rec( 72, 32, LongName ),
11213                 rec( 104, 4, CreatorID, BE ),
11214                 rec( 108, 12, ShortName ),
11215                 rec( 120, 1, AccessPrivileges ),
11216                 rec( 121, 1, Reserved ),
11217                 rec( 122, 6, ProDOSInfo ),
11218         ])
11219         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804, 0x9c03,
11220                              0xa100, 0xa201, 0xfd00, 0xff19])
11221         # 2222/2310, 35/16
11222         pkt = NCP(0x2310, "AFP 2.0 Set File Information", 'afp')
11223         pkt.Request((70, 324), [
11224                 rec( 10, 1, VolumeNumber ),
11225                 rec( 11, 4, MacBaseDirectoryID ),
11226                 rec( 15, 2, RequestBitMap, BE ),
11227                 rec( 17, 2, AttributesDef16 ),
11228                 rec( 19, 2, CreationDate, BE ),
11229                 rec( 21, 2, LastAccessedDate, BE ),
11230                 rec( 23, 2, ModifiedDate, BE ),
11231                 rec( 25, 2, ModifiedTime, BE ),
11232                 rec( 27, 2, ArchivedDate, BE ),
11233                 rec( 29, 2, ArchivedTime, BE ),
11234                 rec( 31, 4, CreatorID, BE ),
11235                 rec( 35, 4, Reserved4 ),
11236                 rec( 39, 2, FinderAttr ),
11237                 rec( 41, 2, HorizLocation ),
11238                 rec( 43, 2, VertLocation ),
11239                 rec( 45, 2, FileDirWindow ),
11240                 rec( 47, 16, Reserved16 ),
11241                 rec( 63, 6, ProDOSInfo ),
11242                 rec( 69, (1,255), Path ),
11243         ], info_str=(Path, "AFP 2.0 Set File Information: %s", ", %s"))
11244         pkt.Reply(8)
11245         pkt.CompletionCodes([0x0000, 0x0104, 0x8301, 0x8800, 0x9300, 0x9400,
11246                              0x9500, 0x9600, 0x9804, 0x9c03, 0xa100, 0xa201,
11247                              0xfd00, 0xff16])
11248         # 2222/2311, 35/17
11249         pkt = NCP(0x2311, "AFP 2.0 Scan File Information", 'afp')
11250         pkt.Request((26, 280), [
11251                 rec( 10, 1, VolumeNumber ),
11252                 rec( 11, 4, MacBaseDirectoryID ),
11253                 rec( 15, 4, MacLastSeenID, BE ),
11254                 rec( 19, 2, DesiredResponseCount, BE ),
11255                 rec( 21, 2, SearchBitMap, BE ),
11256                 rec( 23, 2, RequestBitMap, BE ),
11257                 rec( 25, (1,255), Path ),
11258         ], info_str=(Path, "AFP 2.0 Scan File Information: %s", ", %s"))
11259         pkt.Reply(14, [
11260                 rec( 8, 2, ActualResponseCount, var="x" ),
11261                 rec( 10, 4, AFP20Struct, repeat="x" ),
11262         ])
11263         pkt.CompletionCodes([0x0000, 0x8301, 0x8800, 0x9300, 0x9600, 0x9804,
11264                              0x9c03, 0xa100, 0xa201, 0xfd00, 0xff16])
11265         # 2222/2312, 35/18
11266         pkt = NCP(0x2312, "AFP Get DOS Name From Entry ID", 'afp')
11267         pkt.Request(15, [
11268                 rec( 10, 1, VolumeNumber ),
11269                 rec( 11, 4, AFPEntryID, BE ),
11270         ])
11271         pkt.Reply((9,263), [
11272                 rec( 8, (1,255), Path ),
11273         ])
11274         pkt.CompletionCodes([0x0000, 0x8900, 0x9600, 0xbf00])
11275         # 2222/2313, 35/19
11276         pkt = NCP(0x2313, "AFP Get Macintosh Info On Deleted File", 'afp')
11277         pkt.Request(15, [
11278                 rec( 10, 1, VolumeNumber ),
11279                 rec( 11, 4, DirectoryNumber, BE ),
11280         ])
11281         pkt.Reply((51,305), [
11282                 rec( 8, 4, CreatorID, BE ),
11283                 rec( 12, 4, Reserved4 ),
11284                 rec( 16, 2, FinderAttr ),
11285                 rec( 18, 2, HorizLocation ),
11286                 rec( 20, 2, VertLocation ),
11287                 rec( 22, 2, FileDirWindow ),
11288                 rec( 24, 16, Reserved16 ),
11289                 rec( 40, 6, ProDOSInfo ),
11290                 rec( 46, 4, ResourceForkSize, BE ),
11291                 rec( 50, (1,255), FileName ),
11292         ])
11293         pkt.CompletionCodes([0x0000, 0x9c03, 0xbf00])
11294         # 2222/2400, 36/00
11295         pkt = NCP(0x2400, "Get NCP Extension Information", 'fileserver')
11296         pkt.Request(14, [
11297                 rec( 10, 4, NCPextensionNumber, LE ),
11298         ])
11299         pkt.Reply((16,270), [
11300                 rec( 8, 4, NCPextensionNumber ),
11301                 rec( 12, 1, NCPextensionMajorVersion ),
11302                 rec( 13, 1, NCPextensionMinorVersion ),
11303                 rec( 14, 1, NCPextensionRevisionNumber ),
11304                 rec( 15, (1, 255), NCPextensionName ),
11305         ])
11306         pkt.CompletionCodes([0x0000, 0xfe00])
11307         # 2222/2401, 36/01
11308         pkt = NCP(0x2401, "Get NCP Extension Maximum Data Size", 'fileserver')
11309         pkt.Request(10)
11310         pkt.Reply(10, [
11311                 rec( 8, 2, NCPdataSize ),
11312         ])
11313         pkt.CompletionCodes([0x0000, 0xfe00])
11314         # 2222/2402, 36/02
11315         pkt = NCP(0x2402, "Get NCP Extension Information by Name", 'fileserver')
11316         pkt.Request((11, 265), [
11317                 rec( 10, (1,255), NCPextensionName ),
11318         ], info_str=(NCPextensionName, "Get NCP Extension Information by Name: %s", ", %s"))
11319         pkt.Reply((16,270), [
11320                 rec( 8, 4, NCPextensionNumber ),
11321                 rec( 12, 1, NCPextensionMajorVersion ),
11322                 rec( 13, 1, NCPextensionMinorVersion ),
11323                 rec( 14, 1, NCPextensionRevisionNumber ),
11324                 rec( 15, (1, 255), NCPextensionName ),
11325         ])
11326         pkt.CompletionCodes([0x0000, 0xfe00, 0xff20])
11327         # 2222/2403, 36/03
11328         pkt = NCP(0x2403, "Get Number of Registered NCP Extensions", 'fileserver')
11329         pkt.Request(10)
11330         pkt.Reply(12, [
11331                 rec( 8, 4, NumberOfNCPExtensions ),
11332         ])
11333         pkt.CompletionCodes([0x0000, 0xfe00])
11334         # 2222/2404, 36/04
11335         pkt = NCP(0x2404, "Get NCP Extension Registered Verbs List", 'fileserver')
11336         pkt.Request(14, [
11337                 rec( 10, 4, StartingNumber ),
11338         ])
11339         pkt.Reply(20, [
11340                 rec( 8, 4, ReturnedListCount, var="x" ),
11341                 rec( 12, 4, nextStartingNumber ),
11342                 rec( 16, 4, NCPExtensionNumbers, repeat="x" ),
11343         ])
11344         pkt.CompletionCodes([0x0000, 0xfe00])
11345         # 2222/2405, 36/05
11346         pkt = NCP(0x2405, "Return NCP Extension Information", 'fileserver')
11347         pkt.Request(14, [
11348                 rec( 10, 4, NCPextensionNumber ),
11349         ])
11350         pkt.Reply((16,270), [
11351                 rec( 8, 4, NCPextensionNumber ),
11352                 rec( 12, 1, NCPextensionMajorVersion ),
11353                 rec( 13, 1, NCPextensionMinorVersion ),
11354                 rec( 14, 1, NCPextensionRevisionNumber ),
11355                 rec( 15, (1, 255), NCPextensionName ),
11356         ])
11357         pkt.CompletionCodes([0x0000, 0xfe00])
11358         # 2222/2406, 36/06
11359         pkt = NCP(0x2406, "Return NCP Extension Maximum Data Size", 'fileserver')
11360         pkt.Request(10)
11361         pkt.Reply(12, [
11362                 rec( 8, 4, NCPdataSize ),
11363         ])
11364         pkt.CompletionCodes([0x0000, 0xfe00])
11365         # 2222/25, 37
11366         pkt = NCP(0x25, "Execute NCP Extension", 'fileserver')
11367         pkt.Request(11, [
11368                 rec( 7, 4, NCPextensionNumber ),
11369                 # The following value is Unicode
11370                 #rec[ 13, (1,255), RequestData ],
11371         ])
11372         pkt.Reply(8)
11373                 # The following value is Unicode
11374                 #[ 8, (1, 255), ReplyBuffer ],
11375         pkt.CompletionCodes([0x0000, 0xd504, 0xee00, 0xfe00])
11376         # 2222/3B, 59
11377         pkt = NCP(0x3B, "Commit File", 'file', has_length=0 )
11378         pkt.Request(14, [
11379                 rec( 7, 1, Reserved ),
11380                 rec( 8, 6, FileHandle ),
11381         ], info_str=(FileHandle, "Commit File - 0x%s", ", %s"))
11382         pkt.Reply(8)
11383         pkt.CompletionCodes([0x0000, 0x8800, 0x9804, 0xff00])
11384         # 2222/3E, 62
11385         pkt = NCP(0x3E, "File Search Initialize", 'file', has_length=0 )
11386         pkt.Request((9, 263), [
11387                 rec( 7, 1, DirHandle ),
11388                 rec( 8, (1,255), Path ),
11389         ], info_str=(Path, "Initialize File Search: %s", ", %s"))
11390         pkt.Reply(14, [
11391                 rec( 8, 1, VolumeNumber ),
11392                 rec( 9, 2, DirectoryID ),
11393                 rec( 11, 2, SequenceNumber, BE ),
11394                 rec( 13, 1, AccessRightsMask ),
11395         ])
11396         pkt.CompletionCodes([0x0000, 0x9600, 0x9804, 0x9b03, 0x9c03, 0xa100,
11397                              0xfd00, 0xff16])
11398         # 2222/3F, 63
11399         pkt = NCP(0x3F, "File Search Continue", 'file', has_length=0 )
11400         pkt.Request((14, 268), [
11401                 rec( 7, 1, VolumeNumber ),
11402                 rec( 8, 2, DirectoryID ),
11403                 rec( 10, 2, SequenceNumber, BE ),
11404                 rec( 12, 1, SearchAttributes ),
11405                 rec( 13, (1,255), Path ),
11406         ], info_str=(Path, "File Search Continue: %s", ", %s"))
11407         pkt.Reply( NO_LENGTH_CHECK, [
11408                 #
11409                 # XXX - don't show this if we got back a non-zero
11410                 # completion code?  For example, 255 means "No
11411                 # matching files or directories were found", so
11412                 # presumably it can't show you a matching file or
11413                 # directory instance - it appears to just leave crap
11414                 # there.
11415                 #
11416                 srec( DirectoryInstance, req_cond="ncp.sattr_sub==TRUE"),
11417                 srec( FileInstance, req_cond="ncp.sattr_sub!=TRUE"),
11418         ])
11419         pkt.ReqCondSizeVariable()
11420         pkt.CompletionCodes([0x0000, 0xff16])
11421         # 2222/40, 64
11422         pkt = NCP(0x40, "Search for a File", 'file')
11423         pkt.Request((12, 266), [
11424                 rec( 7, 2, SequenceNumber, BE ),
11425                 rec( 9, 1, DirHandle ),
11426                 rec( 10, 1, SearchAttributes ),
11427                 rec( 11, (1,255), FileName ),
11428         ], info_str=(FileName, "Search for File: %s", ", %s"))
11429         pkt.Reply(40, [
11430                 rec( 8, 2, SequenceNumber, BE ),
11431                 rec( 10, 2, Reserved2 ),
11432                 rec( 12, 14, FileName14 ),
11433                 rec( 26, 1, AttributesDef ),
11434                 rec( 27, 1, FileExecuteType ),
11435                 rec( 28, 4, FileSize ),
11436                 rec( 32, 2, CreationDate, BE ),
11437                 rec( 34, 2, LastAccessedDate, BE ),
11438                 rec( 36, 2, ModifiedDate, BE ),
11439                 rec( 38, 2, ModifiedTime, BE ),
11440         ])
11441         pkt.CompletionCodes([0x0000, 0x8900, 0x9600, 0x9804, 0x9b03,
11442                              0x9c03, 0xa100, 0xfd00, 0xff16])
11443         # 2222/41, 65
11444         pkt = NCP(0x41, "Open File", 'file')
11445         pkt.Request((10, 264), [
11446                 rec( 7, 1, DirHandle ),
11447                 rec( 8, 1, SearchAttributes ),
11448                 rec( 9, (1,255), FileName ),
11449         ], info_str=(FileName, "Open File: %s", ", %s"))
11450         pkt.Reply(44, [
11451                 rec( 8, 6, FileHandle ),
11452                 rec( 14, 2, Reserved2 ),
11453                 rec( 16, 14, FileName14 ),
11454                 rec( 30, 1, AttributesDef ),
11455                 rec( 31, 1, FileExecuteType ),
11456                 rec( 32, 4, FileSize, BE ),
11457                 rec( 36, 2, CreationDate, BE ),
11458                 rec( 38, 2, LastAccessedDate, BE ),
11459                 rec( 40, 2, ModifiedDate, BE ),
11460                 rec( 42, 2, ModifiedTime, BE ),
11461         ])
11462         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8200, 0x9400,
11463                              0x9600, 0x9804, 0x9c03, 0xa100, 0xfd00,
11464                              0xff16])
11465         # 2222/42, 66
11466         pkt = NCP(0x42, "Close File", 'file')
11467         pkt.Request(14, [
11468                 rec( 7, 1, Reserved ),
11469                 rec( 8, 6, FileHandle ),
11470         ], info_str=(FileHandle, "Close File - 0x%s", ", %s"))
11471         pkt.Reply(8)
11472         pkt.CompletionCodes([0x0000, 0x8800, 0xff1a])
11473         # 2222/43, 67
11474         pkt = NCP(0x43, "Create File", 'file')
11475         pkt.Request((10, 264), [
11476                 rec( 7, 1, DirHandle ),
11477                 rec( 8, 1, AttributesDef ),
11478                 rec( 9, (1,255), FileName ),
11479         ], info_str=(FileName, "Create File: %s", ", %s"))
11480         pkt.Reply(44, [
11481                 rec( 8, 6, FileHandle ),
11482                 rec( 14, 2, Reserved2 ),
11483                 rec( 16, 14, FileName14 ),
11484                 rec( 30, 1, AttributesDef ),
11485                 rec( 31, 1, FileExecuteType ),
11486                 rec( 32, 4, FileSize, BE ),
11487                 rec( 36, 2, CreationDate, BE ),
11488                 rec( 38, 2, LastAccessedDate, BE ),
11489                 rec( 40, 2, ModifiedDate, BE ),
11490                 rec( 42, 2, ModifiedTime, BE ),
11491         ])
11492         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11493                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11494                              0x9804, 0x9900, 0x9b03, 0x9c03, 0xfd00,
11495                              0xff00])
11496         # 2222/44, 68
11497         pkt = NCP(0x44, "Erase File", 'file')
11498         pkt.Request((10, 264), [
11499                 rec( 7, 1, DirHandle ),
11500                 rec( 8, 1, SearchAttributes ),
11501                 rec( 9, (1,255), FileName ),
11502         ], info_str=(FileName, "Erase File: %s", ", %s"))
11503         pkt.Reply(8)
11504         pkt.CompletionCodes([0x0000, 0x8a00, 0x8d00, 0x8e00, 0x8f00,
11505                              0x9001, 0x9600, 0x9804, 0x9b03, 0x9c03,
11506                              0xa100, 0xfd00, 0xff00])
11507         # 2222/45, 69
11508         pkt = NCP(0x45, "Rename File", 'file')
11509         pkt.Request((12, 520), [
11510                 rec( 7, 1, DirHandle ),
11511                 rec( 8, 1, SearchAttributes ),
11512                 rec( 9, (1,255), FileName ),
11513                 rec( -1, 1, TargetDirHandle ),
11514                 rec( -1, (1, 255), NewFileNameLen ),
11515         ], info_str=(FileName, "Rename File: %s", ", %s"))
11516         pkt.Reply(8)
11517         pkt.CompletionCodes([0x0000, 0x8701, 0x8b00, 0x8d00, 0x8e00,
11518                              0x8f00, 0x9001, 0x9101, 0x9201, 0x9600,
11519                              0x9804, 0x9a00, 0x9b03, 0x9c03, 0xa100,
11520                              0xfd00, 0xff16])
11521         # 2222/46, 70
11522         pkt = NCP(0x46, "Set File Attributes", 'file')
11523         pkt.Request((11, 265), [
11524                 rec( 7, 1, AttributesDef ),
11525                 rec( 8, 1, DirHandle ),
11526                 rec( 9, 1, SearchAttributes ),
11527                 rec( 10, (1,255), FileName ),
11528         ], info_str=(FileName, "Set File Attributes: %s", ", %s"))
11529         pkt.Reply(8)
11530         pkt.CompletionCodes([0x0000, 0x8c00, 0x8d00, 0x8e00, 0x9600,
11531                              0x9804, 0x9b03, 0x9c03, 0xa100, 0xfd00,
11532                              0xff16])
11533         # 2222/47, 71
11534         pkt = NCP(0x47, "Get Current Size of File", 'file')
11535         pkt.Request(14, [
11536         rec(7, 1, Reserved ),
11537                 rec( 8, 6, FileHandle ),
11538         ], info_str=(FileHandle, "Get Current Size of File - 0x%s", ", %s"))
11539         pkt.Reply(12, [
11540                 rec( 8, 4, FileSize, BE ),
11541         ])
11542         pkt.CompletionCodes([0x0000, 0x8800])
11543         # 2222/48, 72
11544         pkt = NCP(0x48, "Read From A File", 'file')
11545         pkt.Request(20, [
11546                 rec( 7, 1, Reserved ),
11547                 rec( 8, 6, FileHandle ),
11548                 rec( 14, 4, FileOffset, BE ),
11549                 rec( 18, 2, MaxBytes, BE ),
11550         ], info_str=(FileHandle, "Read From File - 0x%s", ", %s"))
11551         pkt.Reply(10, [
11552                 rec( 8, 2, NumBytes, BE ),
11553         ])
11554         pkt.CompletionCodes([0x0000, 0x8300, 0x8800, 0x9300, 0xff1b])
11555         # 2222/49, 73
11556         pkt = NCP(0x49, "Write to a File", 'file')
11557         pkt.Request(20, [
11558                 rec( 7, 1, Reserved ),
11559                 rec( 8, 6, FileHandle ),
11560                 rec( 14, 4, FileOffset, BE ),
11561                 rec( 18, 2, MaxBytes, BE ),
11562         ], info_str=(FileHandle, "Write to a File - 0x%s", ", %s"))
11563         pkt.Reply(8)
11564         pkt.CompletionCodes([0x0000, 0x0104, 0x8300, 0x8800, 0x9400, 0x9500, 0xa201, 0xff1b])
11565         # 2222/4A, 74
11566         pkt = NCP(0x4A, "Copy from One File to Another", 'file')
11567         pkt.Request(30, [
11568                 rec( 7, 1, Reserved ),
11569                 rec( 8, 6, FileHandle ),
11570                 rec( 14, 6, TargetFileHandle ),
11571                 rec( 20, 4, FileOffset, BE ),
11572                 rec( 24, 4, TargetFileOffset, BE ),
11573                 rec( 28, 2, BytesToCopy, BE ),
11574         ])
11575         pkt.Reply(12, [
11576                 rec( 8, 4, BytesActuallyTransferred, BE ),
11577         ])
11578         pkt.CompletionCodes([0x0000, 0x0104, 0x8300, 0x8800, 0x9300, 0x9400,
11579                              0x9500, 0x9600, 0xa201, 0xff1b])
11580         # 2222/4B, 75
11581         pkt = NCP(0x4B, "Set File Time Date Stamp", 'file')
11582         pkt.Request(18, [
11583                 rec( 7, 1, Reserved ),
11584                 rec( 8, 6, FileHandle ),
11585                 rec( 14, 2, FileTime, BE ),
11586                 rec( 16, 2, FileDate, BE ),
11587         ], info_str=(FileHandle, "Set Time and Date Stamp for File - 0x%s", ", %s"))
11588         pkt.Reply(8)
11589         pkt.CompletionCodes([0x0000, 0x8800, 0x9400, 0x9600, 0xfb08])
11590         # 2222/4C, 76
11591         pkt = NCP(0x4C, "Open File", 'file')
11592         pkt.Request((11, 265), [
11593                 rec( 7, 1, DirHandle ),
11594                 rec( 8, 1, SearchAttributes ),
11595                 rec( 9, 1, AccessRightsMask ),
11596                 rec( 10, (1,255), FileName ),
11597         ], info_str=(FileName, "Open File: %s", ", %s"))
11598         pkt.Reply(44, [
11599                 rec( 8, 6, FileHandle ),
11600                 rec( 14, 2, Reserved2 ),
11601                 rec( 16, 14, FileName14 ),
11602                 rec( 30, 1, AttributesDef ),
11603                 rec( 31, 1, FileExecuteType ),
11604                 rec( 32, 4, FileSize, BE ),
11605                 rec( 36, 2, CreationDate, BE ),
11606                 rec( 38, 2, LastAccessedDate, BE ),
11607                 rec( 40, 2, ModifiedDate, BE ),
11608                 rec( 42, 2, ModifiedTime, BE ),
11609         ])
11610         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8200, 0x9400,
11611                              0x9600, 0x9804, 0x9c03, 0xa100, 0xfd00,
11612                              0xff16])
11613         # 2222/4D, 77
11614         pkt = NCP(0x4D, "Create File", 'file')
11615         pkt.Request((10, 264), [
11616                 rec( 7, 1, DirHandle ),
11617                 rec( 8, 1, AttributesDef ),
11618                 rec( 9, (1,255), FileName ),
11619         ], info_str=(FileName, "Create File: %s", ", %s"))
11620         pkt.Reply(44, [
11621                 rec( 8, 6, FileHandle ),
11622                 rec( 14, 2, Reserved2 ),
11623                 rec( 16, 14, FileName14 ),
11624                 rec( 30, 1, AttributesDef ),
11625                 rec( 31, 1, FileExecuteType ),
11626                 rec( 32, 4, FileSize, BE ),
11627                 rec( 36, 2, CreationDate, BE ),
11628                 rec( 38, 2, LastAccessedDate, BE ),
11629                 rec( 40, 2, ModifiedDate, BE ),
11630                 rec( 42, 2, ModifiedTime, BE ),
11631         ])
11632         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11633                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11634                              0x9804, 0x9900, 0x9b03, 0x9c03, 0xfd00,
11635                              0xff00])
11636         # 2222/4F, 79
11637         pkt = NCP(0x4F, "Set File Extended Attributes", 'file')
11638         pkt.Request((11, 265), [
11639                 rec( 7, 1, AttributesDef ),
11640                 rec( 8, 1, DirHandle ),
11641                 rec( 9, 1, AccessRightsMask ),
11642                 rec( 10, (1,255), FileName ),
11643         ], info_str=(FileName, "Set File Extended Attributes: %s", ", %s"))
11644         pkt.Reply(8)
11645         pkt.CompletionCodes([0x0000, 0x8c00, 0x8d00, 0x8e00, 0x9600,
11646                              0x9804, 0x9b03, 0x9c03, 0xa100, 0xfd00,
11647                              0xff16])
11648         # 2222/54, 84
11649         pkt = NCP(0x54, "Open/Create File", 'file')
11650         pkt.Request((12, 266), [
11651                 rec( 7, 1, DirHandle ),
11652                 rec( 8, 1, AttributesDef ),
11653                 rec( 9, 1, AccessRightsMask ),
11654                 rec( 10, 1, ActionFlag ),
11655                 rec( 11, (1,255), FileName ),
11656         ], info_str=(FileName, "Open/Create File: %s", ", %s"))
11657         pkt.Reply(44, [
11658                 rec( 8, 6, FileHandle ),
11659                 rec( 14, 2, Reserved2 ),
11660                 rec( 16, 14, FileName14 ),
11661                 rec( 30, 1, AttributesDef ),
11662                 rec( 31, 1, FileExecuteType ),
11663                 rec( 32, 4, FileSize, BE ),
11664                 rec( 36, 2, CreationDate, BE ),
11665                 rec( 38, 2, LastAccessedDate, BE ),
11666                 rec( 40, 2, ModifiedDate, BE ),
11667                 rec( 42, 2, ModifiedTime, BE ),
11668         ])
11669         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11670                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11671                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
11672         # 2222/55, 85
11673         pkt = NCP(0x55, "Get Sparse File Data Block Bit Map", 'file')
11674         pkt.Request(17, [
11675                 rec( 7, 6, FileHandle ),
11676                 rec( 13, 4, FileOffset ),
11677         ], info_str=(FileHandle, "Get Sparse File Data Block Bitmap for File - 0x%s", ", %s"))
11678         pkt.Reply(528, [
11679                 rec( 8, 4, AllocationBlockSize ),
11680                 rec( 12, 4, Reserved4 ),
11681                 rec( 16, 512, BitMap ),
11682         ])
11683         pkt.CompletionCodes([0x0000, 0x8800])
11684         # 2222/5601, 86/01
11685         pkt = NCP(0x5601, "Close Extended Attribute Handle", 'file', has_length=0 )
11686         pkt.Request(14, [
11687                 rec( 8, 2, Reserved2 ),
11688                 rec( 10, 4, EAHandle ),
11689         ])
11690         pkt.Reply(8)
11691         pkt.CompletionCodes([0x0000, 0xcf00, 0xd301])
11692         # 2222/5602, 86/02
11693         pkt = NCP(0x5602, "Write Extended Attribute", 'file', has_length=0 )
11694         pkt.Request((35,97), [
11695                 rec( 8, 2, EAFlags ),
11696                 rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
11697                 rec( 14, 4, ReservedOrDirectoryNumber ),
11698                 rec( 18, 4, TtlWriteDataSize ),
11699                 rec( 22, 4, FileOffset ),
11700                 rec( 26, 4, EAAccessFlag ),
11701                 rec( 30, 2, EAValueLength, var='x' ),
11702                 rec( 32, (2,64), EAKey ),
11703                 rec( -1, 1, EAValueRep, repeat='x' ),
11704         ], info_str=(EAKey, "Write Extended Attribute: %s", ", %s"))
11705         pkt.Reply(20, [
11706                 rec( 8, 4, EAErrorCodes ),
11707                 rec( 12, 4, EABytesWritten ),
11708                 rec( 16, 4, NewEAHandle ),
11709         ])
11710         pkt.CompletionCodes([0x0000, 0xc800, 0xc900, 0xcb00, 0xce00, 0xcf00, 0xd101,
11711                              0xd203, 0xd301, 0xd402])
11712         # 2222/5603, 86/03
11713         pkt = NCP(0x5603, "Read Extended Attribute", 'file', has_length=0 )
11714         pkt.Request((28,538), [
11715                 rec( 8, 2, EAFlags ),
11716                 rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
11717                 rec( 14, 4, ReservedOrDirectoryNumber ),
11718                 rec( 18, 4, FileOffset ),
11719                 rec( 22, 4, InspectSize ),
11720                 rec( 26, (2,512), EAKey ),
11721         ], info_str=(EAKey, "Read Extended Attribute: %s", ", %s"))
11722         pkt.Reply((26,536), [
11723                 rec( 8, 4, EAErrorCodes ),
11724                 rec( 12, 4, TtlValuesLength ),
11725                 rec( 16, 4, NewEAHandle ),
11726                 rec( 20, 4, EAAccessFlag ),
11727                 rec( 24, (2,512), EAValue ),
11728         ])
11729         pkt.CompletionCodes([0x0000, 0xc900, 0xce00, 0xcf00, 0xd101,
11730                              0xd301])
11731         # 2222/5604, 86/04
11732         pkt = NCP(0x5604, "Enumerate Extended Attribute", 'file', has_length=0 )
11733         pkt.Request((26,536), [
11734                 rec( 8, 2, EAFlags ),
11735                 rec( 10, 4, EAHandleOrNetWareHandleOrVolume ),
11736                 rec( 14, 4, ReservedOrDirectoryNumber ),
11737                 rec( 18, 4, InspectSize ),
11738                 rec( 22, 2, SequenceNumber ),
11739                 rec( 24, (2,512), EAKey ),
11740         ], info_str=(EAKey, "Enumerate Extended Attribute: %s", ", %s"))
11741         pkt.Reply(28, [
11742                 rec( 8, 4, EAErrorCodes ),
11743                 rec( 12, 4, TtlEAs ),
11744                 rec( 16, 4, TtlEAsDataSize ),
11745                 rec( 20, 4, TtlEAsKeySize ),
11746                 rec( 24, 4, NewEAHandle ),
11747         ])
11748         pkt.CompletionCodes([0x0000, 0x8800, 0xc900, 0xce00, 0xcf00, 0xd101,
11749                              0xd301])
11750         # 2222/5605, 86/05
11751         pkt = NCP(0x5605, "Duplicate Extended Attributes", 'file', has_length=0 )
11752         pkt.Request(28, [
11753                 rec( 8, 2, EAFlags ),
11754                 rec( 10, 2, DstEAFlags ),
11755                 rec( 12, 4, EAHandleOrNetWareHandleOrVolume ),
11756                 rec( 16, 4, ReservedOrDirectoryNumber ),
11757                 rec( 20, 4, EAHandleOrNetWareHandleOrVolume ),
11758                 rec( 24, 4, ReservedOrDirectoryNumber ),
11759         ])
11760         pkt.Reply(20, [
11761                 rec( 8, 4, EADuplicateCount ),
11762                 rec( 12, 4, EADataSizeDuplicated ),
11763                 rec( 16, 4, EAKeySizeDuplicated ),
11764         ])
11765         pkt.CompletionCodes([0x0000, 0xd101])
11766         # 2222/5701, 87/01
11767         pkt = NCP(0x5701, "Open/Create File or Subdirectory", 'file', has_length=0)
11768         pkt.Request((30, 284), [
11769                 rec( 8, 1, NameSpace  ),
11770                 rec( 9, 1, OpenCreateMode ),
11771                 rec( 10, 2, SearchAttributesLow ),
11772                 rec( 12, 2, ReturnInfoMask ),
11773                 rec( 14, 2, ExtendedInfo ),
11774                 rec( 16, 4, AttributesDef32 ),
11775                 rec( 20, 2, DesiredAccessRights ),
11776                 rec( 22, 1, VolumeNumber ),
11777                 rec( 23, 4, DirectoryBase ),
11778                 rec( 27, 1, HandleFlag ),
11779                 rec( 28, 1, PathCount, var="x" ),
11780                 rec( 29, (1,255), Path, repeat="x" ),
11781         ], info_str=(Path, "Open or Create: %s", "/%s"))
11782         pkt.Reply( NO_LENGTH_CHECK, [
11783                 rec( 8, 4, FileHandle ),
11784                 rec( 12, 1, OpenCreateAction ),
11785                 rec( 13, 1, Reserved ),
11786                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
11787                 srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
11788                 srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
11789                 srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
11790                 srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
11791                 srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
11792                 srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
11793                 srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
11794                 srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
11795                 srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
11796                 srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
11797                 srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
11798                 srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
11799                 srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
11800                 srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
11801                 srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
11802                 srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
11803                 srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
11804                 srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
11805                 srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
11806                 srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
11807                 srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
11808                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
11809                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
11810                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
11811                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
11812                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
11813                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
11814                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
11815                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
11816                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
11817                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
11818                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
11819                 srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
11820                 srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
11821                 srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
11822                 srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
11823                 srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
11824                 srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
11825                 srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
11826                 srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
11827                 srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
11828                 srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
11829                 srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
11830                 srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
11831                 srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
11832                 srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
11833         ])
11834         pkt.ReqCondSizeVariable()
11835         pkt.CompletionCodes([0x0000, 0x7f00, 0x8001, 0x8101, 0x8401, 0x8501,
11836                              0x8701, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
11837                              0x9804, 0x9b03, 0x9c03, 0xa500, 0xa802, 0xbf00, 0xfd00, 0xff16])
11838         # 2222/5702, 87/02
11839         pkt = NCP(0x5702, "Initialize Search", 'file', has_length=0)
11840         pkt.Request( (18,272), [
11841                 rec( 8, 1, NameSpace  ),
11842                 rec( 9, 1, Reserved ),
11843                 rec( 10, 1, VolumeNumber ),
11844                 rec( 11, 4, DirectoryBase ),
11845                 rec( 15, 1, HandleFlag ),
11846                 rec( 16, 1, PathCount, var="x" ),
11847                 rec( 17, (1,255), Path, repeat="x" ),
11848         ], info_str=(Path, "Set Search Pointer to: %s", "/%s"))
11849         pkt.Reply(17, [
11850                 rec( 8, 1, VolumeNumber ),
11851                 rec( 9, 4, DirectoryNumber ),
11852                 rec( 13, 4, DirectoryEntryNumber ),
11853         ])
11854         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11855                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11856                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11857         # 2222/5703, 87/03
11858         pkt = NCP(0x5703, "Search for File or Subdirectory", 'file', has_length=0)
11859         pkt.Request((26, 280), [
11860                 rec( 8, 1, NameSpace  ),
11861                 rec( 9, 1, DataStream ),
11862                 rec( 10, 2, SearchAttributesLow ),
11863                 rec( 12, 2, ReturnInfoMask ),
11864                 rec( 14, 2, ExtendedInfo ),
11865                 rec( 16, 9, SearchSequence ),
11866                 rec( 25, (1,255), SearchPattern ),
11867         ], info_str=(SearchPattern, "Search for: %s", "/%s"))
11868         pkt.Reply( NO_LENGTH_CHECK, [
11869                 rec( 8, 9, SearchSequence ),
11870                 rec( 17, 1, Reserved ),
11871                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
11872                 srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
11873                 srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
11874                 srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
11875                 srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
11876                 srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
11877                 srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
11878                 srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
11879                 srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
11880                 srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
11881                 srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
11882                 srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
11883                 srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
11884                 srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
11885                 srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
11886                 srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
11887                 srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
11888                 srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
11889                 srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
11890                 srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
11891                 srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
11892                 srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
11893                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
11894                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
11895                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
11896                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
11897                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
11898                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
11899                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
11900                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
11901                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
11902                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
11903                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
11904                 srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
11905                 srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
11906                 srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
11907                 srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
11908                 srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
11909                 srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
11910                 srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
11911                 srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
11912                 srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
11913                 srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
11914                 srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
11915                 srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
11916                 srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
11917                 srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
11918         ])
11919         pkt.ReqCondSizeVariable()
11920         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11921                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11922                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11923         # 2222/5704, 87/04
11924         pkt = NCP(0x5704, "Rename Or Move a File or Subdirectory", 'file', has_length=0)
11925         pkt.Request((28, 536), [
11926                 rec( 8, 1, NameSpace  ),
11927                 rec( 9, 1, RenameFlag ),
11928                 rec( 10, 2, SearchAttributesLow ),
11929                 rec( 12, 1, VolumeNumber ),
11930                 rec( 13, 4, DirectoryBase ),
11931                 rec( 17, 1, HandleFlag ),
11932                 rec( 18, 1, PathCount, var="x" ),
11933                 rec( 19, 1, VolumeNumber ),
11934                 rec( 20, 4, DirectoryBase ),
11935                 rec( 24, 1, HandleFlag ),
11936                 rec( 25, 1, PathCount, var="y" ),
11937                 rec( 26, (1, 255), Path, repeat="x" ),
11938                 rec( -1, (1,255), Path, repeat="y" ),
11939         ], info_str=(Path, "Rename or Move: %s", "/%s"))
11940         pkt.Reply(8)
11941         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11942                              0x8701, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9200, 0x9600,
11943                              0x9804, 0x9a00, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11944         # 2222/5705, 87/05
11945         pkt = NCP(0x5705, "Scan File or Subdirectory for Trustees", 'file', has_length=0)
11946         pkt.Request((24, 278), [
11947                 rec( 8, 1, NameSpace  ),
11948                 rec( 9, 1, Reserved ),
11949                 rec( 10, 2, SearchAttributesLow ),
11950                 rec( 12, 4, SequenceNumber ),
11951                 rec( 16, 1, VolumeNumber ),
11952                 rec( 17, 4, DirectoryBase ),
11953                 rec( 21, 1, HandleFlag ),
11954                 rec( 22, 1, PathCount, var="x" ),
11955                 rec( 23, (1, 255), Path, repeat="x" ),
11956         ], info_str=(Path, "Scan Trustees for: %s", "/%s"))
11957         pkt.Reply(20, [
11958                 rec( 8, 4, SequenceNumber ),
11959                 rec( 12, 2, ObjectIDCount, var="x" ),
11960                 rec( 14, 6, TrusteeStruct, repeat="x" ),
11961         ])
11962         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
11963                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
11964                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
11965         # 2222/5706, 87/06
11966         pkt = NCP(0x5706, "Obtain File or SubDirectory Information", 'file', has_length=0)
11967         pkt.Request((24,278), [
11968                 rec( 10, 1, SrcNameSpace ),
11969                 rec( 11, 1, DestNameSpace ),
11970                 rec( 12, 2, SearchAttributesLow ),
11971                 rec( 14, 2, ReturnInfoMask, LE ),
11972                 rec( 16, 2, ExtendedInfo ),
11973                 rec( 18, 1, VolumeNumber ),
11974                 rec( 19, 4, DirectoryBase ),
11975                 rec( 23, 1, HandleFlag ),
11976                 rec( 24, 1, PathCount, var="x" ),
11977                 rec( 25, (1,255), Path, repeat="x",),
11978         ], info_str=(Path, "Obtain Info for: %s", "/%s"))
11979         pkt.Reply(NO_LENGTH_CHECK, [
11980             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
11981             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
11982             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
11983             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
11984             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
11985             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
11986             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
11987             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
11988             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
11989             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
11990             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
11991             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
11992             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
11993             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
11994             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
11995             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
11996             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
11997             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
11998             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
11999             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12000             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12001             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12002             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12003             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12004             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12005             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12006             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12007             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12008             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12009             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12010             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12011             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12012             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12013             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
12014             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12015             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
12016             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
12017             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
12018             srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
12019             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
12020             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
12021             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
12022             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
12023             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
12024             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12025             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
12026             srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12027         ])
12028         pkt.ReqCondSizeVariable()
12029         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12030                              0x8700, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
12031                              0x9804, 0x9b03, 0x9c03, 0xa802, 0xbf00, 0xfd00, 0xff16])
12032         # 2222/5707, 87/07
12033         pkt = NCP(0x5707, "Modify File or Subdirectory DOS Information", 'file', has_length=0)
12034         pkt.Request((62,316), [
12035                 rec( 8, 1, NameSpace ),
12036                 rec( 9, 1, Reserved ),
12037                 rec( 10, 2, SearchAttributesLow ),
12038                 rec( 12, 2, ModifyDOSInfoMask ),
12039                 rec( 14, 2, Reserved2 ),
12040                 rec( 16, 2, AttributesDef16 ),
12041                 rec( 18, 1, FileMode ),
12042                 rec( 19, 1, FileExtendedAttributes ),
12043                 rec( 20, 2, CreationDate ),
12044                 rec( 22, 2, CreationTime ),
12045                 rec( 24, 4, CreatorID, BE ),
12046                 rec( 28, 2, ModifiedDate ),
12047                 rec( 30, 2, ModifiedTime ),
12048                 rec( 32, 4, ModifierID, BE ),
12049                 rec( 36, 2, ArchivedDate ),
12050                 rec( 38, 2, ArchivedTime ),
12051                 rec( 40, 4, ArchiverID, BE ),
12052                 rec( 44, 2, LastAccessedDate ),
12053                 rec( 46, 2, InheritedRightsMask ),
12054                 rec( 48, 2, InheritanceRevokeMask ),
12055                 rec( 50, 4, MaxSpace ),
12056                 rec( 54, 1, VolumeNumber ),
12057                 rec( 55, 4, DirectoryBase ),
12058                 rec( 59, 1, HandleFlag ),
12059                 rec( 60, 1, PathCount, var="x" ),
12060                 rec( 61, (1,255), Path, repeat="x" ),
12061         ], info_str=(Path, "Modify DOS Information for: %s", "/%s"))
12062         pkt.Reply(8)
12063         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12064                              0x8701, 0x8c01, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
12065                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12066         # 2222/5708, 87/08
12067         pkt = NCP(0x5708, "Delete a File or Subdirectory", 'file', has_length=0)
12068         pkt.Request((20,274), [
12069                 rec( 8, 1, NameSpace ),
12070                 rec( 9, 1, Reserved ),
12071                 rec( 10, 2, SearchAttributesLow ),
12072                 rec( 12, 1, VolumeNumber ),
12073                 rec( 13, 4, DirectoryBase ),
12074                 rec( 17, 1, HandleFlag ),
12075                 rec( 18, 1, PathCount, var="x" ),
12076                 rec( 19, (1,255), Path, repeat="x" ),
12077         ], info_str=(Path, "Delete a File or Subdirectory: %s", "/%s"))
12078         pkt.Reply(8)
12079         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12080                              0x8701, 0x8900, 0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
12081                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12082         # 2222/5709, 87/09
12083         pkt = NCP(0x5709, "Set Short Directory Handle", 'file', has_length=0)
12084         pkt.Request((20,274), [
12085                 rec( 8, 1, NameSpace ),
12086                 rec( 9, 1, DataStream ),
12087                 rec( 10, 1, DestDirHandle ),
12088                 rec( 11, 1, Reserved ),
12089                 rec( 12, 1, VolumeNumber ),
12090                 rec( 13, 4, DirectoryBase ),
12091                 rec( 17, 1, HandleFlag ),
12092                 rec( 18, 1, PathCount, var="x" ),
12093                 rec( 19, (1,255), Path, repeat="x" ),
12094         ], info_str=(Path, "Set Short Directory Handle to: %s", "/%s"))
12095         pkt.Reply(8)
12096         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12097                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12098                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12099         # 2222/570A, 87/10
12100         pkt = NCP(0x570A, "Add Trustee Set to File or Subdirectory", 'file', has_length=0)
12101         pkt.Request((31,285), [
12102                 rec( 8, 1, NameSpace ),
12103                 rec( 9, 1, Reserved ),
12104                 rec( 10, 2, SearchAttributesLow ),
12105                 rec( 12, 2, AccessRightsMaskWord ),
12106                 rec( 14, 2, ObjectIDCount, var="y" ),
12107                 rec( 16, 1, VolumeNumber ),
12108                 rec( 17, 4, DirectoryBase ),
12109                 rec( 21, 1, HandleFlag ),
12110                 rec( 22, 1, PathCount, var="x" ),
12111                 rec( 23, (1,255), Path, repeat="x" ),
12112                 rec( -1, 7, TrusteeStruct, repeat="y" ),
12113         ], info_str=(Path, "Add Trustee Set to: %s", "/%s"))
12114         pkt.Reply(8)
12115         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12116                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12117                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfc01, 0xfd00, 0xff16])
12118         # 2222/570B, 87/11
12119         pkt = NCP(0x570B, "Delete Trustee Set from File or SubDirectory", 'file', has_length=0)
12120         pkt.Request((27,281), [
12121                 rec( 8, 1, NameSpace ),
12122                 rec( 9, 1, Reserved ),
12123                 rec( 10, 2, ObjectIDCount, var="y" ),
12124                 rec( 12, 1, VolumeNumber ),
12125                 rec( 13, 4, DirectoryBase ),
12126                 rec( 17, 1, HandleFlag ),
12127                 rec( 18, 1, PathCount, var="x" ),
12128                 rec( 19, (1,255), Path, repeat="x" ),
12129                 rec( -1, 7, TrusteeStruct, repeat="y" ),
12130         ], info_str=(Path, "Delete Trustee Set from: %s", "/%s"))
12131         pkt.Reply(8)
12132         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12133                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12134                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12135         # 2222/570C, 87/12
12136         pkt = NCP(0x570C, "Allocate Short Directory Handle", 'file', has_length=0)
12137         pkt.Request((20,274), [
12138                 rec( 8, 1, NameSpace ),
12139                 rec( 9, 1, Reserved ),
12140                 rec( 10, 2, AllocateMode ),
12141                 rec( 12, 1, VolumeNumber ),
12142                 rec( 13, 4, DirectoryBase ),
12143                 rec( 17, 1, HandleFlag ),
12144                 rec( 18, 1, PathCount, var="x" ),
12145                 rec( 19, (1,255), Path, repeat="x" ),
12146         ], info_str=(Path, "Allocate Short Directory Handle to: %s", "/%s"))
12147         pkt.Reply(14, [
12148                 rec( 8, 1, DirHandle ),
12149                 rec( 9, 1, VolumeNumber ),
12150                 rec( 10, 4, Reserved4 ),
12151         ])
12152         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12153                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12154                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12155         # 2222/5710, 87/16
12156         pkt = NCP(0x5710, "Scan Salvageable Files", 'file', has_length=0)
12157         pkt.Request((26,280), [
12158                 rec( 8, 1, NameSpace ),
12159                 rec( 9, 1, DataStream ),
12160                 rec( 10, 2, ReturnInfoMask ),
12161                 rec( 12, 2, ExtendedInfo ),
12162                 rec( 14, 4, SequenceNumber ),
12163                 rec( 18, 1, VolumeNumber ),
12164                 rec( 19, 4, DirectoryBase ),
12165                 rec( 23, 1, HandleFlag ),
12166                 rec( 24, 1, PathCount, var="x" ),
12167                 rec( 25, (1,255), Path, repeat="x" ),
12168         ], info_str=(Path, "Scan for Deleted Files in: %s", "/%s"))
12169         pkt.Reply(NO_LENGTH_CHECK, [
12170                 rec( 8, 4, SequenceNumber ),
12171                 rec( 12, 2, DeletedTime ),
12172                 rec( 14, 2, DeletedDate ),
12173                 rec( 16, 4, DeletedID, BE ),
12174                 rec( 20, 4, VolumeID ),
12175                 rec( 24, 4, DirectoryBase ),
12176                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12177                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12178                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12179                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12180                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12181                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12182                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12183                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12184                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12185                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12186                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12187                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12188                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12189                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12190                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12191                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12192                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12193                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12194                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12195                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12196                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12197                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12198                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12199                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12200                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12201                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12202                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12203                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12204                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12205                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12206                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12207                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12208                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12209                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12210                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12211         ])
12212         pkt.ReqCondSizeVariable()
12213         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12214                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12215                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12216         # 2222/5711, 87/17
12217         pkt = NCP(0x5711, "Recover Salvageable File", 'file', has_length=0)
12218         pkt.Request((23,277), [
12219                 rec( 8, 1, NameSpace ),
12220                 rec( 9, 1, Reserved ),
12221                 rec( 10, 4, SequenceNumber ),
12222                 rec( 14, 4, VolumeID ),
12223                 rec( 18, 4, DirectoryBase ),
12224                 rec( 22, (1,255), FileName ),
12225         ], info_str=(FileName, "Recover Deleted File: %s", ", %s"))
12226         pkt.Reply(8)
12227         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12228                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12229                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12230         # 2222/5712, 87/18
12231         pkt = NCP(0x5712, "Purge Salvageable Files", 'file', has_length=0)
12232         pkt.Request(22, [
12233                 rec( 8, 1, NameSpace ),
12234                 rec( 9, 1, Reserved ),
12235                 rec( 10, 4, SequenceNumber ),
12236                 rec( 14, 4, VolumeID ),
12237                 rec( 18, 4, DirectoryBase ),
12238         ])
12239         pkt.Reply(8)
12240         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12241                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12242                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12243         # 2222/5713, 87/19
12244         pkt = NCP(0x5713, "Get Name Space Information", 'file', has_length=0)
12245         pkt.Request(18, [
12246                 rec( 8, 1, SrcNameSpace ),
12247                 rec( 9, 1, DestNameSpace ),
12248                 rec( 10, 1, Reserved ),
12249                 rec( 11, 1, VolumeNumber ),
12250                 rec( 12, 4, DirectoryBase ),
12251                 rec( 16, 2, NamesSpaceInfoMask ),
12252         ])
12253         pkt.Reply(NO_LENGTH_CHECK, [
12254             srec( FileNameStruct, req_cond="ncp.ns_info_mask_modify == TRUE" ),
12255             srec( FileAttributesStruct, req_cond="ncp.ns_info_mask_fatt == TRUE" ),
12256             srec( CreationDateStruct, req_cond="ncp.ns_info_mask_cdate == TRUE" ),
12257             srec( CreationTimeStruct, req_cond="ncp.ns_info_mask_ctime == TRUE" ),
12258             srec( OwnerIDStruct, req_cond="ncp.ns_info_mask_owner == TRUE" ),
12259             srec( ArchiveDateStruct, req_cond="ncp.ns_info_mask_adate == TRUE" ),
12260             srec( ArchiveTimeStruct, req_cond="ncp.ns_info_mask_atime == TRUE" ),
12261             srec( ArchiveIdStruct, req_cond="ncp.ns_info_mask_aid == TRUE" ),
12262             srec( UpdateDateStruct, req_cond="ncp.ns_info_mask_udate == TRUE" ),
12263             srec( UpdateTimeStruct, req_cond="ncp.ns_info_mask_utime == TRUE" ),
12264             srec( UpdateIDStruct, req_cond="ncp.ns_info_mask_uid == TRUE" ),
12265             srec( LastAccessStruct, req_cond="ncp.ns_info_mask_acc_date == TRUE" ),
12266             srec( RightsInfoStruct, req_cond="ncp.ns_info_mask_max_acc_mask == TRUE" ),
12267         ])
12268         pkt.ReqCondSizeVariable()
12269         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12270                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12271                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12272         # 2222/5714, 87/20
12273         pkt = NCP(0x5714, "Search for File or Subdirectory Set", 'file', has_length=0)
12274         pkt.Request((28, 282), [
12275                 rec( 8, 1, NameSpace  ),
12276                 rec( 9, 1, DataStream ),
12277                 rec( 10, 2, SearchAttributesLow ),
12278                 rec( 12, 2, ReturnInfoMask ),
12279                 rec( 14, 2, ExtendedInfo ),
12280                 rec( 16, 2, ReturnInfoCount ),
12281                 rec( 18, 9, SearchSequence ),
12282                 rec( 27, (1,255), SearchPattern ),
12283         ])
12284         pkt.Reply(NO_LENGTH_CHECK, [
12285                 rec( 8, 9, SearchSequence ),
12286                 rec( 17, 1, MoreFlag ),
12287                 rec( 18, 2, InfoCount ),
12288             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12289             srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12290             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12291             srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12292             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12293             srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12294             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12295             srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12296             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12297             srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12298             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12299             srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12300             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12301             srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12302             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12303             srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12304             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12305             srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12306             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12307             srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12308             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12309             srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12310             srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12311             srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12312             srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12313             srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12314             srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12315             srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12316             srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12317             srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12318             srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12319             srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12320             srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12321             srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
12322             srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12323             srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
12324             srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
12325             srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
12326             srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
12327             srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
12328             srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
12329             srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
12330             srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
12331             srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
12332             srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12333             srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
12334             srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12335         ])
12336         pkt.ReqCondSizeVariable()
12337         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12338                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12339                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12340         # 2222/5715, 87/21
12341         pkt = NCP(0x5715, "Get Path String from Short Directory Handle", 'file', has_length=0)
12342         pkt.Request(10, [
12343                 rec( 8, 1, NameSpace ),
12344                 rec( 9, 1, DirHandle ),
12345         ])
12346         pkt.Reply((9,263), [
12347                 rec( 8, (1,255), Path ),
12348         ])
12349         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12350                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12351                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
12352         # 2222/5716, 87/22
12353         pkt = NCP(0x5716, "Generate Directory Base and Volume Number", 'file', has_length=0)
12354         pkt.Request((20,274), [
12355                 rec( 8, 1, SrcNameSpace ),
12356                 rec( 9, 1, DestNameSpace ),
12357                 rec( 10, 2, dstNSIndicator ),
12358                 rec( 12, 1, VolumeNumber ),
12359                 rec( 13, 4, DirectoryBase ),
12360                 rec( 17, 1, HandleFlag ),
12361                 rec( 18, 1, PathCount, var="x" ),
12362                 rec( 19, (1,255), Path, repeat="x" ),
12363         ], info_str=(Path, "Get Volume and Directory Base from: %s", "/%s"))
12364         pkt.Reply(17, [
12365                 rec( 8, 4, DirectoryBase ),
12366                 rec( 12, 4, DOSDirectoryBase ),
12367                 rec( 16, 1, VolumeNumber ),
12368         ])
12369         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12370                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12371                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12372         # 2222/5717, 87/23
12373         pkt = NCP(0x5717, "Query Name Space Information Format", 'file', has_length=0)
12374         pkt.Request(10, [
12375                 rec( 8, 1, NameSpace ),
12376                 rec( 9, 1, VolumeNumber ),
12377         ])
12378         pkt.Reply(58, [
12379                 rec( 8, 4, FixedBitMask ),
12380                 rec( 12, 4, VariableBitMask ),
12381                 rec( 16, 4, HugeBitMask ),
12382                 rec( 20, 2, FixedBitsDefined ),
12383                 rec( 22, 2, VariableBitsDefined ),
12384                 rec( 24, 2, HugeBitsDefined ),
12385                 rec( 26, 32, FieldsLenTable ),
12386         ])
12387         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12388                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12389                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12390         # 2222/5718, 87/24
12391         pkt = NCP(0x5718, "Get Name Spaces Loaded List from Volume Number", 'file', has_length=0)
12392         pkt.Request(10, [
12393                 rec( 8, 1, Reserved ),
12394                 rec( 9, 1, VolumeNumber ),
12395         ])
12396         pkt.Reply(11, [
12397                 rec( 8, 2, NumberOfNSLoaded, var="x" ),
12398                 rec( 10, 1, NameSpace, repeat="x" ),
12399         ])
12400         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12401                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12402                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12403         # 2222/5719, 87/25
12404         pkt = NCP(0x5719, "Set Name Space Information", 'file', has_length=0)
12405         pkt.Request(531, [
12406                 rec( 8, 1, SrcNameSpace ),
12407                 rec( 9, 1, DestNameSpace ),
12408                 rec( 10, 1, VolumeNumber ),
12409                 rec( 11, 4, DirectoryBase ),
12410                 rec( 15, 2, NamesSpaceInfoMask ),
12411                 rec( 17, 2, Reserved2 ),
12412                 rec( 19, 512, NSSpecificInfo ),
12413         ])
12414         pkt.Reply(8)
12415         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12416                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12417                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12418                              0xff16])
12419         # 2222/571A, 87/26
12420         pkt = NCP(0x571A, "Get Huge Name Space Information", 'file', has_length=0)
12421         pkt.Request(34, [
12422                 rec( 8, 1, NameSpace ),
12423                 rec( 9, 1, VolumeNumber ),
12424                 rec( 10, 4, DirectoryBase ),
12425                 rec( 14, 4, HugeBitMask ),
12426                 rec( 18, 16, HugeStateInfo ),
12427         ])
12428         pkt.Reply((25,279), [
12429                 rec( 8, 16, NextHugeStateInfo ),
12430                 rec( 24, (1,255), HugeData ),
12431         ])
12432         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12433                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12434                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12435                              0xff16])
12436         # 2222/571B, 87/27
12437         pkt = NCP(0x571B, "Set Huge Name Space Information", 'file', has_length=0)
12438         pkt.Request((35,289), [
12439                 rec( 8, 1, NameSpace ),
12440                 rec( 9, 1, VolumeNumber ),
12441                 rec( 10, 4, DirectoryBase ),
12442                 rec( 14, 4, HugeBitMask ),
12443                 rec( 18, 16, HugeStateInfo ),
12444                 rec( 34, (1,255), HugeData ),
12445         ])
12446         pkt.Reply(28, [
12447                 rec( 8, 16, NextHugeStateInfo ),
12448                 rec( 24, 4, HugeDataUsed ),
12449         ])
12450         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12451                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12452                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12453                              0xff16])
12454         # 2222/571C, 87/28
12455         pkt = NCP(0x571C, "Get Full Path String", 'file', has_length=0)
12456         pkt.Request((28,282), [
12457                 rec( 8, 1, SrcNameSpace ),
12458                 rec( 9, 1, DestNameSpace ),
12459                 rec( 10, 2, PathCookieFlags ),
12460                 rec( 12, 4, Cookie1 ),
12461                 rec( 16, 4, Cookie2 ),
12462                 rec( 20, 1, VolumeNumber ),
12463                 rec( 21, 4, DirectoryBase ),
12464                 rec( 25, 1, HandleFlag ),
12465                 rec( 26, 1, PathCount, var="x" ),
12466                 rec( 27, (1,255), Path, repeat="x" ),
12467         ], info_str=(Path, "Get Full Path from: %s", "/%s"))
12468         pkt.Reply((23,277), [
12469                 rec( 8, 2, PathCookieFlags ),
12470                 rec( 10, 4, Cookie1 ),
12471                 rec( 14, 4, Cookie2 ),
12472                 rec( 18, 2, PathComponentSize ),
12473                 rec( 20, 2, PathComponentCount, var='x' ),
12474                 rec( 22, (1,255), Path, repeat='x' ),
12475         ])
12476         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12477                              0x8701, 0x8b00, 0x8d00, 0x8f00, 0x9001,
12478                              0x9600, 0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12479                              0xff16])
12480         # 2222/571D, 87/29
12481         pkt = NCP(0x571D, "Get Effective Directory Rights", 'file', has_length=0)
12482         pkt.Request((24, 278), [
12483                 rec( 8, 1, NameSpace  ),
12484                 rec( 9, 1, DestNameSpace ),
12485                 rec( 10, 2, SearchAttributesLow ),
12486                 rec( 12, 2, ReturnInfoMask ),
12487                 rec( 14, 2, ExtendedInfo ),
12488                 rec( 16, 1, VolumeNumber ),
12489                 rec( 17, 4, DirectoryBase ),
12490                 rec( 21, 1, HandleFlag ),
12491                 rec( 22, 1, PathCount, var="x" ),
12492                 rec( 23, (1,255), Path, repeat="x" ),
12493         ], info_str=(Path, "Get Effective Rights for: %s", "/%s"))
12494         pkt.Reply(NO_LENGTH_CHECK, [
12495                 rec( 8, 2, EffectiveRights ),
12496                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12497                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12498                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12499                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12500                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12501                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12502                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12503                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12504                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12505                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12506                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12507                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12508                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12509                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12510                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12511                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12512                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12513                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12514                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12515                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12516                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12517                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12518                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12519                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12520                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12521                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12522                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12523                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12524                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12525                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12526                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12527                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12528                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12529                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12530                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12531         ])
12532         pkt.ReqCondSizeVariable()
12533         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12534                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12535                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12536         # 2222/571E, 87/30
12537         pkt = NCP(0x571E, "Open/Create File or Subdirectory", 'file', has_length=0)
12538         pkt.Request((34, 288), [
12539                 rec( 8, 1, NameSpace  ),
12540                 rec( 9, 1, DataStream ),
12541                 rec( 10, 1, OpenCreateMode ),
12542                 rec( 11, 1, Reserved ),
12543                 rec( 12, 2, SearchAttributesLow ),
12544                 rec( 14, 2, Reserved2 ),
12545                 rec( 16, 2, ReturnInfoMask ),
12546                 rec( 18, 2, ExtendedInfo ),
12547                 rec( 20, 4, AttributesDef32 ),
12548                 rec( 24, 2, DesiredAccessRights ),
12549                 rec( 26, 1, VolumeNumber ),
12550                 rec( 27, 4, DirectoryBase ),
12551                 rec( 31, 1, HandleFlag ),
12552                 rec( 32, 1, PathCount, var="x" ),
12553                 rec( 33, (1,255), Path, repeat="x" ),
12554         ], info_str=(Path, "Open or Create File: %s", "/%s"))
12555         pkt.Reply(NO_LENGTH_CHECK, [
12556                 rec( 8, 4, FileHandle, BE ),
12557                 rec( 12, 1, OpenCreateAction ),
12558                 rec( 13, 1, Reserved ),
12559                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12560                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12561                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12562                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12563                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12564                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12565                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12566                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12567                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12568                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12569                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12570                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12571                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12572                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12573                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12574                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12575                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12576                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12577                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12578                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12579                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12580                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12581                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12582                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12583                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12584                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12585                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12586                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12587                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12588                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12589                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12590                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12591                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12592                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12593                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12594         ])
12595         pkt.ReqCondSizeVariable()
12596         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12597                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12598                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12599         # 2222/571F, 87/31
12600         pkt = NCP(0x571F, "Get File Information", 'file', has_length=0)
12601         pkt.Request(16, [
12602                 rec( 8, 6, FileHandle  ),
12603                 rec( 14, 1, HandleInfoLevel ),
12604                 rec( 15, 1, NameSpace ),
12605         ])
12606         pkt.Reply(NO_LENGTH_CHECK, [
12607                 rec( 8, 4, VolumeNumberLong ),
12608                 rec( 12, 4, DirectoryBase ),
12609                 srec(HandleInfoLevel0, req_cond="ncp.handle_info_level==0x00" ),
12610                 srec(HandleInfoLevel1, req_cond="ncp.handle_info_level==0x01" ),
12611                 srec(HandleInfoLevel2, req_cond="ncp.handle_info_level==0x02" ),
12612                 srec(HandleInfoLevel3, req_cond="ncp.handle_info_level==0x03" ),
12613                 srec(HandleInfoLevel4, req_cond="ncp.handle_info_level==0x04" ),
12614                 srec(HandleInfoLevel5, req_cond="ncp.handle_info_level==0x05" ),
12615         ])
12616         pkt.ReqCondSizeVariable()
12617         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12618                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12619                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12620         # 2222/5720, 87/32
12621         pkt = NCP(0x5720, "Open/Create File or Subdirectory with Callback", 'file', has_length=0)
12622         pkt.Request((30, 284), [
12623                 rec( 8, 1, NameSpace  ),
12624                 rec( 9, 1, OpenCreateMode ),
12625                 rec( 10, 2, SearchAttributesLow ),
12626                 rec( 12, 2, ReturnInfoMask ),
12627                 rec( 14, 2, ExtendedInfo ),
12628                 rec( 16, 4, AttributesDef32 ),
12629                 rec( 20, 2, DesiredAccessRights ),
12630                 rec( 22, 1, VolumeNumber ),
12631                 rec( 23, 4, DirectoryBase ),
12632                 rec( 27, 1, HandleFlag ),
12633                 rec( 28, 1, PathCount, var="x" ),
12634                 rec( 29, (1,255), Path, repeat="x" ),
12635         ], info_str=(Path, "Open or Create with Op-Lock: %s", "/%s"))
12636         pkt.Reply( NO_LENGTH_CHECK, [
12637                 rec( 8, 4, FileHandle, BE ),
12638                 rec( 12, 1, OpenCreateAction ),
12639                 rec( 13, 1, OCRetFlags ),
12640                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12641                 srec( PadDSSpaceAllocate, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12642                 srec( AttributesStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12643                 srec( PadAttributes, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12644                 srec( DataStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12645                 srec( PadDataStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12646                 srec( TotalStreamSizeStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12647                 srec( PadTotalStreamSize, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12648                 srec( CreationInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12649                 srec( PadCreationInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12650                 srec( ModifyInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12651                 srec( PadModifyInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12652                 srec( ArchiveInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12653                 srec( PadArchiveInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12654                 srec( RightsInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12655                 srec( PadRightsInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12656                 srec( DirEntryStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12657                 srec( PadDirEntry, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12658                 srec( EAInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12659                 srec( PadEAInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12660                 srec( NSInfoStruct, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12661                 srec( PadNSInfo, req_cond="(ncp.ret_info_mask != 0x0000) && (ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12662                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12663                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12664                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12665                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12666                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12667                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12668                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12669                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12670                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12671                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12672                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12673                 srec( ReferenceIDStruct, req_cond="ncp.ret_info_mask_id == 1" ),
12674                 srec( NSAttributeStruct, req_cond="ncp.ret_info_mask_ns_attr == 1" ),
12675                 srec( DStreamActual, req_cond="ncp.ret_info_mask_actual == 1" ),
12676                 srec( DStreamLogical, req_cond="ncp.ret_info_mask_logical == 1" ),
12677                 srec( LastUpdatedInSecondsStruct, req_cond="ncp.ext_info_update == 1" ),
12678                 srec( DOSNameStruct, req_cond="ncp.ext_info_dos_name == 1" ),
12679                 srec( FlushTimeStruct, req_cond="ncp.ext_info_flush == 1" ),
12680                 srec( ParentBaseIDStruct, req_cond="ncp.ext_info_parental == 1" ),
12681                 srec( MacFinderInfoStruct, req_cond="ncp.ext_info_mac_finder == 1" ),
12682                 srec( SiblingCountStruct, req_cond="ncp.ext_info_sibling == 1" ),
12683                 srec( EffectiveRightsStruct, req_cond="ncp.ext_info_effective == 1" ),
12684                 srec( MacTimeStruct, req_cond="ncp.ext_info_mac_date == 1" ),
12685                 srec( LastAccessedTimeStruct, req_cond="ncp.ext_info_access == 1" ),
12686                 srec( FileNameStruct, req_cond="ncp.ret_info_mask_fname == 1" ),
12687         ])
12688         pkt.ReqCondSizeVariable()
12689         pkt.CompletionCodes([0x0000, 0x7f00, 0x8000, 0x8101, 0x8401, 0x8501,
12690                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12691                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12692         # 2222/5721, 87/33
12693         pkt = NCP(0x5721, "Open/Create File or Subdirectory II with Callback", 'file', has_length=0)
12694         pkt.Request((34, 288), [
12695                 rec( 8, 1, NameSpace  ),
12696                 rec( 9, 1, DataStream ),
12697                 rec( 10, 1, OpenCreateMode ),
12698                 rec( 11, 1, Reserved ),
12699                 rec( 12, 2, SearchAttributesLow ),
12700                 rec( 14, 2, Reserved2 ),
12701                 rec( 16, 2, ReturnInfoMask ),
12702                 rec( 18, 2, ExtendedInfo ),
12703                 rec( 20, 4, AttributesDef32 ),
12704                 rec( 24, 2, DesiredAccessRights ),
12705                 rec( 26, 1, VolumeNumber ),
12706                 rec( 27, 4, DirectoryBase ),
12707                 rec( 31, 1, HandleFlag ),
12708                 rec( 32, 1, PathCount, var="x" ),
12709                 rec( 33, (1,255), Path, repeat="x" ),
12710         ], info_str=(FilePath, "Open or Create II with Op-Lock: %s", "/%s"))
12711         pkt.Reply((91,345), [
12712                 rec( 8, 4, FileHandle ),
12713                 rec( 12, 1, OpenCreateAction ),
12714                 rec( 13, 1, OCRetFlags ),
12715                 rec( 14, 4, DataStreamSpaceAlloc ),
12716                 rec( 18, 6, AttributesStruct ),
12717                 rec( 24, 4, DataStreamSize ),
12718                 rec( 28, 4, TtlDSDskSpaceAlloc ),
12719                 rec( 32, 2, NumberOfDataStreams ),
12720                 rec( 34, 2, CreationTime ),
12721                 rec( 36, 2, CreationDate ),
12722                 rec( 38, 4, CreatorID, BE ),
12723                 rec( 42, 2, ModifiedTime ),
12724                 rec( 44, 2, ModifiedDate ),
12725                 rec( 46, 4, ModifierID, BE ),
12726                 rec( 50, 2, LastAccessedDate ),
12727                 rec( 52, 2, ArchivedTime ),
12728                 rec( 54, 2, ArchivedDate ),
12729                 rec( 56, 4, ArchiverID, BE ),
12730                 rec( 60, 2, InheritedRightsMask ),
12731                 rec( 62, 4, DirectoryEntryNumber ),
12732                 rec( 66, 4, DOSDirectoryEntryNumber ),
12733                 rec( 70, 4, VolumeNumberLong ),
12734                 rec( 74, 4, EADataSize ),
12735                 rec( 78, 4, EACount ),
12736                 rec( 82, 4, EAKeySize ),
12737                 rec( 86, 1, CreatorNameSpaceNumber ),
12738                 rec( 87, 3, Reserved3 ),
12739                 rec( 90, (1,255), FileName ),
12740         ])
12741         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12742                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12743                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12744         # 2222/5722, 87/34
12745         pkt = NCP(0x5722, "Open CallBack Control (Op-Lock)", 'file', has_length=0)
12746         pkt.Request(13, [
12747                 rec( 10, 4, CCFileHandle, BE ),
12748                 rec( 14, 1, CCFunction ),
12749         ])
12750         pkt.Reply(8)
12751         pkt.CompletionCodes([0x0000, 0x8800, 0xff16])
12752         # 2222/5723, 87/35
12753         pkt = NCP(0x5723, "Modify DOS Attributes on a File or Subdirectory", 'file', has_length=0)
12754         pkt.Request((28, 282), [
12755                 rec( 8, 1, NameSpace  ),
12756                 rec( 9, 1, Flags ),
12757                 rec( 10, 2, SearchAttributesLow ),
12758                 rec( 12, 2, ReturnInfoMask ),
12759                 rec( 14, 2, ExtendedInfo ),
12760                 rec( 16, 4, AttributesDef32 ),
12761                 rec( 20, 1, VolumeNumber ),
12762                 rec( 21, 4, DirectoryBase ),
12763                 rec( 25, 1, HandleFlag ),
12764                 rec( 26, 1, PathCount, var="x" ),
12765                 rec( 27, (1,255), Path, repeat="x" ),
12766         ], info_str=(Path, "Modify DOS Attributes for: %s", "/%s"))
12767         pkt.Reply(24, [
12768                 rec( 8, 4, ItemsChecked ),
12769                 rec( 12, 4, ItemsChanged ),
12770                 rec( 16, 4, AttributeValidFlag ),
12771                 rec( 20, 4, AttributesDef32 ),
12772         ])
12773         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12774                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12775                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12776         # 2222/5724, 87/36
12777         pkt = NCP(0x5724, "Log File", 'file', has_length=0)
12778         pkt.Request((28, 282), [
12779                 rec( 8, 1, NameSpace  ),
12780                 rec( 9, 1, Reserved ),
12781                 rec( 10, 2, Reserved2 ),
12782                 rec( 12, 1, LogFileFlagLow ),
12783                 rec( 13, 1, LogFileFlagHigh ),
12784                 rec( 14, 2, Reserved2 ),
12785                 rec( 16, 4, WaitTime ),
12786                 rec( 20, 1, VolumeNumber ),
12787                 rec( 21, 4, DirectoryBase ),
12788                 rec( 25, 1, HandleFlag ),
12789                 rec( 26, 1, PathCount, var="x" ),
12790                 rec( 27, (1,255), Path, repeat="x" ),
12791         ], info_str=(Path, "Lock File: %s", "/%s"))
12792         pkt.Reply(8)
12793         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12794                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12795                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12796         # 2222/5725, 87/37
12797         pkt = NCP(0x5725, "Release File", 'file', has_length=0)
12798         pkt.Request((20, 274), [
12799                 rec( 8, 1, NameSpace  ),
12800                 rec( 9, 1, Reserved ),
12801                 rec( 10, 2, Reserved2 ),
12802                 rec( 12, 1, VolumeNumber ),
12803                 rec( 13, 4, DirectoryBase ),
12804                 rec( 17, 1, HandleFlag ),
12805                 rec( 18, 1, PathCount, var="x" ),
12806                 rec( 19, (1,255), Path, repeat="x" ),
12807         ], info_str=(Path, "Release Lock on: %s", "/%s"))
12808         pkt.Reply(8)
12809         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12810                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12811                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12812         # 2222/5726, 87/38
12813         pkt = NCP(0x5726, "Clear File", 'file', has_length=0)
12814         pkt.Request((20, 274), [
12815                 rec( 8, 1, NameSpace  ),
12816                 rec( 9, 1, Reserved ),
12817                 rec( 10, 2, Reserved2 ),
12818                 rec( 12, 1, VolumeNumber ),
12819                 rec( 13, 4, DirectoryBase ),
12820                 rec( 17, 1, HandleFlag ),
12821                 rec( 18, 1, PathCount, var="x" ),
12822                 rec( 19, (1,255), Path, repeat="x" ),
12823         ], info_str=(Path, "Clear File: %s", "/%s"))
12824         pkt.Reply(8)
12825         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12826                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12827                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12828         # 2222/5727, 87/39
12829         pkt = NCP(0x5727, "Get Directory Disk Space Restriction", 'file', has_length=0)
12830         pkt.Request((19, 273), [
12831                 rec( 8, 1, NameSpace  ),
12832                 rec( 9, 2, Reserved2 ),
12833                 rec( 11, 1, VolumeNumber ),
12834                 rec( 12, 4, DirectoryBase ),
12835                 rec( 16, 1, HandleFlag ),
12836                 rec( 17, 1, PathCount, var="x" ),
12837                 rec( 18, (1,255), Path, repeat="x" ),
12838         ], info_str=(Path, "Get Disk Space Restriction for: %s", "/%s"))
12839         pkt.Reply(18, [
12840                 rec( 8, 1, NumberOfEntries, var="x" ),
12841                 rec( 9, 9, SpaceStruct, repeat="x" ),
12842         ])
12843         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12844                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12845                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00,
12846                              0xff16])
12847         # 2222/5728, 87/40
12848         pkt = NCP(0x5728, "Search for File or Subdirectory Set (Extended Errors)", 'file', has_length=0)
12849         pkt.Request((28, 282), [
12850                 rec( 8, 1, NameSpace  ),
12851                 rec( 9, 1, DataStream ),
12852                 rec( 10, 2, SearchAttributesLow ),
12853                 rec( 12, 2, ReturnInfoMask ),
12854                 rec( 14, 2, ExtendedInfo ),
12855                 rec( 16, 2, ReturnInfoCount ),
12856                 rec( 18, 9, SearchSequence ),
12857                 rec( 27, (1,255), SearchPattern ),
12858         ], info_str=(SearchPattern, "Search for: %s", ", %s"))
12859         pkt.Reply(NO_LENGTH_CHECK, [
12860                 rec( 8, 9, SearchSequence ),
12861                 rec( 17, 1, MoreFlag ),
12862                 rec( 18, 2, InfoCount ),
12863                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 1)" ),
12864                 srec( PadDSSpaceAllocate, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_alloc == 0)" ),
12865                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 1)" ),
12866                 srec( PadAttributes, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_attr == 0)" ),
12867                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 1)" ),
12868                 srec( PadDataStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_size == 0)" ),
12869                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 1)" ),
12870                 srec( PadTotalStreamSize, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_tspace == 0)" ),
12871                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 1)" ),
12872                 srec( PadCreationInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_create == 0)" ),
12873                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 1)" ),
12874                 srec( PadModifyInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_mod == 0)" ),
12875                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 1)" ),
12876                 srec( PadArchiveInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_arch == 0)" ),
12877                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 1)" ),
12878                 srec( PadRightsInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_rights == 0)" ),
12879                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 1)" ),
12880                 srec( PadDirEntry, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_dir == 0)" ),
12881                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 1)" ),
12882                 srec( PadEAInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_eattr == 0)" ),
12883                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 1)" ),
12884                 srec( PadNSInfo, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_ns == 0)" ),
12885                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 0) && (ncp.ret_info_mask_fname == 1)" ),
12886                 srec( DSSpaceAllocateStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_alloc  == 1)" ),
12887                 srec( AttributesStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_attr == 1)" ),
12888                 srec( DataStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_size == 1)" ),
12889                 srec( TotalStreamSizeStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_tspace == 1)" ),
12890                 srec( CreationInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_create == 1)" ),
12891                 srec( ModifyInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_mod == 1)" ),
12892                 srec( ArchiveInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_arch == 1)" ),
12893                 srec( RightsInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_rights == 1)" ),
12894                 srec( DirEntryStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_dir == 1)" ),
12895                 srec( EAInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_eattr == 1)" ),
12896                 srec( NSInfoStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_ns == 1)" ),
12897                 srec( FileNameStruct, req_cond="(ncp.ext_info_newstyle == 1) && (ncp.ret_info_mask_fname == 1)" ),
12898         ])
12899         pkt.ReqCondSizeVariable()
12900         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12901                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12902                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12903         # 2222/5729, 87/41
12904         pkt = NCP(0x5729, "Scan Salvageable Files", 'file', has_length=0)
12905         pkt.Request((24,278), [
12906                 rec( 8, 1, NameSpace ),
12907                 rec( 9, 1, Reserved ),
12908                 rec( 10, 2, CtrlFlags, LE ),
12909                 rec( 12, 4, SequenceNumber ),
12910                 rec( 16, 1, VolumeNumber ),
12911                 rec( 17, 4, DirectoryBase ),
12912                 rec( 21, 1, HandleFlag ),
12913                 rec( 22, 1, PathCount, var="x" ),
12914                 rec( 23, (1,255), Path, repeat="x" ),
12915         ], info_str=(Path, "Scan Deleted Files: %s", "/%s"))
12916         pkt.Reply(NO_LENGTH_CHECK, [
12917                 rec( 8, 4, SequenceNumber ),
12918                 rec( 12, 4, DirectoryBase ),
12919                 rec( 16, 4, ScanItems, var="x" ),
12920                 srec(ScanInfoFileName, req_cond="ncp.ctrl_flags==0x0001", repeat="x" ),
12921                 srec(ScanInfoFileNoName, req_cond="ncp.ctrl_flags==0x0000", repeat="x" ),
12922         ])
12923         pkt.ReqCondSizeVariable()
12924         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12925                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12926                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12927         # 2222/572A, 87/42
12928         pkt = NCP(0x572A, "Purge Salvageable File List", 'file', has_length=0)
12929         pkt.Request(28, [
12930                 rec( 8, 1, NameSpace ),
12931                 rec( 9, 1, Reserved ),
12932                 rec( 10, 2, PurgeFlags ),
12933                 rec( 12, 4, VolumeNumberLong ),
12934                 rec( 16, 4, DirectoryBase ),
12935                 rec( 20, 4, PurgeCount, var="x" ),
12936                 rec( 24, 4, PurgeList, repeat="x" ),
12937         ])
12938         pkt.Reply(16, [
12939                 rec( 8, 4, PurgeCount, var="x" ),
12940                 rec( 12, 4, PurgeCcode, repeat="x" ),
12941         ])
12942         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12943                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12944                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12945         # 2222/572B, 87/43
12946         pkt = NCP(0x572B, "Revoke File Handle Rights", 'file', has_length=0)
12947         pkt.Request(17, [
12948                 rec( 8, 3, Reserved3 ),
12949                 rec( 11, 1, RevQueryFlag ),
12950                 rec( 12, 4, FileHandle ),
12951                 rec( 16, 1, RemoveOpenRights ),
12952         ])
12953         pkt.Reply(13, [
12954                 rec( 8, 4, FileHandle ),
12955                 rec( 12, 1, OpenRights ),
12956         ])
12957         pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
12958                              0x8701, 0x8d00, 0x8f00, 0x9001, 0x9600,
12959                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12960         # 2222/572C, 87/44
12961         pkt = NCP(0x572C, "Update File Handle Rights", 'file', has_length=0)
12962         pkt.Request(24, [
12963                 rec( 8, 2, Reserved2 ),
12964                 rec( 10, 1, VolumeNumber ),
12965                 rec( 11, 1, NameSpace ),
12966                 rec( 12, 4, DirectoryNumber ),
12967                 rec( 16, 2, AccessRightsMaskWord ),
12968                 rec( 18, 2, NewAccessRights ),
12969                 rec( 20, 4, FileHandle, BE ),
12970         ])
12971         pkt.Reply(16, [
12972                 rec( 8, 4, FileHandle, BE ),
12973                 rec( 12, 4, EffectiveRights ),
12974         ])
12975         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
12976                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
12977                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
12978         # 2222/5740, 87/64
12979         pkt = NCP(0x5740, "Read from File", 'file', has_length=0)
12980         pkt.Request(22, [
12981         rec( 8, 4, FileHandle, BE ),
12982         rec( 12, 8, StartOffset64bit, BE ),
12983         rec( 20, 2, NumBytes, BE ),
12984     ])
12985         pkt.Reply(10, [
12986         rec( 8, 2, NumBytes, BE),
12987     ])
12988         pkt.CompletionCodes([0x0000, 0x8300, 0x8800, 0x9300, 0x9500, 0xa201, 0xfd00, 0xff1b])
12989         # 2222/5741, 87/65
12990         pkt = NCP(0x5741, "Write to File", 'file', has_length=0)
12991         pkt.Request(22, [
12992         rec( 8, 4, FileHandle, BE ),
12993         rec( 12, 8, StartOffset64bit, BE ),
12994         rec( 20, 2, NumBytes, BE ),
12995     ])
12996         pkt.Reply(8)
12997         pkt.CompletionCodes([0x0000, 0x8300, 0x8800, 0x9400, 0x9500, 0xa201, 0xfd00, 0xff1b])
12998         # 2222/5742, 87/66
12999         pkt = NCP(0x5742, "Get Current Size of File", 'file', has_length=0)
13000         pkt.Request(12, [
13001         rec( 8, 4, FileHandle, BE ),
13002     ])
13003         pkt.Reply(16, [
13004         rec( 8, 8, FileSize64bit, BE ),
13005     ])
13006         pkt.CompletionCodes([0x0000, 0x7f00, 0x8800, 0x9600, 0xfd02, 0xff01])
13007         # 2222/5743, 87/67
13008         pkt = NCP(0x5743, "Log Physical Record", 'file', has_length=0)
13009         pkt.Request(36, [
13010         rec( 8, 4, LockFlag, BE ),
13011         rec(12, 4, FileHandle, BE ),
13012         rec(16, 8, StartOffset64bit, BE ),
13013         rec(24, 8, Length64bit, BE ),
13014         rec(32, 4, LockTimeout, BE),
13015     ])
13016         pkt.Reply(8)
13017         pkt.CompletionCodes([0x0000, 0x7f00, 0x8800, 0x9600, 0xfb08, 0xfd02, 0xff01])
13018         # 2222/5744, 87/68
13019         pkt = NCP(0x5744, "Release Physical Record", 'file', has_length=0)
13020         pkt.Request(28, [
13021         rec(8, 4, FileHandle, BE ),
13022         rec(12, 8, StartOffset64bit, BE ),
13023         rec(20, 8, Length64bit, BE ),
13024     ])
13025         pkt.Reply(8)
13026         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13027                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13028                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff1a])
13029         # 2222/5745, 87/69
13030         pkt = NCP(0x5745, "Clear Physical Record", 'file', has_length=0)
13031         pkt.Request(28, [
13032         rec(8, 4, FileHandle, BE ),
13033         rec(12, 8, StartOffset64bit, BE ),
13034         rec(20, 8, Length64bit, BE ),
13035     ])
13036         pkt.Reply(8)
13037         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13038                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13039                              0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff1a])
13040         # 2222/5801, 8801
13041         pkt = NCP(0x5801, "Query Volume Audit Status", "auditing", has_length=0)
13042         pkt.Request(12, [
13043                 rec( 8, 4, ConnectionNumber ),
13044         ])
13045         pkt.Reply(40, [
13046                 rec(8, 32, NWAuditStatus ),
13047         ])
13048         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13049                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13050                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13051         # 2222/5802, 8802
13052         pkt = NCP(0x5802, "Add User Audit Property", "auditing", has_length=0)
13053         pkt.Request(25, [
13054                 rec(8, 4, AuditIDType ),
13055                 rec(12, 4, AuditID ),
13056                 rec(16, 4, AuditHandle ),
13057                 rec(20, 4, ObjectID ),
13058                 rec(24, 1, AuditFlag ),
13059         ])
13060         pkt.Reply(8)
13061         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13062                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13063                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13064         # 2222/5803, 8803
13065         pkt = NCP(0x5803, "Add Auditor Access", "auditing", has_length=0)
13066         pkt.Request(8)
13067         pkt.Reply(8)
13068         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13069                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13070                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13071         # 2222/5804, 8804
13072         pkt = NCP(0x5804, "Change Auditor Volume Password", "auditing", has_length=0)
13073         pkt.Request(8)
13074         pkt.Reply(8)
13075         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13076                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13077                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13078         # 2222/5805, 8805
13079         pkt = NCP(0x5805, "Check Auditor Access", "auditing", has_length=0)
13080         pkt.Request(8)
13081         pkt.Reply(8)
13082         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13083                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13084                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13085         # 2222/5806, 8806
13086         pkt = NCP(0x5806, "Delete User Audit Property", "auditing", has_length=0)
13087         pkt.Request(8)
13088         pkt.Reply(8)
13089         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13090                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13091                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13092         # 2222/5807, 8807
13093         pkt = NCP(0x5807, "Disable Auditing On A Volume", "auditing", has_length=0)
13094         pkt.Request(8)
13095         pkt.Reply(8)
13096         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13097                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13098                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13099         # 2222/5808, 8808
13100         pkt = NCP(0x5808, "Enable Auditing On A Volume", "auditing", has_length=0)
13101         pkt.Request(8)
13102         pkt.Reply(8)
13103         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13104                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13105                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13106         # 2222/5809, 8809
13107         pkt = NCP(0x5809, "Query User Being Audited", "auditing", has_length=0)
13108         pkt.Request(8)
13109         pkt.Reply(8)
13110         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13111                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13112                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13113         # 2222/580A, 88,10
13114         pkt = NCP(0x580A, "Read Audit Bit Map", "auditing", has_length=0)
13115         pkt.Request(8)
13116         pkt.Reply(8)
13117         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13118                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13119                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13120         # 2222/580B, 88,11
13121         pkt = NCP(0x580B, "Read Audit File Configuration Header", "auditing", has_length=0)
13122         pkt.Request(8)
13123         pkt.Reply(8)
13124         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13125                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13126                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13127         # 2222/580D, 88,13
13128         pkt = NCP(0x580D, "Remove Auditor Access", "auditing", has_length=0)
13129         pkt.Request(8)
13130         pkt.Reply(8)
13131         pkt.CompletionCodes([0x0000, 0x300, 0x8000, 0x8101, 0x8401, 0x8501,
13132                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13133                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13134         # 2222/580E, 88,14
13135         pkt = NCP(0x580E, "Reset Audit File", "auditing", has_length=0)
13136         pkt.Request(8)
13137         pkt.Reply(8)
13138         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13139                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13140                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13141
13142         # 2222/580F, 88,15
13143         pkt = NCP(0x580F, "Auditing NCP", "auditing", has_length=0)
13144         pkt.Request(8)
13145         pkt.Reply(8)
13146         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13147                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13148                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13149         # 2222/5810, 88,16
13150         pkt = NCP(0x5810, "Write Audit Bit Map", "auditing", has_length=0)
13151         pkt.Request(8)
13152         pkt.Reply(8)
13153         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13154                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13155                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13156         # 2222/5811, 88,17
13157         pkt = NCP(0x5811, "Write Audit File Configuration Header", "auditing", has_length=0)
13158         pkt.Request(8)
13159         pkt.Reply(8)
13160         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13161                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13162                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13163         # 2222/5812, 88,18
13164         pkt = NCP(0x5812, "Change Auditor Volume Password2", "auditing", has_length=0)
13165         pkt.Request(8)
13166         pkt.Reply(8)
13167         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13168                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13169                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13170         # 2222/5813, 88,19
13171         pkt = NCP(0x5813, "Return Audit Flags", "auditing", has_length=0)
13172         pkt.Request(8)
13173         pkt.Reply(8)
13174         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13175                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13176                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13177         # 2222/5814, 88,20
13178         pkt = NCP(0x5814, "Close Old Audit File", "auditing", has_length=0)
13179         pkt.Request(8)
13180         pkt.Reply(8)
13181         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13182                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13183                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13184         # 2222/5816, 88,22
13185         pkt = NCP(0x5816, "Check Level Two Access", "auditing", has_length=0)
13186         pkt.Request(8)
13187         pkt.Reply(8)
13188         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13189                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13190                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13191         # 2222/5817, 88,23
13192         pkt = NCP(0x5817, "Return Old Audit File List", "auditing", has_length=0)
13193         pkt.Request(8)
13194         pkt.Reply(8)
13195         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13196                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13197                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13198         # 2222/5818, 88,24
13199         pkt = NCP(0x5818, "Init Audit File Reads", "auditing", has_length=0)
13200         pkt.Request(8)
13201         pkt.Reply(8)
13202         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13203                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13204                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13205         # 2222/5819, 88,25
13206         pkt = NCP(0x5819, "Read Auditing File", "auditing", has_length=0)
13207         pkt.Request(8)
13208         pkt.Reply(8)
13209         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13210                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13211                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13212         # 2222/581A, 88,26
13213         pkt = NCP(0x581A, "Delete Old Audit File", "auditing", has_length=0)
13214         pkt.Request(8)
13215         pkt.Reply(8)
13216         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13217                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13218                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13219         # 2222/581E, 88,30
13220         pkt = NCP(0x581E, "Restart Volume auditing", "auditing", has_length=0)
13221         pkt.Request(8)
13222         pkt.Reply(8)
13223         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13224                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13225                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13226         # 2222/581F, 88,31
13227         pkt = NCP(0x581F, "Set Volume Password", "auditing", has_length=0)
13228         pkt.Request(8)
13229         pkt.Reply(8)
13230         pkt.CompletionCodes([0x0000, 0x7300, 0x8000, 0x8101, 0x8401, 0x8501,
13231                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13232                              0x9804, 0x9b03, 0x9c03, 0xa600, 0xa801, 0xfd00, 0xff16])
13233         # 2222/5A01, 90/00
13234         pkt = NCP(0x5A01, "Parse Tree", 'file')
13235         pkt.Request(26, [
13236                 rec( 10, 4, InfoMask ),
13237                 rec( 14, 4, Reserved4 ),
13238                 rec( 18, 4, Reserved4 ),
13239                 rec( 22, 4, limbCount ),
13240         ])
13241         pkt.Reply(32, [
13242                 rec( 8, 4, limbCount ),
13243                 rec( 12, 4, ItemsCount ),
13244                 rec( 16, 4, nextLimbScanNum ),
13245                 rec( 20, 4, CompletionCode ),
13246                 rec( 24, 1, FolderFlag ),
13247                 rec( 25, 3, Reserved ),
13248                 rec( 28, 4, DirectoryBase ),
13249         ])
13250         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13251                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13252                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13253         # 2222/5A0A, 90/10
13254         pkt = NCP(0x5A0A, "Get Reference Count from Dir Entry Number", 'file')
13255         pkt.Request(19, [
13256                 rec( 10, 4, VolumeNumberLong ),
13257                 rec( 14, 4, DirectoryBase ),
13258                 rec( 18, 1, NameSpace ),
13259         ])
13260         pkt.Reply(12, [
13261                 rec( 8, 4, ReferenceCount ),
13262         ])
13263         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13264                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13265                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13266         # 2222/5A0B, 90/11
13267         pkt = NCP(0x5A0B, "Get Reference Count from Dir Handle", 'file')
13268         pkt.Request(14, [
13269                 rec( 10, 4, DirHandle ),
13270         ])
13271         pkt.Reply(12, [
13272                 rec( 8, 4, ReferenceCount ),
13273         ])
13274         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13275                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13276                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13277         # 2222/5A0C, 90/12
13278         pkt = NCP(0x5A0C, "Set Compressed File Size", 'file')
13279         pkt.Request(20, [
13280                 rec( 10, 6, FileHandle ),
13281                 rec( 16, 4, SuggestedFileSize ),
13282         ])
13283         pkt.Reply(16, [
13284                 rec( 8, 4, OldFileSize ),
13285                 rec( 12, 4, NewFileSize ),
13286         ])
13287         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13288                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13289                              0x9804, 0x9b03, 0x9c03, 0xfd00, 0xff16])
13290         # 2222/5A80, 90/128
13291         pkt = NCP(0x5A80, "Move File Data To Data Migration", 'file')
13292         pkt.Request(27, [
13293                 rec( 10, 4, VolumeNumberLong ),
13294                 rec( 14, 4, DirectoryEntryNumber ),
13295                 rec( 18, 1, NameSpace ),
13296                 rec( 19, 3, Reserved ),
13297                 rec( 22, 4, SupportModuleID ),
13298                 rec( 26, 1, DMFlags ),
13299         ])
13300         pkt.Reply(8)
13301         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13302                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13303                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13304         # 2222/5A81, 90/129
13305         pkt = NCP(0x5A81, "Data Migration File Information", 'file')
13306         pkt.Request(19, [
13307                 rec( 10, 4, VolumeNumberLong ),
13308                 rec( 14, 4, DirectoryEntryNumber ),
13309                 rec( 18, 1, NameSpace ),
13310         ])
13311         pkt.Reply(24, [
13312                 rec( 8, 4, SupportModuleID ),
13313                 rec( 12, 4, RestoreTime ),
13314                 rec( 16, 4, DMInfoEntries, var="x" ),
13315                 rec( 20, 4, DataSize, repeat="x" ),
13316         ])
13317         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13318                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13319                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13320         # 2222/5A82, 90/130
13321         pkt = NCP(0x5A82, "Volume Data Migration Status", 'file')
13322         pkt.Request(18, [
13323                 rec( 10, 4, VolumeNumberLong ),
13324                 rec( 14, 4, SupportModuleID ),
13325         ])
13326         pkt.Reply(32, [
13327                 rec( 8, 4, NumOfFilesMigrated ),
13328                 rec( 12, 4, TtlMigratedSize ),
13329                 rec( 16, 4, SpaceUsed ),
13330                 rec( 20, 4, LimboUsed ),
13331                 rec( 24, 4, SpaceMigrated ),
13332                 rec( 28, 4, FileLimbo ),
13333         ])
13334         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13335                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13336                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13337         # 2222/5A83, 90/131
13338         pkt = NCP(0x5A83, "Migrator Status Info", 'file')
13339         pkt.Request(10)
13340         pkt.Reply(20, [
13341                 rec( 8, 1, DMPresentFlag ),
13342                 rec( 9, 3, Reserved3 ),
13343                 rec( 12, 4, DMmajorVersion ),
13344                 rec( 16, 4, DMminorVersion ),
13345         ])
13346         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13347                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13348                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13349         # 2222/5A84, 90/132
13350         pkt = NCP(0x5A84, "Data Migration Support Module Information", 'file')
13351         pkt.Request(18, [
13352                 rec( 10, 1, DMInfoLevel ),
13353                 rec( 11, 3, Reserved3),
13354                 rec( 14, 4, SupportModuleID ),
13355         ])
13356         pkt.Reply(NO_LENGTH_CHECK, [
13357                 srec( DMInfoLevel0, req_cond="ncp.dm_info_level == 0x00" ),
13358                 srec( DMInfoLevel1, req_cond="ncp.dm_info_level == 0x01" ),
13359                 srec( DMInfoLevel2, req_cond="ncp.dm_info_level == 0x02" ),
13360         ])
13361         pkt.ReqCondSizeVariable()
13362         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13363                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13364                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13365         # 2222/5A85, 90/133
13366         pkt = NCP(0x5A85, "Move File Data From Data Migration", 'file')
13367         pkt.Request(19, [
13368                 rec( 10, 4, VolumeNumberLong ),
13369                 rec( 14, 4, DirectoryEntryNumber ),
13370                 rec( 18, 1, NameSpace ),
13371         ])
13372         pkt.Reply(8)
13373         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13374                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13375                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13376         # 2222/5A86, 90/134
13377         pkt = NCP(0x5A86, "Get/Set Default Read-Write Support Module ID", 'file')
13378         pkt.Request(18, [
13379                 rec( 10, 1, GetSetFlag ),
13380                 rec( 11, 3, Reserved3 ),
13381                 rec( 14, 4, SupportModuleID ),
13382         ])
13383         pkt.Reply(12, [
13384                 rec( 8, 4, SupportModuleID ),
13385         ])
13386         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13387                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13388                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13389         # 2222/5A87, 90/135
13390         pkt = NCP(0x5A87, "Data Migration Support Module Capacity Request", 'file')
13391         pkt.Request(22, [
13392                 rec( 10, 4, SupportModuleID ),
13393                 rec( 14, 4, VolumeNumberLong ),
13394                 rec( 18, 4, DirectoryBase ),
13395         ])
13396         pkt.Reply(20, [
13397                 rec( 8, 4, BlockSizeInSectors ),
13398                 rec( 12, 4, TotalBlocks ),
13399                 rec( 16, 4, UsedBlocks ),
13400         ])
13401         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13402                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13403                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13404         # 2222/5A88, 90/136
13405         pkt = NCP(0x5A88, "RTDM Request", 'file')
13406         pkt.Request(15, [
13407                 rec( 10, 4, Verb ),
13408                 rec( 14, 1, VerbData ),
13409         ])
13410         pkt.Reply(8)
13411         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13412                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
13413                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13414     # 2222/5C, 91
13415         pkt = NCP(0x5B, "NMAS Graded Authentication", 'nmas')
13416         #Need info on this packet structure
13417         pkt.Request(7)
13418         pkt.Reply(8)
13419         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13420                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13421                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13422         # 2222/5C00, 9201                                                  
13423         pkt = NCP(0x5C01, "SecretStore Services (Ping Server)", 'sss', 0)
13424         #Need info on this packet structure and SecretStore Verbs
13425         pkt.Request(8)
13426         pkt.Reply(8)
13427         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13428                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13429                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13430         # 2222/5C01, 9202
13431         pkt = NCP(0x5C02, "SecretStore Services", 'sss', 0)
13432         #Need info on this packet structure and SecretStore Verbs
13433         pkt.Request(8)
13434         pkt.Reply(8)
13435         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13436                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13437                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13438         # 2222/5C02, 9203
13439         pkt = NCP(0x5C03, "SecretStore Services", 'sss', 0)
13440         #Need info on this packet structure and SecretStore Verbs
13441         pkt.Request(8)
13442         pkt.Reply(8)
13443         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13444                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13445                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13446         # 2222/5C03, 9204
13447         pkt = NCP(0x5C04, "SecretStore Services", 'sss', 0)
13448         #Need info on this packet structure and SecretStore Verbs
13449         pkt.Request(8)
13450         pkt.Reply(8)
13451         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13452                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13453                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13454         # 2222/5C04, 9205
13455         pkt = NCP(0x5C05, "SecretStore Services", 'sss', 0)
13456         #Need info on this packet structure and SecretStore Verbs
13457         pkt.Request(8)
13458         pkt.Reply(8)
13459         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13460                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13461                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13462         # 2222/5C05, 9206
13463         pkt = NCP(0x5C06, "SecretStore Services", 'sss', 0)
13464         #Need info on this packet structure and SecretStore Verbs
13465         pkt.Request(8)
13466         pkt.Reply(8)
13467         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13468                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13469                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13470         # 2222/5C06, 9207
13471         pkt = NCP(0x5C07, "SecretStore Services", 'sss', 0)
13472         #Need info on this packet structure and SecretStore Verbs
13473         pkt.Request(8)
13474         pkt.Reply(8)
13475         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13476                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13477                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13478         # 2222/5C07, 9208
13479         pkt = NCP(0x5C08, "SecretStore Services", 'sss', 0)
13480         #Need info on this packet structure and SecretStore Verbs
13481         pkt.Request(8)
13482         pkt.Reply(8)
13483         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13484                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13485                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13486         # 2222/5C08, 9209
13487         pkt = NCP(0x5C09, "SecretStore Services", 'sss', 0)
13488         #Need info on this packet structure and SecretStore Verbs
13489         pkt.Request(8)
13490         pkt.Reply(8)
13491         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13492                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13493                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13494         # 2222/5C09, 920a
13495         pkt = NCP(0x5C0a, "SecretStore Services", 'sss', 0)
13496         #Need info on this packet structure and SecretStore Verbs
13497         pkt.Request(8)
13498         pkt.Reply(8)
13499         pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
13500                              0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
13501                              0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
13502         # 2222/5E, 9401
13503         pkt = NCP(0x5E01, "NMAS Communications Packet", 'nmas', 0)
13504         pkt.Request(8)
13505         pkt.Reply(8)
13506         pkt.CompletionCodes([0x0000, 0xfb09])
13507         # 2222/5E, 9402
13508         pkt = NCP(0x5E02, "NMAS Communications Packet", 'nmas', 0)
13509         pkt.Request(8)
13510         pkt.Reply(8)
13511         pkt.CompletionCodes([0x0000, 0xfb09])
13512         # 2222/5E, 9403
13513         pkt = NCP(0x5E03, "NMAS Communications Packet", 'nmas', 0)
13514         pkt.Request(8)
13515         pkt.Reply(8)
13516         pkt.CompletionCodes([0x0000, 0xfb09])
13517         # 2222/61, 97
13518         pkt = NCP(0x61, "Get Big Packet NCP Max Packet Size", 'comm')
13519         pkt.Request(10, [
13520                 rec( 7, 2, ProposedMaxSize, BE ),
13521                 rec( 9, 1, SecurityFlag ),
13522         ],info_str=(ProposedMaxSize, "Get Big Max Packet Size - %d", ", %d"))
13523         pkt.Reply(13, [
13524                 rec( 8, 2, AcceptedMaxSize, BE ),
13525                 rec( 10, 2, EchoSocket, BE ),
13526                 rec( 12, 1, SecurityFlag ),
13527         ])
13528         pkt.CompletionCodes([0x0000])
13529         # 2222/63, 99
13530         pkt = NCP(0x63, "Undocumented Packet Burst", 'comm')
13531         pkt.Request(7)
13532         pkt.Reply(8)
13533         pkt.CompletionCodes([0x0000])
13534         # 2222/64, 100
13535         pkt = NCP(0x64, "Undocumented Packet Burst", 'comm')
13536         pkt.Request(7)
13537         pkt.Reply(8)
13538         pkt.CompletionCodes([0x0000])
13539         # 2222/65, 101
13540         pkt = NCP(0x65, "Packet Burst Connection Request", 'comm')
13541         pkt.Request(25, [
13542                 rec( 7, 4, LocalConnectionID, BE ),
13543                 rec( 11, 4, LocalMaxPacketSize, BE ),
13544                 rec( 15, 2, LocalTargetSocket, BE ),
13545                 rec( 17, 4, LocalMaxSendSize, BE ),
13546                 rec( 21, 4, LocalMaxRecvSize, BE ),
13547         ])
13548         pkt.Reply(16, [
13549                 rec( 8, 4, RemoteTargetID, BE ),
13550                 rec( 12, 4, RemoteMaxPacketSize, BE ),
13551         ])
13552         pkt.CompletionCodes([0x0000])
13553         # 2222/66, 102
13554         pkt = NCP(0x66, "Undocumented Packet Burst", 'comm')
13555         pkt.Request(7)
13556         pkt.Reply(8)
13557         pkt.CompletionCodes([0x0000])
13558         # 2222/67, 103
13559         pkt = NCP(0x67, "Undocumented Packet Burst", 'comm')
13560         pkt.Request(7)
13561         pkt.Reply(8)
13562         pkt.CompletionCodes([0x0000])
13563         # 2222/6801, 104/01
13564         pkt = NCP(0x6801, "Ping for NDS NCP", "nds", has_length=0)
13565         pkt.Request(8)
13566         pkt.Reply(8)
13567         pkt.ReqCondSizeVariable()
13568         pkt.CompletionCodes([0x0000, 0x8100, 0xfb04, 0xfe0c])
13569         # 2222/6802, 104/02
13570         #
13571         # XXX - if FraggerHandle is not 0xffffffff, this is not the
13572         # first fragment, so we can only dissect this by reassembling;
13573         # the fields after "Fragment Handle" are bogus for non-0xffffffff
13574         # fragments, so we shouldn't dissect them.
13575         #
13576         # XXX - are there TotalRequest requests in the packet, and
13577         # does each of them have NDSFlags and NDSVerb fields, or
13578         # does only the first one have it?
13579         #
13580         pkt = NCP(0x6802, "Send NDS Fragmented Request/Reply", "nds", has_length=0)
13581         pkt.Request(8)
13582         pkt.Reply(8)
13583         pkt.ReqCondSizeVariable()
13584         pkt.CompletionCodes([0x0000, 0xfd01])
13585         # 2222/6803, 104/03
13586         pkt = NCP(0x6803, "Fragment Close", "nds", has_length=0)
13587         pkt.Request(12, [
13588                 rec( 8, 4, FraggerHandle ),
13589         ])
13590         pkt.Reply(8)
13591         pkt.CompletionCodes([0x0000, 0xff00])
13592         # 2222/6804, 104/04
13593         pkt = NCP(0x6804, "Return Bindery Context", "nds", has_length=0)
13594         pkt.Request(8)
13595         pkt.Reply((9, 263), [
13596                 rec( 8, (1,255), binderyContext ),
13597         ])
13598         pkt.CompletionCodes([0x0000, 0xfe0c, 0xff00])
13599         # 2222/6805, 104/05
13600         pkt = NCP(0x6805, "Monitor NDS Connection", "nds", has_length=0)
13601         pkt.Request(8)
13602         pkt.Reply(8)
13603         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13604         # 2222/6806, 104/06
13605         pkt = NCP(0x6806, "Return NDS Statistics", "nds", has_length=0)
13606         pkt.Request(10, [
13607                 rec( 8, 2, NDSRequestFlags ),
13608         ])
13609         pkt.Reply(8)
13610         #Need to investigate how to decode Statistics Return Value
13611         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13612         # 2222/6807, 104/07
13613         pkt = NCP(0x6807, "Clear NDS Statistics", "nds", has_length=0)
13614         pkt.Request(8)
13615         pkt.Reply(8)
13616         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13617         # 2222/6808, 104/08
13618         pkt = NCP(0x6808, "Reload NDS Software", "nds", has_length=0)
13619         pkt.Request(8)
13620         pkt.Reply(12, [
13621                 rec( 8, 4, NDSStatus ),
13622         ])
13623         pkt.CompletionCodes([0x0000, 0xfb00, 0xfe0c, 0xff00])
13624         # 2222/68C8, 104/200
13625         pkt = NCP(0x68C8, "Query Container Audit Status", "auditing", has_length=0)
13626         pkt.Request(12, [
13627                 rec( 8, 4, ConnectionNumber ),
13628 #               rec( 12, 4, AuditIDType, LE ),
13629 #               rec( 16, 4, AuditID ),
13630 #               rec( 20, 2, BufferSize ),
13631         ])
13632         pkt.Reply(40, [
13633                 rec(8, 32, NWAuditStatus ),
13634         ])
13635         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13636         # 2222/68CA, 104/202
13637         pkt = NCP(0x68CA, "Add Auditor Access", "auditing", has_length=0)
13638         pkt.Request(8)
13639         pkt.Reply(8)
13640         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13641         # 2222/68CB, 104/203
13642         pkt = NCP(0x68CB, "Change Auditor Container Password", "auditing", has_length=0)
13643         pkt.Request(8)
13644         pkt.Reply(8)
13645         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13646         # 2222/68CC, 104/204
13647         pkt = NCP(0x68CC, "Check Auditor Access", "auditing", has_length=0)
13648         pkt.Request(8)
13649         pkt.Reply(8)
13650         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13651         # 2222/68CE, 104/206
13652         pkt = NCP(0x680CE, "Disable Container Auditing", "auditing", has_length=0)
13653         pkt.Request(8)
13654         pkt.Reply(8)
13655         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13656         # 2222/68CF, 104/207
13657         pkt = NCP(0x68CF, "Enable Container Auditing", "auditing", has_length=0)
13658         pkt.Request(8)
13659         pkt.Reply(8)
13660         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13661         # 2222/68D1, 104/209
13662         pkt = NCP(0x68D1, "Read Audit File Header", "auditing", has_length=0)
13663         pkt.Request(8)
13664         pkt.Reply(8)
13665         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13666         # 2222/68D3, 104/211
13667         pkt = NCP(0x68D3, "Remove Auditor Access", "auditing", has_length=0)
13668         pkt.Request(8)
13669         pkt.Reply(8)
13670         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13671         # 2222/68D4, 104/212
13672         pkt = NCP(0x68D4, "Reset Audit File", "auditing", has_length=0)
13673         pkt.Request(8)
13674         pkt.Reply(8)
13675         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13676         # 2222/68D6, 104/214
13677         pkt = NCP(0x68D6, "Write Audit File Configuration Header", "auditing", has_length=0)
13678         pkt.Request(8)
13679         pkt.Reply(8)
13680         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13681         # 2222/68D7, 104/215
13682         pkt = NCP(0x68D7, "Change Auditor Container Password2", "auditing", has_length=0)
13683         pkt.Request(8)
13684         pkt.Reply(8)
13685         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13686         # 2222/68D8, 104/216
13687         pkt = NCP(0x68D8, "Return Audit Flags", "auditing", has_length=0)
13688         pkt.Request(8)
13689         pkt.Reply(8)
13690         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13691         # 2222/68D9, 104/217
13692         pkt = NCP(0x68D9, "Close Old Audit File", "auditing", has_length=0)
13693         pkt.Request(8)
13694         pkt.Reply(8)
13695         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13696         # 2222/68DB, 104/219
13697         pkt = NCP(0x68DB, "Check Level Two Access", "auditing", has_length=0)
13698         pkt.Request(8)
13699         pkt.Reply(8)
13700         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13701         # 2222/68DC, 104/220
13702         pkt = NCP(0x68DC, "Check Object Audited", "auditing", has_length=0)
13703         pkt.Request(8)
13704         pkt.Reply(8)
13705         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13706         # 2222/68DD, 104/221
13707         pkt = NCP(0x68DD, "Change Object Audited", "auditing", has_length=0)
13708         pkt.Request(8)
13709         pkt.Reply(8)
13710         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13711         # 2222/68DE, 104/222
13712         pkt = NCP(0x68DE, "Return Old Audit File List", "auditing", has_length=0)
13713         pkt.Request(8)
13714         pkt.Reply(8)
13715         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13716         # 2222/68DF, 104/223
13717         pkt = NCP(0x68DF, "Init Audit File Reads", "auditing", has_length=0)
13718         pkt.Request(8)
13719         pkt.Reply(8)
13720         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13721         # 2222/68E0, 104/224
13722         pkt = NCP(0x68E0, "Read Auditing File", "auditing", has_length=0)
13723         pkt.Request(8)
13724         pkt.Reply(8)
13725         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13726         # 2222/68E1, 104/225
13727         pkt = NCP(0x68E1, "Delete Old Audit File", "auditing", has_length=0)
13728         pkt.Request(8)
13729         pkt.Reply(8)
13730         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13731         # 2222/68E5, 104/229
13732         pkt = NCP(0x68E5, "Set Audit Password", "auditing", has_length=0)
13733         pkt.Request(8)
13734         pkt.Reply(8)
13735         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13736         # 2222/68E7, 104/231
13737         pkt = NCP(0x68E7, "External Audit Append To File", "auditing", has_length=0)
13738         pkt.Request(8)
13739         pkt.Reply(8)
13740         pkt.CompletionCodes([0x0000, 0xa700, 0xfb00, 0xfe0c, 0xff00])
13741         # 2222/69, 105
13742         pkt = NCP(0x69, "Log File", 'file')
13743         pkt.Request( (12, 267), [
13744                 rec( 7, 1, DirHandle ),
13745                 rec( 8, 1, LockFlag ),
13746                 rec( 9, 2, TimeoutLimit ),
13747                 rec( 11, (1, 256), FilePath ),
13748         ], info_str=(FilePath, "Log File: %s", "/%s"))
13749         pkt.Reply(8)
13750         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x9600, 0xfe0d, 0xff01])
13751         # 2222/6A, 106
13752         pkt = NCP(0x6A, "Lock File Set", 'file')
13753         pkt.Request( 9, [
13754                 rec( 7, 2, TimeoutLimit ),
13755         ])
13756         pkt.Reply(8)
13757         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x9600, 0xfe0d, 0xff01])
13758         # 2222/6B, 107
13759         pkt = NCP(0x6B, "Log Logical Record", 'file')
13760         pkt.Request( (11, 266), [
13761                 rec( 7, 1, LockFlag ),
13762                 rec( 8, 2, TimeoutLimit ),
13763                 rec( 10, (1, 256), SynchName ),
13764         ], info_str=(SynchName, "Log Logical Record: %s", ", %s"))
13765         pkt.Reply(8)
13766         pkt.CompletionCodes([0x0000, 0x7f00, 0x9600, 0xfe0d, 0xff01])
13767         # 2222/6C, 108
13768         pkt = NCP(0x6C, "Log Logical Record", 'file')
13769         pkt.Request( 10, [
13770                 rec( 7, 1, LockFlag ),
13771                 rec( 8, 2, TimeoutLimit ),
13772         ])
13773         pkt.Reply(8)
13774         pkt.CompletionCodes([0x0000, 0x7f00, 0x9600, 0xfe0d, 0xff01])
13775         # 2222/6D, 109
13776         pkt = NCP(0x6D, "Log Physical Record", 'file')
13777         pkt.Request(24, [
13778                 rec( 7, 1, LockFlag ),
13779                 rec( 8, 6, FileHandle ),
13780                 rec( 14, 4, LockAreasStartOffset ),
13781                 rec( 18, 4, LockAreaLen ),
13782                 rec( 22, 2, LockTimeout ),
13783         ])
13784         pkt.Reply(8)
13785         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
13786         # 2222/6E, 110
13787         pkt = NCP(0x6E, "Lock Physical Record Set", 'file')
13788         pkt.Request(10, [
13789                 rec( 7, 1, LockFlag ),
13790                 rec( 8, 2, LockTimeout ),
13791         ])
13792         pkt.Reply(8)
13793         pkt.CompletionCodes([0x0000, 0x7f00, 0x8200, 0x8800, 0x9600, 0xfd02, 0xfe04, 0xff01])
13794         # 2222/6F00, 111/00
13795         pkt = NCP(0x6F00, "Open/Create a Semaphore", 'file', has_length=0)
13796         pkt.Request((10,521), [
13797                 rec( 8, 1, InitialSemaphoreValue ),
13798                 rec( 9, (1, 512), SemaphoreName ),
13799         ], info_str=(SemaphoreName, "Open/Create Semaphore: %s", ", %s"))
13800         pkt.Reply(13, [
13801                   rec( 8, 4, SemaphoreHandle ),
13802                   rec( 12, 1, SemaphoreOpenCount ),
13803         ])
13804         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
13805         # 2222/6F01, 111/01
13806         pkt = NCP(0x6F01, "Examine Semaphore", 'file', has_length=0)
13807         pkt.Request(12, [
13808                 rec( 8, 4, SemaphoreHandle ),
13809         ])
13810         pkt.Reply(10, [
13811                   rec( 8, 1, SemaphoreValue ),
13812                   rec( 9, 1, SemaphoreOpenCount ),
13813         ])
13814         pkt.CompletionCodes([0x0000, 0x9600, 0xff01])
13815         # 2222/6F02, 111/02
13816         pkt = NCP(0x6F02, "Wait On (P) Semaphore", 'file', has_length=0)
13817         pkt.Request(14, [
13818                 rec( 8, 4, SemaphoreHandle ),
13819                 rec( 12, 2, LockTimeout ),
13820         ])
13821         pkt.Reply(8)
13822         pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
13823         # 2222/6F03, 111/03
13824         pkt = NCP(0x6F03, "Signal (V) Semaphore", 'file', has_length=0)
13825         pkt.Request(12, [
13826                 rec( 8, 4, SemaphoreHandle ),
13827         ])
13828         pkt.Reply(8)
13829         pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
13830         # 2222/6F04, 111/04
13831         pkt = NCP(0x6F04, "Close Semaphore", 'file', has_length=0)
13832         pkt.Request(12, [
13833                 rec( 8, 4, SemaphoreHandle ),
13834         ])
13835         pkt.Reply(10, [
13836                 rec( 8, 1, SemaphoreOpenCount ),
13837                 rec( 9, 1, SemaphoreShareCount ),
13838         ])
13839         pkt.CompletionCodes([0x0000, 0x9600, 0xfe04, 0xff01])
13840         # 2222/7201, 114/01
13841         pkt = NCP(0x7201, "Timesync Get Time", 'file')
13842         pkt.Request(10)
13843         pkt.Reply(32,[
13844                 rec( 8, 12, theTimeStruct ),
13845                 rec(20, 8, eventOffset ),
13846                 rec(28, 4, eventTime ),
13847         ])
13848         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13849         # 2222/7202, 114/02
13850         pkt = NCP(0x7202, "Timesync Exchange Time", 'file')
13851         pkt.Request((63,112), [
13852                 rec( 10, 4, protocolFlags ),
13853                 rec( 14, 4, nodeFlags ),
13854                 rec( 18, 8, sourceOriginateTime ),
13855                 rec( 26, 8, targetReceiveTime ),
13856                 rec( 34, 8, targetTransmitTime ),
13857                 rec( 42, 8, sourceReturnTime ),
13858                 rec( 50, 8, eventOffset ),
13859                 rec( 58, 4, eventTime ),
13860                 rec( 62, (1,50), ServerNameLen ),
13861         ], info_str=(ServerNameLen, "Timesync Exchange Time: %s", ", %s"))
13862         pkt.Reply((64,113), [
13863                 rec( 8, 3, Reserved3 ),
13864                 rec( 11, 4, protocolFlags ),
13865                 rec( 15, 4, nodeFlags ),
13866                 rec( 19, 8, sourceOriginateTime ),
13867                 rec( 27, 8, targetReceiveTime ),
13868                 rec( 35, 8, targetTransmitTime ),
13869                 rec( 43, 8, sourceReturnTime ),
13870                 rec( 51, 8, eventOffset ),
13871                 rec( 59, 4, eventTime ),
13872                 rec( 63, (1,50), ServerNameLen ),
13873         ])
13874         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13875         # 2222/7205, 114/05
13876         pkt = NCP(0x7205, "Timesync Get Server List", 'file')
13877         pkt.Request(14, [
13878                 rec( 10, 4, StartNumber ),
13879         ])
13880         pkt.Reply(66, [
13881                 rec( 8, 4, nameType ),
13882                 rec( 12, 48, ServerName ),
13883                 rec( 60, 4, serverListFlags ),
13884                 rec( 64, 2, startNumberFlag ),
13885         ])
13886         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13887         # 2222/7206, 114/06
13888         pkt = NCP(0x7206, "Timesync Set Server List", 'file')
13889         pkt.Request(14, [
13890                 rec( 10, 4, StartNumber ),
13891         ])
13892         pkt.Reply(66, [
13893                 rec( 8, 4, nameType ),
13894                 rec( 12, 48, ServerName ),
13895                 rec( 60, 4, serverListFlags ),
13896                 rec( 64, 2, startNumberFlag ),
13897         ])
13898         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13899         # 2222/720C, 114/12
13900         pkt = NCP(0x720C, "Timesync Get Version", 'file')
13901         pkt.Request(10)
13902         pkt.Reply(12, [
13903                 rec( 8, 4, version ),
13904         ])
13905         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
13906         # 2222/7B01, 123/01
13907         pkt = NCP(0x7B01, "Get Cache Information", 'stats')
13908         pkt.Request(12, [
13909                 rec(10, 1, VersionNumber),
13910                 rec(11, 1, RevisionNumber),
13911         ])
13912         pkt.Reply(288, [
13913                 rec(8, 4, CurrentServerTime, LE),
13914                 rec(12, 1, VConsoleVersion ),
13915                 rec(13, 1, VConsoleRevision ),
13916                 rec(14, 2, Reserved2 ),
13917                 rec(16, 104, Counters ),
13918                 rec(120, 40, ExtraCacheCntrs ),
13919                 rec(160, 40, MemoryCounters ),
13920                 rec(200, 48, TrendCounters ),
13921                 rec(248, 40, CacheInfo ),
13922         ])
13923         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xff00])
13924         # 2222/7B02, 123/02
13925         pkt = NCP(0x7B02, "Get File Server Information", 'stats')
13926         pkt.Request(10)
13927         pkt.Reply(150, [
13928                 rec(8, 4, CurrentServerTime ),
13929                 rec(12, 1, VConsoleVersion ),
13930                 rec(13, 1, VConsoleRevision ),
13931                 rec(14, 2, Reserved2 ),
13932                 rec(16, 4, NCPStaInUseCnt ),
13933                 rec(20, 4, NCPPeakStaInUse ),
13934                 rec(24, 4, NumOfNCPReqs ),
13935                 rec(28, 4, ServerUtilization ),
13936                 rec(32, 96, ServerInfo ),
13937                 rec(128, 22, FileServerCounters ),
13938         ])
13939         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13940         # 2222/7B03, 123/03
13941         pkt = NCP(0x7B03, "NetWare File System Information", 'stats')
13942         pkt.Request(11, [
13943                 rec(10, 1, FileSystemID ),
13944         ])
13945         pkt.Reply(68, [
13946                 rec(8, 4, CurrentServerTime ),
13947                 rec(12, 1, VConsoleVersion ),
13948                 rec(13, 1, VConsoleRevision ),
13949                 rec(14, 2, Reserved2 ),
13950                 rec(16, 52, FileSystemInfo ),
13951         ])
13952         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13953         # 2222/7B04, 123/04
13954         pkt = NCP(0x7B04, "User Information", 'stats')
13955         pkt.Request(14, [
13956                 rec(10, 4, ConnectionNumber ),
13957         ])
13958         pkt.Reply((85, 132), [
13959                 rec(8, 4, CurrentServerTime ),
13960                 rec(12, 1, VConsoleVersion ),
13961                 rec(13, 1, VConsoleRevision ),
13962                 rec(14, 2, Reserved2 ),
13963                 rec(16, 68, UserInformation ),
13964                 rec(84, (1, 48), UserName ),
13965         ])
13966         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13967         # 2222/7B05, 123/05
13968         pkt = NCP(0x7B05, "Packet Burst Information", 'stats')
13969         pkt.Request(10)
13970         pkt.Reply(216, [
13971                 rec(8, 4, CurrentServerTime ),
13972                 rec(12, 1, VConsoleVersion ),
13973                 rec(13, 1, VConsoleRevision ),
13974                 rec(14, 2, Reserved2 ),
13975                 rec(16, 200, PacketBurstInformation ),
13976         ])
13977         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13978         # 2222/7B06, 123/06
13979         pkt = NCP(0x7B06, "IPX SPX Information", 'stats')
13980         pkt.Request(10)
13981         pkt.Reply(94, [
13982                 rec(8, 4, CurrentServerTime ),
13983                 rec(12, 1, VConsoleVersion ),
13984                 rec(13, 1, VConsoleRevision ),
13985                 rec(14, 2, Reserved2 ),
13986                 rec(16, 34, IPXInformation ),
13987                 rec(50, 44, SPXInformation ),
13988         ])
13989         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
13990         # 2222/7B07, 123/07
13991         pkt = NCP(0x7B07, "Garbage Collection Information", 'stats')
13992         pkt.Request(10)
13993         pkt.Reply(40, [
13994                 rec(8, 4, CurrentServerTime ),
13995                 rec(12, 1, VConsoleVersion ),
13996                 rec(13, 1, VConsoleRevision ),
13997                 rec(14, 2, Reserved2 ),
13998                 rec(16, 4, FailedAllocReqCnt ),
13999                 rec(20, 4, NumberOfAllocs ),
14000                 rec(24, 4, NoMoreMemAvlCnt ),
14001                 rec(28, 4, NumOfGarbageColl ),
14002                 rec(32, 4, FoundSomeMem ),
14003                 rec(36, 4, NumOfChecks ),
14004         ])
14005         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14006         # 2222/7B08, 123/08
14007         pkt = NCP(0x7B08, "CPU Information", 'stats')
14008         pkt.Request(14, [
14009                 rec(10, 4, CPUNumber ),
14010         ])
14011         pkt.Reply(51, [
14012                 rec(8, 4, CurrentServerTime ),
14013                 rec(12, 1, VConsoleVersion ),
14014                 rec(13, 1, VConsoleRevision ),
14015                 rec(14, 2, Reserved2 ),
14016                 rec(16, 4, NumberOfCPUs ),
14017                 rec(20, 31, CPUInformation ),
14018         ])
14019         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14020         # 2222/7B09, 123/09
14021         pkt = NCP(0x7B09, "Volume Switch Information", 'stats')
14022         pkt.Request(14, [
14023                 rec(10, 4, StartNumber )
14024         ])
14025         pkt.Reply(28, [
14026                 rec(8, 4, CurrentServerTime ),
14027                 rec(12, 1, VConsoleVersion ),
14028                 rec(13, 1, VConsoleRevision ),
14029                 rec(14, 2, Reserved2 ),
14030                 rec(16, 4, TotalLFSCounters ),
14031                 rec(20, 4, CurrentLFSCounters, var="x"),
14032                 rec(24, 4, LFSCounters, repeat="x"),
14033         ])
14034         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14035         # 2222/7B0A, 123/10
14036         pkt = NCP(0x7B0A, "Get NLM Loaded List", 'stats')
14037         pkt.Request(14, [
14038                 rec(10, 4, StartNumber )
14039         ])
14040         pkt.Reply(28, [
14041                 rec(8, 4, CurrentServerTime ),
14042                 rec(12, 1, VConsoleVersion ),
14043                 rec(13, 1, VConsoleRevision ),
14044                 rec(14, 2, Reserved2 ),
14045                 rec(16, 4, NLMcount ),
14046                 rec(20, 4, NLMsInList, var="x" ),
14047                 rec(24, 4, NLMNumbers, repeat="x" ),
14048         ])
14049         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14050         # 2222/7B0B, 123/11
14051         pkt = NCP(0x7B0B, "NLM Information", 'stats')
14052         pkt.Request(14, [
14053                 rec(10, 4, NLMNumber ),
14054         ])
14055         pkt.Reply((79,841), [
14056                 rec(8, 4, CurrentServerTime ),
14057                 rec(12, 1, VConsoleVersion ),
14058                 rec(13, 1, VConsoleRevision ),
14059                 rec(14, 2, Reserved2 ),
14060                 rec(16, 60, NLMInformation ),
14061                 rec(76, (1,255), FileName ),
14062                 rec(-1, (1,255), Name ),
14063                 rec(-1, (1,255), Copyright ),
14064         ])
14065         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14066         # 2222/7B0C, 123/12
14067         pkt = NCP(0x7B0C, "Get Directory Cache Information", 'stats')
14068         pkt.Request(10)
14069         pkt.Reply(72, [
14070                 rec(8, 4, CurrentServerTime ),
14071                 rec(12, 1, VConsoleVersion ),
14072                 rec(13, 1, VConsoleRevision ),
14073                 rec(14, 2, Reserved2 ),
14074                 rec(16, 56, DirCacheInfo ),
14075         ])
14076         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14077         # 2222/7B0D, 123/13
14078         pkt = NCP(0x7B0D, "Get Operating System Version Information", 'stats')
14079         pkt.Request(10)
14080         pkt.Reply(70, [
14081                 rec(8, 4, CurrentServerTime ),
14082                 rec(12, 1, VConsoleVersion ),
14083                 rec(13, 1, VConsoleRevision ),
14084                 rec(14, 2, Reserved2 ),
14085                 rec(16, 1, OSMajorVersion ),
14086                 rec(17, 1, OSMinorVersion ),
14087                 rec(18, 1, OSRevision ),
14088                 rec(19, 1, AccountVersion ),
14089                 rec(20, 1, VAPVersion ),
14090                 rec(21, 1, QueueingVersion ),
14091                 rec(22, 1, SecurityRestrictionVersion ),
14092                 rec(23, 1, InternetBridgeVersion ),
14093                 rec(24, 4, MaxNumOfVol ),
14094                 rec(28, 4, MaxNumOfConn ),
14095                 rec(32, 4, MaxNumOfUsers ),
14096                 rec(36, 4, MaxNumOfNmeSps ),
14097                 rec(40, 4, MaxNumOfLANS ),
14098                 rec(44, 4, MaxNumOfMedias ),
14099                 rec(48, 4, MaxNumOfStacks ),
14100                 rec(52, 4, MaxDirDepth ),
14101                 rec(56, 4, MaxDataStreams ),
14102                 rec(60, 4, MaxNumOfSpoolPr ),
14103                 rec(64, 4, ServerSerialNumber ),
14104                 rec(68, 2, ServerAppNumber ),
14105         ])
14106         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14107         # 2222/7B0E, 123/14
14108         pkt = NCP(0x7B0E, "Get Active Connection List by Type", 'stats')
14109         pkt.Request(15, [
14110                 rec(10, 4, StartConnNumber ),
14111                 rec(14, 1, ConnectionType ),
14112         ])
14113         pkt.Reply(528, [
14114                 rec(8, 4, CurrentServerTime ),
14115                 rec(12, 1, VConsoleVersion ),
14116                 rec(13, 1, VConsoleRevision ),
14117                 rec(14, 2, Reserved2 ),
14118                 rec(16, 512, ActiveConnBitList ),
14119         ])
14120         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfd01, 0xff00])
14121         # 2222/7B0F, 123/15
14122         pkt = NCP(0x7B0F, "Get NLM Resource Tag List", 'stats')
14123         pkt.Request(18, [
14124                 rec(10, 4, NLMNumber ),
14125                 rec(14, 4, NLMStartNumber ),
14126         ])
14127         pkt.Reply(37, [
14128                 rec(8, 4, CurrentServerTime ),
14129                 rec(12, 1, VConsoleVersion ),
14130                 rec(13, 1, VConsoleRevision ),
14131                 rec(14, 2, Reserved2 ),
14132                 rec(16, 4, TtlNumOfRTags ),
14133                 rec(20, 4, CurNumOfRTags ),
14134                 rec(24, 13, RTagStructure ),
14135         ])
14136         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14137         # 2222/7B10, 123/16
14138         pkt = NCP(0x7B10, "Enumerate Connection Information from Connection List", 'stats')
14139         pkt.Request(22, [
14140                 rec(10, 1, EnumInfoMask),
14141                 rec(11, 3, Reserved3),
14142                 rec(14, 4, itemsInList, var="x"),
14143                 rec(18, 4, connList, repeat="x"),
14144         ])
14145         pkt.Reply(NO_LENGTH_CHECK, [
14146                 rec(8, 4, CurrentServerTime ),
14147                 rec(12, 1, VConsoleVersion ),
14148                 rec(13, 1, VConsoleRevision ),
14149                 rec(14, 2, Reserved2 ),
14150                 rec(16, 4, ItemsInPacket ),
14151                 srec(netAddr, req_cond="ncp.enum_info_transport==TRUE"),
14152                 srec(timeInfo, req_cond="ncp.enum_info_time==TRUE"),
14153                 srec(nameInfo, req_cond="ncp.enum_info_name==TRUE"),
14154                 srec(lockInfo, req_cond="ncp.enum_info_lock==TRUE"),
14155                 srec(printInfo, req_cond="ncp.enum_info_print==TRUE"),
14156                 srec(statsInfo, req_cond="ncp.enum_info_stats==TRUE"),
14157                 srec(acctngInfo, req_cond="ncp.enum_info_account==TRUE"),
14158                 srec(authInfo, req_cond="ncp.enum_info_auth==TRUE"),
14159         ])
14160         pkt.ReqCondSizeVariable()
14161         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14162         # 2222/7B11, 123/17
14163         pkt = NCP(0x7B11, "Enumerate NCP Service Network Addresses", 'stats')
14164         pkt.Request(14, [
14165                 rec(10, 4, SearchNumber ),
14166         ])
14167         pkt.Reply(60, [
14168                 rec(8, 4, CurrentServerTime ),
14169                 rec(12, 1, VConsoleVersion ),
14170                 rec(13, 1, VConsoleRevision ),
14171                 rec(14, 2, ServerInfoFlags ),
14172                 rec(16, 16, GUID ),
14173                 rec(32, 4, NextSearchNum ),
14174                 rec(36, 4, ItemsInPacket, var="x"),
14175                 rec(40, 20, NCPNetworkAddress, repeat="x" ),
14176         ])
14177         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14178         # 2222/7B14, 123/20
14179         pkt = NCP(0x7B14, "Active LAN Board List", 'stats')
14180         pkt.Request(14, [
14181                 rec(10, 4, StartNumber ),
14182         ])
14183         pkt.Reply(28, [
14184                 rec(8, 4, CurrentServerTime ),
14185                 rec(12, 1, VConsoleVersion ),
14186                 rec(13, 1, VConsoleRevision ),
14187                 rec(14, 2, Reserved2 ),
14188                 rec(16, 4, MaxNumOfLANS ),
14189                 rec(20, 4, ItemsInPacket, var="x"),
14190                 rec(24, 4, BoardNumbers, repeat="x"),
14191         ])
14192         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14193         # 2222/7B15, 123/21
14194         pkt = NCP(0x7B15, "LAN Configuration Information", 'stats')
14195         pkt.Request(14, [
14196                 rec(10, 4, BoardNumber ),
14197         ])
14198         pkt.Reply(152, [
14199                 rec(8, 4, CurrentServerTime ),
14200                 rec(12, 1, VConsoleVersion ),
14201                 rec(13, 1, VConsoleRevision ),
14202                 rec(14, 2, Reserved2 ),
14203                 rec(16,136, LANConfigInfo ),
14204         ])
14205         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14206         # 2222/7B16, 123/22
14207         pkt = NCP(0x7B16, "LAN Common Counters Information", 'stats')
14208         pkt.Request(18, [
14209                 rec(10, 4, BoardNumber ),
14210                 rec(14, 4, BlockNumber ),
14211         ])
14212         pkt.Reply(86, [
14213                 rec(8, 4, CurrentServerTime ),
14214                 rec(12, 1, VConsoleVersion ),
14215                 rec(13, 1, VConsoleRevision ),
14216                 rec(14, 1, StatMajorVersion ),
14217                 rec(15, 1, StatMinorVersion ),
14218                 rec(16, 4, TotalCommonCnts ),
14219                 rec(20, 4, TotalCntBlocks ),
14220                 rec(24, 4, CustomCounters ),
14221                 rec(28, 4, NextCntBlock ),
14222                 rec(32, 54, CommonLanStruc ),
14223         ])
14224         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14225         # 2222/7B17, 123/23
14226         pkt = NCP(0x7B17, "LAN Custom Counters Information", 'stats')
14227         pkt.Request(18, [
14228                 rec(10, 4, BoardNumber ),
14229                 rec(14, 4, StartNumber ),
14230         ])
14231         pkt.Reply(25, [
14232                 rec(8, 4, CurrentServerTime ),
14233                 rec(12, 1, VConsoleVersion ),
14234                 rec(13, 1, VConsoleRevision ),
14235                 rec(14, 2, Reserved2 ),
14236                 rec(16, 4, NumOfCCinPkt, var="x"),
14237                 rec(20, 5, CustomCntsInfo, repeat="x"),
14238         ])
14239         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14240         # 2222/7B18, 123/24
14241         pkt = NCP(0x7B18, "LAN Name Information", 'stats')
14242         pkt.Request(14, [
14243                 rec(10, 4, BoardNumber ),
14244         ])
14245         pkt.Reply(19, [
14246                 rec(8, 4, CurrentServerTime ),
14247                 rec(12, 1, VConsoleVersion ),
14248                 rec(13, 1, VConsoleRevision ),
14249                 rec(14, 2, Reserved2 ),
14250                 rec(16, 3, BoardNameStruct ),
14251         ])
14252         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14253         # 2222/7B19, 123/25
14254         pkt = NCP(0x7B19, "LSL Information", 'stats')
14255         pkt.Request(10)
14256         pkt.Reply(90, [
14257                 rec(8, 4, CurrentServerTime ),
14258                 rec(12, 1, VConsoleVersion ),
14259                 rec(13, 1, VConsoleRevision ),
14260                 rec(14, 2, Reserved2 ),
14261                 rec(16, 74, LSLInformation ),
14262         ])
14263         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14264         # 2222/7B1A, 123/26
14265         pkt = NCP(0x7B1A, "LSL Logical Board Statistics", 'stats')
14266         pkt.Request(14, [
14267                 rec(10, 4, BoardNumber ),
14268         ])
14269         pkt.Reply(28, [
14270                 rec(8, 4, CurrentServerTime ),
14271                 rec(12, 1, VConsoleVersion ),
14272                 rec(13, 1, VConsoleRevision ),
14273                 rec(14, 2, Reserved2 ),
14274                 rec(16, 4, LogTtlTxPkts ),
14275                 rec(20, 4, LogTtlRxPkts ),
14276                 rec(24, 4, UnclaimedPkts ),
14277         ])
14278         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14279         # 2222/7B1B, 123/27
14280         pkt = NCP(0x7B1B, "MLID Board Information", 'stats')
14281         pkt.Request(14, [
14282                 rec(10, 4, BoardNumber ),
14283         ])
14284         pkt.Reply(44, [
14285                 rec(8, 4, CurrentServerTime ),
14286                 rec(12, 1, VConsoleVersion ),
14287                 rec(13, 1, VConsoleRevision ),
14288                 rec(14, 1, Reserved ),
14289                 rec(15, 1, NumberOfProtocols ),
14290                 rec(16, 28, MLIDBoardInfo ),
14291         ])
14292         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14293         # 2222/7B1E, 123/30
14294         pkt = NCP(0x7B1E, "Get Media Manager Object Information", 'stats')
14295         pkt.Request(14, [
14296                 rec(10, 4, ObjectNumber ),
14297         ])
14298         pkt.Reply(212, [
14299                 rec(8, 4, CurrentServerTime ),
14300                 rec(12, 1, VConsoleVersion ),
14301                 rec(13, 1, VConsoleRevision ),
14302                 rec(14, 2, Reserved2 ),
14303                 rec(16, 196, GenericInfoDef ),
14304         ])
14305         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14306         # 2222/7B1F, 123/31
14307         pkt = NCP(0x7B1F, "Get Media Manager Objects List", 'stats')
14308         pkt.Request(15, [
14309                 rec(10, 4, StartNumber ),
14310                 rec(14, 1, MediaObjectType ),
14311         ])
14312         pkt.Reply(28, [
14313                 rec(8, 4, CurrentServerTime ),
14314                 rec(12, 1, VConsoleVersion ),
14315                 rec(13, 1, VConsoleRevision ),
14316                 rec(14, 2, Reserved2 ),
14317                 rec(16, 4, nextStartingNumber ),
14318                 rec(20, 4, ObjectCount, var="x"),
14319                 rec(24, 4, ObjectID, repeat="x"),
14320         ])
14321         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14322         # 2222/7B20, 123/32
14323         pkt = NCP(0x7B20, "Get Media Manager Object Childrens List", 'stats')
14324         pkt.Request(22, [
14325                 rec(10, 4, StartNumber ),
14326                 rec(14, 1, MediaObjectType ),
14327                 rec(15, 3, Reserved3 ),
14328                 rec(18, 4, ParentObjectNumber ),
14329         ])
14330         pkt.Reply(28, [
14331                 rec(8, 4, CurrentServerTime ),
14332                 rec(12, 1, VConsoleVersion ),
14333                 rec(13, 1, VConsoleRevision ),
14334                 rec(14, 2, Reserved2 ),
14335                 rec(16, 4, nextStartingNumber ),
14336                 rec(20, 4, ObjectCount, var="x" ),
14337                 rec(24, 4, ObjectID, repeat="x" ),
14338         ])
14339         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14340         # 2222/7B21, 123/33
14341         pkt = NCP(0x7B21, "Get Volume Segment List", 'stats')
14342         pkt.Request(14, [
14343                 rec(10, 4, VolumeNumberLong ),
14344         ])
14345         pkt.Reply(32, [
14346                 rec(8, 4, CurrentServerTime ),
14347                 rec(12, 1, VConsoleVersion ),
14348                 rec(13, 1, VConsoleRevision ),
14349                 rec(14, 2, Reserved2 ),
14350                 rec(16, 4, NumOfSegments, var="x" ),
14351                 rec(20, 12, Segments, repeat="x" ),
14352         ])
14353         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14354         # 2222/7B22, 123/34
14355         pkt = NCP(0x7B22, "Get Volume Information by Level", 'stats')
14356         pkt.Request(15, [
14357                 rec(10, 4, VolumeNumberLong ),
14358                 rec(14, 1, InfoLevelNumber ),
14359         ])
14360         pkt.Reply(NO_LENGTH_CHECK, [
14361                 rec(8, 4, CurrentServerTime ),
14362                 rec(12, 1, VConsoleVersion ),
14363                 rec(13, 1, VConsoleRevision ),
14364                 rec(14, 2, Reserved2 ),
14365                 rec(16, 1, InfoLevelNumber ),
14366                 rec(17, 3, Reserved3 ),
14367                 srec(VolInfoStructure, req_cond="ncp.info_level_num==0x01"),
14368                 srec(VolInfo2Struct, req_cond="ncp.info_level_num==0x02"),
14369         ])
14370         pkt.ReqCondSizeVariable()
14371         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14372         # 2222/7B28, 123/40
14373         pkt = NCP(0x7B28, "Active Protocol Stacks", 'stats')
14374         pkt.Request(14, [
14375                 rec(10, 4, StartNumber ),
14376         ])
14377         pkt.Reply(48, [
14378                 rec(8, 4, CurrentServerTime ),
14379                 rec(12, 1, VConsoleVersion ),
14380                 rec(13, 1, VConsoleRevision ),
14381                 rec(14, 2, Reserved2 ),
14382                 rec(16, 4, MaxNumOfLANS ),
14383                 rec(20, 4, StackCount, var="x" ),
14384                 rec(24, 4, nextStartingNumber ),
14385                 rec(28, 20, StackInfo, repeat="x" ),
14386         ])
14387         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14388         # 2222/7B29, 123/41
14389         pkt = NCP(0x7B29, "Get Protocol Stack Configuration Information", 'stats')
14390         pkt.Request(14, [
14391                 rec(10, 4, StackNumber ),
14392         ])
14393         pkt.Reply((37,164), [
14394                 rec(8, 4, CurrentServerTime ),
14395                 rec(12, 1, VConsoleVersion ),
14396                 rec(13, 1, VConsoleRevision ),
14397                 rec(14, 2, Reserved2 ),
14398                 rec(16, 1, ConfigMajorVN ),
14399                 rec(17, 1, ConfigMinorVN ),
14400                 rec(18, 1, StackMajorVN ),
14401                 rec(19, 1, StackMinorVN ),
14402                 rec(20, 16, ShortStkName ),
14403                 rec(36, (1,128), StackFullNameStr ),
14404         ])
14405         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14406         # 2222/7B2A, 123/42
14407         pkt = NCP(0x7B2A, "Get Protocol Stack Statistics Information", 'stats')
14408         pkt.Request(14, [
14409                 rec(10, 4, StackNumber ),
14410         ])
14411         pkt.Reply(38, [
14412                 rec(8, 4, CurrentServerTime ),
14413                 rec(12, 1, VConsoleVersion ),
14414                 rec(13, 1, VConsoleRevision ),
14415                 rec(14, 2, Reserved2 ),
14416                 rec(16, 1, StatMajorVersion ),
14417                 rec(17, 1, StatMinorVersion ),
14418                 rec(18, 2, ComCnts ),
14419                 rec(20, 4, CounterMask ),
14420                 rec(24, 4, TotalTxPkts ),
14421                 rec(28, 4, TotalRxPkts ),
14422                 rec(32, 4, IgnoredRxPkts ),
14423                 rec(36, 2, CustomCnts ),
14424         ])
14425         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14426         # 2222/7B2B, 123/43
14427         pkt = NCP(0x7B2B, "Get Protocol Stack Custom Information", 'stats')
14428         pkt.Request(18, [
14429                 rec(10, 4, StackNumber ),
14430                 rec(14, 4, StartNumber ),
14431         ])
14432         pkt.Reply(25, [
14433                 rec(8, 4, CurrentServerTime ),
14434                 rec(12, 1, VConsoleVersion ),
14435                 rec(13, 1, VConsoleRevision ),
14436                 rec(14, 2, Reserved2 ),
14437                 rec(16, 4, CustomCount, var="x" ),
14438                 rec(20, 5, CustomCntsInfo, repeat="x" ),
14439         ])
14440         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14441         # 2222/7B2C, 123/44
14442         pkt = NCP(0x7B2C, "Get Protocol Stack Numbers by Media Number", 'stats')
14443         pkt.Request(14, [
14444                 rec(10, 4, MediaNumber ),
14445         ])
14446         pkt.Reply(24, [
14447                 rec(8, 4, CurrentServerTime ),
14448                 rec(12, 1, VConsoleVersion ),
14449                 rec(13, 1, VConsoleRevision ),
14450                 rec(14, 2, Reserved2 ),
14451                 rec(16, 4, StackCount, var="x" ),
14452                 rec(20, 4, StackNumber, repeat="x" ),
14453         ])
14454         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14455         # 2222/7B2D, 123/45
14456         pkt = NCP(0x7B2D, "Get Protocol Stack Numbers by LAN Board Number", 'stats')
14457         pkt.Request(14, [
14458                 rec(10, 4, BoardNumber ),
14459         ])
14460         pkt.Reply(24, [
14461                 rec(8, 4, CurrentServerTime ),
14462                 rec(12, 1, VConsoleVersion ),
14463                 rec(13, 1, VConsoleRevision ),
14464                 rec(14, 2, Reserved2 ),
14465                 rec(16, 4, StackCount, var="x" ),
14466                 rec(20, 4, StackNumber, repeat="x" ),
14467         ])
14468         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14469         # 2222/7B2E, 123/46
14470         pkt = NCP(0x7B2E, "Get Media Name by Media Number", 'stats')
14471         pkt.Request(14, [
14472                 rec(10, 4, MediaNumber ),
14473         ])
14474         pkt.Reply((17,144), [
14475                 rec(8, 4, CurrentServerTime ),
14476                 rec(12, 1, VConsoleVersion ),
14477                 rec(13, 1, VConsoleRevision ),
14478                 rec(14, 2, Reserved2 ),
14479                 rec(16, (1,128), MediaName ),
14480         ])
14481         pkt.CompletionCodes([0x0000, 0x7900, 0x7e01, 0xfb06, 0xff00])
14482         # 2222/7B2F, 123/47
14483         pkt = NCP(0x7B2F, "Get Loaded Media Number", 'stats')
14484         pkt.Request(10)
14485         pkt.Reply(28, [
14486                 rec(8, 4, CurrentServerTime ),
14487                 rec(12, 1, VConsoleVersion ),
14488                 rec(13, 1, VConsoleRevision ),
14489                 rec(14, 2, Reserved2 ),
14490                 rec(16, 4, MaxNumOfMedias ),
14491                 rec(20, 4, MediaListCount, var="x" ),
14492                 rec(24, 4, MediaList, repeat="x" ),
14493         ])
14494         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14495         # 2222/7B32, 123/50
14496         pkt = NCP(0x7B32, "Get General Router and SAP Information", 'stats')
14497         pkt.Request(10)
14498         pkt.Reply(37, [
14499                 rec(8, 4, CurrentServerTime ),
14500                 rec(12, 1, VConsoleVersion ),
14501                 rec(13, 1, VConsoleRevision ),
14502                 rec(14, 2, Reserved2 ),
14503                 rec(16, 2, RIPSocketNumber ),
14504                 rec(18, 2, Reserved2 ),
14505                 rec(20, 1, RouterDownFlag ),
14506                 rec(21, 3, Reserved3 ),
14507                 rec(24, 1, TrackOnFlag ),
14508                 rec(25, 3, Reserved3 ),
14509                 rec(28, 1, ExtRouterActiveFlag ),
14510                 rec(29, 3, Reserved3 ),
14511                 rec(32, 2, SAPSocketNumber ),
14512                 rec(34, 2, Reserved2 ),
14513                 rec(36, 1, RpyNearestSrvFlag ),
14514         ])
14515         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14516         # 2222/7B33, 123/51
14517         pkt = NCP(0x7B33, "Get Network Router Information", 'stats')
14518         pkt.Request(14, [
14519                 rec(10, 4, NetworkNumber ),
14520         ])
14521         pkt.Reply(26, [
14522                 rec(8, 4, CurrentServerTime ),
14523                 rec(12, 1, VConsoleVersion ),
14524                 rec(13, 1, VConsoleRevision ),
14525                 rec(14, 2, Reserved2 ),
14526                 rec(16, 10, KnownRoutes ),
14527         ])
14528         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14529         # 2222/7B34, 123/52
14530         pkt = NCP(0x7B34, "Get Network Routers Information", 'stats')
14531         pkt.Request(18, [
14532                 rec(10, 4, NetworkNumber),
14533                 rec(14, 4, StartNumber ),
14534         ])
14535         pkt.Reply(34, [
14536                 rec(8, 4, CurrentServerTime ),
14537                 rec(12, 1, VConsoleVersion ),
14538                 rec(13, 1, VConsoleRevision ),
14539                 rec(14, 2, Reserved2 ),
14540                 rec(16, 4, NumOfEntries, var="x" ),
14541                 rec(20, 14, RoutersInfo, repeat="x" ),
14542         ])
14543         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14544         # 2222/7B35, 123/53
14545         pkt = NCP(0x7B35, "Get Known Networks Information", 'stats')
14546         pkt.Request(14, [
14547                 rec(10, 4, StartNumber ),
14548         ])
14549         pkt.Reply(30, [
14550                 rec(8, 4, CurrentServerTime ),
14551                 rec(12, 1, VConsoleVersion ),
14552                 rec(13, 1, VConsoleRevision ),
14553                 rec(14, 2, Reserved2 ),
14554                 rec(16, 4, NumOfEntries, var="x" ),
14555                 rec(20, 10, KnownRoutes, repeat="x" ),
14556         ])
14557         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14558         # 2222/7B36, 123/54
14559         pkt = NCP(0x7B36, "Get Server Information", 'stats')
14560         pkt.Request((15,64), [
14561                 rec(10, 2, ServerType ),
14562                 rec(12, 2, Reserved2 ),
14563                 rec(14, (1,50), ServerNameLen ),
14564         ], info_str=(ServerNameLen, "Get Server Information: %s", ", %s"))
14565         pkt.Reply(30, [
14566                 rec(8, 4, CurrentServerTime ),
14567                 rec(12, 1, VConsoleVersion ),
14568                 rec(13, 1, VConsoleRevision ),
14569                 rec(14, 2, Reserved2 ),
14570                 rec(16, 12, ServerAddress ),
14571                 rec(28, 2, HopsToNet ),
14572         ])
14573         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14574         # 2222/7B37, 123/55
14575         pkt = NCP(0x7B37, "Get Server Sources Information", 'stats')
14576         pkt.Request((19,68), [
14577                 rec(10, 4, StartNumber ),
14578                 rec(14, 2, ServerType ),
14579                 rec(16, 2, Reserved2 ),
14580                 rec(18, (1,50), ServerNameLen ),
14581         ], info_str=(ServerNameLen, "Get Server Sources Info: %s", ", %s"))
14582         pkt.Reply(32, [
14583                 rec(8, 4, CurrentServerTime ),
14584                 rec(12, 1, VConsoleVersion ),
14585                 rec(13, 1, VConsoleRevision ),
14586                 rec(14, 2, Reserved2 ),
14587                 rec(16, 4, NumOfEntries, var="x" ),
14588                 rec(20, 12, ServersSrcInfo, repeat="x" ),
14589         ])
14590         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14591         # 2222/7B38, 123/56
14592         pkt = NCP(0x7B38, "Get Known Servers Information", 'stats')
14593         pkt.Request(16, [
14594                 rec(10, 4, StartNumber ),
14595                 rec(14, 2, ServerType ),
14596         ])
14597         pkt.Reply(35, [
14598                 rec(8, 4, CurrentServerTime ),
14599                 rec(12, 1, VConsoleVersion ),
14600                 rec(13, 1, VConsoleRevision ),
14601                 rec(14, 2, Reserved2 ),
14602                 rec(16, 4, NumOfEntries, var="x" ),
14603                 rec(20, 15, KnownServStruc, repeat="x" ),
14604         ])
14605         pkt.CompletionCodes([0x0000, 0x0108, 0x7e01, 0xfb06, 0xff00])
14606         # 2222/7B3C, 123/60
14607         pkt = NCP(0x7B3C, "Get Server Set Commands Information", 'stats')
14608         pkt.Request(14, [
14609                 rec(10, 4, StartNumber ),
14610         ])
14611         pkt.Reply(NO_LENGTH_CHECK, [
14612                 rec(8, 4, CurrentServerTime ),
14613                 rec(12, 1, VConsoleVersion ),
14614                 rec(13, 1, VConsoleRevision ),
14615                 rec(14, 2, Reserved2 ),
14616                 rec(16, 4, TtlNumOfSetCmds ),
14617                 rec(20, 4, nextStartingNumber ),
14618                 rec(24, 1, SetCmdType ),
14619                 rec(25, 3, Reserved3 ),
14620                 rec(28, 1, SetCmdCategory ),
14621                 rec(29, 3, Reserved3 ),
14622                 rec(32, 1, SetCmdFlags ),
14623                 rec(33, 3, Reserved3 ),
14624                 rec(36, 100, SetCmdName ),
14625                 rec(136, 4, SetCmdValueNum ),
14626         ])                
14627         pkt.ReqCondSizeVariable()
14628         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14629         # 2222/7B3D, 123/61
14630         pkt = NCP(0x7B3D, "Get Server Set Categories", 'stats')
14631         pkt.Request(14, [
14632                 rec(10, 4, StartNumber ),
14633         ])
14634         pkt.Reply(NO_LENGTH_CHECK, [
14635                 rec(8, 4, CurrentServerTime ),
14636                 rec(12, 1, VConsoleVersion ),
14637                 rec(13, 1, VConsoleRevision ),
14638                 rec(14, 2, Reserved2 ),
14639                 rec(16, 4, NumberOfSetCategories ),
14640                 rec(20, 4, nextStartingNumber ),
14641                 rec(24, PROTO_LENGTH_UNKNOWN, CategoryName ),
14642         ])
14643         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14644         # 2222/7B3E, 123/62
14645         pkt = NCP(0x7B3E, "Get Server Set Commands Information By Name", 'stats')
14646         pkt.Request(NO_LENGTH_CHECK, [
14647                 rec(10, PROTO_LENGTH_UNKNOWN, SetParmName ),
14648         ], info_str=(SetParmName, "Get Server Set Command Info for: %s", ", %s"))
14649         pkt.Reply(NO_LENGTH_CHECK, [
14650                 rec(8, 4, CurrentServerTime ),
14651                 rec(12, 1, VConsoleVersion ),
14652                 rec(13, 1, VConsoleRevision ),
14653                 rec(14, 2, Reserved2 ),
14654         rec(16, 4, TtlNumOfSetCmds ),
14655         rec(20, 4, nextStartingNumber ),
14656         rec(24, 1, SetCmdType ),
14657         rec(25, 3, Reserved3 ),
14658         rec(28, 1, SetCmdCategory ),
14659         rec(29, 3, Reserved3 ),
14660         rec(32, 1, SetCmdFlags ),
14661         rec(33, 3, Reserved3 ),
14662         rec(36, PROTO_LENGTH_UNKNOWN, SetCmdName ),
14663                 #rec(136, 4, SetCmdValueNum ),
14664         ])                
14665         pkt.ReqCondSizeVariable()
14666         pkt.CompletionCodes([0x0000, 0x7e01, 0xfb06, 0xff00])
14667         # 2222/7B46, 123/70
14668         pkt = NCP(0x7B46, "Get Current Compressing File", 'stats')
14669         pkt.Request(14, [
14670                 rec(10, 4, VolumeNumberLong ),
14671         ])
14672         pkt.Reply(56, [
14673                 rec(8, 4, ParentID ),
14674                 rec(12, 4, DirectoryEntryNumber ),
14675                 rec(16, 4, compressionStage ),
14676                 rec(20, 4, ttlIntermediateBlks ),
14677                 rec(24, 4, ttlCompBlks ),
14678                 rec(28, 4, curIntermediateBlks ),
14679                 rec(32, 4, curCompBlks ),
14680                 rec(36, 4, curInitialBlks ),
14681                 rec(40, 4, fileFlags ),
14682                 rec(44, 4, projectedCompSize ),
14683                 rec(48, 4, originalSize ),
14684                 rec(52, 4, compressVolume ),
14685         ])
14686         pkt.CompletionCodes([0x0000, 0x7e00, 0x7901, 0xfb06, 0xff00])
14687         # 2222/7B47, 123/71
14688         pkt = NCP(0x7B47, "Get Current DeCompressing File Info List", 'stats')
14689         pkt.Request(14, [
14690                 rec(10, 4, VolumeNumberLong ),
14691         ])
14692         pkt.Reply(28, [
14693                 rec(8, 4, FileListCount ),
14694                 rec(12, 16, FileInfoStruct ),
14695         ])
14696         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
14697         # 2222/7B48, 123/72
14698         pkt = NCP(0x7B48, "Get Compression and Decompression Time and Counts", 'stats')
14699         pkt.Request(14, [
14700                 rec(10, 4, VolumeNumberLong ),
14701         ])
14702         pkt.Reply(64, [
14703                 rec(8, 56, CompDeCompStat ),
14704         ])
14705         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb06, 0xff00])
14706         # 2222/8301, 131/01
14707         pkt = NCP(0x8301, "RPC Load an NLM", 'fileserver')
14708         pkt.Request(NO_LENGTH_CHECK, [
14709                 rec(10, 4, NLMLoadOptions ),
14710                 rec(14, 16, Reserved16 ),
14711                 rec(30, PROTO_LENGTH_UNKNOWN, PathAndName ),
14712         ], info_str=(PathAndName, "RPC Load NLM: %s", ", %s"))
14713         pkt.Reply(12, [
14714                 rec(8, 4, RPCccode ),
14715         ])
14716         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14717         # 2222/8302, 131/02
14718         pkt = NCP(0x8302, "RPC Unload an NLM", 'fileserver')
14719         pkt.Request(NO_LENGTH_CHECK, [
14720                 rec(10, 20, Reserved20 ),
14721                 rec(30, PROTO_LENGTH_UNKNOWN, NLMName ),
14722         ], info_str=(NLMName, "RPC Unload NLM: %s", ", %s"))
14723         pkt.Reply(12, [
14724                 rec(8, 4, RPCccode ),
14725         ])
14726         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14727         # 2222/8303, 131/03
14728         pkt = NCP(0x8303, "RPC Mount Volume", 'fileserver')
14729         pkt.Request(NO_LENGTH_CHECK, [
14730                 rec(10, 20, Reserved20 ),
14731                 rec(30, PROTO_LENGTH_UNKNOWN, VolumeNameStringz ),
14732         ], info_str=(VolumeNameStringz, "RPC Mount Volume: %s", ", %s"))
14733         pkt.Reply(32, [
14734                 rec(8, 4, RPCccode),
14735                 rec(12, 16, Reserved16 ),
14736                 rec(28, 4, VolumeNumberLong ),
14737         ])
14738         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14739         # 2222/8304, 131/04
14740         pkt = NCP(0x8304, "RPC Dismount Volume", 'fileserver')
14741         pkt.Request(NO_LENGTH_CHECK, [
14742                 rec(10, 20, Reserved20 ),
14743                 rec(30, PROTO_LENGTH_UNKNOWN, VolumeNameStringz ),
14744         ], info_str=(VolumeNameStringz, "RPC Dismount Volume: %s", ", %s"))
14745         pkt.Reply(12, [
14746                 rec(8, 4, RPCccode ),
14747         ])
14748         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14749         # 2222/8305, 131/05
14750         pkt = NCP(0x8305, "RPC Add Name Space To Volume", 'fileserver')
14751         pkt.Request(NO_LENGTH_CHECK, [
14752                 rec(10, 20, Reserved20 ),
14753                 rec(30, PROTO_LENGTH_UNKNOWN, AddNameSpaceAndVol ),
14754         ], info_str=(AddNameSpaceAndVol, "RPC Add Name Space to Volume: %s", ", %s"))
14755         pkt.Reply(12, [
14756                 rec(8, 4, RPCccode ),
14757         ])
14758         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14759         # 2222/8306, 131/06
14760         pkt = NCP(0x8306, "RPC Set Command Value", 'fileserver')
14761         pkt.Request(NO_LENGTH_CHECK, [
14762                 rec(10, 1, SetCmdType ),
14763                 rec(11, 3, Reserved3 ),
14764                 rec(14, 4, SetCmdValueNum ),
14765                 rec(18, 12, Reserved12 ),
14766                 rec(30, PROTO_LENGTH_UNKNOWN, SetCmdName ),
14767                 #
14768                 # XXX - optional string, if SetCmdType is 0
14769                 #
14770         ], info_str=(SetCmdName, "RPC Set Command Value: %s", ", %s"))
14771         pkt.Reply(12, [
14772                 rec(8, 4, RPCccode ),
14773         ])
14774         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14775         # 2222/8307, 131/07
14776         pkt = NCP(0x8307, "RPC Execute NCF File", 'fileserver')
14777         pkt.Request(NO_LENGTH_CHECK, [
14778                 rec(10, 20, Reserved20 ),
14779                 rec(30, PROTO_LENGTH_UNKNOWN, PathAndName ),
14780         ], info_str=(PathAndName, "RPC Execute NCF File: %s", ", %s"))
14781         pkt.Reply(12, [
14782                 rec(8, 4, RPCccode ),
14783         ])
14784         pkt.CompletionCodes([0x0000, 0x7e00, 0xfb07, 0xff00])
14785 if __name__ == '__main__':
14786 #       import profile
14787 #       filename = "ncp.pstats"
14788 #       profile.run("main()", filename)
14789 #
14790 #       import pstats
14791 #       sys.stdout = msg
14792 #       p = pstats.Stats(filename)
14793 #
14794 #       print "Stats sorted by cumulative time"
14795 #       p.strip_dirs().sort_stats('cumulative').print_stats()
14796 #
14797 #       print "Function callees"
14798 #       p.print_callees()
14799         main()